IoT com o Cosmos DB

Cosmos DB
Databricks
Funções
IoT Hub
Power BI

Dimensione de forma instantânea e elástica para acomodar cargas de trabalho IoT diversas e imprevisíveis sem sacrificar a ingestão ou o desempenho de consulta.Scale instantly and elastically to accommodate diverse and unpredictable IoT workloads without sacrificing ingestion or query performance.

Azure Cosmos DB é a base de dados multi-modelo da Microsoft distribuída globalmente.Azure Cosmos DB is Microsoft’s globally distributed, multi-model database. A Azure Cosmos DB foi construída do zero com distribuição global e escala horizontal no seu núcleo.Azure Cosmos DB was built from the ground up with global distribution and horizontal scale at its core. Oferece uma distribuição global chave na mão em qualquer número de regiões do Azure, escalando e replicando os seus dados de forma transparente onde quer que os seus utilizadores estejam.It offers turnkey global distribution across any number of Azure regions by transparently scaling and replicating your data wherever your users are. Você pode dimensionar elasticamente a produção e armazenamento em todo o mundo, e pagar apenas pela produção e armazenamento que você precisa.You can elastically scale throughput and storage worldwide, and pay only for the throughput and storage you need.

Cosmos DB é ideal para soluções IoT.Cosmos DB is ideally suited for IoT solutions. Cosmos DB pode ingerir dados de telemetria de dispositivos a taxas elevadas e pode servir consultas indexadas de volta com baixa latência e alta disponibilidade.Cosmos DB can ingest device telemetry data at high rates and can serve indexed queries back with low latency and high availability.

Cosmos DB é uma base de dados multi-modelo com pontos finais API compatíveis com protocolos de arame para Cassandra, MongoDB, SQL, Gremlin, Etcd e Table, juntamente com suporte incorporado para ficheiros 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.

ArquiteturaArchitecture

Arquitetura

Fluxo de DadosData Flow

  1. Os eventos gerados a partir de dispositivos IoT são enviados para a camada de análise e transformação através do Azure IoT Hub como um fluxo de mensagens.Events generated from IoT devices are sent to the analyze and transform layer through Azure IoT Hub as a stream of messages. O Azure IoT Hub armazena fluxos de dados em divisórias durante um período de tempo configurável.Azure IoT Hub stores streams of data in partitions for a configurable amount of time.
  2. A Azure Databricks, executando o Apache Spark Streaming, recolhe as mensagens em tempo real a partir do IoT Hub, processa os dados com base na lógica do negócio e envia os dados para servir camada para armazenamento.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. O Spark Streaming pode fornecer análises em tempo real, tais como calcular médias móveis, valores min e máximo ao longo dos períodos de tempo.Spark Streaming can provide real time analytics such as calculating moving averages, min and max values over time periods.
  3. As mensagens do dispositivo são armazenadas em Cosmos DB como documentos JSON.Device messages are stored in Cosmos DB as JSON documents. Esta é considerada a loja de dados quentes.This is considered the hot data store. Diferentes esquemas JSON que representam diferentes fornecedores de dispositivos podem ser armazenados em Cosmos DB ou convertidos para um 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. A camada de armazenamento consiste em:The storage layer consists of:
    • Azure Blob Storage - Encaminhamento de mensagens IoT Hub pode guardar as mensagens de dispositivo IoT crus para o armazenamento do Azure Blob, permitindo que o armazenamento de bolhas atue como uma loja de dados frios barata e a longo prazo .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 - Utilize o Azure SQL para armazenar os seus dados transacionais e relacionais (por exemplo, dados de faturação, funções de utilizador).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 o seu armazém de dados de solução.Azure Synapse Analytics (Previously Azure SQL Data Warehouse) - For your solution data warehouse. Povoou-o utilizando a Azure Data Factory utilizando dados agregados da Cosmos DB e da Azure SQL.Populated it using Azure Data Factory using aggregated data from Cosmos DB and Azure SQL.
  5. O Microsoft Power BI pode ser utilizado pelos seus utilizadores para analisar dados armazenadas.Microsoft Power BI can be used by your users to analyze warehoused data.
  6. Web, mobile e outras aplicações podem ser construídas na camada de armazenamento.Web, mobile and other applications can be built on the storage layer. Por exemplo, pode expor APIs com base nos dados da camada de armazenamento para utilizações de terceiros.For example, you can expose APIs based on the storage layer data for third-party uses.
  7. Utilize o Cosmos DB Change Feed para executar uma Função Azure sempre que uma mensagem do dispositivo é adicionada ou atualizada em 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. Algumas mensagens do dispositivo (por exemplo, um código de avaria) podem exigir uma ação a ser executada no dispositivo.Some device messages (for example, a fault code) may require an action to be performed on the device. Utilizando a Azure IoT Hub Service API, a Função Azure pode ligar-se ao Azure IoT Hub e realizar uma ação no dispositivo (por exemplo, reiniciar) utilizando: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 DuplosDevice Twins
    • Mensagens cloud to DeviceCloud to Device messages
    • Métodos DiretosDirect Methods

ComponentesComponents

