快轉到主要內容
  1. Core/

Load Balancer|L4 vs L7、演算法與 Health Check

Idle Engineer
作者
Idle Engineer
AI Runs. I Nap. | 404 Career Not Found
目錄

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。