참고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): 메시지 헤더의 메타 데이터를 기반으로 라우팅을 결정하는 방식.
적합한 상황
- 복잡한 라우팅이 필요할 때
- 작은 단위의 메시지 처리가 필요할 때
장점
- 높은 신뢰성
- 유연한 라우팅
- 다양한 언어 지원
단점
- 비교적 낮은 처리량(Kafka 대비)
Apache Kafka
- 고성능, 분산 스트리밍으로 대량의 데이터 스트림을 실시간으로 처리할 수 있는 메시지 브로커
적합한 상황
- 대용량 대처리 처리가 필요한 상황
- 로그 수집
- 스트리밍 데이터 분석
- 이벤트 소싱
- 대규모 데이터 파이프라인 구축
장점
- 높은 처리량
- 데이터의 복제, 지속성, 확장성에 뛰어남
RabbitMQ vs Kafka
1. 주요 목표
- Kafka : 대규모 데이터 처리, 높은 연산량
- RabbitMQ: 메시지 라우팅, 다양한 메시지 처리 패턴
2. 메시지 모델
- Kafka : 시간 순서에 따라 메시지를 저장하는 로그 기반 시스템
- RabbitMQ : 전통적인 메시지 큐 모델(Advenced Message Queuing Protocol)
3. 사용 사례
로그, 매트릭, 자동화
서비스의 규모가 거대해지면 로그, 매트릭, 자동화에 대해 반드시 고려해야 한다.
- 로그
- 오류, 문제, 에러 등의 주요 이벤트들을 쉽게 찾아내기 위해 필요하다.
- 매트릭
- 서버의 성능, 가용성, 안정성 등을 측정하기 위한 지표이다.
- 아래는 대표적인 매트릭 지표
- 처리량
시간 단위 당 처리량.
서버가 얼마나 많은 트래픽을 처리할 수 있는 지 평가. - 응답 시간
요청을 받고, 응답하기 까지의 시간.
서버가 얼마나 빠르게 반응하는지 평가
사용자 경험(UX)에 직접적인 영향 - 가용성
서버 혹은 시스템이 요청을 받아 처리할 수 있는 준비 상태를 유지하는 비율. - 에러율
요청에 대한 응답 실패 비율
시스템의 안정성, 오류 대처 능력 평가 - 자원 사용률
CPU 사용률, 메모리 사용률, 각종 I/O 등 서버 자원의 사용률.
시스템의 병목을 식별하고, 리소스 할당 및 최적화에 참고하기 유용한 지표
- 처리량
- 자동화
- CI/CD
- 시스템이 커질수록, 생상성의 증가를 위해 자동화는 필수이다.
- 각종 도구들을 활용해 자동으로 빌드, 테스트, 배포 등 각종 개발 절차들을 자동화
전체 구성도