22.6.13 Message Queue

서태욱·2022년 6월 13일
0

🤔  메시지?

인풋을 통해 들어오는 프로세스에 대한 다양한 요청, 이벤트 등을 메시지라고 한다.

메시지 큐

메시지 큐(Message Queue)는 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법이다. 브로커라고 불리기도 한다.

모니터링, 로그, 이벤트 메시지 등 아주 거대한 양의 데이터를 다룰 일이 생김에 따라 활용한다.

Queue는 여러 컴포넌트들이 데이터를 생성, 저장, 사용하는 과정에서 일종의 버퍼 역할을 한다. 이로 인해 프로듀서와 컨슈머 간의 속도가 다를 때, 둘 중 어느 한 컴포넌트에 장애가 발생했을 때 대응이 가능해 장애의 전파를 막을 수 있다.

장점

  • 비동기(Asynchronous): 큐에 넣어두기 때문에 문제가 생겨도 나중에 처리할 수 있다.
  • 분리 또는 비동조(Decoupling): 애플리케이션과 분리할 수 있다.
  • 탄력성(Resilience): 일부가 실패 시 전체에 영향을 받지 않는다.
  • 중복(Redundancy): 실패할 경우 재실행이 가능하다.
  • 보증(Guarantees): 작업이 처리된 것을 확인할 수 있다.
  • 확장성(Scalable): 다수의 프로세스들이 큐에 메시지를 보낼 수 있다.

종류

1. Rabbit MQ

ISO 응용 계층의 MOM(message oriented middleware) 표준인 AMQT 프로토콜을 구현한 프로그램이다. 신뢰성, 안정성을 충족할 수 있는 다양한 기능을 제공한다.

라우팅이 유연해 메세지 큐가 도착하기 전에 라우팅되며, 플러그인을 통해 더 복잡한 라우팅도 가능하다.

로컬 네트워크에 있는 여러 RabbitMQ를 서버를 논리적으로 클러스터링할 수 있고, 논리적인 브로커도 가능하다. UI가 있어 편리하게 사용 하며 관리할 수 있고, 거의 모든 언어와 운영체제를 지원한다. 오픈소스이기 때문에 상업적 지원도 가능하다.

2. Kafka

대용량 실시간 로그 처리에 특화된 메시징 시스템이다. (따라서 범용 메시징 시스템에서 제공하는 다양한 기능이 제공되지 않는다는 단점도 있다.) 분산 시스템을 기본으로 설계 되었기 때문에, 기존 메시징 시스템에 비해 분산 및 복제 구성을 손쉽게 할 수 있다. AMQP 프로토콜이나JSM API를 사용하지 않고, 단순한 메시지 header를 가진 TCP 기반 프로토콜을 사용한다.

프로듀서가 다수의 메시지를 batch 형태로 브로커에게 한번에 전달할 수 있다는 점이 기존 메시징 시스템과 차별화된다. 또한 메시지를 메모리가 아닌 파일 시스템에 저장한다는 점도 다르다. 이렇게 되면 별도 설정을 하지 않아도 데이터의 영속성이 보장되며, 메시지가 많이 쌓여도 성능이 크게 저하되지 않는다는 장점이 있다.

3. ActiveMQ(JMS)

MOM을 자바에서 지원하는 표준 API다. JMS는 다른 자바 애플리케이션끼리 통신이 가능하지만, 다른 MOM의 통신은 불가능하다.

4. ZeroMQ

메시징 라이브러리로, 많은 수고를 들이지 않고도 복잡한 커뮤니케이션 시스템을 설계할 수 있도록 해준다. 다른 대부분의 AMQP와 단위가 다를 정도로 속도가 빠르다.

이는 과도하게 복잡한 프로토콜이 없고, 지능적인 메시지 묶음을 활용하기 때문이다. 또한 비동기 send 호출만 하면, 메시지를 별도 thread의 큐에 넣고 필요한 모든 작업을 해준다.

profile
re:START

0개의 댓글