LostCatBox

AboutMessageQ

Word count: 678Reading time: 4 min
2022/12/24 Share

메세지 큐

Created Time: August 16, 2022 11:21 AM
Last Edited Time: September 22, 2022 7:03 PM
References: https://heeonii.tistory.com/17
Tags: Computer

왜?

비동기식으로 데이터 처리를 하고싶었다.

지금까지는 애플리케이션과 DB가 직접 붙어있어서 요청 응답이 모두 완료되어야 애플리케이션이 다음동작을 했기때문이다.

기존 동기적 직접 통신 구조 단점

1

이러한 구조는 애플리케이션과 DB가 강하게 결합되어있는구조다.

애플리케이션의 요청&응답 과정에서 DB서버로의 요청&응답 모두 완료되어야 애플리케이션이 클라이언트에게 결국 응답이 가능하다.

이로인해 발생하는 문제점3가지정도가있다

  1. DB의 응답시간이 길어진다면 애플리케이션 또한 그만큼 응답시간이 길어진다
  2. DB장애시 애플리케이션이 동작하지 못한다.
  3. 애플리케이션 입장에서 감당할수있는 요청수가 DB에서는 감당 불가능하다면, 성능저하나 장애가 발생할수있다.

메세지 큐란?

2

메시지 큐는 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신방법 입니다. 더 큰 개념으로는 메시지 지향 미들웨어(Meesage Oriented Middleware: MOM)를 구현한 시스템을 의미합니다. 여기서 MOM은 비동기 메시지를 사용하는 응용 프로그램 간의 데이터 송수신을 말합니다

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

메세지 큐의 장점

  • 비동기(Asynchronous): Queue에 넣기 때문에 나중에 처리할 수 있습니다.
  • 비동조(Decoupling): Appliction과 분리할 수 있습니다. (각 서비스의 연결을 느슨하게 합니다)
  • 탄력성(Resilience): 일부가 실패 시 전체에 영향을 받지 않습니다.
  • 과잉(Redundancy): 실패할 경우 재실행 가능합니다.
  • 보증(Guarantees): 작업이 처리된걸 확인할 수 있습니다.
  • 확장성(Scalable): 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다.

메세지 큐의 종류

MQ의 종류로는 여러가지가 있는데 Kafka, RabbitMQ, ActiveMQ(JMS)가 대표적입니다. 모두 공통적으로 비동기 통신을 제공하고 보낸 사람과 받는 사람을 분리합니다. 하지만 업무에 따라서 다른 목적을 가지고 있습니다.

ActiveMQ(JMS)

MOM을 자바에서 지원하는 표준 API입니다. JMS는 다른 자바 애플리케이션들끼리 통신이 가능하지만 다른 MOM의 통신은 불가능합니다. (AMQP, SMTP 같은) ActiveMQ의 JMS 라이브러리를 사용한 자바 애플리케이션들끼리 통신이 가능 하지만 다른 자바 애플리케이션(Non ActiveMQ)의 JMS와는 통신할 수 없습니다.

RabbitMQ

RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커입니다. AMQP는 MQ를 오픈 소스에 기반한 표준 프로토콜입니다. 프로토콜만 맞다면 다른 AMQP를 사용한 애플리케이션끼리 통신이 가능하고 플러그인을 통해서 SMTP, STOMP 프로토콜과의 확장이 가능합니다.

KafkaApache

Kafka는 LinkedIn이 개발하고 Apache Software Foundation에 기부한 오픈 소스 스트림 프로세싱 소프트웨어 플랫폼입니다. 높은 처리량을 요구하는 실시간 데이터 피드 처리나 대기 시간이 짧은 플랫폼을 제공하는 것을 목표로 하며 TCP 기반 프로토콜을 사용합니다. 클러스터를 중심으로 Producer와 Consumer가 데이터를 Push하고 Pull하는 구조를 가집니다.

장점

  • 대용량의 실시간 로그 처리에 특화되어 설계된 메시징 시스템
  • AMQP 프로토콜이나 JMS API를 사용하지 않고 단순한 메시지 헤더를 지닌 TCP 기반의 프로토콜을 사용하여 프로토콜에 의한 오버헤드를 감소시킴
  • Producer가 Broker에게 다수의 메시지를 전송할 때 각 메시지를 개별적으로 전송해야 하는 기본 메시징 시스템과 달리, 다수의 메시지를 Batch형태로 Broker에게 한 번에 전달할 수 있어 TCP/IP 라운드 트립 횟수를 줄임
  • 메시지를 파일 시스템에 저장하기 때문에 데이터의 영속성을 보장
  • 기존의 메시징 시스템은 메시지 큐에 적재된 메시지 양이 많을수록 성능이 크게 감소하였지만, Kafka는 메시지를 파일 시스템에 저장하기 때문에 성능이 크게 감소하지 않음
  • Consumer에 의해 처리된 메시지를 곧바로 삭제하는 기존 메시징 시스템과 달리 Kafka는 메시지를 바로 삭제하지 않고 파일 시스템에서 수명이 지나면 삭제하도록 처리
  • 기존의 메시징 시스템은 Broker가 Consumer에게 메시지를 Push 해주는 방식인 반면, Kafka는 Consumer가 Broker로부터 직접 메시지를 가지고 가는 Pull 방식으로 동작
  • 즉, 기존 메시지 큐의 다양한 기능을 포기하고 대용량 메시지를 처리하기 위한 기능을 제공하는 메시지 큐

결론

  • ActiveMQ
    • JMS으로 다른 자바 애플리케이션만 사용가능
    • ActiveMQ사용안한 자바 애플리케이션의 JMS와는 통신할수없다.
  • RabbitMQ
    • AMQP프로토콜 사용
    • AMQP기반이므로 프로토콜이 맞다면 애플리케이션끼리 모두 통신가능
    • 플러그인을 통한 큐 다양한 기능 존재
    • queue가 message를 comsumer에게 할당 선택→ push 형식
  • KafkaApache
    • 단순 헤더를 지닌TCP 기반의 프로토콜을 사용하여 프로토콜에 의한 오버헤드 감소
    • 다수의 메시지를 전송할때, 각 메시지를 개별적으로 전송이 아니라, batch형태로 broker에게 한번에 전달할수있으므로 TCP/IP 비용 줄임
    • 메시지를 파일로 저장하기때문에 데이터의 영속성보장
    • consumer가 pull해오는 방식이므로 consumer가 처리할수있는만큼만 처리
    • 기존 큐 다양한 기능 포기 → 대용량 실시간 메시지 처리가능 중점
CATALOG
  1. 1. 메세지 큐
  2. 2. 왜?
  3. 3. 기존 동기적 직접 통신 구조 단점
  4. 4. 메세지 큐란?
    1. 4.1. 메세지 큐의 장점
    2. 4.2. 메세지 큐의 종류
      1. 4.2.1. ActiveMQ(JMS)
      2. 4.2.2. RabbitMQ
      3. 4.2.3. KafkaApache
  5. 5. 결론