系統設計之負載平衡介紹

負載平衡(Load balancer)


負載平衡系統將傳入的客戶端請求分發到計算資源 (如應用程序服務器和數據庫)。在每種狀況下, 負載平衡服務將處理結果從計算資源附 u返回到相應的客戶端。負載平衡器在如下狀況下有效:
git

  • 防止請求進入不健康的服務器
  • 防止重載資源
  • 幫助消除單點故障

    系統設計之負載平衡介紹

負載平衡器可使用硬件或軟件 (如 HAProxy) 來實現, 但相對來講硬件價格會昂貴一些。
github

其餘的優勢包括:

  • SSL終端
    能夠在負載平衡系統裏面對進來的請求進行解密或者對服務器處理完成的結果返回給客戶端時進行加密。後端服務器 沒必要執行這些消耗時間和精力的操做。
  • 會話狀態保持
    若是web應用沒有保持跟蹤會話的狀態,能夠發出cookies並將特定的客戶端請求路由到相同的實例。


爲了防止故障, 一般在active-passive和active-active模式下設置多個負載平衡器。
web

負載平衡器能夠根據各類指標路由通訊量, 包括

  • 隨機
  • 最少加載
  • Session/cookies
  • 循環或加權循環
  • 4層
  • 7層

4層負載平衡

4層負載平衡是在傳輸層上的服務,根據傳輸層的信息進行請求分發。一般, 這涉及到源、目標 IP 地址和header中的端口, 而不是數據包的具體內容。4層負載平衡向上遊服務器轉發網絡數據包, 執行網絡地址轉換 (NAT)。
數據庫

7層負載平衡

7層負載平衡是在應用層上決定如何分發請求的。這可能涉及頭部、消息和 cookie 的內容。7層負載平衡器終止網絡通訊, 讀取消息, 進行負載平衡決策, 而後打開與所選服務器的鏈接。例如, 7 層負載平衡器能夠將視頻通訊定向到承載視頻的服務器, 同時將更敏感的用戶計費流量定向到更安全的服務器。後端

儘管在硬件上的性能損耗比較小,但以靈活性爲代價, 4 層負載平衡比7層須要更少的時間和計算資源。
緩存

水平縮放(水平擴展)

經過水平縮放,負載平衡能夠提升性能和可用性。向系統中的單個節點添加資源 (或從中移除資源), 一般涉及將 cpu 或內存增長到一臺計算機上叫作垂直擴展,相比使用商業機器進行擴展具備成本效益, 提升可用性。
安全

水平縮放的缺點

  • 水平縮放會引入複雜性, 並涉及克隆服務器
    1. 服務器應該是無狀態的: 它們不該包含任何與用戶相關的數據, 如會話或配置文件圖片
    2. 會話能夠存儲在集中式數據存儲區 (如數據庫 (SQL、NoSQL) 或持久緩存 (Redis、Memcached) 中
  • 下游服務器 (如緩存和數據庫) 須要同時處理更多的鏈接, 由於上游服務器擴容了

負載平衡的缺點

  • 若是負載平衡器沒有足夠的資源或配置不正確, 則可能會成爲性能瓶頸。
  • 引入負載平衡能夠幫助消除單點故障,但會增長系統的複雜性的。
  • 單個負載平衡是會形成單點故障, 而配置多個負載平衡機將進一步提升複雜性。

    原文出處:https://github.com/donnemartin/system-design-primer#load-balancer
相關文章
相關標籤/搜索