負載均衡的幾種手段

原文鏈接:https://blog.csdn.net/bpb_cx/article/details/82771168

1)http重定向

HTTP重定向服務器就是一個普通的服務器,當用戶訪問時,其會根據一定的算法得到服務器集羣的一個真實服務器的IP地址,將其放在HTTP響應頭中,響應狀態碼爲(302),當用戶瀏覽器接收到這個響應時,會將得到的真實服務器的IP地址提出並重新訪問。如上圖所示,當用戶訪問域名時通過DNS解析得到114.100.20.200,然後訪問114.100.20.200,也就是HTTP重定向服務器,響應重定向至114.100.20.203,用戶瀏覽器再重新訪問。

缺點: 
1. 這種方式需要用戶瀏覽器訪問兩次,性能較差 
2. HTTP重定向服務器會的處理能力會成爲負載均衡的瓶頸 
3. HTTP重定向返回302,可能會使搜索引擎判定爲SEO作弊,降低搜索排名

2)dns域名解析(DNS:通過域名獲取ip地址的手段)

當我們通過域名訪問網站時,需要通過DNS服務器得到服務器的IP地址,我們可以在DNS服務器上設置一定的算法,每次得到不同的IP地址來進行訪問從而實現負載均衡

如圖,當用戶訪問www.apusapp.com時,這個域名對應了多個IP地址,通過DNS服務器解析會得到一個IP地址(可以看到,得到的這個IP地址,是服務器集羣中一個服務器的IP地址),用戶訪問這個IP地址來達到真實的服務。

優點:

將負載均衡的工作丟給了DNS服務器去做,省去了網站管理人員的維護工作
對於真實地址的服務器,不需要做任何的配置
簡單易用,成本低,而且方便靈活
服務器可以放在任何的地方
同時,DNS服務還可以做基於地理位置的解析,可以讓一個距離最近的服務器的IP地址放回,提高性能
缺點:

1.DNS服務是有多級的(之後有時間寫一個詳細的DNS服務介紹)

 

大致上來說,首先是在瀏覽器中有一個DNS緩存,如果找不到就在本機地址的hosts文件中查找,再找不到就去路由器緩存中查找。然後是本地DNS服務器,如果沒有,就是根服務器,頂級服務器,權限域名服務器等等等

總之,在每一級都有可能緩存這DNS的對應關係,所以有可能當某一臺真實服務器下線之後,修改了DNS服務器的記錄,但在生效之前還有一段時間,在這段期間,其IP地址已經不可用了,通過域名進行訪問時還是會訪問到這個IP地址。會訪問失敗
2.DNS服務器和真實服務器是完全分開的,所以DNS的負載均衡不能監測到真是服務器當前的運行狀態,其負載均衡的效果不是很好

3.可能會造成額外的網絡問題。爲了使本DNS服務器和其他DNS服務器及時交互,保證DNS數據及時更新,使地址能隨機分配,一般都要將DNS的刷新時間設置的較小,但太小將會使DNS流量大增造成額外的網絡問題。

事實上,大型網站都將DNS負載均衡作爲第一級的負載均衡手段,在服務器內部再進行第二級的負載均衡,也就是說,我們通過DNS得到的IP地址並不是真實服務器的IP地址,而是內部負載均衡服務器的IP地址。

3)反向代理

代理與反向代理:VPN服務就是我們常用的一種代理(正向代理),用戶將請教交給代理服務器,代理服務器訪問網站獲取數據,之後代理服務器再將數據返還給用戶。在這個過程中,應用服務器並不知道用戶的存在。只知道代理瀏覽器的訪問。 
反向代理是指在服務器端的代理,代理服務器接收用戶的請求,再轉發給真實服務器,之後再返回給代理服務器再給用戶,在這個過程中,用戶並不知道真實服務器的存在。

反向代理服務器管理了一組服務器,當用戶訪問時,代理服務器根據負載均衡算法將請求轉發到真實服務器,真實服務器也通過反向代理服務器返還數據。內部服務器不對外部提供服務,所以不需要外部IP,而反向代理服務器需要兩個網卡,一個IP用於外部用戶訪問使用,另外一個用於內部使用。 

