分布式基礎(chǔ)-負(fù)載均衡

前言

我理解只所以要分布式系統(tǒng),無(wú)非兩個(gè)原因數(shù)據(jù)和計(jì)算,單機(jī)系統(tǒng)無(wú)法保存這么大的數(shù)據(jù)量,所以要分布式系統(tǒng)來(lái)保存; 計(jì)算嘛,就是說(shuō)單機(jī)計(jì)算無(wú)法達(dá)到性能要求,比如雙十一一臺(tái)機(jī)器肯定處理不過(guò)來(lái),所以需要后臺(tái)一系列復(fù)雜的分布式系統(tǒng)來(lái)解決。

前面有聊過(guò)一篇關(guān)于分布式存儲(chǔ)的贤惯,就是講數(shù)據(jù)如何劃分到不同的機(jī)器上硼婿,這一篇也類似氮趋,說(shuō)到底是將計(jì)算分布到不同的機(jī)器上。

一 負(fù)載均衡

負(fù)載均衡辕翰,這里面的負(fù)載可以是數(shù)據(jù),也可以是請(qǐng)求,如果是數(shù)據(jù)留晚,就是原來(lái)的數(shù)據(jù)分片存儲(chǔ),也就是將一堆數(shù)據(jù)如何均衡地保存到各個(gè)分布式節(jié)點(diǎn)上告嘲;更多時(shí)候講負(fù)載均衡是將計(jì)算的負(fù)載均衡错维,將請(qǐng)求處理或計(jì)算均衡到不同的節(jié)點(diǎn)上去。 只所以這樣分橄唬,請(qǐng)求是類似于Nginx分發(fā)HTTP請(qǐng)求赋焕,后臺(tái)的應(yīng)用程序是啟動(dòng)的獨(dú)立的服務(wù),處理結(jié)果立刻返回仰楚;而計(jì)算隆判,比如說(shuō)我們常見(jiàn)的spark運(yùn)行任務(wù),將任務(wù)分派到不同的節(jié)點(diǎn)上僧界,這里還利用了數(shù)據(jù)本地性原理侨嘀,搬遷數(shù)據(jù)不如搬遷程序,將程序發(fā)到各個(gè)節(jié)點(diǎn)上執(zhí)行捂襟,執(zhí)行結(jié)果往往是保存本地或發(fā)kafka或者通過(guò)管道傳遞給下游系統(tǒng)咬腕。
同時(shí)注意,負(fù)載均衡不完全是指性能的均衡葬荷,有時(shí)候還要考慮業(yè)務(wù)均衡涨共,不同的任務(wù)分片算法目標(biāo)不一樣纽帖;負(fù)載均衡也不無(wú)完全只有分布式系統(tǒng)才有負(fù)載均衡,相同的業(yè)務(wù)同時(shí)開(kāi)啟兩個(gè)以及以上的服務(wù)節(jié)點(diǎn)都可以做均衡煞赢,這些節(jié)點(diǎn)并不一定要組成分布式系統(tǒng)抛计。

常見(jiàn)的有三類負(fù)載均衡: DNS負(fù)載均衡,軟件負(fù)載均衡照筑,硬件負(fù)載均衡吹截;還有按照負(fù)載均衡所屬層次來(lái)分,又分為四層負(fù)載均衡凝危,七層負(fù)載均衡波俄。

1.1 DNS負(fù)載均衡

DNS負(fù)載均衡比較簡(jiǎn)單是依賴于DNS服務(wù)器來(lái)實(shí)現(xiàn)的,DNS服務(wù)器配置一個(gè)域名對(duì)應(yīng)多個(gè)IP蛾默,DNS根據(jù)一定的負(fù)載均衡算法來(lái)實(shí)現(xiàn)負(fù)載均衡懦铺,具體如下示意圖:


DNS負(fù)載均衡

優(yōu)點(diǎn)

  1. 簡(jiǎn)單,將負(fù)載均衡的任務(wù)交給DNS服務(wù)器支鸡,應(yīng)用服務(wù)器不用做任何調(diào)整冬念。
  2. DNS服務(wù)器可以根據(jù)用戶位置來(lái)返回就近的地址,加快訪問(wèn)速度牧挣。

缺點(diǎn)

  1. DNS是分級(jí)存儲(chǔ)的急前,每級(jí)都可能緩存A紀(jì)錄,如果一個(gè)服務(wù)器下線瀑构,即使修改A紀(jì)錄裆针,DNS服務(wù)器要等待緩存失效還需要一段時(shí)間,在這段時(shí)間內(nèi)訪問(wèn)都會(huì)失敗寺晌。
  2. DNS服務(wù)器對(duì)后臺(tái)的服務(wù)器無(wú)感知世吨,無(wú)法確定后臺(tái)服務(wù)器的壓力情況,通過(guò)簡(jiǎn)單的就近原則或輪詢策略呻征,有可能會(huì)造成壓力大的服務(wù)器壓力越來(lái)越大耘婚。
  3. 擴(kuò)展性比較差,無(wú)法根據(jù)業(yè)務(wù)特點(diǎn)做負(fù)載均衡陆赋。

