Control Systems and Automation
Building an Event-driven Architecture with Azure Event Hub and Functions
Table of Contents
A arquitetura orientada para eventos (EDA) surgiu como um padrão fundamental para a construção de sistemas modernos, responsivos e conectados vagamente. O Microsoft Azure fornece um conjunto robusto de serviços para implementar a EDA, com o Azure Event Hub servindo como uma camada de ingestão de eventos de alta produtividade e Funções Azure fornecendo computação sem servidor para reagir a esses eventos em tempo próximo. Este artigo apresenta um guia abrangente para construir uma arquitetura orientada para eventos usando esses dois serviços, cobrindo princípios de design, implementação passo a passo, melhores práticas operacionais e casos de uso do mundo real. Se você está ingerindo telemetria de milhões de dispositivos de IoT ou processando dados de clickstream de aplicativos web, esta arquitetura pode escalar para atender às suas demandas, mantendo a complexidade operacional baixa.
Compreender a Arquitetura Dirigida por Eventos
No seu núcleo, uma arquitetura orientada para eventos é construída em torno da produção, detecção, consumo e reação a eventos. Um evento é uma mudança significativa no estado – por exemplo, uma leitura de sensores, uma transação de pagamento ou uma atualização de perfil de usuário. Em EDA, componentes se comunicam através de eventos em vez de chamadas síncronas diretas, o que reduz o acoplamento e permite escala independente de produtores e consumidores.
Conceitos-chave
- Produtor de eventos: Qualquer componente que emite eventos para o barramento de eventos. Exemplos incluem dispositivos IoT, microservices ou sistemas legados que emitem eventos de captura de dados de mudanças (CDC).
- Event Bus / Stream:] Um gasoduto durável e escalável que ingere e persiste eventos. Azure Event Hub se encaixa perfeitamente neste papel, oferecendo fluxos de eventos separados e ordenados.
- Consumidor de eventos: Um componente que se inscreve em eventos e os processa. Funções Azure podem agir como consumidores, acionado automaticamente quando novos eventos chegam.
- Event Sourcing e CQRS: Muitas implementações combinam EDA com o sourcing de eventos (persistindo o log de eventos como fonte da verdade) e a segregação de responsabilidade de consultas de comando (CQRS) para separar modelos de leitura e escrita.
A dissociação introduzida pela EDA permite que as equipes desenvolvam, implantem e escalem serviços de forma independente. Também facilita análises em tempo real, trilhas de auditoria e a capacidade de reproduzir eventos históricos para depuração ou reprocessamento.
Hub de evento Azure: A camada de ingestão
O Azure Event Hub é uma plataforma de transmissão de dados totalmente gerenciada em tempo real que pode ingerir milhões de eventos por segundo. Sua arquitetura é projetada para alta produtividade, baixa latência e durabilidade. O Event Hub captura eventos em partições, cada uma sendo uma sequência ordenada de eventos. Os consumidores podem ler de um ponto de controle para retomar o processamento.
Principais características do Hub de Eventos
- Particionamento: Os eventos são distribuídos através de partições para processamento paralelo. Cada partição é independente e pode ser consumida por uma instância separada da Função Azure.
- Capture: Persiste automaticamente fluxos de eventos para o armazenamento do Azure Blob ou o armazenamento do lago de dados do Azure para análise de arquivos e lotes.
- Geo-desastre Recuperação: O emparelhamento opcional de espaços de nomes em todas as regiões garante alta disponibilidade.
- AMQP, HTTPS e Kafka Protocol: Suporta vários protocolos, permitindo que produtores usando clientes Apache Kafka enviem eventos diretamente.
- Unidades de entrada e saída (TUs) ou Unidades de processamento (PUs): Determinar a capacidade de entrada e saída. Para o nível sem servidor (Basic e Standard), as UT são usadas; para Premium e Dedicadas, as UPs proporcionam desempenho mais previsível.
Configurar Passos
- Criar um espaço de nomes de Hubs de eventos: No portal Azure, crie um novo espaço de nomes de Hubs de eventos. Escolha o nível de preços (O padrão é recomendado para a maioria das cargas de trabalho de produção). Habilite o auto-inflar se você esperar uma taxa de transferência variável.
- Criar uma instância do Hub de Evento: Dentro do espaço de nomes, crie um hub de eventos. Especifique o número de partições – uma regra comum de polegar é 4-32 partições para a maioria dos casos de uso. Partições não podem ser alteradas mais tarde sem recriar o hub, então escolha com base na taxa de transferência esperada.
- Configurar as Políticas de Acesso Compartilhado: Criar uma política para os produtores (por exemplo, "EnviarApenas") e uma para os consumidores (por exemplo, "EscuteApenas") para seguir o princípio do menor privilégio. As cadeias de conexão são usadas por aplicativos e Funções Azure.
- Ativar captura (Opcional): Se você precisar armazenar todos os eventos brutos para retenção de longo prazo, habilite captura e aponte para um recipiente de armazenamento Azure Blob ou armazenamento de lago de dados.
Para um exemplo prático, consulte o guia de arranque rápido oficial .
Funções do Azure: O gatilho de computação
As Funções Azure fornecem um ambiente de computação sem servidor onde você escreve o código que responde aos eventos. O gatilho Event Hub permite que uma função seja invocada automaticamente quando novos eventos são publicados em um hub de eventos. As funções podem aumentar automaticamente, com cada instância de função processando eventos de uma ou mais partições.
Comportamento do gatilho do Hub de eventos
- Checkpointing: A função execute time gerencia o checkpoint para manter o controle do último evento processado com sucesso por partição. Isto garante que se a função reiniciar, ele retoma a partir da posição correta.
- Processamento de lote: Por padrão, o gatilho entrega um lote de eventos. Você pode controlar o tamanho do lote e pré-retch contagem para ajuste de desempenho.
- Paralelismo: O número de instâncias de função é igual ao número de partições com eventos não processados. Para aumentar o paralelismo, aumente a contagem de partições (dentro dos limites). Para maior rendimento, use o plano de hospedagem Premium ou Dedicado em vez do plano de consumo, especialmente se o tempo de processamento da função for superior a alguns segundos.
Criando uma função Azure com o gatilho do Hub do Evento
- Crie uma aplicação de função no Azure Portal ou via Azure CLI. Escolha a pilha de execução (por exemplo, .NET, Node.js, Python).
- Adicionar uma ligação de gatilho Event Hub. A assinatura da função irá incluir um parâmetro para os dados do evento (por exemplo, ] ou ).
- Defina a configuração de texto de conexão Event Hub (a partir das configurações da aplicação) e o nome do hub do evento.
- Escrever lógica de processamento dentro da função. Tarefas comuns: deserialize JSON, atualizar um banco de dados, chamar uma API ou enviar o evento para outro serviço como SignalR para painéis em tempo real.
- Configure as ligações de saída conforme necessário – por exemplo, uma ligação de saída DB Cosmos para armazenar dados processados.
A documentação do gatilho Azure Functions Event Hub fornece amostras detalhadas de código para cada idioma.
Projetando a arquitetura de ponta a ponta
Agora combinamos as peças. O fluxo típico é: Produtores → Event Hub[ → Funções azuis → Serviços de Downstream[]. Vamos percorrer um exemplo de qualidade de produção: um sistema de gestão de frotas que recebe pings GPS de milhares de veículos.
Passo 1: Defina o Esquema do Evento
A consistência é crucial. Use um registro de esquema (como Azure Schema Registry in Event Hubs) ou simplesmente faça força a um esquema JSON. Um exemplo de carga útil de evento:
{
"vehicleId": "VH-12345",
"latitude": 37.7749,
"longitude": -122.4194,
"speed": 65.2,
"timestamp": "2025-03-21T10:30:00Z"
}
Usar Avro ou Protobuf pode reduzir o tamanho da carga útil e fornecer recursos de evolução de esquema, mas JSON continua sendo o mais simples de depurar.
Passo 2: Configurar os Produtores
Os produtores podem ser dispositivos IoT usando o Azure IoT Hub ou aplicativos personalizados usando o Event Hubs SDK. Para cenários de alto volume, eventos em lote juntos (por exemplo, envie 100 eventos por solicitação) para maximizar o rendimento. Certifique-se de que o produtor usa uma política de repetição com backoff exponencial.
Passo 3: Definir a chave de partição
Partições do Event Hub eventos baseados em uma chave de partição. Se você precisa de processamento ordenado por veículo, use como a chave de partição. Isto garante que todos os eventos do mesmo veículo aterrissam na mesma partição e são processados sequencialmente por um único consumidor.
Passo 4: Construa a função Azure
A função recebe lotes de eventos, processa cada um em ordem, e depois pode escrever a última localização para um cache (por exemplo, Azure Redis Cache) para consultas em tempo real. Ele também pode eventos de geofence – quando um veículo entra em uma determinada zona, a função pode enviar um alerta via Azure Logic Apps ou Twilio.
Passo 5: Lidar com Falhas e Repetições
Se o processamento falhar para um lote, o gatilho Event Hub irá tentar novamente de acordo com a política de reteste da função (o padrão é backoff exponencial até 5 vezes). Para eventos venenosos (por exemplo, JSON malformado), registre-os em uma fila de letras mortas (Azure Storage Fila ou um Event Hub dedicado). A função deve pegar exceções específicas e mover eventos problemáticos para fora do oleoduto de processamento normal.
Passo 6: Monitor e Escala
- Use o Azure Monitor para rastrear as métricas do Event Hub: mensagens recebidas, solicitações aceleradas, tamanho do backlog (diferença entre o último offset em espera e o último checkpoint).
- Para escalar as Funções do Azure, o plano de consumo irá automaticamente escalar, mas pode ter atrasos de arranque a frio. O plano Premium oferece pré-aquecimento de instância e integração de rede virtual.
- Configure alertas para o alto atraso, o que indica que a função não pode manter-se – considere aumentar as partições ou atualizar o plano de hospedagem.
Padrões avançados e melhores práticas
Repetição de eventos e atualização
Uma vantagem significativa do Event Hub é que os eventos são retidos para um período configurável (até 90 dias no Standard). Isto permite que os consumidores reproduzam os eventos a partir de um ponto específico no tempo – útil para preencher um novo banco de dados ou reprocessamento após a correção de um erro. Para ativar o replay, você pode criar um novo grupo de consumidores e iniciar a função a partir de um deslocamento personalizado.
Grupos de Consumidores Múltiplos
O Event Hub suporta até 20 grupos de consumidores por hub de eventos. Use grupos de consumidores separados para diferentes oleodutos de processamento: um para análise em tempo real, outro para arquivamento e um terceiro para treinamento de modelos de aprendizado de máquina. Cada grupo de consumidores tem sua própria loja de pontos de controle, permitindo progresso independente.
Processamento Idempotente
Dado que os eventos podem ser entregues pelo menos uma vez, a função deve ser idempotente. Por exemplo, ao inserir uma base de dados, use operações upsert em vez de inserir. Ou verifique se já existe um ID de evento em uma loja de deduplicação (por exemplo, Redis com TTL). Isto impede que o processamento duplicado cause inconsistência de dados.
Integração com ligações de saída de função Azure
Em vez de escrever código manual para enviar dados para outro lugar, use as ligações de saída. A tabela a seguir resume as ligações comuns para cenários orientados para eventos:
- Cosmos DB:] Documentos automaticamente de upsert da saída da função.
- SignalR Service: Transmitir eventos processados para clientes conectados (por exemplo, painel em tempo real).
- Blob Storage: Escreva saídas em lote periodicamente (evitar a escrita por evento para reduzir custos).
- Event Hubs (Output): Envie eventos para outro Event Hub para encadeamento.
Considerações sobre segurança
- Use a Identidade Gerenciada para a Função Azure para se conectar ao Event Hub em vez de armazenar strings de conexão em texto simples.
- Habilite a integração de rede virtual e firewall para o espaço de nomes Event Hub para restringir o acesso à rede.
- Use o Azure Key Vault para armazenar segredos como strings de conexão Event Hub e chaves de acesso.
- Criptografar os eventos em repouso e em trânsito (Event Hub usa TLS por padrão).
Casos de uso e cenários do mundo real
Processamento de Telemetria IoT
Como descrito anteriormente, o cenário de gerenciamento de frota é um ajuste clássico. Azure IoT Hub pode ingerir mensagens do dispositivo e roteá-las para o Event Hub para processamento a jusante. Azure Funções podem então calcular a velocidade média por rota, detectar anomalias ou ativar alertas de manutenção.
Análise do Clickstream
Os sites de comércio eletrônico geram dados de cliques maciços. O Event Hub pode agregar visualizações de página, ações de carrinho de compras e pesquisas. Funções podem enriquecer os eventos com dados de perfil de usuário, contadores de sessão de atualização e empurrar para o Azure Data Explorer para painéis próximos em tempo real. A arquitetura de referência Azure para clickstream fornece um projeto completo.
Alterar a Captura de Dados (CDC)
Quando você precisa sincronizar dados de uma base de dados relacional para um índice de pesquisa ou cache, CDC usando o Event Hub é uma abordagem comum. Por exemplo, usando Debezium (Kafka Connect) para transmitir as alterações de banco de dados para o Event Hub, então uma função Azure transforma e escreve para a Pesquisa Elastic. Este padrão mantém o índice de pesquisa sempre atualizado sem lógica de votação personalizada.
Processamento de Transações Financeiras
Em finanças, a arquitetura orientada por eventos permite a detecção de fraudes, a pontuação em tempo real de risco e a liquidação comercial. A baixa latência e alta produtividade do Event Hub tornam-no adequado para lidar com milhares de transações por segundo. Funções Azure podem executar modelos de detecção de fraudes, sinalizar transações suspeitas e enviar alertas enquanto mantém trilhas de auditoria.
Otimização e monitoramento de custos
Embora o servidor não tenha custos inativos, você ainda deve monitorar o uso. Os drivers de custo chave são:
- [[FLT: 0]] Unidades de rendimento do Hub de eventos: Cada TU permite 1 MB/s de entrada e 2 MB/s de saída (ou 1000 eventos por segundo). Para cargas de trabalho imprevisíveis, habilite o auto-inflar.
- Montante de dados ingeridos: Cobrado por milhões de eventos (nível padrão). Use o loteamento para reduzir a contagem de eventos.
- Tempo de Execução da Função Azul: O plano de consumo cobra por segundo de execução. Certifique-se de que sua função é eficiente – evite bloquear chamadas e use assincronia I/O.
- Armazenamento usado para Captura e Checkpoints: Os custos de armazenamento de blocos são mínimos, mas considerem as políticas de retenção.
Define alertas de orçamento no Azure Cost Management. Use o Application Insights para rastrear os tempos de execução da função e as chamadas de dependência. A página Azure Event-driven architecture pattern[] inclui orientações sobre o monitoramento.
Comparação com Tecnologias Alternativas
- Azure Service Bus:] Melhor para cargas de trabalho orientadas por comandos que exigem ordens rigorosas, processamento transacional e entrega de cartas. O Event Hub é otimizado para streaming de eventos de alta produtividade, não para mensagens ponto-a-ponto.
- Apache Kafka no HDInsight ou Confluente: Mais controle sobre configurações, mas requer sobrecarga operacional. Event Hub fornece compatibilidade de protocolo Kafka com um serviço gerenciado.
- Event Grid:] Adequado para programação reativa e roteamento de eventos entre serviços Azure. Não é projetado para streaming de alto volume – Event Hub lida com milhões de eventos por segundo.
- Azure Stream Analytics: Um mecanismo de processamento gerenciado tipo SQL para análise de séries temporais. Ele pode ser executado em cima do Event Hub, mas para lógica complexa de negócios, Azure Functions oferece mais flexibilidade.
Lista de Controlo Operacional
- Defina tempo de retenção para eventos (padrão 1 dia, máx. 7 dias no Standard).
- Defina insights de aplicativos para a função Azure para registrar a contagem de eventos e erros processados.
- Activar os alertas do Monitor Azure para a aceleração do Event Hub (verifique a métrica ).
- Use a Política Azure para fazer cumprir o tipo de versão e autenticação do TLS.
- Cenários de falha de teste: parar a função, deixar os eventos acumular, em seguida, reiniciar para verificar a recuperação de checkpoint.
- Execute testes de carga com um produtor simulado para garantir que a arquitetura manipula o volume de pico.
Conclusão
Construindo uma arquitetura orientada a eventos com Azure Event Hub e Azure Functions equipa as organizações com um sistema escalável, econômico e responsivo para o processamento de dados em tempo real. A combinação de streaming de eventos duráveis e computação sem servidor permite que os desenvolvedores se concentrem na lógica empresarial enquanto Azure lida com o gerenciamento de particionamento, escala e pontos de controle. Ao seguir os princípios de design e as melhores práticas aqui descritas – escolher contagens de partição apropriadas, implementar processamento indempotente e monitorar a saúde operacional – você pode criar um pipeline pronto para a produção que se adapta a volumes de dados em evolução. Como os padrões orientados por eventos continuam a moldar aplicações modernas na nuvem, dominar esses serviços Azure é uma habilidade valiosa para qualquer arquiteto ou desenvolvedor em nuvem.