第 17 章 反应式编程

本章内容

  • 什么是反应式编程以及反应式宣言的原则
  • 应用级和系统级的反应式编程
  • 采用反应式流(reactive stream)以及Java 9 Flow API实现的一个例子
  • 一种广泛采用的反应式库——RxJava
  • 如何使用RxJava转换和整合多个反应式流
  • 如何使用弹珠图可视化地记录反应式流上的操作

在深入研究什么是反应式编程以及它如何工作这样的细节之前,了解一下为何这种新计算模式正变得越来越重要很有意义。几年前,大型应用也就是几十台服务器以及几个G字节数据这样的规模,几秒钟的响应时间、甚至数小时的离线维护时间都被认为是可以接受的。而现在,情况正迅速变化着,这主要基于以下三个原因。

  • 大数据——以PB计量的大数据,并且数量还在不断增加。
  • 异构环境——应用被部署到完全异构的环境中,它可能是移动设备,也可能是运行着数千个多核处理器的云端集群。
  • 使用模式——用户的期望发生了变化,现在用户期望毫秒级的响应时间,希望应用百分之百时时刻刻都在线。

这些变化意味着我们不能再以昨天的软件架构满足当今的用户需求。这种趋势已经非常明显。当前互联网中流量最大的部分是移动流量,一旦物联网(Internet of things,IoT)流量取代移动流量成为互联网流量的主流,这种情况还会进一步加剧。

反应式编程让你能以异步的方式处理、整合来自不同系统和源头的数据流,从而解决这一棘手的问题。事实上,以这种方式实现的应用可以在处理数据的同时进行反馈,让数据对用户的响应更及时。此外,反应式编程不仅可以构建单一组件或者应用,还能用于协调多个组件,将它们搭建成一个反应式系统。以同样的方式,系统工程师能依据网络的变化调整消息路由,从而保证系统在高负荷或者发生节点失效时依旧能稳定地提供服务。(请注意,虽然程序员通常认为他们的系统或者应用是由组件搭建而成,但是以这种新型混聚、松散耦合方式构建的系统中,组件很多时候就是应用。因此,这里的件和应用基本上是同义词。)

反应式应用和系统的特性及优点在反应式宣言中陈述得非常明确,下一节会详细讨论。