單機系統(tǒng)故障恢復策略在單機系統(tǒng)中,程序可能遭遇程序錯誤、崩潰等導致進程終止。為了在系統(tǒng)重啟后恢復服務至先前狀態(tài),依賴于數(shù)據(jù)和日志的完整性。假設(shè)磁盤狀態(tài)良好,我們主要聚焦于操作的重現(xiàn)機制。1. 操作日志操作日志是數(shù)據(jù)庫(無論是關(guān)系型還是NoSQL)實現(xiàn)故障恢復的關(guān)鍵工具。
- 日志形式:關(guān)系型數(shù)據(jù)庫常采用UNDO/REDO日志,記錄事務的撤銷和重做信息。例如,事務T將記錄X的值從1改為3,則UNDO日志記錄為<T,X,1>,REDO日志為<T,X,3>,或合并記錄為<T,X,1,3>。NoSQL數(shù)據(jù)庫如Redis則使用AOF(Append On* File)文件記錄操作日志,具有獨特的日志格式。
- 性能優(yōu)化:對于性能敏感的系統(tǒng),頻繁寫入日志可能不是*選擇。此時,可采用批量提交策略,即累積一定數(shù)量的操作后再統(tǒng)一寫入日志。Redis提供了多種AOF寫入策略,包括每秒寫入一次,以平衡數(shù)據(jù)一致性和性能。
2. CheckPoint機制隨著系統(tǒng)運行時間的增長,操作日志可能變得龐大,僅依賴REDO日志進行恢復將耗時過長。因此,引入CheckPoint機制,定期將內(nèi)存中的數(shù)據(jù)快照保存到磁盤上。這樣,在恢復時只需重放CheckPoint之后的REDO日志,顯著縮短恢復時間。Redis中的RDB持久化即實現(xiàn)了這一機制。分布式系統(tǒng)故障恢復策略分布式系統(tǒng)中,每個數(shù)據(jù)項擁有多個副本,故障恢復時可通過選舉新的主副本來繼續(xù)服務。根據(jù)故障類型(臨時性或*性),恢復策略有所不同。
- 臨時性故障:節(jié)點重新上線后,需從其他副本同步缺失的數(shù)據(jù),然后恢復服務。
- *性故障:需選擇新節(jié)點,復制現(xiàn)有副本數(shù)據(jù),成為新的副本節(jié)點。
此外,總控節(jié)點也可能故障,需通過強一致性的備機或選舉協(xié)議(如Paxos)來確保高可用性(HA)。分布式系統(tǒng)故障探測故障探測是分布式系統(tǒng)容錯處理的基礎(chǔ)。心跳包是常用的探測手段,但存在誤判風險。為此,引入租約(Lease)機制以增強可靠性。
- 租約特性:包括授權(quán)、時限和續(xù)約。總控節(jié)點向工作節(jié)點發(fā)放租約,工作節(jié)點在有效期內(nèi)提供服務,并需定期續(xù)約。若續(xù)約失敗或超時,則視為故障,確保服務一致性。
- 超時判定:考慮節(jié)點間時鐘差異,總控節(jié)點在判定超時時會設(shè)置一定的放寬量,以避免誤判。
一致性問題分布式系統(tǒng)面臨的*挑戰(zhàn)之一是保持數(shù)據(jù)一致性。后續(xù)將深入探討解決一致性問題的經(jīng)典分布式協(xié)議。