Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ž se aplikace odběratele dočasně chybově ukončí nebo ztratí 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. Pokud chcete použít integrované úložiště klíč-hodnota, které poskytuje distribuovaný zprostředkovatel:
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.
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
falsepož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.
- Implementujte sdílená předplatná k rovnoměrné distribuci zpráv mezi více instancí aplikace, což umožňuje efektivní škálování.