Tarefas e aplicativos de replicação de eventos com o Azure Functions

Gorjeta

Para todas as tarefas de replicação com monitoração de estado em que você precisa considerar as cargas úteis de seus eventos e transformá-las, agregar, enriquecer ou reduzi-las, use o Azure Stream Analytics em vez do Azure Functions.

Conforme explicado no artigo sobre replicação de eventos e federação entre regiões, a replicação sem estado de fluxos de eventos entre pares de Hubs de Eventos e entre Hubs de Eventos e outras fontes e destinos de fluxo de eventos depende do Azure Functions.

O Azure Functions é um ambiente de execução escalável e confiável para configurar e executar aplicativos sem servidor, incluindo replicação de eventos e tarefas de federação.

Nesta visão geral, você aprenderá sobre os recursos internos do Azure Functions para esses aplicativos, sobre blocos de código que você pode adaptar e modificar para tarefas de transformação e sobre como configurar um aplicativo do Azure Functions de modo que ele se integre idealmente aos Hubs de Eventos e outros serviços de Mensagens do Azure. Para obter muitos detalhes, este artigo apontará para a documentação do Azure Functions.

O que é uma tarefa de replicação?

Uma tarefa de replicação recebe eventos de uma origem e os encaminha para um destino. A maioria das tarefas de replicação encaminhará eventos inalterados e, no máximo, executará o mapeamento entre estruturas de metadados se os protocolos de origem e de destino forem diferentes.

As tarefas de replicação geralmente são sem monitoração de estado, o que significa que elas não compartilham o estado ou outros efeitos colaterais em execuções sequenciais ou paralelas de uma tarefa. Isso também é verdade para o processamento em lote e o encadeamento, que podem ser implementados em cima do estado existente de um fluxo.

Isso torna as tarefas de replicação diferentes das tarefas de agregação, que geralmente têm estado e são o domínio de estruturas e serviços de análise, como o Azure Stream Analytics.

Aplicativos e tarefas de replicação no Azure Functions

No Azure Functions, uma tarefa de replicação é implementada usando um gatilho que adquire mensagens de entrada de uma fonte configurada e uma associação de saída que encaminha mensagens copiadas da origem para um destino configurado.

Acionador Saída
Gatilho de Hubs de Eventos do Azure Vinculação de saída dos Hubs de Eventos do Azure
Gatilho do Barramento de Serviço do Azure Vinculação de saída do Barramento de Serviço do Azure
Gatilho do Hub IoT do Azure Vinculação de saída do Hub IoT do Azure
Gatilho da Grade de Eventos do Azure Vinculação de saída da Grade de Eventos do Azure
Acionador do Armazenamento de Filas do Azure Vinculação de saída do Armazenamento de Filas do Azure
Apache Kafka gatilho Ligação de saída Apache Kafka
Gatilho RabbitMQ Ligação de saída RabbitMQ
Vinculação de saída dos Hubs de Notificação do Azure
Vinculação de saída de serviço do Azure SignalR
Ligação de saída Twilio SendGrid

As tarefas de replicação são implantadas no aplicativo de replicação por meio dos mesmos métodos de implantação que qualquer outro aplicativo do Azure Functions. Você pode configurar várias tarefas no mesmo aplicativo.

Com o Azure Functions Premium, vários aplicativos de replicação podem compartilhar o mesmo pool de recursos subjacente, chamado de Plano do Serviço de Aplicativo. Isso significa que você pode facilmente colocar tarefas de replicação escritas em .NET com tarefas de replicação escritas em Java, por exemplo. Isso será importante se você quiser aproveitar bibliotecas específicas, como o Apache Camel, que só estão disponíveis para Java e se essas são a melhor opção para um caminho de integração específico, mesmo que você normalmente prefira uma linguagem e tempo de execução diferentes para suas outras tarefas de replicação.

Sempre que disponível, você deve preferir os gatilhos orientados a lote em vez de gatilhos que entregam eventos ou mensagens individuais e sempre deve obter o evento completo ou a estrutura da mensagem em vez de confiar nas expressões de vinculação de parâmetros da Função do Azure.

O nome da função deve refletir o par de origem e destino que você está conectando, e você deve prefixar referências a cadeias de conexão ou outros elementos de configuração nos arquivos de configuração do aplicativo com esse nome.

Mapeamento de dados e metadados

Depois de decidir sobre um par de gatilho de entrada e vinculação de saída, você terá que executar algum mapeamento entre os diferentes tipos de evento ou mensagem, a menos que o tipo de gatilho e a saída sejam os mesmos.

