高可用(High Avaliability, HA),指的是系統具備較高的無故障運行的能力。
1、可用性的度量
- MTBF
MTBF(Mean Time Between Failure):平均故障間隔,代表兩次故障的間隔時間,也就是系統正常運轉的平均時間,這個時間越長,系統穩定性就越高 - MTTR
MTTR(Mean Time To Repair):故障的平均恢復時間,也就是平均故障的時間。這個值越小,故障對於用戶的影響也就越小。
Availability = MTBF / (MTBF + MTTR)
一般來說,我們的核心的業務系統的可用性,需要達到 四個九;非核心繫統的可用性最多容忍到 三個九。
2、高可用系統設計思路
2.1、系統設計
“Design for failure”是我們做高可用系統設計時秉持的第一原則。
-
failover(故障轉移)
1、完全對等的節點之間做 failover,一個節點不可用時,直接訪問另一個節點。
2、不對等的節點之間(系統中存在主節點也存在備節點)。比方說我們有一個主節點,有多臺備用節點,這些備用節點可以是熱備(同樣在線提供服務的備用節點),也可以是冷備(只作爲備份使用),那麼我們就需要在代碼中控制如何檢測主備機器是否故障,以及如何做主備切換。
使用最廣泛的故障檢測機制是“心跳”。你可以在客戶端上定期地向主節點發送心跳包,也可以從備份節點上定期發送心跳包。當一段時間內未收到心跳包,就可以認爲主節點已經發生故障,可以觸發選主的操作。
-
超時控制
複雜的高併發系統通常會有很多的系統模塊組成,同時也會依賴很多的組件和服務,比如說緩存組件,隊列服務等等。它們之間的調用最怕的就是延遲而非失敗,因爲失敗通常是瞬時的,可以通過重試的方式解決。而一旦調用某一個模塊或者服務發生比較大的延遲,調用方就會阻塞在這次調用上,它已經佔用的資源得不到釋放。當存在大量這種阻塞請求時,調用方就會因爲用盡資源而掛掉 -
降級是爲了保證核心服務的穩定而犧牲非核心服務的做法
-
限流,它通過對併發的請求進行限速來保護系統。
2.2、系統運維
- 灰度發佈
- 故障演練