Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- virtualization
- Spring Security
- mysql
- JPA
- web server
- spring cloud
- 영속성 컨텍스트
- Java
- 스프링 시큐리티
- 컨테이너
- 배포
- vm
- Container
- spring boot
- spring batch
- 도커
- 백엔드
- CI/CD
- 스프링
- 데이터베이스
- ORM
- 가상화
- 스프링 부트
- 웹 서버
- computer science
- Spring
- HTTP
- CS
- 스프링 배치
- 자바
Archives
- Today
- Total
개발 일기
[Computer Network] 실시간 웹 통신 - 5. 메세지 브로커(Message Broker) RabbitMQ& Kafka 본문
Computer Science/Computer Network
[Computer Network] 실시간 웹 통신 - 5. 메세지 브로커(Message Broker) RabbitMQ& Kafka
개발 일기장 주인 2024. 10. 10. 11:28채팅 기능을 구현한 것을 보면 WebSocket 그리고 STOMP와 함께 매번 등장하는 RabbitMQ와 Apache Kafka 같은 메세지 브로커에 대해서 정리해봤다.
Message Broker
- Message Broker(메시지 브로커)는 Publisher(송신자)로부터 전달받은 메시지를 Subscriber(수신자)로 전달해주는 중간 역할이며 응용 소프트웨어 간에 메시지를 교환할 수 있게 한다.
- 이 때 메시지가 적재되는 공간을 Message Queue(메세지 큐)라고 하며 메시지의 그룹을 Topic(토픽)이라고 한다.
- Publisher가 Topic에 맞게 메세지를 가져다 놓기만 하면 각각의 Subscriber는 각자 원하는 Topic의 메세지를 가져갈 수 있는 것이다.
- Producer와 Consumer가 서로 독립적으로 동작할 수 있도록 돕느다.
- 왼쪽 사진처럼 메세지 브로커가 없을때 부터 오른쪽 처럼 메세지 브로커를 도입하게 된다면 Publisher와 Subscriber의 수가 증가하더라도 설계가 훨씬 수월해진다.
- 보내는 쪽과 받는 쪽을 효과적으로 연결해주며 중계자는 일정시간 메세지를 보유하고 있기 때문에 데이터의 유실을 방지해주며 수평적 확장이 용이하도록 만들어준다.
- 성능(속도)보다는 안전한 메세지 전달과 노드 간의 독립성 그리고 확장성을 필요한 서비스 들에서 유리한 구조이다.
- 예를들어 이메일, 로그 수집, 온라인 결제, 이미지 처리, MSA 아키텍처에 사용된다.
1. Producer: 메시지 제공하는 이해관계자 (Consumer가 누구인지 고려X)
2. Consumer: 메시지를 제공받는 이해관계자
3. Message Broker: Producer와 Consumer사이에서 메시지를 중개하는 역할
Message Broker 분류
- 메세지 브로커는 크게 위와 같이 두가지로 분류할 수 있는데 왼쪽 부류에서 대표적인 제품은 RabbitMQ, 오른쪽에서 대표적인 제품이 Apache Kafka이다.
- Amazon에서 RabbitMQ와 Kafka를 서비스로 제공하고 있다.
- Message Broker는 Producer와 Consumer와 별개의 서버에서 구동되지만 프로듀서와 컨슈머에도 RabbitMQ나 Kafka 클라이언트가 설치되어서 가운데의 브로커 서버와 통신하게 되는 것이다.
RabbitMQ
- 주로 비교적 적은 수의 서버에 설치된다.
- Producer와 Message Broker, Message Broker와 Consumer 사이의 프로토콜: AMQP 프로토콜
- 메시지가 주로 메모리에 저장되기 때문에 성능은 좋지만 유실의 위험은 있다.
- 큐(Queue) 형태로 저장한다.
➜ 즉, Producer로 부터 받아온 메시지를 저장하고 Consumer가 메시지를 받아갈때 큐에서 제거하는 일도 담당한다. - 대신 Consumer는 데이터를 요청하기만하면 된다. ➜ 'Smart Broker, Dump Consumer'
- Work Queue라는 것을 통해 시간이 걸릴 수 있는 작업을 여러 워커들이 분산 처리하도록 한다. Consumer의 위치에 있는 워커들이 작업을 하나씩 가져가고 작업이 완료되는대로 브로커에 신호를 보내 작업이 제거되도록한다.
- 메시지가 Queue라는 그룹으로 묶이는데 RabbitMQ가 조건에 따라 특정 큐나 모든 큐로 보내기 위한 다양한 방식을 제공하기 때문에 복잡한 메시지 라우팅이 필요한 경우 Kafka보다 유리하다.
Kafka
- 일반적으로 큰 규모의 클러스터로 운영된다.
- Producer와 Message Broker, Message Broker와 Consumer 사이의 프로토콜: TCP 기반으로한 자체 프로토콜
- 메시지를 로그 형태로 디스크에 저장하기 때문에 유실 위험이 상대적으로 적지만 메모리보다 상대적으로 성능이 낮을 것이다. 그러나 Kafka처럼 순차적으로 저장하여 성능을 극대화할 수 있다.
- 이 메시지들은 Consumer에서 받아가도 로그에서 지워지지 않는다.
- 로그 안의 메시지들은 배열 안의 요소들이 인덱스를 갖는 것처럼 각각의 오프셋을 갖는데 Consumer들이 자기가 받아간 마지막 메시지의 오프셋을 기억하여 중복을 피한다. ➜ 'Dump Broker, Smart Consumer'
- 즉, Consumer를 구현하는 일이 RabbitMQ보다 까다로울 수 있다. 대신 그만큼 메시지 브로커는 부담이 준다.
- Batch 처리가 가능해서 메시지를 한번에 여럿 들고 올 수 있다.
- 클러스터링 운영에 유리하다.(RabbitMQ의 경우 Consumer가 마지막으로 받아간 메시지를 다른 클러스터 내부 브로커들과 동기화하고 있어야하기 때문에 더 까다로운 것이다)
- 예를들어 대용량 스트리밍, 데이터 파이프라인 그리고 로그 집계 및 분석에 유리하다.
- 메시지가 Topic으로 묶임
채팅기능에서는 RabbitMQ 메시지 브로커를 사용하는 것이 유리한 것을 알았다.
'Computer Science > Computer Network' 카테고리의 다른 글
[Computer Network] OSI 7계층 (0) | 2024.12.17 |
---|---|
[Computer Network] 실시간 웹 통신 - 4. STOMP(Simple/Stream Text Oriented Message Protocol) (2) | 2024.10.09 |
[Computer Network] 실시간 웹 통신 - 3. 웹소켓 프로토콜(WebSocket Protocol) (0) | 2024.10.09 |
[Computer Network] 실시간 웹 통신 - 2. 소켓 통신 (10) | 2024.10.09 |
[Computer Network] 실시간 웹 통신 - 1.Polling, LongPolling 그리고 Server-Sent Events (1) | 2024.10.07 |