目錄
概述
根據百度百科的詞條描述,失敗轉移(FailOver)是指一種備份操作模式,當系統的主要組件由於失效或預定關機時間的原因而無法工作時,這種模式的系統組件功能被轉嫁到二級系統組件中。
簡單來講就是當分佈式系統中的某個組件出現問題,能夠立馬切換到新的節點繼續進行工作,而不會直接導致整個系統宕機。
具體措施
在真實的環境中我們可以通過幾個方面來未雨綢繆,防範系統可能出現的故障,降低系統風險
存儲層
不管系統存儲使用的是關係型數據庫(MySQL、Orcale)或非關係型數據庫(Redis、MongoDB、Hbase),都可以採用備庫的方式進行解決,當主庫出現問題,可以立即切換到從庫,保證業務的連續型。
中間件層
一般系統中使用的中間件,都是以集羣的方式存在,當系統的一個節點出現問題,通過負載均衡可以立即切換節點,舉幾個例子:
- 一般申請緩存tair,可以申請兩個機房,防止某個機房出現問題
- 當zookeeper的master節點掛掉,系統可以重新選取主節點
服務器
假設某應用的集羣服務器是20臺,當某臺服務器出現問題(比如內存泄漏),會立即被踢出,保證整個集羣服務的正確性。做的好的話,集羣可以有自愈功能,當某臺機器下線,會自動上線一臺服務。
另一方面,某個應用的服務器不會部署到一個機房,會零散的分佈在幾個機房中,這樣可以提高系統的容災,降低風險。
編碼方面
假設一個系統依賴了20個其他的應用,我們會對每一個業務場景進行分析,每一個應用是強依賴或者是弱依賴,對弱依賴的應用,我們要做好防護,設置好超時時間,並做好兜底策略,假設下游系統宕機,從代碼層面會將業務功能進行轉移。
PS:以上是我目前工作經驗的總結,歡迎各位大佬補充並指正。