메시지 큐(Message Queue)

최현진·2023년 1월 12일
0

ㅇMpeon

목록 보기
9/9

Message Queue란

Message queue(MQ)란 메세지 지향 미들웨어(Message Oriented Middelware:MOM)을 구현한 시스템으로써, MOM이란 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서 데이터 송수신하는것을 의미한다.
IPC 도구중 하나로 시스템 프로그래밍에서 사용되며 각 데이터를 메시지 형태로 생성,전달이 가능하게끔 Queue 데이터 구조를 이용, 메시지 큐는 커널에서 전역적으로 관리되고 모든프로세스에서 접근 가능하도록 구성이 되어있어 하나의 메시지큐 서버가 커널에 요청해 메시지 큐를 작성하게 되면 해당식별자를 알고있는 모든 프로세서가 동일한 메시지 큐에 접근하여 메시지를 공유가능.
서로 다른 프로세스나 프로그램 사이에서 데이터를 송수신할때에는 AMQP(Advanced Message Queuing Protocol)을 이용하는데, 이 AMQP는 ISO응용계층 MOM의 표준이기도 하다.

AMQP

AMQP는 주로 JMS(Java Message Service)와 비교되곤 하는데, JMS는 MOM을 JAVA에서 지원하는 표준 API로써 JMS는 다른 Java Application사이에서의 통신을 지원하지만 다른 MOM(AMQP,SMTP)끼리는 통신을 할수 없다.
하지만 AMQP는 프로토콜만 일치한다면 다른 AMQP를 이용한 Application과도 통신이 가능하다, AMQP를 사용하면 다른 벤더 사이에 메시지를 전송하는것 또한 가능한데 JMS가 API를 제공하는것과는 달리 AMQP는 wire-protocol을 제공하는데 이는 octet stream을 이용해서 다른 네트워크 사이에 데이터를 전송할수있는 포맷으로 사용하게 된다.

wire-protocol

wire-protocol이란 데이터를 포인트에서 포인트로 가져오는 개념으로써 복수의 어플리케이션이 상호운용해야할 필요가 있는 경우에 사용한다, 일반적으로 물리적 계층보다 상위의 통신 프로토콜을 나타내며(TCP,UDP와 같은) 전송수준의 transport protocol과는 달리 응용프로그램수준에서 정보를 교환하기 위한 일반적인 방법을 설명하기위해 자주 쓰인다

octet stream

8비트로 된 데이터라는 뜻을 가지고있다, 확장자이다.

메시지 큐의 장점

  • 비동기 : 큐(Queue)에 넣기때문에 나중에 처리할수가 있다.
  • 비동조 : 애플리케이션과 분리할수 있다.
  • 탄력성 : 일부가 실패시 전체에 영향을 받지 않는다.
  • 과잉 : 실패할시에 재실행이 가능하다
  • 보증 : 작업이 처리 되었다는것을 확인할수있다.
  • 확장성 : 다수의 프로세스들이 큐에 메시지를 보낼 수 있다.

메시지 큐잉(Message Queuing)은 대용량 데이터를 처리하기 위한 배치 작업이나, 채팅 서비스,비동기 데이터등을 처리할때 사용한다.
프로세스 단위로 처리하는 웹 요청이나 일반적인 프로그램들을 만들어서 사용하는데, 사용자가 많아지거나 데이터가 많아지면요청에 대한 응답을 기다리는 수가 증가하다 나중에는 대기 시간이 지연되어서,서비스가 정상적으로 이용할수 없는 수준이 되기 때문에 기존에 분산되어있는 데이터 처리를 한곳에 집중하면서, 메시지 브로커를 두어서 필요한 프로그램에 분산작업 시키는것이 그 목적이다.

메시지큐의 사용

  • 다른곳의 API로부터 데이터 송수신 가능
  • 다양한 애플리케이션에서 비동기 통신이 가능
  • 이메일 발송 및 문서 업로드가 가능
  • 많은양의 프로세스를 처리 가능

JMS vs AMQP

AMQP

  • AMQP는 ISO 응용 계층의 MOM표준
  • AMQP는 프로토콜만 맞다면 다른 AMQP를 이용한 프로그램들과 통신이 가능(SMTP도 가능)

JMS

  • JMS는 MOM을 JAVA에서 지원하는 표준 API ( AMQP != JMS)
  • JMS는 다른 자바 애플리케이션과는 통신이 가능하지만, 다른 MOM들과는 통신이 불가능함(AMQP, SMTP등)
  • ActiveMQ의 JMS의 라이브러리를 사용한 다른 자바 애플리케이션끼리 통신이가능함, 하지만 다른 자바 애플리케이션(ActiveMQ를 사용하지않은)의 JMS와는 통신이 불가능하다.
  • JMS AMQP라이브러리를 지원하지는 않음

