Sdílet prostřednictvím


Vývoj vysoce dostupných aplikací pomocí zprostředkovatele MQTT

Vytvoření vysoce dostupné aplikace pomocí Zprostředkovatele MQTT zahrnuje pečlivé zvážení typů relací, kvality služby (QoS), potvrzení zpráv, paralelní zpracování zpráv, uchovávání zpráv a sdílených odběrů. Zprostředkovatel MQTT obsahuje distribuovaný zprostředkovatel zpráv v paměti a úložiště, které poskytuje uchovávání zpráv a integrovanou správu stavu pomocí sémantiky MQTT.

Následující části popisují nastavení a funkce, které přispívají k robustní, nulové ztrátě zpráv a distribuované aplikaci.

Kvalita služby (QoS)

Vydavatelé i odběratelé by měli k zajištění doručení zpráv alespoň jednou použít QoS-1 . Zprostředkovatel MQTT ukládá a překládá zprávy, dokud neobdrží potvrzení (ACK) od příjemce, aby se během přenosu neztratily žádné zprávy.

Typ relace a příznak Vyčistit relaci

Pokud chcete zajistit nulovou ztrátu zpráv, nastavte příznak clean-start na false při připojování ke zprostředkovateli MQTT. Toto nastavení informuje zprostředkovatele, aby zachoval stav relace pro klienta, zachovalo odběry a nepotvrpěné zprávy mezi připojeními. Pokud se klient odpojí a později se znovu připojí, obnoví se od místa, kde skončil, a prostřednictvím opakování doručení zprávy obdrží všechny nepřipojené zprávy QoS-1. Pokud je nakonfigurovaný, zprostředkovatel MQTT vyprší platnost relace klienta, pokud se klient znovu nepřipojí v intervalu vypršení platnosti relace. Výchozí hodnota je jeden den.

Receive-Max v aplikacích s více vlákny

Vícevláknové aplikace by měly k paralelnímu zpracování zpráv používat maximum příjmu (65 535 max) a používat řízení toku. Toto nastavení optimalizuje zpracování zpráv tím, že umožňuje souběžné práci s více vlákny na zprávách a bez přetížení aplikace vysokou rychlostí zpráv nad kapacitou aplikace. Každé vlákno může zprávu zpracovat nezávisle a po dokončení odeslat potvrzení. Typickým postupem je konfigurace maximálního příjmu úměrně počtu vláken, která aplikace používá.

Potvrzení zpráv

Když aplikace odběratele odešle potvrzení zprávy QoS-1, převezme vlastnictví zprávy. Po přijetí potvrzení zprávy QoS-1 přestane zprostředkovatel MQTT sledovat zprávu pro danou aplikaci a téma. Správný přenos vlastnictví zajišťuje zachování zpráv v případě problémů se zpracováním nebo chybových ukončení aplikace. Pokud chce aplikace chránit před chybovým ukončením aplikace, aplikace by neměla převzít vlastnictví, než úspěšně dokončí zpracování této zprávy. Aplikace, které se přihlašují ke zprostředkovateli MQTT, by měly pozdržet potvrzení zpráv, dokud se zpracování nedokončí až do maximální hodnoty příjmu s maximální hodnotou 65 535. Může to zahrnovat předání zprávy nebo odvození zprávy zprostředkovateli MQTT pro další odeslání.

Uchovávání zpráv a chování zprostředkovatele

Zprostředkovatel uchovává zprávy, dokud neobdrží potvrzení od odběratele, což zajišťuje nulovou ztrátu zpráv. Toto chování zaručuje, že i když aplikace odběratele dočasně dojde k chybovému ukončení nebo ztrátě připojení, zprávy se neztratí a dají se zpracovat, jakmile se aplikace znovu připojí. Zprávy zprostředkovatele MQTT můžou vypršet, pokud je nakonfigurované intervalem vypršení platnosti zprávy a odběratel zprávu nespotřeboval.

Zachované zprávy

Zachované zprávy udržují dočasný stav aplikace, například nejnovější stav nebo hodnotu konkrétního tématu. Když se nový klient přihlásí k odběru tématu, obdrží poslední zachovanou zprávu a zajistí, že bude mít nejaktuálnější informace.

Udržování naživu

Pokud chcete zajistit vysokou dostupnost v případě chyb připojení nebo poklesů, nastavte vhodné intervaly udržování naživu pro komunikaci mezi klientem a serverem. Během nečinných období klienti odesílají příkaz PINGREQs a čekají na PINGRESPs. Pokud žádná odpověď není, implementujte logiku automatického opětovného připojení v klientovi za účelem opětovného navázání připojení. Většina klientů, jako je Paho, má integrovanou logiku opakování. Vzhledem k tomu, že zprostředkovatel MQTT je odolný proti chybám, opětovné připojení proběhne úspěšně, pokud existuje alespoň dvě instance zprostředkovatele, které jsou v pořádku, front-end a back-end.

Konečná konzistence s předplatným QoS-1

Předplatná MQTT s QoS-1 zajišťují konečnou konzistenci napříč identickými instancemi aplikací přihlášením k odběru sdíleného tématu. Při publikování zpráv instance přijímají a replikují data s alespoň jednou doručením. Instance musí zpracovávat duplicity a tolerovat dočasné nekonzistence, dokud nebudou data synchronizována.

