Eszköz-újracsatlakozások kezelése rugalmas alkalmazások létrehozásához

Ez a cikk magas szintű útmutatást nyújt a rugalmas alkalmazások tervezéséhez egy eszköz-újracsatlakozási stratégia hozzáadásával. Ez megmagyarázza, hogy miért kell leválasztani az eszközöket, és miért kell újracsatlakozni. Emellett konkrét stratégiákat ír le, amelyekkel a fejlesztők újracsatlakoztathatják a leválasztott eszközöket.

Mi okozza a leválasztást?

Az eszközök IoT Hubról való leválasztása leggyakoribb okai a következők:

  • Lejárt SAS-jogkivonat vagy X.509-tanúsítvány. Az eszköz SAS-jogkivonata vagy X.509 hitelesítési tanúsítványa lejárt.
  • Hálózatkimaradás. Az eszköz hálózati kapcsolata megszakad.
  • Szolgáltatáskimaradás. Az Azure IoT Hub szolgáltatás hibákat tapasztal, vagy átmenetileg nem érhető el.
  • Szolgáltatás-újrakonfigurálás. Az IoT Hub szolgáltatásbeállítások újrakonfigurálása után az eszközök újraépítést vagy újracsatlakozást igényelhetnek.

Miért van szükség újracsatlakozási stratégiára?

Fontos, hogy legyen stratégiája az eszközök újracsatlakoztatására az alábbi szakaszokban leírtak szerint. Újracsatlakozási stratégia nélkül negatív hatással lehet a megoldás teljesítményére, rendelkezésre állására és költségeire.

A tömeges újracsatlakozási kísérletek DDoS-t okozhatnak

A másodpercenkénti nagy számú csatlakozási kísérlet az elosztott szolgáltatásmegtagadási támadáshoz (DDoS) hasonló állapotot okozhat. Ez a forgatókönyv a milliókban számozott nagy eszközflotta esetében releváns. A probléma túlnyúlhat a flottát birtokban lévő bérlőn, és hatással lehet a teljes skálázási egységre. A DDoS nagy költségnövekedést eredményezhet az Azure IoT Hub-erőforrások esetében, mivel vertikális felskálázásra van szükség. A DDoS az erőforrás-éhezés miatt a megoldás teljesítményét is ronthatja. Rosszabb esetben a DDoS szolgáltatáskimaradást okozhat.

A központ meghibásodása vagy újrakonfigurálása számos eszközt leválaszthat

Miután egy IoT Hub hibát tapasztal, vagy miután újrakonfigurálta a szolgáltatásbeállításokat egy IoT Hubon, előfordulhat, hogy az eszközök le lesznek választva. A megfelelő feladatátvételhez a leválasztott eszközök újraépítést igényelnek. A feladatátvételi lehetőségekről további információt az IoT Hub magas rendelkezésre állása és vészhelyreállítása című témakörben talál.

Sok eszköz újraépítése növelheti a költségeket

Miután az eszközök lecsatlakoztak az IoT Hubról, az optimális megoldás az eszköz újracsatlakoztatása ahelyett, hogy újra kiépíteném. Ha az IoT Hubot a DPS-vel használja, a DPS kiépítésenkénti költséggel jár. Ha sok eszközt újraépít a DPS-en, az növeli az IoT-megoldás költségeit. A DPS kiépítési költségeiről további információt az IoT Hub DPS díjszabásában talál.

Rugalmasságot szem előtt tartó tervezés

Az IoT-eszközök gyakran nem folytonos vagy instabil hálózati kapcsolatokra támaszkodnak (például GSM vagy műhold). Hibák akkor fordulhatnak elő, ha az eszközök időszakos szolgáltatás-rendelkezésre állás, infrastruktúraszintű vagy átmeneti hibák miatt kommunikálnak a felhőalapú szolgáltatásokkal. Az eszközön futó alkalmazásoknak kezelnie kell az üzenetek küldéséhez és fogadásához szükséges kapcsolati, újracsatlakozási és újrapróbálkozási logikát. Emellett az újrapróbálkozásokra vonatkozó stratégiai követelmények nagymértékben függnek az eszköz IoT-forgatókönyvétől, környezetétől és képességeitől.

