Spring

[Spring Cloud] Spring Cloud Bus와 메시지브로커 연동 (1)

개발자가 말대꾸? 2023. 1. 21. 22:14

 

  1. Spring Cloud Bus
  2. P2P
  3. Message Broker
  4. RabbitMQ vs Kafka

 

Spring Cloud Bus

  • 분산 시스템의 노드를 경량 메시지브로커와 연결
  • 상태 및 구성에 대한 변경사항을 연결된 노드에게 전달한다. (Broadcast)

 

 

여기서 노드는 마이크로 서비스를 뜻한다.

대표적인 메시지브로커는 RabbitMQ, Kafka, ActiveMQ 가 있다.

 

그렇다면 피투피메시지브로커는 어떤 차이가 있을까

 

Peer-to-peer

 

피투피는 메인 서버를 거치지 않고 서버에 연결된 클라이언트끼리  직접 통신하는 방식이고 주로 블록체인 기술이나 게임 서버에 많이 활용된다. 

 

현재 재직중인 직장의 블록체인 메인넷은 피투피 방식으로 되어있다.

메인넷 CLI에 listpeers라는 명령어가 있는데, 클라이언트 기준으로 연결된 노드의 정보를 출력해준다. 

 

필자의 경우 어릴적 하던 서든어택에서 P2P라는 용어를 처음 들었는데 전문적으로 듣게되니 신기한것 같다.

 

출처: https://sa.nexon.com/community/screenshot/view.aspx?n4PageNo=64&n4ArticleSN=2671584&n4ArticleCategorySN=2&n4ArticleSubCategorySN=0

 

 

 

메시지브로커

 

메시지브로커는 클라이언트끼리의 통신에 브로커(중개자) 역할을 한다.

 

메시지 브로커가 중개하는 메시지의 단위문자열, 객체, 다양한 형태의 리소스가 될 수 있고 클라이언트 사이의 미들웨이를 놓음으로써 송신자와 수신자가 모두 더 안정적인 서버 운영이 가능해진다. 

 

 

Spring Cloud Bus를 사용하기 전에 두 가지 지식을 알고가자.

 

  • AMQP
    • Advanced Message Queuing Protocol
    • 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜
    • 메시지 지향, 큐잉, 라우팅(P2P, Publsiher-Subcriber)에서 데이터를 주고 받는 프로토콜
    • 신뢰성보안을 강조
    • Erlang(병렬처리 함수형 프로그래밍 언어로 유명), RabbitMQ에서 주로 사용하고 있음.
    • 가벼운 프로세스가 특징임. (수십만개의 메시지가 생성되고 없어지는게 가능하다)
  • Kafka 프로젝트
    • Apache Software FoundationScalar로 개발한 오픈소스 메시지 브로커 프로젝트
    • 분산형 스트리밍 플랫폼
    • 대용량의 데이터를 처리 가능한 메시징 시스템

 

 

RabbitMQ vs kafka

 

  • RabbitMQ
    • 메시지 브로킹 솔루션임.
    • 초당 20개 이상의 메시지를 클라이언트에 전달
    • 메시지 전달 보장, 시스템 간 메시지 전달
    • 브로커, 소비자 중심 서비스
  • Kafka
    • 초당 100k 이상의 이벤트를 처리함.
    • Publisher - Subscriber, Topic에 메시지를 전달함.
    • Ack를 기다리지 않고 전달 가능.
    • 생산자 중심

Ack를 보낸다는 의미는 송신자와 수신자가 연결되었는지 확인한다는 뜻이고 Ack를 보내지 않는다는 건 송신자와 수신자의 연결은 신경쓰지 않고 보내겠다는 뜻이다.

 

속도적인 측면에서는 당연히 Ack를 보내지 않는것이 빠르다. 즉 생산자 중심의 서비스이다.

Ack를 보내서 연결을 확인하면 조금 느릴지라도 메시지 전달이 보장된다. 즉 소비자 중심의 서비스이다.

 

정리하자면 대용량의 데이터를 빠르게 보내려면 Kafka, 적은 데이터를 안전하게 보내려면 RabbitMQ가 더 효율적이다.

 

 

 

Kafka의 경우 퍼블리셔가 Topic을 구독중인 클라이언트에 메시지를 보냄.