MQ에 대해 알아보자!


1. 개요

미들웨어를 운영하고 있다면 메시지큐에 대해서 한번쯤은 들어봤을 것이다.

MQ 의 개념과 대표적인 솔루션들을 정리해보도록한다.


2. MQ 란?

 MQ (Message Queue) 란 메시지 기반의 미들웨어로 메시지를 이용하여 여러 어플리케이션, 시스템, 서비스들을 연결해주는 솔루션이다.

 MOM(Message Oriented Middleware) 를 구현한 솔루션으로 비동기 메시지를 사용하는 서비스들 사이에서 데이터를 교환해주는 역할을 한다.

 Producer(sender) 가 메시지를 큐에 전송하면 Consumer(receiver) 가 처리하는 방식으로, producer 와 consumer 에 message 프로세스가 추가되는 것이 특징이다.

 MQ를 사용하여 비동기로 요청을 처리하고 queue 에 저장하여 consumer 에게 병목을 줄여줄 수 있으니 MQ 는 무조건 좋은 것일까? 각 제품별로 물론 장단점은 있을 것이다.


3. MQ 대표 솔루션

3.1. IBM MQ

  • 가장 많이 사용되는 상용 MQ 제품으로 표준 JMS 메시징 기반으로 MQTT 프로토콜을 지원한다.

3.2. Apache ActiveMQ

  • Java 기반의 JMS Queue 를 지원하는 오픈소스로 MQTT, AMQP, OpenWire, STOMP 프로토콜을 지원한다.
  • 다양한 언어를 지원하며 클러스터링이 가능하다. 단, 모니터링 도구는 없다.
  • REST API를 통해 웹기반 메시징 API를 지원하며 Ajax를 통해 순수한 DHTML을 사용한 웹스트리밍 지원을 한다.

3.3. Rabbit MQ

  • 고성능을 목표로 AMQP 프로토콜을 사용하여 개발된 MQ 로 Erlang OTP 기반으로 개발되었다.
  • 실시간 모니터링이 용이하고 다양한 언어 및 OS 지원, RabbitMQ 서버간 클러스터링이 가능하다.

3.4. Kafka

  • LinkedIn에서 구직정보들을 처리할수 있는 플랫폼으로 개발이 시작되었다.
  • 실시간 로그 처리에 특화되어 설계된 시스템으로 개발되어 타 MQ 대비 TPS가 매우 우수하나 특화된 솔루션이기 때문에 타 MQ 솔루션에서제공하는 다양한 기능들은 제공되지 않는다.
  • AMQP, JMS 이 아닌 단순 메시지 헤더를 이용한 TCP 통신이다.
  • MQ는 broker가 producer 에게 메세지를 받아서 consumer에게 push해 주는 방식인데 반해, Kafka는 consumer가 broker로부터 직접 메시지를 가지고 가는 pull 방식으로 동작하기 때문에 consumer는 자신의 처리능력만큼의 메시지만 broker로부터 가져오기 때문에 최적의 성능을 낼 수 있다.
  • 많은 데이터 전송과 최대 처리량을 유지하기에 대량 데이터 스트리밍에 적합하다.
  • 상태 변경이 시간순으로 기록되어하는 응용 프로그램인 이벤트 소싱(Evenet Sourcing) 저장소로 적합하다.