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 集群模式。
【最佳實踐】
通常用於更新提供方的本地狀態;
不足:速度慢,任意一個服務出錯將導致整個調用失敗。
參考資料
版權聲明
感謝閱讀,公眾號 「瘦風的南牆」 ,手機端閱讀更佳,還有其他福利和心得輸出,歡迎掃碼關注🤝
本文系轉載,並在原文的基礎上做了一定的補充和修改。如有侵權,請原作者聯系博主,定當立即刪除。