如上圖所示,當用戶發起訪問,請求訪問的ip地址是114.100.20.200,到達反向代理服務器時,根據負載均衡算法得到一個真實服務器的IP地址,並將用戶請求轉發到該服務器上,當真實服務器處理完之後將數據返回到反向代理服務器。反相代理服務器再將該響應的內容返回給用戶。

優點:

反向代理服務器位於應用層,負載均衡方案和反向代理服務器集成在了一起,部署簡單
缺點:

反向代理服務器用戶處理所有的請求和響應,其性能可能成爲服務器集羣的瓶頸
有名Nginx就是反向代理服務
4)IP層負載均衡

IP包結構

 

其中,可能看到有源地址和目的地址兩項,這兩項就是用來做IP層的負載均衡的關鍵。我們就是通過修改這兩個地址來達到“轉發”目的 

如上圖所示,當用戶發起請求時(源地址爲200.110.50.1),訪問負載均衡服務器(目的地址爲114.100.20.200),負載均衡服務器在內核進程獲取網路數據包,根據一定的算法得到一個真實服務器的IP地址,其後將IP數據包的目的地址修改爲該IP地址(192.168.1.1),之後就會將數據包發送到該真實服務器上去,之後再向負載均衡服務器返回數據,負載均衡服務器將源地址修改爲114.100.20.200後返回給用戶瀏覽器。

(這裏的關鍵在於真實WEB服務器相應數據包如何返回給負載均衡服務器,一種是負載均衡服務器在修改目的IP地址的同時修改源地址,將數據包源地址改爲自身的IP,即源地址轉換(SNAT),另一種方案是將負載均衡服務器同時作爲真實物理服務器的網關服務器,這樣所有的數據都會到達負載均衡服務器。)

這個方法的關鍵就是因爲只能在負載均衡服務器出修改源地址和目的地址,所以在真實服務器處理完之後要想辦法將數據返回給負載均衡服務器而不是用戶瀏覽器。 
比如,當用戶發出請求時,目的地址是114.100.20.200,源地址是200.110.50.1,到達負載均衡服務器後,將目的地址該位192.168.1.1,源地址還是200.110.50.1,所以當真實服務器處理完之後的數據無法回到負載均衡服務器

解決方法:

提供兩個網卡,負載均衡服務器就有內部IP和外部IP兩個IP,當請求到達負載均衡服務器時,修改目的地址,也修改源地址,將源地址修改爲負載均衡服務器的內部IP,這樣的話,真實服務器處理後的響應就會再次回到負載均衡服務器
將負載均衡服務器作爲真實服務器集羣的網關服務器,這樣的話所有的請求響應都要經過網關服務器
優點:

IP負載均衡在內核進程完成數據分發,處理性能得到了很好的提高。
缺點:

由於所有請求和響應都要經過負載均衡服務器,集羣的最大響應數據吞吐量將受到負載均衡服務器網卡帶寬的限制,對於提供下載服務或者視頻服務等需要大量傳輸數據的站點而言,這是難以滿足需求的
5)鏈路層的負載均衡

MAC地址:mac地址是與網卡相關,其編號只與網卡生產廠商和流水號有關,基本上可以作爲每臺電腦的“身份證”。以太網中數據幀之間是通過MAC尋址來到達對應的計算機網卡或者路由的

鏈路層的負載均衡通過修改幀數據包中的MAC地址來達到轉發的目的。這種方法,所有的真實服務器和負載均衡服務器都有相同的IP地址,不用修改IP數據包的目的地址和源地址,只通過修改MAC地址就可以達到效果,因爲請求的IP地址和實際處理的真實服務器的IP地址一致,所以不需要回到負載均衡服務器進行地址交換,可以將響應直接發會給用戶瀏覽器,避免了負載均衡服務器成爲傳輸瓶頸的可能

Linux中的LVS(Linux Virtual Server)就是鏈路層負載均衡的開源產品
————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章