1. 程式人生 > 實用技巧 >響應式程式設計 --- 1介紹

響應式程式設計 --- 1介紹

 隨著系統架構的複雜,以及資料處理量級的增加,之前的軟加價購已無法滿足如今的需求。目前系統架構需要具備:即時響應性(responsive),回彈性(Resilient),彈性(Elastic)以及訊息驅動(Message Driven)。這個也是反應式宣言,有的地方叫響應式宣言,就是reactive,但是官方好像翻譯的是反應式

即時響應性:只要有可能,系統就會及時作出響應。該特性是可用性以及實用性的及時,即時響應意味著可以快速檢測到問題並有效的進行處理。即時響應系統專注於提供一致的響應式時間,確定可靠的返回上限,已提供一致的服務之鄉,可簡化處理,建立終端使用者信任並促使使用者作進一步互動

回彈性:系統出現失敗是依然保持即時響應。回彈是通過複製、遏制、隔離以及委託實現的,失敗被遏制在每個元件,與其他元件相互隔離,從而確保系統某個部分失敗不會危及整個系統,並能夠獨立恢復,每個元件的恢復都被委託給另一個元件,必要時可以通過複製來保證高可用。元件客戶端不再承擔元件失敗的處理

彈性:系統在不斷變化的工作負載下依然保持即時響應型。反應式系統可以對輸入載荷的速率變化做出反應。比如通過增加或減少被分配使用者服務的這些輸入的資源。這意味著設計上沒有爭用點和中央瓶頸,得以進行元件的分片或者複製,殯改他們之間分佈輸入。通過提供相關的實時效能指標,反應式系統支援與測試以及反應式的伸縮演算法。這些系統可以在唱過的軟體以及硬體品哪個臺實現高可用的彈性

訊息驅動:反應式系統依賴非同步的訊息傳遞,從而確保了鬆耦合,隔離,位置透明的元件之間有著明確邊界,這一邊界還提供了將失敗作為訊息委託出去的手段。使用顯示的訊息傳遞,可以通過在系統中塑造並監視訊息流佇列,並在必要時應用回壓,從而實現負載管理,彈性以及流量控制。使用位置透明的訊息傳遞作為通訊的手段,是的跨叢集或者在單個主機中使用相同的結構成分和語義來管理失敗成了可能。非阻塞的通訊是的接受者只有在活動是才消耗資源,從而減少系統開銷

什麼是背壓以及回壓

backpressure有的地方稱回壓,有的地方稱背壓嗎,只是翻譯問題,英文如下,簡單拿來用,使用者的下一步動作的速度小於輸入流的速度

Backpressure is when the progress of turning that input to output is resisted in some way. In most cases that resistance is computational speed — trouble computing the output as fast as the input comes in — so that’s by far the easiest way to look at it. But other forms of backpressure can happen too: for
example, if your software has to wait for the user to take some action.

但是webflux中稱,backpressure是標識處理這種狀態的能力或者策略,通常處理這種策略一般有以下三種

buffer:將輸入暫時儲存起來,較為常用,但是如果buffer無界,name容易在記憶體消耗過大甚至溢位。還有buffer也會使請求響應程式設計

drop:丟棄輸入,一般不單獨用,一般會配合buffer進行使用,也就是超過buffrer的大小多餘的會被丟棄

control:由消費者抑制生產者速度,這種不消耗記憶體,也不損失資料,但有時候這種場景不太現實,比如消費者是使用者點選,請求資源。

git:https://github.com/yang-shixiong/reactive