Message Broker

MOM (Message Oriented Middleware)

메세지 지향 미들웨어

미들웨어 분산 컴퓨팅 환경에서 애플리케이션 간의 통신과 데이터 관리 입력/출력 기능 등을 지원하는 소프트웨어 계층 데이터 베이스 미들웨어(JDBC), 원격 프로시저 호출(RPC, JSON-RPC), 웹 미들웨어 (Apache Tomcat, Microsoft IIS), 메세지 지향 미들웨어(MOM) 등이 있음

개념

  • 어플리케이션들의 메세지를 중간에서 관리해주는 시스템

  • MOM의 개념을 가진 프로토콜을 기반으로 다양한 구현체 등장

    • 프로토콜

      • JMS(Java Messaging System): Java지원 표준 API

      • AMQP(Advanced Message Queue Protocol): 미들워어 브로커 간 메세지 교환을 위한 응용계층 표준 프로토콜

    • 구현체 (메세지 큐)

      • 메세지를 임시로 저장하는 버퍼 역할

      • ActiveMQ

      • RabbitMQ

      • Apache Kafka

      • Amazon SQS

특징

  • 낮은 종속성과 결속성

    • 클라이언트 시스템간에 메세지 통신을 중간에서 관리해줌으로써 클라이언트 시스템간의 종속성 및 결속성을 낮춰줌

    • 송신자는 수신자의 주소를 몰라도 메세지를 보낼 수 있음

  • 높은 안정성

    • 주고 받는 메세지를 데이터베이스에 기록하여 백업 가능

  • 라우팅 규칙을 활용해 하나의 메세지로도 특정 여러 클라이언트가 받을 수 있도록 지원

단점

  • 메세지 전체를 관리하는 시스템 따로 필요

    • 이에따른 도입, 운영 비용의 고려

  • 전체적인 시스템 구조가 복잡해질 수 있음

    • 송수신자가 직접 통신하는 것이 아닌 다수의 서버가 MOM을 이용하므로 구조가 전체적으로 복잡해지고 이에 대한 오버헤드 발생 가능

메세지 브로커 (Message Broker)

개념

  • 대용량 데이터 처리를 위한 미들웨어

  • MQ에 라우팅, 변환, 모니터링 및 관리, 메시징 패턴 (Pub/Sub, Point-to-point) 등의 기능을 추가적으로 제공

  • 메세지를 생산하는 Publisher(송신자)와 저장된 메세지를 사용하는 Subscriber/Consumer(수신자) 사이에서 메세지를 전달하는 역할

    • 이를 통해 응용 소프트웨어 간에 메세지를 교환할 수 있도록 함

특징

  • Publish/Subscribe(Consumer) Pattern

    • 송신자가 보낸 메세지를 메세지 큐에 적재하고, 이를 수신자가 받아서 사용하는 구조

  • 실시간 데이터 처리 성능이 뛰어남

    • 일반적인 방법 (A서버: 데이터를 DB에 적재, B서버: DB에서 데이터 조회)에선 실시간으로 데이터가 쌓이는 테이블을 조회하기 어려움

    • 메세지 브로커 사용시, B서버에서 별도의 조회과정이 필요 없이 메세지 큐에 적재되는 메세지를 감시하다가 적재되면 바로 가져다 사용 가능

  • 비동기 방식

    • 메세지 큐, 토픽과 같은 데이터 구조를 통해 메세지를 임시로 저장해두었다가 적절한 수신자에게 보내줌

    • 비동기적으로 메세지를 처리가 가능하기 때문에 대용량 트래픽이 몰리는 경우에도 실제 처리는 일어나지 않고 메세지 큐에 적재만 해두고 Consumer가 처리 가능한 시점에 처리할 수 있기 때문에 부하가 줄 수 줄어듬

  • Point to point

    • MSA 환경에서 메세지 큐를 활용해서 각 필요한 서비스에 메세지를 전달하고, 각 서비스는 메세지를 받아서 처리하는 방식으로 사용

사용 이유

  • 서비스(어플리케이션)간의 의존성 제거

    • 서버 수가 유동적이여도 정상적으로 동작

      • 송수신측 모두 메세지 브로커의 주소만 알고있다면 메세지를 보내고 받는데 문제 없음

    • 수신 측 서버에 문제가 생겨도 정상 동작

      • 메세지 큐는 메세지를 유지하고 있으므로 수신 측 서버가 문제가 정상적으로 돌아오면 유지했던 메세지 받을 수 있음

  • 메세지 버퍼링

    • 수신 측에서 원하는 시점에 메세지를 가져갈 수 있도록 지원

  • 다양하고 유연한 통신

