負(fù)載均衡算法及方案

01?背景

????面對大量用戶訪問、高并發(fā)請求藏研,單機(jī)網(wǎng)站可以從軟硬件兩個方面尋求解決方法:

??? 1敬矩、硬件方面:可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫遥倦,存儲設(shè)備谤绳,高性能Web服務(wù)器占锯;

??? 2袒哥、軟件方面:采用高效率的編程語言(比如Go,Erlang消略,Scala)等堡称。

????但是,當(dāng)單機(jī)容量達(dá)到極限時艺演,我們需要考慮業(yè)務(wù)拆分和分布式部署却紧,來解決大型網(wǎng)站訪問量大,并發(fā)量高胎撤,海量數(shù)據(jù)的問題晓殊。即需要從架構(gòu)方面尋求解決方案。

02?概述

????負(fù)載均衡(Load Balance)伤提,意思是將負(fù)載(如前端的訪問請求)進(jìn)行平衡巫俺、(通過負(fù)載均衡算法)分?jǐn)偟蕉鄠€操作單元(服務(wù)器,中間件)上進(jìn)行執(zhí)行肿男。是解決高性能介汹,單點故障(高可用),擴(kuò)展性(水平伸縮)的終極解決方案舶沛∴诔校可以理解為,負(fù)載均衡是高可用和高并發(fā)共同使用的一種技術(shù)如庭。

????負(fù)載均衡的作用:

? ? 1叹卷、增加吞吐量,解決并發(fā)壓力(高性能);

? ? 2骤竹、提供故障轉(zhuǎn)移(高可用)餐胀;

? ? 3、通過添加或減少服務(wù)器數(shù)量瘤载,提供網(wǎng)站伸縮性(擴(kuò)展性)否灾;

? ? 4、安全防護(hù)(負(fù)載均衡設(shè)備上做一些過濾鸣奔,黑白名單等處理)墨技。

03?原理

????系統(tǒng)的擴(kuò)展可分為縱向(垂直)擴(kuò)展和橫向(水平)擴(kuò)展。

????縱向擴(kuò)展挎狸,是從單機(jī)的角度通過增加硬件處理能力扣汪,比如CPU處理能力,內(nèi)存容量锨匆,磁盤等方面崭别,實現(xiàn)服務(wù)器處理能力的提升,不能滿足大型分布式系統(tǒng)(網(wǎng)站)恐锣,大流量茅主,高并發(fā),海量數(shù)據(jù)的問題土榴。因此需要采用橫向擴(kuò)展的方式诀姚,通過添加機(jī)器來滿足大型網(wǎng)站服務(wù)的處理能力。比如:一臺機(jī)器不能滿足玷禽,則增加兩臺或者多臺機(jī)器赫段,共同承擔(dān)訪問壓力。

????典型負(fù)載均衡架構(gòu)如下:

????軟件負(fù)載解決的兩個核心問題是:選誰矢赁、轉(zhuǎn)發(fā)糯笙。

04?分類

4.1 按照軟硬件

? ? 硬件負(fù)載均衡

????通過F5、A10撩银、Citrix Netscaler等硬件實現(xiàn)負(fù)載均衡给涕。

????軟件負(fù)載均衡

????通過LVS、Nginx蜒蕾、HAProxy等軟件實現(xiàn)負(fù)載均衡稠炬。

4.2 按照實現(xiàn)技術(shù)

????根據(jù)實現(xiàn)技術(shù)不同,可分為DNS負(fù)載均衡咪啡,HTTP負(fù)載均衡首启,IP負(fù)載均衡,鏈路層負(fù)載均衡等撤摸。

????DNS負(fù)載均衡

????最早的負(fù)載均衡技術(shù)毅桃,利用域名解析實現(xiàn)負(fù)載均衡褒纲,在DNS服務(wù)器,配置多個A記錄钥飞,這些A記錄對應(yīng)的服務(wù)器構(gòu)成集群莺掠。大型網(wǎng)站總是部分使用DNS解析,作為第一級負(fù)載均衡读宙。

