5 萬無一失:網站的高可用架構
5.1 網站可用性的度量與考覈
5.1.1 網站可用性度量
5.1.2 網站可用性考覈
5.2 高可用的網站架構
數據和服務的冗餘備份及失效轉移。
在複雜的大型網站架構中,模塊劃分的粒度會更小、更詳細,結構更加複雜,服務器規模更加龐大。不同的業務產品會部署在不同的服務器集羣上。
5.3 高可用的應用
5.3.1 通過負載均衡進行無狀態服務的失效轉移
5.3.2 應用服務器集羣的Session管理
應用服務器的高可用架構設計主要基於服務無狀態這一特性,但是事實上,業務總是有狀態的。
- Session複製:應用服務器開啓Web容易的Session複製功能,在集羣中的幾臺服務器之間同步Session對象,使得每臺服務器上都保存所有用戶的Session信息。但是費內存,可能會出現Session過多導致服務器內存不夠的情況。
- Session綁定:利用負載均衡的源地址Hash算法實現,負載均衡服務器總是將來源於同一IP的請求分發到同一個服務器上。
- 利用Cookie記錄Session:利用瀏覽器支持的Cookie記錄Session
- Session服務器:利用獨立部署的Session服務器(集羣)同一管理Session,應用服務器每次讀寫Session時,都訪問Session服務器。
5.4 高可用的服務
可複用的服務模塊爲業務產品提供基礎公共服務,大型網站中這些服務通常都獨立分佈式部署,被具體應用遠程調用。可複用服務和應用一樣,也是無狀態的服務,因此可以使用類似負載均衡的失效轉移策略實現高可用的服務。
除此之外,具體實踐中,還有以下幾點高可用的服務策略。
- 分級管理:核心應用和服務優先使用更好的硬件
- 超時設置:一旦超時,應用程序根據服務調度策略,可選擇繼續重試或將請求轉移到提供相同服務的其他服務器上。
- 異步調用:避免一個服務失敗導致整個應用請求失敗的情況。
- 服務降級:爲保證核心應用和功能的正常運行,需要對服務進行降級。降級有兩種手段:拒絕服務和關閉服務
- 冪等性設計:必須在服務器層保證服務重複調用和調用一次產生的結果相同。
5.5 高可用的數據
保證數據存儲高可用的手段主要是數據備份和失效轉移機制。
失效轉移機制保證當一個數據副本不可訪問時,可以快速切換訪問數據的其他副本,保證系統可用。
5.5.1 CAP原理
- 數據持久性
- 數據可訪問性
- 數據一致性
CAP原理認爲,一個提供數據服務的存儲系統無法同時滿足數據一致性、數據可用性、分區耐受性這三個條件。
大型網站中,通常會選擇強化分佈式存儲系統的可用性(A)和伸縮性(P),在某種程度上放棄一致性(C)。
數據一致性可分爲如下幾點:
數據強一致
數據用戶一致
數據最終一致
5.5.2 數據備份
冷備份、熱備份
熱備份可分爲兩種:異步熱備份方式和同步熱備份方式
異步方式是指多份數據副本的寫入操作異步完成,應用程序收到數據服務系統的寫操作成功響應時,只寫成功了一份,存儲系統將會異步地寫其他副本。
同步方式是指多份數據副本的寫入操作同步完成,即應用程序收到數據服務系統的寫成功響應時,多份數據都已經寫操作成功。
5.5.3 失效轉移
失效轉移操作主要由三部分組成:
- 失效確認:心跳檢測和應用程序訪問失敗報告
- 訪問轉移
- 數據恢復
5.6 高可用網站的軟件質量保證
軟件系統本身的風險
5.6.1 網站發佈
5.6.2 自動化測試
5.6.3 預發佈驗證
5.6.4 代碼控制
- 主幹開發、分支發佈
- 分支開發、主幹發佈
5.6.5 自動化發佈
5.6.6 灰度發佈
5.7 網站運行監控
“不允許沒有監控的系統上線”
5.7.1 監控數據採集
用戶行爲日誌收集
- 服務器端日誌收集
- 客戶端瀏覽器日誌收集(頁面中嵌入JavaScript腳本)
服務器性能監控
運行數據報告
5.7.2 監控管理
- 系統報警
- 失效轉移
- 自動優雅降級