負載平衡(Load balancer)
負載平衡系統將傳入的客戶端請求分發到計算資源 (如應用程序服務器和數據庫)。在每種情況下, 負載平衡服務將處理結果從計算資源附 u返回到相應的客戶端。負載平衡器在以下情況下有效:
- 防止請求進入不健康的服務器
- 防止重載資源
- 幫助消除單點故障
負載平衡器可以使用硬件或軟件 (如 HAProxy) 來實現, 但相對來說硬件價格會昂貴一些。
其他的優點包括:
- SSL終端
可以在負載平衡系統裏面對進來的請求進行解密或者對服務器處理完成的結果返回給客戶端時進行加密。後端服務器 不必執行這些消耗時間和精力的操作。 - 會話狀態保持
如果web應用沒有保持跟蹤會話的狀態,可以發出cookies並將特定的客戶端請求路由到相同的實例。
爲了防止故障, 通常在active-passive和active-active模式下設置多個負載平衡器。
負載平衡器可以根據各種指標路由通信量, 包括
- 隨機
- 最少加載
- Session/cookies
- 循環或加權循環
- 4層
- 7層
4層負載平衡
4層負載平衡是在傳輸層上的服務,根據傳輸層的信息進行請求分發。通常, 這涉及到源、目標 IP 地址和header中的端口, 而不是數據包的具體內容。4層負載平衡向上遊服務器轉發網絡數據包, 執行網絡地址轉換 (NAT)。
7層負載平衡
7層負載平衡是在應用層上決定如何分發請求的。這可能涉及頭部、消息和 cookie 的內容。7層負載平衡器終止網絡通信, 讀取消息, 進行負載平衡決策, 然後打開與所選服務器的連接。例如, 7 層負載平衡器可以將視頻通信定向到承載視頻的服務器, 同時將更敏感的用戶計費流量定向到更安全的服務器。
儘管在硬件上的性能損耗比較小,但以靈活性爲代價, 4 層負載平衡比7層需要更少的時間和計算資源。
水平縮放(水平擴展)
通過水平縮放,負載平衡可以提高性能和可用性。向系統中的單個節點添加資源 (或從中移除資源), 通常涉及將 cpu 或內存增加到一臺計算機上叫做垂直擴展,相比使用商業機器進行擴展具有成本效益, 提高可用性。
水平縮放的缺點
- 水平縮放會引入複雜性, 並涉及克隆服務器
- 服務器應該是無狀態的: 它們不應包含任何與用戶相關的數據, 如會話或配置文件圖片
- 會話可以存儲在集中式數據存儲區 (如數據庫 (SQL、NoSQL) 或持久緩存 (Redis、Memcached) 中
- 下游服務器 (如緩存和數據庫) 需要同時處理更多的連接, 因爲上游服務器擴容了
負載平衡的缺點
- 如果負載平衡器沒有足夠的資源或配置不正確, 則可能會成爲性能瓶頸。
- 引入負載平衡可以幫助消除單點故障,但會增加系統的複雜性的。
- 單個負載平衡是會造成單點故障, 而配置多個負載平衡機將進一步提高複雜性。
原文出處:https://github.com/donnemartin/system-design-primer#load-balancer