Azure Cosmos DB en cargas de trabajo de IoT

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

En este artículo se describe una carga de trabajo de Internet de las cosas (IoT) que se basa en varias características del servicio de base de datos de Azure Cosmos DB. Azure Cosmos DB es una base de datos de varios modelos creada para la distribución global y la escala horizontal.

La distribución global escala y replica datos de forma transparente entre regiones de Azure. Puede escalar el rendimiento y almacenamiento mundialmente y pagar solo por la cantidad que necesita. El escalado instantáneo elástico acomoda cargas de trabajo de IoT diversas e impredecibles, sin sacrificar el rendimiento de la ingesta o de las consultas.

Azure Cosmos DB es ideal para cargas de trabajo de IoT porque puede hacer lo siguiente:

  • Ingerir datos de telemetría de dispositivos a alta velocidad y devolver consultas indexadas con baja latencia y alta disponibilidad.
  • Almacenar el formato JSON de diferentes proveedores de dispositivos, lo que proporciona flexibilidad en el esquema de carga.
  • Usar puntos de conexión de API compatibles con el protocolo de transferencia para bases de datos de Cassandra, MongoDB, SQL, Gremlin, etcd y de tabla, además de compatibilidad integrada con archivos de Jupyter Notebook.

Posibles casos de uso

  • Use las funcionalidades integradas y distribuidas globalmente de Azure Cosmos DB para permitir operaciones de lectura y escritura de baja latencia para aplicaciones IoT con alta capacidad de respuesta.
  • Controle los datos de una amplia variedad de proveedores de dispositivos y tipos de datos.

Architecture

Diagrama que muestra el papel de Azure Cosmos DB en una arquitectura de solución Azure IoT.Descargue un archivo Visio de esta arquitectura.

Flujo de datos

  1. Los sensores de IoT y los dispositivos Edge envían eventos como flujos de mensajes a través de Azure IoT Hub a la capa de análisis y transformación. IoT Hub puede almacenar flujos de datos en particiones durante un tiempo especificado.

  2. Azure Databricks con Apache Spark Structured Streaming, recoge los mensajes de IoT Hub en tiempo real, procesa los datos según la lógica de negocios y los envía al almacenamiento. Structured Streaming puede proporcionar el análisis en tiempo real, por ejemplo, el cálculo de medias móviles o los valores mínimos y máximos en períodos de tiempo.

  3. Azure Cosmos DB almacena mensajes de dispositivo como documentos JSON en el almacén de datos de acceso frecuente. Azure Cosmos DB puede validar con esquemas JSON de distintos proveedores de dispositivos.

    La capa de almacenamiento consta de:

    • Azure Blob Storage. El enrutamiento de mensajes de IoT Hub guarda los mensajes de dispositivo sin procesar en el almacenamiento de blobs, lo que proporciona un almacén de datos en frío a largo plazo.
    • Azure SQL Database, para almacenar datos transaccionales y relacionales, como datos de facturación y roles de usuario.
    • El almacenamiento de datos de Azure Synapse Analytics, rellenado por Azure Data Factory, que agrega datos de Azure Cosmos DB y Azure SQL DB.
  4. Microsoft Power BI analiza el almacenamiento de datos.

  5. La capa de presentación usa datos de la capa de almacenamiento para compilar aplicaciones web, móviles y de API.

  6. Cada vez que llega un mensaje de dispositivo nuevo o actualizado, la fuente de cambios de Azure Cosmos DB desencadena una actualización de Azure Functions.

  7. La función determina si el mensaje requiere una acción del dispositivo, como un reinicio. Si es así, la función se conecta a IoT Hub mediante la API de servicio de IoT Hub e inicia la acción del dispositivo. La función puede iniciar la acción mediante dispositivos gemelos, mensajes de nube a dispositivo o métodos directos.

Componentes

Esta carga de trabajo usa los siguientes componentes de Azure:

Azure Cosmos DB