Az Azure IoT Hub eszközoldali SDK-k célja, hogy leegyszerűsítse a felhőről az eszközre és az eszközről a felhőbe való kapcsolódást és kommunikációt. Ezek az SDK-k robusztus módot biztosítanak az Azure IoT Hubhoz való csatlakozásra, valamint az üzenetek küldésének és fogadásának átfogó lehetőségeire. A fejlesztők a meglévő implementációt is módosíthatják egy adott forgatókönyv jobb újrapróbálkozási stratégiájának testreszabásához.

A kapcsolatot és a megbízható üzenetküldést támogató releváns SDK-funkciók az alábbi IoT Hub-eszközoldali SDK-kban érhetők el. További információkért tekintse meg az API dokumentációját vagy az adott SDK-t:

Az alábbi szakaszok a kapcsolatot támogató SDK-funkciókat ismertetik.

Csatlakozás és újrapróbálkozás

Ez a szakasz áttekintést nyújt a kapcsolatok kezelése során elérhető újracsatlakozási és újrapróbálkozási mintákról. Részletesen ismerteti az eszközalkalmazásban egy másik újrapróbálkozási szabályzat használatára vonatkozó megvalósítási útmutatót, és felsorolja az eszköz SDK-jából származó releváns API-kat.

Hibaminták

Csatlakozás ionhibák számos szinten fordulhatnak elő:

  • Hálózati hibák: leválasztott szoftvercsatorna és névfeloldási hibák

  • Protokollszintű hibák HTTP, AMQP és MQTT átvitel esetén: leválasztott hivatkozások vagy lejárt munkamenetek

  • Alkalmazásszintű hibák, amelyek helyi hibákból erednek: érvénytelen hitelesítő adatok vagy szolgáltatás viselkedése (például túllépve a kvótát vagy a szabályozást)

Az eszköz SDK-k mindhárom szinten észlelik a hibákat. Az eszközoldali SDK-k azonban nem észlelik és kezelik az operációs rendszerrel kapcsolatos hibákat és hardverhibákat. Az SDK kialakítása az Azure Architecture Center átmeneti hibakezelési útmutatóján alapul.

Újrapróbálkozási minták

Az alábbi lépések a kapcsolati hibák észlelésekor az újrapróbálkozási folyamatot írják le:

  1. Az SDK észleli a hibát és a kapcsolódó hibát a hálózatban, a protokollban vagy az alkalmazásban.

  2. Az SDK a hibaszűrővel határozza meg a hiba típusát, és döntse el, hogy szükség van-e újrapróbálkozásra.

  3. Ha az SDK helyreállíthatatlan hibát azonosít, a rendszer leállítja az olyan műveleteket, mint a kapcsolat, a küldés és a fogadás. Az SDK értesíti a felhasználót. A helyreállíthatatlan hibák közé tartozik például egy hitelesítési hiba és egy hibás végponthiba.

  4. Ha az SDK helyreállítható hibát azonosít, a megadott újrapróbálkozési szabályzatnak megfelelően újra próbálkozik, amíg a megadott időtúllépés el nem telik. Az SDK alapértelmezés szerint exponenciális visszatartást és jitter újrapróbálkozási szabályzatot használ.

  5. Amikor a megadott időtúllépés lejár, az SDK nem próbál csatlakozni vagy küldeni. Értesíti a felhasználót.

  6. Az SDK lehetővé teszi, hogy a felhasználó visszahívást csatoljon a kapcsolat állapotváltozásainak fogadásához.

