本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/12/reactive-streams-introduction
现代软件对近乎实时地处理数据的需求越来越强烈。对变化的信息的即时响应中蕴含着巨大的商业价值,而这个速度是传统的基于批处理的架构所无法比拟的。流处理是一种快速将数据转换为知识的手段,Kevin Webber在introduction to Reactive Streams一文中对此进行了解释说明。他认为适合于流处理的系统有ETL(Extract、Transform、Load)与复杂事件处理(CEP)系统,此外还有报表与分析系统。
Typesafe的负责人Webber将流描述为随着时间的流逝而不断发射的一系列元素,可能没有开始,也没有结束。相比于个数确定的数字数组(很容易计算出平均值)来说,流可能有着无穷尽的数字,这使得如何以及何时能够计算出平均值变得异常困难。这揭示出了流的一个重要方面,即在流中,并不需要处理其中的每一个元素。我们需要将流看作是不断移动、数据不断变化的集合。
Reactive Streams是一个规范,构建系统的开发者们需要使用该规范的实现。Reactive Streams的目标是增加抽象层,而不是进行底层的流处理,规范将这些问题留给了库实现来解决。
Reactive Streams规范的一个主要目标是通过异步边界来解耦系统组件。在同步世界中,每个功能或是操作都是按照顺序处理的,一个接着一个;除了第一个外,其他每一个操作都依赖于前一个操作。这种方式增加了维护成本,并且不利于构建出响应式系统。Webber认为这种设计是响应性反模式,会对系统可伸缩性与弹性造成较大的影响。为了充分利用当今多核CPU架构的优势,Webber认为我们需要一种完全不同的模型,能够实现组件间的解耦,从而实现以并行方式执行同步环境下的各种功能。
Reactive Streams规范的另一个主要目标是为压力处理定义一种模型。流处理的理想范式是将数据从发布者推送到订阅者,这样发布者就可以快速发布数据,同时通过压力处理来确保速度更快的发布者不会对速度较慢的订阅者造成过载。压力处理通过使用流控制来确保操作的稳定性并能实现优雅降级,从而提供弹性能力。
Typesafe高级总监Jamie Allen在最近的一篇博文中从异步、非阻塞与并发视角描述了洗碗动作,并且将其与Reactive Streams处理不断增加的负载的方式进行了比较。
查看英文原文:Introducing Reactive Streams