天天看點

分布式系統可用性和可靠性的差別,可用性如何計算,以及如何做到高可用和高可靠含義

含義

可用性

可用性是在某個考察時間,系統能夠正常運作的機率或時間占有率期望值。

可靠性

可靠性一般指産品可靠性,是元件、産品、系統在一定時間内、在一定條件下無故障地執行指定功能的能力或可能性。

光看定義比較抽象,下面看一個具體的例子。

如果某個系統在每小時崩潰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 - 為什麼會出現不可用?

  1. 硬體故障。網站多運作在普通的商用伺服器,而這些伺服器本身就不具備高可用性,再加之網站系統背後有數量衆多伺服器,那麼一定時間内伺服器當機是大機率事件,直接導緻部署在該伺服器上的服務受影響。
  2. 軟體BUG或網站更新更新釋出。BUG不能消滅,隻能減少;上線後的系統在運作過程中,難免會出現故障,而這些故障同樣直接導緻某些網站服務不可用;此外,網站更新更新釋出也會引起相對較頻繁的伺服器當機。
  3. 不可抗拒力。如地震、水災、戰争等。

3 HOW - 如何做到高可用

核心思想

網站高可用的主要技術手段是服務與資料的備援備份與失效轉移。同一服務元件部署在多台伺服器上;資料存儲在多台伺服器上互相備份。通過上述技術手段,當任何一台伺服器當機或出現各種不可預期的問題時,就将相應的服務切換到其他可用的伺服器上,不影響系統的整體可用性,也不會導緻資料丢失。

從架構角度看可用性:目前網站系統多采用經典的分層模型,從上到下為:應用層、服務層與資料層。

應用層主要實作業務邏輯處理;

服務層提供可複用的服務;

資料層負責資料讀寫;

在部署架構上常采用應用和資料分離部署,應用會部署到不同伺服器上,這些伺服器被稱為應用層的伺服器;

這些可複用的服務也會各自部署在不同伺服器上,稱為服務層的伺服器;

而各類資料庫系統、檔案櫃等資料則部署在資料層的伺服器。

硬體故障方面引起不可用的技術解決措施:

(1)應用伺服器。可通過負載均衡裝置将多個應用伺服器建構為叢集對外提供服務(前提是這些服務需要設計為無狀态,即應用伺服器不儲存業務的上下文資訊,而僅根據每次請求送出的資料進行業務邏輯的操作響應),當均衡裝置通過心跳檢測手段檢測到應用伺服器不可用時,則将其從叢集中移除,并将請求切換到其他可用的應用服務上。
(2)服務層伺服器。這些伺服器被應用層通過分布式服務架構(如Dubbo)通路,分布式服務架構可在應用層用戶端程式中實作軟體負載均衡,并通過服務注冊中心提供服務的伺服器進行心跳檢測,當發現有伺服器不可用時,立即通知用戶端程式修改服務清單,同時移除響應的伺服器。
(3)資料伺服器。需要在資料寫入時進行資料同步複制,将資料寫入多台伺服器上,實作資料備援備份;當資料伺服器當機時,應用程式将通路切換到有備份資料的伺服器上。

軟體方面引起不可用的技術解決措施:通過軟體開發過程進行品質保證。通過預釋出驗證、嚴格測試、灰階釋出等手段,盡量減少上線服務的故障。

繼續閱讀