Sdílená předplatná

Sdílená předplatná umožňují vyrovnávání zatížení napříč několika instancemi vysoce dostupné aplikace. Místo toho, aby každý odběratel obdržel kopii každé zprávy, se zprávy rovnoměrně distribuují mezi odběratele. Zprostředkovatel MQTT v současné době podporuje pouze algoritmus kruhového dotazování, který distribuuje zprávy, což aplikaci umožňuje horizontální navýšení kapacity. Typickým případem použití je nasazení více podů pomocí sady replik Kubernetes, které se všechny přihlásí k odběru zprostředkovatele MQTT pomocí stejného filtru témat ve sdíleném předplatném.

Úložiště stavů

Úložiště stavů je replikovaná hodnota HashMap v paměti pro správu stavu zpracování aplikace. Na rozdíl od atd., například úložiště stavu upřednostňuje vysokou rychlost propustnosti, horizontální škálování a nízkou latenci prostřednictvím datových struktur v paměti, dělení a řetězové replikace. Umožňuje aplikacím používat distribuovanou povahu a odolnost proti chybám při rychlém přístupu ke konzistentnímu stavu napříč instancemi. Použití integrovaného úložiště klíč-hodnota poskytované distribuovaným zprostředkovatelem:

  • Implementujte dočasné operace úložiště a načítání pomocí rozhraní API úložiště klíč-hodnota zprostředkovatele, které zajišťuje správné zpracování chyb a konzistenci dat. Dočasný stav je krátkodobé úložiště dat používané při stavovém zpracování pro rychlý přístup k průběžným výsledkům nebo metadatům během výpočtů v reálném čase. V kontextu aplikace s vysokou dostupností pomáhá dočasný stav obnovit stavy aplikací mezi chybovými ukončeními. Může být zapsán na disk, ale zůstává dočasný, na rozdíl od studeného úložiště určeného pro dlouhodobé ukládání zřídka používaných dat.

  • Úložiště stavů můžete použít ke sdílení stavu, ukládání do mezipaměti, konfigurace nebo jiných důležitých dat mezi několika instancemi aplikace, což jim umožní zachovat konzistentní přehled o datech.

Použití integrované integrace zprostředkovatele MQTT Dapr

Pro jednodušší případy použití může aplikace využívat Dapr (Distributed Application Runtime). Dapr je opensourcový přenosný modul runtime řízený událostmi, který zjednodušuje vytváření mikroslužeb a distribuovaných aplikací. Nabízí sadu stavebních bloků, jako je volání mezi službami, správa stavu a publikování nebo přihlášení k odběru zpráv.

Dapr se nabízí jako součást zprostředkovatele MQTT, abstrakce podrobností o správě relací MQTT, technologii QoS zpráv a potvrzení a integrované úložiště klíč-hodnota, což je praktická volba pro vývoj vysoce dostupné aplikace pro jednoduché případy použití:

  • Navrhněte aplikaci pomocí stavebních bloků Dapr, jako je správa stavu pro zpracování úložiště klíč-hodnota, a publikování/přihlášení k odběru zpráv pro interakci s zprostředkovatelem MQTT. Pokud případ použití vyžaduje stavební bloky a abstrakce, které Dapr nepodporuje, zvažte použití výše uvedených funkcí zprostředkovatele MQTT.

  • Implementujte aplikaci s využitím preferovaného programovacího jazyka a architektury a využijte sady DAPR SDK nebo rozhraní API pro bezproblémovou integraci s zprostředkovatelem a úložištěm klíč-hodnota.

Kontrolní seznam pro vývoj vysoce dostupné aplikace

  • Zvolte odpovídající klientskou knihovnu MQTT pro váš programovací jazyk. Klient by měl podporovat MQTT v5. Pokud je vaše aplikace citlivá na latenci, použijte knihovnu založenou na jazyce C nebo Rust.
  • Nakonfigurujte klientskou knihovnu pro připojení ke zprostředkovateli MQTT s příznakem čisté relace nastaveným na false požadovanou úroveň QoS (QoS-1).
  • Rozhodněte se o vhodné hodnotě pro vypršení platnosti relace, vypršení platnosti zprávy a intervaly uchování.
  • Implementujte logiku zpracování zpráv pro aplikaci odběratele, včetně odeslání potvrzení při úspěšném doručení nebo zpracování zprávy.
  • U vícevláknových aplikací nakonfigurujte parametr maximálního příjmu tak, aby umožňoval paralelní zpracování zpráv.
  • K zachování dočasného stavu aplikace využijte uchovávaných zpráv.
  • Využijte distribuované úložiště stavů ke správě dočasného stavu aplikace.
  • Pokud je váš případ použití jednoduchý a nevyžaduje podrobnou kontrolu nad připojením MQTT nebo zpracováním zpráv, vyhodnoťte Dapr a vyvíjejte aplikaci.
  • Implementujte sdílená předplatná k rovnoměrné distribuci zpráv mezi více instancí aplikace, což umožňuje efektivní škálování.