google Ubuntu 程序员 编程 微软 开源 云计算 centos java nginx Android apache linux wordpress Windows shell Firefox Python mysql php

響應式編程的基本概念

在參加了許多次談話並閱讀了大量的博文後, Peter Ledbrook 仍然未能深刻地理解 響應式編程 的含義。因此他 認為 ,響應式編程領域存在一個關鍵的問題,就是它之所以那麽難以理解是因為所有的術語詞匯以及針對這些詞匯的許多不同的解釋。於是,他決定搞明白這一切,並希望同其他開發人員分享他的知識。

Ledbrook是Grails的核心貢獻者之一。他首先閱讀了 響應式編程宣言 ,發現響應式系統具備如下特點:

響應性 是指一個系統應該總是能夠及時響應用戶請求,並且保持很低的延遲。
彈性 是指一個系統即使在部分組件開始出現故障的情況下也應該能夠作出響應,將停機時間將至最低。
可伸縮性 是指一個系統在負載增加時應該能夠根據需求增加資源以確保響應性,但同時也應該能在負載降低時減少資源,保持高效的資源利用率。
消息驅動 是指在一個系統的不同部分之間傳遞消息,Ledbrook認為這是響應式系統的一個必備特點。
Ledbrook關註的下一個概念是響應式流,他將其描述為隨著時間發出的一系列元素。他認為,從 觀察者模式 入手理解這個概念是個不錯的出發點。該模式包含一個發出事件的源及一個或多個等待事件的觀察者。在Ledbrook看來,響應式實際上是觀察者模式加上事件源的完成通知能力、錯誤傳播能力和監聽者同事件源通信的能力。

響應式流是一種 規範 , ReactiveX 是一種常用的跨平臺實現。 ProjectReactor 和 Akka 是另外兩種實現。下面三個重要的概念是響應式流API的構建基礎:

發布者 是事件的發送方,可以向它訂閱。
訂閱者 是事件訂閱方。
訂閱 將發布者和訂閱者聯系起來,使訂閱者可以向發布者發送信號。
Ledbrook最後指出,許多響應式流都是由我們熟悉的概念構成,但是至少是部分地隱藏了復雜性。它適合於高I/O的環境或者需要處理大量數據的環境。JAVA 8的流同響應式流類似,但他指出,Java 8的流只能推送,不能接收監聽者的信號,並且沒有像響應式流所做的那樣真正地針對I/O進行優化。

延伸阅读

评论