1.2 硬件負(fù)載均衡

硬件負(fù)載均衡是一個(gè)單獨(dú)的硬件沐祷,常見(jiàn)的F5系列,A10系列等奏甫,功能強(qiáng)大戈轿,但是也非常貴,價(jià)格從十多萬(wàn)到幾十萬(wàn)阵子,如下圖:

F5負(fù)載均衡設(shè)備

優(yōu)點(diǎn)

  1. 功能強(qiáng)大,支持協(xié)議層數(shù)多思杯,均衡算法多,還支持各種加密等。

F5 BIG-IP LTM的官方名稱叫做本地流量管理器色乾,可以做4-7層負(fù)載均衡誊册,具有負(fù)載均衡、應(yīng)用交換暖璧、會(huì)話交換案怯、狀態(tài)監(jiān)控、智能網(wǎng)絡(luò)地址轉(zhuǎn)換澎办、通用持續(xù)性嘲碱、響應(yīng)錯(cuò)誤處 理、IPv6網(wǎng)關(guān)局蚀、高級(jí)路由麦锯、智能端口鏡像、SSL加速琅绅、智能HTTP壓縮扶欣、TCP優(yōu)化、第7層速率整形千扶、內(nèi)容緩沖料祠、內(nèi)容轉(zhuǎn)換、連接加速澎羞、高速緩存髓绽、 Cookie加密、選擇性內(nèi)容加密煤痕、應(yīng)用攻擊過(guò)濾梧宫、拒絕服務(wù)(DoS)攻擊和SYN Flood保護(hù)接谨、防火墻-包過(guò)濾摆碉、包消毒等功能。

  1. 性能好脓豪,支持并發(fā)能力在100萬(wàn)以上巷帝,在200萬(wàn)到800萬(wàn)左右,看下上面98萬(wàn)的F5的部分性能指標(biāo):

每秒L7請(qǐng)求數(shù):1M
每秒L4連接數(shù):400K
每秒L4 HTTP請(qǐng)求數(shù):7M
最大L4并發(fā)連接數(shù):24M
L4吞吐量:40Gbps
L7吞吐量:18Gbps
最大軟件壓縮:10Gbps

缺點(diǎn)

  1. 缺點(diǎn)貴扫夜。
  2. 如果不支持的功能楞泼,就無(wú)法擴(kuò)展實(shí)現(xiàn)。

1.3 軟件負(fù)載均衡

主流有三種軟件負(fù)載均衡(LVS笤闯,Nginx堕阔,HAproxy)。
LVS 是Linux virtual Server 簡(jiǎn)稱颗味, 1998年5月由章文嵩博士發(fā)起的自由軟件項(xiàng)目超陆,現(xiàn)在博士本人在滴滴任高級(jí)副總裁。

LVS原理

LVS的原理是通過(guò)鏈來(lái)實(shí)現(xiàn)浦马,過(guò)程如下簡(jiǎn)單描述下:

  1. 客戶端通過(guò)訪問(wèn)虛擬IP时呀,首先到達(dá)PREROUTING鏈张漂。
  2. 內(nèi)核發(fā)現(xiàn)是本機(jī)地址后,數(shù)據(jù)包發(fā)送給INPUT鏈谨娜,IPVS工作在INPUT鏈上航攒,如果數(shù)據(jù)包的目標(biāo)地址和端口沒(méi)在規(guī)則中,數(shù)據(jù)包經(jīng)過(guò)INPUT鏈送到用戶空間趴梢;
  3. 如果在規(guī)則中漠畜,則根據(jù)規(guī)則將目標(biāo)地址改成真實(shí)的服務(wù)器地址,將報(bào)文發(fā)送到POSTROUTING鏈中
  4. 經(jīng)由POSTROUTING鏈發(fā)送到后端的應(yīng)用服務(wù)器坞靶。
  5. 響應(yīng)時(shí)候盆驹,將源ip經(jīng)由這個(gè)服務(wù)器(DirectorServer)改成VIP返回給客戶端。

