含義
可用性
可用性是在某個考察時間,系統能夠正常運作的機率或時間占有率期望值。
可靠性
可靠性一般指産品可靠性,是元件、産品、系統在一定時間内、在一定條件下無故障地執行指定功能的能力或可能性。
光看定義比較抽象,下面看一個具體的例子。
如果某個系統在每小時崩潰1ms,那麼它的可用性就超過99.9999%,但是它還是高度不可靠。與之類似,如果一個系統從來不崩潰,但是每年要停機兩星期,那麼它是高度可靠的,但是可用性隻有96%。
可用性被定義為系統的一個屬性,它說明系統已準備好,馬上就可以使用。換句話說,高度可用的系統在任何給定的時刻都能及時地工作。
可靠性是指系統可以無故障地持續運作,是一個持續的狀态。與可用性相反,可靠性是根據時間段而不是任何時刻來進行定義的。
1 WHAT - 什麼是可用性?
定義可用性,可以先定義什麼是不可用。
以網站為例,需要經曆若幹環節,網站的頁面才能呈現在最終的使用者面前;而其中的任何一個環節出現了故障,都可能會導緻網站的頁面不可通路,也就是出現了網站不可用的情況。
我們可以利用百分比來對網站可用性進行度量:
網站不可用時間=完成故障修複的時間點 - 故障發現的時間點
網站年度可用時間=年度總時間 - 網站不可用時間
網站年度可用性=(網站年度可用時間/年度總時間) x 100%
99.99%可用性如何計算?
舉例:一些知名大型網站的可用性可達到99.99%(俗稱4個9),我們可以算一下一年下來留給處理故障的時間有多少?
年度總時間=365 * 24 * 60=525600分鐘
網站不可用時間=525600 * (1-99.99%)=52.56分鐘
也就是,如果網站要達到4個9的可用性,一年下來網站不可用時間最多53分鐘(也就是不足1個小時)。
可見,高可用性就是技術實力的象征,高可用性就是競争力。
2 WHY - 為什麼會出現不可用?
- 硬體故障。網站多運作在普通的商用伺服器,而這些伺服器本身就不具備高可用性,再加之網站系統背後有數量衆多伺服器,那麼一定時間内伺服器當機是大機率事件,直接導緻部署在該伺服器上的服務受影響。
- 軟體BUG或網站更新更新釋出。BUG不能消滅,隻能減少;上線後的系統在運作過程中,難免會出現故障,而這些故障同樣直接導緻某些網站服務不可用;此外,網站更新更新釋出也會引起相對較頻繁的伺服器當機。
- 不可抗拒力。如地震、水災、戰争等。
3 HOW - 如何做到高可用
核心思想
網站高可用的主要技術手段是服務與資料的備援備份與失效轉移。同一服務元件部署在多台伺服器上;資料存儲在多台伺服器上互相備份。通過上述技術手段,當任何一台伺服器當機或出現各種不可預期的問題時,就将相應的服務切換到其他可用的伺服器上,不影響系統的整體可用性,也不會導緻資料丢失。
從架構角度看可用性:目前網站系統多采用經典的分層模型,從上到下為:應用層、服務層與資料層。
應用層主要實作業務邏輯處理;
服務層提供可複用的服務;
資料層負責資料讀寫;
在部署架構上常采用應用和資料分離部署,應用會部署到不同伺服器上,這些伺服器被稱為應用層的伺服器;
這些可複用的服務也會各自部署在不同伺服器上,稱為服務層的伺服器;
而各類資料庫系統、檔案櫃等資料則部署在資料層的伺服器。
硬體故障方面引起不可用的技術解決措施:
(1)應用伺服器。可通過負載均衡裝置将多個應用伺服器建構為叢集對外提供服務(前提是這些服務需要設計為無狀态,即應用伺服器不儲存業務的上下文資訊,而僅根據每次請求送出的資料進行業務邏輯的操作響應),當均衡裝置通過心跳檢測手段檢測到應用伺服器不可用時,則将其從叢集中移除,并将請求切換到其他可用的應用服務上。
(2)服務層伺服器。這些伺服器被應用層通過分布式服務架構(如Dubbo)通路,分布式服務架構可在應用層用戶端程式中實作軟體負載均衡,并通過服務注冊中心提供服務的伺服器進行心跳檢測,當發現有伺服器不可用時,立即通知用戶端程式修改服務清單,同時移除響應的伺服器。
(3)資料伺服器。需要在資料寫入時進行資料同步複制,将資料寫入多台伺服器上,實作資料備援備份;當資料伺服器當機時,應用程式将通路切換到有備份資料的伺服器上。
軟體方面引起不可用的技術解決措施:通過軟體開發過程進行品質保證。通過預釋出驗證、嚴格測試、灰階釋出等手段,盡量減少上線服務的故障。