오픈소스 메시지 큐의 사용

대표적인 메시지 큐 시스템으로는 4가지가 있다.

  • RabbitMQ
  • ActiveMQ
  • ZeroMQ
  • Kafka
    위의 4가지 시스템은 모두 비동기통신을 제공하고 보내는사람과 받는 사람을 구분하지만 용도와 업무에 따라 다른 목적을 가지고있다.

RabbitMQ

RabbitMQ는 AMQP 프로토콜을 구현해 놓은 프로그램으로서 빠르고 쉽게 구성할수있으며 직관적인 장점이 있다

  • 신뢰성,안정성과 성능을 충족할수 있도록 다양한 기능을 제공
  • Message Queue가 도착하기전에 라우팅되며 플러그인을 통해 더 복잡한 라우팅도 가능
  • 클러스터링 : 로컬 네트워크에 있는 여러 RabbitMQ서버를 논리적으로 클러스터링 할수있고 논리적인 브로커도 가능
  • 관리 UI가 있어 편하게 관리 가능
  • 모든 언어와 운영체제를 지원
  • 오픈소스

ActiveMQ

ActiveMQ는 자바로 만든 오픈소스 메시지 브로커로, JMS1.1을 통해 자바뿐만 아니라 다른언어를 사용하는 클라이언트 또한 지원

  • 다양한 언엉와 프로토콜을 지원(Java,C,C++,C#,Ruby,Python,PHP클라이언트 지원)
  • OpenWire를 통해 고성능의 Java,C,C++,C# 클라이언트 지원
  • Stomp를 통해 C,Ruby,Perl,Python,PHP 클라이언트가 다른 메시지 브로커들과마찬가지로 ActiveMQ에 접근가능
  • Message Groups, Vitualr Destination, Wildcards와 Comoposite Destination을 지원함
  • JMS 1.1과 J2EE 1.4를 완벽하게 지원하며, Transient,persistent,transactional, XA 메시징을 지원
  • Spring 지원으로 ActiveMQ는 Spring Application에 매우 쉽게 임베딩될수 있으며 Spring의 XML설정 메커니즘에 의해 쉽게 설정가능
  • Geronimo.JBoss 4, GlassFish,WebLogic과 같은 인기있는 J2EE서버들과 함게 테스트 됨
  • REST API를 통해 메시징 API를 지원
  • 웹 브라우저가 메시징 도구가 될 수 있도록, Ajax를 통해 순수한 DHTML을 사용한 웹스트리밍을 지원

ZeroMQ

ZeroMQ는 메시징 라이브러리로, 많은 수고를 들이지 않고 복잡한 커뮤니케이션을 설계할수 있도록 해줌, ZeroMQ는 임베디드 네트워킹 라이브러ㅣ이지만, 동시성 프레임워크와 같은 역할을함.

  • AMQP처럼 과도하게 복잡한 프로토콜이 업음
  • 신뢰성 있는 멀티캐스트나 Y-suite IPC전송같은 효율적인 전송을 지원
  • 지능적인 메시지 묶음을 활용하여 프로토콜 오버헤드와 시스템 호출을 줄여 TCP/IP를 효율적으로 사용하게 도와줌
  • 소켓 버퍼에 계속 값을 채워주어야 하는 소켓방식에 비교하면, 메시지를 보내는 방식이 단순
  • 단순한 와이어 프로토콜을 지니고 있어, 다양한 전송프로토콜이 사용되는 요즘에 적합

Kafka

Kafka는 확장성과 고성능 및 높은 처리량을 내세운 제품, 특화된 시스템이기에 범용 메시징 시스템에서 제공하는 다양한 기능은 제공되지 않으나 분산 시스템을 기본으로 설계되어 기존 메시징 시스템보다 분산 및 복제구성이 원활함

  • 대용량 실시간 로그 처리에 특화
  • AMQP프로토콜이나 JSM API를 사용하지 않고 단순한 메시지 헤더를 지닌 TCP기반 프로토콜을 사용함으로서 오버헤드가 비교젹 작음
  • 노드 장애에 대한 대응성을 가지고 있음
  • 메시지를 기본적으로 파일시스템에 저장하여 별도의 설정을 하지 않아도 오류 발생시 오류지점부터 복구가 가능
  • window 단위의 데이터를 넣고 꺼낼수 있음.
  • 메시지를 파일 시스템에 저장하기때문에 메시지가 많이 쌓이더라도 기존의 메시징 시스템에 비해 성능이 크게 감소하지 않음.
profile
Lorem ipsum dolor sit amet

0개의 댓글