如何構建高可用的系統(一):Overview

1. What

在聊如何構建高可用系統之前,我們需要對"可用"下一個定義。

業界常用SLA(Service Level Agreement)來描述一個系統的可用性, SLA包含很多信息(服務內容、故障恢復時間、可用性等), 在這裏我們籠統的用“N個9”來指代,比如4個9指的是99.99%的可用性、 5個9指的是99.999%的可用性。

假如一個系統聲稱它的年可用性是4個9, 那它提供的可用性承諾就是一年之內, 不可用時間不超過52.56分鐘(60 * 24 * 365 * 0.0001)。

在此基礎之上,我們來看看, 系統需要做到什麼程度, 可以稱爲高可用:

  1. 低故障總時長: 一般認爲4個9以上纔有資格稱爲高可用
  2. 快速的故障恢復: 即使一個系統一年只掛一次但是需要52分鐘才能恢復(那麼這個系統的年可用性是4個9), 那其實也是不能接受的。

2. Why

爲什麼要構建高可用系統? 這個其實不必多說,大家都懂, 因此一筆帶過。 系統的高可用對於個人口碑、產品、公司的形象、營收、股價,甚至社會穩定, 都至關重要。

3. How

3.1 問題所在

在着手構建高可用系統之前,我們需要知道是哪些因素在阻礙我們提高系統的可用性:

  1. 一切單點都是不可靠的, 如果系統中某個地方可能會出問題(就算概率很低),那麼它遲早會出問題。 也就是我們常說的Murphy’s Law。
  2. 系統依賴的一切下游系統都是不可靠的, 它們隨時可能出問題
  3. "人"是不可靠的, 費勁心思設計的高可用系統,會因爲新引入一個低級錯誤而崩潰
  4. 高可用是有前提條件的,一個系統對當前的負載能提供高可用, 不代表負載上升之後仍然高可用
  5. 高可用需要指標來衡量, 我們不能靠嘴來構建高可用系統

3.2 逐個擊破

知道了問題所在, 那麼就有解決的方向了:

  1. 既然單點肯定會出問題,那麼我們就避免單點
  2. 既然下游肯定會出問題, 那麼我們得處理下游不可用的情況
  3. 既然“人”肯定會犯錯, 那麼我們就引入各種機制,來減少犯錯的概率, 以及減少犯錯的損失
  4. 既然系統只能在一定負載內提供高可用, 那麼我們就得爲系統構建一套過載保護機制
  5. 爲系統構建一套監控, 數據說話

接下來的幾篇文章, 我會對以上幾點展開來講,乾貨多多, 歡迎持續關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章