TL;DR | 面試情境模擬 #
👴 面試官:Load Balancer 是什麼?L4 和 L7 差在哪?
🧑💻 你:Load Balancer 是在多台 Server 前面擋一層,把請求分散出去,讓系統可以水平擴展。L4(傳輸層)根據 IP 和 Port 做路由,不看請求內容,速度快;L7(應用層)可以看 HTTP Header、URL、Cookie,做更精細的路由,例如把 /api 路由到 API Server,把 /static 路由到 CDN。Nginx 和 HAProxy 兩個都能做,AWS ALB 是 L7,NLB 是 L4。
比喻:飯店接待台 #
你走進飯店大廳(Load Balancer),接待員看你的需求:
- L4(看名字):只知道你是「客人」,直接帶你去 1、2、3 號房輪流。
- L7(看需求):知道你是來住宿的還是來餐廳的,把你導向不同部門,還能根據你是 VIP 會員優先安排好一點的房間。
L4 vs L7 #
| 特性 | L4(傳輸層) | L7(應用層) |
|---|---|---|
| 工作在 OSI 第幾層 | 第 4 層(TCP/UDP) | 第 7 層(HTTP/HTTPS) |
| 路由依據 | IP + Port | URL、Header、Cookie、Body |
| 效能 | 極快(不解析內容) | 稍慢(需要解析 HTTP) |
| TLS 終止 | 不支援(直接穿透) | 支援(在 LB 層解密) |
| 內容路由 | 不支援 | 支援 |
| 代表產品 | AWS NLB、HAProxy (TCP mode) | AWS ALB、Nginx、Caddy |
路由演算法 #
Round Robin(輪詢) #
請求一個個輪流分配,最簡單。適合所有 Server 效能相同的情況。
Request 1 → Server A
Request 2 → Server B
Request 3 → Server C
Request 4 → Server A ← 又輪回來
Weighted Round Robin(加權輪詢) #
性能強的 Server 分配更多請求。
Server A(權重 3)、Server B(權重 1)
A, A, A, B, A, A, A, B...
Least Connections(最少連線) #
把新請求送到目前連線數最少的 Server,適合請求時間差異大的情況。
IP Hash #
根據 Client IP 做 Hash,同一個 IP 永遠路由到同一台 Server(Sticky Session)。適合有狀態的應用,例如 Session 存在 Server 本地(但現代架構通常把 Session 外移到 Redis)。
Health Check #
LB 每隔幾秒 ping 所有 Server:
LB ── GET /health ──> Server A → 200 OK ✅ 正常
LB ── GET /health ──> Server B → 超時 ❌ 移除
LB ── GET /health ──> Server C → 200 OK ✅ 正常
Server B 被移出輪詢,等它恢復後再加回來
Health Check 可以是:
- TCP Check:能不能連上 Port
- HTTP Check:GET /health 回 200
- Custom Script:自定義健康檢查邏輯
💡 面試官可能會追問 #
Q1:Load Balancer 本身不會成為單點故障(SPOF)嗎? #
會,所以 Load Balancer 本身也要做高可用(HA):兩台 LB 用 VRRP(Virtual Router Redundancy Protocol) 共用一個虛擬 IP,主機掛掉後備機自動接管。雲端服務的 LB(AWS ALB/NLB)本身就是多可用區部署,不需要自己做。
Q2:什麼是 Sticky Session?什麼時候需要? #
讓同一個 Client 每次都路由到同一台 Server(靠 Cookie 或 IP Hash)。傳統應用 Session 存在 Server 本地時需要。現代架構把 Session 存到 Redis,就不需要 Sticky Session,任何 Server 都能處理任何請求。
Q3:DNS Load Balancing 和 LB 有什麼差? #
DNS LB 是把同一個域名對應多個 IP,讓 DNS 輪流回傳不同 IP。優點是零成本,缺點是 DNS TTL 導致切換慢、無法做 Health Check、Client 可能快取舊 IP。真正的 Load Balancer 在網路層做,更靈活且支援 Health Check。