AWS MQ

임상규·2023년 10월 27일
1

AWS

목록 보기
27/33
post-custom-banner

MQ

  • 분산 애플리케이션을 위한 통신 및 조정 기능을 제공
  • 시스템의 서로 다른 부분이 통신하고 비동기식으로 작업을 처리
  • 메시지를 임시로 저장하는 간단한 버퍼를 제공
  • 메시지를 전송 및 수신하기 위해 소프트웨어 구성 요소가 대기열에 연결하도록 허용하는 엔드포인트를 제공
  • 메시지를 전송하려면 생산자라고 부르는 구성 요소가 메시지를 대기열에 추가
  • 해당 메시지는 소비자라고 부르는 구성 요소가 메시지를 검색하고 이를 사용해 어떤 작업을
    수행할 때까지 대기열에 저장

Queue

  • 라인의 시작 부분에서 시작하여 순차적으로 처리하면서 처리되기를 기다리는 일련의 항목
    (FIFO: First In First Out)
  • 메시지 대기열은 응용 프로그램 간에 전송되는 메시지 대기열 (비동기식)

Message

  • 발신자와 수신자 애플리케이션 간에 전송되는 데이터
  • 기본적으로 맨 위에 일부 헤더가 있는 바이트 배열

Message Queue의 동작 방식

  1. Producer는 Message를 Exchange에게 보냄
    ➡️ Exchage를 생성할 때 Exchange의 Type을 정의
  2. Exchange는 Routing Key를 사용하여 적절한 Queue로 Routing을 진행
    ➡️ Routing은 Exchange Type에 따라 전략이 바뀜
  3. Exchange - Queue와 Binding이 완료
    ➡️ Message 속성에 따라 적절한 Queue로 Routing
  4. Message는 Consumer가 소비할 때 까지 Queue에 대기
  5. Consumer는 Message를 소비

Amazon MQ 란?

Amazon MQ는 클라우드의 메시지 브로커로 쉽게 마이그레이션 할 수 있도록 하는 관리형 메시지 브로커 서비스이다.

Amazon MQ는 Apache ActiveMQ 및 RabbitMQ 엔진 유형을 지원한다.

MQ? SQS?

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 덕분에 데이터가 저장된다.

Apache ActiveMQ

  • Apache ActiveMQ는 가장 대중적이고 강력한 오픈 소스 메세징 그리고 통합 패턴서버이다.
  • ActivceMQ는 JMS를 지원하는 클라이언트를 포함하는 브로커, 자바 뿐만 아니라 다양한 언어를 이용하는 시스템간의 통신을 지원한다.
  • 클러스터링 기능 및 DB 그리고 FileSystem을 통해 각 시스템 간의 일관성 및 지속성을 유지
  • ActiveMQ는 자바로 만든 오픈소스 메시지 브로커
  • JMS 1.1을 통해 자바 뿐만 아니라 다른 언어를 사용하는 클라이언트를 지원
  • 클라이언트 간 메시지를 송수신 할 수 있는 오픈 소스 Broker(JMS 서버)

Message Broker: 목적지에 안전하게 메시지를 건네주는 중개자 역할
Destination: 목적지에 배달될 2가지 모델 Queue, Topic
Queue: 메세지를 받기 위해 Consumer간 경쟁, 연결된 순서대로 메세지 제공
Topic: Pub/Sub 모델, 구독자 모두에게 메세지를 제공

RabbitMQ

  • AMQP를 구현한 오픈소스 메세지 브로커
  • Producer에서 Consumer로 메세지(요청)를 전달할 때 중간에서 브로커 역할

Producer: 메세지를 생성하고 발송하는 주체, 이 메세지는 Queue에 저장
      주의할 점은 Producer는 Queue에 직접 접근하지 않고, 항상 Exchange를 통해 접근

Consumer: 메세지를 수신하는 주체, Consumer는 Queue에 직접 접근하여 메세지를 가져옴

Queue: Producer들이 발송한 메세지들이 Consumer가 소비하기 전까지 보관되는 장소
      Queue는 이름으로 구분

Exchange: Producer들에게서 전달받은 메세지들을 어떤 Queue들에게 발송할지를 결정하는 객체

Binding: Exchane에게 메세지를 라우팅 할 규칙을 지정하는 행위

RabbitMQ Exchange

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

profile
Junior DevOps Engineer
post-custom-banner

0개의 댓글