一、負載均衡分類
1. DNS 負載均衡
思路是 DNS 解析同一個域名時可以傳回不同的IP位址。
用來實作地理級别的均衡,例如,北方使用者通路北京機房、南方使用者通路深圳機房。
優點:
- 簡單,成本低,直接交給DNS伺服器處理即可,無需自己維護。
- 就近通路,提升通路速度。
缺點:
- DNS緩存時間較長,更新不及時。
- DNS控制權在域名商那裡,無法根據業務特點定制擴充。
2. 硬體負載均衡
通過單獨的硬體裝置實作負載均衡,典型裝置例如 F5、A10。
優點:
- 功能強大,支援各級負載均衡,支援各種負載均衡算法,支援全局負載均衡。
- 性能強大,可以支援100萬以上的并發。
- 穩定性高。
- 支援安全防護,除了負載均衡的功能,還有防火牆、防DDoS攻擊等安全功能。
缺點:
- 昂貴,價格幾萬甚至數十萬。
- 擴充能力差。
3. 軟體負載均衡
通過軟體實作,例如我們熟悉的 Nginx(7層負載均衡) 和 LVS(4層負載均衡)。
和硬體負載均衡相比,性能差了很多,Nginx 能支援5萬/秒,而F5是百萬級,但價格也便宜了很多。
優點:
- 簡單
- 便宜
- 靈活
缺點:
- 性能一般
- 沒有防火牆等安全功能
負載均衡的典型架構
DNS、硬體、軟體這3中方式可以組合使用,基本原則:
- DNS方式用于實作地理級别的負載均衡。
- 硬體方式用于實作叢集級别的負載均衡。
- 軟體方式用于實作機器級别的負載均衡。
二、負載均衡算法
1. 輪詢
負載均衡系統接收到請求後,按照順序輪流配置設定給伺服器。
這種方式非常簡單,隻管按順序配置設定,至于伺服器目前負載情況、硬體能力等都不關心,隻要伺服器還能工作,就可以配置設定,除非伺服器挂了。
2. 權重輪詢
是輪詢方式的一種改進,輪詢方式是無差别配置設定,但實際伺服器的處理能力是有差異的,是以需要差別對待。
為伺服器設定權值,權值高的就多配置設定點。
3. 負載最低優先
将任務配置設定給目前負載最低的伺服器。
例如 LVS 可以根據“連接配接數”判斷伺服器狀态,NGINX 可以根據“HTTP請求數”來判斷。
這種方式比輪詢進階很多,可以感覺伺服器的狀态了,但其複雜度也大大提高了,要收集統計伺服器的負載資訊。
4. 性能最優
優先将任務配置設定給處理速度最快的伺服器,來達到最快響應用戶端的目的。
此方式也是感覺伺服器的狀态,标準是響應時間。
需要收集分析伺服器的響應時間,這個工作本身消耗也不小,是以采用采樣的方式,不統計所有任務的響應時間,統計一個周期(例如 10秒/1分鐘/5分鐘)内的狀态。
優缺點與 負載最低優先 相同。
5. Hash
對請求中的關鍵資訊(如IP)進行hash計算,hash值相同的請求配置設定到同一台伺服器,例如業務中希望同一使用者的請求都由同一台伺服器來處理。