go reactive宣言
这段时间,软件领域暗流涌动:
中间件江湖新来了一批悍将,在互联网领域把EE打得节节败退。Finagle(Twitter)异步化RPC,Akka(TypeSafe)融入管理思路的Actor模型,RxJava(Netflix)观察模式推送多个结果,Vertx(Eclipse)吸取Nodejs精华。它们身着黑衣,上书大大的"Reactive"。并且结党签署投名状: http://www.reactivemanifesto.org/ ---@寻找一个苹果
为什么需要go reactive?
近年来,应用需求已经发生了巨大的变化,仅在几年前,一个大的应用程序就有数万台服务器,秒级响应时间,小时级别离线维护和千兆字节级别的数据。今天的应用程序部署从移动设备到基于云计算的运行在数千个多核处理器上的集群。用户期望毫秒甚至微秒的响应时间和100%的正常运行时间。数据量打到PB级的需求日益增加。
创新的互联网公司如谷歌或Twitter的应用架构设计已经开始推广在很多行业,金融和电信是率先采取新技术来满足新需求的行业。
新的需求要求新的技术。以前的解决方案都强调了服务器或容器的可管理性。可伸缩性性能提升是通过购买较大的服务器以及多线程并发处理来实现。增加新的服务器也同时引入了新的复杂性,这是低效且昂贵的专有解决方案。
但现在已经有一种新的架构让开发商能满足当今的需求构建新的应用程序,。我们称这些应用是reactive应用(反应的应用)。这种结构允许开发人员构建事件驱动(event-driven),可扩展性,弹性的反应系统:提供高度敏感的实时的用户体验感觉,可伸缩性和弹性的应用程序栈的支持,随时可以部署在多核和云计算架构。
什么是reactive
Merriam-Webster 定义reactive是“随时响应刺激”的反应,也就是说,它的组件是“活跃”,随时准备接收事件。这个定义抓住了reactive本质的用。
聚焦在系统上有如下定义:
1. react to events 对事件立即反应
事件驱动的自然特性使的反应能够立即加载实施,通过避免对共享资源的争用实现可扩展性。
2.react to failure 对失败立即反应
在任何级别都可以建立一个能够实现失败恢复的弹性系统。
3.react to users 对用户立即反应
无论任何负载,值得荣耀的响应时间。
这些特征跨越了标准的分层应用程序体系结构,并不局限于某个分层之中,而是适用于在整个技术堆栈。