Azure Cosmos DB i IoT-arbetsbelastningar

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

Den här artikeln beskriver 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 transparent data i 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 rymmer olika och oförutsägbara IoT-arbetsbelastningar, utan att offra inmatning eller frågeprestanda.

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

  • Mata in enhetstelemetridata med höga hastigheter 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ässkrivning 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 som meddelandeströ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 realtidsanalys, 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 det frekventa datalagret. 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åa enhetsmeddelanden till Blob Storage, vilket ger ett kostnadseffektivt, långsiktigt kallt datalager.
    • Azure SQL Database för att lagra transaktions- och relationsdata, till exempel faktureringsdata och användarroller.
    • Azure Synapse Analytics-informationslagret, som fylls i 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 IoT Hub-tjänst-API:et 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 svagaste: Stark, begränsad föråldring, session, konsekvent prefix och eventuell. I allmänhet leder starkare konsekvens till lägre tillgänglighet, längre svarstid 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.

  • Ändra feed. Funktionen för ändringsflöde matar ut en sorterad lista över ändrade dokument i den ordning 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 och köra en åtgärd på enheten.

  • Enheter för programbegäran (RU:er). RU:er är beräkningsenheter som mäter Dataflödet 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 kostnader 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änsen, 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, vilket gör att åtgärder kan skickas från molnet till IoT Edge till enheten.

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

  • Azure Blob Storage tillhandahåller skalbar, billig och långsiktig lagring av kalla data 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 lagring av företagsdata 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 driftdata i Azure Cosmos DB, 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 bygger webb- och mobilprogram. Med Azure API App kan appar från tredje part använda API:er baserat på data från serveringslagret.

  • Azure Functions är en händelsedriven, serverlös beräkningsplattform som kan fungera 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ömmande analys och använda Azure Functions för att transformera meddelandenyttolaster.

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

Att tänka på

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 säkerställer 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