Azure Cosmos DB i IoT-arbetsbelastningar

Azure Cosmos DB
Azure Databricks
Azure Functions
Azure IoT Hub
Power BI

I den här artikeln beskrivs en IoT-arbetsbelastning (Internet-of-things) som förlitar sig på flera funktioner i Azure Cosmos DB-databastjänsten. Azure Cosmos DB är en databas med flera modeller som skapats för global distribution och horisontell skalning.

Global distribution skalar och replikerar data transparent mellan Azure-regioner. Du kan skala dataflöde och lagring över hela världen och bara betala för det belopp du behöver. Omedelbar elastisk skalning hanterar olika och oförutsägbara IoT-arbetsbelastningar, utan att offra inmatnings- eller frågeprestanda.

Azure Cosmos DB är perfekt för IoT-arbetsbelastningar eftersom det kan:

  • Mata in enhetstelemetridata med hög hastighet och returnera indexerade frågor med låg svarstid och hög tillgänglighet.
  • Lagra JSON-format från olika enhetsleverantörer, vilket ger flexibilitet i nyttolastschemat.
  • Genom att använda trådprotokollkompatibla API-slutpunkter för Cassandra, MongoDB, SQL, Gremlin osv. och tabelldatabaser och inbyggt stöd för Jupyter Notebook filer.

Potentiella användningsfall

  • Använd inbyggda, globalt distribuerade Azure Cosmos DB-funktioner för att aktivera läs- och skrivåtgärder med låg latens för mycket dynamiska IoT-program.
  • Hantera data från en mängd olika enhetsleverantörer och datatyper.

Arkitektur

Diagram som visar rollen för Azure Cosmos DB i en Azure IoT-lösningsarkitektur.Ladda ned en Visio-fil med den här arkitekturen.

Dataflöde

  1. IoT-sensorer och Edge-enheter skickar händelser när meddelanden strömmar via Azure IoT Hub till analys- och transformeringsskiktet. IoT Hub kan lagra dataströmmar i partitioner under en angiven tidsperiod.

  2. Azure Databricks med Apache Spark Structured Streaming hämtar meddelanden från IoT Hub i realtid, bearbetar data baserat på affärslogik och skickar data till lagring. Strukturerad direktuppspelning kan tillhandahålla realtidsanalyser, till exempel beräkning av glidande medelvärden eller lägsta och högsta värden över tidsperioder.

  3. Azure Cosmos DB lagrar enhetsmeddelanden som JSON-dokument i frekventa datalager. Azure Cosmos DB kan verifiera mot JSON-scheman från olika enhetsleverantörer.

    Lagringsskiktet består också av:

    • Azure Blob Storage. IoT Hub meddelanderoutning sparar rådataenhetsmeddelanden till Blob Storage, vilket ger ett billigt, långsiktigt kalldatalager.
    • Azure SQL Database för att lagra transaktions- och relationsdata, till exempel faktureringsdata och användarroller.
    • Azure Synapse Analytics-informationslagret, ifyllt av Azure Data Factory, som aggregerar data från Azure Cosmos DB och Azure SQL DB.
  4. Microsoft Power BI analyserar informationslagret.

  5. Presentationslagret använder data från lagringslagret för att skapa webb-, mobil- och API-appar.

  6. När ett nytt eller uppdaterat enhetsmeddelande tas emot utlöser Azure Cosmos DB-ändringsflödet en Azure Functions funktion.

  7. Funktionen avgör om meddelandet kräver en enhetsåtgärd, till exempel en omstart. I så fall ansluter funktionen till IoT Hub med hjälp av api:et IoT Hub Service och initierar enhetsåtgärden. Funktionen kan initiera åtgärden med hjälp av enhetstvillingar, moln till enhetsmeddelanden eller direktmetoder.

Komponenter

Den här arbetsbelastningen använder följande Azure-komponenter:

Azure Cosmos DB

