Provedores de streaming do Orleans
Os fluxos podem ser de diferentes formas. Alguns podem entregar eventos por links TCP diretos, enquanto outros os entregam por meio de filas duráveis. Diferentes tipos de fluxo podem usar diferentes estratégias de lote, diferentes algoritmos de armazenamento em cache ou diferentes procedimentos de contrapressão. Para evitar restringir os aplicativos de streaming a somente um subconjunto dessas opções comportamentais, os provedores de streaming são pontos de extensibilidade para o runtime de streaming do Orleans que permitem que os usuários implementem qualquer tipo de streaming. Esse ponto de extensibilidade é semelhante aos provedores de armazenamento do Orleans.
Provedor de streaming do Hub de Eventos do Azure
Os Hubs de Eventos do Azure são um serviço de ingestão de dados totalmente gerenciado e em tempo real capaz de receber e processar milhões de eventos por segundo. Eles foram criados para lidar com a ingestão de dados com alta taxa de transferência e baixa latência de várias fontes e com o processamento subsequente desses dados por vários consumidores.
Os Hubs de Eventos geralmente são usados como a base de uma arquitetura de processamento de eventos maior, em que servem como a "porta da frente" para um pipeline de eventos. Eles podem ser usados para ingerir dados de uma ampla variedade de fontes, incluindo feeds de mídia social, dispositivos IoT e arquivos de log. Um dos principais benefícios dos Hubs de Eventos é a capacidade de escalar horizontalmente para atender às necessidades até mesmo das maiores cargas de trabalho de processamento de eventos. Eles também são altamente disponíveis e tolerantes a falhas, com várias réplicas de dados distribuídas em várias regiões do Azure para garantir a alta disponibilidade.
O pacote NuGet Microsoft.Orleans.Streaming.EventHubs contém o provedor de streaming dos Hubs de Eventos.
Provedor de fluxo do AQ (Filas do Azure)
O provedor de fluxo do AQ (Filas do Azure) entrega eventos em Filas do Azure. No lado do produtor, o provedor de fluxo do AQ enfileira eventos diretamente nas Filas do Azure. No lado do consumidor, o provedor de fluxo do AQ gerencia um conjunto de agentes de extração que extraem eventos de um conjunto de Filas do Azure e os entregam ao código do aplicativo que os consome. Pode-se pensar nos agentes de extração como um "microsserviço" distribuído – um componente distribuído particionado, altamente disponível e elástico. Os agentes de extração são executados nos mesmos silos que hospedam os grãos do aplicativo. Assim, não há necessidade de executar funções de trabalho separadas do Azure para extrair das filas. A existência de agentes de pull, do gerenciamento deles, da contrapressão, do balanceamento das filas entre eles e da entrega de filas de um agente com falha para outro são totalmente gerenciados pelo runtime de streaming do Orleans e são transparentes para o código do aplicativo que usa fluxos.
O pacote NuGet Microsoft.Orleans.Streaming.AzureStorage contém o provedor de streaming do Armazenamento de Filas do Azure.
Adaptadores de fila
Diferentes provedores de fluxo que entregam eventos em filas duráveis apresentam comportamento semelhante e estão sujeitos a uma implementação semelhante. Portanto, fornecemos um extensível genérico PersistentStreamProvider que permite aos desenvolvedores conectar diferentes tipos de filas sem escrever um provedor de fluxo completamente novo do zero. O PersistentStreamProvider
usa um componente IQueueAdapter, que abstrai detalhes de implementação de fila específicos e fornece meios para enfileirar e desenfileirar eventos. Todo o resto é tratado pela lógica no PersistentStreamProvider
. O provedor de filas do Azure mencionado acima também é implementado desta forma: é uma instância de PersistentStreamProvider
que usa um AzureQueueAdapter
.
Provedor de fluxo de mensagens simples
O provedor de fluxo de mensagens simples, também conhecido como provedor de SMS, entrega eventos sobre TCP utilizando mensagens de granularidade regulares do Orleans. Como os eventos no SMS são fornecidos em links TCP não confiáveis, ele não garante a entrega confiável de eventos e não reenvia automaticamente mensagens com falha para fluxos de SMS. Por padrão, a chamada do produtor para OnNextAsync retorna um Task
que representa o status de processamento do consumidor de fluxo, informando ao produtor se o consumidor recebeu e processou o evento com sucesso. Se a tarefa falhar, o produtor pode decidir enviar o mesmo evento novamente, obtendo assim confiabilidade no nível do aplicativo. Embora a entrega de mensagens de fluxo seja o melhor esforço, os fluxos de SMS em si são confiáveis. Ou seja, a vinculação de assinante a produtor realizada pelo Pub-Sub é totalmente confiável.