? ??優(yōu)點:

??? 1彻秆、使用簡單:負(fù)載均衡工作交給DNS服務(wù)器處理,不需要專門的服務(wù)器維護(hù)结闸;

??? 2唇兑、提高性能:可以支持基于地址的域名解析,解析成距離用戶最近的服務(wù)器地址桦锄,可以加快訪問速度扎附。

? ??缺點:

??? 1、可用性差:新增/修改DNS后结耀,解析時間較長留夜;

??? 2、擴(kuò)展性低:DNS負(fù)載均衡的控制權(quán)在域名商图甜,擴(kuò)展性有限碍粥。

????實踐建議:將DNS作為第一級負(fù)載均衡。

????IP負(fù)載均衡

????IP負(fù)載均衡具则,在網(wǎng)絡(luò)層通過修改請求目標(biāo)地址進(jìn)行負(fù)載均衡即纲。

? ??優(yōu)點:

????在內(nèi)核進(jìn)程完成數(shù)據(jù)分發(fā)具帮,比在應(yīng)用層分發(fā)性能更好博肋。

? ??缺點:

????所有請求響應(yīng)都需要經(jīng)過負(fù)載均衡服務(wù)器,集群最大吞吐量受限于負(fù)載均衡服務(wù)器網(wǎng)卡帶寬蜂厅。

????鏈路層負(fù)載均衡

????在通信協(xié)議的數(shù)據(jù)鏈路層修改mac地址匪凡,進(jìn)行負(fù)載均衡。

????數(shù)據(jù)分發(fā)時掘猿,不修改ip地址病游,指修改目標(biāo)mac地址,配置真實物理服務(wù)器集群所有機(jī)器虛擬ip和負(fù)載均衡服務(wù)器ip地址一致稠通,達(dá)到不修改數(shù)據(jù)包的源地址和目標(biāo)地址衬衬,進(jìn)行數(shù)據(jù)分發(fā)的目的。

? ??優(yōu)點:性能好改橘。

???缺點:配置復(fù)雜滋尉。

????實踐建議:直接路由(DR)模式最常用。

????混合型負(fù)載均衡

????由于多個服務(wù)器群內(nèi)硬件設(shè)備飞主、規(guī)模狮惜、提供服務(wù)等差異高诺,可以考慮給每個服務(wù)器群采用最合適的負(fù)載均衡方式,然后又在這多個服務(wù)器群間再一次負(fù)載均衡或群集起來以一個整體向外界提供服務(wù)碾篡,從而達(dá)到最佳的性能虱而,將這種方式稱之為混合型負(fù)載均衡。

4.3 按照OSI層次

? ??二層負(fù)載均衡

????負(fù)載均衡服務(wù)器對外依然提供一個 VIP(浮動IP)开泽,集群中不同的機(jī)器采用相同IP地址牡拇,但機(jī)器的MAC地址不一樣。當(dāng)負(fù)載均衡服務(wù)器接受到請求之后穆律,通過改寫報文的目標(biāo)MAC地址的方式將請求轉(zhuǎn)發(fā)到目標(biāo)機(jī)器實現(xiàn)負(fù)載均衡诅迷。

? ??三層負(fù)載均衡

????負(fù)載均衡服務(wù)器對外依然提供一個VIP,但集群中不同的機(jī)器采用不同的IP地址众旗。當(dāng)負(fù)載均衡服務(wù)器接受到請求之后罢杉,根據(jù)不同的負(fù)載均衡算法,通過IP將請求轉(zhuǎn)發(fā)至不同的真實服務(wù)器贡歧。

? ??四層負(fù)載均衡

????四層負(fù)載均衡服務(wù)器在接受到客戶端請求后滩租,通過修改數(shù)據(jù)包的地址信息(IP+端口號)將流量轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器。