LVS有兩種模式滩愁,一種是NAT模式躯喇,類似剛才上文將VIP轉(zhuǎn)成真實(shí)的IP;另一種方式硝枉,DR模式廉丽,是修改目標(biāo)的MAC地址為真實(shí)的MAC地址,還有tun隧道妻味,通過(guò)將IP封裝一層再包著的IP的方法來(lái)轉(zhuǎn)發(fā)負(fù)載均衡正压;full-nat模式,源端地址和目標(biāo)端地址都會(huì)發(fā)生改變责球。

優(yōu)點(diǎn)

  1. 性能好焦履,可以達(dá)到80萬(wàn)/s,對(duì)內(nèi)存和資源消耗低雏逾。
  2. 穩(wěn)定性嘉裤,可靠性高,自身有熱備方案Keepalived栖博。
  3. 工作在四層上屑宠,性能好,幾乎所有的協(xié)議都可用仇让。

缺點(diǎn)

  1. 伸縮能力一般典奉,Director本身可能就成為系統(tǒng)瓶頸。
  2. 不能完全判斷節(jié)點(diǎn)故障丧叽。

1.4 Nginx負(fù)載均衡

Nginx 是軟件七層負(fù)載均衡卫玖,可以支持HTTP/EMAIL等。
優(yōu)點(diǎn):

  1. 搭建比較簡(jiǎn)單踊淳,維護(hù)和部署都很簡(jiǎn)單假瞬。
  2. 便宜,開(kāi)源產(chǎn)品,不需要購(gòu)買單獨(dú)硬件笨触。
  3. 可以根據(jù)后臺(tái)服務(wù)器的情況做靈活調(diào)整懦傍,可以自己開(kāi)發(fā)相關(guān)插件。
    比如可以把請(qǐng)求發(fā)到連接最少的服務(wù)上芦劣,可以根據(jù)響應(yīng)時(shí)間有限分配粗俱。
# 簡(jiǎn)單輪詢
upstream  dalaoyang-server {
       server    localhost:10001;
       server    localhost:10002;
}

#帶權(quán)重的輪詢
upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}
#ip hash
upstream  dalaoyang-server {
       ip_hash; 
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}
#最少連接
upstream  dalaoyang-server {
       least_conn;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}
#響應(yīng)時(shí)間最短優(yōu)先
upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;  
}
  1. 可以支持各種算法,比如簡(jiǎn)單輪詢虚吟,根據(jù)權(quán)重輪詢寸认,可以結(jié)合ip做hash輪詢。

缺點(diǎn):

  1. 性能差了些串慰。

二 負(fù)載均衡中的算法

2.1 輪詢算法

輪詢算法是最簡(jiǎn)單的算法偏塞,每個(gè)請(qǐng)求過(guò)來(lái)之后按照服務(wù)器的順序輪著發(fā),這樣是最均衡的了邦鲫,但是這種均衡類似于大鍋飯灸叼,不是真正的均衡,如果按照哈希算法來(lái)講的話庆捺,我覺(jué)得是第N個(gè)請(qǐng)求對(duì)服務(wù)器總數(shù)取模古今,這種簡(jiǎn)單的算法;

不同的服務(wù)器可能性能不一樣滔以,所以就有了帶權(quán)重的輪詢算法捉腥,如上面Nginx配置,可以根據(jù)機(jī)器的性能不同設(shè)置不同的輪詢算法你画,最簡(jiǎn)單的帶權(quán)重的輪詢算法抵碟,我們可以將一個(gè)性能好的服務(wù)器劃分為多個(gè)性能差的虛擬服務(wù)器,然后再用輪詢算法進(jìn)行輪詢即可坏匪。

優(yōu)點(diǎn):

  1. 算法比較簡(jiǎn)單拟逮,性能比較高,在同構(gòu)機(jī)器環(huán)境下剥槐,負(fù)載很均衡唱歧。

缺點(diǎn):

  1. 如果請(qǐng)求需要的資源不同宪摧,比如一個(gè)請(qǐng)求更消耗CPU粒竖,另外一個(gè)更需要內(nèi)存,簡(jiǎn)單輪詢不利于任務(wù)的運(yùn)行几于。
  2. 由于采用輪詢算法蕊苗,同一個(gè)客戶端發(fā)起兩次請(qǐng)求不一定由相同的機(jī)器處理,那就會(huì)造成緩存失效等問(wèn)題沿彭。

此算法適應(yīng)于請(qǐng)求所需的資源比較接近場(chǎng)景朽砰,最好機(jī)器也是同構(gòu)的機(jī)器。Nginx里面使用各種改進(jìn)的輪詢策略進(jìn)行負(fù)載均衡。

2.2 哈希和一致性哈希策略

