IoT mediante Cosmos DB

Cosmos DB
Databricks
Functions
IoT Hub
Power BI

Realice un escalado instantáneo y elástico para dar cabida a cargas de trabajo de IoT diversas e impredecibles sin sacrificar el rendimiento de la ingesta o de las consultas.Scale instantly and elastically to accommodate diverse and unpredictable IoT workloads without sacrificing ingestion or query performance.

Azure Cosmos DB es la base de datos multimodelo de distribución global de Microsoft.Azure Cosmos DB is Microsoft’s globally distributed, multi-model database. Azure Cosmos DB se creó desde el principio con la distribución global y el escalado horizontal como características fundamentales.Azure Cosmos DB was built from the ground up with global distribution and horizontal scale at its core. Ofrece distribución global llave en mano en cualquier número de regiones de Azure, con un proceso transparente de escalado y replicación de los datos dondequiera que estén los usuarios.It offers turnkey global distribution across any number of Azure regions by transparently scaling and replicating your data wherever your users are. Puede escalar el rendimiento y el almacenamiento de forma elástica en todo el mundo y pagar solo por la cantidad que necesite.You can elastically scale throughput and storage worldwide, and pay only for the throughput and storage you need.

Cosmos DB es idóneo para las soluciones IoT.Cosmos DB is ideally suited for IoT solutions. Cosmos DB puede ingerir datos de telemetría de dispositivos a alta velocidad y atender consultas indexadas con una baja latencia y una alta disponibilidad.Cosmos DB can ingest device telemetry data at high rates and can serve indexed queries back with low latency and high availability.

Cosmos DB es una base de datos multimodelo con puntos de conexión de API compatibles con el protocolo de conexión para Cassandra, MongoDB, SQL, Gremlin, Etcd y Table, además de compatibilidad integrada con archivos de 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. Los eventos generados en los dispositivos IoT se envían a la capa de análisis y transformación mediante Azure IoT Hub como una secuencia de mensajes.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 almacena los flujos de datos en particiones durante un período de tiempo configurable.Azure IoT Hub stores streams of data in partitions for a configurable amount of time.
  2. Azure Databricks, que ejecuta Apache Spark Streaming, recoge los mensajes en tiempo real desde IoT Hub, procesa los datos según la lógica de negocios y los envía a la capa de servicios para su almacenamiento.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 puede permitir el análisis en tiempo real, por ejemplo, el cálculo de medias móviles y valores mínimos y máximos en períodos de tiempo.Spark Streaming can provide real time analytics such as calculating moving averages, min and max values over time periods.
  3. Los mensajes de dispositivo se almacenan en Cosmos DB en forma de documentos JSON.Device messages are stored in Cosmos DB as JSON documents. Esto se considera el almacén de datos de acceso frecuente.This is considered the hot data store. Los distintos esquemas JSON que representan a diferentes proveedores de dispositivos pueden almacenarse en Cosmos DB o convertirse en un esquema JSON canónico.Different JSON schemas representing different device vendors can be stored in Cosmos DB or converted to a canonical JSON schema.
  4. La capa de almacenamiento consta de:The storage layer consists of:
    • Azure Blob Storage: el enrutamiento de mensajes de IoT Hub puede guardar los mensajes de los dispositivos IoT sin procesar en Azure Blob Storage, lo que permite que el almacenamiento de blobs actúe como un almacén de datos de acceso poco frecuente económico a largo plazo.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: use Azure SQL para almacenar los datos transaccionales y relacionales (por ejemplo, datos de facturación o roles de usuario).Azure SQL Database - Utilize Azure SQL for storing your transactional and relational data (for example, billing data, user roles).
    • Azure Synapse Analytics (anteriormente, Azure SQL Data Warehouse): para el almacenamiento de datos de la solución.Azure Synapse Analytics (Previously Azure SQL Data Warehouse) - For your solution data warehouse. Se rellena mediante Azure Data Factory con datos agregados de Cosmos DB y Azure SQL.Populated it using Azure Data Factory using aggregated data from Cosmos DB and Azure SQL.
  5. Los usuarios pueden usar Microsoft Power BI para analizar los datos almacenados.Microsoft Power BI can be used by your users to analyze warehoused data.
  6. También las aplicaciones web, móviles y de otros tipos se pueden integrar en la capa de servicios.Web, mobile and other applications can be built on the storage layer. Por ejemplo, puede exponer API basadas en los datos de la capa de servicios para que terceros las usen.For example, you can expose APIs based on the storage layer data for third-party uses.
  7. Use la fuente de cambios de Cosmos DB para ejecutar una función de Azure cada vez que se agregue o se actualice un mensaje de dispositivo en 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. Algunos mensajes de dispositivo (por ejemplo, un código de error) pueden requerir que se realice una acción en el dispositivo.Some device messages (for example, a fault code) may require an action to be performed on the device. Con la API de servicio de Azure IoT Hub, la función de Azure puede conectarse a Azure IoT Hub y realizar una acción en el dispositivo (por ejemplo, reiniciar) mediante: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:
    • Dispositivos gemelosDevice Twins
    • Mensajes de la nube al dispositivoCloud to Device messages
    • Métodos directosDirect Methods

