Förstå Azure IoT Edge och dess arkitektur
Gäller för:
IoT Edge 1,1 andra versioner: IoT Edge 1,2
Gäller för:
IoT Edge 1,2 andra versioner: IoT Edge 1,1
IoT Edge-körningen är en samling program som omvandlar en enhet till en IoT Edge-enhet. Tillsammans gör IoT Edge-körningskomponenterna att IoT Edge tar emot kod som körs vid gränsen och kommunicerar resultatet.
Den IoT Edge körningen ansvarar för följande funktioner på IoT Edge enheter:
Installerar och uppdaterar arbetsbelastningar på enheten.
Upprätthåller Azure IoT Edge-säkerhetsstandarder på enheten.
Se till IoT Edge moduler alltid körs.
Rapporterar modulens hälsa till molnet för fjärrövervakning.
Hantera kommunikation mellan nedströmsenheter och IoT Edge enheter.
Hantera kommunikation mellan moduler på en IoT Edge enhet.
Hantera kommunikation mellan IoT Edge enhet och molnet.
- Hantera kommunikation mellan IoT Edge enheter.

Ansvarsområdena för IoT Edge ingår i två kategorier: kommunikation och modulhantering. Dessa två roller utförs av två komponenter som ingår i IoT Edge körning. Agenten IoT Edge distribuerar och övervakar modulerna, medan IoT Edge ansvarar för kommunikationen.
Både IoT Edge-agenten och IoT Edge-hubben är moduler, precis som andra moduler som körs på en IoT Edge enhet. De kallas ibland körningsmoduler.
IoT Edge agent
Agenten IoT Edge är en av två moduler som utgör den Azure IoT Edge körningen. Den ansvarar för att instansiera moduler, se till att de fortsätter att köras och rapportera status för modulerna tillbaka till IoT Hub. Dessa konfigurationsdata skrivs som en egenskap för IoT Edge agentmodultvilling.
Den IoT Edge säkerhetsdaemonen startar IoT Edge agenten vid enhetsstart. Agenten hämtar modultvillingen från IoT Hub inspekterar distributionsmanifestet. Distributionsmanifestet är en JSON-fil som deklarerar de moduler som behöver startas.
Varje objekt i distributionsmanifestet innehåller specifik information om en modul och används av IoT Edge-agenten för att styra modulens livscykel. Mer information om alla egenskaper som används av IoT Edge-agenten för att styra moduler finns i Egenskaper för IoT Edge-agenten och IoT Edge hub-modultvillingarna.
Den IoT Edge agenten skickar körningssvar till IoT Hub. Här är en lista över möjliga svar:
- 200 – OK
- 400 – Distributionskonfigurationen är felaktig eller ogiltig.
- 417 – Enheten har ingen konfigurationsuppsättning för distribution.
- 412 – Schemaversionen i distributionskonfigurationen är ogiltig.
- 406 – IoT Edge enheten är offline eller skickar inte statusrapporter.
- 500 – Ett fel inträffade IoT Edge körningen.
Mer information om hur du skapar distributionsmanifest finns i Lär dig hur du distribuerar moduler och etablerar vägar i IoT Edge.
Säkerhet
Agenten IoT Edge en viktig roll i säkerheten för en IoT Edge enhet. Den utför till exempel åtgärder som att verifiera en moduls bild innan den startas.
Mer information om Azure IoT Edge säkerhetsramverket finns i IoT Edge security manager.
IoT Edge hubb
Hubben IoT Edge är den andra modulen som utgör den Azure IoT Edge körningen. Den fungerar som en lokal proxy för IoT Hub genom att exponera samma protokollslutpunkter som IoT Hub. Den här konsekvensen innebär att klienter kan ansluta till IoT Edge-körningen precis som de skulle IoT Hub.
Hubben IoT Edge inte en fullständig version av IoT Hub körs lokalt. IoT Edge hubben delegerar tyst vissa uppgifter till IoT Hub. Till exempel laddar IoT Edge hub automatiskt ned auktoriseringsinformation från IoT Hub första anslutningen så att en enhet kan ansluta. När den första anslutningen har upprättats cachelagras auktoriseringsinformationen lokalt IoT Edge hubben. Framtida anslutningar från den enheten auktoriserats utan att auktoriseringsinformation behöver laddas ned från molnet igen.
Molnkommunikation
För att minska bandbredden som IoT Edge lösning använder optimerar IoT Edge hubben hur många faktiska anslutningar som görs till molnet. IoT Edge-hubben tar logiska anslutningar från moduler eller nedströmsenheter och kombinerar dem för en enda fysisk anslutning till molnet. Informationen om den här processen är transparent för resten av lösningen. Klienterna tror att de har sin egen anslutning till molnet även om de alla skickas via samma anslutning. Hubben IoT Edge antingen använda AMQP eller MQTT-protokollet för att kommunicera uppströms med molnet, oberoende av protokoll som används av nedströmsenheter. Dock stöder IoT Edge-hubben för närvarande endast att kombinera logiska anslutningar till en enda fysisk anslutning genom att använda AMQP som överordnade protokoll och dess multiplexeringsfunktioner. AMQP är standardprotokollet för överordnad.