장점

  • 안정적인 비동기 방식으로 메세지를 교환하여 분산된 시스템/어플리케이션 간의 통신을 도움

  • 생산자와 소비자간 중개자 역할을 하여 두 시스템이 완전히 독립적으로 작동할 수 있도록 도움

  • 컴포넌트간 느슨한 결합을 도움

단점

  • 쿼리를 이용해 원하는 데이터만 필터링 조회 불가능

    • 큐에 적재된 내용을 그대로 사용하기 때문

    • 따라서 데이터 필터링을 위해 Logstash를 이용 혹은 적재시 필터링된 데이터를 적재해야 함

  • 메세지 큐에 적재된 메세지는 주로 7일 보관으로 장기간 보관시 별도의 저장소 이용해야함

구조

  • Message Queue

    • 메세지가 적재되는 공간

    • 큐 자료 구조 형태로 메세지를 다루는 구조, 나아가 MOM의 구현체의 개념인 메세지 전송 구조를 가진 미들웨어

    • Message Broker 내부에 메세지가 적재되는 공간

  • Topic

    • 메세지들의 그룹

Message Broker와 Message Queue의 개념은 서로 모호하게 사용하는 경우가 많다.

대표적인 메세지 브로커

RabbitMQ

전통적인 메세지 브로커

개념

  • 메세지 브로커 방식

    • 브로커 중심적인 방식으로, 지정된 수신인에게 메세지를 확인, 라우팅, 저장 및 배달하는 역할을 수행하며 보장되는 메세지 전달에 초점을 맞춤

  • AMQP(Advanced Message Queuing Protocol)를 구현하는 오픈 소스 메세지 브로커 소프트웨어

특징

  • 쉽고 빠르게 작은 서비스의 메세지 브로커를 구축하기 좋으며 메세지 전달 보장이 필수적

    • 단, 메세지 처리 순서와 영속성은 보장되지 않음

  • 안정성으로 유명하며 금융 서비스, 전자 상거래 및 IoT 와 같은 다양한 산업에 사용

이벤트 스트리밍 플랫폼

개념

  • 이벤트 스트리밍 플랫폼

    • 메세지 브로커와 이벤트 스트리밍 플랫폼 모두 이벤트를 수신하고, 이것을 소비자에게 전달하는 같은 목적을 두지만 작동방식에 차이가 있음

    • 이벤트 스트리밍 플랫폼은 메세지 브로커와 다르게 topic이라는 것이 event streamer에 저장 됨

      • topic : kafka에서 메세지를 저장하는 단위

  • 분산 스트리밍 플랫폼

    • 실시간 데이터 스트림의 높은 처리량, 내결함성 및 확장 가능한 메시징 및 처리를 위해 설계 됨

  • 대량의 이벤트를 처리하고 대기 시간이 짧은 메시징 서비스를 제공

특징

  • 높은 처리량을 감당할 수 있으며 스케일 아웃이 중요한 경우 사용

  • 영속성, 메세지 처리 순서가 보장되나 전달 보장은 필수적이지 않음

  • 로그 및 이벤트의 중앙 스토리지 시스템 역할에 적합

메세지 브로커와 이벤트 브로커

  • RabbitMQ, Kafka 둘 다 Pulibsh/Subscribe 기반의 메세지 큐 서비스이나 Kafka는 이벤트 브로커이고, RabbitMQ는 메세지 브로커이다.

  • 이벤트 브로커

    • 이벤트 브로커는 메세지 브로커의 기능을 포함하는 더 큰 범위의 개념이기에 이벤트 브로커가 메세지 브로커 역할을 수행할 수도 있다.

    • publisher가 생산한 이벤트를 저장하고, consumer가 해당 이벤트를 사용하더라도 이벤트가 저장된다는 특징으로 이후에 다시 재사용 할 수 있는 장점을 가지고 있다.

  • 메세지 브로커

    • 중간 다리 역할을 수행하는 broker로 publisher가 생산한 메세지를 큐에 저장하고, consumer가 데이터를 가져가면 즉시 혹은 짧은 시간 내에 큐에서 데이터를 삭제한다.

Ref

대용량 데이터 처리를 위한 Message Broker Message Broker - 왜 사용하는 것일까 ? [Tech] RabbitMQ와 Kafka의 차이? 메세지 브로커와 이벤트 스트리밍 플랫폼

Last updated