1. 程式人生 > >常見的負載均衡方式

常見的負載均衡方式

  負載均衡,就是將請求分發到不同伺服器上去響應,讓每個伺服器的負載達到均衡的狀態。下面是幾種常見的負載均衡方式:

1.HTTP重定向負載均衡

HTTP重定向負載均衡有一臺重定向伺服器,它也是一臺普通的伺服器,其唯一的功能就是根據使用者的HTTP請求計算一臺應用叢集中伺服器的地址,並將此地址寫入HTTP重定向響應中返回給使用者。
這種方案實現起來非常簡單,但是需要瀏覽器請求兩次伺服器才能完成。並且重定向伺服器很容易程式設計瓶頸,因為一次重定向返回的過程,也是一次標準HTTP請求,如果叢集內有10臺機器,那HTTP重定向伺服器的流量將是應用伺服器的10倍,如果有100臺估計就要宕機了,所以伸縮效能受到了很大的限制。還有使用302響應碼重定向,不利於網站的SEO。


2.DNS域名解析負載均衡

這是利用DNS處理域名解析請求的同時進行負載均衡處理的一種方案。在DNS中配置多個A記錄,每次域名解析請求都會根據負載均衡演算法計算一個不同的IP地址返回。
DNS域名解析負載均衡的優點是將負載均衡的工作轉交給DNS,省掉了網站管理維護負載均衡伺服器的麻煩,同時還可以使用智慧DNS可以基於地理位置或者ISP來做域名解析,使用者將會得到距離最近或者速度最快的一個伺服器地址,這樣可以加快使用者的訪問速度,改善效能。
但是這種方法也有很大的缺點,DNS是多級解析,每一級都會快取DNS記錄,如果某個伺服器變動了,DNS記錄更新的時間將會很長,這個速度取決於域名服務商。
一般大型網站都會使用DNS域名解析,利用域名解析作為一級負載均衡手段。你可以使用 dig <域名> 的方法檢視某個域名的A記錄,你會發現很多網站會有多條A記錄。


3.反向代理負載均衡

這種方法就是使用反向代理伺服器,它一般在web伺服器前面,這個位置也正好是負載均衡伺服器的位置,所以大多數反向代理伺服器同時也提供負載均衡的功能。
由於web伺服器不直接對外提供訪問,因此web伺服器不需要使用外部IP,而反向代理伺服器則需要配置雙網絡卡和內部外部兩套IP地址。
反向代理伺服器轉發請求是在HTTP協議層面,因此也叫應用層負載均衡,由於應用層在七層網路模型中的第七層,所以一般也稱為七層負載均衡。優點就是和反向代理功伺服器功能整合在一起,部署簡單。缺點是反向代理伺服器是所有請求和響應的中轉站,其效能可能會成為瓶頸。


4.網路層負載均衡

這種方法是在網路層通過修改請求目標地址進行負載均衡,網路層在七層網路層模型的第四層,所以也叫做四層負載均衡,也叫做IP層負載均衡。


請求達到負載均衡伺服器後,由負載均衡伺服器在作業系統核心程序獲取網路資料包,根據負載均衡演算法得到一臺真實web伺服器的地址,然後修改請求的目的地址到這臺真實的web伺服器地址,等到web伺服器處理完成後,響應資料包回到負載均衡伺服器,再將資料包源地址修改為自身的IP(負載均衡伺服器的IP)地址傳送給使用者瀏覽器
這裡關鍵在於真實無力web伺服器響應資料包如何返回給負載均衡伺服器。一種是源地址轉換(SNAT),第二種是負載均衡伺服器作為閘道器伺服器。
網路層的負載均衡在核心程序完成資料轉發,有更好的效能。但是由於響應請求的流量要經過負載均衡伺服器,容易成為瓶頸。


5.資料鏈路層負載均衡

資料鏈路層主要處理 mac 地址,所以使用修改mac地址進行轉發請求。負載均衡資料分發過程中不修改IP地址,只修改mac地址,通過配置真實物理伺服器叢集所有機器虛擬IP和負載均衡伺服器IP地址一致,從而達到不修改資料包的源地址和目的地址就可以進行資料分發的目的。由於web伺服器的伺服器地址IP和資料請求目的IP地址一致,不需要通過負載均衡伺服器進行地址轉換,可將相應資料包直接返回使用者。如果有足夠的公有IP,其實web伺服器也可以直接使用自己的IP響應請求,不過這樣web伺服器必須繫結負載均衡的虛擬IP地址(VIP),才能保證web伺服器收到來自負載均衡傳送的資料包。
這種方式稱作三角傳輸模式,單臂模式,也叫做直接路由方式(DR)。使用DR方式的鏈路層負載均衡是目前大型網站使用最廣的一種負載均衡手段。