MessageQueue
- 프로세스(프로그램)간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나
- MOM(Message Oriented Middleware: 비동기 메시지를 사용하는 프로그램 간의 데이터 송수신을 의미)을 구현한 시스템
- 작업을 늦출 수 있는 유연성을 제공
- 메시지를 교환할때 AMQP(Advanced Message Queuing Protocol: MQ의 오픈소스에 기반한 표준 프로토콜)을 이용
- kafka, RabbitMQ, Active MQ, AWS SQS, Java JMS등이 존재
MessageQueue를 사용해야 하는 이유
- 프로세스간의 연관이 많아지는 구조에서(SOA, MSA등) 서비스간 결합도를 낮추고, 비동기 요청, 성능, 안정성 등 여러가지 이점이 있어서 메시징 시스템을 사용하게 된다.
MessageQueue의 장점
- 비동기 : Queue에 넣기 때문에 나중에 처리할 수 있음(각 서비스는 비동기 방식으로 메시지를 보내기만 하면, Message Broker에서 순서 보장, 메시지 전송 보장등을 처리)
- 비동조 : Application과 분리할 수 있음(서비스간의 결합성이 낮아지므로 각자의 비즈니스 로직에만 집중할 수 있음)
- 탄력성 : 일부가 실패 시 전체는 영향을 받지 않습니다(메시징 시스템이 잠깐 다운되어도 각 서비스에 직접적인 영향을 미치지 않음)
- 과잉 : 실패할 경우 재실행이 가능합니다
- 확장성 : 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다.
MessageQueue의 단점
- 함수 호출, 공유 메모리 사용 방식 보다 메시징 시스템을 사용했을 때 호출 구간이 늘어나므로 네트워크 비용 발생
- Message Broker 구축, 예를 들면 kafka 클러스터 구축에 필요한 금전, 인적자원에 대한 비용
메시지 큐 사용처
- 다른 곳의 API로부터 데이터 송수신
- 다양한 Application에서 비동기 통신 가능
- 이메일 발송 및 문서 업로드 가능
- 많은 양의 프로세스 처리
MessageQueue를 사용하면 좋은 상황
- Failover
- 서버간 데이터를 주고 받을 때 항상 시스템 장애를 염두해두어야 하는데, 서버에 문제나 네트워크의 문제에 대하여 Failover 할 수 있음
- 서버 부하가 많은 작업
- 서버 부하가 많은 경우 원하는 만큼의 메시지를 소비하는 것이 가능함
- 부하 분산에 용이
- 한 큐에 여러 consumer가 존재할 수 있기 때문에 부하 분산이 가능하고, Scaling 대응에 적합함
- 데이터 손실 방지
- consumer가 broker에 처리 완료에 대한 응답을 주지 않은 경우(메시지 처리 중 문제가 발생하는 경우) 브로커는 큐에 메시지를 다시 넣어 처리할 수 있게 할 수 있음