知識(shí)拓展|構(gòu)建容錯(cuò)軟件系統(tǒng)的藝術(shù)
發(fā)布時(shí)間:2023-08-02 13:39:17
構(gòu)建容錯(cuò)軟件系統(tǒng)的藝術(shù)
現(xiàn)在,我們生活在由軟件系統(tǒng)推動(dòng)的世界中。這些系統(tǒng)深入到我們?nèi)粘I畹母鱾€(gè)方面,其連續(xù)、可靠的性能不再是奢侈,而是必需。現(xiàn)在,企業(yè)比以往任何時(shí)候都更需要保證他們的系統(tǒng)可用、可靠,并具有彈性。這種需求由滿足客戶期待以及戰(zhàn)勝競(jìng)爭(zhēng)對(duì)手的需求所推動(dòng)。那么,要達(dá)到這個(gè)目標(biāo)的關(guān)鍵是什么呢?答案就是建立具有容錯(cuò)性的軟件系統(tǒng)。
容錯(cuò)系統(tǒng)的重要性在于它們能夠防止長(zhǎng)時(shí)間的停機(jī)和收入損失。設(shè)想一下,一個(gè)金融機(jī)構(gòu)嚴(yán)重依賴某交易平臺(tái)來(lái)執(zhí)行交易,它無(wú)法承受市場(chǎng)交易時(shí)間內(nèi)平臺(tái)的停機(jī)風(fēng)險(xiǎn)。如果平臺(tái)真的不可用了,這家公司可能面臨數(shù)百萬(wàn)的收入損失,以及隨之而來(lái)的聲譽(yù)損失。但是,通過執(zhí)行容錯(cuò)策略和模式,公司可以確保即使在出現(xiàn)故障的情況下,平臺(tái)仍能保持可用。
在本文中,我們將更深入地探索一些大型科技公司和軟件工程團(tuán)隊(duì)如何使用策略和模式來(lái)保持系統(tǒng)的可用性。
容錯(cuò)系統(tǒng)的八大支柱
1.冗余和復(fù)制 是建立容錯(cuò)軟件系統(tǒng)的常見策略之一。冗余包括復(fù)制系統(tǒng)的關(guān)鍵組件,并確保這些組件的多個(gè)實(shí)例是可用的。如果一個(gè)組件實(shí)例失敗,另一個(gè)實(shí)例能立即接管。冗余可在硬件、軟件和數(shù)據(jù)等系統(tǒng)的不同層次中實(shí)現(xiàn)。例如,硬件冗余包括使用多臺(tái)服務(wù)器或存儲(chǔ)設(shè)備,而軟件冗余包括在多臺(tái)服務(wù)器上復(fù)制應(yīng)用實(shí)例。
2.負(fù)載均衡 是另一個(gè)對(duì)建立容錯(cuò)軟件系統(tǒng)至關(guān)重要且廣為人知的策略。負(fù)載均衡涉及將入站的網(wǎng)絡(luò)流量分流到多臺(tái)服務(wù)器,以確保無(wú)一臺(tái)服務(wù)器過載。如果一臺(tái)服務(wù)器發(fā)生故障,流量可以自動(dòng)重定向到另一臺(tái)服務(wù)器,從而降低故障的影響。負(fù)載均衡可以通過硬件或軟件解決方案實(shí)現(xiàn),并通常與冗余和復(fù)制配合使用,以最大化系統(tǒng)的容錯(cuò)性。
3.模塊化 本質(zhì)上是將系統(tǒng)拆分為較小、獨(dú)立的部分,這些部分可以獨(dú)立進(jìn)行開發(fā)、部署和維護(hù)。這種做法使得故障的定位和隔離變得更加容易,同時(shí)也可以更快地恢復(fù)正常運(yùn)行。微服務(wù)則是模塊化的一種延伸,它將系統(tǒng)進(jìn)一步劃分為更小的、可以獨(dú)立開發(fā)和部署的服務(wù)。微服務(wù)的出現(xiàn)極大地提升了系統(tǒng)的容錯(cuò)能力,它可以將故障的影響降至最小,以實(shí)現(xiàn)快速恢復(fù)。
4.優(yōu)雅降級(jí) 是指在設(shè)計(jì)系統(tǒng)時(shí),要確保即便部分組件出現(xiàn)故障,系統(tǒng)也能至少保持基本功能運(yùn)行。這種設(shè)計(jì)思路確保了即使部分功能或性能暫時(shí)受到影響,系統(tǒng)依然保持可用。通過設(shè)計(jì)系統(tǒng)來(lái)檢測(cè)故障并自動(dòng)調(diào)整其行為以適應(yīng)故障情況,就可以實(shí)現(xiàn)優(yōu)雅降級(jí)。比如,如果一個(gè)依賴第三方服務(wù)的功能不可用,Web 應(yīng)用程序可以顯示該頁(yè)面的簡(jiǎn)化版本。
5.熔斷器 是一種用來(lái)防止系統(tǒng)級(jí)聯(lián)故障的設(shè)計(jì)模式。它將對(duì)外部依賴(如數(shù)據(jù)庫(kù)或 Web 服務(wù))的調(diào)用包裝在熔斷器中。熔斷器會(huì)監(jiān)視外部依賴的健康狀態(tài),一旦發(fā)現(xiàn)故障,它就會(huì)打開電路,阻止進(jìn)一步的依賴調(diào)用。這種設(shè)計(jì)可以讓系統(tǒng)在外部依賴出現(xiàn)故障時(shí)優(yōu)雅地降級(jí),而不會(huì)直接崩潰。
6.快速失敗 是一種模式,旨在在檢測(cè)到故障后立即停止系統(tǒng)執(zhí)行以防止更大的損害。這種方式保證了系統(tǒng)在出現(xiàn)故障時(shí)能快速失敗,避免引發(fā)更嚴(yán)重的級(jí)聯(lián)故障。通過在代碼中添加斷言或前置條件,我們能在開發(fā)過程的早期檢測(cè)出錯(cuò)誤,從而實(shí)現(xiàn)快速失敗。設(shè)置適當(dāng)?shù)某瑫r(shí)和截止日期也是快速失敗的一種形式,系統(tǒng)可以終止運(yùn)行時(shí)間過長(zhǎng)的操作,防止對(duì)系統(tǒng)造成更大的損害。
7.重試 是一種設(shè)計(jì)模式,它能自動(dòng)重新執(zhí)行失敗的操作,期待在后續(xù)嘗試中成功。對(duì)于瞬態(tài)故障(如網(wǎng)絡(luò)超時(shí)或臨時(shí)服務(wù)不可用)這種方法可能會(huì)有效。重試的實(shí)現(xiàn)可以采用不同的算法,例如指數(shù)回退,它在每次重試之間增加延遲,以減輕系統(tǒng)負(fù)載。
8.限流 是一種策略,其目標(biāo)是限制系統(tǒng)處理請(qǐng)求的速率。這種策略可以預(yù)防過載,確保系統(tǒng)能在流量激增時(shí)仍然能夠處理,而不會(huì)過于繁忙。限流可以通過設(shè)置每秒或每分鐘可以處理的請(qǐng)求數(shù)量來(lái)實(shí)現(xiàn)。對(duì)于那些依賴于具有使用限制的外部 API 或服務(wù)的系統(tǒng),這種策略特別有效。
總結(jié)
本文并沒有給出具體的實(shí)現(xiàn)細(xì)節(jié),但這些技術(shù)和方法可以用來(lái)增加系統(tǒng)的可靠性和可用性。上述提到的模式為尋求改進(jìn)軟件系統(tǒng)彈性的開發(fā)者提供了一個(gè)很好的思路。