IoT con Cosmos DB

Cosmos DB
Databricks
Funzioni
Hub IoT
Power BI

Scalabilità istantanea ed elastica per supportare carichi di lavoro IoT diversificati e imprevedibili senza sacrificare le prestazioni di inserimento o query.Scale instantly and elastically to accommodate diverse and unpredictable IoT workloads without sacrificing ingestion or query performance.

Azure Cosmos DB è il database multimodello di Microsoft distribuito a livello globale.Azure Cosmos DB is Microsoft’s globally distributed, multi-model database. Azure Cosmos DB è stato progettato con un'attenzione particolare alla distribuzione globale e alla scalabilità orizzontale.Azure Cosmos DB was built from the ground up with global distribution and horizontal scale at its core. Offre la distribuzione globale chiavi in mano in molte aree di Azure, tramite il ridimensionamento trasparente e la replica dei dati ovunque si trovino gli utenti.It offers turnkey global distribution across any number of Azure regions by transparently scaling and replicating your data wherever your users are. È possibile ridimensionare in modo elastico la velocità effettiva e le risorse di archiviazione in tutto il mondo e pagare solo quello che è necessario.You can elastically scale throughput and storage worldwide, and pay only for the throughput and storage you need.

Cosmos DB è particolarmente adatto per le soluzioni Internet delle cose.Cosmos DB is ideally suited for IoT solutions. Cosmos DB possono inserire i dati di telemetria del dispositivo a tariffe elevate e possono rispondere a query indicizzate con bassa latenza e disponibilità elevata.Cosmos DB can ingest device telemetry data at high rates and can serve indexed queries back with low latency and high availability.

Cosmos DB è un database multimodello con endpoint API compatibili con il protocollo wire per Cassandra, MongoDB, SQL, Gremlin, ETCD e Table insieme al supporto incorporato per i file di Jupyter Notebook.Cosmos DB is a multi-model database with wire protocol–compatible API endpoints for Cassandra, MongoDB, SQL, Gremlin, Etcd, and Table along with built-in support for Jupyter Notebook files.

ArchitectureArchitecture

Architecture

Flusso di datiData Flow

  1. Gli eventi generati dai dispositivi Internet vengono inviati al livello analizza e trasforma tramite l'hub Azure Internet come flusso di messaggi.Events generated from IoT devices are sent to the analyze and transform layer through Azure IoT Hub as a stream of messages. L'hub Azure Internet Azure archivia i flussi di dati nelle partizioni per un periodo di tempo configurabile.Azure IoT Hub stores streams of data in partitions for a configurable amount of time.
  2. Azure Databricks, eseguendo Apache Spark streaming, preleva i messaggi in tempo reale dall'hub Internet, elabora i dati in base alla logica di business e invia i dati al livello di servizio per l'archiviazione.Azure Databricks, running Apache Spark Streaming, picks up the messages in real time from IoT Hub, processes the data based on the business logic and sends the data to Serving layer for storage. Spark streaming può fornire analisi in tempo reale, ad esempio il calcolo delle medie mobili, dei valori min e Max negli intervalli di tempo.Spark Streaming can provide real time analytics such as calculating moving averages, min and max values over time periods.
  3. I messaggi del dispositivo vengono archiviati in Cosmos DB come documenti JSON.Device messages are stored in Cosmos DB as JSON documents. Questo è considerato l' archivio dati a caldo.This is considered the hot data store. Schemi JSON diversi che rappresentano fornitori di dispositivi diversi possono essere archiviati in Cosmos DB o convertiti in uno schema JSON canonico.Different JSON schemas representing different device vendors can be stored in Cosmos DB or converted to a canonical JSON schema.
  4. Il livello di archiviazione è costituito da:The storage layer consists of:
    • Archiviazione BLOB di Azure: il routing dei messaggi dell'hub Internet è in grado di salvare i messaggi relativi ai dispositivi non elaborati nell'archiviazione BLOB di Azure, consentendo l'archiviazione BLOB come un archivio dati a freddo economico a lungo termine.Azure Blob Storage - IoT Hub message routing can save the raw IoT device messages to Azure Blob storage, allowing blob storage to act as an inexpensive, long-term cold data store.
    • Database SQL di Azure: usare SQL Azure per archiviare i dati transazionali e relazionali (ad esempio, i dati di fatturazione, i ruoli utente).Azure SQL Database - Utilize Azure SQL for storing your transactional and relational data (for example, billing data, user roles).
    • Azure sinapsi Analytics (in precedenza Azure SQL Data Warehouse) per la soluzione data warehouse.Azure Synapse Analytics (Previously Azure SQL Data Warehouse) - For your solution data warehouse. Viene popolato usando Azure Data Factory usando dati aggregati da Cosmos DB e SQL di Azure.Populated it using Azure Data Factory using aggregated data from Cosmos DB and Azure SQL.
  5. Microsoft Power BI può essere usato dagli utenti per analizzare i dati warehouse.Microsoft Power BI can be used by your users to analyze warehoused data.
  6. È possibile compilare applicazioni Web, per dispositivi mobili e altre applicazioni a livello di archiviazione.Web, mobile and other applications can be built on the storage layer. Ad esempio, è possibile esporre API basate sui dati del livello di archiviazione per usi di terze parti.For example, you can expose APIs based on the storage layer data for third-party uses.
  7. Usare Cosmos DB feed di modifiche per eseguire una funzione di Azure ogni volta che un messaggio del dispositivo viene aggiunto o aggiornato in Cosmos DB.Use Cosmos DB Change Feed to execute an Azure Function each time a device message is added or updated in Cosmos DB.
  8. Alcuni messaggi del dispositivo (ad esempio, un codice di errore) potrebbero richiedere l'esecuzione di un'azione sul dispositivo.Some device messages (for example, a fault code) may require an action to be performed on the device. Usando l'API del servizio Hub Azure, la funzione di Azure è in grado di connettersi all'hub di Azure e di eseguire un'azione sul dispositivo (ad esempio, il riavvio) usando uno dei seguenti:Using the Azure IoT Hub Service API, the Azure Function can connect to Azure IoT Hub and perform an action on the device (for example, reboot) using either:
    • Dispositivi gemelliDevice Twins
    • Messaggi da cloud a dispositivoCloud to Device messages
    • Metodi direttiDirect Methods

