Amazon MQ는 클라우드의 메시지 브로커로 쉽게 마이그레이션 할 수 있도록 하는 관리형 메시지 브로커 서비스이다.
Amazon MQ는 Apache ActiveMQ 및 RabbitMQ 엔진 유형을 지원한다.
MQ를 생각하면 주로 SQS와 MQ가 떠오를텐데, SQS는 AWS의 독점 기술이기 때문에 클라우드 네이티브 서비스이다.
각자 사용하는 API세트가 따로 있다.
온프레미스에서 기존 애플리케이션을 실행하는 경우 개방형 프로토콜인 MQTT, AMQP, STOMP, WSS Openwire등을 사용하면 된다.
그리고 애플리케이션을 클라우드에서 마이그레이션 하는경우 SQS, SNS 프로토콜 혹은 API를 사용하기 위해 애플리케이션을 다시 구축하고 싶지 않고 MQTT, AMQP 등과 같은 기존에 쓰던 프로토콜을 사용하고 싶을 수 있는데 이때 MQ를 사용한다.
MQ는 무한 확장이 가능한 SQS나 SNS처럼 확장성이 크지 않다.
MQ는 서버에서 실행되므로 서버 문제가 있을 수 있기 때문이다.
고가용성을 위해 장애 조치와 함께 다중 AZ 설정이 가능하다.
MQ는 SQS처럼 보이는 대기열 기능과 SNS처럼 보이는 주제 기능을 단일 브로커의 일부로 제공한다.
예를 들어, us-east-1라는 리전에 us-east-1a와 us-east-1b 두 개의 가용 영역이 있다고 해보자.
영역 하나는 활성 상태 그리고 또 다른 영역은 대기 상태이다.
이제 두 영역에 각각 활성, 대기 상태인 Amazon MQ 브로커를 추가한다.
장애 조치 실행을 위해 백엔드 스토리지에 Amazon EFS도 정의한다.
EFS는 네트워크 파일 시스템으로 다중 가용 영역에 마운트할 수 있기 때문에, 이렇게 설정하면
장애 조치가 일어날 때마다 대기 상태 영역 역시 Amazon EFS에 마운트되므로
첫 번째 활성 대기열과 동일한 데이터를 가질 수 있고 따라서 장애 조치도 올바르게 실행된다.
클라이언트가 Amazon MQ 브로커와 통신해서 장애 조치가 실행되는 경우에도
Amazon EFS 덕분에 데이터가 저장된다.
Message Broker: 목적지에 안전하게 메시지를 건네주는 중개자 역할
Destination: 목적지에 배달될 2가지 모델 Queue, Topic
Queue: 메세지를 받기 위해 Consumer간 경쟁, 연결된 순서대로 메세지 제공
Topic: Pub/Sub 모델, 구독자 모두에게 메세지를 제공
Producer: 메세지를 생성하고 발송하는 주체, 이 메세지는 Queue에 저장
주의할 점은 Producer는 Queue에 직접 접근하지 않고, 항상 Exchange를 통해 접근
Consumer: 메세지를 수신하는 주체, Consumer는 Queue에 직접 접근하여 메세지를 가져옴
Queue: Producer들이 발송한 메세지들이 Consumer가 소비하기 전까지 보관되는 장소
Queue는 이름으로 구분
Exchange: Producer들에게서 전달받은 메세지들을 어떤 Queue들에게 발송할지를 결정하는 객체
Binding: Exchane에게 메세지를 라우팅 할 규칙을 지정하는 행위
Direct Exchange: Message의 Routing Key와 정확히 일치하는 Binding된 Queue로 Routing
Fanout Exchange: Binding된 모든 Queue에 Message를 Routing
Topic Exchange: 특정 Routing Pattern이 일치하는 Queue로 Routing
Header Exchange: key-value로 정의된 Header 속성을 통한 Routing