Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 499, comments - 13, trackbacks - 0, articles - 1

          1、引言

          關(guān)于“負(fù)載均衡”的解釋,百度詞條里:負(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ā)訪問或數(shù)據(jù)流量分擔(dān)到多臺(tái)節(jié)點(diǎn)設(shè)備上分別處理,減少用戶等待響應(yīng)的時(shí)間;

          2)其次,單個(gè)重負(fù)載的運(yùn)算分擔(dān)到多臺(tái)節(jié)點(diǎn)設(shè)備上做并行處理,每個(gè)節(jié)點(diǎn)設(shè)備處理結(jié)束后,將結(jié)果匯總,返回給用戶,系統(tǒng)處理能力得到大幅度提高。

          簡單來說就是:

          1)其一是將大量的并發(fā)處理轉(zhuǎn)發(fā)給后端多個(gè)節(jié)點(diǎn)處理,減少工作響應(yīng)時(shí)間;

          2)其二是將單個(gè)繁重的工作轉(zhuǎn)發(fā)給后端多個(gè)節(jié)點(diǎn)處理,處理完再返回給負(fù)載均衡中心,再返回給用戶。

          目前負(fù)載均衡技術(shù)大多數(shù)是用于提高諸如在Web服務(wù)器、FTP服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器上的Internet服務(wù)器程序的可用性和可伸縮性。

          總之,它的目的就通過調(diào)度集群,達(dá)到最佳化資源使用,最大化吞吐率,最小化響應(yīng)時(shí)間,避免單點(diǎn)過載的問題。

          內(nèi)容概述:本文將從負(fù)載均衡技術(shù)的分類、技術(shù)原理、常見實(shí)現(xiàn)算法、常用方案等入手,為您詳細(xì)講解負(fù)載均衡技術(shù)的方方面面。這其中,四層和七層負(fù)載均衡技術(shù)最為常用,它們也是本文介紹的重點(diǎn)。

          內(nèi)容點(diǎn)評(píng):對(duì)于IM或消息推送應(yīng)用的開發(fā)者來說,本文所介紹的傳統(tǒng)負(fù)載均衡技術(shù),可能對(duì)于IM等即時(shí)通訊分布式場(chǎng)景來說,沒有辦法直接套用。原因是IM這類socket長連接場(chǎng)景,所處的網(wǎng)絡(luò)通信層級(jí)比較低,而且即時(shí)通訊相關(guān)的技術(shù)實(shí)現(xiàn)跟具體的業(yè)務(wù)邏輯緊密相關(guān),因而無法像HTTP短連接這樣基于標(biāo)準(zhǔn)化的負(fù)載均衡方法來實(shí)現(xiàn)。但本文所介紹的負(fù)載均衡原理、算法和一些方案實(shí)現(xiàn),仍然可以為IM或消息推送應(yīng)用的開發(fā)者帶來一些借鑒和參考意義,值得深 入一讀。

          補(bǔ)充:另一篇《快速理解高性能HTTP服務(wù)端的負(fù)載均衡技術(shù)原理》,也講述了負(fù)載均衡方面的知識(shí),有興趣也可以閱讀之。

          (本文同步發(fā)布于:http://www.52im.net/thread-2494-1-1.html

          2、相關(guān)文章

          深入閱讀以下文章,有助于您更好地理解本篇內(nèi)容:

        1. 網(wǎng)絡(luò)編程懶人入門(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)

        2. 網(wǎng)絡(luò)編程懶人入門(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)
        3. 網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠
        4. 騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面
        5. 快速理解高性能HTTP服務(wù)端的負(fù)載均衡技術(shù)原理
        6. 新手入門:零基礎(chǔ)理解大型分布式架構(gòu)的演進(jìn)歷史、技術(shù)原理、最佳實(shí)踐
        7. 通俗易懂:基于集群的移動(dòng)端IM接入層負(fù)載均衡方案分享
        8. IM開發(fā)基礎(chǔ)知識(shí)補(bǔ)課:正確理解前置HTTP SSO單點(diǎn)登陸接口的原理
        9. 3、負(fù)載均衡分類

          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ù)器)。

          這其中,最常見的是四層和七層負(fù)載均衡,也是本文接下來介紹的重點(diǎn)。

          當(dāng)客戶端發(fā)起請(qǐng)求,會(huì)經(jīng)過層層的封裝,發(fā)給服務(wù)器,服務(wù)器收到請(qǐng)求后經(jīng)過層層的解析,獲取到對(duì)應(yīng)的內(nèi)容。

          下圖是一個(gè)典型的HTTP請(qǐng)求分層傳遞原理:

          4、二層負(fù)載均衡

          二層負(fù)債均衡是基于數(shù)據(jù)鏈路層的負(fù)債均衡,即讓負(fù)債均衡服務(wù)器和業(yè)務(wù)服務(wù)器綁定同一個(gè)虛擬IP(即VIP),客戶端直接通過這個(gè)VIP進(jìn)行請(qǐng)求。

          那么如何區(qū)分相同IP下的不同機(jī)器呢?沒錯(cuò),通過MAC物理地址,每臺(tái)機(jī)器的MAC物理地址都不一樣,當(dāng)負(fù)載均衡服務(wù)器接收到請(qǐng)求之后,通過改寫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)給客戶端),吞吐量會(huì)比較高。

          5、三層負(fù)載均衡

          三層負(fù)載均衡是基于網(wǎng)絡(luò)層的負(fù)載均衡,通俗的說就是按照不同機(jī)器不同IP地址進(jìn)行轉(zhuǎn)發(fā)請(qǐng)求到不同的機(jī)器上。

          這種方式雖然比二層負(fù)載多了一層,但從控制的顆粒度上看,并沒有比二層負(fù)載均衡更有優(yōu)勢(shì),并且,由于請(qǐng)求的進(jìn)出都要經(jīng)過負(fù)載均衡服務(wù)器,會(huì)對(duì)其造成比較大的壓力,性能也比二層負(fù)載均衡要差。

          6、四層負(fù)載均衡

          四層的負(fù)載均衡就是基于IP+端口的負(fù)載均衡:在三層負(fù)載均衡的基礎(chǔ)上,通過發(fā)布三層的IP地址(VIP),然后加四層的端口號(hào),來決定哪些流量需要做負(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ù)載均衡器稱為四層交換機(jī)(L4 switch),主要分析IP層及TCP/UDP層,實(shí)現(xiàn)四層負(fù)載均衡。

          此種負(fù)載均衡器不理解應(yīng)用協(xié)議(如HTTP/FTP/MySQL等等),常見例子有:LVS,F(xiàn)5。

          7、七層負(fù)載均衡

          七層的負(fù)載均衡就是基于虛擬的URL或主機(jī)IP的負(fù)載均衡:在四層負(fù)載均衡的基礎(chǔ)上(沒有四層是絕對(duì)不可能有七層的),再考慮應(yīng)用層的特征,比如同一個(gè)Web服務(wù)器的負(fù)載均衡,除了根據(jù)VIP加80端口辨別是否需要處理的流量,還可根據(jù)七層的URL、瀏覽器類別、語言來決定是否要進(jìn)行負(fù)載均衡。

          舉個(gè)例子,如果你的Web服務(wù)器分成兩組,一組是中文語言的,一組是英文語言的,那么七層負(fù)載均衡就可以當(dāng)用戶來訪問你的域名時(shí),自動(dòng)辨別用戶語言,然后選擇對(duì)應(yīng)的語言服務(wù)器組進(jìn)行負(fù)載均衡處理。

          對(duì)應(yīng)的負(fù)載均衡器稱為七層交換機(jī)(L7 switch),除了支持四層負(fù)載均衡以外,還有分析應(yīng)用層的信息,如HTTP協(xié)議URI或Cookie信息,實(shí)現(xiàn)七層負(fù)載均衡。此種負(fù)載均衡器能理解應(yīng)用協(xié)議,常見例子有:  haproxy,MySQL Proxy。

          8、四層負(fù)載均衡和七層負(fù)載均衡的區(qū)別

          8.1 技術(shù)原理上的區(qū)別

          所謂四層負(fù)載均衡,也就是主要通過報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。

          以常見的TCP為例,負(fù)載均衡設(shè)備在接收到第一個(gè)來自客戶端的SYN 請(qǐng)求時(shí),即通過上述方式選擇一個(gè)最佳的服務(wù)器,并對(duì)報(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í)可能還會(huì)對(duì)報(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ù)器會(huì)分別建立TCP連接。所以從這個(gè)技術(shù)原理上來看,七層負(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ì)所在。

          例如訪問一個(gè)網(wǎng)站的用戶流量,可以通過七層的方式,將對(duì)圖片類的請(qǐng)求轉(zhuǎn)發(fā)到特定的圖片服務(wù)器并可以使用緩存技術(shù);將對(duì)文字類的請(qǐng)求可以轉(zhuǎn)發(fā)到特定的文字服務(wù)器并可以使用壓縮技術(shù)。

          當(dāng)然這只是七層應(yīng)用的一個(gè)小案例,從技術(shù)原理上,這種方式可以對(duì)客戶端的請(qǐng)求和服務(wù)器的響應(yīng)進(jìn)行任意意義上的修改,極大的提升了應(yīng)用系統(tǒng)在網(wǎng)絡(luò)層的靈活性。很多在后臺(tái),例如Nginx或者Apache上部署的功能可以前移到負(fù)載均衡設(shè)備上,例如客戶請(qǐng)求中的Header重寫,服務(wù)器響應(yīng)中的關(guān)鍵字過濾或者內(nèi)容插入等功能。

          另外一個(gè)常常被提到功能就是安全性。網(wǎng)絡(luò)中最常見的SYN Flood攻擊,即黑客控制眾多源客戶端,使用虛假IP地址對(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)營。另外負(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)部信息平臺(tái)等基于B/S開發(fā)的系統(tǒng)。 4層負(fù)載均衡則對(duì)應(yīng)其他TCP應(yīng)用,例如IM即時(shí)通訊、實(shí)時(shí)消息推送等socket長連接系統(tǒng)。

          8.3 七層應(yī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è)備故障也會(huì)導(dǎo)致整個(gè)應(yīng)用的崩潰。

          3)是否有足夠的靈活度:七層應(yīng)用的優(yōu)勢(shì)是可以讓整個(gè)應(yīng)用的流量智能化,但是負(fù)載均衡設(shè)備需要提供完善的七層功能,滿足客戶根據(jù)不同情況的基于應(yīng)用的調(diào)度。最簡單的一個(gè)考核就是能否取代后臺(tái)Nginx或者Apache等服務(wù)器上的調(diào)度功能。能夠提供一個(gè)七層應(yīng)用開發(fā)接口的負(fù)載均衡設(shè)備,可以讓客戶根據(jù)需求任意設(shè)定功能,才真正有可能提供強(qiáng)大的靈活性和智能性。

          8.4 總體對(duì)比

          四層負(fù)載均衡和七層負(fù)載均衡技術(shù)的總體對(duì)比:

          1)智能性:七層負(fù)載均衡由于具備OIS七層的所有功能,所以在處理用戶需求上能更加靈活,從理論上講,七層模型能對(duì)用戶的所有跟服務(wù)端的請(qǐng)求進(jìn)行修改。例如對(duì)文件header添加信息,根據(jù)不同的文件類型進(jìn)行分類轉(zhuǎn)發(fā)。四層模型僅支持基于網(wǎng)絡(luò)層的需求轉(zhuǎn)發(fā),不能修改用戶請(qǐng)求的內(nèi)容。

          2)安全性:七層負(fù)載均衡由于具有OSI模型的全部功能,能更容易抵御來自網(wǎng)絡(luò)的攻擊;四層模型從原理上講,會(huì)直接將用戶的請(qǐng)求轉(zhuǎn)發(fā)給后端節(jié)點(diǎn),無法直接抵御網(wǎng)絡(luò)攻擊。

          3)復(fù)雜度:四層模型一般比較簡單的架構(gòu),容易管理,容易定位問題;七層模型架構(gòu)比較復(fù)雜,通常也需要考慮結(jié)合四層模型的混用情況,出現(xiàn)問題定位比較復(fù)雜。

          4)效率比:四層模型基于更底層的設(shè)置,通常效率更高,但應(yīng)用范圍有限;七層模型需要更多的資源損耗,在理論上講比四層模型有更強(qiáng)的功能,現(xiàn)在的實(shí)現(xiàn)更多是基于http應(yīng)用。

          9、負(fù)載均衡技術(shù)的常見具體應(yīng)用方案

          目前有許多不同的負(fù)載均衡技術(shù)實(shí)現(xiàn)用以滿足不同的應(yīng)用需求,下面從負(fù)載均衡所采用的設(shè)備對(duì)象(軟/硬件負(fù)載均衡),應(yīng)用的OSI網(wǎng)絡(luò)層次(網(wǎng)絡(luò)層次上的負(fù)載均衡),及應(yīng)用的地理結(jié)構(gòu)(本地/全局負(fù)載均衡)等來分類。

          9.1 軟/硬件負(fù)載均衡

          軟件負(fù)載均衡解決方案:是指在一臺(tái)或多臺(tái)服務(wù)器相應(yīng)的操作系統(tǒng)上安裝一個(gè)或多個(gè)附加軟件來實(shí)現(xiàn)負(fù)載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl,Keepalive+ipvs等,它的優(yōu)點(diǎn)是基于特定環(huá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ì)引起安全問題。

          硬件負(fù)載均衡解決方案:是直接在服務(wù)器和外部網(wǎng)絡(luò)間安裝負(fù)載均衡設(shè)備,這種設(shè)備通常是一個(gè)獨(dú)立于系統(tǒng)的硬件,我們稱之為負(fù)載均衡器。由于專門的設(shè)備完成專門的任務(wù),獨(dú)立于操作系統(tǒng),整體性能得到大量提高,加上多樣化的負(fù)載均衡策略,智能化的流量管理,可達(dá)到最佳的負(fù)載均衡需求。負(fù)載均衡器有多種多樣的形式,除了作為獨(dú)立意義上的負(fù)載均衡器外,有些負(fù)載均衡器集成在交換設(shè)備中,置于服務(wù)器與Internet鏈接之間,有些則以兩塊網(wǎng)絡(luò)適配器將這一功能集成到PC中,一塊連接到Internet上,一塊連接到后端服務(wù)器群的內(nèi)部網(wǎng)絡(luò)上。

          軟件負(fù)載均衡與硬件負(fù)載均衡的對(duì)比如下。

          1)軟件負(fù)載均衡:

          優(yōu)點(diǎn):是需求環(huán)境明確,配置簡單,操作靈活,成本低廉,效率不高,能滿足普通的企業(yè)需求;

          缺點(diǎn):依賴于系統(tǒng),增加資源開銷;軟件的優(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ù)流量過大、網(wǎng)絡(luò)負(fù)荷過重的問題,并且不需花費(fèi)昂貴開支購置性能卓越的服務(wù)器,充分利用現(xiàn)有設(shè)備,避免服務(wù)器單點(diǎn)故障造成數(shù)據(jù)流量的損失。其有靈活多樣的均衡策略把數(shù)據(jù)流量合理地分配給服務(wù)器群內(nèi)的服務(wù)器共同負(fù)擔(dān)。即使是再給現(xiàn)有服務(wù)器擴(kuò)充升級(jí),也只是簡單地增加一個(gè)新的服務(wù)器到服務(wù)群中,而不需改變現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)、停止現(xiàn)有的服務(wù)。 

          全局負(fù)載均衡主要用于在一個(gè)多區(qū)域擁有自己服務(wù)器的站點(diǎn),為了使全球用戶只以一個(gè)IP地址或域名就能訪問到離自己最近的服務(wù)器,從而獲得最快的訪問速度,也可用于子公司分散站點(diǎn)分布廣的大公司通過Intranet(企業(yè)內(nèi)部互聯(lián)網(wǎng))來達(dá)到資源統(tǒng)一合理分配的目的。

          9.3 網(wǎng)絡(luò)層次上的負(fù)載均衡

          針對(duì)網(wǎng)絡(luò)上負(fù)載過重的不同瓶頸所在,從網(wǎng)絡(luò)的不同層次入手,我們可以采用相應(yīng)的負(fù)載均衡技術(shù)來解決現(xiàn)有問題。 

          隨著帶寬增加,數(shù)據(jù)流量不斷增大,網(wǎng)絡(luò)核心部分的數(shù)據(jù)接口將面臨瓶頸問題,原有的單一線路將很難滿足需求,而且線路的升級(jí)又過于昂貴甚至難以實(shí)現(xiàn),這時(shí)就可以考慮采用鏈路聚合(Trunking)技術(shù)。

          鏈路聚合技術(shù)(第二層負(fù)載均衡)將多條物理鏈路當(dāng)作一條單一的聚合邏輯鏈路使用,網(wǎng)絡(luò)數(shù)據(jù)流量由聚合邏輯鏈路中所有物理鏈路共同承擔(dā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ù)器來處理連接請(qǐng)求。

          第七層負(fù)載均衡控制應(yīng)用層服務(wù)的內(nèi)容,提供了一種對(duì)訪問流量的高層控制方式,適合對(duì)HTTP服務(wù)器群的應(yīng)用。第七層負(fù)載均衡技術(shù)通過檢查流經(jīng)的HTTP報(bào)頭,根據(jù)報(bào)頭內(nèi)的信息來執(zhí)行負(fù)載均衡任務(wù)。

          第七層負(fù)載均衡優(yōu)點(diǎn)表現(xiàn)在如下幾個(gè)方面: 

          1)通過對(duì)HTTP報(bào)頭的檢查,可以檢測(cè)出HTTP400、500和600系列的錯(cuò)誤信息,因而能透明地將連接請(qǐng)求重新定向到另一臺(tái)服務(wù)器,避免應(yīng)用層故障;

          2)可根據(jù)流經(jīng)的數(shù)據(jù)類型(如判斷數(shù)據(jù)包是圖像文件、壓縮文件或多媒體文件格式等),把數(shù)據(jù)流量引向相應(yīng)內(nèi)容的服務(wù)器來處理,增加系統(tǒng)性能;

          3)能根據(jù)連接請(qǐng)求的類型,如是普通文本、圖象等靜態(tài)文檔請(qǐng)求,還是asp、cgi等的動(dòng)態(tài)文檔請(qǐng)求,把相應(yīng)的請(qǐng)求引向相應(yīng)的服務(wù)器來處理,提高系統(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ù)載均衡算法分為兩類:

          1)一種是靜態(tài)負(fù)載均衡;

          2)一種是動(dòng)態(tài)負(fù)載均衡。

          10.1 靜態(tài)均衡算法

          【10.1.1】輪詢法:

          將請(qǐng)求按順序輪流地分配到每個(gè)節(jié)點(diǎn)上,不關(guān)心每個(gè)節(jié)點(diǎn)實(shí)際的連接數(shù)和當(dāng)前的系統(tǒng)負(fù)載。

          優(yōu)點(diǎn):簡單高效,易于水平擴(kuò)展,每個(gè)節(jié)點(diǎn)滿足字面意義上的均衡;

          缺點(diǎn):沒有考慮機(jī)器的性能問題,根據(jù)木桶最短木板理論,集群性能瓶頸更多的會(huì)受性能差的服務(wù)器影響。

          【10.1.2】隨機(jī)法:

          將請(qǐng)求隨機(jī)分配到各個(gè)節(jié)點(diǎn)。由概率統(tǒng)計(jì)理論得知,隨著客戶端調(diào)用服務(wù)端的次數(shù)增多,其實(shí)際效果越來越接近于平均分配,也就是輪詢的結(jié)果。

          優(yōu)缺點(diǎn)和輪詢相似。

          【10.1.3】源地址哈希法:

          源地址哈希的思想是根據(jù)客戶端的IP地址,通過哈希函數(shù)計(jì)算得到一個(gè)數(shù)值,用該數(shù)值對(duì)服務(wù)器節(jié)點(diǎn)數(shù)進(jìn)行取模,得到的結(jié)果便是要訪問節(jié)點(diǎn)序號(hào)。采用源地址哈希法進(jìn)行負(fù)載均衡,同一IP地址的客戶端,當(dāng)后端服務(wù)器列表不變時(shí),它每次都會(huì)落到到同一臺(tái)服務(wù)器進(jìn)行訪問。

          優(yōu)點(diǎn):相同的IP每次落在同一個(gè)節(jié)點(diǎn),可以人為干預(yù)客戶端請(qǐng)求方向,例如灰度發(fā)布;

          缺點(diǎn):如果某個(gè)節(jié)點(diǎn)出現(xiàn)故障,會(huì)導(dǎo)致這個(gè)節(jié)點(diǎn)上的客戶端無法使用,無法保證高可用。當(dāng)某一用戶成為熱點(diǎn)用戶,那么會(huì)有巨大的流量涌向這個(gè)節(jié)點(diǎn),導(dǎo)致冷熱分布不均衡,無法有效利用起集群的性能。所以當(dāng)熱點(diǎn)事件出現(xiàn)時(shí),一般會(huì)將源地址哈希法切換成輪詢法。

          【10.1.4】加權(quán)輪詢法:

          不同的后端服務(wù)器可能機(jī)器的配置和當(dāng)前系統(tǒng)的負(fù)載并不相同,因此它們的抗壓能力也不相同。給配置高、負(fù)載低的機(jī)器配置更高的權(quán)重,讓其處理更多的請(qǐng);而配置低、負(fù)載高的機(jī)器,給其分配較低的權(quán)重,降低其系統(tǒng)負(fù)載,加權(quán)輪詢能很好地處理這一問題,并將請(qǐng)求順序且按照權(quán)重分配到后端。

          加權(quá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ī)器的性能問題納入到考量范圍,集群性能最優(yōu)最大化;

          缺點(diǎn):生產(chǎn)環(huán)境復(fù)雜多變,服務(wù)器抗壓能力也無法精確估算,靜態(tài)算法導(dǎo)致無法實(shí)時(shí)動(dòng)態(tài)調(diào)整節(jié)點(diǎn)權(quán)重,只能粗糙優(yōu)化。

          【10.1.5】加權(quán)隨機(jī)法:

          與加權(quá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萬的用戶請(qǐng)求走第一個(gè)節(jié)點(diǎn)服務(wù)器,10萬到20萬的用戶請(qǐng)求走第二個(gè)節(jié)點(diǎn)服務(wù)器……以此類推。

          優(yōu)點(diǎn):容易水平擴(kuò)展,隨著用戶量增加,可以增加節(jié)點(diǎn)而不影響舊數(shù)據(jù);

          缺點(diǎn):容易負(fù)債不均衡,比如新注冊(cè)的用戶活躍度高,舊用戶活躍度低,那么壓力就全在新增的服務(wù)節(jié)點(diǎn)上,舊服務(wù)節(jié)點(diǎn)性能浪費(fèi)。而且也容易單點(diǎn)故障,無法滿足高可用。

          注:以上所提到的單點(diǎn)故障,都可以用主從方式來解決,從節(jié)點(diǎn)監(jiān)聽主節(jié)點(diǎn)心跳,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)死亡,從節(jié)點(diǎn)切換成主節(jié)點(diǎn)頂替上去。這里可以思考一個(gè)問題,怎么設(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ù)器。俗稱閑的人不能閑著,大家一起動(dòng)起來。

          優(yōu)點(diǎn):動(dòng)態(tài),根據(jù)節(jié)點(diǎn)狀況實(shí)時(shí)變化;

          缺點(diǎn):提高了復(fù)雜度,每次連接斷開需要進(jìn)行計(jì)數(shù);

          實(shí)現(xiàn):將連接數(shù)的倒數(shù)當(dāng)權(quán)重值。

          【10.2.2】最快響應(yīng)速度法:

          根據(jù)請(qǐng)求的響應(yīng)時(shí)間,來動(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)求,俗稱能者多勞,扶貧救弱。

          優(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ì)
          簡述移動(dòng)端IM開發(fā)的那些坑:架構(gòu)設(shè)計(jì)、通信協(xié)議和客戶端
          一套海量在線用戶的移動(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ù)器開發(fā)之架構(gòu)選擇
          騰訊QQ1.4億在線用戶的技術(shù)挑戰(zhàn)和架構(gòu)演進(jìn)之路PPT
          微信后臺(tái)基于時(shí)間序的海量數(shù)據(jù)冷熱分級(jí)架構(gòu)設(shè)計(jì)實(shí)踐
          微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(演講全文)
          如何解讀《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡》
          快速裂變:見證微信強(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開發(fā)基礎(chǔ)知識(shí)補(bǔ)課(二):如何設(shè)計(jì)大量圖片文件的服務(wù)端存儲(chǔ)架構(gòu)?
          IM開發(fā)基礎(chǔ)知識(shí)補(bǔ)課(三):快速理解服務(wù)端數(shù)據(jù)庫讀寫分離原理及實(shí)踐建議
          IM開發(fā)基礎(chǔ)知識(shí)補(bǔ)課(四):正確理解HTTP短連接中的Cookie、Session和Token
          WhatsApp技術(shù)實(shí)踐分享:32人工程團(tuán)隊(duì)創(chuàng)造的技術(shù)神話
          微信朋友圈千億訪問量背后的技術(shù)挑戰(zhàn)和實(shí)踐總結(jié)
          王者榮耀2億用戶量的背后:產(chǎn)品定位、技術(shù)架構(gòu)、網(wǎng)絡(luò)方案等
          IM系統(tǒng)的MQ消息中間件選型:Kafka還是RabbitMQ?
          騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面
          以微博類應(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萬QPS并發(fā)的Redis高性能緩存實(shí)踐之路
          IM開發(fā)基礎(chǔ)知識(shí)補(bǔ)課(五):通俗易懂,正確理解并用好MQ消息隊(duì)列
          微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(算法原理篇)
          微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(容災(zāi)方案篇)
          新手入門:零基礎(chǔ)理解大型分布式架構(gòu)的演進(jìn)歷史、技術(shù)原理、最佳實(shí)踐
          一套高可用、易伸縮、高并發(fā)的IM群聊、單聊架構(gòu)方案設(shè)計(jì)實(shí)踐
          阿里技術(shù)分享:深度揭秘阿里數(shù)據(jù)庫技術(shù)方案的10年變遷史
          阿里技術(shù)分享:阿里自研金融級(jí)數(shù)據(jù)庫OceanBase的艱辛成長之路
          >> 更多同類文章 ……

          [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萬QPS并發(fā)的Redis高性能緩存實(shí)踐之路
          新手入門:零基礎(chǔ)理解大型分布式架構(gòu)的演進(jìn)歷史、技術(shù)原理、最佳實(shí)踐
          阿里技術(shù)分享:深度揭秘阿里數(shù)據(jù)庫技術(shù)方案的10年變遷史
          阿里技術(shù)分享:阿里自研金融級(jí)數(shù)據(jù)庫OceanBase的艱辛成長之路
          達(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ù)分享:解密小米搶購系統(tǒng)千萬高并發(fā)架構(gòu)的演進(jìn)和實(shí)踐
          一篇讀懂分布式架構(gòu)下的負(fù)載均衡技術(shù):分類、原理、算法、常見方案等
          >> 更多同類文章 ……

          (本文同步發(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í)通訊開發(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 找到我)。


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 宁武县| 临湘市| 绩溪县| 麻江县| 南充市| 阳朔县| 屏边| 连城县| 尉犁县| 易门县| 彭泽县| 雷山县| 绵竹市| 武定县| 桦川县| 孝感市| 会同县| 宝鸡市| 甘洛县| 吉安县| 黄石市| 上高县| 左权县| 定结县| 黔江区| 无棣县| 牡丹江市| 宜宾县| 尉氏县| 休宁县| 天峻县| 威信县| 乐安县| 博乐市| 邹平县| 乃东县| 东丽区| 桐乡市| 淄博市| 南丰县| 绥宁县|