Orleans 流提供程序

流可以采用不同的形状和形式。 有些流可以通过直接 TCP 链接传递事件,还有些流可以通过持久队列传递事件。 不同的流类型可以使用不同的批处理策略、不同的缓存算法或不同的反压过程。 为了避免将流应用程序局限于其中的一部分行为选项,流提供程序是 Orleans 流式处理运行时的扩展点,允许用户实现任何类型的流。 此扩展点本质上类似于 Orleans 存储提供程序。

Azure 事件中心流提供程序

Azure 事件中心是一个完全托管的实时数据引入服务,每秒能够接收和处理数百万个事件。 它旨在从多个源引入高吞吐量、低延迟的数据,然后多个使用者在其中处理该数据。

事件中心通常用作更大的事件处理体系结构的基础部分,是事件管道的“前门”。 它可用于从各种源引入数据,包括社交媒体源、IoT 设备和日志文件。 事件中心的主要优势之一是能够水平地横向扩展,即使是最大的事件处理工作负载,也能满足其需求。 它还具有高可用性和容错性,并将多个数据副本分布在多个 Azure 区域以确保高可用性。

Microsoft.Orleans.Streaming.EventHubs NuGet 包包含事件中心流提供程序。

Azure 队列 (AQ) 流提供程序

Azure 队列 (AQ) 流提供程序通过 Azure 队列传递事件。 在生成者端,AQ 流提供程序将事件直接排入 Azure 队列。 在使用者端,AQ 流提供程序管理一组拉取代理,这些代理从一组 Azure 队列中拉取事件,并将这些事件传递给使用它们的应用程序代码。 可将拉取代理视为一种分布式“微服务”- 分区的、高度可用的弹性分布式组件。 拉取代理在托管应用程序 grain 的同一 silo 内部运行。 因此,无需运行单独的 Azure 辅助角色从队列中拉取事件。 拉取代理的存在、它们的管理、反压、它们之间的队列平衡以及将队列从失败的代理移交给另一个代理的任务完全由 Orleans 流式处理运行时管理,并且对使用流的应用程序代码是透明的。

Microsoft.Orleans.Streaming.AzureStorage NuGet 包包含 Azure 队列存储流提供程序。

队列适配器

通过持久队列传递事件的不同流提供程序会体现相似的行为,并受到相似实现的约束。 因此,我们提供了一个泛型可扩展 PersistentStreamProvider,它允许开发人员插入不同类型的队列,而无需从头开始编写全新的流提供程序。 PersistentStreamProvider 使用 IQueueAdapter 组件,该组件抽象掉特定的队列实现细节,并提供将事件排队和取消排队的方式。 其余的所有任务均由 PersistentStreamProvider 内部的逻辑处理。 上面提到的 Azure 队列提供程序还可实现为使用 AzureQueueAdapterPersistentStreamProvider 实例。

简单消息流提供程序

简单消息流提供程序也称为 SMS 提供程序,它利用常规 Orleans 粒度消息传递通过 TCP 传递事件。 由于 SMS 中的事件是通过不可靠的 TCP 链接传递的,因此 SMS 不保证可靠的事件传递,并且不会自动为 SMS 流重新发送失败的消息。 默认情况下,生成者的 OnNextAsync 调用将返回 Task,该对象代表流使用者的处理状态,让生成者知道使用者是否成功接收并处理了事件。 如果此任务失败,则生成者可以再次发送同一事件,从而实现应用程序级别的可靠性。 尽管流消息传递遵循“尽力而为”的原则,但 SMS 流本身是可靠的。 也就是说,订阅-发布机制执行的订阅者到生成者绑定是完全可靠的。

另请参阅

Orleans 流实现详细信息