淺析負(fù)載均衡與集群

一、什么是負(fù)載均衡

首先我們先介紹一下什么是負(fù)載均衡:負(fù)載平衡(Load balancing)是一種計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),用來在多個(gè)計(jì)算機(jī)(計(jì)算機(jī)集群)、網(wǎng)絡(luò)連接、CPU、磁盤驅(qū)動(dòng)器或其他資源中分配負(fù)載,以達(dá)到最佳化資源使用、最大化吞吐率、最小化響應(yīng)時(shí)間、同時(shí)避免過載的目的。這是來自維基百科的介紹。負(fù)載均衡的目的,就在于平衡負(fù)載,給用戶提供優(yōu)質(zhì),可靠,穩(wěn)定的服務(wù)。

上圖是個(gè)最簡單的負(fù)載均衡實(shí)例,應(yīng)用服務(wù)器并不直接與用戶相連,用戶連接負(fù)載均衡服務(wù)器,然后由負(fù)載均衡服務(wù)器把消息轉(zhuǎn)發(fā)給實(shí)際應(yīng)用服務(wù)器。負(fù)載均衡器內(nèi)部會(huì)根據(jù)應(yīng)用服務(wù)器的負(fù)載情況,決定把消息轉(zhuǎn)發(fā)給哪臺(tái)服務(wù)器處理。同時(shí)負(fù)載均衡器還可以對(duì)用戶屏蔽應(yīng)用服務(wù)器失效,只要把用戶的消息轉(zhuǎn)發(fā)到非失效服務(wù)器即可。

提到負(fù)載均衡,就不能不介紹另外一個(gè)概念:集群。集群就是一組部署有相同應(yīng)用的服務(wù)器。例如web服務(wù)器。用戶的請(qǐng)求無論連接到哪臺(tái)服務(wù)器上,都能得到相同的處理。這樣我們實(shí)現(xiàn)一種服務(wù)器,可以將用戶的請(qǐng)求根據(jù)特定規(guī)則轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器上進(jìn)行處理。就實(shí)現(xiàn)了完整的集群處理系統(tǒng)。這個(gè)服務(wù)器如果實(shí)現(xiàn)了后臺(tái)服務(wù)器感知和配置功能,能夠了解后臺(tái)服務(wù)器的可用情況。就可以被稱作為負(fù)載均衡器。

負(fù)載均衡在目前網(wǎng)絡(luò)服務(wù)規(guī)模越來越龐大的情況下,成為一個(gè)大型服務(wù)器系統(tǒng)必須要面對(duì)的問題。隨著用戶和業(yè)務(wù)的增多,來自用戶的訪問量和數(shù)據(jù)流量不斷增大,對(duì)服務(wù)器的計(jì)算能力和儲(chǔ)存要求也在不斷增加,單臺(tái)服務(wù)器根本無法承擔(dān)這么龐大的數(shù)據(jù)處理請(qǐng)求。這個(gè)時(shí)候,我們必須利用集群技術(shù),采用一組服務(wù)器對(duì)來自用戶的請(qǐng)求進(jìn)行處理,服務(wù)器的數(shù)量要能夠不斷的擴(kuò)充。在集群的前端,我們采用負(fù)載均衡技術(shù),平均分散用戶的請(qǐng)求到不同的處理服務(wù)器,并且能夠在集群中某個(gè)服務(wù)失效時(shí),即時(shí)感知,屏蔽,將消息轉(zhuǎn)發(fā)到其他可用服務(wù)器上。

負(fù)載均衡分為硬件和軟件:

(1).硬件LB(比較出名的)

F5公司的BIG-IP系列、Citrix公司的NetScaler系列、A10公司的AX系列

(2).軟件LB

四層:LVS(Linux VirtualServer)注:國人開發(fā)的、七層:Nginx,HAProxy

二、集群的類型

1.scale on:向上擴(kuò)展

將服務(wù)器的內(nèi)存容量調(diào)大和cpu數(shù)量增加些(簡單說升級(jí)服務(wù)器硬件)

缺點(diǎn):在一定的范圍之內(nèi)它的性能是上升的趨勢,但是超出范圍之后就是下降的趨勢。因?yàn)殡S著它的cpu的個(gè)數(shù)增加我們需要給我們的cpu仲裁,而且隨著cpu個(gè)數(shù)的增加資源競爭性越大。

2.scale out:向外擴(kuò)展

一臺(tái)服務(wù)器應(yīng)付不過來,我們就再增加一臺(tái)服務(wù)器。

優(yōu)點(diǎn):增減服務(wù)器很方便,而且沒有向上擴(kuò)展隨著增加性能下降。