IoT Edge kan avgöra om den är ansluten till IoT Hub. Om anslutningen går förlorad sparar IoT Edge meddelanden eller tvillinguppdateringar lokalt. När en anslutning återupprättas synkroniseras alla data. Platsen som används för den här tillfälliga cachen bestäms av en egenskap för IoT Edge hubbens modultvilling. Storleken på cacheminnet är inte begränsad och kommer att växa så länge enheten har lagringskapacitet. Mer information finns i Offlinefunktioner.
Modulkommunikation
IoT Edge hub underlättar modul-till-modul-kommunikation. Med IoT Edge hub som en autjämnare för meddelanden hålls moduler oberoende av varandra. Moduler behöver bara ange de indata som de tar emot meddelanden och de utdata som de skriver meddelanden till. En lösningsutvecklare kan sammanfoga dessa indata och utdata så att modulerna bearbetar data i den ordning som är specifik för lösningen.

För att skicka data till IoT Edge-hubben anropar en modul metoden SendEventAsync. Det första argumentet anger vilka utdata som ska skicka meddelandet. Följande pseudokod skickar ett meddelande på output1:
ModuleClient client = await ModuleClient.CreateFromEnvironmentAsync(transportSettings);
await client.OpenAsync();
await client.SendEventAsync("output1", message);
Om du vill ta emot ett meddelande registrerar du ett återanrop som bearbetar meddelanden som kommer in på en specifik indata. Följande pseudokod registrerar funktionen messageProcessor som ska användas för att bearbeta alla meddelanden som tas emot på input1:
await client.SetInputMessageHandlerAsync("input1", messageProcessor, userContext);
Mer information om klassen ModuleClient och dess kommunikationsmetoder finns i API-referensen för det SDK-språk du föredrar: C#, C, Python, Java ellerNode.js.
Lösningsutvecklaren ansvarar för att ange de regler som avgör hur IoT Edge skickar meddelanden mellan moduler. Routningsregler definieras i molnet och push-skickas till IoT Edge hubben i modultvillingen. Samma syntax för IoT Hub används för att definiera vägar mellan moduler i Azure IoT Edge. Mer information finns i Lär dig hur du distribuerar moduler och etablerar vägar i IoT Edge.

Lokal kommunikation
IoT Edge-hubben underlättar lokal kommunikation. Den gör det möjligt att kommunicera från enhet till modul, modul-till-modul och enhet-till-enhet genom att skicka meddelanden för att hålla enheter och moduler oberoende av varandra.
Anteckning
MQTT-koordinatorfunktionen är i offentlig förhandsversion med IoT Edge version 1.2. Det måste vara uttryckligen aktiverat.
Hubben IoT Edge två koordinatormekanismer:
- De funktioner för meddelanderoutning som stöds av IoT Hub och,
- En allmän MQTT-koordinator som uppfyller MQTT-standarden v3.1.1
Använda routning
Den första koordinatormekanismen använder samma routningsfunktioner som IoT Hub för att ange hur meddelanden skickas mellan enheter eller moduler. Första enheter eller moduler anger de indata som de tar emot meddelanden och de utdata som de skriver meddelanden till. En lösningsutvecklare kan sedan dirigera meddelanden mellan en källa, t.ex. utdata och ett mål, t.ex. indata, med potentiella filter.