En esta carga de trabajo de IoT se distingue Azure Cosmos DB, una base de datos de varios modelos distribuida globalmente. La carga de trabajo usa las siguientes características de Azure Cosmos DB:

  • Niveles de coherencia. Azure Cosmos DB admite cinco niveles de coherencia de lectura, desde el más fuerte al más débil: fuerte, obsolescencia limitada, sesión, prefijo coherente y eventual. En general, una mayor coherencia conduce a una menor disponibilidad, una latencia más larga y un rendimiento inferior. Puede elegir un nivel de coherencia en función de los requisitos de la carga de trabajo.

  • Período de vida (TTL). Azure Cosmos DB puede eliminar automáticamente elementos de un contenedor después de un determinado período de tiempo. Esta capacidad 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.

  • Fuente de cambios. La característica de fuente de cambios genera una lista ordenada de los documentos cambiados, en el orden en el que se modificaron. Cada nuevo evento en la fuente de cambios del contenedor de Azure Cosmos DB desencadena automáticamente una pequeña función reactiva de Azure Functions. En función del contenido del documento JSON, la función puede conectarse a la API de servicio de Azure IoT Hub y ejecutar una acción en el dispositivo.

  • Unidades de solicitud (RU). Las RU son unidades de proceso que miden el rendimiento de Azure Cosmos DB. Puede usar las RU para escalar y reducir verticalmente Azure Cosmos DB de forma dinámica, al tiempo que mantiene la disponibilidad y optimización para el coste y el rendimiento.

  • Creación de particiones. La clave de partición determina cómo Azure Cosmos DB enruta los datos de las particiones. El id. de dispositivo de IoT es la clave de partición habitual de las aplicaciones de IoT.

Otros componentes de Azure

La solución también usa los siguientes componentes de Azure:

  • Azure IoT Edge ejecuta aplicaciones en el perímetro, como los modelos de Machine Learning.

  • Azure IoT Hub actúa como puerta de enlace en la nube e ingiere los datos de telemetría del dispositivo a escala. IoT Hub admite la comunicación de vuelta a los dispositivos, lo que permite que las acciones se envíen desde la nube a IoT Edge al dispositivo.

  • Azure Databricks con Spark Structured Streaming es un sistema de procesamiento de secuencias escalable y tolerante a errores que admite de forma nativa las cargas de trabajo de streaming y por lotes. Azure Databricks es la capa de transformación y análisis, y se conecta al punto de conexión compatible con el centro de eventos de IoT Hub mediante la biblioteca Maven azure-eventhubs-spark_2.11:2.3.6.

  • Azure Blob Storage proporciona almacenamiento de datos en frío escalable, económico y a largo plazo para datos no estructurados.

  • Azure SQL Database es la base de datos relacional para datos transaccionales y otros datos que no son de IoT.

  • Azure Synapse Analytics es una plataforma de almacenamiento de datos e informes para el almacenamiento de datos empresariales y el análisis de macrodatos. Synapse Analytics contiene datos agregados de Azure SQL Database y Azure Cosmos DB.

    Azure Synapse Link para Azure Cosmos DB permite realizar el análisis casi en tiempo real de los datos operativos de Azure Cosmos DB, sin afectar al rendimiento ni al coste de las cargas de trabajo transaccionales. Synapse Link usa los dos motores de análisis en el área de trabajo de Azure Synapse: SQL sin servidor y grupos de Spark.

  • Power BI es un conjunto de herramientas de análisis de negocios que sirve para analizar datos y compartir conocimientos. Power BI puede consultar un modelo semántico almacenado en Azure Analysis Services o bien consultar Azure Synapse directamente.

  • Azure App Service compila aplicaciones web y móviles. La aplicación de API de Azure permite que las aplicaciones de terceros consuman API basadas en datos de la capa de servicio.

  • Azure Functions es una plataforma de proceso sin servidor, controlada por eventos, que puede funcionar a escala en la nube e integrar servicios mediante desencadenadores y enlaces. Azure Functions puede traducir formatos de mensajes de IoT o desencadenar acciones cuando se conecta a la fuente de cambios de Azure Cosmos DB.

Alternativas

  • En lugar de Azure Databricks, la capa de transformación y análisis podría usar HDInsight Storm, HDInsight Spark o Azure Stream Analytics para realizar el análisis de streaming, y Azure Functions para transformar las cargas de mensajes.

  • La capa de almacenamiento de servicio podría usar Azure Data Explorer para almacenar mensajes de IoT. Este servicio también tiene abundantes funcionalidades de análisis.

Consideraciones

Azure Cosmos DB tiene un límite de 20 GB para una única partición lógica. Para la mayoría de las soluciones IoT, este tamaño es suficiente. Si no es así, puede:

  • Establecer la clave de partición en un campo artificial y asignar al campo un valor compuesto, como el id. de dispositivo + mes y año actuales. Esta estrategia garantiza una cardinalidad de alto valor para un buen diseño de partición. Para obtener más información, consulte Elección de una clave de partición.

  • En función del ciclo de vida de los datos, puede mover datos anteriores de Azure Cosmos DB a almacenamiento en frío, como Azure Blob Storage. Puede usar una combinación de fuente de cambios para replicar los datos en el almacenamiento en frío y TTL para eliminar automáticamente los datos de un contenedor después de un período de tiempo determinado.

Pasos siguientes