面試刷題35:負載均衡有哪幾種實現方式?


今天的問題是:負載均衡是為了解決什么問題?有哪幾種實現負載均衡的方式?

解決的問題

把用戶的請求分發到多台服務器(更多的資源),解決高並發的問題。

硬件負載均衡

成本比較高,並發數在百萬級別,比如F5;

軟件負載均衡

HTTP重定向負載均衡

image.png

負載均衡過程如上圖:

1 請求到負載均衡服務器,

2 根據均衡算法,返回304,重定向到實際負責計算的服務器ip到瀏覽器,

3 然后瀏覽器直接請求實際負責計算的服務器,

4 最后實際計算的服務器響應到客戶端瀏覽器。

缺點:

1,請求經過兩次服務器(負載均衡服務器,實際計算服務器),增加了響應時間。

2,暴露了實際負載的服務器公網ip到瀏覽器,安全性比較低。

java代碼實現:

response.sendRedirct("http://ip/xxxService?parama=a");

DNS負載均衡

image.png
負載均衡過程如上圖:

1, 用戶請求域名,請求到DNS服務器;

2,DNS服務返回解析的IP地址到客戶端;並不暴露到瀏覽器進行重定向;

3,客戶端拿到返回的負責計算的服務器IP,請求服務器;

4,計算服務器返回響應信息;

改進:

1,不用每次都請求負載的ip,可以緩存起來,重復使用,提高性能;

2,dns不用暴露實際計算的服務器ip(不是采用重定向的方式暴露在瀏覽器,而且做了二次負載均衡,內網的IP不會暴露出來),安全性略好;

異地多活采用的這種方式,一個ip解析到不同區域的IP,實現第一層級的負載均衡,然后基於區域ip做二級的負載均衡;

反向代理負載均衡

image.png

負載均衡過程如下:

1,客戶端發起請求到負載均衡服務器,負載均衡服務器根據算法得到負載的IP;

2,負載均衡服務器構造請求,請求內網負載的計算服務器;

3, 計算服務器返回響應結果到負載均衡服務器;

4,負載均衡服務器返回響應結果給到客戶端。

比如nginx, apache

缺點:基於http層做的負載均衡,是一個比較重的協議,效率略低;

一般適用於比較小的集群,10+規模;

IP層的負載均衡

image.png
對網絡層的IP地址進行替換,不需要在http層工作,直接在操作系統內核的IP數據包中替換地址。效率比基於HTTP層的反向代理高。
負載均衡過程:

1,客戶端請求負載均衡服務器;

2,負載均衡服務器修改目的ip為內網機器的IP ;

3, 內網機器計算完畢,響應的IP改為負載均衡服務器ip的內網地址;

4,負載均衡服務器修改響應的IP為自己的外網IP ,返回結果給到客戶端;

缺點:

請求和響應度需要經過負載均衡服務器進行ip層替換,響應數據會成為后期的瓶頸。

數據鏈路層負載均衡

image.png
解決響應數據體量過大效率低的問題。
通過修改數據鏈路層的mac地址,ip使用的是虛擬IP,來實現負載均衡。

負載均衡過程:

1,客戶端請求負載均衡服務器;

2,負載均衡服務器替換mac地址為計算服務器,Ip為負載均衡服務器ip;

3, 計算服務器直接響應數據到客戶端;

這種負載均衡方式吞吐量最高,大型互聯網公司都是采用這種負載均衡方式。

LVS負載均衡是結合了IP層和數據鏈路層的負載均衡方式。linux通過配置可以實現這兩種負載均衡方式。

小結

本篇從負載均衡出發的目的出發,即為了應對高並發,把請求分攤到更多的服務器上。

從簡單到復雜,依次介紹了HTTP重定向實現負載均衡,DNS實現負載均衡,反向代理實現負載均衡,IP層實現負載均衡,數據鏈路層實現負載均衡。一圖勝千言,給出了負載均衡的過程。

一般常用的是DNS和數據鏈路層負載均衡。

image.png

原創不易,點贊關注支持一下吧!轉載請注明出處,讓我們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟件編程知識和程序員發展職業之路,歡迎關注,我整理了這些年編程學習的各種資源,關注公眾號‘李福春持續輸出’,發送'學習資料'分享給你!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM