常見的六種容錯機制:Fail-Over、Fail-Fast、Fail-Back、Fail-Safe,Forking 和 Broadcast


1、Fail-Over:故障轉移

Fail-Over 意思是“故障轉移,失敗自動切換”,是一種備份操作模式。

它的主要思路是:主要組件出現異常時,將其功能轉移到具有同樣功能的備份組件上。

要點在於有主有備,且主發生故障時,可將備切換為主。比如 HDFS 的雙 NameNode,當 Active NameNode 出現故障時,可以啟用 Standby NameNode 來繼續提供服務。

【最佳實踐】

通常用於讀操作;
不足:重試會帶來更長的延遲。

2、Fail-Fast:快速失敗

快速識別,就是只發起一次調用,失敗后立即報錯。

這用來盡可能早地發現系統中的錯誤,使系統能夠按照事先設定好的錯誤流程執行,也就是“fault-tolerant(錯誤容忍)”。

以 Java 集合(Collection)的快速失敗為例,當多個線程同時操作同一個集合中的元素時,就可能發生 Fail-Fast 事件。

再具體點:當線程 A 通過迭代器遍歷某集合的時候,其他線程剛好修改了該集合中的元素,這時線程 A 還在訪問此集合,就會拋出 ConcurrentModificationException 異常,產生 Fail-Fast 事件。

這里的並發修改異常,就是 發現錯誤時執行設定好的錯誤。

【最佳實踐】

通常用於非冪等性的寫操作;
不足:如果有服務正在重啟,可能會出現調用失敗。

3、Fail-Back:失效自動恢復

Fail-Back,就是在故障轉移(Fail-Over)之后,發生故障的服務/機器 能夠自動恢復。

比如:在后台記錄失敗請求,定時重發;

又如:在多台服務器互聯的網絡中,如果要維修某台服務器,需要把服務(或網絡資源)暫時重定向到備用系統。

維修結束后,再將服務(或網絡資源)恢復為 由原來維修的主機提供 的過程,稱為自動恢復。

【最佳實踐】

通常用於消息通知操作;
不足:不可靠,重啟會丟失;
可用於生產環境注冊(Registry)。

4、Fail-Safe:失效安全

出現異常時,直接忽略。可以認為,即使發生了故障,也不會對系統/服務造成傷害,或盡量減少傷害。

比如:紅綠燈 - Traffic light 中,對紅綠燈的“沖突監測”的示例:

如果沖突監控器檢測到錯誤或沖突的信號時,交通信號燈將進入閃爍模式。

該信號可能會向主要道路顯示呈琥珀色閃爍,向人行道路呈紅色閃爍,或在所有方向上呈紅色閃爍,也可以在交通不暢的白天使用閃光操作 —— 而不是全部顯示為綠燈。

【最佳實踐】

通常用於寫入審計日志等操作;
可用於生產環境的監控(Monitor)。

5、Forking:並行調用多個服務

並行調用多個服務,只要一個成功即返回成功的結果。

比如:Dubbo 的 Forking 集群模式,需要設置最大並行數。

【最佳實踐】

通常用於實時性要求較高的讀操作;
不足:會浪費更多服務資源。

6、Broadcast:廣播調用

廣播調用所有服務,逐個調用,任意一個服務出錯,則此次調用失敗。

比如:Dubbo 的 Broadcast 集群模式。

【最佳實踐】

通常用於更新提供方的本地狀態;
不足:速度慢,任意一個服務出錯將導致整個調用失敗。


參考資料

集群容錯概念
常見容錯機制:failover、failfast、failback、failsafe


版權聲明

感謝閱讀,公眾號 「瘦風的南牆」 ,手機端閱讀更佳,還有其他福利和心得輸出,歡迎掃碼關注🤝

本文系轉載,並在原文的基礎上做了一定的補充和修改。如有侵權,請原作者聯系博主,定當立即刪除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM