11月23號(hào)視頻,談?wù)勀銓?duì)負(fù)載均衡的了解【文字版】
最近有小伙伴想讓我聊一聊負(fù)載均衡方面的問(wèn)題,我說(shuō),網(wǎng)上有這么多資料了,怎么還需要我來(lái)分享,他說(shuō)網(wǎng)上的很多資料不系統(tǒng),難理解。因此就做了這個(gè)視頻。
關(guān)于負(fù)載均衡,我會(huì)從四個(gè)方面去說(shuō)。
負(fù)載均衡產(chǎn)生的背景
負(fù)載均衡的實(shí)現(xiàn)技術(shù)
負(fù)載均衡的作用范圍
負(fù)載均衡的常用算法
負(fù)載均衡的誕生背景
在互聯(lián)網(wǎng)發(fā)展早期,由于用戶量較少、業(yè)務(wù)需求也比較簡(jiǎn)單。對(duì)于軟件應(yīng)用,我們只需要一臺(tái)高配的服務(wù)器即可完成業(yè)務(wù)的支撐,這樣的軟件架構(gòu)稱為單體架構(gòu)(展示單體架構(gòu)的圖片)

隨著用戶量的增加,服務(wù)器的請(qǐng)流量也隨之增加,在這個(gè)過(guò)程中單體架構(gòu)會(huì)產(chǎn)生兩個(gè)問(wèn)題。
軟件的性能逐步下降,訪問(wèn)延遲越來(lái)越高
容易出現(xiàn)單點(diǎn)故障
為了解決這個(gè)問(wèn)題,我們引入了集群化部署的架構(gòu),也就是把一個(gè)軟件應(yīng)用同時(shí)部署在多個(gè)服務(wù)器上(展示圖片)

架構(gòu)的變化帶來(lái)了兩個(gè)問(wèn)題:
客戶端請(qǐng)求如何均勻的分發(fā)到多臺(tái)目標(biāo)服務(wù)器上?
如何檢測(cè)目標(biāo)服務(wù)器的健康狀態(tài),使得客戶端請(qǐng)求不向已經(jīng)宕機(jī)的服務(wù)器發(fā)送請(qǐng)求。
為了解決這兩個(gè)問(wèn)題,引入了負(fù)載均衡的設(shè)計(jì),簡(jiǎn)單來(lái)說(shuō),負(fù)載均衡機(jī)制的核心目的是讓客戶端的請(qǐng)求合理均勻的分發(fā)到多臺(tái)目標(biāo)服務(wù)器,由于請(qǐng)求被多個(gè)節(jié)點(diǎn)分發(fā),使得服務(wù)端的性能得到有效的提升。
如何實(shí)現(xiàn)負(fù)載均衡呢?
常見(jiàn)的實(shí)現(xiàn)方案有三種!
基于DNS實(shí)現(xiàn)負(fù)載均衡
基于硬件實(shí)現(xiàn)負(fù)載均衡
基于軟件實(shí)現(xiàn)負(fù)載均衡
先來(lái)說(shuō)一下基于DNS實(shí)現(xiàn)負(fù)載均衡的方式,它的實(shí)現(xiàn)方式比較簡(jiǎn)單,只需要在DNS服務(wù)器上針對(duì)某個(gè)域名做多個(gè)IP映射即可。

它的工作原理是:?當(dāng)用戶通過(guò)域名訪問(wèn)某個(gè)網(wǎng)站時(shí),會(huì)先通過(guò)DNS服務(wù)器進(jìn)行域名解析得到一個(gè)IP地址,DNS服務(wù)器可以隨機(jī)分配一個(gè)IP地址進(jìn)行訪問(wèn),這樣就可以實(shí)現(xiàn)目標(biāo)服務(wù)集群的請(qǐng)求分發(fā)。
除此之外,DNS還可以根據(jù)不同的地域分配就近機(jī)房的IP,比如長(zhǎng)沙的小伙伴,可能會(huì)得到在湖南范圍內(nèi)最近的一個(gè)機(jī)房的IP,在這個(gè)模式下可以實(shí)現(xiàn)「就近原則」實(shí)現(xiàn)請(qǐng)求處理,縮短了通信距離從而提升網(wǎng)站訪問(wèn)效率。
DNS實(shí)現(xiàn)負(fù)載均衡的優(yōu)點(diǎn)是:?配置簡(jiǎn)單,實(shí)現(xiàn)成本低,無(wú)需額外的開發(fā)和維護(hù)。
不過(guò)缺點(diǎn)也很明顯:
由于DNS多級(jí)緩存的特性,當(dāng)我們修改DNS配置之后,會(huì)因?yàn)榫彺鎸?dǎo)致IP變更不及時(shí),從而影響負(fù)載均衡的效果。
第二種,基于硬件實(shí)現(xiàn)負(fù)載均衡
硬件負(fù)載設(shè)備,我們可以簡(jiǎn)單把它理解成一個(gè)網(wǎng)絡(luò)設(shè)備,類似于網(wǎng)絡(luò)交換機(jī),它
它的性能很好,每秒能夠處理百萬(wàn)級(jí)別的請(qǐng)求,
支持多種負(fù)載均衡算法,我們可以非常靈活的配置不同的負(fù)載策略
它還具備防火墻等安全功能。
硬件負(fù)載是商業(yè)產(chǎn)品,有專門的售后來(lái)支持,所以企業(yè)不需要花精力去做維護(hù)。
F5是比較常見(jiàn)的硬件負(fù)載設(shè)備,由于硬件負(fù)載設(shè)備價(jià)格比較貴,一般應(yīng)用在大型銀行、政府、電信等領(lǐng)域。
第三種,基于軟件實(shí)現(xiàn)負(fù)載均衡
所謂軟件負(fù)載,就是通過(guò)一些開源軟件或者商業(yè)軟件來(lái)完成負(fù)載均衡的功能。常見(jiàn)的軟件負(fù)載技術(shù)有:Nginx、LVS、HAProxy等。
目前互聯(lián)網(wǎng)企業(yè)絕大部分采用的都是軟件負(fù)載,主要原因是:
免費(fèi),企業(yè)不需要投入較高的成本。
開源,不同企業(yè)對(duì)于負(fù)載均衡的要求有差異,所以可以基于開源軟件上做二次開發(fā)。
靈活性較高
這三種方式,沒(méi)有好壞之分,只有是否合適,因此大家可以根據(jù)實(shí)際情況選擇。
負(fù)載均衡的作用范圍
負(fù)載均衡是作用在網(wǎng)絡(luò)通信上,來(lái)實(shí)現(xiàn)請(qǐng)求的分發(fā)。
而在網(wǎng)絡(luò)架構(gòu)中,基于OSI模型,又分為7層網(wǎng)絡(luò)模型