向外擴(kuò)張的工作模式:當(dāng)客戶端向服務(wù)器端發(fā)送請(qǐng)求,服務(wù)器端只拿出來一臺(tái)服務(wù)器來相應(yīng)我們的客戶端的請(qǐng)求。

(1).LB:Load Balancing:負(fù)載均衡集群

負(fù)載均衡集群中有一個(gè)分發(fā)器或者叫調(diào)度器,我們將其稱之為Director,它處在多臺(tái)服務(wù)器的上面,分發(fā)器根據(jù)內(nèi)部鎖定義的規(guī)則或調(diào)度方式從下面的服務(wù)器群中選擇一個(gè)以此來響應(yīng)客戶端發(fā)送的請(qǐng)求。

(2).HA:High Availability高可用集群

高可用集群是服務(wù)的可用性比較高,當(dāng)我們某臺(tái)服務(wù)器死機(jī)后不會(huì)造成我們的服務(wù)不可用。其工作模式則是將一個(gè)具有故障的服務(wù)轉(zhuǎn)交給一個(gè)正常工作的服務(wù)器,從而達(dá)到服務(wù)不會(huì)中斷。一般來說我們集群中工作在前端(分發(fā)器)的服務(wù)器都會(huì)對(duì)我們的后端服務(wù)器做一個(gè)健康檢查,如果發(fā)現(xiàn)我們服務(wù)器當(dāng)機(jī)就不會(huì)對(duì)其在做轉(zhuǎn)發(fā)。

衡量標(biāo)準(zhǔn):可用性=在線時(shí)間/(在線時(shí)間+故障處理時(shí)間) 99%、99.9%、99.99%、99.999%

(3).HP:Hight Performance高性能

高性能的集群是當(dāng)某一個(gè)任務(wù)量非常大的時(shí)候,我們做一個(gè)集群共同來完成這一個(gè)任務(wù)。這種處理方式我們稱為并行處理集群,并行處理集群是將大任務(wù)劃分為小任務(wù),分別進(jìn)行處理的機(jī)制。一般這樣的集群用來科學(xué)研究與大數(shù)據(jù)運(yùn)算等方面的工作。現(xiàn)在比較火的Hadoop就是使用的并行處理集群。

說明:三種集群之間的區(qū)別

負(fù)載均衡著重在于提供服務(wù)并發(fā)處理能力的集群,高可用以提升服務(wù)在線的能力的集群。高性能著重用于處理一個(gè)海量任務(wù)。

三、主要負(fù)載均衡方案介紹

1:HTTP重定向負(fù)載均衡

這種負(fù)載均衡方式僅適合WEB服務(wù)器。用戶發(fā)出請(qǐng)求時(shí),負(fù)載均衡服務(wù)器會(huì)根據(jù)HTTP請(qǐng)求,重新計(jì)算出實(shí)際的WEB服務(wù)器地址,通過302重定向相應(yīng)發(fā)送給用戶瀏覽器。用戶瀏覽器再根據(jù)302響應(yīng)信息,對(duì)實(shí)際的WEB服務(wù)器發(fā)出請(qǐng)求。HTTP重定向方案有點(diǎn)是比較簡單,缺點(diǎn)是性能比較差,需要2次請(qǐng)求才能返回實(shí)際結(jié)果,還有就是僅適合HTTP服務(wù)器使用。

2: DNS域名解析負(fù)載均衡

在DNS中存儲(chǔ)了一個(gè)域名的多個(gè)主機(jī)地址,每次域名解析請(qǐng)求,都可以根據(jù)負(fù)載均衡算法返回一個(gè)不同的IP地址。這樣多個(gè)WEB服務(wù)器就構(gòu)成了一個(gè)集群,并由DNS服務(wù)器提供了負(fù)載均衡服務(wù)。DNS域名解析負(fù)載均衡的優(yōu)點(diǎn)是由DNS來完成負(fù)載均衡工作,服務(wù)本身不用維護(hù)負(fù)載均衡服務(wù)器的工作。缺點(diǎn)也是,由于負(fù)載均衡服務(wù)器不是自己維護(hù),沒法做精細(xì)控制,而且DNS在客戶端往往帶有緩存,服務(wù)器的變更很難及時(shí)反映到客戶端上。

3:反向代理負(fù)載均衡

