一篇讀懂分布式架構(gòu)下的負(fù)載均衡技術(shù):分類(lèi)、原理、算法、常見(jiàn)方案等
Posted on 2019-04-29 14:39 Jack Jiang 閱讀(189) 評(píng)論(0) 編輯 收藏1、引言
關(guān)于“負(fù)載均衡”的解釋?zhuān)俣仍~條里:負(fù)載均衡,英文叫Load Balance,意思就是將請(qǐng)求或者數(shù)據(jù)分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,共同完成工作任務(wù)。
負(fù)載均衡(Load Balance)建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
負(fù)載均衡有兩方面的含義:
1)首先,大量的并發(fā)訪問(wèn)或數(shù)據(jù)流量分擔(dān)到多臺(tái)節(jié)點(diǎn)設(shè)備上分別處理,減少用戶(hù)等待響應(yīng)的時(shí)間;
2)其次,單個(gè)重負(fù)載的運(yùn)算分擔(dān)到多臺(tái)節(jié)點(diǎn)設(shè)備上做并行處理,每個(gè)節(jié)點(diǎn)設(shè)備處理結(jié)束后,將結(jié)果匯總,返回給用戶(hù),系統(tǒng)處理能力得到大幅度提高。
簡(jiǎn)單來(lái)說(shuō)就是:
1)其一是將大量的并發(fā)處理轉(zhuǎn)發(fā)給后端多個(gè)節(jié)點(diǎn)處理,減少工作響應(yīng)時(shí)間;
2)其二是將單個(gè)繁重的工作轉(zhuǎn)發(fā)給后端多個(gè)節(jié)點(diǎn)處理,處理完再返回給負(fù)載均衡中心,再返回給用戶(hù)。
目前負(fù)載均衡技術(shù)大多數(shù)是用于提高諸如在Web服務(wù)器、FTP服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器上的Internet服務(wù)器程序的可用性和可伸縮性。
總之,它的目的就通過(guò)調(diào)度集群,達(dá)到最佳化資源使用,最大化吞吐率,最小化響應(yīng)時(shí)間,避免單點(diǎn)過(guò)載的問(wèn)題。
內(nèi)容概述:本文將從負(fù)載均衡技術(shù)的分類(lèi)、技術(shù)原理、常見(jiàn)實(shí)現(xiàn)算法、常用方案等入手,為您詳細(xì)講解負(fù)載均衡技術(shù)的方方面面。這其中,四層和七層負(fù)載均衡技術(shù)最為常用,它們也是本文介紹的重點(diǎn)。
內(nèi)容點(diǎn)評(píng):對(duì)于IM或消息推送應(yīng)用的開(kāi)發(fā)者來(lái)說(shuō),本文所介紹的傳統(tǒng)負(fù)載均衡技術(shù),可能對(duì)于IM等即時(shí)通訊分布式場(chǎng)景來(lái)說(shuō),沒(méi)有辦法直接套用。原因是IM這類(lèi)socket長(zhǎng)連接場(chǎng)景,所處的網(wǎng)絡(luò)通信層級(jí)比較低,而且即時(shí)通訊相關(guān)的技術(shù)實(shí)現(xiàn)跟具體的業(yè)務(wù)邏輯緊密相關(guān),因而無(wú)法像HTTP短連接這樣基于標(biāo)準(zhǔn)化的負(fù)載均衡方法來(lái)實(shí)現(xiàn)。但本文所介紹的負(fù)載均衡原理、算法和一些方案實(shí)現(xiàn),仍然可以為IM或消息推送應(yīng)用的開(kāi)發(fā)者帶來(lái)一些借鑒和參考意義,值得深 入一讀。
補(bǔ)充:另一篇《快速理解高性能HTTP服務(wù)端的負(fù)載均衡技術(shù)原理》,也講述了負(fù)載均衡方面的知識(shí),有興趣也可以閱讀之。
(本文同步發(fā)布于:http://www.52im.net/thread-2494-1-1.html)
2、相關(guān)文章
深入閱讀以下文章,有助于您更好地理解本篇內(nèi)容:
《網(wǎng)絡(luò)編程懶人入門(mén)(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)》
《網(wǎng)絡(luò)編程懶人入門(mén)(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)》 《網(wǎng)絡(luò)編程懶人入門(mén)(三):快速理解TCP協(xié)議一篇就夠》 《騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面》 《快速理解高性能HTTP服務(wù)端的負(fù)載均衡技術(shù)原理》 《新手入門(mén):零基礎(chǔ)理解大型分布式架構(gòu)的演進(jìn)歷史、技術(shù)原理、最佳實(shí)踐》 《通俗易懂:基于集群的移動(dòng)端IM接入層負(fù)載均衡方案分享》 《IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課:正確理解前置HTTP SSO單點(diǎn)登陸接口的原理》
3、負(fù)載均衡分類(lèi)
TCP/IP協(xié)議的OSI模型:
(本圖高清版,請(qǐng)從《計(jì)算機(jī)網(wǎng)絡(luò)通訊協(xié)議關(guān)系圖(中文珍藏版)[附件下載]》一文中下載之)
根據(jù)OSI模型可將負(fù)載均衡分為:
1)二層負(fù)載均衡(一般是用虛擬mac地址方式,外部對(duì)虛擬MAC地址請(qǐng)求,負(fù)載均衡接收后分配后端實(shí)際的MAC地址響應(yīng));
2)三層負(fù)載均衡(一般采用虛擬IP地址方式,外部對(duì)虛擬的ip地址請(qǐng)求,負(fù)載均衡接收后分配后端實(shí)際的IP地址響應(yīng));
3)四層負(fù)載均衡(在三次負(fù)載均衡的基礎(chǔ)上,用 ip+port 接收請(qǐng)求,再轉(zhuǎn)發(fā)到對(duì)應(yīng)的機(jī)器);
4)七層負(fù)載均衡(根據(jù)虛擬的url或是IP,主機(jī)名接收請(qǐng)求,再轉(zhuǎn)向相應(yīng)的處理服務(wù)器)。
這其中,最常見(jiàn)的是四層和七層負(fù)載均衡,也是本文接下來(lái)介紹的重點(diǎn)。
當(dāng)客戶(hù)端發(fā)起請(qǐng)求,會(huì)經(jīng)過(guò)層層的封裝,發(fā)給服務(wù)器,服務(wù)器收到請(qǐng)求后經(jīng)過(guò)層層的解析,獲取到對(duì)應(yīng)的內(nèi)容。
下圖是一個(gè)典型的HTTP請(qǐng)求分層傳遞原理:
4、二層負(fù)載均衡
二層負(fù)債均衡是基于數(shù)據(jù)鏈路層的負(fù)債均衡,即讓負(fù)債均衡服務(wù)器和業(yè)務(wù)服務(wù)器綁定同一個(gè)虛擬IP(即VIP),客戶(hù)端直接通過(guò)這個(gè)VIP進(jìn)行請(qǐng)求。
那么如何區(qū)分相同IP下的不同機(jī)器呢?沒(méi)錯(cuò),通過(guò)MAC物理地址,每臺(tái)機(jī)器的MAC物理地址都不一樣,當(dāng)負(fù)載均衡服務(wù)器接收到請(qǐng)求之后,通過(guò)改寫(xiě)HTTP報(bào)文中以太網(wǎng)首部的MAC地址,按照某種算法將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)機(jī)器上,實(shí)現(xiàn)負(fù)載均衡。
這種方式負(fù)載方式雖然控制粒度比較粗,但是優(yōu)點(diǎn)是負(fù)載均衡服務(wù)器的壓力會(huì)比較小,負(fù)載均衡服務(wù)器只負(fù)責(zé)請(qǐng)求的進(jìn)入,不負(fù)責(zé)請(qǐng)求的響應(yīng)(響應(yīng)是有后端業(yè)務(wù)服務(wù)器直接響應(yīng)給客戶(hù)端),吞吐量會(huì)比較高。
5、三層負(fù)載均衡
三層負(fù)載均衡是基于網(wǎng)絡(luò)層的負(fù)載均衡,通俗的說(shuō)就是按照不同機(jī)器不同IP地址進(jìn)行轉(zhuǎn)發(fā)請(qǐng)求到不同的機(jī)器上。
這種方式雖然比二層負(fù)載多了一層,但從控制的顆粒度上看,并沒(méi)有比二層負(fù)載均衡更有優(yōu)勢(shì),并且,由于請(qǐng)求的進(jìn)出都要經(jīng)過(guò)負(fù)載均衡服務(wù)器,會(huì)對(duì)其造成比較大的壓力,性能也比二層負(fù)載均衡要差。
6、四層負(fù)載均衡
四層的負(fù)載均衡就是基于IP+端口的負(fù)載均衡:在三層負(fù)載均衡的基礎(chǔ)上,通過(guò)發(fā)布三層的IP地址(VIP),然后加四層的端口號(hào),來(lái)決定哪些流量需要做負(fù)載均衡,對(duì)需要處理的流量進(jìn)行NAT處理,轉(zhuǎn)發(fā)至后臺(tái)服務(wù)器,并記錄下這個(gè)TCP或者UDP的流量是由哪臺(tái)服務(wù)器處理的,后續(xù)這個(gè)連接的所有流量都同樣轉(zhuǎn)發(fā)到同一臺(tái)服務(wù)器處理。
對(duì)應(yīng)的負(fù)載均衡器稱(chēng)為四層交換機(jī)(L4 switch),主要分析IP層及TCP/UDP層,實(shí)現(xiàn)四層負(fù)載均衡。
此種負(fù)載均衡器不理解應(yīng)用協(xié)議(如HTTP/FTP/MySQL等等),常見(jiàn)例子有:LVS,F(xiàn)5。
7、七層負(fù)載均衡
七層的負(fù)載均衡就是基于虛擬的URL或主機(jī)IP的負(fù)載均衡:在四層負(fù)載均衡的基礎(chǔ)上(沒(méi)有四層是絕對(duì)不可能有七層的),再考慮應(yīng)用層的特征,比如同一個(gè)Web服務(wù)器的負(fù)載均衡,除了根據(jù)VIP加80端口辨別是否需要處理的流量,還可根據(jù)七層的URL、瀏覽器類(lèi)別、語(yǔ)言來(lái)決定是否要進(jìn)行負(fù)載均衡。
舉個(gè)例子,如果你的Web服務(wù)器分成兩組,一組是中文語(yǔ)言的,一組是英文語(yǔ)言的,那么七層負(fù)載均衡就可以當(dāng)用戶(hù)來(lái)訪問(wèn)你的域名時(shí),自動(dòng)辨別用戶(hù)語(yǔ)言,然后選擇對(duì)應(yīng)的語(yǔ)言服務(wù)器組進(jìn)行負(fù)載均衡處理。
對(duì)應(yīng)的負(fù)載均衡器稱(chēng)為七層交換機(jī)(L7 switch),除了支持四層負(fù)載均衡以外,還有分析應(yīng)用層的信息,如HTTP協(xié)議URI或Cookie信息,實(shí)現(xiàn)七層負(fù)載均衡。此種負(fù)載均衡器能理解應(yīng)用協(xié)議,常見(jiàn)例子有: haproxy,MySQL Proxy。
8、四層負(fù)載均衡和七層負(fù)載均衡的區(qū)別
8.1 技術(shù)原理上的區(qū)別
所謂四層負(fù)載均衡,也就是主要通過(guò)報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見(jiàn)的TCP為例,負(fù)載均衡設(shè)備在接收到第一個(gè)來(lái)自客戶(hù)端的SYN 請(qǐng)求時(shí),即通過(guò)上述方式選擇一個(gè)最佳的服務(wù)器,并對(duì)報(bào)文中目標(biāo)IP地址進(jìn)行修改(改為后端服務(wù)器IP),直接轉(zhuǎn)發(fā)給該服務(wù)器。TCP的連接建立,即三次握手是客戶(hù)端和服務(wù)器直接建立的,負(fù)載均衡設(shè)備只是起到一個(gè)類(lèi)似路由器的轉(zhuǎn)發(fā)動(dòng)作。在某些部署情況下,為保證服務(wù)器回包可以正確返回給負(fù)載均衡設(shè)備,在轉(zhuǎn)發(fā)報(bào)文的同時(shí)可能還會(huì)對(duì)報(bào)文原來(lái)的源地址進(jìn)行修改。
所謂七層負(fù)載均衡,也稱(chēng)為“內(nèi)容交換”,也就是主要通過(guò)報(bào)文中的真正有意義的應(yīng)用層內(nèi)容,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見(jiàn)的TCP為例,負(fù)載均衡設(shè)備如果要根據(jù)真正的應(yīng)用層內(nèi)容再選擇服務(wù)器,只能先代理最終的服務(wù)器和客戶(hù)端建立連接(三次握手)后,才可能接受到客戶(hù)端發(fā)送的真正應(yīng)用層內(nèi)容的報(bào)文,然后再根據(jù)該報(bào)文中的特定字段,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。負(fù)載均衡設(shè)備在這種情況下,更類(lèi)似于一個(gè)代理服務(wù)器。負(fù)載均衡和前端的客戶(hù)端以及后端的服務(wù)器會(huì)分別建立TCP連接。所以從這個(gè)技術(shù)原理上來(lái)看,七層負(fù)載均衡明顯的對(duì)負(fù)載均衡設(shè)備的要求更高,處理七層的能力也必然會(huì)低于四層模式的部署方式。
8.2 應(yīng)用場(chǎng)景的需求
七層應(yīng)用負(fù)載的好處,是使得整個(gè)網(wǎng)絡(luò)更"智能化"。參考這篇《利用負(fù)載均衡優(yōu)化和加速HTTP應(yīng)用》,就可以基本上了解這種方式的優(yōu)勢(shì)所在。
例如訪問(wèn)一個(gè)網(wǎng)站的用戶(hù)流量,可以通過(guò)七層的方式,將對(duì)圖片類(lèi)的請(qǐng)求轉(zhuǎn)發(fā)到特定的圖片服務(wù)器并可以使用緩存技術(shù);將對(duì)文字類(lèi)的請(qǐng)求可以轉(zhuǎn)發(fā)到特定的文字服務(wù)器并可以使用壓縮技術(shù)。
當(dāng)然這只是七層應(yīng)用的一個(gè)小案例,從技術(shù)原理上,這種方式可以對(duì)客戶(hù)端的請(qǐng)求和服務(wù)器的響應(yīng)進(jìn)行任意意義上的修改,極大的提升了應(yīng)用系統(tǒng)在網(wǎng)絡(luò)層的靈活性。很多在后臺(tái),例如Nginx或者Apache上部署的功能可以前移到負(fù)載均衡設(shè)備上,例如客戶(hù)請(qǐng)求中的Header重寫(xiě),服務(wù)器響應(yīng)中的關(guān)鍵字過(guò)濾或者內(nèi)容插入等功能。
另外一個(gè)常常被提到功能就是安全性。網(wǎng)絡(luò)中最常見(jiàn)的SYN Flood攻擊,即黑客控制眾多源客戶(hù)端,使用虛假I(mǎi)P地址對(duì)同一目標(biāo)發(fā)送SYN攻擊,通常這種攻擊會(huì)大量發(fā)送SYN報(bào)文,耗盡服務(wù)器上的相關(guān)資源,以達(dá)到Denial of Service(DoS)的目的。
從技術(shù)原理上也可以看出,四層模式下這些SYN攻擊都會(huì)被轉(zhuǎn)發(fā)到后端的服務(wù)器上;而七層模式下這些SYN攻擊自然在負(fù)載均衡設(shè)備上就截止,不會(huì)影響后臺(tái)服務(wù)器的正常運(yùn)營(yíng)。另外負(fù)載均衡設(shè)備可以在七層層面設(shè)定多種策略,過(guò)濾特定報(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)部信息平臺(tái)等基于B/S開(kāi)發(fā)的系統(tǒng)。 4層負(fù)載均衡則對(duì)應(yīng)其他TCP應(yīng)用,例如IM即時(shí)通訊、實(shí)時(shí)消息推送等socket長(zhǎng)連接系統(tǒng)。
8.3 七層應(yīng)用需要考慮的問(wèn)題
七層應(yīng)用需要考慮的問(wèn)題:
1)是否真的必要:七層應(yīng)用的確可以提高流量智能化,同時(shí)必不可免的帶來(lái)設(shè)備配置復(fù)雜,負(fù)載均衡壓力增高以及故障排查上的復(fù)雜性等問(wèn)題。在設(shè)計(jì)系統(tǒng)時(shí)需要考慮四層七層同時(shí)應(yīng)用的混雜情況。
2)是否真的可以提高安全性:例如SYN Flood攻擊,七層模式的確將這些流量從服務(wù)器屏蔽,但負(fù)載均衡設(shè)備本身要有強(qiáng)大的抗DDoS能力,否則即使服務(wù)器正常而作為中樞調(diào)度的負(fù)載均衡設(shè)備故障也會(huì)導(dǎo)致整個(gè)應(yīng)用的崩潰。
3)是否有足夠的靈活度:七層應(yīng)用的優(yōu)勢(shì)是可以讓整個(gè)應(yīng)用的流量智能化,但是負(fù)載均衡設(shè)備需要提供完善的七層功能,滿(mǎn)足客戶(hù)根據(jù)不同情況的基于應(yīng)用的調(diào)度。最簡(jiǎn)單的一個(gè)考核就是能否取代后臺(tái)Nginx或者Apache等服務(wù)器上的調(diào)度功能。能夠提供一個(gè)七層應(yīng)用開(kāi)發(fā)接口的負(fù)載均衡設(shè)備,可以讓客戶(hù)根據(jù)需求任意設(shè)定功能,才真正有可能提供強(qiáng)大的靈活性和智能性。
8.4 總體對(duì)比
四層負(fù)載均衡和七層負(fù)載均衡技術(shù)的總體對(duì)比:
1)智能性:七層負(fù)載均衡由于具備OIS七層的所有功能,所以在處理用戶(hù)需求上能更加靈活,從理論上講,七層模型能對(duì)用戶(hù)的所有跟服務(wù)端的請(qǐng)求進(jìn)行修改。例如對(duì)文件header添加信息,根據(jù)不同的文件類(lèi)型進(jìn)行分類(lèi)轉(zhuǎn)發(fā)。四層模型僅支持基于網(wǎng)絡(luò)層的需求轉(zhuǎn)發(fā),不能修改用戶(hù)請(qǐng)求的內(nèi)容。
2)安全性:七層負(fù)載均衡由于具有OSI模型的全部功能,能更容易抵御來(lái)自網(wǎng)絡(luò)的攻擊;四層模型從原理上講,會(huì)直接將用戶(hù)的請(qǐng)求轉(zhuǎn)發(fā)給后端節(jié)點(diǎn),無(wú)法直接抵御網(wǎng)絡(luò)攻擊。
3)復(fù)雜度:四層模型一般比較簡(jiǎn)單的架構(gòu),容易管理,容易定位問(wèn)題;七層模型架構(gòu)比較復(fù)雜,通常也需要考慮結(jié)合四層模型的混用情況,出現(xiàn)問(wèn)題定位比較復(fù)雜。
4)效率比:四層模型基于更底層的設(shè)置,通常效率更高,但應(yīng)用范圍有限;七層模型需要更多的資源損耗,在理論上講比四層模型有更強(qiáng)的功能,現(xiàn)在的實(shí)現(xiàn)更多是基于http應(yīng)用。
9、負(fù)載均衡技術(shù)的常見(jiàn)具體應(yīng)用方案
目前有許多不同的負(fù)載均衡技術(shù)實(shí)現(xiàn)用以滿(mǎn)足不同的應(yīng)用需求,下面從負(fù)載均衡所采用的設(shè)備對(duì)象(軟/硬件負(fù)載均衡),應(yīng)用的OSI網(wǎng)絡(luò)層次(網(wǎng)絡(luò)層次上的負(fù)載均衡),及應(yīng)用的地理結(jié)構(gòu)(本地/全局負(fù)載均衡)等來(lái)分類(lèi)。
9.1 軟/硬件負(fù)載均衡
軟件負(fù)載均衡解決方案:是指在一臺(tái)或多臺(tái)服務(wù)器相應(yīng)的操作系統(tǒng)上安裝一個(gè)或多個(gè)附加軟件來(lái)實(shí)現(xiàn)負(fù)載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl,Keepalive+ipvs等,它的優(yōu)點(diǎn)是基于特定環(huán)境,配置簡(jiǎn)單,使用靈活,成本低廉,可以滿(mǎn)足一般的負(fù)載均衡需求。軟件解決方案缺點(diǎn)也較多,因?yàn)槊颗_(tái)服務(wù)器上安裝額外的軟件運(yùn)行會(huì)消耗系統(tǒng)不定量的資源,越是功能強(qiáng)大的模塊,消耗得越多,所以當(dāng)連接請(qǐng)求特別大的時(shí)候,軟件本身會(huì)成為服務(wù)器工作成敗的一個(gè)關(guān)鍵;軟件可擴(kuò)展性并不是很好,受到操作系統(tǒng)的限制;由于操作系統(tǒng)本身的Bug,往往會(huì)引起安全問(wèn)題。
硬件負(fù)載均衡解決方案:是直接在服務(wù)器和外部網(wǎng)絡(luò)間安裝負(fù)載均衡設(shè)備,這種設(shè)備通常是一個(gè)獨(dú)立于系統(tǒng)的硬件,我們稱(chēng)之為負(fù)載均衡器。由于專(zhuān)門(mén)的設(shè)備完成專(zhuān)門(mén)的任務(wù),獨(dú)立于操作系統(tǒng),整體性能得到大量提高,加上多樣化的負(fù)載均衡策略,智能化的流量管理,可達(dá)到最佳的負(fù)載均衡需求。負(fù)載均衡器有多種多樣的形式,除了作為獨(dú)立意義上的負(fù)載均衡器外,有些負(fù)載均衡器集成在交換設(shè)備中,置于服務(wù)器與Internet鏈接之間,有些則以?xún)蓧K網(wǎng)絡(luò)適配器將這一功能集成到PC中,一塊連接到Internet上,一塊連接到后端服務(wù)器群的內(nèi)部網(wǎng)絡(luò)上。
軟件負(fù)載均衡與硬件負(fù)載均衡的對(duì)比如下。
1)軟件負(fù)載均衡:
優(yōu)點(diǎn):是需求環(huán)境明確,配置簡(jiǎn)單,操作靈活,成本低廉,效率不高,能滿(mǎn)足普通的企業(yè)需求;
缺點(diǎn):依賴(lài)于系統(tǒng),增加資源開(kāi)銷(xiāo);軟件的優(yōu)劣決定環(huán)境的性能;系統(tǒng)的安全,軟件的穩(wěn)定性均會(huì)影響到整個(gè)環(huán)境的安全。
2)硬件負(fù)載均衡:
優(yōu)點(diǎn):是獨(dú)立于系統(tǒng),整體性能大量提升,在功能、性能上優(yōu)于軟件方式;智能的流量管理,多種策略可選,能達(dá)到最佳的負(fù)載均衡效果;
缺點(diǎn):是價(jià)格昂貴。
9.2 本地/全局負(fù)載均衡
負(fù)載均衡從其應(yīng)用的地理結(jié)構(gòu)上分為本地負(fù)載均衡(Local Load Balance)和全局負(fù)載均衡(Global Load Balance,也叫地域負(fù)載均衡),本地負(fù)載均衡是指對(duì)本地的服務(wù)器群做負(fù)載均衡,全局負(fù)載均衡是指對(duì)分別放置在不同的地理位置、有不同網(wǎng)絡(luò)結(jié)構(gòu)的服務(wù)器群間作負(fù)載均衡。
本地負(fù)載均衡能有效地解決數(shù)據(jù)流量過(guò)大、網(wǎng)絡(luò)負(fù)荷過(guò)重的問(wèn)題,并且不需花費(fèi)昂貴開(kāi)支購(gòu)置性能卓越的服務(wù)器,充分利用現(xiàn)有設(shè)備,避免服務(wù)器單點(diǎn)故障造成數(shù)據(jù)流量的損失。其有靈活多樣的均衡策略把數(shù)據(jù)流量合理地分配給服務(wù)器群內(nèi)的服務(wù)器共同負(fù)擔(dān)。即使是再給現(xiàn)有服務(wù)器擴(kuò)充升級(jí),也只是簡(jiǎn)單地增加一個(gè)新的服務(wù)器到服務(wù)群中,而不需改變現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)、停止現(xiàn)有的服務(wù)。
全局負(fù)載均衡主要用于在一個(gè)多區(qū)域擁有自己服務(wù)器的站點(diǎn),為了使全球用戶(hù)只以一個(gè)IP地址或域名就能訪問(wèn)到離自己最近的服務(wù)器,從而獲得最快的訪問(wèn)速度,也可用于子公司分散站點(diǎn)分布廣的大公司通過(guò)Intranet(企業(yè)內(nèi)部互聯(lián)網(wǎng))來(lái)達(dá)到資源統(tǒng)一合理分配的目的。
9.3 網(wǎng)絡(luò)層次上的負(fù)載均衡
針對(duì)網(wǎng)絡(luò)上負(fù)載過(guò)重的不同瓶頸所在,從網(wǎng)絡(luò)的不同層次入手,我們可以采用相應(yīng)的負(fù)載均衡技術(shù)來(lái)解決現(xiàn)有問(wèn)題。
隨著帶寬增加,數(shù)據(jù)流量不斷增大,網(wǎng)絡(luò)核心部分的數(shù)據(jù)接口將面臨瓶頸問(wèn)題,原有的單一線路將很難滿(mǎn)足需求,而且線路的升級(jí)又過(guò)于昂貴甚至難以實(shí)現(xiàn),這時(shí)就可以考慮采用鏈路聚合(Trunking)技術(shù)。
鏈路聚合技術(shù)(第二層負(fù)載均衡)將多條物理鏈路當(dāng)作一條單一的聚合邏輯鏈路使用,網(wǎng)絡(luò)數(shù)據(jù)流量由聚合邏輯鏈路中所有物理鏈路共同承擔(dān),由此在邏輯上增大了鏈路的容量,使其能滿(mǎn)足帶寬增加的需求。
現(xiàn)代負(fù)載均衡技術(shù)通常操作于網(wǎng)絡(luò)的第四層或第七層。第四層負(fù)載均衡將一個(gè)Internet上合法注冊(cè)的IP地址映射為多個(gè)內(nèi)部服務(wù)器的IP地址,對(duì)每次 TCP連接請(qǐng)求動(dòng)態(tài)使用其中一個(gè)內(nèi)部IP地址,達(dá)到負(fù)載均衡的目的。在第四層交換機(jī)中,此種均衡技術(shù)得到廣泛的應(yīng)用,一個(gè)目標(biāo)地址是服務(wù)器群VIP(虛擬 IP,Virtual IP address)連接請(qǐng)求的數(shù)據(jù)包流經(jīng)交換機(jī),交換機(jī)根據(jù)源端和目的IP地址、TCP或UDP端口號(hào)和一定的負(fù)載均衡策略,在服務(wù)器IP和VIP間進(jìn)行映射,選取服務(wù)器群中最好的服務(wù)器來(lái)處理連接請(qǐng)求。
第七層負(fù)載均衡控制應(yīng)用層服務(wù)的內(nèi)容,提供了一種對(duì)訪問(wèn)流量的高層控制方式,適合對(duì)HTTP服務(wù)器群的應(yīng)用。第七層負(fù)載均衡技術(shù)通過(guò)檢查流經(jīng)的HTTP報(bào)頭,根據(jù)報(bào)頭內(nèi)的信息來(lái)執(zhí)行負(fù)載均衡任務(wù)。
第七層負(fù)載均衡優(yōu)點(diǎn)表現(xiàn)在如下幾個(gè)方面:
1)通過(guò)對(duì)HTTP報(bào)頭的檢查,可以檢測(cè)出HTTP400、500和600系列的錯(cuò)誤信息,因而能透明地將連接請(qǐng)求重新定向到另一臺(tái)服務(wù)器,避免應(yīng)用層故障;
2)可根據(jù)流經(jīng)的數(shù)據(jù)類(lèi)型(如判斷數(shù)據(jù)包是圖像文件、壓縮文件或多媒體文件格式等),把數(shù)據(jù)流量引向相應(yīng)內(nèi)容的服務(wù)器來(lái)處理,增加系統(tǒng)性能;
3)能根據(jù)連接請(qǐng)求的類(lèi)型,如是普通文本、圖象等靜態(tài)文檔請(qǐng)求,還是asp、cgi等的動(dòng)態(tài)文檔請(qǐng)求,把相應(yīng)的請(qǐng)求引向相應(yīng)的服務(wù)器來(lái)處理,提高系統(tǒng)的性能及安全性。
第七層負(fù)載均衡缺點(diǎn)表現(xiàn)在如下幾個(gè)方面:
1)第七層負(fù)載均衡受到其所支持的協(xié)議限制(一般只有HTTP),這樣就限制了它應(yīng)用的廣泛性;
2)第七層負(fù)載均衡檢查HTTP報(bào)頭會(huì)占用大量的系統(tǒng)資源,勢(shì)必會(huì)影響到系統(tǒng)的性能,在大量連接請(qǐng)求的情況下,負(fù)載均衡設(shè)備自身容易成為網(wǎng)絡(luò)整體性能的瓶頸。
10、常用的負(fù)載均衡算法
常用的負(fù)載均衡算法分為兩類(lèi):
1)一種是靜態(tài)負(fù)載均衡;
2)一種是動(dòng)態(tài)負(fù)載均衡。
10.1 靜態(tài)均衡算法
【10.1.1】輪詢(xún)法:
將請(qǐng)求按順序輪流地分配到每個(gè)節(jié)點(diǎn)上,不關(guān)心每個(gè)節(jié)點(diǎn)實(shí)際的連接數(shù)和當(dāng)前的系統(tǒng)負(fù)載。
優(yōu)點(diǎn):簡(jiǎn)單高效,易于水平擴(kuò)展,每個(gè)節(jié)點(diǎn)滿(mǎn)足字面意義上的均衡;
缺點(diǎn):沒(méi)有考慮機(jī)器的性能問(wèn)題,根據(jù)木桶最短木板理論,集群性能瓶頸更多的會(huì)受性能差的服務(wù)器影響。
【10.1.2】隨機(jī)法:
將請(qǐng)求隨機(jī)分配到各個(gè)節(jié)點(diǎn)。由概率統(tǒng)計(jì)理論得知,隨著客戶(hù)端調(diào)用服務(wù)端的次數(shù)增多,其實(shí)際效果越來(lái)越接近于平均分配,也就是輪詢(xún)的結(jié)果。
優(yōu)缺點(diǎn)和輪詢(xún)相似。
【10.1.3】源地址哈希法:
源地址哈希的思想是根據(jù)客戶(hù)端的IP地址,通過(guò)哈希函數(shù)計(jì)算得到一個(gè)數(shù)值,用該數(shù)值對(duì)服務(wù)器節(jié)點(diǎn)數(shù)進(jìn)行取模,得到的結(jié)果便是要訪問(wèn)節(jié)點(diǎn)序號(hào)。采用源地址哈希法進(jìn)行負(fù)載均衡,同一IP地址的客戶(hù)端,當(dāng)后端服務(wù)器列表不變時(shí),它每次都會(huì)落到到同一臺(tái)服務(wù)器進(jìn)行訪問(wèn)。
優(yōu)點(diǎn):相同的IP每次落在同一個(gè)節(jié)點(diǎn),可以人為干預(yù)客戶(hù)端請(qǐng)求方向,例如灰度發(fā)布;
缺點(diǎn):如果某個(gè)節(jié)點(diǎn)出現(xiàn)故障,會(huì)導(dǎo)致這個(gè)節(jié)點(diǎn)上的客戶(hù)端無(wú)法使用,無(wú)法保證高可用。當(dāng)某一用戶(hù)成為熱點(diǎn)用戶(hù),那么會(huì)有巨大的流量涌向這個(gè)節(jié)點(diǎn),導(dǎo)致冷熱分布不均衡,無(wú)法有效利用起集群的性能。所以當(dāng)熱點(diǎn)事件出現(xiàn)時(shí),一般會(huì)將源地址哈希法切換成輪詢(xún)法。
【10.1.4】加權(quán)輪詢(xún)法:
不同的后端服務(wù)器可能機(jī)器的配置和當(dāng)前系統(tǒng)的負(fù)載并不相同,因此它們的抗壓能力也不相同。給配置高、負(fù)載低的機(jī)器配置更高的權(quán)重,讓其處理更多的請(qǐng);而配置低、負(fù)載高的機(jī)器,給其分配較低的權(quán)重,降低其系統(tǒng)負(fù)載,加權(quán)輪詢(xún)能很好地處理這一問(wèn)題,并將請(qǐng)求順序且按照權(quán)重分配到后端。
加權(quán)輪詢(xún)算法要生成一個(gè)服務(wù)器序列,該序列中包含n個(gè)服務(wù)器。n是所有服務(wù)器的權(quán)重之和。在該序列中,每個(gè)服務(wù)器的出現(xiàn)的次數(shù),等于其權(quán)重值。并且,生成的序列中,服務(wù)器的分布應(yīng)該盡可能的均勻。比如序列{a, a, a, a, a, b, c}中,前五個(gè)請(qǐng)求都會(huì)分配給服務(wù)器a,這就是一種不均勻的分配方法,更好的序列應(yīng)該是:{a, a, b, a, c, a, a}。
優(yōu)點(diǎn):可以將不同機(jī)器的性能問(wèn)題納入到考量范圍,集群性能最優(yōu)最大化;
缺點(diǎn):生產(chǎn)環(huán)境復(fù)雜多變,服務(wù)器抗壓能力也無(wú)法精確估算,靜態(tài)算法導(dǎo)致無(wú)法實(shí)時(shí)動(dòng)態(tài)調(diào)整節(jié)點(diǎn)權(quán)重,只能粗糙優(yōu)化。
【10.1.5】加權(quán)隨機(jī)法:
與加權(quán)輪詢(xún)法一樣,加權(quán)隨機(jī)法也根據(jù)后端機(jī)器的配置,系統(tǒng)的負(fù)載分配不同的權(quán)重。不同的是,它是按照權(quán)重隨機(jī)請(qǐng)求后端服務(wù)器,而非順序。
【10.1.6】鍵值范圍法:
根據(jù)鍵的范圍進(jìn)行負(fù)債,比如0到10萬(wàn)的用戶(hù)請(qǐng)求走第一個(gè)節(jié)點(diǎn)服務(wù)器,10萬(wàn)到20萬(wàn)的用戶(hù)請(qǐng)求走第二個(gè)節(jié)點(diǎn)服務(wù)器……以此類(lèi)推。
優(yōu)點(diǎn):容易水平擴(kuò)展,隨著用戶(hù)量增加,可以增加節(jié)點(diǎn)而不影響舊數(shù)據(jù);
缺點(diǎn):容易負(fù)債不均衡,比如新注冊(cè)的用戶(hù)活躍度高,舊用戶(hù)活躍度低,那么壓力就全在新增的服務(wù)節(jié)點(diǎn)上,舊服務(wù)節(jié)點(diǎn)性能浪費(fèi)。而且也容易單點(diǎn)故障,無(wú)法滿(mǎn)足高可用。
(注:以上所提到的單點(diǎn)故障,都可以用主從方式來(lái)解決,從節(jié)點(diǎn)監(jiān)聽(tīng)主節(jié)點(diǎn)心跳,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)死亡,從節(jié)點(diǎn)切換成主節(jié)點(diǎn)頂替上去。這里可以思考一個(gè)問(wèn)題,怎么設(shè)計(jì)集群主從可以最大程度上降低成本)
10.2 動(dòng)態(tài)負(fù)債均衡算法
【10.2.1】最小連接數(shù)法:
根據(jù)每個(gè)節(jié)點(diǎn)當(dāng)前的連接情況,動(dòng)態(tài)地選取其中當(dāng)前積壓連接數(shù)最少的一個(gè)節(jié)點(diǎn)處理當(dāng)前請(qǐng)求,盡可能地提高后端服務(wù)的利用效率,將請(qǐng)求合理地分流到每一臺(tái)服務(wù)器。俗稱(chēng)閑的人不能閑著,大家一起動(dòng)起來(lái)。
優(yōu)點(diǎn):動(dòng)態(tài),根據(jù)節(jié)點(diǎn)狀況實(shí)時(shí)變化;
缺點(diǎn):提高了復(fù)雜度,每次連接斷開(kāi)需要進(jìn)行計(jì)數(shù);
實(shí)現(xiàn):將連接數(shù)的倒數(shù)當(dāng)權(quán)重值。
【10.2.2】最快響應(yīng)速度法:
根據(jù)請(qǐng)求的響應(yīng)時(shí)間,來(lái)動(dòng)態(tài)調(diào)整每個(gè)節(jié)點(diǎn)的權(quán)重,將響應(yīng)速度快的服務(wù)節(jié)點(diǎn)分配更多的請(qǐng)求,響應(yīng)速度慢的服務(wù)節(jié)點(diǎn)分配更少的請(qǐng)求,俗稱(chēng)能者多勞,扶貧救弱。
優(yōu)點(diǎn):動(dòng)態(tài),實(shí)時(shí)變化,控制的粒度更細(xì),跟靈敏;
缺點(diǎn):復(fù)雜度更高,每次需要計(jì)算請(qǐng)求的響應(yīng)速度;
實(shí)現(xiàn):可以根據(jù)響應(yīng)時(shí)間進(jìn)行打分,計(jì)算權(quán)重。
【10.2.3】觀察模式法:
觀察者模式是綜合了最小連接數(shù)和最快響應(yīng)度,同時(shí)考量這兩個(gè)指標(biāo)數(shù),進(jìn)行一個(gè)權(quán)重的分配。
附錄:更多架構(gòu)設(shè)計(jì)方案的文章精選
[1] 有關(guān)IM架構(gòu)設(shè)計(jì)的文章:
《淺談IM系統(tǒng)的架構(gòu)設(shè)計(jì)》
《簡(jiǎn)述移動(dòng)端IM開(kāi)發(fā)的那些坑:架構(gòu)設(shè)計(jì)、通信協(xié)議和客戶(hù)端》
《一套海量在線用戶(hù)的移動(dòng)端IM架構(gòu)設(shè)計(jì)實(shí)踐分享(含詳細(xì)圖文)》
《一套原創(chuàng)分布式即時(shí)通訊(IM)系統(tǒng)理論架構(gòu)方案》
《從零到卓越:京東客服即時(shí)通訊系統(tǒng)的技術(shù)架構(gòu)演進(jìn)歷程》
《蘑菇街即時(shí)通訊/IM服務(wù)器開(kāi)發(fā)之架構(gòu)選擇》
《騰訊QQ1.4億在線用戶(hù)的技術(shù)挑戰(zhàn)和架構(gòu)演進(jìn)之路PPT》
《微信后臺(tái)基于時(shí)間序的海量數(shù)據(jù)冷熱分級(jí)架構(gòu)設(shè)計(jì)實(shí)踐》
《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(jiǎn)(演講全文)》
《如何解讀《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(jiǎn)》》
《快速裂變:見(jiàn)證微信強(qiáng)大后臺(tái)架構(gòu)從0到1的演進(jìn)歷程(一)》
《17年的實(shí)踐:騰訊海量產(chǎn)品的技術(shù)方法論》
《移動(dòng)端IM中大規(guī)模群消息的推送如何保證效率、實(shí)時(shí)性?》
《現(xiàn)代IM系統(tǒng)中聊天消息的同步和存儲(chǔ)方案探討》
《IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(二):如何設(shè)計(jì)大量圖片文件的服務(wù)端存儲(chǔ)架構(gòu)?》
《IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(三):快速理解服務(wù)端數(shù)據(jù)庫(kù)讀寫(xiě)分離原理及實(shí)踐建議》
《IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(四):正確理解HTTP短連接中的Cookie、Session和Token》
《WhatsApp技術(shù)實(shí)踐分享:32人工程團(tuán)隊(duì)創(chuàng)造的技術(shù)神話》
《微信朋友圈千億訪問(wèn)量背后的技術(shù)挑戰(zhàn)和實(shí)踐總結(jié)》
《王者榮耀2億用戶(hù)量的背后:產(chǎn)品定位、技術(shù)架構(gòu)、網(wǎng)絡(luò)方案等》
《IM系統(tǒng)的MQ消息中間件選型:Kafka還是RabbitMQ?》
《騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面》
《以微博類(lèi)應(yīng)用場(chǎng)景為例,總結(jié)海量社交系統(tǒng)的架構(gòu)設(shè)計(jì)步驟》
《快速理解高性能HTTP服務(wù)端的負(fù)載均衡技術(shù)原理》
《子彈短信光鮮的背后:網(wǎng)易云信首席架構(gòu)師分享億級(jí)IM平臺(tái)的技術(shù)實(shí)踐》
《知乎技術(shù)分享:從單機(jī)到2000萬(wàn)QPS并發(fā)的Redis高性能緩存實(shí)踐之路》
《IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(五):通俗易懂,正確理解并用好MQ消息隊(duì)列》
《微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(算法原理篇)》
《微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(容災(zāi)方案篇)》
《新手入門(mén):零基礎(chǔ)理解大型分布式架構(gòu)的演進(jìn)歷史、技術(shù)原理、最佳實(shí)踐》
《一套高可用、易伸縮、高并發(fā)的IM群聊、單聊架構(gòu)方案設(shè)計(jì)實(shí)踐》
《阿里技術(shù)分享:深度揭秘阿里數(shù)據(jù)庫(kù)技術(shù)方案的10年變遷史》
《阿里技術(shù)分享:阿里自研金融級(jí)數(shù)據(jù)庫(kù)OceanBase的艱辛成長(zhǎng)之路》
>> 更多同類(lèi)文章 ……
[2] 更多其它架構(gòu)設(shè)計(jì)相關(guān)文章:
《騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面》
《快速理解高性能HTTP服務(wù)端的負(fù)載均衡技術(shù)原理》
《子彈短信光鮮的背后:網(wǎng)易云信首席架構(gòu)師分享億級(jí)IM平臺(tái)的技術(shù)實(shí)踐》
《知乎技術(shù)分享:從單機(jī)到2000萬(wàn)QPS并發(fā)的Redis高性能緩存實(shí)踐之路》
《新手入門(mén):零基礎(chǔ)理解大型分布式架構(gòu)的演進(jìn)歷史、技術(shù)原理、最佳實(shí)踐》
《阿里技術(shù)分享:深度揭秘阿里數(shù)據(jù)庫(kù)技術(shù)方案的10年變遷史》
《阿里技術(shù)分享:阿里自研金融級(jí)數(shù)據(jù)庫(kù)OceanBase的艱辛成長(zhǎng)之路》
《達(dá)達(dá)O2O后臺(tái)架構(gòu)演進(jìn)實(shí)踐:從0到4000高并發(fā)請(qǐng)求背后的努力》
《優(yōu)秀后端架構(gòu)師必會(huì)知識(shí):史上最全MySQL大表優(yōu)化方案總結(jié)》
《小米技術(shù)分享:解密小米搶購(gòu)系統(tǒng)千萬(wàn)高并發(fā)架構(gòu)的演進(jìn)和實(shí)踐》
《一篇讀懂分布式架構(gòu)下的負(fù)載均衡技術(shù):分類(lèi)、原理、算法、常見(jiàn)方案等》
>> 更多同類(lèi)文章 ……
(本文同步發(fā)布于:http://www.52im.net/thread-2494-1-1.html)
作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
出處:http://www.52im.net/space-uid-1.html
交流:歡迎加入即時(shí)通訊開(kāi)發(fā)交流群 215891622
討論:http://www.52im.net/
Jack Jiang同時(shí)是【原創(chuàng)Java
Swing外觀工程BeautyEye】和【輕量級(jí)移動(dòng)端即時(shí)通訊框架MobileIMSDK】的作者,可前往下載交流。
本博文
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處(也可前往 我的52im.net 找到我)。