Azure Event Grid MQTT Broker의 공유 구독은 여러 클라이언트가 단일 토픽 구독의 메시지를 그룹으로 사용할 수 있도록 하는 메시징 패턴이며, 이를 통해 broker는 부하 분산된 방식으로 클라이언트 간에 메시지를 배포할 수 있습니다. 각 구독자가 모든 메시지를 받는 대신, 공유 그룹 내의 하나의 클라이언트만 각 메시지를 수신하여 백 엔드 처리 시스템의 확장성 및 처리량을 향상합니다.
공유 구독 작동 방식
표준 MQTT 구독에서 구독된 모든 클라이언트는 각 메시지의 복사본을 받습니다. 브로커는 공유 구독을 사용하여 클라이언트 그룹을 단일 논리 구독자로 취급하고 이러한 구독자 간에 메시지를 배포합니다.
- 공유 필터와 일치하는 각 애플리케이션 메시지는 그룹 내의 활성 세션 하나에만 전달됩니다.
- 배포는 일반적으로 그룹 내에서 임의 방식으로 부하 분산됩니다.
- 클라이언트 세션에 공유 구독과 비공유 구독이 동시에 포함될 수 있습니다.
- 여러 그룹이 동일한 토픽을 독립적으로 구독할 수 있습니다.
공유 구독 토픽 형식
공유 구독은 다음 형식을 사용합니다.
$share/{group-name}/{topic-filter}
구성 요소:
-
$share→ 공유 구독 식별 -
{group-name}→ 논리적 소비자 그룹 -
{topic-filter}→ 토픽 또는 와일드카드 구독
Example:
$share/order-processors/retail/orders/#
주요 특징
- 부하 분산 사용: 메시지는 효율적인 처리를 보장하기 위해 동일한 그룹의 클라이언트에 분산됩니다.
- 수평 확장성: 소비자는 게시자에 영향을 주지 않고 독립적으로 확장할 수 있습니다.
- 독립 소비자 그룹: 여러 공유 그룹은 각자 독립적으로 동일한 메시지를 받고 내부적으로 균형을 맞춥니다.
- 혼합 구독 지원: 클라이언트는 동일한 세션에서 공유 및 비공유 구독을 모두 유지할 수 있습니다.
예제 시나리오: 소매 주문 처리
Event Grid MQTT Broker를 사용하는 소매 주문 처리 시나리오를 고려합니다.
- 항목:
retail/orders - 공유 그룹:
order-workers - 클라이언트: Worker1, Worker2, Worker3
흐름:
- 주문은
retail/orders로 발행됩니다. - 모든 작업자는 다음을 구독합니다.
$share/order-workers/retail/orders - Event Grid MQTT Broker 배포:
- Order 1 → Worker1
- Order 2 → Worker2
- Order 3 → Worker3
각 주문은 한 번 처리되고 시스템은 수평으로 크기가 조정됩니다.
프로토콜 동작 및 제약 조건
MQTT 버전 지원
- MQTT 5 전용 기능
- MQTT 3.1.1 클라이언트가
$share/...를 시도할 때 연결이 끊어집니다.
메시지 배달 의미 체계
- 각 메시지는 그룹당 하나의 클라이언트로 배달됩니다.
- 배달은 한 번 이상의 의미 체계를 따릅니다(QoS 1)
메시지 정렬
- 그룹 구성원 간에 엄격한 순서 지정 보장 없음
세션 동작
- 세션 만료는 메시지 배달에 영향을 줍니다.
- 클라이언트 연결이 끊어지고 세션이 만료되면 메시지가 다시 할당될 수 있습니다.
- 영구 세션은 안정성을 향상시킵니다.
Event Grid MQTT Broker의 사용 사례
공유 구독은 다음 작업에 적합합니다.
- 처리량이 높은 IoT 원격 분석 처리: 여러 처리 서비스에 원격 분석 또는 이벤트를 분산합니다.
- 백 엔드 작업자 풀/마이크로서비스: 무상태 서비스가 이벤트를 중복 없이 처리할 수 있도록 설정합니다.
- UNS(통합 네임스페이스) 소비자: 처리량이 높은 산업용 데이터 스트림을 효율적으로 사용합니다.
공유 구독을 사용하는 경우
다음과 같은 경우 공유 구독을 사용합니다.
- 병렬 메시지 처리가 필요합니다.
- 단일 소비자는 부하를 처리할 수 없습니다.
- 확장 가능하고 복원력 있는 아키텍처를 원합니다.
- 사용자 지정 부하 분산을 빌드하지 않으려고 합니다.
관련 콘텐츠
- MQTT broker 개요
- Azure Event Grid MQTT broker에서 지원하는 MQTT 기능
- MQTT 메시지 게시 및 구독