IoT avec Cosmos DB

Cosmos DB
Databricks
Fonctions
IoT Hub
Power BI

Effectuez une mise à l’échelle de manière instantanée et élastique pour prendre en charge diverses charges de travail IoT imprévisibles sans nuire aux performances d’ingestion ou de requête.Scale instantly and elastically to accommodate diverse and unpredictable IoT workloads without sacrificing ingestion or query performance.

Azure Cosmos DB est un service de base de données multimodèle mondialement distribué de Microsoft.Azure Cosmos DB is Microsoft’s globally distributed, multi-model database. Le service Azure Cosmos DB repose sur une distribution mondiale et sur une scalabilité horizontale.Azure Cosmos DB was built from the ground up with global distribution and horizontal scale at its core. Il offre une distribution mondiale clé en main sur un nombre illimité de régions Azure grâce à une scalabilité et à une réplication transparentes de vos données, quel que soit l’emplacement de vos utilisateurs.It offers turnkey global distribution across any number of Azure regions by transparently scaling and replicating your data wherever your users are. Bénéficiez d’une scalabilité élastique du débit et du stockage dans le monde entier et payez uniquement le débit et le stockage dont vous avez besoin.You can elastically scale throughput and storage worldwide, and pay only for the throughput and storage you need.

Cosmos DB convient parfaitement aux solutions IoT.Cosmos DB is ideally suited for IoT solutions. Cosmos DB peut ingérer des données de télémétrie d’appareil à des débits élevés, et peut satisfaire des requêtes indexées avec une faible latence et une haute disponibilité.Cosmos DB can ingest device telemetry data at high rates and can serve indexed queries back with low latency and high availability.

Cosmos DB est une base de données multi-modèle avec des points de terminaison d’API compatibles avec les protocoles filaires pour Cassandra, MongoDB, SQL, Gremlin, ETCD et Table, ainsi qu’une prise en charge intégrée des fichiers 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

Data FlowData Flow

  1. Les événements générés à partir d’appareils IoT sont envoyés à la couche d’analyse et de transformation par le biais d’Azure IoT Hub en tant que flux de messages.Events generated from IoT devices are sent to the analyze and transform layer through Azure IoT Hub as a stream of messages. Azure IoT Hub stocke des flux de données dans des partitions pour une durée configurable.Azure IoT Hub stores streams of data in partitions for a configurable amount of time.
  2. Azure Databricks, qui exécute Apache Spark Streaming, récupère le message en temps réel à partir d’IoT Hub, traite les données en fonction de la logique métier, et les envoie à la couche service à des fins de stockage.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 peut fournir une analytique en temps réel comme le calcul des moyennes mobiles et les valeurs minimales et maximales sur des périodes données.Spark Streaming can provide real time analytics such as calculating moving averages, min and max values over time periods.
  3. Les messages de l’appareil sont stockés dans Cosmos DB sous forme de documents JSON.Device messages are stored in Cosmos DB as JSON documents. Il s’agit là du magasin de données chaudes.This is considered the hot data store. Différents schémas JSON représentant différents fournisseurs d’appareils peuvent être stockés dans Cosmos DB ou convertis en schéma JSON canonique.Different JSON schemas representing different device vendors can be stored in Cosmos DB or converted to a canonical JSON schema.
  4. La couche de stockage se compose des éléments suivants :The storage layer consists of:
    • Stockage Blob Azure : le routage des messages IoT Hub peut enregistrer les messages bruts de l’appareil IoT dans le stockage d’objets blob Azure, ce qui permet au stockage d’objets blob d’agir comme un magasin de données froides à long terme.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.
    • Azure SQL Database : utilisez Azure SQL pour stocker vos données transactionnelles et relationnelles (par exemple les données de facturation et les rôles d’utilisateur).Azure SQL Database - Utilize Azure SQL for storing your transactional and relational data (for example, billing data, user roles).
    • Azure Synapse Analytics (anciennement Azure SQL Data Warehouse) : pour votre entrepôt de données de solution.Azure Synapse Analytics (Previously Azure SQL Data Warehouse) - For your solution data warehouse. Il est rempli à l’aide d’Azure Data Factory avec des données agrégées à partir de Cosmos DB et d’Azure SQL.Populated it using Azure Data Factory using aggregated data from Cosmos DB and Azure SQL.
  5. Vos utilisateurs peuvent utiliser Microsoft Power BI pour analyser les données de l’entrepôt.Microsoft Power BI can be used by your users to analyze warehoused data.
  6. Des applications web, mobiles et autres peuvent être créées sur la couche de stockage.Web, mobile and other applications can be built on the storage layer. Par exemple, vous pouvez exposer des API basées sur les données de la couche de stockage pour des usages tiers.For example, you can expose APIs based on the storage layer data for third-party uses.
  7. Utilisez le flux de modification Cosmos DB pour exécuter une fonction Azure à chaque fois qu’un message d’appareil est ajouté ou mis à jour dans 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. Certains messages d’appareil (par exemple un code d’erreur) peuvent nécessiter l’exécution d’une action sur l’appareil.Some device messages (for example, a fault code) may require an action to be performed on the device. À l’aide de l’API de service Azure IoT Hub, la fonction Azure peut se connecter à Azure IoT Hub et effectuer une action sur l’appareil (par exemple un redémarrage) à l’aide de :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:
    • Jumeaux d’appareilDevice Twins
    • Messages cloud-à-appareilCloud to Device messages
    • Méthodes directesDirect Methods

