Pub/Sub 과 producer/consumer

Ena JJJ·2023년 6월 4일
0
post-custom-banner
pub/sub과 producer/consumer는 메시징 시스템에서 다양한 패턴을 구현하는 방식 중 두가지 이다.

Apache Kafka와 RabbitMQ는 주로 pub/sub 구조를 사용하며, Amazon SQS는 producer/consumer 구조를 사용한다. 하지만 Kafka, RabbitMQ 또한 producer/consumer 를 지원하며, SQS도 pub/sub 패턴을 이용할 수 있다.

1. 데이터 전달 방식:

  • Pub/Sub : 발행 - 구독 모델로, 데이터를 발행자(publisher)가 특정 주제(topic)에게 전송하고, 해당 주제를 구독하는 구독자(subscriber)들이 데이터를 수신한다. Publisher는 데이터를 구체적으로 어느 구독자가 받을지 신경쓰지 않는다.
    • Producer/Consumer : 생산자(producer)가 데이터를 생성하고 큐(queue)에 전송한다. 소비자(consumer)는 큐에서 데이터를 가져와 처리한다. 소비자는 명시적으로 큐에 접근하여 데이터를 가져와야 한다.

Thinking

  • Pub/Sub 구조에서는 Subscriber들이 publisher가 발행한 모든 데이터를 처리하면, 중복으로 같은 데이터를 처리할 가능성이 생긴다....중복 처리가 필요할 것 같다.
  • Producer/Consumer 구조에서도 찾아본 바, Consumer가 브로커에 적재된 데이터를 어디까지 가져갔는지를 commit을 통해 기록하는데, 오프셋 커밋이 기록되지 못햇다면 데이터 처리의 중복 발생이 가능하다고 한다.

2. 동작 방식:

  • Pub/Sub : 발행된 데이터는 주제(topic)를 구독하고 있는 모든 구독자(subscriber)에게 복사된다. 각 구독자는 자신만의 독립적인 작업을 수행할 수 있으며, 구독자들은 서로 영향을 주지 않는다
  • Producer/Consumer : 생산자는 큐에 데이터를 전송하고, 큐에 있는 데이터를 소비자가 가져가 처리한다. 소비자가 처리를 완료하면 해당 데이터는 큐에서 삭제 된다.

3. 확장성 :

  • Pub/Sub : 많은(subscriber)를 가질 수 있고, 각 구독자는 독립적으로 작업을 수행할 수 있따. 발행자(publisher)는 데이터를 전송하기만 되므로, 구독자의 수에 영향을 받지 않는다
  • Producer/Consumer : 큐는 생산자(producer)와 소비자(consumer) 사이의 매개체 역할을 하기 때문에 큐의 처리 능력에 따라 확장성이 결정된다. 큐가 병목형상을 일으킬 수 있으며, 이를 해결하기 위해 큐를 분산하여 처리 능력을 향상 시킬 수 있다.

post-custom-banner

0개의 댓글