Routning kan användas av enheter eller moduler som skapats med Azure IoT-enhets-SDK:er antingen via AMQP- eller MQTT-protokollet. Alla meddelanden IoT Hub primitiver, t.ex. telemetri, direktmetoder, C2D, tvillingar, stöds men kommunikation över användardefinierade ämnen stöds inte.
Mer information om vägar finns i Lär dig hur du distribuerar moduler och etablerar vägar i IoT Edge
Använda MQTT-koordinatorn
Den andra a brokering-mekanismen baseras på en vanlig MQTT-koordinator. MQTT är ett förenklat protokoll för meddelandeöverföring som garanterar optimala prestanda på resursbegränsade enheter och är en populär publicera och prenumerera-standard. Enheter eller moduler prenumererar på ämnen för att ta emot meddelanden som publiceras av andra enheter eller moduler. IoT Edge hub implementerar sin egen MQTT-koordinator som följer specifikationerna för MQTT version 3.1.1.
MQTT-koordinatorn möjliggör två ytterligare kommunikationsmönster jämfört med routning: lokal sändning och punkt-till-punkt-kommunikation. Lokal sändning är användbart när en enhet eller modul behöver meddela flera andra enheter eller moduler lokalt. Punkt-till-punkt-kommunikation gör att två IoT Edge eller två IoT-enheter kan kommunicera lokalt utan kommunikation till molnet.

