大数据时代的软件架构范式:Reactive 架构及 Akka 实践
本文原载于《程序员》杂志 2015 2A 期
钟翔
近一两年来,Reactive 突然成为分布式系统设计领域的热词,在 2013 年,业内发布了 Reactive
宣言,到 2014 年,又 第一次出现了以 Reactive 为主题的行业会议 Reactconf。那什么是 Reactive,
Reactive 又能解决什么问题?本文希望能抛砖引玉,引起读者一些思考。
Reactive 架构要解决什么问题
Reactive 要解决的问题是分布式系统设计中的难点问题,包括:
1. 如何处理各种各样的错误,比如硬件错误、软件错误、网络错误、硬盘错误、内存错误
等。错误交给谁处理、怎样处理、怎样交出去、要不要恢复、如何恢复这些问题都很复
杂。
2. 软件耦合过紧导致维护复杂。比如要升级一个公用组件,牵一发而动全身。
3. 编程复杂。多线程编程中用锁来保护共享数据,分布式编程中的用事务来实现并发读写,
这两个都非常复杂。
4. 性能调优复杂。我们通常很习惯过程式的编程,但调用链上可能有各种阻塞运算比如 IO
等,把它们绑在一个线程栈上是不合适的。而要做优化需要修改大量代码。
这些难点并不直接和业务逻辑相关,但却占用了开发人员大量的时间。Reactive 架构就想解
决这些难点,把开发人员从这些业务无关的编程工作中解放出来。Reactive 架构既是一个方
法论,又是一个工具集,能够系统性的化解这些复杂性。
什么是 Reactive 架构
Reactive 架构是以消息驱动为核心的架构。实现 Reactive 架构的应用是由许许多多的微型服
务编织而成。每个微型服务粒度很小,只做一件简单的事情;微型服务间通过异步的消息发
送驱动对方工作,一起组合实现应用所需的功能。
Reactive 架构极像我们人类社会的架构,每个人独立承担自己的工作,相互间通过电子邮件
等消息通道来驱动对方工作,实现协同合作。而且这个系统容错性良好,一方面,每个人都
可以失败,地球不因某一个人就不转;另一方面,地球上每一个人都在运转,几十亿人分布
式工作,忙碌而和谐。人类社会也许是已知的最大的分布式系统。
2013 年,Akka 的发明人 Jonas Bonér 等发布了 Reactive 宣言
,从定义上明确了 Reactive 架
构必备的四个属性:
Message driven: 消息驱动。
Reactive 宣言 http://www.reactivemanifesto.org/