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