
1. 스트리밍 형 전송에서 메시지 배송의 한계점
스트리밍 형 데이터 전송에서 메시지가 처음 생성되는 기기를 ‘클라이언트(client)’한다. 그러나 클라이언트의 수가 많아져 메시지 배송이 많아지면 성능과 신뢰성 을 모두 보장하기 어려워진다. 이에 대해 조금 더 구체적으로 메시지 배송의 한계점에 대해 알아보자.
1-1. 메시지 배송의 성능 문제를 해결해주는 메시지 브로커

- 메시지 브로커(message broker)
- 메시지 배송 시스템에서 데이터를 일시적으로 축적하여 분산 스토리지에 보내주는 역할
- 메시지 브로커의 역할
- 외부에서 전해오는 메시지의 양을 제어할 수 없음 → 급격한 메시지의 양의 증가에 대응할 수 있는 능력이 중요
- 그러나 상황에 따라 스토리지 성능을 자유자재로 변화시킬 수 없으므로 메시지 브로커가 중간 단계 역할을 수행하게 된다.
- 결국, 메시지 브로커는 스토리지의 성능 문제를 해결해주는 역할을 하게 된다.
- 빅데이터에서는 Apache Kafka 오픈 소스를 사용하고, 클라우드 서비스에서는 Amazon Kinesis를 주로 사용한다.
- 메시지 브로커에서의 생산자와 소비자
- 생산자(producer) : 메시지 브로커에 데이터를 넣는(push) 역할
- 소비자(consumer) : 메시지 브로커에 데이터를 꺼내오는(pull) 역할
1-2. 메시지 배송의 신뢰성(reliability) 문제
스트리밍 형은 일반적으로 네트워크를 거쳐 전송되는데, 신뢰성이 낮은 네트워크에서는 메시지의 중복과 누락이 발생 할 수 있다. 이러한 상황에서 메시지 배송은 아래 3가지 원칙 중 하나를 보장할 수 있어야 한다.
(1) at most once
- (네트워크 장애와 같은 오류가 발생하더라도) 메시지는 한 번만 전송되어야 한다.
- 데이터 결손을 피하기 위한 재전송 시스템에서는 at most once 원칙을 만족할 수 없는 한계점이 있다.
(2) exactly once
- 메시지는 손실 및 중복 없이 한 번만 전송되어야 한다.
- exactly once를 만족하려면 (송신 측 → 코디네이터 → 수신 측) 처럼 메시지 배송에서 코디네이터가 반드시 존재해야 되는 한계점이 있다.
(3) at least once
- (중복이 발생하더라도) 메시지는 확실하게 전송되어야 한다.
- 사용자가 직접 데이터를 중복 제거해야 한다는 한계점이 존재한다.
결국, 메시지 배송 시스템은 하나 이상의 한계점을 가지고 있기 때문에 중복도 결손도 없는 신뢰성이 높은 메시지 배송을 실현하는 것은 결코 쉽지 않다. 그래서 대부분의 메시지 배송 시스템은 ‘at lest once’ 원칙을 보장하고 있어서 사용자가 데이터 중복을 제거하는 것이 필요해진다. 그럼 일반적으로 벌크 형, 스트리밍 형 전송에서 데이터 중복 제거를 하는 방법에 대해서도 알아보자.
1-3. 메시지 배송에서의 데이터 중복 제거
- 벌크 형 전송 - 오프셋을 이용한 중복 제거
- 메시지에 오프셋(파일 안의 시작 위치)를 함께 실어서 전송하는 방식
- 파일마다 위치가 정해지므로 메시지 중복이 발생해도 문제가 발생하지 않는다.
- 스트리밍 형 전송 - 고유 ID를 이용한 중복 제거
- 모든 메시지에 ‘UUID(Universally Unique IDentifier’와 같은 고유 ID를 지정하는 방식
- 그러나 모든 ID를 기억하는 것은 매우 비현실적이다.
- 이를 해결하기 위해 정해진 기간(ex. 최근 1시간)의 최근 ID만 기억하고, 그 이후의 메시지의 중복은 허용하도록 한다.
사실 메시지 브로커는 메시지 배송의 안정성을 높이기 위해 등장한 개념이었다. 그러나 위의 내용을 통해 메시지 브로커 안에서도 중복이 발생할 수 있다는 것을 볼 수 있었고, 결국 메시지 배송 시스템을 설계하기 위해서는 성능과 신뢰성을 따로 생각해야 한다.
📘참고 서적: [빅데이터를 지탱하는 기술]
니시다 케이스케 지음 / 정인식 옮김
'[기술서적]' 카테고리의 다른 글
| [빅데이터를 지탱하는 기술] Chapter5.빅데이터의 파이프라인 - (1) (0) | 2023.06.02 |
|---|---|
| [빅데이터를 지탱하는 기술] Chapter4.빅데이터의 축적 - (3) (0) | 2023.06.01 |
| [빅데이터를 지탱하는 기술] Chapter4.빅데이터의 축적 - (1) (0) | 2023.06.01 |
| [빅데이터를 지탱하는 기술] Chapter3.빅데이터의 분산 처리 - (2) (0) | 2023.06.01 |
| [빅데이터를 지탱하는 기술] Chapter3.빅데이터의 분산 처리 - (1) (0) | 2023.06.01 |