요즘 많은 서비스들은 메시지/이벤트 브로커(RabbitMQ, Redis, Kafka)
를 사용합니다. 메시지/이벤트 브로커(RabbitMQ, Redis, Kafka)
에 대한 개념을 정리해보았습니다.
0. 핵심
- 서버에서 많은 요청이 한 번에 들어오면 처리하지 못할 수 있습니다. 처리하지 못한 데이터는 손실되어 서비스에 치명적인 영향을 줄 수 있습니다.
- 따라서, 유저의 요청이 들어오면 일단 요청을 Queue에 넣어 놓고(요청을 쌓아놓고), 서버가 처리할 수 있을 때 데이터를 가져갑니다.
- 메시지는 삭제되지만 이벤트는 삭제하지 않습니다.
- 메시지 브로커는 이벤트 브로커가 될 수 없으나, 이벤트 브로커는 메시지 브로커가 될 수 있습니다(메시지는 삭제되고, 이벤트는 삭제되지 않기 때문).
- 아래 그림에서
메시지 큐 모델
을Pub/Sub 이벤트 스트림 모델
을 구분할 수 있습니다.
주석
1. 메시지 브로커
- 메시지를 받아서 처리하면 짧은 시간 안에 메시지가 삭제됩니다.
- 손실되면 안되는 요청을 처리할 때에는 주의해야합니다.
1.1. RabbitMQ
- RabbitMQ 는 오픈 소스 메시지 브로커 소프트웨어입니다.
- 구성이 쉽고 안정적입니다.
- 구성
- 생산자(Producer) 는 요청을 보내는 주체
- 소비자(Consumer) 는 Producer로부터 메세지를 받아 처리하는 주체
- exchange : 메세지를 전달하고자 하는 목적지(큐)에 전달하는 주체
- 큐(queue) : 메세지를 쌓는 주체
- RabbitMQ는 AMQP를 구현합니다.
- AMQP(Advanced Message Queuing Protocol, 어드밴스트 메시지 큐잉 프로토콜)는 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜입니다.
1.2. Redis (Remote Dictionary Server)
- 메모리(Memory) 기반의 딕셔너리(Dictionary) 구조 데이터 관리 시스템입니다.
키-값(key-value)
구조의 비정형 데이터를 저장하는 비관계형 데이터베이스 관리 시스템입니다.- 캐시 역할로 많이 사용합니다.
- 사용자가 많은 서비스에서 데이터 베이스가 과부하될 때, 캐시 역할로 많이 사용됩니다.
- Single Threaded 기반으로 운영됩니다. 한 번에 하나의 명령만 처리할 수 있습니다.
2. 이벤트 브로커
- 이벤트를 받아서 처리하면서 이벤트를 삭제하지 않습니다.
- 손실되면 안되는 요청을 처리할 때 좋습니다.
2.1. Kafka
- 아파치 카프카(Apache Kafka)는 아파치 소프트웨어 재단이 스칼라로 개발한 오픈 소스 메시지 브로커 프로젝트입니다.
- 구독 방식을 사용합니다.
- 비동기식으로 구성되었습니다.
Reference
- https://cloud.google.com/solutions/event-driven-architecture-pubsub
- https://hyeo-noo.tistory.com/334