Den här IoT-arbetsbelastningen lyfter fram Azure Cosmos DB, en globalt distribuerad databas med flera modeller. Arbetsbelastningen använder följande Azure Cosmos DB-funktioner:

  • Konsekvensnivåer. Azure Cosmos DB stöder fem läskonsekvensnivåer, från starkast till svagast: Stark, begränsad föråldring, session, konsekvent prefix och slutlig. I allmänhet leder starkare konsekvens till lägre tillgänglighet, längre svarstider och lägre dataflöde. Du kan välja en konsekvensnivå baserat på dina arbetsbelastningskrav.

  • Time to Live (TTL). Azure Cosmos DB kan ta bort objekt automatiskt från en container efter en viss tidsperiod. Med den här funktionen kan Azure Cosmos DB fungera som ett frekvent datalager för senaste data, med långsiktiga data som lagras i Azure Blob Cold Storage.

  • Ändringsflöde. Funktionen för ändringsflöde matar ut en sorterad lista över ändrade dokument i den ordning som de ändrades. Varje ny händelse i Azure Cosmos DB-containerns ändringsflöde utlöser automatiskt en liten reaktiv Azure Functions funktion. Beroende på innehållet i JSON-dokumentet kan funktionen ansluta till Azure IoT Hub Service-API:et och köra en åtgärd på enheten.

  • Enheter för programbegäran (RU:er) RU:er är beräkningsenheter som mäter Dataflöde i Azure Cosmos DB. Du kan använda RU:er för att dynamiskt skala upp och ned Azure Cosmos DB, samtidigt som du behåller tillgängligheten och optimerar för kostnad och prestanda.

  • Partitionering. Partitionsnyckeln avgör hur Azure Cosmos DB dirigerar data i partitioner. IoT-enhets-ID är den vanliga partitionsnyckeln för IoT-program.

Andra Azure-komponenter

Lösningen använder också följande Azure-komponenter:

  • Azure IoT Edge kör program på gränsenheter, till exempel maskininlärningsmodeller.

  • Azure IoT Hub fungerar som molngateway och matar in enhetstelemetri i stor skala. IoT Hub stöder kommunikation tillbaka till enheter så att åtgärder kan skickas från molnet för att IoT Edge till enheten.

  • Azure Databricks med Spark Structured Streaming är ett skalbart, feltolerant dataströmbearbetningssystem som har inbyggt stöd för batch- och strömningsarbetsbelastningar. Azure Databricks är transformerings- och analyslagret och ansluter till den IoT Hub event hub-kompatibla slutpunkten med hjälp av Maven-biblioteket azure-eventhubs-spark_2.11:2.3.6.

  • Azure Blob Storage ger skalbar, billig, långsiktig kall datalagring för ostrukturerade data.

  • Azure SQL Database är relationsdatabasen för transaktionsdata och andra icke-IoT-data.

  • Azure Synapse Analytics är ett informationslager och en rapporteringsplattform för informationslagerhantering och stordataanalys. Synapse Analytics innehåller aggregerade data från Azure SQL Database och Azure Cosmos DB.

    Azure Synapse Link för Azure Cosmos DB möjliggör nästan realtidsanalys av azure Cosmos DB-driftdata, utan prestanda eller kostnadspåverkan på transaktionsarbetsbelastningar. Synapse Link använder de två analysmotorerna på Azure Synapse-arbetsytan: SQL Serverless och Spark Pools.

  • Power BI är en uppsättning affärsanalysverktyg för att analysera data och dela insikter. Power BI kan fråga en semantisk modell som lagras i Azure Analysis Services eller fråga Synapse Analytics direkt.

  • Azure App Service skapar webb- och mobilprogram. Med Azure API App kan appar från tredje part använda API:er baserat på data från det betjänande lagret.

  • Azure Functions är en händelsedriven, serverlös beräkningsplattform som kan användas i stor skala i molnet och integrera tjänster med hjälp av utlösare och bindningar. Azure Functions kan översätta IoT-meddelandeformat eller utlösa åtgärder när de är anslutna till Azure Cosmos DB-ändringsflödet.

Alternativ

  • I stället för Azure Databricks kan transformerings- och analyslagret använda HDInsight Storm, HDInsight Spark eller Azure Stream Analytics för att utföra strömningsanalyser och använda Azure Functions för att transformera meddelandenyttolaster.

  • Tjänstlagringsskiktet kan använda Azure Data Explorer för att lagra IoT-meddelanden. Den här tjänsten har också omfattande analysfunktioner.

Överväganden

Azure Cosmos DB har en gräns på 20 GB för en enda logisk partition. För de flesta IoT-lösningar räcker den här storleken. Annars kan du:

  • Ange partitionsnyckeln till ett artificiellt fält och tilldela fältet ett sammansatt värde, till exempel Enhets-ID + Aktuell månad och År. Den här strategin garanterar kardinalitet med högt värde för en bra partitionsdesign. Mer information finns i Välj en partitionsnyckel.

  • Baserat på datalivscykeln kan du flytta äldre Azure Cosmos DB-data till kall lagring, till exempel Azure Blob Storage. Du kan använda en kombination av ändringsflöde för att replikera data till kall lagring och TTL för att ta bort data automatiskt från en container efter en viss tidsperiod.

Nästa steg