天天看點

響應式程式設計的基本概念

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

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

響應性是指一個系統應該總是能夠及時響應使用者請求,并且保持很低的延遲。

彈性是指一個系統即使在部分元件開始出現故障的情況下也應該能夠作出響應,将停機時間将至最低。

可伸縮性是指一個系統在負載增加時應該能夠根據需求增加資源以確定響應性,但同時也應該能在負載降低時減少資源,保持高效的資源使用率。

消息驅動是指在一個系統的不同部分之間傳遞消息,ledbrook認為這是響應式系統的一個必備特點。

ledbrook關注的下一個概念是響應式流,他将其描述為随着時間發出的一系列元素。他認為,從觀察者模式入手了解這個概念是個不錯的出發點。該模式包含一個發出事件的源及一個或多個等待事件的觀察者。在ledbrook看來,響應式實際上是觀察者模式加上事件源的完成通知能力、錯誤傳播能力和監聽者同僚件源通信的能力。

響應式流是一種規範,reactivex是一種常用的跨平台實作。projectreactor和akka是另外兩種實作。下面三個重要的概念是響應式流api的建構基礎:

釋出者是事件的發送方,可以向它訂閱。

訂閱者是事件訂閱方。

訂閱将釋出者和訂閱者聯系起來,使訂閱者可以向釋出者發送信号。

ledbrook最後指出,許多響應式流都是由我們熟悉的概念構成,但是至少是部分地隐藏了複雜性。它适合于高i/o的環境或者需要處理大量資料的 環境。java 8的流同響應式流類似,但他指出,java 8的流隻能推送,不能接收監聽者的信号,并且沒有像響應式流所做的那樣真正地針對i/o進行優化。

====================================分割線================================