Partilhar via


Streaming com Orleans

Orleans O Orleans streaming é um recurso da estrutura que permite aos desenvolvedores escrever aplicativos reativos que operam em uma sequência de eventos de forma estruturada. Orleans O streaming fornece um conjunto de abstrações e APIs que tornam pensar e trabalhar com fluxos mais simples e robusto. Um fluxo é uma entidade lógica que sempre existe e nunca pode falhar. Os fluxos são identificados pelo seu StreamId. Os fluxos permitem dissociar a geração de dados do seu processamento, tanto no tempo como no espaço. Os fluxos funcionam uniformemente entre grãos de processamento e Orleans clientes e podem ser compatíveis e transportáveis com uma ampla variedade de tecnologias de enfileiramento existentes, como Event Hubs, Service Bus, Filas do Azure e Apache Kafka. Orleans O streaming também suporta ligações de fluxo dinâmico, gerenciamento transparente do ciclo de vida do consumo de fluxo e provedores de fluxo extensíveis.

Orleans v.1.0.0 adicionou suporte para extensões de streaming para o modelo de programação. As extensões de streaming fornecem um conjunto de abstrações e APIs que tornam pensar e trabalhar com fluxos mais simples e robustos. As extensões de streaming permitem que os desenvolvedores escrevam aplicativos reativos que operam em uma sequência de eventos de forma estruturada. O modelo de extensibilidade dos provedores de fluxo torna o modelo de programação compatível e portátil em uma ampla gama de tecnologias de enfileiramento existentes, como Hubs de Eventos, ServiceBus, Filas do Azure e Apache Kafka. Não há necessidade de escrever código especial ou executar processos dedicados para interagir com essas filas.

Por que devo me importar?

Se você já sabe tudo sobre Stream Processing e está familiarizado com tecnologias como Hubs de Eventos, Kafka, Azure Stream Analytics, Apache Storm, Apache Spark Streaming e Reative Extensions (Rx) no .NET, você pode estar se perguntando por que você deve se importar. Por que precisamos de mais um Sistema de Processamento de Streams e como os atores estão relacionados com os Streams?"Porquê Orleans Streams?" destina-se a responder a essa pergunta.

Modelo de programação

Existem vários princípios por trás de Orleans do modelo de programação Streams:

  1. Orleans os fluxos são virtuais. Ou seja, sempre existe um fluxo. Não é explicitamente criado ou destruído, e nunca pode falhar.
  2. Os fluxos são identificados por IDs de fluxo, que são apenas nomes lógicos compostos por GUIDs e cadeias de caracteres.
  3. Orleans Os fluxos permitem dissociar a geração de dados do seu processamento, tanto no tempo como no espaço. Isso significa que o produtor e o consumidor do fluxo podem estar em servidores diferentes ou em fusos horários diferentes e resistirão a falhas.
  4. Orleans Os fluxos são leves e dinâmicos. Orleans O Streaming Runtime foi projetado para lidar com um grande número de fluxos que entram e saem em uma taxa alta.
  5. Orleans As ligações de fluxo são dinâmicas. Orleans O Streaming Runtime foi projetado para lidar com casos em que os grãos se conectam e se desconectam de fluxos a uma taxa alta.
  6. Orleans O Streaming Runtime gerencia de forma transparente o ciclo de vida do consumo de streaming. Depois que um aplicativo se inscreve em um fluxo, ele receberá os eventos do fluxo, mesmo na presença de falhas.
  7. Orleans Os fluxos funcionam uniformemente entre grãos e Orleans clientes.

Exemplo de início rápido

O Exemplo de início rápido é uma boa visão geral do fluxo de trabalho geral do uso de fluxos no aplicativo. Depois de lê-lo, você deve ler as APIs de programação de fluxos para obter uma compreensão mais profunda dos conceitos.

Provedores de fluxo

Os fluxos podem vir através de canais físicos de várias formas e formas e podem ter semânticas diferentes. Orleans O streaming foi projetado para suportar essa diversidade por meio do conceito de Stream Providers, que é um ponto de extensibilidade no sistema.

Orleans atualmente inclui várias implementações de provedores:

  • Mensagem simples (SMS), que usa chamadas diretas de grãos e nenhum sistema de armazenamento de backup,
  • Azure Queues, que usa as Filas de Armazenamento do Azure para armazenar mensagens, e
  • Azure EventHubs, que utiliza o serviço EventHubs da Azure

Para obter mais informações, consulte Provedores de fluxo.

Semântica de fluxo de dados

Semântica da Stream Subscription:

Orleans Os fluxos garantem consistência sequencial para operações de Stream Subscription. Especificamente, quando um consumidor se inscreve em um fluxo, uma vez que a Task operação de representação da assinatura foi resolvida com êxito, o consumidor verá todos os eventos que foram gerados depois que ele se inscreveu. Além disso, os fluxos rebobináveis permitem que se inscreva a partir de um ponto arbitrário no passado usando StreamSequenceToken. Para obter mais informações, consulte Orleans provedores de fluxo.

Garantias de entrega de eventos de fluxo individual:

As garantias de entrega de eventos individuais dependem dos provedores de transmissão individuais. Alguns fornecem apenas a entrega de melhor esforço no máximo uma vez (como SMS (Simple Message Streams) em versões anteriores à 7.0, posteriormente conhecidas como Orleans), enquanto outros fornecem entrega pelo menos uma vez (como Fluxos de Fila do Azure). É até possível construir um provedor de streaming que garanta a entrega exatamente uma vez.

Ordem de Entrega de Eventos:

A ordem do evento também depende de um provedor de fluxo específico. Nos fluxos de SMS, o produtor controla explicitamente a ordem dos eventos vistos pelo consumidor, controlando a forma como os publica. Os fluxos de fila do Azure não garantem a ordem FIFO, uma vez que as filas subjacentes do Azure não garantem a ordem em casos de falha. As aplicações também podem controlar a ordem de entrega do fluxo usando StreamSequenceToken.

Implementação de fluxos

A Orleans implementação do Streams fornece uma visão geral de alto nível da implementação interna.

Exemplos de código

Você pode encontrar mais exemplos de como usar APIs de streaming dentro de um grão em SampleStreamingGrain.cs.

Ver também