Przegląd subskrypcji udostępnionych w brokerze MQTT usługi Azure Event Grid

Wspólne subskrypcje w brokerze MQTT Azure Event Grid są wzorcem komunikacyjnym, który umożliwia wielu klientom korzystanie z komunikatów z jednej subskrypcji tematu jako grupa, co umożliwia brokerowi dystrybucję komunikatów między klientami w zrównoważony sposób. Zamiast każdego subskrybenta odbierającego każdy komunikat, tylko jeden klient w grupie udostępnionej odbiera każdy komunikat, zwiększając skalowalność i przepływność systemów przetwarzania zaplecza.

Jak działają subskrypcje udostępnione

W standardowej subskrypcji MQTT każdy subskrybowany klient otrzymuje kopię każdego komunikatu. W przypadku subskrypcji udostępnionych broker traktuje grupę klientów jako pojedynczego subskrybenta logicznego i dystrybuuje między nimi komunikaty.

  • Każdy komunikat aplikacji pasujący do filtru udostępnionego jest dostarczany tylko do jednej aktywnej sesji w grupie
  • Dystrybucja jest zazwyczaj zrównoważona za pomocą losowego rozdzielenia w grupie.
  • Sesja klienta może zawierać jednocześnie zarówno subskrypcje udostępnione, jak i nieudostępne
  • Wiele grup może subskrybować ten sam temat niezależnie

Format udostępnionego tematu subskrypcji

Subskrypcje udostępnione używają następującego formatu:

$share/{group-name}/{topic-filter}

Składniki:

  • $share → Identyfikuje udostępnioną subskrypcję
  • {group-name} grupa logicznych konsumentów
  • {topic-filter} → subskrypcja tematyczna lub subskrypcja wieloznaczna

Example:

$share/order-processors/retail/orders/#

Kluczowe cechy

  • Zużycie ze zrównoważonym obciążeniem: wiadomości są równomiernie rozdzielane pomiędzy klientów w tej samej grupie, aby zapewnić wydajne przetwarzanie.
  • Skalowalność w poziomie: Konsumenci mogą skalować się poziomo niezależnie, bez wpływu na wydawców.
  • Niezależne grupy konsumentów: wiele wspólnych grup otrzymuje te same wiadomości niezależnie, zachowując wewnętrzną równowagę.
  • Obsługa subskrypcji mieszanej: klient może obsługiwać zarówno współużytkowane, jak i nieudostępne subskrypcje w tej samej sesji.

Przykładowy scenariusz: Przetwarzanie zamówień detalicznych

Rozważmy scenariusz przetwarzania zamówień detalicznych przy użyciu brokera MQTT usługi Event Grid:

  • Temat: retail/orders
  • Grupa udostępniona: order-workers
  • Klienci: Worker1, Worker2, Worker3

Przepływ:

  1. Zamówienia są publikowane w retail/orders
  2. Wszyscy pracownicy subskrybują: $share/order-workers/retail/orders
  3. Broker usługi MQTT w Event Grid dystrybuuje:
    • Zlecenie 1 → Pracownik1
    • Zamówienie 2 → Worker2
    • Zlecenie 3 → Pracownik3

Każde zamówienie jest przetwarzane raz, podczas gdy system skaluje się horyzontalnie.

Diagram brokera MQTT usługi Event Grid, który dystrybuuje trzy zamówienia detaliczne do trzech procesów roboczych przy użyciu udostępnionych procesów roboczych grup subskrypcji.

Zachowanie i ograniczenia protokołu

Obsługa wersji MQTT

  • Funkcja tylko MQTT 5
  • Klienci MQTT 3.1.1 podejmujący próby $share/... zostaną rozłączeni

Semantyka dostarczania komunikatów

  • Każdy komunikat jest dostarczany do jednego klienta na grupę
  • Dostarczanie odbywa się zgodnie z semantyką dostarczenia przynajmniej raz (QoS 1)

Kolejność komunikatów

  • Brak zapewnienia ścisłego porządku pomiędzy członkami grupy

Zachowanie sesji

  • Wygaśnięcie sesji ma wpływ na dostarczanie komunikatów:
    • Jeśli klient rozłącza się i wygasa sesja, komunikaty mogą zostać ponownie przydzielone
    • Trwałe sesje zwiększają niezawodność

Przypadki użycia w brokerze MQTT usługi Event Grid

Subskrypcje udostępnione są idealne dla:

  • Przetwarzanie danych telemetrycznych IoT o wysokiej przepływności: dystrybuuj dane telemetryczne lub zdarzenia w wielu usługach przetwarzania.
  • Pule pracowników zaplecza/mikrousługi: umożliwiają usługi bezstanowe do przetwarzania zdarzeń bez powielania.
  • Użytkownicy ujednoliconej przestrzeni nazw (UNS): efektywnie zużywają strumienie danych przemysłowych o wysokiej przepływności.

Kiedy używać subskrypcji udostępnionych

Użyj subskrypcji udostępnionych, gdy:

  • Potrzebujesz równoległego przetwarzania komunikatów.
  • Pojedynczy użytkownik nie może obsłużyć obciążenia.
  • Potrzebujesz skalowalnych i odpornych architektur.
  • Chcesz unikać tworzenia własnego rozwiązania do równoważenia obciążenia.

Diagram przedstawiający udostępnioną subskrypcję, w której temat dystrybuuje komunikaty między wieloma użytkownikami na potrzeby przetwarzania równoległego.