1. 什麼是負載平衡 (Load Balancing)? 🤔
- 定義: 負載平衡是一種技術,用於將網路流量均勻地分配到一組伺服器上,以優化資源利用率、最大化吞吐量、最小化響應時間,並避免任何單一伺服器過載。
- 目的:
- 提高性能: 讓多台伺服器共同處理請求,加快響應速度。
- 提升可用性: 如果某台伺服器故障,負載平衡器會自動將流量導向到其他健康的伺服器,避免服務中斷。
- 實現可擴展性: 當流量增加時,可以輕鬆地增加伺服器數量,負載平衡器會自動將新的伺服器納入管理。
2. 負載平衡器 (Load Balancer) ⚙️
負載平衡功能通常由一個專門的設備或軟體來實現,這個就是負載平衡器 (Load Balancer)。
- 類型:
- 硬體負載平衡器 (Hardware Load Balancers): 專門的物理設備,通常性能強大,適用於大型企業和數據中心。例如 F5 BIG-IP。
- 軟體負載平衡器 (Software Load Balancers): 可以在通用伺服器上安裝的軟體,通常更靈活,成本較低,適合雲端和虛擬化環境。例如 Nginx、HAProxy。
- 雲端負載平衡器 (Cloud Load Balancers): 雲端服務供應商提供的託管服務,完全由雲端供應商管理,按需付費。例如 AWS Elastic Load Balancing (ELB)、Azure Load Balancer、Google Cloud Load Balancing。
3. 負載平衡的運作原理 (How Load Balancing Works) 🔄
- 用戶請求: 當用戶發出請求(例如訪問網站)時,這個請求不會直接到達某一台伺服器,而是先到達負載平衡器。
- 健康檢查 (Health Checks): 負載平衡器會持續對後端的伺服器進行健康檢查(例如 Ping 伺服器、檢查指定埠口是否響應、應用程式是否正常),確保只將流量發送到健康的伺服器。如果某台伺服器故障,負載平衡器會將它從可用池中移除。
- 流量分配: 負載平衡器根據預設的負載平衡演算法,將請求分發到一個或多個健康的後端伺服器。
- 伺服器回應: 後端伺服器處理請求後,將回應直接或透過負載平衡器返回給用戶。
4. 常見的負載平衡演算法 (Load Balancing Algorithms) ⚖️
負載平衡器如何決定把請求分給哪台伺服器?這取決於其使用的演算法:
- 輪詢 (Round Robin): 按照順序,將請求依序分發給每一台伺服器。
- 比喻: 服務生按照座位順序,一個接一個地送菜。
- 優點: 最簡單、公平。
- 缺點: 不考慮伺服器的實際負載或性能差異。
- 加權輪詢 (Weighted Round Robin): 給性能更好的伺服器分配更高的權重,讓它接收更多的請求。
- 比喻: 讓跑得快的服務生多跑幾趟。
- 最少連線數 (Least Connections): 將新的請求分發給當前連線數最少的伺服器。
- 比喻: 哪個服務生手上正在處理的客人最少,就派他去服務新客人。
- 優點: 較能反映伺服器的實時負載。
- IP 雜湊 (IP Hash): 根據用戶的 IP 位址進行雜湊運算,將來自同一個 IP 的請求始終分發到同一台伺服器。
- 比喻: 同一個客人,每次來都安排同一個服務生服務。
- 優點: 有助於保持會話的「黏性」(Session Persistence),對於某些需要保持會話狀態的應用程式很有用。
- 缺點: 如果某些 IP 請求量特別大,可能導致負載不均。
- 最少響應時間 (Least Response Time): 將請求分發給響應時間最短(即最快)的伺服器。
- 比喻: 哪個服務生現在手腳最快,就讓她服務新客人。
5. 負載平衡的應用場景 💡
- 網站和 Web 應用程式: 確保高流量的網站和應用程式能夠穩定、快速地響應大量用戶請求。
- 應用程式伺服器: 分配來自 Web 伺服器的請求到多個應用程式伺服器。
- 資料庫伺服器: 雖然較為複雜,但在某些讀取密集的場景下,也可以對讀取請求進行負載平衡。
- DNS 服務: 透過 DNS 負載平衡將用戶請求導向到不同的數據中心或伺服器。
6. 負載平衡與擴展性 (Scalability) 📈
負載平衡是實現水平擴展 (Horizontal Scaling) 的關鍵。當你的應用程式流量增加時:- 水平擴展: 你不需要升級單一伺服器的硬體(垂直擴展),而是簡單地增加更多相同的伺服器,並將它們加入到負載平衡器的後端伺服器池中。負載平衡器會自動將流量分配給新的伺服器,提高整體處理能力。