反向代理服務(wù)器位于實(shí)際的服務(wù)器之前,他能夠緩存服務(wù)器響應(yīng),加速訪問,同時(shí)也啟到了負(fù)載均衡服務(wù)器的效果。反向代理服務(wù)器解析客戶端請(qǐng)求,根據(jù)負(fù)載均衡算法轉(zhuǎn)發(fā)到不同的后臺(tái)服務(wù)器上。用戶和后臺(tái)服務(wù)器之間不再有直接的鏈接。請(qǐng)求,響應(yīng)都由反向代理服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。優(yōu)點(diǎn)是和負(fù)載均衡服務(wù)集成在一起,部署簡單。缺點(diǎn)是所有的請(qǐng)求回應(yīng)都需要經(jīng)過反向代理服務(wù)器。其本身可能會(huì)成為性能的瓶頸。著名的Nginx服務(wù)器就可以部署為反向代理服務(wù)器,實(shí)現(xiàn)WEB應(yīng)用的負(fù)載均衡。上面的三種都是工作在OSI網(wǎng)絡(luò)模型中的應(yīng)用層,我們可以統(tǒng)稱為應(yīng)用層負(fù)載均衡(七層負(fù)載均衡)。下面介紹的幾種工作在OSI網(wǎng)絡(luò)模型中的4層以及4層以下(四層負(fù)載均衡),解決方案也具有更大的通用性。

4:IP負(fù)載均衡

用戶請(qǐng)求包到達(dá)負(fù)載均衡服務(wù)器114.100.20.200后,負(fù)載均衡服務(wù)器在操作系統(tǒng)內(nèi)核層獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)負(fù)載均衡算法獲取真實(shí)后臺(tái)服務(wù)器地址192.168.1.1,然后將數(shù)據(jù)包的目標(biāo)地址改為192.168.1.1,轉(zhuǎn)發(fā)給內(nèi)部服務(wù)器。整個(gè)過程都在內(nèi)核層進(jìn)行處理。收到192.168.1.1的響應(yīng)包之后,會(huì)更改響應(yīng)包的SRC IP,轉(zhuǎn)發(fā)給客戶端用戶。采用IP層負(fù)載均衡算法,全部處理過程都在內(nèi)核層(Ring 0)進(jìn)行。和七層負(fù)載均衡相比,具有更好的性能。但是由于所有的響應(yīng)包都要經(jīng)過負(fù)載均衡服務(wù)器,負(fù)載均衡服務(wù)器的網(wǎng)卡帶寬,很容易成為系統(tǒng)的瓶頸,如果能夠讓響應(yīng)包不經(jīng)過負(fù)載均衡服務(wù)器,就可以極大的提升整個(gè)負(fù)載均衡服務(wù)器的服務(wù)能力。我們下面介紹的數(shù)據(jù)鏈路層負(fù)載均衡,就具有這個(gè)能力。

5:數(shù)據(jù)鏈路層負(fù)載均衡

數(shù)據(jù)鏈路層負(fù)載均衡,顧名思義,就是工作在TCP/IP協(xié)議最底層的數(shù)據(jù)鏈路層,進(jìn)行負(fù)載均衡。我們常用的以太網(wǎng)中,在這一層主要采用數(shù)據(jù)幀進(jìn)行通信,每個(gè)網(wǎng)卡都具有唯一的MAC地址,數(shù)據(jù)幀用MAC地址來標(biāo)識(shí)數(shù)據(jù)的來源與目的地。數(shù)據(jù)鏈路層負(fù)載均衡通過修改數(shù)據(jù)包的MAC地址,實(shí)現(xiàn)負(fù)載均衡。

這種數(shù)據(jù)傳輸方式又稱為三角傳輸,負(fù)載均衡數(shù)據(jù)分發(fā)過程中不修改IP地址,只修改目的MAC地址,通過配置真實(shí)物理服務(wù)器集群所有機(jī)器虛擬IP和負(fù)載均衡服務(wù)器IP一致,從而達(dá)到不修改數(shù)據(jù)包的源地址和目的地址就可以進(jìn)行數(shù)據(jù)分發(fā)的目的,由于實(shí)際處理請(qǐng)求的真實(shí)物理服務(wù)器IP和數(shù)據(jù)請(qǐng)求目的IP一致,不需要通過負(fù)載均衡服務(wù)器進(jìn)行地址交換,可將響應(yīng)數(shù)據(jù)包直接返回給用戶,避免負(fù)載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸。這種負(fù)載均衡方式又稱之為直接路由方式(DR).

如上圖所示,用戶請(qǐng)求到達(dá)負(fù)載均衡服務(wù)器114.100.20.200后,負(fù)載均衡服務(wù)器將數(shù)據(jù)包的目的MAC地址更改為00:1e:ec:bc:5e:03,并不修改數(shù)據(jù)包目的IP,由于服務(wù)器集群所有服務(wù)器的虛擬IP地址和負(fù)載均衡服務(wù)器IP地址一致,因此數(shù)據(jù)可以正常傳輸?shù)竭_(dá)MAC地址為00:1e:ec:bc:5e:03的機(jī)器上,該服務(wù)器處理完之后,將響應(yīng)數(shù)據(jù)包發(fā)送到網(wǎng)關(guān)服務(wù)器,網(wǎng)關(guān)服務(wù)器直接將數(shù)據(jù)包發(fā)送給用戶,響應(yīng)數(shù)據(jù)不需要通過負(fù)載均衡服務(wù)器,這樣就避免了負(fù)載均衡服務(wù)器成為傳輸瓶頸的可能。

