定義
可用性與系統(tǒng)故障及其相關(guān)后果有關(guān)。當(dāng)系統(tǒng)不再提供其規(guī)范中所說明的服務(wù)時吸申,就出現(xiàn)了系統(tǒng)故障。
所關(guān)注的方面有:
- 如何檢測系統(tǒng)故障
- 系統(tǒng)故障發(fā)生的頻度
- 出現(xiàn)故障時會發(fā)生什么情況
- 允許系統(tǒng)有多長時間非正常運(yùn)行
- 什么時候可以安全地出現(xiàn)故障
- 如何防止故障的發(fā)生以及故障時要求進(jìn)行哪種通知
一般將系統(tǒng)可用性定義為:
a = 平均正常工作時間 / (平均正常工作時間+平均修復(fù)時間)
從這個公式中我們得到了像99.9%的可用性享甸、0.1%的故障率這樣的概念截碴。
在計算可用性時,通常不考慮預(yù)定的停機(jī)時間(即停止服務(wù))蛉威,因?yàn)楦鶕?jù)定義是”不需要“系統(tǒng)的日丹。這就導(dǎo)致會出現(xiàn)這種情況:系統(tǒng)停止運(yùn)行,用戶等待系統(tǒng)提供服務(wù)蚯嫌,但因?yàn)橥C(jī)時間是預(yù)定的哲虾,因此不計入故障時間,也就不會影響可用性的數(shù)值择示。
可用性戰(zhàn)術(shù)
錯誤檢測
命令/響應(yīng)
一個組件發(fā)生一個命令束凑,并希望在預(yù)定義的時間內(nèi)收到一個來自審查組件的響應(yīng)。心跳
一個組件定期發(fā)出一個心跳消息栅盲,另一個組件收聽該消息汪诉。異常
當(dāng)組件出現(xiàn)異常時就可以認(rèn)為組件出現(xiàn)了錯誤。
錯誤恢復(fù)
表決
運(yùn)行在冗余處理器上的每個進(jìn)程都具有相等的輸入谈秫,它們計算發(fā)送給表決者的一個簡單輸出值扒寄。如果表決者檢測到單處理器的異常行為,那么拟烫,就中止這一行為该编。主動冗余
所有的冗余組件都以并行的方式對事件做出響應(yīng)。僅使用一個組件的響應(yīng)硕淑,丟棄其余組件的響應(yīng)课竣。錯誤發(fā)生時,使用該戰(zhàn)術(shù)的系統(tǒng)的停機(jī)時間通常是幾毫秒喜颁,因?yàn)閭浞菔亲钚碌某淼曰謴?fù)所需要的時間就是切換時間。被動冗余(暖重啟/雙冗余/三冗余)
一個組件對事件做出響應(yīng)半开,并通知其他組件必須進(jìn)行狀態(tài)更新隔披。當(dāng)錯誤發(fā)生時,在繼續(xù)提供服務(wù)前寂拆,系統(tǒng)必須首先確保備用狀態(tài)是最新的奢米。備件
備用是計算平臺配置用于更換各種不同的故障組件抓韩。出現(xiàn)故障時,必須將其重新啟動為適當(dāng)?shù)能浖渲明蕹ぃζ錉顟B(tài)進(jìn)行初始化谒拴。shadow操作
以前出現(xiàn)故障組件可以在短時間內(nèi)以"shadow模式"運(yùn)行,以確保在恢復(fù)該組件之前涉波,模仿工作組件的行為英上。狀態(tài)再同步
主動和被動冗余戰(zhàn)術(shù)要求所恢復(fù)的組件在重新提供服務(wù)前更新其狀態(tài)。更新方法取決于可以承受的停機(jī)時間啤覆、更新的規(guī)模以及更新所要求的消息的數(shù)量苍日。如果可能的話,最好用一條消息包含該狀態(tài)窗声。增量式狀態(tài)更新和兩個增量之間的服務(wù)周期會導(dǎo)致復(fù)雜的軟件相恃。檢查點(diǎn)/回滾
檢查點(diǎn)就是記錄所創(chuàng)建一致狀態(tài),或者是定期進(jìn)行笨觅,或者是對具體事件做出響應(yīng)拦耐。有時系統(tǒng)會以一種不同尋常的方式出現(xiàn)故障,可檢測到其狀態(tài)不一致见剩。在這種情況下杀糯,應(yīng)該使用上一個一致檢查點(diǎn)和拍了快照后所發(fā)生的事務(wù)的日志來恢復(fù)系統(tǒng)。
錯誤預(yù)防
從服務(wù)中刪除
該戰(zhàn)術(shù)從操作中刪除了系統(tǒng)的一個組件炮温,以執(zhí)行某些活動來防止預(yù)期發(fā)生的故障火脉。一個示例就是重新啟動組件,以防止內(nèi)存泄漏導(dǎo)致故障的發(fā)生柒啤。事務(wù)
事務(wù)就是綁定幾個有序的步驟倦挂,以能夠立刻撤銷整個綁定。如果進(jìn)程中的一個步驟失敗的話担巩,可以使用事務(wù)來防止任何數(shù)據(jù)受到影響方援,還可以使用事務(wù)來防止訪問相同數(shù)據(jù)的幾個同時線程之間發(fā)生沖突。進(jìn)程監(jiān)視器
一旦檢測到進(jìn)程中存在錯誤涛癌,監(jiān)視進(jìn)程就可以刪除非執(zhí)行進(jìn)程犯戏,并為該進(jìn)程創(chuàng)建一個新的實(shí)例,就像在備件戰(zhàn)術(shù)中一樣拳话,初始化為某個適當(dāng)?shù)臓顟B(tài)先匪。