欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

Reactive Streams介绍

架构&设计模式 water 2768℃ 0评论

现代软件对近乎实时地处理数据的需求越来越强烈。对变化的信息的即时响应中蕴含着巨大的商业价值,而这个速度是传统的基于批处理的架构所无法比拟的。流处理是一种快速将数据转换为知识的手段,Kevin Webberintroduction to Reactive Streams一文中对此进行了解释说明。他认为适合于流处理的系统有ETL(Extract、Transform、Load)与复杂事件处理(CEP)系统,此外还有报表与分析系统。

Typesafe的负责人Webber将流描述为随着时间的流逝而不断发射的一系列元素,可能没有开始,也没有结束。相比于个数确定的数字数组(很容易计算出平均值)来说,流可能有着无穷尽的数字,这使得如何以及何时能够计算出平均值变得异常困难。这揭示出了流的一个重要方面,即在流中,并不需要处理其中的每一个元素。我们需要将流看作是不断移动、数据不断变化的集合。

Reactive Streams是一个规范,构建系统的开发者们需要使用该规范的实现。Reactive Streams的目标是增加抽象层,而不是进行底层的流处理,规范将这些问题留给了库实现来解决。

Reactive Streams规范的一个主要目标是通过异步边界来解耦系统组件。在同步世界中,每个功能或是操作都是按照顺序处理的,一个接着一个;除了第一个外,其他每一个操作都依赖于前一个操作。这种方式增加了维护成本,并且不利于构建出响应式系统。Webber认为这种设计是响应性反模式,会对系统可伸缩性与弹性造成较大的影响。为了充分利用当今多核CPU架构的优势,Webber认为我们需要一种完全不同的模型,能够实现组件间的解耦,从而实现以并行方式执行同步环境下的各种功能。

Reactive Streams规范的另一个主要目标是为压力处理定义一种模型。流处理的理想范式是将数据从发布者推送到订阅者,这样发布者就可以快速发布数据,同时通过压力处理来确保速度更快的发布者不会对速度较慢的订阅者造成过载。压力处理通过使用流控制来确保操作的稳定性并能实现优雅降级,从而提供弹性能力。

eactive Streams开源项目提供一个非堵塞的异步流处理的抗压标准。

流数据特点是“活”的,其大小是无法预先确定的,在异步系统中需要特别关注。最突出的问题是,资源消耗需要仔细控制,使得如果有一个快速的数据源不至于压倒流的目的地(如同自来水厂水压突然增大,会冲垮水管末端的居民家的水龙头)。异步对于激活计算资源的并行使用是必要的,计算资源包括:多主机或一台机器内多个CPU核心。

Reactive Streams目标是管制流数据在跨越异步边界进行流数据交换,可以认为是将元素传递到另一个线程或线程池,同时确保在接收端不是被迫缓冲任意数量的数据。换句话说,抗压是该模型重要组成部分,设置协调线程之间的队列大小是有限制的,如果不同异步模型之间的通信是同步的将削弱异步的好处。因此必须采取谨慎措施,强制完全无阻塞的反应流能在系统的各个方面异步实施。

这个规范的目标是建立一个规则,使得很多流反应框架能够遵守规则标准,这样才能顺利实现互操作,才能发挥整个流应用上的优点。

Reactive Streams是一个基于JVM的面向流的库包的标准和规范:
1. 处理潜在的无边界限制的元素
2.顺序
3.在组件之间异步传递元素
4.使用强制性的非堵塞的抗压。

RS由以下部分组成:
SPI:定义了不同实现组件之间的交互层和互操作性
API:定义 Reactive Streams用户使用的类型
技术兼容Kit(TCK):实现的标准测试。

转载请注明:学时网 » Reactive Streams介绍

喜欢 (1)or分享 (0)

您必须 登录 才能发表评论!