? ??七層負(fù)載均衡

????七層負(fù)載均衡工作在OSI模型的應(yīng)用層利朵,應(yīng)用層協(xié)議較多律想,常用HTTP、DNS 等绍弟。七層負(fù)載就可以基于這些協(xié)議來負(fù)載技即。比如同一個Web服務(wù)器的負(fù)載均衡,除了根據(jù)IP加端口進(jìn)行負(fù)載外樟遣,還可根據(jù)七層的URL而叼、瀏覽器類別、語言來決定是否要進(jìn)行負(fù)載均衡豹悬。

05?負(fù)載均衡算法

????負(fù)載均衡服務(wù)器在決定將請求轉(zhuǎn)發(fā)到具體哪臺真實服務(wù)器時葵陵,是通過負(fù)載均衡算法來實現(xiàn)的。負(fù)載均衡算法可以分為兩類:靜態(tài)負(fù)載均衡算法和動態(tài)負(fù)載均衡算法瞻佛。

????靜態(tài)負(fù)載均衡算法包括:輪詢脱篙、比率、優(yōu)先權(quán)伤柄。

????動態(tài)負(fù)載均衡算法包括:最少連接數(shù)绊困、最快響應(yīng)速度、觀察方法适刀、預(yù)測法秤朗、動態(tài)性能分配、動態(tài)服務(wù)器補充蔗彤、服務(wù)質(zhì)量川梅、服務(wù)類型疯兼、規(guī)則模式。

5.1 輪詢

????輪詢(Round Robin):順序循環(huán)將請求一次順序循環(huán)地連接每個服務(wù)器贫途。以輪詢的方式依次請求調(diào)度不同的服務(wù)器吧彪;實現(xiàn)時,一般為服務(wù)器帶上權(quán)重丢早。

? ??優(yōu)點:服務(wù)器請求數(shù)目相同姨裸;實現(xiàn)簡單、高效怨酝;易水平擴(kuò)展傀缩。

? ??缺點:服務(wù)器壓力不一樣粉洼,不適合服務(wù)器配置不同的情況批糟;請求到目的結(jié)點的不確定,造成其無法適用于有寫操作的場景矢炼。

? ??應(yīng)用場景:數(shù)據(jù)庫或應(yīng)用服務(wù)層中只有讀的場景斤葱。

5.2 比率(Ratio)

????給每個服務(wù)器分配一個加權(quán)值為比例慷垮,根椐這個比例,把用戶的請求分配到每個服務(wù)器揍堕。

5.3 優(yōu)先權(quán)(Priority)

????給所有服務(wù)器分組料身,給每個組定義優(yōu)先權(quán)。當(dāng)最高優(yōu)先級中所有服務(wù)器出現(xiàn)故障衩茸,將請求送給次優(yōu)先級的服務(wù)器組芹血。這種方式,實際為用戶提供一種熱備份的方式楞慈。

5.4 最少連接

????將請求分配到連接數(shù)最少的服務(wù)器(目前處理請求最少的服務(wù)器)幔烛。

? ??優(yōu)點:根據(jù)服務(wù)器當(dāng)前的請求處理情況,動態(tài)分配抖部;

? ??缺點:算法實現(xiàn)相對復(fù)雜说贝,需要監(jiān)控服務(wù)器請求連接數(shù);

5.5 最快模式(Fastest)

????傳遞連接給那些響應(yīng)最快的服務(wù)器慎颗。

5.6 觀察模式(Observed)

????連接數(shù)目和響應(yīng)時間這兩項的最佳平衡為依據(jù)為新的請求選擇服務(wù)器。

5.7 預(yù)測模式(Predictive)

????利用收集到的服務(wù)器當(dāng)前的性能指標(biāo)言询,進(jìn)行預(yù)測分析俯萎,選擇一臺服務(wù)器在下一個時間片內(nèi),其性能將達(dá)到最佳的服務(wù)器相應(yīng)用戶的請求运杭。