ComponentiComponents

Questa architettura usa i componenti di Azure seguenti:This architecture uses the following Azure components:

  • L' Hub Azure Internet opera come gateway cloud, inserendo i dati di telemetria dei dispositivi su larga scala.Azure IoT Hub acts as the cloud gateway, ingesting device telemetry at-scale. L'hub Internet delle cose supporta anche la comunicazione bidirezionale nei dispositivi, consentendo l'invio di azioni dal cloud o Azure IOT Edge al dispositivo.IoT Hub also supports bi-directional communication back to devices, allowing actions to be sent from the cloud or Azure IoT Edge to the device. Azure IoT Edge può essere usato per eseguire applicazioni in periferia, ad esempio i modelli di machine learning.Azure IoT Edge can be used to run applications at the edge, such as machine learning models.
  • Azure Databricks con Apache Spark streaming si trova nel livello di trasformazione e analisi.Azure Databricks with Apache Spark Streaming is located in the transformation and analytics layer. Databricks usa la libreria Azure-Eventhubs-spark_2 .11:2.3.6 Maven per connettersi all'endpoint compatibile con l'hub eventi dell'hub.Databricks uses the azure-eventhubs-spark_2.11:2.3.6 Maven library to connect to IoT Hub's Event Hub compatible endpoint. Apache Spark streaming è un sistema di elaborazione di flussi a tolleranza di errore scalabile che supporta in modo nativo sia i carichi di lavoro batch che quelli di streaming.Apache Spark Streaming is a scalable fault-tolerant streaming processing system that natively supports both batch and streaming workloads.
  • Azure Cosmos DB è un database multimodello distribuito a livello globale.Azure Cosmos DB is a globally distributed, multi-model database.
    • Livelli di coerenza: Cosmos DB supporta 5 livelli di coerenza (forte, con decadimento ristretto, sessione, prefisso coerente, finale), che consente di ottenere il compromesso tra la coerenza di lettura e la disponibilità, la latenza e la velocità effettiva.Consistency Levels - Cosmos DB supports 5 consistency levels (Strong, Bounded Staleness, Session, Consistent Prefix, Eventual) allowing you to make the tradeoff between the read consistency vs. availability, latency, and throughput.
    • TTL-Azure Cosmos DB offre la possibilità di eliminare automaticamente elementi da un contenitore dopo un determinato periodo di tempo.TTL - Azure Cosmos DB provides the ability to delete items automatically from a container after a certain time period. Questo consente Cosmos DB di fungere da archivio dati a caldo per i dati recenti, con dati a lungo termine archiviati nell'archiviazione a freddo BLOB di Azure.This allows Cosmos DB to act as a hot data store for recent data, with long-term data stored in Azure Blob cold storage.
    • Change feed: genera un elenco ordinato di documenti modificati nell'ordine in cui sono stati modificati.Change Feed - Outputs a sorted list of documents that were changed in the order in which they were modified. È possibile creare piccole funzioni di Azure riattive che verranno attivate automaticamente per ogni nuovo evento nel feed di modifiche del contenitore di Azure Cosmos.You can create small reactive Azure Functions that will be automatically triggered on each new event in your Azure Cosmos container's change feed. A seconda del contenuto del documento JSON, la funzione di Azure è in grado di connettersi all'API del servizio Hub di Azure e di eseguire un'azione sul dispositivo usando i dispositivi gemelli, la messaggistica da cloud a dispositivo o i metodi diretti.Depending on the contents of the JSON document, the Azure Function can connect to Azure IoT Hub Service API and execute an action on the device using Device Twin, Cloud to Device messaging, or Direct Methods.
    • Unità richiesta (UR): misura della velocità effettiva in Azure Cosmos DB.Request Unit (RU) - Is the measure of throughput in Azure Cosmos DB. Le UR sono unità di calcolo sia per le prestazioni sia per i costi.RUs are compute units for both performance and cost. Con UR è possibile aumentare o ridurre le prestazioni in modo dinamico, mantenendo al tempo stesso la disponibilità, ottimizzando i costi, le prestazioni e la disponibilità.With RUs, you can dynamically scale up and down while maintaining availability, optimizing for cost, performance and availability at the same time.
    • Partizionamento: la chiave di partizione consente di determinare il modo in cui i dati vengono instradati nelle varie partizioni per Cosmos DB e deve essere utile nel contesto dello scenario specifico.Partitioning - The partition key is what will determine how data is routed in the various partitions by Cosmos DB and needs to make sense in the context of your specific scenario. L'ID del dispositivo Internet delle cose è in genere la chiave di partizione "naturale" per le applicazioni Internet.The IoT Device Id is generally the “natural” partition key for IoT applications.
  • Il database SQL di Azure è il database relazionale per i dati transazionali e di altro tipo.Azure SQL Database is the relational database for transactional and other non-IoT data.
  • Azure sinapsi Analytics è il data warehouse e la piattaforma per la creazione di report, che contiene dati aggregati da SQL di azure e Cosmos DB.Azure Synapse Analytics is the data warehouse and reporting platform, containing aggregated data from Azure SQL and Cosmos DB. Per il data warehousing aziendale e l'analisi Big Data.For enterprise data warehousing and big data analytics.
  • Power bi è una suite di strumenti di analisi business per analizzare i dati e condividere informazioni dettagliate.Power BI is a suite of business analytics tools to analyze data and share insights. Power BI possibile eseguire query in un modello semantico archiviato in Azure Analysis Services oppure eseguire query direttamente su sinapsi di Azure.Power BI can query a semantic model stored in Azure Analysis Services, or it can query Azure Synapse directly.
  • App Azure Services può essere usato per creare applicazioni Web e per dispositivi mobili.Azure App Services can be used to build web and mobile applications. L'app per le API di Azure può essere usata per esporre i dati a terze parti, in base ai dati archiviati nel livello di servizio.Azure API App can be used to expose data to third parties, based on the data stored in the Serving Layer.
  • Funzioni di Azure può essere usato per convertire i payload dei messaggi di tipo Internet (ad esempio, da binario a JSON) o azioni trigger quando si è connessi a Cosmos DB feed di modifiche.Azure Functions can be used to translate IoT message payloads (for example, from binary to JSON) or trigger actions when connected to Cosmos DB Change Feed. Funzioni di Azure è una piattaforma di calcolo senza server basata su eventi.Azure Functions is an event-driven serverless compute platform. Compilare ed eseguire il debug in locale senza ulteriori operazioni di configurazione, distribuire e gestire su larga scala nel cloud e integrare i servizi usando trigger e associazioni.Build and debug locally without additional setup, deploy and operate at scale in the cloud, and integrate services using triggers and bindings.

