雲端負載平衡器(cloud load balancer)
想像一家熱門餐廳,訂位只有一支電話號碼,但實際帶位的接待員有十幾位。來電者都撥那支號碼;一個總機悄悄把每通電話轉給任何一位有空的接待員。客人從不需要知道有幾位接待員,餐廳也能增減接待員而不必更動公布的號碼。雲端負載平衡器就是網路流量的那個總機:用戶端連到單一公布位址,平衡器把這些連線分散到一群相同的後端伺服器上。
具體來說,公布的位址是一個虛擬 IP(VIP)——屬於負載平衡服務、而非任何單一伺服器的位址。當請求抵達 VIP 時,負載平衡器挑一台健康的後端(用輪詢、最少連線、對用戶端做一致性雜湊、或其他政策),把連線轉給它;它也會做健康檢查,並停止把流量送給故障的伺服器。平衡器有不同風味:第四層平衡器只用 IP 位址與埠來決策(快、與協定無關),而第七層平衡器會讀應用資料——例如把 /images 的 HTTP 請求路由到一群、把 /api 路由到另一群。在資料中心裡,這些往往不是單一盒子,而是跑在許多機器上、橫向擴展的軟體服務。
為什麼重要:負載平衡器讓雲端服務能水平擴展、又有韌性。它們讓你能用一隊便宜伺服器服務數百萬使用者、靠增加後端來加容量、並在某台伺服器當機時讓使用者毫無察覺地撐過去——VIP 只是不再把流量路由給那台死掉的。誠實的提醒:負載平衡器本身絕不能變成單點故障(所以它通常會被複製,常用任播或 ECMP 擺在前面),而且「平衡」是盡力而為——第四層雜湊仍可能把一陣倒楣的繁重請求送到同一台後端。也要注意:負載平衡與虛擬交換器是兩回事:平衡器把用戶端連線分散到各伺服器,而虛擬交換器把伺服器「內」的各 VM 連起來。
一個網站公布單一 VIP,203.0.113.10。它後面坐著八台用私有位址的相同網頁伺服器。負載平衡器把進來的 TCP 連線分散到八台;當第 3 號伺服器的健康檢查失敗時,它被移出這群,其餘七台吸收它的份額——而訪客毫無察覺。
一個公開的 VIP、許多後端、自動容錯移轉。
負載平衡器不是防火牆,本身也不會保護流量。它的工作是分散連線、繞過故障的後端;它必須被複製(或用任播/ECMP 擺在前面),才不會變成它本該防止的那個單點故障。