負(fù)載均衡原理與技術(shù)實(shí)現(xiàn)
負(fù)載均衡(Load Balance蟹瘾,簡(jiǎn)稱LB)是一種服務(wù)器或網(wǎng)絡(luò)設(shè)備的集群技術(shù)圾浅。負(fù)載均衡將特定的業(yè)務(wù)(網(wǎng)絡(luò)服務(wù)、網(wǎng)絡(luò)流量等)分擔(dān)給多個(gè)服務(wù)器或網(wǎng)絡(luò)設(shè)備憾朴,從而提高了業(yè) 務(wù)處理能力狸捕,保證了業(yè)務(wù)的高可用性。負(fù)載均衡基本概念有:實(shí)服務(wù)众雷、實(shí)服務(wù)組灸拍、虛服務(wù)、調(diào)度算法砾省、持續(xù)性等鸡岗,其常用應(yīng)用場(chǎng)景主要是服務(wù)器負(fù)載均衡,鏈路負(fù)載 均衡编兄。
一 服務(wù)器負(fù)載均衡
服務(wù)器負(fù)載均衡根據(jù)LB設(shè)備處理到的報(bào)文層次轩性,分為四層服務(wù)器負(fù)載均衡和七層負(fù)載均衡狠鸳,四層處理到IP包的IP頭,不解析報(bào)文四層以上載荷(L4 SLB)碰煌;七層處理到報(bào)文載荷部分,比如HTTP芦圾,RTSP,SIP報(bào)文頭洪乍,有時(shí)也包括報(bào)文內(nèi)容部分(L7 SLB)。
1.四層服務(wù)器負(fù)載均衡技術(shù)
客戶端將請(qǐng)求發(fā)送給服務(wù)器群前端的負(fù)載均衡設(shè)備壳澳,負(fù)載均衡設(shè)備上的虛服務(wù)接收客戶端請(qǐng)求茫经,通過(guò)調(diào)度算法萎津,選擇真實(shí)服務(wù)器抹镊,再通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換,用真 實(shí)服務(wù)器地址重寫(xiě)請(qǐng)求報(bào)文的目標(biāo)地址后颈渊,將請(qǐng)求發(fā)送給選定的真實(shí)服務(wù)器终佛;真實(shí)服務(wù)器的響應(yīng)報(bào)文通過(guò)負(fù)載均衡設(shè)備時(shí),報(bào)文的源地址被還原為虛服務(wù)的 VSIP铃彰,再返回給客戶,完成整個(gè)負(fù)載調(diào)度過(guò)程妹田。報(bào)文交互流程如下:
NAT方式的服務(wù)器負(fù)載均衡報(bào)文交互流程圖
報(bào)文交互流程說(shuō)明:
(1)Host發(fā)送服務(wù)請(qǐng)求報(bào)文鹃共,源IP為Host IP、目的IP為VSIP
(2)LB Device接收到請(qǐng)求報(bào)文后霜浴,借助調(diào)度算法計(jì)算出應(yīng)該將請(qǐng)求分發(fā)給哪臺(tái)Server
(3)LB Device使用DNAT技術(shù)分發(fā)報(bào)文,源IP為Host IP晌纫、目的IP為Server IP
(4)Server接收并處理請(qǐng)求報(bào)文,返回響應(yīng)報(bào)文锹漱,源IP為Server IP慕嚷、目的IP為Host IP
(5)LB Device接收響應(yīng)報(bào)文,轉(zhuǎn)換源IP后轉(zhuǎn)發(fā)喝检,源IP為VSIP、目的IP為Host IP
2.七層服務(wù)器負(fù)載均衡技術(shù)
七層負(fù)載均衡和四層負(fù)載均衡相比挠说,只是進(jìn)行負(fù)載均衡的依據(jù)不同,而選擇確定的實(shí)服務(wù)器后损俭,所做的處理基本相同潘酗,下面以HTTP應(yīng)用的負(fù)載均衡為例來(lái)說(shuō)明。
由于在TCP握手階段外永,無(wú)法獲得HTTP真正的請(qǐng)求內(nèi)容,因此也就無(wú)法將客戶的TCP握手報(bào)文直接轉(zhuǎn)發(fā)給服務(wù)器伯顶, 必須由負(fù)載均衡設(shè)備先和客戶完成TCP握手骆膝,等收到足夠的七層內(nèi)容后,再選擇服務(wù)器掐暮,由負(fù)載均衡設(shè)備和所選服務(wù)器建立TCP連接政钟。
七層負(fù)載均衡組網(wǎng)和四層負(fù)載均衡組網(wǎng)有一個(gè)顯著的區(qū)別:四層負(fù)載均衡每個(gè)虛服務(wù)對(duì)應(yīng)一個(gè)實(shí)服務(wù)組,實(shí)服務(wù)組內(nèi)的所有實(shí)服務(wù)器提供相同的服務(wù)养交;七層負(fù) 載均衡每個(gè)虛服務(wù)對(duì)應(yīng)多個(gè)實(shí)服務(wù)組,每組實(shí)服務(wù)器提供相同的服務(wù)灰羽。根據(jù)報(bào)文內(nèi)容選擇對(duì)應(yīng)的實(shí)服務(wù)組鱼辙,然后根據(jù)實(shí)服務(wù)組調(diào)度算法選擇某一個(gè)實(shí)服務(wù)器。
七層負(fù)載均衡組網(wǎng)圖
上圖中描述了基于HTTP的URI目錄信息進(jìn)行的七層負(fù)載均衡部署怠噪,報(bào)文交互流程圖如下:
七層負(fù)載均衡報(bào)文交互流程圖
報(bào)文交互流程說(shuō)明:
(1)-(3):Client和LB建立TCP連接杜跷;
(4):Client發(fā)送HTTP請(qǐng)求,目的IP為虛IP捂寿;
(5):LB設(shè)備分析報(bào)文,根據(jù)調(diào)度算法選擇實(shí)服務(wù)器秦陋,注意此時(shí)會(huì)緩存該報(bào)文治笨;
(6):LB設(shè)備向?qū)嵎?wù)器發(fā)Syn報(bào)文赤嚼,序列號(hào)為Client的Syn報(bào)文序列號(hào)
(7):Server發(fā)送Syn/Ack報(bào)文顺又,目的IP為Client;
(8):LB接收Server的Syn/Ack報(bào)文后蹂空,回應(yīng)ACK報(bào)文
(9):修改步驟(5)中緩存的報(bào)文目的IP和TCP序列號(hào),然后發(fā)給Server上枕;
(10):Server發(fā)送響應(yīng)報(bào)文到LB;
(11):LB修改步驟(9)中的報(bào)文的源地址和TCP序列號(hào)后轉(zhuǎn)發(fā)給Client弱恒。
二 鏈路負(fù)載均衡
在企業(yè)網(wǎng)、運(yùn)營(yíng)商鏈路出口需要部署LB設(shè)備以優(yōu)化鏈路選擇锈玉,提升訪問(wèn)體驗(yàn)义起,鏈路負(fù)載均衡按照流量發(fā)起方向分為Inbound負(fù)載均衡和Outbound負(fù)載均衡
1.Inbound入方向負(fù)載均衡
Inbound負(fù)載均衡技術(shù)是DNS智能解析的一種,外網(wǎng)用戶通過(guò)域名訪問(wèn)內(nèi)部服務(wù)器時(shí)去团,Local DNS的地址解析請(qǐng)求到達(dá)LB設(shè)備穷蛹,LB根據(jù)對(duì)Local DNS的就近性探測(cè)結(jié)果響應(yīng)一個(gè)最優(yōu)的IP地址,外網(wǎng)用戶根據(jù)這個(gè)最優(yōu)的IP響應(yīng)進(jìn)行對(duì)內(nèi)部服務(wù)器的訪問(wèn)肴熏。
Inbound鏈路負(fù)載均衡組網(wǎng)圖
入方向負(fù)載均衡
流程簡(jiǎn)述如下:
(1)外部用戶進(jìn)行資源訪問(wèn)前先進(jìn)行DNS解析,向其本地DNS服務(wù)器發(fā)送DNS請(qǐng)求蛙吏。
(2)本地DNS服務(wù)器將DNS請(qǐng)求的源IP地址替換為自己的IP地址,并轉(zhuǎn)發(fā)給域名對(duì)應(yīng)的權(quán)威服務(wù)器——LB device励烦。
(3)LB device根據(jù)DNS請(qǐng)求的域名和配置的Inbound鏈路負(fù)載均衡規(guī)則進(jìn)行域名解析泼诱。
(4)LB device按照域名解析的結(jié)果,將DNS應(yīng)答發(fā)送給本地DNS服務(wù)器屉栓。
(5)本地DNS服務(wù)器將解析結(jié)果轉(zhuǎn)發(fā)給用戶。
(6)用戶使用解析結(jié)果選擇的鏈路牲平,直接對(duì)LB device進(jìn)行資源訪問(wèn)。
2.Outbound出方向負(fù)載均衡
內(nèi)網(wǎng)用戶訪問(wèn)Internet上其他服務(wù)器域滥。 Outbound鏈路負(fù)載均衡中VSIP為內(nèi)網(wǎng)用戶發(fā)送報(bào)文的目的網(wǎng)段纵柿。用戶將訪問(wèn)VSIP的報(bào)文發(fā) 送到負(fù)載均衡設(shè)備后骗绕,負(fù)載均衡設(shè)備依次根據(jù)策略、持續(xù)性功能、就近性算法格带、調(diào)度算法選擇最佳的鏈路,并將內(nèi)網(wǎng)訪問(wèn)外網(wǎng)的業(yè)務(wù)流量分發(fā)到該鏈路屈呕。
Outbound鏈路負(fù)載均衡組網(wǎng)圖
Outbound負(fù)載均衡報(bào)文交互流程如下:
Outbound 鏈路負(fù)載均衡流程圖
Outbound負(fù)載均衡報(bào)文交互流程說(shuō)明:
(1)LB Device接收內(nèi)網(wǎng)用戶流量 -
(2)LB Device依次根據(jù)策略虎眨、持續(xù)性功能镶摘、就近性算法、調(diào)度算法進(jìn)行鏈路選擇 在Outbound鏈路負(fù)載均衡組網(wǎng)中碌冶,通常使用就近性算法或帶寬調(diào)度算法實(shí)現(xiàn)流量分發(fā)
(3)LB device按照鏈路選擇的結(jié)果將流量轉(zhuǎn)發(fā)給選定的鏈路 -
(4)LB Device接收外網(wǎng)用戶流量 -
(5)LB Device將流量轉(zhuǎn)發(fā)給內(nèi)網(wǎng)用戶
三 負(fù)載均衡優(yōu)化及應(yīng)用
1.TCP連接復(fù)用
連接復(fù)用功能通過(guò)使用連接池技術(shù)涝缝,可以將前端大量的客戶的HTTP請(qǐng)求復(fù)用到后端與服務(wù)器建立的少量的TCP長(zhǎng)連接上,大大減小服務(wù)器的性能負(fù)載罐氨,減小與服務(wù)器之間新建TCP連接所帶來(lái)的延時(shí)滩援,并最大限度減少后端服務(wù)器的并發(fā)連接數(shù),降低服務(wù)器的資源占用。
TCP連接復(fù)用示意圖
上圖給出了TCP連接復(fù)用的簡(jiǎn)單過(guò)程描述邑遏。由Client端發(fā)送的Req1/ Req2/ Req3三個(gè)HTTP請(qǐng)求恰矩,經(jīng)過(guò)LB設(shè)備后,復(fù)用了LB設(shè)備和Server端已經(jīng)建立好的連接纪吮,將Client端的三個(gè)請(qǐng)求通過(guò)兩個(gè)TCP連接發(fā)送給了服務(wù)器端萎胰。
2.SSL卸載
為了避免明文傳輸出現(xiàn)的安全問(wèn)題,對(duì)于敏感信息冰肴,一般采用SSL協(xié)議榔组,如HTTPS,對(duì)HTTP協(xié)議進(jìn)行加密搓扯,以保證整個(gè)HTTP傳輸過(guò)程的安全 性。SSL是需要耗費(fèi)大量CPU資源的一種安全技術(shù)铅歼,如果由后端的服務(wù)器來(lái)承擔(dān)换可,則會(huì)消耗很大的處理能力。應(yīng)用交付設(shè)備為了提升用戶的體驗(yàn)俭识,分擔(dān)服務(wù)器的 處理壓力洞渔,將SSL加解密集中在自身的處理上,相對(duì)于服務(wù)器來(lái)說(shuō)LB能提供更高的SSL處理性能磁椒,還能夠簡(jiǎn)化對(duì)證書(shū)的管理浆熔,減少日常管理的工作量,LB的 該功能又稱為SSL卸載慎皱。
下圖中Client端發(fā)送給Server的所有的HTTPS流量都被LB設(shè)備終結(jié),LB設(shè)備將SSL終結(jié)后茫多,與Server之間可采用HTTP或者 弱加密的HTTPS進(jìn)行通訊。LB設(shè)備承擔(dān)了SSL的卸載工作夺欲,從而極大的減小了服務(wù)器端對(duì)SSL處理的壓力今膊,將服務(wù)器的處理能力釋放出來(lái),更加專注于處 理服務(wù)器本身承擔(dān)的業(yè)務(wù)邏輯市埋。
SSL卸載示意圖
SSL卸載的處理流程如下:
SSL卸載過(guò)程
(1)客戶端向服務(wù)器端發(fā)送SSL握手請(qǐng)求腰素。
(2)LB設(shè)備作為中間的卸載設(shè)備雪营,代替服務(wù)器端和客戶端交互献起,完成SSL握手過(guò)程。
(3)客戶端發(fā)送SSL加密后的請(qǐng)求數(shù)據(jù)谴餐。
(4)LB設(shè)備解密數(shù)據(jù)呆抑。
(5)LB設(shè)備將解密后的明文發(fā)送給Server。
(6)服務(wù)器返回給LB設(shè)備回應(yīng)報(bào)文厌殉。
(7)LB設(shè)備將返回的應(yīng)答報(bào)文加密侈咕。
(8)LB設(shè)備將加密后的應(yīng)答報(bào)文傳給客戶端。
四 結(jié)束語(yǔ)
負(fù)載均衡技術(shù)不管應(yīng)用于用戶訪問(wèn)服務(wù)器資源楼眷,還是應(yīng)用于多鏈路出口,均大大提高了對(duì)資源的高效利用掌腰,顯著降低了用戶的網(wǎng)絡(luò)布署成本张吉,提升了用戶的網(wǎng)絡(luò)使用體驗(yàn)。隨著云計(jì)算的發(fā)展芦拿,負(fù)載均衡的技術(shù)實(shí)現(xiàn)還將與云計(jì)算相結(jié)合,在虛擬化和NFV軟件定義網(wǎng)關(guān)等方面持續(xù)發(fā)展酵幕。
在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流群缓苛。交流學(xué)習(xí)群號(hào):938837867 暗號(hào):555 里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis笔刹,Netty源碼分析,高并發(fā)舌菜、高性能亦镶、分布式、微服務(wù)架構(gòu)的原理缤骨,JVM性能優(yōu)化绊起、分布式架構(gòu)等這些成為架構(gòu)師必備