也就是意味著我們可以在網(wǎng)絡(luò)的某些分層上做請(qǐng)求分發(fā)處理,因此根據(jù)這樣一個(gè)特性,對(duì)于負(fù)載均衡的作用范圍又可以分為:
二層負(fù)載
三層負(fù)載
四層負(fù)載
七層負(fù)載
二層負(fù)載:基于Mac地址來(lái)實(shí)現(xiàn)請(qǐng)求分發(fā),一般采用虛擬Mac的方式實(shí)現(xiàn),服務(wù)器收到請(qǐng)求后,通過(guò)動(dòng)態(tài)分配后端服務(wù)的實(shí)際Mac地址進(jìn)行響應(yīng)從而實(shí)現(xiàn)負(fù)載均衡
三層負(fù)載:基于IP層負(fù)載,一般通過(guò)虛擬IP的方式實(shí)現(xiàn),外部請(qǐng)求訪問(wèn)虛擬IP,服務(wù)器收到請(qǐng)求后根據(jù)后端實(shí)際IP地址進(jìn)行轉(zhuǎn)發(fā)。
四層負(fù)載:?通過(guò)請(qǐng)求報(bào)文中的目標(biāo)地址和端口進(jìn)行負(fù)載,Nginx、F5、LVS等都可以實(shí)現(xiàn)四層負(fù)載。(展示圖片)

七層負(fù)載:?七層負(fù)載是基于應(yīng)用層負(fù)載,也就是服務(wù)器端可以根據(jù)http協(xié)議中請(qǐng)求的報(bào)文信息來(lái)決定把請(qǐng)求分發(fā)到哪個(gè)目標(biāo)服務(wù)器上,比如Cookie、消息體、RequestHeader等。(展示圖片)

?
最后一個(gè),就是負(fù)載均衡的常用算法
所謂負(fù)載均衡算法,就是決定當(dāng)前客戶端請(qǐng)求匹配到目標(biāo)服務(wù)器集群中的具體哪個(gè)節(jié)點(diǎn)。
常見(jiàn)的負(fù)載均衡算法有:
1.輪訓(xùn),也就是多個(gè)服務(wù)器按照順序輪訓(xùn)返回,這樣每個(gè)服務(wù)器都能獲得相同的請(qǐng)求次數(shù)

2.隨機(jī),根據(jù)隨機(jī)算法獲得一個(gè)目標(biāo)服務(wù)地址(就像古時(shí)候皇帝翻牌子),由于該算法具備隨機(jī)性,因此每個(gè)服務(wù)器獲得的請(qǐng)求數(shù)量不一定均等。
3.一致性hash,也就是對(duì)于具有相同hash碼的請(qǐng)求,永遠(yuǎn)發(fā)送到同一個(gè)節(jié)點(diǎn)上。
4.最小連接數(shù),根據(jù)目標(biāo)服務(wù)器的請(qǐng)求數(shù)量來(lái)決定請(qǐng)求分發(fā)的權(quán)重,也就是目標(biāo)服務(wù)集群中,請(qǐng)求更少的節(jié)點(diǎn)將會(huì)獲得更多的請(qǐng)求。這是負(fù)載均衡中比較好的策略,真正能夠?qū)崿F(xiàn)目標(biāo)服務(wù)器的請(qǐng)求均衡。
以上就是關(guān)于負(fù)載均衡相關(guān)的內(nèi)容,當(dāng)然,負(fù)載均衡還有很多值得去挖掘的,比如負(fù)載算法如何實(shí)現(xiàn)?網(wǎng)絡(luò)分層模型的原理等。
對(duì)于網(wǎng)絡(luò)模型這塊,如果有想深度學(xué)習(xí)的同學(xué),在下方留言”想看“,我會(huì)在后續(xù)的內(nèi)容中進(jìn)行整理。
好的,本期的視頻就到這里結(jié)束了,喜歡的朋友記得一鍵三連,加個(gè)關(guān)注,我是頭發(fā)很多的程序員Mic,咱們下期再見(jiàn)。