四層和七層負(fù)載均衡的區(qū)別
負(fù)載均衡設(shè)備也常被稱為"四到七層交換機(jī)",那么四層和七層兩者到底區(qū)別在哪里?
第一,技術(shù)原理上的區(qū)別。
所謂四層負(fù)載均衡,也就是主要通過報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見的TCP為例,負(fù)載均衡設(shè)備在接收到第一個(gè)來自客戶端的SYN 請求時(shí),即通過上述方式選擇一個(gè)最佳的服務(wù)器,并對報(bào)文中目標(biāo)IP地址進(jìn)行修改(改為后端服務(wù)器IP),直接轉(zhuǎn)發(fā)給該服務(wù)器。
TCP的連接建立,即三次握手是客戶端和服務(wù)器直接建立的,負(fù)載均衡設(shè)備只是起到一個(gè)類似路由器的轉(zhuǎn)發(fā)動(dòng)作。在某些部署情況下,為保證服務(wù)器回包可以正確返回給負(fù)載均衡設(shè)備,在轉(zhuǎn)發(fā)報(bào)文的同時(shí)可能還會對報(bào)文原來的源地址進(jìn)行修改。

所謂七層負(fù)載均衡,也稱為“內(nèi)容交換”,也就是主要通過報(bào)文中的真正有意義的應(yīng)用層內(nèi)容,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見的TCP為例,負(fù)載均衡設(shè)備如果要根據(jù)真正的應(yīng)用層內(nèi)容再選擇服務(wù)器,只能先代理最終的服務(wù)器和客戶端建立連接(三次握手)后,才可能接受到客戶端發(fā)送的真正應(yīng)用層內(nèi)容的報(bào)文,然后再根據(jù)該報(bào)文中的特定字段,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。負(fù)載均衡設(shè)備在這種情況下,更類似于一個(gè)代理服務(wù)器。
負(fù)載均衡和前端的客戶端以及后端的服務(wù)器會分別建立TCP連接。所以從這個(gè)技術(shù)原理上來看,七層負(fù)載均衡明顯的對負(fù)載均衡設(shè)備的要求更高,處理七層的能力也必然會低于四層模式的部署方式。那么,為什么還需要七層負(fù)載均衡呢?
第二,應(yīng)用場景的需求。
七層應(yīng)用負(fù)載的好處,是使得整個(gè)網(wǎng)絡(luò)更"智能化", 參考我們之前的另外一篇專門針對HTTP應(yīng)用的優(yōu)化的介紹 ,就可以基本上了解這種方式的優(yōu)勢所在。例如訪問一個(gè)網(wǎng)站的用戶流量,可以通過七層的方式,將對圖片類的請求轉(zhuǎn)發(fā)到特定的圖片服務(wù)器并可以使用緩存技術(shù);
將對文字類的請求可以轉(zhuǎn)發(fā)到特定的文字服務(wù)器并可以使用壓縮技術(shù)。當(dāng)然這只是七層應(yīng)用的一個(gè)小案例,從技術(shù)原理上,這種方式可以對客戶端的請求和服務(wù)器的響應(yīng)進(jìn)行任意意義上的修改,極大的提升了應(yīng)用系統(tǒng)在網(wǎng)絡(luò)層的靈活性。很多在后臺,(例如Nginx或者Apache)上部署的功能可以前移到負(fù)載均衡設(shè)備上,例如客戶請求中的Header重寫,服務(wù)器響應(yīng)中的關(guān)鍵字過濾或者內(nèi)容插入等功能。
另外一個(gè)常常被提到功能就是安全性。網(wǎng)絡(luò)中最常見的SYN Flood攻擊,即黑客控制眾多源客戶端,使用虛假IP地址對同一目標(biāo)發(fā)送SYN攻擊,通常這種攻擊會大量發(fā)送SYN報(bào)文,耗盡服務(wù)器上的相關(guān)資源,以達(dá)到Denial of Service(DoS)的目的。
從技術(shù)原理上也可以看出,四層模式下這些SYN攻擊都會被轉(zhuǎn)發(fā)到后端的服務(wù)器上;而七層模式下這些SYN攻擊自然在負(fù)載均衡設(shè)備上就截止,不會影響后臺服務(wù)器的正常運(yùn)營。
另外負(fù)載均衡設(shè)備可以在七層層面設(shè)定多種策略,過濾特定報(bào)文,例如SQL Injection等應(yīng)用層面的特定攻擊手段,從應(yīng)用層面進(jìn)一步提高系統(tǒng)整體安全。
現(xiàn)在的7層負(fù)載均衡,主要還是著重于應(yīng)用廣泛的HTTP協(xié)議,所以其應(yīng)用范圍主要是眾多的網(wǎng)站或者內(nèi)部信息平臺等基于B/S開發(fā)的系統(tǒng)。 4層負(fù)載均衡則對應(yīng)其他TCP應(yīng)用,例如基于C/S開發(fā)的ERP等系統(tǒng)。
第三,七層應(yīng)用需要考慮的問題。
1:是否真的必要,七層應(yīng)用的確可以提高流量智能化,同時(shí)必不可免的帶來設(shè)備配置復(fù)雜,負(fù)載均衡壓力增高以及故障排查上的復(fù)雜性等問題。在設(shè)計(jì)系統(tǒng)時(shí)需要考慮四層七層同時(shí)應(yīng)用的混雜情況。
2:是否真的可以提高安全性。
例如SYN Flood攻擊,七層模式的確將這些流量從服務(wù)器屏蔽,但負(fù)載均衡設(shè)備本身要有強(qiáng)大的抗DDoS能力,否則即使服務(wù)器正常而作為中樞調(diào)度的負(fù)載均衡設(shè)備故障也會導(dǎo)致整個(gè)應(yīng)用的崩潰。
3:是否有足夠的靈活度。
七層應(yīng)用的優(yōu)勢是可以讓整個(gè)應(yīng)用的流量智能化,但是負(fù)載均衡設(shè)備需要提供完善的七層功能,滿足客戶根據(jù)不同情況的基于應(yīng)用的調(diào)度。
最簡單的一個(gè)考核就是能否取代后臺Nginx或者Apache等服務(wù)器上的調(diào)度功能。能夠提供一個(gè)七層應(yīng)用開發(fā)接口的負(fù)載均衡設(shè)備,可以讓客戶根據(jù)需求任意設(shè)定功能,才真正有可能提供強(qiáng)大的靈活性和智能性。