什么是負(fù)載均衡?負(fù)載均衡在什么情況下使用
2019-07-21 00:00:00 來(lái)源:Infocode藍(lán)暢
什么是負(fù)載均衡?
早期的互聯(lián)網(wǎng),數(shù)據(jù)流量相對(duì)較小,業(yè)務(wù)邏輯簡(jiǎn)單, 1臺(tái)服務(wù)器可以基本滿足需求。伴隨著互聯(lián)網(wǎng)的發(fā)展,數(shù)據(jù)流量越來(lái)越大,業(yè)務(wù)邏輯越來(lái)越復(fù)雜。單臺(tái)機(jī)器的性能問(wèn)題以及單點(diǎn)問(wèn)題凸顯了出來(lái),因此需要多臺(tái)機(jī)器來(lái)進(jìn)行性能的水平擴(kuò)展以及避免單點(diǎn)故障
最初方法是使用DNS做負(fù)載,通過(guò)給客戶端解析不同的IP地址,讓客戶端的流量直接到達(dá)各個(gè)服務(wù)器。但是這種方法有一個(gè)很大的缺點(diǎn)就是延時(shí)性問(wèn)題,在做出調(diào)度策略改變以后,由于DNS各級(jí)節(jié)點(diǎn)的緩存并不會(huì)及時(shí)的在客戶端生效,而且DNS負(fù)載的調(diào)度策略比較簡(jiǎn)單,無(wú)法滿足業(yè)務(wù)需求,因此就出現(xiàn)了負(fù)載均衡。
客戶端的流量首先會(huì)到達(dá)負(fù)載均衡服務(wù)器,由負(fù)載均衡服務(wù)器通過(guò)一定的調(diào)度算法將流量分發(fā)到不同的應(yīng)用服務(wù)器上面,同時(shí)負(fù)載均衡服務(wù)器也會(huì)對(duì)應(yīng)用服務(wù)器做周期性的健康檢查,當(dāng)發(fā)現(xiàn)故障節(jié)點(diǎn)時(shí)便動(dòng)態(tài)的將節(jié)點(diǎn)從應(yīng)用服務(wù)器集群中剔除,以此來(lái)保證應(yīng)用的高可用。
負(fù)載均衡又分為四層負(fù)載均衡和七層負(fù)載均衡。四層負(fù)載均衡工作在OSI模型的傳輸層,主要工作是轉(zhuǎn)發(fā),它在接收到客戶端的流量以后通過(guò)修改數(shù)據(jù)包的地址信息將流量轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器。
七層負(fù)載均衡工作在OSI模型的應(yīng)用層,因?yàn)樗枰馕鰬?yīng)用層流量,所以七層負(fù)載均衡在接到客戶端的流量以后,還需要一個(gè)完整的TCP/IP協(xié)議棧。七層負(fù)載均衡會(huì)與客戶端建立一條完整的連接并將應(yīng)用層的請(qǐng)求流量解析出來(lái),再按照調(diào)度算法選擇一個(gè)應(yīng)用服務(wù)器,并與應(yīng)用服務(wù)器建立另外一條連接將請(qǐng)求發(fā)送過(guò)去,因此七層負(fù)載均衡的主要工作就是代理。
負(fù)載均衡的算法
1、隨機(jī)算法
Random隨機(jī),按權(quán)重設(shè)置隨機(jī)概率。在一個(gè)截面上碰撞的概率高,但調(diào)用量越大分布越均勻,而且按概率使用權(quán)重后也比較均勻,有利于動(dòng)態(tài)調(diào)整提供者權(quán)重。
2、輪詢及加權(quán)輪詢
輪詢(Round Robbin)當(dāng)服務(wù)器群中各服務(wù)器的處理能力相同時(shí),且每筆業(yè)務(wù)處理量差異不大時(shí),最適合使用這種算法。 輪循,按公約后的權(quán)重設(shè)置輪循比率。存在慢的提供者累積請(qǐng)求問(wèn)題,比如:第二臺(tái)機(jī)器很慢,但沒(méi)掛,當(dāng)請(qǐng)求調(diào)到第二臺(tái)時(shí)就卡在那,久而久之,所有請(qǐng)求都卡在調(diào)到第二臺(tái)上。
加權(quán)輪詢(Weighted Round Robbin)為輪詢中的每臺(tái)服務(wù)器附加一定權(quán)重的算法。比如服務(wù)器1權(quán)重1,服務(wù)器2權(quán)重2,服務(wù)器3權(quán)重3,則順序?yàn)?-2-2-3-3-3-1-2-2-3-3-3- ......
3、最小連接及加權(quán)最小連接
最少連接(Least Connections)在多個(gè)服務(wù)器中,與處理連接數(shù)(會(huì)話數(shù))最少的服務(wù)器進(jìn)行通信的算法。即使在每臺(tái)服務(wù)器處理能力各不相同,每筆業(yè)務(wù)處理量也不相同的情況下,也能夠在一定程度上降低服務(wù)器的負(fù)載。
加權(quán)最少連接(Weighted Least Connection)為最少連接算法中的每臺(tái)服務(wù)器附加權(quán)重的算法,該算法事先為每臺(tái)服務(wù)器分配處理連接的數(shù)量,并將客戶端請(qǐng)求轉(zhuǎn)至連接數(shù)最少的服務(wù)器上。
4、哈希算法
普通哈希
一致性哈希一致性Hash,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者。當(dāng)某一臺(tái)提供者掛時(shí),原本發(fā)往該提供者的請(qǐng)求,基于虛擬節(jié)點(diǎn),平攤到其它提供者,不會(huì)引起劇烈變動(dòng)。
5、IP地址散列
通過(guò)管理發(fā)送方IP和目的地IP地址的散列,將來(lái)自同一發(fā)送方的分組(或發(fā)送至同一目的地的分組)統(tǒng)一轉(zhuǎn)發(fā)到相同服務(wù)器的算法。當(dāng)客戶端有一系列業(yè)務(wù)需要處理而必須和一個(gè)服務(wù)器反復(fù)通信時(shí),該算法能夠以流(會(huì)話)為單位,保證來(lái)自相同客戶端的通信能夠一直在同一服務(wù)器中進(jìn)行處理。
6、URL散列
通過(guò)管理客戶端請(qǐng)求URL信息的散列,將發(fā)送至相同URL的請(qǐng)求轉(zhuǎn)發(fā)至同一服務(wù)器的算法。
負(fù)載均衡的實(shí)現(xiàn)
DNS域名解析負(fù)載均衡
利用DNS處理域名解析請(qǐng)求的同時(shí)進(jìn)行負(fù)載均衡是另一種常用的方案。在DNS服務(wù)器中配置多個(gè)A記錄,如:www.mysite.com IN A 114.100.80.1、www.mysite.com IN A 114.100.80.2、www.mysite.com IN A 114.100.80.3.
每次域名解析請(qǐng)求都會(huì)根據(jù)負(fù)載均衡算法計(jì)算一個(gè)不同的IP地址返回,這樣A記錄中配置的多個(gè)服務(wù)器就構(gòu)成一個(gè)集群,并可以實(shí)現(xiàn)負(fù)載均衡。
DNS域名解析負(fù)載均衡的優(yōu)點(diǎn)是將負(fù)載均衡工作交給DNS,省略掉了網(wǎng)絡(luò)管理的麻煩,缺點(diǎn)就是DNS可能緩存A記錄,不受網(wǎng)站控制。事實(shí)上,大型網(wǎng)站總是部分使用DNS域名解析,作為第一級(jí)負(fù)載均衡手段,然后再在內(nèi)部做第二級(jí)負(fù)載均衡。
數(shù)據(jù)鏈路層負(fù)載均衡(LVS)
數(shù)據(jù)鏈路層負(fù)載均衡是指在通信協(xié)議的數(shù)據(jù)鏈路層修改mac地址進(jìn)行負(fù)載均衡。
這種數(shù)據(jù)傳輸方式又稱作三角傳輸模式,負(fù)載均衡數(shù)據(jù)分發(fā)過(guò)程中不修改IP地址,只修改目的的mac地址,通過(guò)配置真實(shí)物理服務(wù)器集群所有機(jī)器虛擬IP和負(fù)載均衡服務(wù)器IP地址一樣,從而達(dá)到負(fù)載均衡,這種負(fù)載均衡方式又稱為直接路由方式(DR).
在上圖中,用戶請(qǐng)求到達(dá)負(fù)載均衡服務(wù)器后,負(fù)載均衡服務(wù)器將請(qǐng)求數(shù)據(jù)的目的mac地址修改為真是WEB服務(wù)器的mac地址,并不修改數(shù)據(jù)包目標(biāo)IP地址,因此數(shù)據(jù)可以正常到達(dá)目標(biāo)WEB服務(wù)器,該服務(wù)器在處理完數(shù)據(jù)后可以經(jīng)過(guò)網(wǎng)管服務(wù)器而不是負(fù)載均衡服務(wù)器直接到達(dá)用戶瀏覽器。
使用三角傳輸模式的鏈路層負(fù)載均衡是目前大型網(wǎng)站所使用的最廣的一種負(fù)載均衡手段。在linux平臺(tái)上最好的鏈路層負(fù)載均衡開(kāi)源產(chǎn)品是LVS(linux virtual server)。
IP負(fù)載均衡
IP負(fù)載均衡:即在網(wǎng)絡(luò)層通過(guò)修改請(qǐng)求目標(biāo)地址進(jìn)行負(fù)載均衡。
用戶請(qǐng)求數(shù)據(jù)包到達(dá)負(fù)載均衡服務(wù)器后,負(fù)載均衡服務(wù)器在操作系統(tǒng)內(nèi)核進(jìn)行獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)負(fù)載均衡算法計(jì)算得到一臺(tái)真實(shí)的WEB服務(wù)器地址,然后將數(shù)據(jù)包的IP地址修改為真實(shí)的WEB服務(wù)器地址,不需要通過(guò)用戶進(jìn)程處理。真實(shí)的WEB服務(wù)器處理完畢后,相應(yīng)數(shù)據(jù)包回到負(fù)載均衡服務(wù)器,負(fù)載均衡服務(wù)器再將數(shù)據(jù)包源地址修改為自身的IP地址發(fā)送給用戶瀏覽器。
這里的關(guān)鍵在于真實(shí)WEB服務(wù)器相應(yīng)數(shù)據(jù)包如何返回給負(fù)載均衡服務(wù)器,一種是負(fù)載均衡服務(wù)器在修改目的IP地址的同時(shí)修改源地址,將數(shù)據(jù)包源地址改為自身的IP,即源地址轉(zhuǎn)換(SNAT),另一種方案是將負(fù)載均衡服務(wù)器同時(shí)作為真實(shí)物理服務(wù)器的網(wǎng)關(guān)服務(wù)器,這樣所有的數(shù)據(jù)都會(huì)到達(dá)負(fù)載均衡服務(wù)器。
IP負(fù)載均衡在內(nèi)核進(jìn)程完成數(shù)據(jù)分發(fā),較反向代理均衡有更好的處理性能。但由于所有請(qǐng)求響應(yīng)的數(shù)據(jù)包都需要經(jīng)過(guò)負(fù)載均衡服務(wù)器,因此負(fù)載均衡的網(wǎng)卡帶寬成為系統(tǒng)的瓶頸。
HTTP重定向負(fù)載均衡
HTTP重定向服務(wù)器是一臺(tái)普通的應(yīng)用服務(wù)器,其唯一的功能就是根據(jù)用戶的HTTP請(qǐng)求計(jì)算一臺(tái)真實(shí)的服務(wù)器地址,并將真實(shí)的服務(wù)器地址寫(xiě)入HTTP重定向響應(yīng)中(響應(yīng)狀態(tài)嗎302)返回給瀏覽器,然后瀏覽器再自動(dòng)請(qǐng)求真實(shí)的服務(wù)器。
這種負(fù)載均衡方案的優(yōu)點(diǎn)是比較簡(jiǎn)單,缺點(diǎn)是瀏覽器需要每次請(qǐng)求兩次服務(wù)器才能拿完成一次訪問(wèn),性能較差;使用HTTP302響應(yīng)碼重定向,可能是搜索引擎判斷為SEO作弊,降低搜索排名。重定向服務(wù)器自身的處理能力有可能成為瓶頸。因此這種方案在實(shí)際使用中并不見(jiàn)多。
反向代理負(fù)載均衡
傳統(tǒng)代理服務(wù)器位于瀏覽器一端,代理瀏覽器將HTTP請(qǐng)求發(fā)送到互聯(lián)網(wǎng)上。而反向代理服務(wù)器則位于網(wǎng)站機(jī)房一側(cè),代理網(wǎng)站web服務(wù)器接收http請(qǐng)求。
反向代理的作用是保護(hù)網(wǎng)站安全,所有互聯(lián)網(wǎng)的請(qǐng)求都必須經(jīng)過(guò)代理服務(wù)器,相當(dāng)于在web服務(wù)器和可能的網(wǎng)絡(luò)攻擊之間建立了一個(gè)屏障。
除此之外,代理服務(wù)器也可以配置緩存加速web請(qǐng)求。當(dāng)用戶第一次訪問(wèn)靜態(tài)內(nèi)容的時(shí)候,靜態(tài)內(nèi)存就被緩存在反向代理服務(wù)器上,這樣當(dāng)其他用戶訪問(wèn)該靜態(tài)內(nèi)容時(shí),就可以直接從反向代理服務(wù)器返回,加速web請(qǐng)求響應(yīng)速度,減輕web服務(wù)器負(fù)載壓力。
另外,反向代理服務(wù)器也可以實(shí)現(xiàn)負(fù)載均衡的功能。
負(fù)載均衡在什么情況下使用?
場(chǎng)景一:應(yīng)用于高訪問(wèn)量的業(yè)務(wù)
如果您的應(yīng)用訪問(wèn)量很高,您可以通過(guò)配置監(jiān)聽(tīng)規(guī)則將流量分發(fā)到不同的ECS實(shí)例上。此外,您可以使用會(huì)話保持功能將同一客戶端的請(qǐng)求轉(zhuǎn)發(fā)到同一臺(tái)后端ECS,提高訪問(wèn)效率。
場(chǎng)景二:橫向擴(kuò)張系統(tǒng)
您可以根據(jù)業(yè)務(wù)發(fā)展的需要,通過(guò)隨時(shí)添加和移除ECS實(shí)例來(lái)擴(kuò)展應(yīng)用系統(tǒng)的服務(wù)能力,適用于各種Web服務(wù)器和App服務(wù)器。
場(chǎng)景三:消除單點(diǎn)故障
您可以在負(fù)載均衡實(shí)例下添加多臺(tái)ECS實(shí)例。當(dāng)其中一部分ECS實(shí)例發(fā)生故障后,負(fù)載均衡會(huì)自動(dòng)屏蔽故障的ECS實(shí)例,將請(qǐng)求分發(fā)給正常運(yùn)行的ECS實(shí)例,保證應(yīng)用系統(tǒng)仍能正常工作。
場(chǎng)景四:同城容災(zāi) (多可用區(qū)容災(zāi))
為了提供更加穩(wěn)定可靠的負(fù)載均衡服務(wù),阿里云負(fù)載均衡已在各地域部署了多可用區(qū)以實(shí)現(xiàn)同地域容災(zāi)。當(dāng)主可用區(qū)出現(xiàn)機(jī)房故障或不可用時(shí),負(fù)載均衡仍然有能力在非常短的時(shí)間內(nèi)(大約30s中斷)切換到另外一個(gè)備可用區(qū)恢復(fù)服務(wù)能力;當(dāng)主可用區(qū)恢復(fù)時(shí),負(fù)載均衡同樣會(huì)自動(dòng)切換到主可用區(qū)提供服務(wù)。
場(chǎng)景五:跨地域容災(zāi)
您可以在不同地域下部署負(fù)載均衡實(shí)例,并分別掛載相應(yīng)地域內(nèi)不同可用區(qū)的ECS。上層利用云解析做智能DNS,將域名解析到不同地域的負(fù)載均衡實(shí)例服務(wù)地址下,可實(shí)現(xiàn)全局負(fù)載均衡。當(dāng)某個(gè)地域出現(xiàn)不可用時(shí),暫停對(duì)應(yīng)解析即可實(shí)現(xiàn)所有用戶訪問(wèn)不受影響。