反应流是一种规范,对于JAVA程序员来说,反应流是一种API。反应流为Java中的反应式编程提供了一个通用API。反应流API是来自Kaazing、Netflix、Pivotal、Red Hat、Twitter、Typesafe和许多其他公司的工程师合作的产物。
反应流很像JPA或JDBC,两者都是API规范,这两者都需要使用API规范的实现。就像JPA或JDBC一样,反应流为我们提供了一个API接口,我们可以编写代码,而无需担心底层实现。
反应性系统的四个关键属性:
1.响应性
如果可能,系统会及时响应。响应性是可用性和实用性的基石,但更重要的是,响应性意味着可以快速发现并有效处理问题。响应系统的重点是提供快速一致的响应时间,建立可靠的上限,以便提供一致的服务质量。这种一致的行为反过来简化了错误处理,建立了最终用户的信心,并鼓励进一步的交互。
2.有恢复能力的
系统在遇到故障时保持响应。这不仅适用于高可用性、任务关键型系统——任何没有弹性的系统在发生故障后都将失去响应。恢复能力是通过复制、控制、隔离和委派来实现的。故障包含在每个组件中,将组件彼此隔离,从而确保系统的各个部分能够在不损害整个系统的情况下发生故障并进行恢复。每个组件的恢复都委托给另一个(外部)组件,并在必要时通过复制确保高可用性,组件的客户端没有处理其故障的负担。
3.有弹力的
系统在不同的工作负载下保持响应。反应式系统可以通过增加或减少分配给这些输入的资源,对输入速率的变化作出反应。这意味着设计没有争用点或中心瓶颈,从而能够分割或复制组件并在它们之间分配输入。反应式系统通过提供相关的实时性能度量,支持预测性以及反应性缩放算法。它们以经济高效的方式在商品硬件和软件平台上实现弹性。
4.消息驱动
反应式系统依靠异步消息传递在组件之间建立边界,以确保松散耦合、隔离和位置透明。此边界还提供了将故障委派为消息的方法。采用显式消息传递可以通过塑造和监控系统中的消息队列并在必要时施加背压来实现负载管理、弹性和流量控制。位置透明的消息传递作为一种通信手段,使得跨集群或单个主机使用相同的结构和语义进行故障管理成为可能。非阻塞通信允许收件人仅在活动时使用资源,从而减少系统开销。