概念
LB,load balance負載均衡,華爲雲也有對應的配套設施,叫ELB,就是elastic load balance,彈性負載均衡。就是將請求通過算法分攤到多個下游。
HTTP重定向負載均衡
來自用戶的HTTP請求到達服務器,使用redirect,看到瀏覽器network顯示的的302狀態碼,就知道是重定向了。這個在早期的java開發中比較常見。response中有個「location」屬性就是指向的最終地址。但是最後指向的地址(ip 或 域名)也要暴露在外網,不安全。
DNS負載均衡
DNS其實也是服務器,是一個軟件系統,用於將域名解析到具體的IP上,DNS可以將域名指向更近的IP(就近原則)
DNS和HTTP重定向不同,不用每次請求都進行DNS域名解析,第一次解析後會緩存在本機中一段時間,這樣就沒有性能問題。
使用HttpClient、OkHttp 等遠程Http調用工具要注意,DNS緩存會留在內存裏,如果切換了DNS指向的IP,有一定的機率會訪問失敗,因爲緩存中域名指向的還是老IP。
反向代理負載均衡
工作在HTTP協議層之上的。HTTP協議相對來說比較重,效率比較低,所以反向代理負載均衡通常用在小規模的互聯網系統上。
IP 負載均衡
網絡層負載均衡,用戶的請求到達負載均衡服務器後,負載均衡服務器會對網絡數據包的IP地址進行轉換,
數據鏈路層負載均衡
可以解決響應數據量大而導致的負載均衡服務器輸出帶寬不足的問題。並不會修改數據包的IP地址,而是通過修改數據鏈路層裏的網卡mac地址在數據鏈路層實現負載均衡的。因爲IP沒改,所以響應數據不經過負載均衡,直接到瀏覽器,減少損耗。
Linux上實現IP負載均衡和鏈路層負載均衡的技術是LVS,目前LVS的功能已經集成到Linux中了。可以直接配置實現這兩種負載均衡。
負載均衡常見算法
- 輪詢
- 隨機
- 最少連接
七層負載均衡
基於應用層URL信息的負載均衡
四層負載均衡的優勢是性能高,七層負載均衡的優勢是功能強。 我們所說的“四層”、“七層”,指的是經典的OSI 七層模型中第四層傳輸層和第七層應用層。 常見的七層負載均衡有nginx,其實就是使用軟件,可以具體到接口,request傳參做定製化
Nginx
在1.9版本 增加stream模塊,可以支持四層負載均衡。不過還是七層用的多些。
WAF
常見的WAF(Web Application FireWall)一般也是由 Nginx+其他組件構建的,有用url級別的防護能力(DDOS)
四層負載均衡
基於IP和端口的負載均衡
“四層”的意思是說這些工作模式的共同特點是維持着同一個 TCP 連接,而不是說它只工作在第四層。單純只處理第四層(傳輸層,可以改寫 TCP、UDP 等協議的內容和端口)的數據無法做到負載均衡的轉發。so 一般四層就是做代理透傳的。
F5
基於硬件,昂貴
LVS
HAproxy
除了四層也可以在七層做負載均衡,靈活性高。
總結
在高併發架構設計中,一般是四層七層一起使用,即LVS+Nginx。大公司DNS負載均衡是必上的。
some from 鳳凰架構,架構師的自我修養