1. 程式人生 > >架構 構建高可用的網站

架構 構建高可用的網站

目錄(來自於 大型網站技術架構:核心原理與案例分析+李智慧 書籍)

  無狀態應用的構建

  應用伺服器叢集的session管理

  構建高可用的服務

  構建高可用的資料

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

前言

 

目的 保證伺服器硬體故障時依然可用,資料依然保持並能夠訪問

手段 資料和服務的冗餘備份以及失效轉移機制

有狀態 在服務端保留之前的請求資訊,用以處理當前請求(例如:session)

無狀態 沒有特殊狀態的服務,各個請求對於伺服器來說統一無差別處理,請求自身攜帶了所有伺服器需要的所有引數(例如:http)

 

無狀態應用的構建(通過負載均衡進行無狀態服務的失效轉移)

 

當伺服器不儲存請求的狀態,那麼所有的服務完全對等,當任意一條或多臺伺服器宕機,請求提交給叢集中其它任意臺可用機器,對終端使用者而言,請求總是能夠的,整個系統依然可用

 

應用伺服器叢集的session管理

 

session複製

  應用伺服器開啟Web容器的Session複製功能,在叢集中的幾臺伺服器之前同步session物件

  優點:方案簡單,可以直接從本機讀取Session資訊,速度快速,但只能使用在叢集規模比較小的情況

  缺點:機器規模較大時,需要大量的通訊進行伺服器間的Session複製,佔用伺服器和網路的大量資源,同時每臺伺服器上都儲存了大量備份,在使用者訪問量過大時,可能出現記憶體不足的情況

 

Session繫結

  利用負載均衡的源地址Hash演算法,總是將來源同一IP請求的分發到同一臺伺服器上

  優點:同一來源請求總是落地同一臺伺服器上

  缺點:一臺某臺伺服器宕機,那麼該機器上的Session就沒了,使用者切換到其它機器上因為沒有Session無法完成業務處理

 

cookie記錄Session

  將Session記錄在客戶端,每次請求伺服器的時候,將Session放在請求中傳送給伺服器

  優點:簡單易用,可用性高,支援應用伺服器的線型伸縮

  缺點:能記錄的訊息受限,每次請求都需要傳輸cookie,影響效能,如果使用者關閉cookie,訪問就會不正常

 

session伺服器

  利用獨立部署的session伺服器(叢集)統一管理,應用伺服器每次讀寫Session時,都訪問session伺服器

 

構建高可用的服務

 

服務分級,超時設定,非同步呼叫,服務降級,冪等性設計

 

服務分級管理 將核心應用於非核心應用進行分離,核心應用和服務優先使用更好的硬體(服務部署上也進行必要的隔離,避免故障的連鎖反應)

超時設計(針對通訊)設定服務連線超時時間,一旦超時,應用程式根據服務排程策略,可選擇重試或將請求轉移到提供相同服務的其它伺服器上

非同步呼叫(訊息佇列)

服務降級(保證核心應用和功能的正常執行)

  1 拒絕服務 拒絕低優先順序應用的呼叫,減少服務呼叫併發數,確保核心應用正常使用,隨機拒絕部分請求呼叫,解決資源,讓另一部分請求得以成功

  2 關閉服務 關閉部分不重要的服務,或者伺服器內部關閉部分不重要的功能,解決系統開銷,為重要服務和功能讓出資源

冪等性設計(防止重複呼叫,造成資料的準確性失誤)

 

構建高可用的資料

 

主要手段 資料備份和失效轉移機制

 

資料備份方法(主備模式)

  1 冷備 定期複製,但不能保證資料最終的一致性

  2 熱備

    2.1 非同步熱備 應用程式呼叫主儲存,主儲存寫入成功後,立即返回,主儲存非同步發起將資料寫入其它副本(不確定有沒有寫入成功)

    2.2 同步熱備 應用程式同時呼叫主,副伺服器,將資料進行寫入,此寫入過程可通過並行提升寫入效率

 

失效轉移

  1 失效確定 判斷伺服器宕機(心跳監測和應用程式訪問失效報告)

  2 訪問轉移 將請求傳送到可以使用的伺服器上

  3 資料恢復