構建容錯軟件系統的藝術
譯文譯者 | 劉汪洋
審校 | 重樓
現在,我們生活在由軟件系統推動的世界中。這些系統深入到我們日常生活的各個方面,其連續、可靠的性能不再是奢侈,而是必需?,F在,企業比以往任何時候都更需要保證他們的系統可用、可靠,并具有彈性。這種需求由滿足客戶期待以及戰勝競爭對手的需求所推動。那么,要達到這個目標的關鍵是什么呢?答案就是建立具有容錯性的軟件系統。
容錯系統的重要性在于它們能夠防止長時間的停機和收入損失。設想一下,一個金融機構嚴重依賴某交易平臺來執行交易,它無法承受市場交易時間內平臺的停機風險。如果平臺真的不可用了,這家公司可能面臨數百萬的收入損失,以及隨之而來的聲譽損失。但是,通過執行容錯策略和模式,公司可以確保即使在出現故障的情況下,平臺仍能保持可用。
在本篇博客文章中,我們將更深入地探索一些大型科技公司和軟件工程團隊如何使用策略和模式來保持系統的可用性。
容錯系統的八大支柱
- 冗余和復制 是建立容錯軟件系統的常見策略之一。冗余包括復制系統的關鍵組件,并確保這些組件的多個實例是可用的。如果一個組件實例失敗,另一個實例能立即接管。冗余可在硬件、軟件和數據等系統的不同層次中實現。例如,硬件冗余包括使用多臺服務器或存儲設備,而軟件冗余包括在多臺服務器上復制應用實例。
- 負載均衡 是另一個對建立容錯軟件系統至關重要且廣為人知的策略。負載均衡涉及將入站的網絡流量分流到多臺服務器,以確保無一臺服務器過載。如果一臺服務器發生故障,流量可以自動重定向到另一臺服務器,從而降低故障的影響。負載均衡可以通過硬件或軟件解決方案實現,并通常與冗余和復制配合使用,以最大化系統的容錯性。
- 模塊化 本質上是將系統拆分為較小、獨立的部分,這些部分可以獨立進行開發、部署和維護。這種做法使得故障的定位和隔離變得更加容易,同時也可以更快地恢復正常運行。微服務則是模塊化的一種延伸,它將系統進一步劃分為更小的、可以獨立開發和部署的服務。微服務的出現極大地提升了系統的容錯能力,它可以將故障的影響降至最小,以實現快速恢復。
- 優雅降級 是指在設計系統時,要確保即便部分組件出現故障,系統也能至少保持基本功能運行。這種設計思路確保了即使部分功能或性能暫時受到影響,系統依然保持可用。通過設計系統來檢測故障并自動調整其行為以適應故障情況,就可以實現優雅降級。比如,如果一個依賴第三方服務的功能不可用,Web 應用程序可以顯示該頁面的簡化版本。
- 熔斷器 是一種用來防止系統級聯故障的設計模式。它將對外部依賴(如數據庫或 Web 服務)的調用包裝在熔斷器中。熔斷器會監視外部依賴的健康狀態,一旦發現故障,它就會打開電路,阻止進一步的依賴調用。這種設計可以讓系統在外部依賴出現故障時優雅地降級,而不會直接崩潰。
- 快速失敗 是一種模式,旨在在檢測到故障后立即停止系統執行以防止更大的損害。這種方式保證了系統在出現故障時能快速失敗,避免引發更嚴重的級聯故障。通過在代碼中添加斷言或前置條件,我們能在開發過程的早期檢測出錯誤,從而實現快速失敗。設置適當的超時和截止日期也是快速失敗的一種形式,系統可以終止運行時間過長的操作,防止對系統造成更大的損害。
- 重試 是一種設計模式,它能自動重新執行失敗的操作,期待在后續嘗試中成功。對于瞬態故障(如網絡超時或臨時服務不可用)這種方法可能會有效。重試的實現可以采用不同的算法,例如指數回退,它在每次重試之間增加延遲,以減輕系統負載。
- 限流 是一種策略,其目標是限制系統處理請求的速率。這種策略可以預防過載,確保系統能在流量激增時仍然能夠處理,而不會過于繁忙。限流可以通過設置每秒或每分鐘可以處理的請求數量來實現。對于那些依賴于具有使用限制的外部 API 或服務的系統,這種策略特別有效。
總結
本文并沒有給出具體的實現細節,但這些技術和方法可以用來增加系統的可靠性和可用性。上述提到的模式為尋求改進軟件系統彈性的開發者提供了一個很好的思路。
譯者介紹
劉汪洋,51CTO社區編輯,昵稱:明明如月,一個擁有 5 年開發經驗的某大廠高級 Java 工程師,擁有多個主流技術博客平臺博客專家稱號。
原文標題:The Art of Building Fault-Tolerant Software Systems,作者:CodeReliant 社區