ComponentesComponents

Esta arquitectura utiliza los siguientes componentes de Azure:This architecture uses the following Azure components:

  • Azure IoT Hub actúa como puerta de enlace en la nube e ingiere los datos de telemetría del dispositivo a escala.Azure IoT Hub acts as the cloud gateway, ingesting device telemetry at-scale. IoT Hub también admite la comunicación bidireccional con los dispositivos, lo que permite que las acciones se envíen desde la nube 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 puede usarse para ejecutar aplicaciones en el perímetro, como los modelos de 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 se encuentra en la capa de transformación y análisis.Azure Databricks with Apache Spark Streaming is located in the transformation and analytics layer. Databricks usa la biblioteca azure-eventhubs-spark_2.11:2.3.6 de Maven para conectarse al punto de conexión compatible con el centro de eventos 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 es un sistema de procesamiento de transmisión por secuencias escalable y tolerante a errores que admite de forma nativa tanto las cargas de trabajo de streaming como por lotes.Apache Spark Streaming is a scalable fault-tolerant streaming processing system that natively supports both batch and streaming workloads.
  • Azure Cosmos DB es una base de datos de varios modelos distribuida globalmente.Azure Cosmos DB is a globally distributed, multi-model database.
    • Niveles de coherencia: Cosmos DB admite cinco niveles de coherencia (fuerte, obsolescencia limitada, sesión, prefijo coherente, eventual), lo que permite encontrar un equilibrio entre la coherencia de lectura frente a la disponibilidad, la latencia y el rendimiento.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 permite eliminar automáticamente elementos de un contenedor después de un determinado período de tiempo.TTL - Azure Cosmos DB provides the ability to delete items automatically from a container after a certain time period. Esto permite que Cosmos DB actúe como un almacén de datos de acceso frecuente para los datos recientes, y los datos que se almacenan a largo plazo lo hacen en el almacenamiento de datos de acceso poco frecuente de Azure Blob Storage.This allows Cosmos DB to act as a hot data store for recent data, with long-term data stored in Azure Blob cold storage.
    • Fuente de cambios: muestra la lista ordenada de los documentos que han cambiado en el orden en el que se modificaron.Change Feed - Outputs a sorted list of documents that were changed in the order in which they were modified. Puede crear pequeñas funciones reactivas de Azure Functions que se desencadenarán automáticamente en cada nuevo evento en la fuente de cambios de su contenedor de 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. En función del contenido del documento JSON, la función de Azure puede conectarse a Service API de Azure IoT Hub y ejecutar una acción en el dispositivo mediante dispositivos gemelos, mensajería de nube a dispositivo o métodos directos.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.
    • Unidad de solicitud (RU): es la medida del rendimiento de Azure Cosmos DB.Request Unit (RU) - Is the measure of throughput in Azure Cosmos DB. Las RU son unidades de proceso que se usan para rendimiento y costo.RUs are compute units for both performance and cost. Con las RU, puede escalar y reducir verticalmente de forma dinámica al tiempo que mantiene la disponibilidad y optimiza el costo, el rendimiento y la disponibilidad.With RUs, you can dynamically scale up and down while maintaining availability, optimizing for cost, performance and availability at the same time.
    • Creación de particiones: la clave de partición es la que determinará cómo se enrutan los datos en las distintas particiones mediante Cosmos DB y debe tener sentido en el contexto de su escenario específico.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. El identificador de dispositivo IoT suele ser la clave de partición "natural" de las aplicaciones IoT.The IoT Device Id is generally the “natural” partition key for IoT applications.
  • Azure SQL Database es la base de datos relacional para datos transaccionales y otros datos que no son de IoT.Azure SQL Database is the relational database for transactional and other non-IoT data.
  • Azure Synapse Analytics es el almacenamiento de datos y la plataforma de generación de informes, que contiene datos agregados de Azure SQL y Cosmos DB.Azure Synapse Analytics is the data warehouse and reporting platform, containing aggregated data from Azure SQL and Cosmos DB. Para el almacenamiento de datos empresariales y el análisis de macrodatos.For enterprise data warehousing and big data analytics.
  • Power BI es un conjunto de herramientas de análisis de negocios que sirve para analizar datos y compartir conocimientos.Power BI is a suite of business analytics tools to analyze data and share insights. Power BI puede consultar un modelo semántico almacenado en Azure Analysis Services o bien consultar Azure Synapse directamente.Power BI can query a semantic model stored in Azure Analysis Services, or it can query Azure Synapse directly.
  • Azure App Service se puede usar para compilar aplicaciones web y móviles.Azure App Services can be used to build web and mobile applications. La aplicación de API de Azure se puede usar para exponer los datos a terceros, en función de los datos almacenados en la capa de servicios.Azure API App can be used to expose data to third parties, based on the data stored in the Serving Layer.
  • Azure Functions se puede usar para traducir cargas de mensajes de IoT (por ejemplo, de binario a JSON) o acciones desencadenadoras cuando se conectan a la fuente de cambios de 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 es una plataforma de proceso sin servidor basada en eventos.Azure Functions is an event-driven serverless compute platform. Compile y depure localmente sin configuración adicional, implemente y opere a escala en la nube e integre servicios mediante desencadenadores y enlaces.Build and debug locally without additional setup, deploy and operate at scale in the cloud, and integrate services using triggers and bindings.

AlternativasAlternatives

ConsideracionesConsiderations

  • Cosmos DB tiene un límite de 20 GB (en el pasado era de 10 GB) para una única partición lógica.Cosmos DB has a 20-GB limit (in the past it was 10GB) for a single logical partition. Para la mayoría de las soluciones IoT, este tamaño es suficiente.For most IoT solutions, this size is sufficient. Si no lo es, se recomienda lo siguiente:If not, we recommend either:
    • Establecer la clave de partición en un campo artificial y asignar un valor compuesto (por ejemplo, el identificador del dispositivo además del mes y el año actuales).Setting the partition key to an artificial field and assign a composite value (for example, Device ID + Current Month and Year). Así se garantiza una cardinalidad extremadamente alta de los valores.This will ensure an extremely high cardinality of values.
    • Apilar los datos de Cosmos DB antiguos fuera del almacenamiento de datos de acceso poco frecuente (por ejemplo, Azure Blob Storage) mediante una combinación de TTL para eliminar automáticamente los datos de Cosmos DB y la fuente de cambios, y replicar los datos en el almacenamiento de acceso poco frecuente.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.

Pasos siguientesNext steps

Revise los artículos siguientes sobre IoT y Cosmos DB.Review the following articles on IoT and Cosmos DB.