反應流是一種規范,對于JAVA程序員來說,反應流是一種API。反應流為Java中的反應式編程提供了一個通用API。反應流API是來自Kaazing、Netflix、Pivotal、Red Hat、Twitter、Typesafe和許多其他公司的工程師合作的產物。
反應流很像JPA或JDBC,兩者都是API規范,這兩者都需要使用API規范的實現。就像JPA或JDBC一樣,反應流為我們提供了一個API接口,我們可以編寫代碼,而無需擔心底層實現。
反應性系統的四個關鍵屬性:
1.響應性
如果可能,系統會及時響應。響應性是可用性和實用性的基石,但更重要的是,響應性意味著可以快速發現并有效處理問題。響應系統的重點是提供快速一致的響應時間,建立可靠的上限,以便提供一致的服務質量。這種一致的行為反過來簡化了錯誤處理,建立了最終用戶的信心,并鼓勵進一步的交互。
2.有恢復能力的
系統在遇到故障時保持響應。這不僅適用于高可用性、任務關鍵型系統——任何沒有彈性的系統在發生故障后都將失去響應。恢復能力是通過復制、控制、隔離和委派來實現的。故障包含在每個組件中,將組件彼此隔離,從而確保系統的各個部分能夠在不損害整個系統的情況下發生故障并進行恢復。每個組件的恢復都委托給另一個(外部)組件,并在必要時通過復制確保高可用性,組件的客戶端沒有處理其故障的負擔。
3.有彈力的
系統在不同的工作負載下保持響應。反應式系統可以通過增加或減少分配給這些輸入的資源,對輸入速率的變化作出反應。這意味著設計沒有爭用點或中心瓶頸,從而能夠分割或復制組件并在它們之間分配輸入。反應式系統通過提供相關的實時性能度量,支持預測性以及反應性縮放算法。它們以經濟高效的方式在商品硬件和軟件平臺上實現彈性。
4.消息驅動
反應式系統依靠異步消息傳遞在組件之間建立邊界,以確保松散耦合、隔離和位置透明。此邊界還提供了將故障委派為消息的方法。采用顯式消息傳遞可以通過塑造和監控系統中的消息隊列并在必要時施加背壓來實現負載管理、彈性和流量控制。位置透明的消息傳遞作為一種通信手段,使得跨集群或單個主機使用相同的結構和語義進行故障管理成為可能。非阻塞通信允許收件人僅在活動時使用資源,從而減少系統開銷。