為什麼需要負載平衡
- 高可用性:單一 Web 伺服器故障導致全站掛點。NLB 前端分流,後端多台 Web Server,單台故障不影響服務。
- 水平擴展:單台伺服器處理上限固定。新增節點線性提升吞吐量,成本遠低於垂直升級(CPU/記憶體/SSD)。
NLB 分發演算法
| 模式 | 特點 |
| 輪詢 | 依序分發,不考慮負載。 |
| 加權 | 依節點效能配比權重。 |
| 隨機 | 隨機分發。 |
| 親和性 | 同一 Session 固定導向同節點。 |
| 最少連線 | 導向當前連線最少節點。 |
| 回應時間 | 導向回應最快節點。 |
技術實作類型
- 反向代理:LB 維持兩條 TCP 連線,客戶端 IP 變為 LB IP。
- 透明反向代理:保留真實客戶端 IP。
- 直接伺服器回傳 (DSR):修改 MAC 位址,回應直接回客戶端,效能最佳。
- NAT 負載平衡:修改封包目標 IP 導向後端。
- Microsoft NLB:Windows 內建,叢集模式運作,本文採用此方案。
效能基準測試環境
- 宿主機:Intel i5-4570 3.19GHz、4GB RAM、SSD。
- Hyper-V 虛擬機 x4(Web01~03、DB),各 1 vCPU、1GB RAM。
- 應用:ASP.NET MVC 4 + EF6 + SQL Server 2008 + IIS 8.5。
- 測試頁面:首頁列出 500 筆商品資料。
- 工具:
ab -n 1000 -c 100(忽略網路延遲,專注伺服器處理能力)。
測試結果演進
1. 單一 Web + 單一 DB(基準)
吞吐量:~110~130 req/s。併發 200 時平均回應 1.5s,400 併發超過 3s。

2. Web/DB 分離(單 Web + 獨立 DB)
吞吐量:~150 req/s(+50%)。併發 300/400 回應時間明顯改善。

3. 啟用 NLB:雙 Web + 獨立 DB
安裝 NLB 功能,建立叢集 IP 192.168.1.254,多播模式,Port 80 TCP、無親和性。

吞吐量:~230 req/s(較單 Web +50%)。理論 300 受限於單一 DB 瓶頸。

4. 三 Web + 獨立 DB
新增 Web03 加入叢集。吞吐量:~360 req/s(再提升 56%)。400 併發下平均回應 < 1s。

效能趨勢圖

NLB 部署關鍵步驟
- 所有 Web 節點設定靜態 IP。
- 透過 Server Manager > Features > Network Load Balancing 安裝功能。
- 任一節點開啟 NLB 管理工具,右鍵「Network Load Balancing Clusters」>「New Cluster」。
- 依序設定:主機 IP、叢集 IP(對外服務 IP)、多播模式、Port 80 TCP、無親和性。
- 完成後,在叢集右鍵「Add Host to Cluster」加入其他節點。
- 驗證:瀏覽叢集 IP,確認請求分流至各節點(可在頁面顯示機器名稱)。
已知限制與後續規劃
- NLB 本身為單點故障,需搭配 DNS 輪詢或硬體 LB 實現前端高可用。
- 無內建健康檢查深度(僅 Ping),無法感知應用層掛掛。
- Session 親和性僅支援 IP/單一親和性,複雜場景需應用層處理(Redis Session Store)。
- 下階段:引入 ARR (Application Request Routing) 實現應用層負載平衡、健康檢查、SSL 卸載、快取加速。
結語
Windows NLB 以零額外成本、原生整合方式提供基礎負載平衡,配合 Web/DB 分離、水平擴展節點,能以低成本支撐中型流量網站。實測 3 Web 節點達 360 req/s、400 併發 < 1s 回應,滿足大多數中小企業業務需求。