响应式编程的基本概念
jopen 9年前
在参加了许多次谈话并阅读了大量的博文后, Peter Ledbrook 仍然未能深刻地理解 响应式编程 的含义。因此他 认为 ,响应式编程领域存在一个关键的问题,就是它之所以那么难以理解是因为所有的术语词汇以及针对这些词汇的许多不同的解释。于是,他决定搞明白这一切,并希望同其他开发人员分享他的知识。
Ledbrook是Grails的核心贡献者之一。他首先阅读了 响应式编程宣言 ,发现响应式系统具备如下特点:
- 响应性 是指一个系统应该总是能够及时响应用户请求,并且保持很低的延迟。
- 弹性 是指一个系统即使在部分组件开始出现故障的情况下也应该能够作出响应,将停机时间将至最低。
- 可伸缩性 是指一个系统在负载增加时应该能够根据需求增加资源以确保响应性,但同时也应该能在负载降低时减少资源,保持高效的资源利用率。
- 消息驱动 是指在一个系统的不同部分之间传递消息,Ledbrook认为这是响应式系统的一个必备特点。
Ledbrook关注的下一个概念是响应式流,他将其描述为随着时间发出的一系列元素。他认为,从 观察者模式 入手理解这个概念是个不错的出发点。该模式包含一个发出事件的源及一个或多个等待事件的观察者。在Ledbrook看来,响应式实际上是观察者模式加上事件源的完成通知能力、错误传播能力和监听者同事件源通信的能力。
响应式流是一种 规范 , ReactiveX 是一种常用的跨平台实现。 ProjectReactor 和 Akka 是另外两种实现。下面三个重要的概念是响应式流API的构建基础:
- 发布者 是事件的发送方,可以向它订阅。
- 订阅者 是事件订阅方。
- 订阅 将发布者和订阅者联系起来,使订阅者可以向发布者发送信号。
Ledbrook最后指出,许多响应式流都是由我们熟悉的概念构成,但是至少是部分地隐藏了复杂性。它适合于高I/O的环境或者需要处理大量数据的环境。Java 8的流同响应式流类似,但他指出,Java 8的流只能推送,不能接收监听者的信号,并且没有像响应式流所做的那样真正地针对I/O进行优化。
查看英文原文: The Basics of Being Reactive