메시징 시스템 (Redis, RabbitMQ, Kafka) : 동작 원리, 특징, 차이점

“메시징 시스템”은 메시지를 보내고 받음으로써 서로 다른 애플리케이션이나 서비스 간의 통신을 가능하게 하는 소프트웨어 인프라입니다.

이 시스템은 일반적으로 메시지를 보내는 프로듀서, 메시지를 받는 컨슈머, 프로듀서에서 컨슈머로 메시지를 라우팅하는 메시지 브로커와 같은 구성 요소를 포함합니다.

우선 주요 메시징 시스템의 특징 요약을 확인 후 자세한 내용을 읽을 수 있도록 정리하였습니다.

주요 메시징 시스템 특징 요약

Feature/AspectRedisRabbitMQKafka
작동 방식pub/sub를 사용한 메모리 내 key-value 저장소Advanced Message Queuing Protocol (AMQP) 기반 메시지 브로커분산 스트리밍 플랫폼 및 메시지 브로커
데이터 저장인메모리(선택적 디스크 지속성 포함)메시지 승인을 통한 영구 저장데이터 복제 기능을 갖춘 로그 기반 스토리지
메시지 모델Pub/SubPub/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)ModerateVery 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

참고하면 좋은 글

Leave a Comment

목차