ComponentsComponents

Cette architecture utilise les composants Azure suivants :This architecture uses the following Azure components:

  • Azure IoT Hub agit en tant que passerelle cloud et ingère la télémétrie des appareils à grande échelle.Azure IoT Hub acts as the cloud gateway, ingesting device telemetry at-scale. IoT Hub prend également en charge la communication bidirectionnelle vers les appareils, ce qui permet d’envoyer des actions du cloud ou d’Azure IoT Edge vers l’appareil.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 peut être utilisé pour exécuter des applications à la périphérie, telles que des modèles Machine Learning.Azure IoT Edge can be used to run applications at the edge, such as machine learning models.
  • Azure Databricks avec Apache Spark Streaming se trouve dans la couche de transformation et d’analytique.Azure Databricks with Apache Spark Streaming is located in the transformation and analytics layer. Databricks utilise la bibliothèque Maven azure-eventhubs-spark_2.11:2.3.6 pour se connecter au point de terminaison compatible avec l’instance Event Hub de IoT 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 est un système de traitement de streaming scalable et à tolérance de pannes qui prend en charge en mode natif les charges de travail par lot et en streaming.Apache Spark Streaming is a scalable fault-tolerant streaming processing system that natively supports both batch and streaming workloads.
  • Azure Cosmos DB est une base de données multimodèle distribuée à l’échelle mondiale.Azure Cosmos DB is a globally distributed, multi-model database.
    • Niveaux de cohérence : Cosmos DB prend en charge cinq niveaux de cohérence (Fort, Obsolescence limitée, Session, Préfixe cohérent, Éventuelle), ce qui vous permet de trouver le bon compromis entre la cohérence de lecture et la disponibilité, la latence et le débit.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 permet de supprimer automatiquement des éléments d’un conteneur après une période déterminée.TTL - Azure Cosmos DB provides the ability to delete items automatically from a container after a certain time period. Cela permet à Cosmos DB d’agir en tant que magasin de données chaudes pour les données récentes, les données à long terme étant stockées dans le stockage froid d’objets blob 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.
    • Flux de modification : génère une liste triée de documents qui ont été modifiés, dans l’ordre dans lequel ils ont été modifiés.Change Feed - Outputs a sorted list of documents that were changed in the order in which they were modified. Vous pouvez créer de petites fonctions Azure Functions réactives qui se déclencheront automatiquement sur chaque nouvel événement dans le flux de modification de votre conteneur 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. Selon le contenu du document JSON, la fonction Azure peut se connecter à l’API de service Azure IoT Hub et exécuter une action sur l’appareil à l’aide de Jumeau d’appareil, Messagerie cloud-à-appareil ou Méthodes directes.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é de requête (RU) : mesure du débit dans Azure Cosmos DB.Request Unit (RU) - Is the measure of throughput in Azure Cosmos DB. Les unités de requête sont des unités de calcul pour les performances et les coûts.RUs are compute units for both performance and cost. Avec les unités de requête, vous pouvez effectuer un scale-up ou un scale-down dynamique tout en maintenant la disponibilité et en optimisant en même temps les coûts, les performances et la disponibilité.With RUs, you can dynamically scale up and down while maintaining availability, optimizing for cost, performance and availability at the same time.
    • Partitionnement : la clé de partition détermine la façon dont les données sont routées dans les différentes partitions par Cosmos DB, et elle doit être significative dans le contexte de votre scénario spécifique.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 d’appareil IoT est généralement la clé de partition « naturelle » pour les applications IoT.The IoT Device Id is generally the “natural” partition key for IoT applications.
  • Azure SQL Database est la base de données relationnelle pour les données transactionnelles et autres données non IoT.Azure SQL Database is the relational database for transactional and other non-IoT data.
  • Azure Synapse Analytics est l’entrepôt de données et la plateforme de création de rapports, qui contient des données agrégées à partir d’Azure SQL et Cosmos DB.Azure Synapse Analytics is the data warehouse and reporting platform, containing aggregated data from Azure SQL and Cosmos DB. Pour l’entreposage des données métier et l’analytique du Big Data.For enterprise data warehousing and big data analytics.
  • Power BI est une suite d’outils d’analyse métier pour analyser les données et partager les informations.Power BI is a suite of business analytics tools to analyze data and share insights. Power BI peut interroger un modèle sémantique stocké dans Azure Analysis Services ou interroger directement Azure Synapse.Power BI can query a semantic model stored in Azure Analysis Services, or it can query Azure Synapse directly.
  • Azure App Services peut être utilisé pour générer des applications web and mobiles.Azure App Services can be used to build web and mobile applications. Azure API App peut être utilisé pour présenter des données à des tiers en fonction des données stockées dans la couche Serving.Azure API App can be used to expose data to third parties, based on the data stored in the Serving Layer.
  • Azure Functions peut être utilisé pour traduire les charges utiles des messages IoT (par exemple du format binaire en JSON) ou déclencher des actions en cas de connexion au flux de modification Cosmos DB.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. Azure Functions est une plateforme de calcul serverless pilotée par les événements.Azure Functions is an event-driven serverless compute platform. Générez et déboguez localement sans configuration supplémentaire, déployez et opérez à l’échelle dans le cloud, et intégrez des services à l’aide de déclencheurs et de liaisons.Build and debug locally without additional setup, deploy and operate at scale in the cloud, and integrate services using triggers and bindings.

Autres solutionsAlternatives

ConsidérationsConsiderations

  • Cosmos DB a une limite de 20 Go (dans le passé, elle était de 10 Go) par partition logique.Cosmos DB has a 20-GB limit (in the past it was 10GB) for a single logical partition. Pour la plupart des solutions IoT, cette taille est suffisante.For most IoT solutions, this size is sufficient. Si ce n’est pas le cas, nous vous recommandons l’une des solutions suivantes :If not, we recommend either:
    • Définissez la clé de partition sur un champ artificiel et attribuez une valeur composite (par exemple ID d’appareil + mois et année actuels).Setting the partition key to an artificial field and assign a composite value (for example, Device ID + Current Month and Year). Cela garantira une cardinalité extrêmement élevée des valeurs.This will ensure an extremely high cardinality of values.
    • Déplacez les anciennes données Cosmos DB vers le stockage froid (par exemple Stockage Blob Azure) en utilisant une combinaison de TTL pour nettoyer automatiquement les données Cosmos DB et de flux de modification pour répliquer les données vers le stockage froid.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.

Étapes suivantesNext steps

Passez en revue les articles suivants sur IoT et Cosmos DB.Review the following articles on IoT and Cosmos DB.