“메시징 시스템”은 메시지를 보내고 받음으로써 서로 다른 애플리케이션이나 서비스 간의 통신을 가능하게 하는 소프트웨어 인프라입니다.
이 시스템은 일반적으로 메시지를 보내는 프로듀서, 메시지를 받는 컨슈머, 프로듀서에서 컨슈머로 메시지를 라우팅하는 메시지 브로커와 같은 구성 요소를 포함합니다.
우선 주요 메시징 시스템의 특징 요약을 확인 후 자세한 내용을 읽을 수 있도록 정리하였습니다.
주요 메시징 시스템 특징 요약
Feature/Aspect | Redis | RabbitMQ | Kafka |
---|---|---|---|
작동 방식 | pub/sub를 사용한 메모리 내 key-value 저장소 | Advanced Message Queuing Protocol (AMQP) 기반 메시지 브로커 | 분산 스트리밍 플랫폼 및 메시지 브로커 |
데이터 저장 | 인메모리(선택적 디스크 지속성 포함) | 메시지 승인을 통한 영구 저장 | 데이터 복제 기능을 갖춘 로그 기반 스토리지 |
메시지 모델 | Pub/Sub | Pub/Sub and Point-to-Point (Queues) | Pub/Sub |
확장성 | 클러스터링을 통한 수평적 확장 | 클러스터링 및 연합 (federation) | 파티셔닝 및 복제를 통한 높은 확장성 |
지연 시간 | 인메모리 작업으로 인해 대기 시간이 매우 짧음 | 메시징에 대한 짧은 대기 시간 | 높은 처리량 시나리오에서도 짧은 대기 시간 |
내결함성 | 장애 조치를 위한 Redis Sentinel 또는 클러스터 | 클러스터링을 통한 고가용성 | 내결함성을 위한 내장형 복제 및 Leader-Follower 모델 |
사용사례 | 캐싱, 실시간 분석, 게시/구독 메시징 | 작업 대기열 관리, 안정적인 메시지 전달, 트랜잭션 메시징 | 실시간 데이터 파이프라인, 이벤트 소싱, 스트림 처리 |
프로토콜 | Redis protocol (RESP) | AMQP | 사용자 정의 Kafka 프로토콜 |
메시지 순서 | 보장되지 않음(except for single producer/consumer per channel) | 대기열 내에서 보장 | 파티션 내에서 보장 |
메시지 지속성 | Optional (RDB, AOF persistence) | 승인이 포함된? 영구 저장 | 로그 기반 저장 및 복제로 내구성 우수 |
복잡성 | 간단한 설정 및 사용법 | 고급 메시징 기능으로 인해 상대적으로 복잡 | 분산 특성 및 구성 옵션으로 인한 복잡성 증가 |
처리량 | High (limited by memory capacity) | Moderate | Very high |
Redis
Redis 동작원리
Redis가 대표적으로 이용되는 캐싱의 동작원리는 다음과 같습니다.
캐시 히트
- Redis가 캐시에서 요청된 데이터를 찾을 때 발생하므로 느린 스토리지에 액세스하지 않고도 빠르게 검색할 수 있습니다.
캐시 미스
- Redis가 캐시(RAM)에서 요청한 데이터를 찾을 수 없고 디스크나 다른 시스템과 같은 느린 스토리지에서 검색해야 할 때 발생합니다.
최적화
- Redis는 캐시 적중률을 최대화하여 지연 시간을 최소화하고 전반적인 성능을 향상시키는 것을 목표로 합니다.
Redis 사용의 이점
PostgreSQL, SQL Server 및 대부분의 데이터를 디스크에 저장하는 기타 데이터베이스와 달리 모든 Redis 데이터는 서버의 기본 메모리에 상주합니다.
따라서 Redis는 더 빠른 응답 시간을 지원할 수 있습니다 .
Redis는 모놀리식 및 분산 아키텍처의 두 가지 유형 모두에서 캐싱 시스템을 제공하는 전체 시스템을 제공해줄 수 있습니다
메모리의 키(예: 해시테이블)를 통한 직접 액세스 작업이 전반적인 읽기/쓰기 성능을 증가시켜 줍니다.
RabbitMQ
RabbitMQ 동작 원리
Producer
- 브로커에 메시지를 보내는 애플리케이션 또는 프로세스입니다.
Broker
- Producer(발신자)로부터 메시지를 수신하여 Consumer(수신자)에게 라우팅하는 소프트웨어입니다.
Exchange
- Producer로부터 메시지를 수신하고 특정 규칙(binding)에 따라 대기열(queue)로 라우팅하는 구성 요소입니다.
- Exchange 유형
- Direct Exchange: 특정 라우팅 키가 있는 메시지를 키와 정확히 일치하는 대기열로 라우팅합니다.
- Topic Exchange: 라우팅 키와 대기열 바인딩 키 간의 와일드카드 일치를 기반으로 메시지를 대기열로 라우팅합니다.
- Fanout Exchange: 라우팅 키에 관계없이 메시지를 바인딩 된 모든 큐로 라우팅합니다.
- Headers Exchange: 라우팅 키 대신 헤더 값을 기반으로 메시지를 라우팅합니다.
Binding
- 메시지 라우팅 방법을 지정하여 exchange을 queue에 연결하는 규칙입니다.
Queue
- 소비자가 메시지를 처리할 때까지 메시지를 저장하는 버퍼입니다.
Consumer
- 대기열에서 메시지를 수신하고 처리하는 애플리케이션 또는 프로세스입니다.
RabbitMQ 사용 이점
다양한 메시징 패턴(예: pub/sub, end to end)을 사용하여 생산자와 소비자 간의 메시지 교환을 용이하게 하는 메시지 브로커로 설계되었습니다.
acknowledgments, persistent storage, and delivery confirmations과 같은 기능을 통해 메시지 전달에 대한 강력한 보장을 제공합니다.
교환 및 바인딩을 사용하여 복잡한 라우팅을 지원하여 규칙에 따라 메시지를 여러 queue로 보낼 수 있습니다.
AMQP(Advanced Message Queuing Protocol)는 물론 MQTT 및 STOMP와 같은 기타 프로토콜을 구현하여 매우 다양한 기능을 제공합니다.
관리 및 모니터링을 위한 웹 기반 UI, CLI, API를 포함한 강력한 관리 및 모니터링 도구를 제공합니다.
Kafka
Kafka 동작 원리
Topic을 사용하여 데이터를 분류하고, 파티션을 사용하여 서버 전체에 로드를 분산하며, 브로커를 사용하여 메시지 저장 및 처리를 관리합니다.
Kafka 사용 이점
Kafka는 짧은 대기 시간으로 대량의 데이터를 처리할 수 있으므로 실시간 데이터 처리에 이상적입니다.
브로커와 파티션을 추가하여 쉽게 수평으로 확장할 수 있습니다.
실시간 스트림 처리와 배치 처리를 모두 지원합니다.
복제 및 파티셔닝을 통해 데이터 무결성과 가용성을 보장합니다.
참고한 글
Redis와 시스템 설계에서의 역할 – GeeksforGeeks