我們們聊聊艙壁模式

AskHarries發表於2018-06-27

什麼是艙壁模式

艙壁模式(Bulkhead)隔離了每個工作負載或服務的關鍵資源,如連線池、記憶體和CPU。
使用艙壁避免了單個工作負載(或服務)消耗掉所有資源,從而導致其他服務出現故障的場景。
這種模式主要是通過防止由一個服務引起的級聯故障來增加系統的彈性。複製程式碼

工業中使用艙壁將船舶劃分為幾個部分,以便在船體破壞的情況下,可以將船舶各個部件密封起來。

艙壁的概念在軟體開發中可以被應用在隔離資源上。

通過應用艙壁模式,我們可以保護有限的資源不被耗盡。例如,對於一個有連線數限制的資料庫例項來說,如果我們有兩種連線它的操作,我們採用可以採用兩個連線池的方式進行連線,來代替僅採用一個共享連線池的方式。由於這種客戶端與資源進行了隔離,超時或過度使用池的操作頁不會使其他操作失敗。

泰坦尼克號沉沒的主要原因之一是其艙壁設計失敗,水可以通過上面的甲板倒在艙壁的頂部,導致整個船體淹沒。

場景說明

讓不同任務請求通過自個專門的執行緒池請求到各自微服務,像艙壁一樣對資源進行隔離; 假設這麼個場景,在應用中你需要使用REST通過HTTP連線五個不同的微服務,使用一個普通的執行緒池去維持這些連線,如果五個服務中其中一個服務由於某種原因出現異常,所有的池成員都將精疲力盡的等待伺服器響應,為了最大限度地減少的影響,它始終是一個很好的做法,定製個性化服務話服務始終是一個號的做法。這可以減少某個異常影響對其他服務的影響,從而使您的應用程式其他部分繼續執行。這種模式俗稱的艙壁。
下圖描述了實施艙壁的簡單的示例場景:在左側,微服務A,用同一個連線池去請求X和Y兩個服務。如果服務X或服務的Y其中任何一個行為異常,這會影響連線池的整體行為。如果艙壁模式實現,如該圖所示的右側,即使微服務X被錯誤操作,只有池X將受到影響。微服務Y可以繼續為應用程式提供服務.

總結

艙壁模式降低依賴服務對整個系統的影響,保護有限的資源不被耗盡,增加了系統得到彈性。

我們們聊聊艙壁模式


相關文章