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

Dica

Em todas as tarefas de replicação com estado em que você precisa considerar o conteúdo de seus eventos e transformar, agregar, enriquecer ou reduzi-lo, use Azure Stream Analytics em vez de Azure Functions.

Conforme explicado no artigo 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.

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

Nesta visão geral, você aprenderá sobre os recursos internos do Azure Functions para esses aplicativos, sobre os blocos de código que você pode adaptar e modificar para tarefas de transformação e sobre como configurar um aplicativo Azure Functions de modo que ele se integre de maneira ideal com os Hubs de Eventos e outros serviços de Azure Messaging. Para muitos detalhes, este artigo fará referência à 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 destino diferirem.

As tarefas de replicação geralmente não têm estado, o que significa que elas não compartilham estado ou outros efeitos colaterais entre execuções sequenciais ou paralelas de uma tarefa. Isso também é verdadeiro para envio em lote e encadeamento, que podem ser implementados na parte superior do estado existente de um fluxo.

Isso torna as tarefas de replicação diferentes das tarefas de agregação, que geralmente são monitoradas, 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 as mensagens copiadas da origem para um destino configurado.

Gatilho Saída
Gatilho do Azure Hubs de Eventos do Azure Associação de saída dos Hubs de Eventos do Azure
Gatilho do Barramento de Serviço do Azure Associação de saída do Barramento de Serviço do Azure
Gatilho do Hub IoT do Azure Associação de saída do Hub IoT do Azure
Gatilho da Grade de Eventos do Azure Associação de saída da Grade de Eventos do Azure
Gatilho de Armazenamento de Filas do Azure Associação de saída do Armazenamento de Filas do Azure
Gatilho do Apache Kafka Associação de saída do Apache Kafka
Gatilho do RabbitMQ Associação de saída do RabbitMQ
Associação de saída dos Hubs de Notificações do Microsoft Azure
Associação de saída do Serviço do Azure SignalR
Associação de saída do SendGrid Twilio

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 no .NET com tarefas de replicação escritas em Java, por exemplo. Isso é importante caso você queira aproveitar bibliotecas específicas, como o Apache Camel, que estão disponíveis apenas para Java e caso elas sejam a melhor opção para um determinado caminho de integração, embora normalmente você prefira uma linguagem e um runtime diferentes para outras tarefas de replicação.

Sempre que disponível, você deverá preferir os gatilhos orientados a lote sobre gatilhos que fornecem eventos ou mensagens individuais e sempre deve obter o evento completo ou a estrutura da mensagem em vez de confiar nas expressões de associação de parâmetro 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 associação de saída, você precisará executar algum mapeamento entre os diferentes tipos de evento ou de 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 Barramento de Serviço, você não precisa escrever seu próprio código, mas pode apoiar-se em biblioteca de utilitário que é fornecida com as amostras de replicação.

Política de Repetição

Para evitar a perda de dados durante o evento de disponibilidade em qualquer um dos lados de uma função de replicação, você precisa configurar a política de repetição para que ela seja robusta. Confira a documentação do Azure Functions em repetições para configurar a política de repetição.

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

A versão (GA) geralmente disponível de políticas de repetição para o Azure Functions só dá suporte a Hubs de Eventos e gatilhos de temporizador. O suporte de versão prévia 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 Azure Functions configurado para ser executado no plano de consumo ou (recomendado) em um plano Premium do Azure Functions. Todos os aplicativos de replicação devem ser executados sob uma identidade gerenciada atribuída pelo usuário ou pelo sistema.

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

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

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

Implantar Visualizar
Plano de consumo do Azure Functions Implantar no Azure Visualizar
Plano Premium do Azure Functions Implantar no Azure Visualizar
Plano Premium do Azure Functions com VNet Implantar no Azure Visualizar

Exemplos

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

Para copiar dados de evento entre os hubs de eventos, use um gatilho do hubs de eventos com uma associação de saída do 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 Barramento de Serviço, use o gatilho do Barramento de Serviço 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 os Hubs de Eventos e o Barramento de Serviço:

Fonte Destino Entry Point
Hubs de Eventos Hubs de Eventos Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub
Hubs de Eventos Barramento de Serviço Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus
Barramento de Serviço Hubs de Eventos Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub
Barramento de Serviço Barramento de Serviço Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus

Monitoramento

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

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

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

Próximas etapas