AlternativiAlternatives

ConsiderazioniConsiderations

  • Cosmos DB ha un limite di 20 GB (in passato era 10 GB) per una singola partizione logica.Cosmos DB has a 20-GB limit (in the past it was 10GB) for a single logical partition. Per la maggior parte delle soluzioni Internet, questa dimensione è sufficiente.For most IoT solutions, this size is sufficient. In caso contrario, è consigliabile:If not, we recommend either:
    • Impostando la chiave di partizione su un campo artificiale e assegnando un valore composito, ad esempio l'ID del dispositivo + il mese e l'anno correnti.Setting the partition key to an artificial field and assign a composite value (for example, Device ID + Current Month and Year). In questo modo si garantisce una cardinalità estremamente elevata dei valori.This will ensure an extremely high cardinality of values.
    • I dati Cosmos DB di livello obsoleti in archiviazione a freddo (ad esempio, archiviazione BLOB di Azure) usano una combinazione di durata (TTL) per eliminare automaticamente i dati da Cosmos DB e feed di modifiche per replicare i dati nell'archiviazione a freddo.Tier old Cosmos DB data out to cold storage (for example, Azure Blob Storage) using a combination of TTL to automatically prune data from Cosmos DB and change feed to replicate data to cold storage.

Passaggi successiviNext steps

Esaminare gli articoli seguenti su Internet e Cosmos DB.Review the following articles on IoT and Cosmos DB.