1. 程式人生 > >《大型網站技術架構》——第五章 萬無一失:網站的高可用架構

《大型網站技術架構》——第五章 萬無一失:網站的高可用架構

網站可有效訪問的特性。(不要掛)
硬體故障是常態,網站的高可用架構設計的主要目的就是:保證伺服器硬體故障時服務依然可用、資料依然儲存並能夠被訪問。
主要手段是資料和服務的冗餘備份及失效轉移。
大型網站的分層架構及物理伺服器的分散式部署使得位於不同層次的伺服器具有不同的可用性特點。關閉服務或者伺服器宕機時產生的影響也不相同,高可用的解決方案差異也大。典型的分層模型:

應用層

具體業務邏輯處理。
高併發,負載均衡裝置通過心跳檢測等監控,並進行失效轉移處理
應用的一個顯著特點是應用的無狀態性:應用伺服器不儲存業務的上下文資訊,僅根據每次請求提交的資料進行相應的業務邏輯處理,多個服務例項之間完全對等

會話(Session):多次請求修改使用的上下文物件。有狀態。

叢集環境下的Session管理:
**Session複製:**伺服器之間同步Session物件。叢集規模大時佔用大量伺服器和網路資源。
**Session繫結(會話黏滯):**負載均衡伺服器總是將來源於同一IP的請求分發到同一臺伺服器上,Session繫結在某臺特定伺服器上。
利用Cookie記錄Session: Cookie大小限制、影響請求響應的效能、使用者可能關閉Cookie
**Session伺服器:**利用獨立部署的Session伺服器(叢集)統一管理Session。實際是上將應用伺服器按狀態分離,分為無狀態的應用伺服器和有狀態的Session伺服器。可用性高、伸縮性好、效能好。

服務層

提供可複用的服務。
分散式服務呼叫框架實現負載均衡,並通過服務註冊中心對提供服務的伺服器進行心跳檢測,修改服務訪問列表
可複用的服務模組為業務產品提供基礎公共服務,被具體應用遠端呼叫。
無狀態。因此可以使用類似負載均衡的失效轉移策略實現高可用的服務。
其他策略:

  • 分級管理
  • 超時設定:在應用程式中設定服務呼叫的超時時間,防止響應超時的情況下佔有應用程式的資源
  • 非同步呼叫
  • 服務降級:在網站訪問高峰期,為了保證核心應用和功能的正常執行,對低優先順序的服務降級,拒絕服務及關閉服務。
  • 冪等性設計:服務重複呼叫無法避免。因此需要服務層保證服務重複呼叫的結果相等

資料層

資料的儲存與訪問,如資料庫服務,檔案服務,快取服務,搜尋服務等。
保證資料儲存高可用的手段主要是資料備份和失效轉移機制。

快取服務的高可用:
一種觀點認為快取事實上承擔了業務中絕大多數的資料訪問服務,因此需要實現和資料儲存服務同樣的高可用
另一種觀點認為快取服務不是資料儲存服務,應該通過其他手段比如使用快取伺服器叢集減小快取伺服器宕機引起的快取失效影響

CPA原理:一個提供資料服務的儲存系統無法同時滿足資料一致性、資料可用性、分割槽耐受性這三個條件。
大型網站通常選擇強化分散式儲存系統的可用性和伸縮性,而在某種程度上放棄一致性。
資料強一致性:總是一致
資料使用者一致:
資料最終一致:系統經過一段時間的自我恢復和修正,最終會達到一致

資料冷備:
系統儲存損壞時,備份點之後的資料永久丟失,不能保證資料最終一致。
從冷備儲存中恢復資料需要較長的時間,這段時間系統不可用,因此不能保證資料可用性。
資料熱備:
非同步熱備方式:應用程式寫成功一份,儲存系統將會非同步寫其他副本。主從儲存伺服器。
同步方式:應用程式併發寫入,多份資料副本的寫入操作同步完成。儲存伺服器完全對等,更便於管理和維護。

資料伺服器失效轉移由三部分組成:
失效確認:通過心跳檢測和應用程式訪問失敗報告進行確認。控制中心。
訪問轉移:將資料讀寫訪問重新路由到其他伺服器上。
資料恢復:系統從健康的伺服器複製資料,將資料副本數目恢復到設定值。

高可用網站的軟體質量保證

網站釋出:分批發布叢集中的一小部分服務,直到釋出完成。
自動化測試
預釋出驗證:預釋出伺服器和線上正式伺服器唯一的不同就是沒有配置在負載均衡伺服器上,外部使用者無法訪問。
程式碼控制:
自動化釋出:網站火車釋出模型。
灰度釋出:網站灰度釋出模型。

網站執行監控

廣義上的監控涵蓋所有非直接業務行為的資料採集與管理:
使用者行為日誌
伺服器效能監控
執行資料報告

事物總是先求生存,然後求發展。