본문 바로가기

카테고리 없음

[시스템 설계] 사용자 수에 따른 규모 확장성 - 6(메시지 큐)

참고1: 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 알렉스 쉬
참고2: 위키피디아

메시지 큐

메시지 큐는 무손실을 보장하는 비동기 통신 컴포넌트이다. 시스템의 규모 확장을 위해 시스템의 컴포넌트를 독립적으로 분리해야 한다. 이때, 각 컴포넌트 사이에 통신이 필요한데, 메시지큐는 각 컴포넌트 사이의 통신을 도와주는 역할을 한다.

메시지 큐

특징

  • 서비스, 서버 간 결합이 느슨해짐 ➡️ 규모 확장에 용이

메시지 큐 VS 메시지 브로커

메시지 큐 : 메시지를 다루는 단순한 Queue 형태의 자료 구조를 기반으로 발행자(생상자), 구독자(소비자)의 시스템을 말한다.

메시지 브로커 : 메시지 큐를 더 확장하여 고급 기능(메시지 라우팅, 변환, 처리 등)을 제공하는 시스템을 말한다.

대표적인 메시지 브로커

RabbitMQ

  • AMQP(Advenced Message Queuing Protocol)을 구현한 오픈소스 메시지 브로커.
  • 메시지 라우팅, 메시지 확인 등 고급 메시징 기능 제공
  • 복잡한 메시징, 태스크 큐 관리에 적합
메시지 라우팅
메시지를 특정 경로나 조건에 따라 전송되도록 하는 기능.

메시지 라우팅 종류
1. 직접 라우팅(Dirdecct Routing): 메시지가 명시적인 목적지 주소, 이름을 기반으로 특정 수신자에게 직접 전달되는 방식이다. (가장 간단하다.)
2. 주제 라우팅(Topic Routing): 메시지가 특정 주제, 패턴에 일치할 때, 해당 주제를 구독하는 수신자에게 전달하는 방식이다. (Pub/Sub)
3. 팬아웃(Fan-out): 하나의 메시지가 여러 수신자에게 전달되는 방식.
4. 콘텐츠 기반 라우팅(Content-Based Routing): 메시지의 데이터를 분석하여, 그 내용에 따라 전달되는 방식.
5. 헤더 라우팅(Header Routing): 메시지 헤더의 메타 데이터를 기반으로 라우팅을 결정하는 방식.

 

적합한 상황

  1. 복잡한 라우팅이 필요할 때
  2. 작은 단위의 메시지 처리가 필요할 때

장점

  1. 높은 신뢰성
  2. 유연한 라우팅
  3. 다양한 언어 지원

단점

  1. 비교적 낮은 처리량(Kafka 대비)

Apache Kafka

  • 고성능, 분산 스트리밍으로 대량의 데이터 스트림을 실시간으로 처리할 수 있는 메시지 브로커

적합한 상황

  • 대용량 대처리 처리가 필요한 상황
    1. 로그 수집
    2. 스트리밍 데이터 분석
    3. 이벤트 소싱
    4. 대규모 데이터 파이프라인 구축

장점

  1. 높은 처리량
  2. 데이터의 복제, 지속성, 확장성에 뛰어남

RabbitMQ vs Kafka

1. 주요 목표

  • Kafka : 대규모 데이터 처리, 높은 연산량
  • RabbitMQ: 메시지 라우팅, 다양한 메시지 처리 패턴

2. 메시지 모델

  • Kafka : 시간 순서에 따라 메시지를 저장하는 로그 기반 시스템
  • RabbitMQ : 전통적인 메시지 큐 모델(Advenced Message Queuing Protocol)

3. 사용 사례

로그, 매트릭, 자동화

서비스의 규모가 거대해지면 로그, 매트릭, 자동화에 대해 반드시 고려해야 한다.

  • 로그
    • 오류, 문제, 에러 등의 주요 이벤트들을 쉽게 찾아내기 위해 필요하다. 
  • 매트릭
    • 서버의 성능, 가용성, 안정성 등을 측정하기 위한 지표이다.
    • 아래는 대표적인 매트릭 지표
      1. 처리량
        시간 단위 당 처리량.
        서버가 얼마나 많은 트래픽을 처리할 수 있는 지 평가.
      2. 응답 시간
        요청을 받고, 응답하기 까지의 시간.
        서버가 얼마나 빠르게 반응하는지 평가
        사용자 경험(UX)에 직접적인 영향
      3. 가용성
        서버 혹은 시스템이 요청을 받아 처리할 수 있는 준비 상태를 유지하는 비율.
      4. 에러율
        요청에 대한 응답 실패 비율
        시스템의 안정성, 오류 대처 능력 평가
      5. 자원 사용률
        CPU 사용률, 메모리 사용률, 각종 I/O 등 서버 자원의 사용률.
        시스템의 병목을 식별하고, 리소스 할당 및 최적화에 참고하기 유용한 지표
  • 자동화
    • CI/CD
    • 시스템이 커질수록, 생상성의 증가를 위해 자동화는 필수이다.
    • 각종 도구들을 활용해 자동으로 빌드, 테스트, 배포 등 각종 개발 절차들을 자동화

전체 구성도