5.8 動態(tài)性能分配(Dynamic Ratio-APM)

????根據(jù)收集到的應(yīng)用程序和應(yīng)用服務(wù)器的各項性能參數(shù)夫啊,動態(tài)調(diào)整流量分配。

5.9 動態(tài)服務(wù)器補充(Dynamic Server Act)

????當(dāng)主服務(wù)器群中因故障導(dǎo)致數(shù)量減少時辆憔,動態(tài)地將備份服務(wù)器補充至主服務(wù)器群撇眯。

5.10 服務(wù)質(zhì)量(QoS)

????按不同的優(yōu)先級對數(shù)據(jù)流進(jìn)行分配报嵌。

5.11 服務(wù)類型(ToS)

????按不同的服務(wù)類型(在 Type of Field 中標(biāo)識)負(fù)載均衡對數(shù)據(jù)流進(jìn)行分配。

5.12 規(guī)則模式

????針對不同的數(shù)據(jù)流設(shè)置導(dǎo)向規(guī)則熊榛,用戶可自行設(shè)置锚国。

06?負(fù)載均衡方案

6.1 硬件方案

????采用硬件的方式實現(xiàn)負(fù)載均衡,一般是單獨的負(fù)載均衡服務(wù)器玄坦,價格昂貴血筑,常用的有:F5、A10煎楣、Citrix Netscaler豺总。

? ??優(yōu)點:

??? 1、硬件負(fù)載均衡穩(wěn)定性更強择懂,雙機(jī)或集群的效果更佳喻喳,可以應(yīng)對高并發(fā)、高吞吐的網(wǎng)絡(luò)環(huán)境中困曙。

??? 2沸枯、在策略配置方面,可以實現(xiàn)深度的健康檢查方法赂弓,而不是簡單的ping或tcp的方式绑榴,而是可以針對業(yè)務(wù)層進(jìn)行健康檢查,整體的策略調(diào)度更靈活盈魁、配置更方便翔怎,在七層負(fù)載方面更具優(yōu)勢。

? ??缺點:

??? 1杨耙、價格昂貴赤套;

??? 2、擴(kuò)展能力差珊膜,無法進(jìn)行擴(kuò)展和定制容握;

??? 3、調(diào)試和維護(hù)比較麻煩车柠,需要專業(yè)人員剔氏。

????選擇:

????核心系統(tǒng)必須使用硬件負(fù)載均衡設(shè)備;

????測試系統(tǒng)和一般系統(tǒng)可以使用軟件負(fù)載均衡設(shè)備竹祷。

6.2 軟件方案

????硬件負(fù)載均衡價格昂貴谈跛,在實際應(yīng)用中遠(yuǎn)不如軟件負(fù)載均衡普遍。常用的軟件負(fù)載均衡軟件有Nginx塑陵、LVS感憾、HaProxy、ats令花、perlbal阻桅、pound等凉倚。

????Nginx/LVS/HAProxy是目前使用最廣泛的三種負(fù)載均衡軟件。

? ??對比:

??? LVS:是基于四層的轉(zhuǎn)發(fā)(只能做端口轉(zhuǎn)發(fā)嫂沉,不能做基于URL稽寒、目錄的轉(zhuǎn)發(fā))

??? HAproxy:是基于四層和七層的轉(zhuǎn)發(fā),是專業(yè)的代理服務(wù)器

??? Nginx:是WEB服務(wù)器输瓜,緩存服務(wù)器瓦胎,又是反向代理服務(wù)器,可以做七層的轉(zhuǎn)發(fā)

? ??選擇:

??? 1尤揣、HAproxy和Nginx可做七層轉(zhuǎn)發(fā)搔啊,URL和目錄轉(zhuǎn)發(fā)都可以;

??? 2北戏、中小型企業(yè)推薦使用HAproxy(配置簡單)负芋;

??? 3、在很大并發(fā)量的時候選擇LVS嗜愈。

