Reactive
意思是快速响应,在各个方面都需要的快速响应,无论在程序上,编程效率,客户反馈,扩展性,错误修正等等各方面
http://www.reactivemanifesto.org/
如何做到快速响应?
以下总结了几个关键要点,看看你们的应用是否:
1. 基于事件驱动的编程方式 Event-Driven
事件驱动,本身就是一种异步编程的方式,异步的好处不外乎就是在长时间的处理中不用在等待和导致卡死的状态。
2. 无共享状态 Share Nothing
任何共享状态(Web Session、会话等)都涉及到多线程的资源争夺,导致瓶颈和扩展性不佳。
试回顾一下J2EE年代做Clustering是多么麻烦而且昂贵的呢(Servlet的Session有状态,Stateful-Session-Bean又是有状态)。
不存在共享状态,单机层面可以说在多线程下的线性安全问题几乎不存在了,也同时代表服务器可以快速和自由添加,而达到扩容的目的。
3. 通过异步消息传递 Async Message Passing
一般情况,在设计系统之间的通讯的时候,通常就是用WebServices/RESTful等技术,然后都是直接调用,而没有太多考虑使用看来比较复杂的异步或者是消息队列。事实上如果想像一个消息就是一次调用,在队列中是可视化、可量度、可分布的、甚至可修正的。
4. 需要控制高峰流量
资源永远是不够的,当系统出现压力,如果让客户等待某个服务(但不知道要等待多久),不如很爽快的跟他说系统在忙,同时系统的请求压力不会因此而累积。概念类似Fail Fast。