淺談分佈式系統FailOver

目錄

 

概述

具體措施

存儲層

中間件層

服務器

編碼方面


概述

根據百度百科的詞條描述,失敗轉移(FailOver)是指一種備份操作模式,當系統的主要組件由於失效或預定關機時間的原因而無法工作時,這種模式的系統組件功能被轉嫁到二級系統組件中。

簡單來講就是當分佈式系統中的某個組件出現問題,能夠立馬切換到新的節點繼續進行工作,而不會直接導致整個系統宕機。

具體措施

在真實的環境中我們可以通過幾個方面來未雨綢繆,防範系統可能出現的故障,降低系統風險

存儲層

不管系統存儲使用的是關係型數據庫(MySQL、Orcale)或非關係型數據庫(Redis、MongoDB、Hbase),都可以採用備庫的方式進行解決,當主庫出現問題,可以立即切換到從庫,保證業務的連續型。

中間件層

一般系統中使用的中間件,都是以集羣的方式存在,當系統的一個節點出現問題,通過負載均衡可以立即切換節點,舉幾個例子:

  • 一般申請緩存tair,可以申請兩個機房,防止某個機房出現問題
  • 當zookeeper的master節點掛掉,系統可以重新選取主節點

服務器

假設某應用的集羣服務器是20臺,當某臺服務器出現問題(比如內存泄漏),會立即被踢出,保證整個集羣服務的正確性。做的好的話,集羣可以有自愈功能,當某臺機器下線,會自動上線一臺服務。

另一方面,某個應用的服務器不會部署到一個機房,會零散的分佈在幾個機房中,這樣可以提高系統的容災,降低風險。

編碼方面

假設一個系統依賴了20個其他的應用,我們會對每一個業務場景進行分析,每一個應用是強依賴或者是弱依賴,對弱依賴的應用,我們要做好防護,設置好超時時間,並做好兜底策略,假設下游系統宕機,從代碼層面會將業務功能進行轉移。

PS:以上是我目前工作經驗的總結,歡迎各位大佬補充並指正。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章