Para tarefas de replicação simples que copiam mensagens entre Hubs de Eventos e Service Bus, você não precisa escrever seu próprio código, mas pode se apoiar em uma biblioteca de utilitários fornecida com os exemplos de replicação.

Política de repetição

Para evitar a perda de dados durante o evento de disponibilidade em ambos os lados de uma função de replicação, você precisa configurar a política de repetição para ser robusta. Consulte a documentação do Azure Functions sobre novas tentativas para configurar a política de novas tentativas.

As configurações de política escolhidas para os projetos de exemplo no repositório de exemplo configuram uma estratégia de backoff exponencial com intervalos de repetição de 5 segundos a 15 minutos com tentativas infinitas para evitar a perda de dados.

A versão geralmente disponível (GA) das políticas de repetição para o Azure Functions dá suporte apenas a Hubs de Eventos e gatilhos de Timer. O suporte de visualização para todos os outros gatilhos foi removido.

Configurando um host de aplicativo de replicação

Um aplicativo de replicação é um host de execução para uma ou mais tarefas de replicação.

É um aplicativo do Azure Functions configurado para ser executado no plano de consumo ou (recomendado) em um plano do Azure Functions Premium. Todos os aplicativos de replicação devem ser executados sob uma identidade gerenciada atribuída pelo sistema ou pelo usuário.

Os modelos vinculados do Azure Resource Manager (ARM) criam e configuram um aplicativo de replicação com:

  • Uma conta de Armazenamento do Azure para acompanhar o progresso da replicação e para logs.
  • Uma identidade gerenciada atribuída ao sistema.
  • Integração do Azure Monitor e do Application Insights para monitoramento.

Os aplicativos de replicação que devem acessar Hubs de Eventos vinculados a uma rede virtual (VNet) do Azure devem usar o plano Premium do Azure Functions e ser configurados para se anexar à mesma VNet, que também é uma das opções disponíveis.

Implementar Visualização
Plano de Consumo do Azure Functions Implementar no Azure Visualização
Plano Premium do Azure Functions Implementar no Azure Visualização
Plano Premium do Azure Functions com VNet Implementar no Azure Visualização

Exemplos

O repositório de exemplos contém vários exemplos de tarefas de replicação que copiam eventos entre Hubs de Eventos e/ou entre entidades do Service Bus.

Para copiar dados de eventos entre hubs de eventos, use um Gatilho de Hubs de Eventos com uma ligação de saída de Hubs de Eventos:

[FunctionName("telemetry")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task Telemetry(
    [EventHubTrigger("telemetry", ConsumerGroup = "$USER_FUNCTIONS_APP_NAME.telemetry", Connection = "telemetry-source-connection")] EventData[] input,
    [EventHub("telemetry-copy", Connection = "telemetry-target-connection")] EventHubClient outputClient,
    ILogger log)
{
    return EventHubReplicationTasks.ForwardToEventHub(input, outputClient, log);
}

Para copiar mensagens entre entidades do Service Bus, use o gatilho do Service Bus e a associação de saída:

[FunctionName("jobs-transfer")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task JobsTransfer(
    [ServiceBusTrigger("jobs-transfer", Connection = "jobs-transfer-source-connection")] Message[] input,
    [ServiceBus("jobs", Connection = "jobs-target-connection")] IAsyncCollector<Message> output,
    ILogger log)
{
    return ServiceBusReplicationTasks.ForwardToServiceBus(input, output, log);
}

Os métodos auxiliares podem facilitar a replicação entre Hubs de Eventos e Service Bus:

Origem Destino Ponto de entrada
Hubs de Eventos Hubs de Eventos Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub
Hubs de Eventos do Service Bus Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus
Service Bus Hubs de Eventos do Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub
Service Bus Service Bus Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus

Monitorização

Para saber como você pode monitorar seu aplicativo de replicação, consulte a seção de monitoramento da documentação do Azure Functions.

Uma ferramenta visual particularmente útil para monitorar tarefas de replicação é o Application Insights Application Map, que é gerado automaticamente a partir das informações de monitoramento capturadas e permite explorar a confiabilidade e o desempenho das transferências de origem e destino da tarefa de replicação.

Para obter informações de diagnóstico imediatas, você pode trabalhar com a ferramenta do portal Live Metrics , que fornece visualização de baixa latência dos detalhes do log.

Próximos passos