Home Message Queue VS Pub-Sub
Post
Cancel

Message Queue VS Pub-Sub

Message Queue

Message Queue는 프로세스 또는 프로그램 간에 데이터를 교환 할 때 사용하는 통신 방법 중에 하나로, 메시지 지향 미들웨어를 구현한 시스템을 의미한다.

메세지 큐

  1. 생산자(Producer)로 취급되는 컴포넌트가 메시지를 메시지 큐에 추가한다.
  2. 해당 메시지는 소비자(Consumer)로 취급되는 또 다른 컴포넌트가 메시지를 처리할 때까지 메시지 큐에 저장된다.
  3. 각 메시지는 하나의 소비자에 의해 한 번만 처리될 수 있는데, 이러한 이유로 메시지 큐를 이용하는 방식을 일대일 통신이라 한다.

Q. 메세지 지향 미들웨어 (Message Oriented Middleware : MOM) 란?

A.

미들웨어 : 애플리케이션들을 연결해 이들이 서로 데이터를 교환할 수 있게 해주는 소프트웨어

메세지 지향 시스템 : 메세지 API를 통해 각 분산되어있는 애플리케이션간의 다리역할을 함으로써 데이터를 교환할 수 있도록 하는 시스템

즉, 비동기 메시지를 사용하는 응용 프로그램들 사이에서 데이터를 주고 받는 기능을 지원하는 소프트웨어나 하드웨어 인프라이다.

기능

수신 전

위 사진 처럼, 생산자(Producer)는 Queue 에 메세지를 넣고 소비자(Consumer A, Consumer B)는 메세지를 수신하는 서비스가 있다.

수신 후

만약, Consumer A가 message(m1) 을 소비하게 되면 Consumer B는 m1 을 소비할 수 없고 message(m2)를 소비해야 한다.

이 처럼, Message Queue는 메세지 처리 작업을 소비자에게 위임하게 되고 작업(message)가 한번만 실행되도록 보장할 수 있다.

Q. 그렇다면 모든 Consumer(소비자)가 동일한 메세지를 받아 처리하기 원한다면 어떻게 해야할까?

A. Pub-Sub 방식을 사용하면 된다.


장점

Message Queue는 중간 통로 역할을 하는 Queue를 통해 얻는 장점이 있다.

1. 비동기

Message Queue는 생산된 메시지의 저장, 전송에 대해 비동기 처리로, 큐에 넣어 두기 때문에 나중에 처리할 수 있다.

기존 동기화 방식은 많은 메시지가 전송될 경우 병목 현상이 생길 수 있고, 뒤에 들어오는 요청에 대한 응답이 지연된다.

2. 낮은 결합도

중간 다리인 Queue 를 통해 생산자(Producer) 서비스와 소비자(Consumer) 서비스가 독립적으로 행동하게 됨으로써 서비스 간 결합도가 낮아진다.

3. 확장성

이 역시, 중간 다리인 Queue 가 존재하기 때문에 생산자(Producer) 서비스와 소비자(Consumer) 서비스를 원하는 대로 확장할 수 있다.

4. 탄력성

소비자(Consumer) 서비스가 죽더라도 Message Queue에 남아있기 때문에 다시 시작할 때마다 새로운 작업을 따로 할 필요가 없다.

5. 보장성

Message Queue는 Queue에 보관되는 모든 메시지가 결국 소비자 서비스에게 전달된다는 일반적인 보장을 제공한다.


단점

Queue를 통해 얻는 장점이 있지만 그에 따른 단점이 따른다.

1. 용량

Queue가 가득 차서 더는 Queue에 메시지를 저장할 수 없는 상황에는 메세지를 다른 곳에 보존하거나 버려지게 된다.

2. 메세지 지향 미들웨어 (Message Oriented Middleware : MOM)

메세지 지향 미들웨어의 단점으로 아키텍처에 외부 구성 요소인 메시지 전송 에이전트를 필요로 한다는 점. 일반적으로 새로운 요소를 추가하면 시스템 성능이 저하되고, 신뢰성도 떨어진다. 시스템 전체로 볼 때 관리가 어렵고 비용도 더 들어가게 된다.

3. 오버헤드

Queue에 들어가고 나오는 과정에서 피할 수 없는 오버헤드가 발생할 수 있다.


Pub-Sub

Pub-Sub

Pub-Sub은 Message Queue와 다르게 발행자(PUBLISHER)가 메시지를 발행하면 Topic에 구독하고 있는 구독자(SUBSCRIBER) 모두에게 메세지를 전달하는 방식이다.

즉, 구독자(SUBSCRIBER A)가 message(m1) 을 사용하더라도 구독자(SUBSCRIBER B)는 m1 을 처리할 수 있다.

Pub-Sub은 모든 구독자(SUBSCRIBER)들이 메세지의 복사본을 가지도록 보증할 때 사용한다.

방식

ephemeral subscription(일시적인 구독) : 구독은 구독자(SUBSCRIBER)가 구동중일 때만 가능하다. 구독자(SUBSCRIBER)가 다운된다면, 구독과 아직 처리되지 않은 메세지가 유실된다.

durable subscription(지속적 구독) : 구독은 명시적으로 제거가되지 않는다면 계속 유지된다. 구독자(SUBSCRIBER)가 다운되면, 메세징 플랫폼은 구독을 유지시키고, 나중에 다시 메세징 처리가 가능하다.

This post is licensed under CC BY 4.0 by the author.