Esta arquitetura utiliza os seguintes componentes Azure:This architecture uses the following Azure components:

  • O Azure IoT Hub funciona como porta de entrada em nuvem, ingerindo telemetria do dispositivo à escala.Azure IoT Hub acts as the cloud gateway, ingesting device telemetry at-scale. O IoT Hub também suporta a comunicação bidirecional de volta aos dispositivos, permitindo que as ações sejam enviadas da nuvem ou do Azure IoT Edge para o 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. O Azure IoT Edge pode ser usado para executar aplicações na borda, como modelos de machine learning.Azure IoT Edge can be used to run applications at the edge, such as machine learning models.
  • Azure Databricks com Apache Spark Streaming está localizado na camada de transformação e análise.Azure Databricks with Apache Spark Streaming is located in the transformation and analytics layer. Databricks usa a biblioteca azure-eventhubs-spark_2.11:2.3.6 Maven para ligar ao ponto final compatível com o Centro de Eventos do 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 é um sistema de processamento de streaming tolerante a falhas escalável que suporta de forma nativa tanto cargas de trabalho de lote como de streaming.Apache Spark Streaming is a scalable fault-tolerant streaming processing system that natively supports both batch and streaming workloads.
  • Azure Cosmos DB é uma base de dados multi-modelo distribuída globalmente.Azure Cosmos DB is a globally distributed, multi-model database.
    • Níveis de Consistência - Cosmos DB suporta 5 níveis de consistência (Forte, Limitado Staleness, Sessão, Prefix consistente, Eventual) permitindo-lhe fazer a troca entre a consistência de leitura vs. disponibilidade, latência e produção.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 fornece a capacidade de eliminar itens automaticamente de um recipiente após um determinado período de tempo.TTL - Azure Cosmos DB provides the ability to delete items automatically from a container after a certain time period. Isto permite que a Cosmos DB atue como uma loja de dados quentes para dados recentes, com dados de longo prazo armazenados no armazenamento frio de Azure Blob.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 - Outputs uma lista ordenada de documentos que foram alterados na ordem em que foram modificados.Change Feed - Outputs a sorted list of documents that were changed in the order in which they were modified. Pode criar pequenas Funções Azure reativas que serão automaticamente ativadas em cada novo evento no feed de mudança do seu contentor 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. Dependendo do conteúdo do documento JSON, a Função Azure pode ligar-se à Azure IoT Hub Service API e executar uma ação no dispositivo utilizando mensagens De Dispositivo Twin, Cloud to Device ou Direct Methods.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.
    • Unidade de Pedido (RU) - É a medida de produção na Azure Cosmos DB.Request Unit (RU) - Is the measure of throughput in Azure Cosmos DB. As RUs são unidades de cálculo tanto para o desempenho como para o custo.RUs are compute units for both performance and cost. Com as RUs, você pode escalar dinamicamente para cima e para baixo, mantendo a disponibilidade, otimizando o custo, desempenho e disponibilidade ao mesmo tempo.With RUs, you can dynamically scale up and down while maintaining availability, optimizing for cost, performance and availability at the same time.
    • Partição - A chave de partição é o que determinará como os dados são encaminhados nas várias divisórias pela Cosmos DB e precisa de fazer sentido no contexto do seu cenário 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. O IoT Device Id é geralmente a chave de partição "natural" para aplicações IoT.The IoT Device Id is generally the “natural” partition key for IoT applications.
  • A Azure SQL Database é a base de dados relacional para dados transacionais e outros dados não-IoT.Azure SQL Database is the relational database for transactional and other non-IoT data.
  • A Azure Synapse Analytics é a plataforma de armazenamento de dados e relatórios, contendo dados agregados da Azure SQL e cosmos DB.Azure Synapse Analytics is the data warehouse and reporting platform, containing aggregated data from Azure SQL and Cosmos DB. Para armazenamento de dados da empresa e análise de big data.For enterprise data warehousing and big data analytics.
  • Power BI é um conjunto de ferramentas de análise de negócios para analisar dados e partilhar insights.Power BI is a suite of business analytics tools to analyze data and share insights. O Power BI pode consultar um modelo semântico armazenado nos Serviços de Análise Azure, ou pode consultar diretamente a Azure Synapse.Power BI can query a semantic model stored in Azure Analysis Services, or it can query Azure Synapse directly.
  • Os Serviços de Aplicações Azure podem ser usados para construir aplicações web e móveis.Azure App Services can be used to build web and mobile applications. A Azure API App pode ser usada para expor dados a terceiros, com base nos dados armazenados na Camada de Serviço.Azure API App can be used to expose data to third parties, based on the data stored in the Serving Layer.
  • As funções de Azure podem ser usadas para traduzir cargas de mensagens IoT (por exemplo, de binária a JSON) ou desencadear ações quando ligadas ao Cosmos DB Change Feed.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 é uma plataforma de computação sem servidor orientada por eventos.Azure Functions is an event-driven serverless compute platform. Crie e depure localmente sem configuração adicional, implemente e opere em escala na cloud e integre serviços mediante a utilização de acionadores e enlaces.Build and debug locally without additional setup, deploy and operate at scale in the cloud, and integrate services using triggers and bindings.

AlternativasAlternatives

ConsideraçõesConsiderations

  • Cosmos DB tem um limite de 20 GB (no passado era 10GB) para uma única partição lógica.Cosmos DB has a 20-GB limit (in the past it was 10GB) for a single logical partition. Para a maioria das soluções IoT, este tamanho é suficiente.For most IoT solutions, this size is sufficient. Caso contrário, recomendamos:If not, we recommend either:
    • Definir a chave de partição para um campo artificial e atribuir um valor composto (por exemplo, ID do dispositivo + Mês e Ano Corrente).Setting the partition key to an artificial field and assign a composite value (for example, Device ID + Current Month and Year). Isto assegurará uma cardinalidade extremamente elevada de valores.This will ensure an extremely high cardinality of values.
    • Os dados de Nível Antigo do Cosmos DB para o armazenamento frio (por exemplo, Azure Blob Storage) usando uma combinação de TTL para podar automaticamente dados da Cosmos DB e alterar o feed para replicar dados para armazenamento frio.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.

Passos seguintesNext steps

Reveja os seguintes artigos sobre IoT e Cosmos DB.Review the following articles on IoT and Cosmos DB.