數(shù)據(jù)鏈路層負(fù)載均衡是目前使用最廣泛的一種負(fù)載均衡方式。著名的負(fù)載均衡開源產(chǎn)品LVS(Linux Virtual Server),同時(shí)支持上面的IP負(fù)載均衡和數(shù)據(jù)鏈路層負(fù)載均衡。是學(xué)習(xí)負(fù)載均衡技術(shù)必須了解的產(chǎn)品。基于數(shù)據(jù)鏈路層的負(fù)載均衡雖然有非常好的性能,但是對(duì)網(wǎng)絡(luò)拓?fù)湟灿斜容^大的限制,負(fù)載均衡服務(wù)器和后臺(tái)服務(wù)器必須處于同一網(wǎng)絡(luò)環(huán)境中才可以。

四、負(fù)載均衡算法介紹

前面介紹的內(nèi)容,解決了從用戶到實(shí)際后臺(tái)服務(wù)器之間的數(shù)據(jù)包發(fā)送和響應(yīng)的問題。下面我們介紹選擇實(shí)際后臺(tái)運(yùn)行服務(wù)器的具體負(fù)載均衡算法。考慮到服務(wù)請(qǐng)求的不同類型服務(wù)器的不同處理能力以及隨機(jī)選擇造成的負(fù)載分配不均勻等問題,為了更加合理的把負(fù)載分配給內(nèi)部的多個(gè)服務(wù)器,就需要應(yīng)用相應(yīng)的能夠正確反映各個(gè)服務(wù)器處理能力及網(wǎng)絡(luò)狀態(tài)的負(fù)載均衡算法。我們以LVS為參考,介紹比較經(jīng)典的8種負(fù)載均衡算法。

1.輪叫調(diào)度(Round Robin)

調(diào)度器通過“輪叫"調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載

2.加權(quán)輪叫(Weighted Round Robin)

調(diào)度器通過“加權(quán)輪叫"調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來調(diào)度訪問請(qǐng)求這樣可以保證處理能力強(qiáng)的服務(wù)器能處理更多的訪問流量調(diào)度器可以自動(dòng)問詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值

3.最少鏈接(Least Connections)

調(diào)度器通過“最少連接"調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用“最小連接"調(diào)度算法可以較好地均衡負(fù)載

4.加權(quán)最少鏈接(Weighted Least Connections)

在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用“加權(quán)最少鏈接"調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載調(diào)度器可以自動(dòng)問詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值

5.基于局部性的最少鏈接(Locality-Based Least Connections)

“基于局部性的最少鏈接"調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用“最少鏈接"的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器

6.帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)

“帶復(fù)制的基于局部性最少鏈接"調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)它與LBLC算法的不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組,按“最小連接"原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器超載,則按“最小連接"原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度

7.目標(biāo)地址散列(Destination Hashing)

“目標(biāo)地址散列"調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空

8.源地址散列(Source Hashing)

“源地址散列"調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 【摘要】 面對(duì)大量用戶訪問、高并發(fā)請(qǐng)求,海量數(shù)據(jù),可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫,存儲(chǔ)設(shè)備,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,600評(píng)論 0 24
  • 《老男孩Linux運(yùn)維》Nginx Documentation 集群簡介 集群就是指一組(若干)相互獨(dú)立的計(jì)算機(jī),...
    Zhang21閱讀 3,445評(píng)論 0 51
  • 一、什么是負(fù)載均衡? 互聯(lián)網(wǎng)早期,業(yè)務(wù)流量比較小并且業(yè)務(wù)邏輯比較簡單,單臺(tái)服務(wù)器便可以滿足基本的需求;但隨著互聯(lián)網(wǎng)...
    彬彬醬閱讀 2,219評(píng)論 0 19
  • 摘要:面對(duì)大量用戶訪問、高并發(fā)請(qǐng)求,海量數(shù)據(jù),可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫,存儲(chǔ)設(shè)備,高性能Web服務(wù)器,采...
    layjoy閱讀 13,863評(píng)論 3 93
  • 只要世界上還存在一部分, 不得不服從另一部分的現(xiàn)象, 付出與回報(bào)就無從談起, 大到單位, 小到個(gè)人, 做任何事都要...
    王廣麗閱讀 656評(píng)論 0 2