為防止緩存失效瞧柔,我們希望一個(gè)客戶端的請(qǐng)求落到一臺(tái)服務(wù)器處理漆弄。我們可以使用以前說(shuō)的帶負(fù)載的哈希算法和一致性哈希算法,設(shè)置合理的話造锅,負(fù)載會(huì)很均衡撼唾,而且相同的客戶端發(fā)起的請(qǐng)求落到同一個(gè)服務(wù)器處理,緩存不會(huì)失效哥蔚。

如果沒(méi)有采用一致性哈希算法倒谷,每次一臺(tái)機(jī)器發(fā)生故障后,大量請(qǐng)求會(huì)重新定位到不同的機(jī)器上糙箍,緩存一樣失效渤愁,可能會(huì)造成一些機(jī)器的壓力過(guò)大問(wèn)題。

缺點(diǎn)還有同樣沒(méi)有根據(jù)任務(wù)的資源使用情況來(lái)分配機(jī)器深夯。

2.3 隨機(jī)策略

請(qǐng)求過(guò)來(lái)之后抖格,隨機(jī)挑選存活服務(wù)器進(jìn)行任務(wù)的派發(fā)。好處是簡(jiǎn)單咕晋,缺點(diǎn)更多他挎,首先每次相同的客戶端不一定到達(dá)相同的服務(wù)器端,不利于緩存數(shù)據(jù)捡需;沒(méi)有考慮到服務(wù)器的性能差異問(wèn)題办桨;
同樣對(duì)任務(wù)的種類也沒(méi)有區(qū)分。

2.4 資源調(diào)度

負(fù)載均衡無(wú)法是將資源分配給任務(wù)站辉,前幾種策略沒(méi)有多細(xì)致地關(guān)注后臺(tái)節(jié)點(diǎn)的資源實(shí)時(shí)使用情況呢撞,可能會(huì)造成閑的很閑,忙的很忙的情況饰剥。所以就有了資源調(diào)度框架殊霞,像yarn,mesos等資源管理框架汰蓉,通過(guò)收集節(jié)點(diǎn)的資源占用情況绷蹲,再根據(jù)任務(wù)特點(diǎn),比如是消耗cpu還是消耗內(nèi)存顾孽,更合理地精細(xì)化地調(diào)度任務(wù)祝钢,這也算一種負(fù)載均衡策略,由于比較復(fù)雜若厚,有空聊聊吧拦英。

三 古詩(shī)詞欣賞

 獄中題壁
      [清代] [譚嗣同]

望門投止思張儉,忍死須臾待杜根测秸。
我自橫刀向天笑疤估,去留肝膽兩昆侖灾常。(版本一)

望門投趾憐張儉,直諫陳書(shū)愧杜根铃拇。
手?jǐn)S歐刀仰天笑钞瀑,留將公罪后人論。(版本二)

今天是9.18 , 今日中國(guó)是否可以令先輩們有所寬慰慷荔;
不過(guò)美國(guó)對(duì)中國(guó)的公司的打壓是一個(gè)接著一個(gè)仔戈,我輩還當(dāng)自強(qiáng)!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拧廊,一起剝皮案震驚了整個(gè)濱河市监徘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吧碾,老刑警劉巖凰盔,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異倦春,居然都是意外死亡户敬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門睁本,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)尿庐,“玉大人,你說(shuō)我怎么就攤上這事呢堰〕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵枉疼,是天一觀的道長(zhǎng)皮假。 經(jīng)常有香客問(wèn)我,道長(zhǎng)骂维,這世上最難降的妖魔是什么惹资? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮航闺,結(jié)果婚禮上褪测,老公的妹妹穿的比我還像新娘。我一直安慰自己潦刃,他們只是感情好侮措,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著福铅,像睡著了一般萝毛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滑黔,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天笆包,我揣著相機(jī)與錄音,去河邊找鬼略荡。 笑死庵佣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汛兜。 我是一名探鬼主播巴粪,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粥谬!你這毒婦竟也來(lái)了肛根?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤漏策,失蹤者是張志新(化名)和其女友劉穎派哲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掺喻,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芭届,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了感耙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褂乍。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖即硼,靈堂內(nèi)的尸體忽然破棺而出逃片,到底是詐尸還是另有隱情,我是刑警寧澤只酥,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布题诵,位于F島的核電站,受9級(jí)特大地震影響层皱,放射性物質(zhì)發(fā)生泄漏性锭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一叫胖、第九天 我趴在偏房一處隱蔽的房頂上張望草冈。 院中可真熱鬧,春花似錦瓮增、人聲如沸怎棱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拳恋。三九已至,卻和暖如春砸捏,著一層夾襖步出監(jiān)牢的瞬間谬运,已是汗流浹背隙赁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梆暖,地道東北人伞访。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像轰驳,于是被迫代替她去往敵國(guó)和親厚掷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359