怎麼確保站點的可用性

  站點的高可用架構設計的主要目的就是保證server硬件故障時服務依舊可用、數據依舊保存並可以被訪問。web


  實現上述高可用架構的主要手段是數據和服務的冗餘備份失效轉移
  典型的分層模型是三層,即應用層、服務層、數據層;各層之間具備相對獨立性,應用層主要負責詳細頁面邏輯處理;服務層負責提供可複用的服務;數據層負責數據的存儲於訪問。中小型站點在詳細部署時,一般將應用層和服務層部署在一塊兒,而數據層則另外部署。算法


  在複雜的大型站點架構中,劃分的粒度會更小、更詳細,結構更加複雜,server規模更加龐大,但一般仍是可以把這些服務劃分到這三層中。瀏覽器

高可用的應用


  應用層主要處理站點應用的業務邏輯,所以有時也稱做爲業務邏輯層,應用的一個顯著特色是應用的無狀態性。markdown

  1. 經過負載均衡進行無狀態服務的失效轉移
    負載均衡,顧名思義,主要使用在業務量和數據量較高的狀況下。當單臺server不足以承擔所有的負載壓力時,經過負載均衡手段,將流量和數據分攤到一個集羣組成的多臺server上,以提升整體的負載處理能力。
    眼下,不管是開源免費的負載均衡軟件仍是昂貴的負載均衡硬件。都提供失效轉移功能。
  2. 應用server集羣的Session管理
    應用server的高可用架構設計主要基於服務無狀態這一特性,但是其實,業務老是有狀態的。


    web應用中將這些屢次請求改動使用的上下文對象稱做會話(Session),單機狀況下,Session可由部署在server上的Web容器管理。在使用負載均衡的集羣環境中,因爲負載均衡server可能會將請求分發到集羣不論什麼一臺應用server上,因此保證每次請求依舊可以得到正確的Session比單機時要複雜很是多。cookie

  集羣環境下。Session管理主要有下面幾種手段。網絡

  1. Session複製:方案簡單。從本機讀取session信息也很是高速。但僅僅能使用在集羣規模比較小的狀況下。當集羣規模較大時,集羣server間需要大量的通訊進行Session複製。佔用server和網絡的大量資源,系統不堪重負。
  2. Session綁定:可以利用負載均衡的源地址Hash算法實現,負載均衡server老是未來源於同一ip的請求分發到同一臺server上(也可以更具Cookie信息將同一個用戶的請求老是分發到同一臺server上,固然這是負載均衡server必須工做在http層上)。但是session綁定的方案顯然不符合咱們隊系統高可用的需求。因爲一旦某臺server宕機,那麼該機器的session就不復存在了,用戶請求切換到其它機器後因爲沒有session而沒法完畢業務處理。
  3. 利用Cookie記錄session:可以利用瀏覽器支持的Cookie記錄session。但是有一些缺點,比方受Cookie限制大小,能記錄的信息有限,每次請求響應都需要傳輸cookie;假設關閉cookie。訪問就會不正常。
  4. Sessionserver:利用獨立部署的Sessionserver(集羣)統一管理Session。應用server每次讀寫Session時,都訪問Sessionserver。這樣的解決方式其實是將應用server的狀態分離。分爲無狀態的應用server和有狀態的Sessionserver,而後針對這兩種server的不一樣惡性分別設計其架構。

高可用的服務


  可複用的服務模塊爲業務產品提供公共服務,大型站點中這些服務一般都獨立分佈式部署,被詳細應用遠程調用。可複用的服務和應用同樣。也是無狀態的服務,所以可以使用類似負載均衡的失效轉移策略實現高可用的服務。
  除此以外。詳細實踐中,還有下面幾點高可用的服務策略。session

  1. 分級管理
    運維上將server進行分機管理,核心應用和服務有限使用更好的硬件,在運維響應速度上爺格外迅速。顯然。用戶及時付款購物比能不能評價商品更重要,因此訂單、支付服務比評價服務有更高優先級。同事在服務部署上也進行必要的隔離,避免故障的連鎖反應。
  2. 超時設置
    在應用程序中設置服務調用的超時時間,一旦超時,通訊框架就拋出異常,應用程序依據服務調度策略,可選擇繼續重試或者將請求轉移到提供一樣服務的其它server上
  3. 異步調用
    應用對服務的調用經過消息隊列等異步方式完畢。避免一個服務失敗致使整個應用請求失敗的狀況。
    固然不是多有服務調用都可以異步調用,對於獲取用戶信息這類調用,採用異步方式會延長響應時間。得不償失。

    對於那些必須確認服務調用成功才幹繼續下一步操做的應用也不合適使用異步調用。架構

  4. 服務降級
    降級有兩種手段:拒絕服務及關閉服務
  5. 冪等性設計
    有些服務自然具備冪等性,比方講用戶性別設置爲男性,不管設置多少次,結果都同樣。但是對轉帳交易等操做,問題就會比較複雜,需要經過交易編號等信息進行服務調用有效性校驗。僅僅有有效的操做才幹繼續執行。
    (注:冪等性是系統的接口對外一種承諾(而不是實現), 承諾僅僅要調用接口成功, 外部屢次調用對系統的影響是一致的. 聲明爲冪等的接口會以爲外部調用失敗是常態, 並且失敗以後一定會有重試.)

高可用的數據


  保證數據存儲高可用的手段主要是數據備份和失效轉移機智。負載均衡

站點執行監控


  「不一樣意沒有監控的系統上線「,這是不少站點架構師在作項目上線評審時常說的一句話。框架

站點執行監控對於站點運維和架構設計優化相當重要,運維沒有監控的站點。宛如駕駛沒有儀表的飛機。盲人騎瞎馬,夜班臨深淵而不知。生死尚且未卜,提升可用性、下降故障率就更無從作起了。

  1. 監控數據採集:用戶行爲日誌收集;server性能監控;執行數據報告;
  2. 監控管理:系統報警;失效轉移;本身主動優雅降級;
相關文章
相關標籤/搜索