MQTT-koordinatorn kan användas av enheter eller moduler som skapats med antingen Azure IoT-enhets-SDK:er som kommunicerar via MQTT-protokollet eller alla MQTT-klienter för generell användning. Med undantag för C2D stöds alla IoT Hub primitiver, t.ex. telemetri, direktmetoder och tvillingar. IoT Hub särskilda ämnen som används IoT Hub primitiver stöds och det är även användardefinierade ämnen. Det här avsnittet kan IoT Hub ett särskilt ämne eller ett användardefinierat ämne.
Till skillnad från routningsmekanismen är ordningen på meddelanden endast bäst och garanteras inte, och filtrering av meddelanden stöds inte av den a broker. Bristen på dessa funktioner gör dock att MQTT-koordinatorn kan vara snabbare än routning.
Mer information om MQTT-koordinatorn finns i Publicera och prenumerera med IoT Edge
Jämförelse mellan mekanismer för a brokering
Här är de funktioner som är tillgängliga för varje mekanism för a brokering:
| Funktioner | Routning | MQTT-koordinator |
|---|---|---|
| D2C-telemetri | ✔ | |
| Lokal telemetri | ✔ | ✔ |
| DirectMethods | ✔ | ✔ |
| Twin | ✔ | ✔ |
| C2D för enheter | ✔ | |
| Ordna profiler | ✔ | |
| Filtrering | ✔ | |
| Användardefinierade ämnen | ✔ | |
| Enhet till enhet | ✔ | |
| Lokal sändning | ✔ | |
| Prestanda | ✔ |
Ansluta till IoT Edge hubben
Hubben IoT Edge anslutningar från enhets- eller modulklienter, antingen via MQTT-protokollet eller AMQP-protokollet.
Anteckning
IoT Edge hub stöder klienter som ansluter med hjälp av MQTT eller AMQP. Det stöder inte klienter som använder HTTP.
När en klient ansluter till IoT Edge-hubben händer följande:
- Om Transport Layer Security (TLS) används (rekommenderas) byggs en TLS-kanal för att upprätta en krypterad kommunikation mellan klienten och IoT Edge hubben.
- Autentiseringsinformation skickas från klienten till IoT Edge för att identifiera sig själv.
- IoT Edge hub auktoriserar eller avvisar anslutningen baserat på dess auktoriseringsprincip.
Säkra anslutningar (TLS)
Som standard accepterar IoT Edge endast anslutningar som skyddas med Transport Layer Security (TLS), t.ex. krypterade anslutningar som en tredje part inte kan dekryptera.
Om en klient ansluter på port 8883 (MQTTS) eller 5671 (AMQPS) till IoT Edge-hubben måste en TLS-kanal byggas. Under TLS-handskakningen skickar IoT Edge-hubben sin certifikatkedja som klienten behöver verifiera. För att verifiera certifikatkedjan måste rotcertifikatet för den IoT Edge hubben installeras som ett betrott certifikat på klienten. Om rotcertifikatet inte är betrott avvisas klientbiblioteket av IoT Edge med ett certifikatverifieringsfel.
Stegen för att installera rotcertifikatet för koordinatorn på enhetsklienter beskrivs i den transparenta gatewayen och i dokumentationen för att förbereda en nedströmsenhet. Moduler kan använda samma rotcertifikat som IoT Edge hubben genom att använda IoT Edge daemon-API:et.
Autentisering
IoT Edge Hub accepterar endast anslutningar från enheter eller moduler som har en IoT Hub-identitet, t.ex. som har registrerats i IoT Hub och har någon av de tre klientautentiseringsmetoder som stöds av IoT Hub för att bevisa sin identitet: Autentiseringmed symmetriska nycklar , X.509-självsignerad autentisering , X.509CA-signerad autentisering . Dessa IoT Hub identiteter kan verifieras lokalt av IoT Edge så att anslutningar fortfarande kan göras offline.
Obs!
- IoT Edge stöder för närvarande endast autentisering med symmetrisk nyckel.
- MQTT-klienter med endast lokala användarnamn och lösenord godkänns inte av MQTT-koordinatorn för IoT Edge hub, de måste använda IoT Hub identiteter.
Auktorisering
När autentiseringen är IoT Edge hubben två sätt att auktorisera klientanslutningar:
Genom att verifiera att en klient tillhör dess uppsättning betrodda klienter som definierats i IoT Hub. Uppsättningen betrodda klienter anges genom att konfigurera överordnade/underordnade eller enhets-/modulrelationer i IoT Hub. När en modul skapas i IoT Edge upprättas en förtroenderelation automatiskt mellan den här modulen och dess IoT Edge enhet. Det här är den enda auktoriseringsmodell som stöds av mekanismen för koordinatorer för routning.
Genom att konfigurera en auktoriseringsprincip. Den här auktoriseringsprincipen är ett dokument som visar en lista över alla auktoriserade klientidentiteter som har åtkomst till resurser IoT Edge hubben. Det här är den primära auktoriseringsmodellen som används av MQTT-koordinatorn för IoT Edge-hubben, men relationer mellan överordnad/underordnad och enhet/modul kan också tolkas av MQTT-koordinatorn för IoT Hub ämnen.
Fjärrkonfiguration
Den IoT Edge hubben styrs helt av molnet. Den hämtar sin konfiguration från IoT Hub via modultvillingen. Den innehåller:
- Vägkonfiguration
- Auktoriseringsprinciper
- Konfiguration av MQTT-brygga
Dessutom kan flera konfigurationer göras genom att konfigurera miljövariabler på den IoT Edge hubben.
Telemetri av körningskvalitet
IoT Edge samlar in anonym telemetri från värdens körnings- och systemmoduler för att förbättra produktkvaliteten. Den här informationen kallas telemetri av körningskvalitet. Den insamlade telemetrin skickas regelbundet som enhet-till-moln-meddelanden till IoT Hub från IoT Edge agenten. Dessa meddelanden visas inte i kundens vanliga telemetri och förbrukar inte någon meddelandekvot.
Den IoT Edge agenten och hubben genererar mått som du kan samla in för att förstå enhetens prestanda. En delmängd av dessa mått samlas in av IoT Edge Agent som en del av telemetri av körningskvalitet. Måtten som samlas in för telemetri av körningskvalitet är märkta med taggen ms_telemetry . Information om alla tillgängliga mått finns i Åtkomst till inbyggda mått.
All personlig eller organisationsidentifierande information, till exempel enhets- och modulnamn, tas bort före uppladdningen för att säkerställa att telemetri av körningskvalitet är anonym.
Agenten IoT Edge in telemetrin varje timme och skickar ett meddelande till IoT Hub 24 timmar.
Om du vill välja bort att skicka körningstelemetri från dina enheter finns det två sätt att göra det:
- Ange
SendRuntimeQualityTelemetrymiljövariabelnfalsetill för edgeAgent, eller - Avmarkera alternativet i Azure Portal under distributionen.