Compartilhar via


Transmissão com Orleans

Orleans streaming é um recurso do Orleans framework que permite que desenvolvedores escrevam aplicativos reativos que operam em uma sequência de eventos de maneira estruturada. Orleans O streaming fornece um conjunto de abstrações e APIs que tornam a ideia e o trabalho com fluxos mais simples e robustos. Um fluxo é uma entidade lógica que sempre existe e nunca pode falhar. Os fluxos são identificados por seus StreamId. Os fluxos permitem que a geração de dados seja dissociada de seu processamento, tanto no tempo quanto no espaço. Os fluxos funcionam uniformemente entre grãos de processamento e clientes e podem ser compatíveis e portáteis em uma ampla gama de tecnologias de fila, como Hubs de Eventos, ServiceBus, Filas do Azure e Apache Kafka. Orleans O streaming também dá suporte a associações dinâmicas de fluxo, gerenciamento transparente do ciclo de vida de consumo de fluxo e provedores de fluxo extensíveis.

Orleans A v.1.0.0 adicionou suporte para extensões de streaming ao modelo de programação. As extensões de streaming fornecem um conjunto de abstrações e APIs que tornam a ideia e o trabalho 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 maneira estruturada. O modelo de extensibilidade de provedores de fluxo torna o modelo de programação compatível e portátil em uma ampla gama de tecnologias de fila existentes, como Hubs de Eventos, ServiceBus, Filas do Azure e Apache Kafka. Não é necessário escrever código especial ou executar processos dedicados para interagir com essas filas.

Por que eu deveria me importar?

Se você já sabe tudo sobre o Processamento de Fluxo e está familiarizado com tecnologias como Hubs de Eventos, Kafka, Azure Stream Analytics, Apache Storm, Streaming do Apache Spark e Extensões Reativas (Rx) no .NET, talvez você esteja perguntando por que você deve se importar. Por que precisamos de mais um sistema de processamento de fluxos e como Atores estão relacionados a Streams?"Por que Orleans Fluxos?" destina-se a responder a essa pergunta.

Modelo de programação

Há vários princípios por trás Orleans do Modelo de Programação do Streams:

  1. Orleans os fluxos são virtuais. Ou seja, um fluxo sempre existe. Ele não é criado ou destruído explicitamente 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 desacoplar a geração de dados de seu processamento, tanto no tempo quanto no espaço. Isso significa que o produtor de fluxo e o consumidor de fluxo podem estar em servidores diferentes ou em fusos horários diferentes e suportarão 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 vêm e vão a uma taxa alta.
  5. Orleans as associações de fluxo são dinâmicas. Orleans O Streaming Runtime foi projetado para lidar com casos em que os componentes (grains) se conectam e se desconectam de fluxos de dados em alta frequência.
  6. Orleans O Streaming Runtime gerencia de forma transparente o ciclo de vida do consumo de fluxo. Depois que um aplicativo assinar 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 rápida do fluxo de trabalho geral do uso de fluxos no aplicativo. Depois de lê-lo, você deve ler as APIs de Programação do Streams para obter uma compreensão mais profunda dos conceitos.

Provedores de streaming

Os fluxos podem vir por meio de canais físicos de várias formas e podem ter diferentes significados. Orleans O streaming foi projetado para dar suporte a essa diversidade por meio do conceito de Provedores de Fluxo, que é um ponto de extensibilidade no sistema.

Orleans fornece várias implementações do provedor de streaming:

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

  • Mensagem Simples (SMS), que usa chamadas diretas e nenhum sistema de armazenamento de cópia de segurança,
  • Filas do Azure, que usa filas de armazenamento do Azure para armazenar mensagens e
  • Azure EventHubs, que usa Azure EventHubs

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

Semântica de Fluxo

Semântica de Assinatura do Stream:

Orleans Os fluxos garantem consistência sequencial para operações de assinatura de fluxo. Especificamente, quando um consumidor assina um fluxo, uma vez que a Task representação da operação de assinatura foi resolvida com êxito, o consumidor verá todos os eventos que foram gerados após sua assinatura. Além disso, os fluxos rebobináveis permitem que você assine de um ponto arbitrário no tempo no passado usando StreamSequenceToken. Para obter mais informações, consulte Orleans provedores de fluxo.

Garantias de entrega de eventos individuais de streaming:

As garantias de entrega de eventos individuais dependem de provedores de transmissão específicos. Alguns fornecem apenas entrega no máximo uma vez (como Fluxos de Mensagens Simples (SMS) em versões anteriores Orleans à 7.0, posteriormente conhecidas como Canal de Transmissão), enquanto outros fornecem entrega pelo menos uma vez (como Azure Queue Streams). É até possível criar 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. Em fluxos de SMS, o produtor controla explicitamente a ordem dos eventos vistos pelo consumidor controlando a maneira como os publica. Os fluxos de Fila do Azure não garantem a ordem FIFO, pois as Filas subjacentes do Azure não garantem a ordem em casos de falha. Os aplicativos também podem controlar o ordenamento de entrega da transmissão usando StreamSequenceToken.

Implementação de fluxos

A Orleans Implementação de Fluxos 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.

Consulte também