Compartir a través de


Streaming con Orleans

Orleans streaming es una característica del Orleans marco que permite a los desarrolladores escribir aplicaciones reactivas que operan en una secuencia de eventos de forma estructurada. Orleans streaming proporciona un conjunto de abstracciones y APIs que hacen que pensar y trabajar con flujos sea más sencillo y sólido. Una secuencia es una entidad lógica que siempre existe y nunca puede producir un error. Los flujos se identifican mediante su StreamId. Los flujos permiten desacoplar la generación de datos de su procesamiento, tanto en el tiempo como en el espacio. Las secuencias funcionan de manera uniforme con granos y Orleans clientes, y pueden ser compatibles y portátiles con una amplia gama de tecnologías de colas existentes, como Event Hubs, ServiceBus, Azure Queues y Apache Kafka. Orleans el streaming también admite enlaces dinámicos de flujo, una gestión transparente del ciclo de vida de consumo de flujos y proveedores de flujos extensibles.

Orleans v.1.0.0 agregó compatibilidad con extensiones de streaming al modelo de programación. Las extensiones de streaming proporcionan un conjunto de abstracciones y API que hacen que pensar y trabajar con secuencias sea más sencilla y sólida. Las extensiones de streaming permiten a los desarrolladores escribir aplicaciones reactivas que operan en una secuencia de eventos de forma estructurada. El modelo de extensibilidad de los proveedores de flujos hace que el modelo de programación sea compatible con y sea portátil en una amplia gama de tecnologías de puesta en cola existentes, como Event Hubs, ServiceBus, Azure Queues y Apache Kafka. No es necesario escribir código especial ni ejecutar procesos dedicados para interactuar con estas colas.

¿Por qué debo preocuparme?

Si ya conoce todo el procesamiento de flujos y está familiarizado con tecnologías como Event Hubs, Kafka, Azure Stream Analytics, Apache Storm, Apache Spark Streaming y Extensiones reactivas (Rx) en .NET, puede que le pregunte por qué debe preocuparse. ¿Por qué necesitamos otro sistema de procesamiento de flujos y cómo están relacionados los actores con las secuencias?"Por qué Orleans ¿Secuencias?" está pensado para responder a esa pregunta.

Modelo de programación

Hay varios principios detrás del Orleans Modelo de Programación de Streams:

  1. Orleans las secuencias son virtuales. Es decir, siempre existe un flujo. No se crea ni se destruye explícitamente, y nunca puede fallar.
  2. Las secuencias se identifican mediante identificadores de secuencia, que son solo nombres lógicos formados por GUID y cadenas.
  3. Orleans Los flujos permiten desacoplar la generación de datos de su procesamiento, tanto en el tiempo como en el espacio. Esto significa que el productor de secuencias y el consumidor de secuencias pueden estar en servidores diferentes o en distintas zonas horarias y resistirán errores.
  4. Orleans las secuencias son ligeras y dinámicas. Orleans El entorno de ejecución de streaming está diseñado para controlar un gran número de secuencias que vienen y van a una velocidad alta.
  5. Orleans Los enlaces de flujo son dinámicos. Orleans El entorno de ejecución para el streaming está diseñado para manejar los casos en los que los granos se conectan y se desconectan de los flujos a una alta velocidad.
  6. Orleans Streaming Runtime administra de forma transparente el ciclo de vida del consumo de flujos. Una vez que una aplicación se suscribe a una secuencia, recibirá los eventos de la secuencia, incluso en presencia de errores.
  7. Orleans los flujos funcionan uniformemente entre granos y Orleans clientes.

Ejemplo de inicio rápido

El ejemplo de inicio rápido es una buena introducción rápida del flujo de trabajo general del uso de flujos en la aplicación. Después de leerlo, debe leer las API de Programación de Flujos para comprender mejor los conceptos.

Proveedores de transmisión

Las secuencias pueden venir a través de canales físicos de varias formas y formas y pueden tener una semántica diferente. Orleans El streaming está diseñado para admitir esta diversidad a través del concepto de Proveedores de Streams, que es un punto de extensibilidad en el sistema.

Orleans proporciona varias implementaciones del proveedor de flujos:

Orleans actualmente incluye varias implementaciones de proveedor:

  • Mensaje simple (SMS), que utiliza llamadas directas al núcleo y no emplea un sistema de almacenamiento de respaldo,
  • Colas de Azure, que usa colas de almacenamiento de Azure para almacenar mensajes y
  • Azure EventHubs, que usa Azure EventHubs

Para obtener más información, consulte Proveedores de flujos.

Semántica de flujos

Semántica de suscripción de transmisión:

Orleans Las secuencias garantizan la coherencia secuencial para las operaciones de suscripción de Stream. En concreto, cuando un consumidor se suscribe a una secuencia, una vez que se resolvió correctamente la Task operación de suscripción, el consumidor verá todos los eventos que se generaron después de suscribirse. Además, las secuencias rebobinables permiten suscribirse desde un momento arbitrario en el pasado usando StreamSequenceToken. Para obtener más información, vea Orleans proveedores de transmisiones.

Garantías de entrega de eventos de transmisión individuales:

Las garantías de entrega de eventos individuales dependen de proveedores de flujos individuales. Algunos solo proporcionan entrega en el mejor de los casos una vez (por ejemplo, Secuencias de Mensajes Simples (SMS) en las versiones de Orleans antes de la 7.0, conocidas posteriormente como Canal de Difusión), mientras que otros proporcionan entrega al menos una vez (como Flujos de Cola de Azure). Incluso es posible crear un proveedor de streaming que garantice la entrega exactamente una vez.

Pedido de entrega de eventos:

El orden de eventos también depende de un proveedor de flujos determinado. En las secuencias de SMS, el productor controla explícitamente el orden de los eventos vistos por el consumidor mediante el control de la forma en que los publica. Los flujos de colas de Azure no garantizan el orden FIFO, ya que las colas de Azure subyacentes no aseguran el orden en situaciones de fallo. Las aplicaciones también pueden controlar su ordenación de entrega de flujos mediante StreamSequenceToken.

Implementación de flujos

La Orleans implementación de secuencias proporciona un resumen general de alto nivel de la implementación interna.

Ejemplos de código

Puedes encontrar más ejemplos de cómo usar las APIs de streaming en un grain en SampleStreamingGrain.cs.

Consulte también