07?網(wǎng)絡(luò)分層負(fù)載均衡架構(gòu)

????互聯(lián)網(wǎng)領(lǐng)域?qū)τ谪?fù)載均衡的架構(gòu)是隨著網(wǎng)站規(guī)模提升不斷演進(jìn)的旧蛾,大致分為如下幾個階段:

????第一階段:利用Nginx或HAProxy進(jìn)行單點的負(fù)載均衡,該階段服務(wù)器剛從單機(jī)向集群轉(zhuǎn)變蠕嫁,需要在七層做轉(zhuǎn)發(fā)锨天。

????第二階段:隨著網(wǎng)絡(luò)規(guī)模擴(kuò)大,Nginx單點瓶頸突出剃毒,這時使用LVS或者商用Array就是首要選擇病袄,Nginx此時就作為LVS或者Array的節(jié)點來使用,具體LVS或Array的是選擇是根據(jù)公司規(guī)模和預(yù)算來選擇赘阀。

????第三階段:這時網(wǎng)絡(luò)服務(wù)已經(jīng)成為主流產(chǎn)品益缠,此時隨著公司知名度也進(jìn)一步擴(kuò)展,相關(guān)人才的能力以及數(shù)量也隨之提升基公,這時無論從開發(fā)適合自身產(chǎn)品的定制幅慌,以及降低成本來講開源的LVS,已經(jīng)成為首選轰豆,這時LVS會成為主流胰伍。

????常見互聯(lián)網(wǎng)分布式架構(gòu)可分為用戶層、反向代理層秒咨、Web站點層喇辽、業(yè)務(wù)服務(wù)層、數(shù)據(jù)存儲層雨席。互聯(lián)網(wǎng)分層架構(gòu):

????每層之間交互都有相應(yīng)的負(fù)載均衡方案:? ?

????客戶端層->反向代理層:DNS輪詢吠式。

????反向代理層->Web站點層:Ngnix(均衡策略:請求輪詢/最少連接路由/IP哈希)陡厘。

????Web站點層->業(yè)務(wù)服務(wù)層:連接池抽米。

????業(yè)務(wù)服務(wù)層->數(shù)據(jù)存儲層:數(shù)據(jù)分片,讀寫分離糙置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末云茸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谤饭,更是在濱河造成了極大的恐慌标捺,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揉抵,死亡現(xiàn)場離奇詭異亡容,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冤今,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門闺兢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人戏罢,你說我怎么就攤上這事屋谭。” “怎么了龟糕?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵桐磁,是天一觀的道長。 經(jīng)常有香客問我讲岁,道長我擂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任催首,我火速辦了婚禮扶踊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郎任。我一直安慰自己秧耗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布舶治。 她就那樣靜靜地躺著分井,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霉猛。 梳的紋絲不亂的頭發(fā)上尺锚,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音惜浅,去河邊找鬼瘫辩。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伐厌。 我是一名探鬼主播承绸,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挣轨!你這毒婦竟也來了军熏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卷扮,失蹤者是張志新(化名)和其女友劉穎荡澎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晤锹,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡摩幔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抖甘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片热鞍。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衔彻,靈堂內(nèi)的尸體忽然破棺而出薇宠,到底是詐尸還是另有隱情,我是刑警寧澤艰额,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布澄港,位于F島的核電站,受9級特大地震影響柄沮,放射性物質(zhì)發(fā)生泄漏回梧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一祖搓、第九天 我趴在偏房一處隱蔽的房頂上張望狱意。 院中可真熱鬧,春花似錦拯欧、人聲如沸详囤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藏姐。三九已至,卻和暖如春该贾,著一層夾襖步出監(jiān)牢的瞬間羔杨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工杨蛋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留兜材,地道東北人理澎。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像护姆,于是被迫代替她去往敵國和親矾端。 傳聞我的和親對象是個殘疾皇子掏击,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

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