負載均衡的目的就是讓請求到達不同的伺服器上。一次請求到伺服器之間,有那麼多環節,因此可以實現的方法有很多種,實際應用中不外乎以下幾種方式。
HTTP 重定向負載均衡
HTTP 重定向負載均衡有一臺重定向伺服器,它也是一臺普通的伺服器,其唯一的功能就是根據使用者的 HTTP 請求計算一臺應用叢集中伺服器的地址,並將此地址寫入 HTTP 重定向響應中返回給使用者。
這種方案實現起來非常簡單,但是需要瀏覽器請求兩次伺服器才能完成。並且重定向伺服器很容易程式設計瓶頸,因為一次重定向返回的過程,也是一次標準 HTTP 請求,如果叢集內有10臺機器,那 HTTP 重定向伺服器的流量將是應用伺服器的10倍,如果有100臺估計就要當機了,所以伸縮效能受到了很大的限制。還有使用302響應碼重定向,不利於網站的SEO。
DNS域名解析負載均衡
這是利用 DNS 處理域名解析請求的同時進行負載均衡處理的一種方案。在 DNS 中配置多個 A 記錄,每次域名解析請求都會根據負載均衡演算法計算一個不同的 IP 地址返回。
DNS 域名解析負載均衡的優點是將負載均衡的工作轉交給 DNS,省掉了網站管理維護負載均衡伺服器的麻煩,同時還可以使用智慧 DNS 可以基於地理位置或者 ISP 來做域名解析,使用者將會得到距離最近或者速度最快的一個伺服器地址,這樣可以加快使用者的訪問速度,改善效能。
但是這種方法也有很大的缺點,DNS 是多級解析,每一級都會快取 DNS 記錄,如果某個伺服器變動了,DNS 記錄更新的時間將會很長,這個速度取決於域名服務商。
一般大型網站都會使用 DNS 域名解析,利用域名解析作為一級負載均衡手段。你可以使用 dig <域名> 的方法檢視某個域名的A記錄,你會發現很多網站會有多條 A 記錄。
反向代理負載均衡
這種方法就是使用反向代理伺服器,它一般在 web 伺服器前面,這個位置也正好是負載均衡伺服器的位置,所以大多數反向代理伺服器同時也提供負載均衡的功能。
由於 web 伺服器不直接對外提供訪問,因此 web 伺服器不需要使用外部 IP,而反向代理伺服器則需要配置雙網路卡和內部外部兩套 IP 地址。
反向代理伺服器轉發請求是在 HTTP 協議層面,因此也叫應用層負載均衡,由於應用層在七層網路模型中的第七層,所以一般也稱為七層負載均衡。優點就是和反向代理伺服器功能整合在一起,部署簡單。缺點是反向代理伺服器是所有請求和響應的中轉站,其效能可能會成為瓶頸。
網路層負載均衡
這種方法是在網路層通過修改請求目標地址進行負載均衡,網路層在七層網路層模型的第四層,所以也叫做四層負載均衡,也叫做 IP 層負載均衡。
請求達到負載均衡伺服器後,由負載均衡伺服器在作業系統核心程式獲取網路資料包,根據負載均衡演算法得到一臺真實 web 伺服器的地址,然後修改請求的目的地址到這臺真實的web伺服器地址,等到 web 伺服器處理完成後,響應資料包回到負載均衡伺服器,再將資料包源地址修改為自身的 IP(負載均衡伺服器的 IP)地址傳送給使用者瀏覽器。
這裡關鍵在於真實 web 伺服器響應資料包如何返回給負載均衡伺服器。一種是源地址轉換(SNAT),第二種是負載均衡伺服器作為閘道器伺服器。
網路層的負載均衡在核心程式完成資料轉發,有更好的效能。但是由於響應請求的流量要經過負載均衡伺服器,容易成為瓶頸。
資料鏈路層負載均衡
資料鏈路層主要處理 mac 地址,所以使用修改 mac 地址進行轉發請求。
負載均衡資料分發過程中不修改 IP 地址,只修改 mac 地址,通過配置真實物理伺服器叢集所有機器虛擬IP和負載均衡伺服器IP地址一致,從而達到不修改資料包的源地址和目的地址就可以進行資料分發的目的。
由於 web 伺服器的伺服器地址 IP 和資料請求目的 IP 地址一致,不需要通過負載均衡伺服器進行地址轉換,可將相應資料包直接返回使用者。
如果有足夠的公有 IP,其實 web 伺服器也可以直接使用自己的IP響應請求,不過這樣 web 伺服器必須繫結負載均衡的虛擬 IP 地址(VIP),才能保證 web 伺服器收到來自負載均衡傳送的資料包。
這種方式稱作三角傳輸模式,單臂模式,也叫做直接路由方式(DR)。使用 DR 方式的鏈路層負載均衡是目前大型網站使用最廣的一種負載均衡手段。
本作品採用《CC 協議》,轉載必須註明作者和本文連結