Az SDK-k általában három újrapróbálkozési szabályzatot biztosítanak:

  • Exponenciális visszatartás a jitterrel: Ez az alapértelmezett újrapróbálkozási szabályzat kezdetben agresszív, és idővel lelassul, amíg el nem éri a maximális késleltetést. A kialakítás az Azure Architecture Center újrapróbálkozása alapján készült.

  • Egyéni újrapróbálkozás: Egyes SDK-nyelvek esetében létrehozhat egy egyéni újrapróbálkozési szabályzatot, amely jobban megfelel a forgatókönyvnek, majd beszúrhatja a RetryPolicyba. Az egyéni újrapróbálkozás nem érhető el a C SDK-n, és jelenleg nem támogatott a Python SDK-n. A Python SDK szükség szerint újracsatlakozik.

  • Nincs újrapróbálkozás: Az újrapróbálkozési szabályzatot "nincs újrapróbálkozás" értékre állíthatja, ami letiltja az újrapróbálkozás logikáját. Az SDK megpróbál egyszer csatlakozni, és egyszer üzenetet küld, feltéve, hogy a kapcsolat létrejött. Ezt a szabályzatot általában sávszélességgel vagy költségproblémákkal kapcsolatos forgatókönyvekben használják. Ha ezt a beállítást választja, a sikertelen üzenetek elvesznek, és nem állíthatók helyre.

Újrapróbálkoznak a szabályzat API-i

SDK SetRetryPolicy metódus Szabályzat-implementációk Megvalósítási útmutató
C IOTHUB_CLIENT_RESULT IoTHubDeviceClient_SetRetryPolicy Lásd: IOTHUB_CLIENT_RETRY_POLICY C implementáció
Java SetRetryPolicy Alapértelmezett: ExponenciálisBackoffWithJitter osztály
Egyéni: a RetryPolicy felület implementálása
Nincs újrapróbálkozás:NoRetry osztály
Java-implementáció
.NET DeviceClient.SetRetryPolicy Alapértelmezett: ExponenciálisBackoff osztály
Egyéni: IRetryPolicy felület implementálása
Nincs újrapróbálkozás:NoRetry osztály
C# implementáció
Csomópont setRetryPolicy Alapértelmezett: ExponenciálisBackoffWithJitter osztály
Egyéni: a RetryPolicy felület implementálása
Nincs újrapróbálkozás:NoRetry osztály
Csomópont implementálása
Python Jelenleg nem támogatott Jelenleg nem támogatott Beépített kapcsolat újrapróbálkozása: Az elvetett kapcsolatokat a rendszer alapértelmezés szerint rögzített 10 másodperces időközzel próbálkozik újra. Ez a funkció igény szerint le is tiltható, és konfigurálható az időköz.

Hub újracsatlakozási folyamata

Ha csak DPS nélkül használja az IoT Hubot, használja az alábbi újracsatlakozási stratégiát.

Ha egy eszköz nem tud csatlakozni az IoT Hubhoz, vagy nem csatlakozik az IoT Hubhoz:

  1. Használjon exponenciális visszalépést a jitter delay függvénysel.
  2. Csatlakozzon újra az IoT Hubhoz.

Az alábbi diagram az újracsatlakozási folyamatot foglalja össze:

Az IoT Hub eszköz-újracsatlakozási folyamatának diagramja.

Hub a DPS újracsatlakozási folyamatával

Ha az IoT Hubot a DPS-vel használja, használja az alábbi újracsatlakozási stratégiát.

Ha egy eszköz nem tud csatlakozni az IoT Hubhoz, vagy nem csatlakozik az IoT Hubhoz, az alábbi esetek alapján csatlakozzon újra:

Újracsatlakozási forgatókönyv Újracsatlakozási stratégia
Csatlakozási újrapróbálkozások engedélyezését lehetővé tevő hibák esetén (HTTP-válaszkód: 500) Használjon exponenciális visszalépést a jitter delay függvénysel.
Csatlakozzon újra az IoT Hubhoz.
Olyan hibák esetén, amelyek újrapróbálkozást jeleznek, de az újracsatlakozás 10 egymást követő alkalommal meghiúsult Az eszköz visszaépítése a DPS-re.
Olyan hibák esetén, amelyek nem engedélyezik a kapcsolat újrapróbálkozásait (HTTP-válaszok 401, Jogosulatlan vagy 403, Tiltott vagy 404, Nem található) Az eszköz visszaépítése a DPS-re.

Az alábbi diagram az újracsatlakozási folyamatot foglalja össze:

Az IoT Hub és a DPS újracsatlakozási folyamatának ábrája.

Következő lépések

A következő javasolt lépések a következők: