《分佈式技術原理與算法解析》學習筆記Day27

故障隔離

什麼是故障隔離?

故障隔離,就是採用一定策略,以實現當某個模塊發生故障時,不會影響其他模塊繼續提供服務,以保證整個系統的可用性,它可以避免分佈式系統出現大規模的故障,甚至是癱瘓,降低損失。

分佈式故障隔離策略

分佈式系統中的故障策略有很多,基本可以分爲兩個維度:

  1. 以功能模塊爲粒度進行隔離,各個功能/服務模塊之間松耦合,一個功能/服務模塊出現故障,不會影響其他功能/服務模塊,根據功能模塊或者服務由線程執行還是進程執行,可以分爲線程級隔離和進程級隔離。
  2. 通過資源隔離來實現,系統中各個模塊擁有自己獨立的資源,不會發生資源爭搶,從而提升系統性能,根據資源所屬粒度,可以劃分成進程級隔離、虛擬機隔離、服務器隔離和機房隔離。

線程級隔離

線程級故障隔離,是指使用不同的線程池處理不同的請求任務。當某種請求任務出現故障時,負責其他請求任務的線程池不會受到影響,即會繼續提供服務,從而實現故障隔離。

線程級的故障隔離策略,在生產環境中較爲常用,尤其是針對單體應用。系統再實現線程級隔離後,線程間通信通常使用共享變量來實現,它是一個進程中的全局變量,在進程的各個縣城間可以同時使用。

進程級隔離

分佈式系統按照功能分爲不同的進程,分不到相同或者不同的機器中。如果系統的進程分不到不同的機器,從資源的角度來看,也可以算作主機級別的故障隔離。

系統實現進程級隔離後,進程間的協同必須通過進程間通信來實現。進程間通信可以分爲兩類:

  1. 如果進程在同一個機器上,可以通過管道、消息隊列、信號量、共享內存等方式。
  2. 如果進程分佈在不同機器上,可以通過遠程調用來實現。

資源隔離

資源隔離就是將分佈式系統的所有資源分成幾個部分,每部分資源負責一個模塊,這樣系統各個模塊就不會爭搶資源,即資源之間相互不干擾。這種方式不僅可以提高硬件資源利用率,也便於系統的維護和管理,大幅提升系統性能。

容器是微服務架構的基礎,它本質上是操作系統的一個進程,但是與普通進程有以下區別:

  1. 普通進程有很大的計算或者內存需求時,可能會佔滿物理機上的所有CPU、內存資源,導致其他進程沒有資源可用。
  2. 容器可以實現資源限制,讓每個容器佔用的資源都有一個上限,這個上限值限定了該容器的處理能力,一個容器使用的資源不會影響到其他容器的資源,從而避免資源爭搶,提高性能。

從資源隔離的角度看,還可以有更多故障隔離策略,包括虛擬機隔離、集羣隔離、機房隔離等,這些策略會跨集羣、跨地域。

下面是關於各種故障隔離策略的詳細比較。

用戶級別故障隔離

用戶級別故障隔離是指將不同用戶分開,當系統出現故障時,隻影響部分用戶,而不是全體用戶。

常用的用戶級別故障隔離策略包括數據分片、負載均衡等。

  • 數據分片可以將不同用戶的數據存儲到不同的數據庫,即一個數據庫只存儲部分用戶的信息,這樣當某個數據庫出現故障時,僅影響該故障數據庫存儲的用戶,不會影響其他用戶。
  • 當處理請求的某個服務器出現故障時,負載均衡轉發請求時,只會影響該故障服務器負責的用戶請求,不會影響其他服務器正常提供服務。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章