新聞中心
負(fù)載均衡是指,將請求/數(shù)據(jù)分?jǐn)偟蕉鄠€(gè)操作單元上執(zhí)行,關(guān)鍵在于均衡。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供鯉城網(wǎng)站建設(shè)、鯉城做網(wǎng)站、鯉城網(wǎng)站設(shè)計(jì)、鯉城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、鯉城企業(yè)網(wǎng)站模板建站服務(wù),10多年鯉城做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
然而,后端的服務(wù)器有可能硬件條件不同:
- 如果對標(biāo)低配的服務(wù)器“均勻”分?jǐn)傌?fù)載,高配的服務(wù)器利用率會(huì)不足
- 如果對標(biāo)高配的服務(wù)器“均勻”分?jǐn)傌?fù)載,低配的服務(wù)器會(huì)扛不住
能否根據(jù)異構(gòu)服務(wù)器的處理能力來動(dòng)態(tài)、自適應(yīng)進(jìn)行負(fù)載均衡,以及過載保護(hù)呢?
負(fù)載均衡通常是怎么做的?
service層的負(fù)載均衡,一般是通過service連接池來實(shí)現(xiàn)的,調(diào)用方連接池會(huì)建立與下游服務(wù)多個(gè)連接,每次請求“隨機(jī)”獲取連接,來保證訪問的均衡性。
負(fù)載均衡、故障轉(zhuǎn)移、超時(shí)處理等細(xì)節(jié)也都是通過調(diào)用方連接池來實(shí)現(xiàn)的。
調(diào)用方連接池能否,根據(jù)service的處理能力,動(dòng)態(tài)+自適應(yīng)的進(jìn)行負(fù)載調(diào)度呢?
(1) 方案一:可以通過“靜態(tài)權(quán)重”標(biāo)識service的處理能力。
最容易想到的方法,可以為每個(gè)下游service設(shè)置一個(gè)“權(quán)重”,代表service的處理能力,來調(diào)整訪問到每個(gè)service的概率,如上圖所示:
- 假設(shè)ip1,ip2,ip3的處理能力相同,可以設(shè)置weight1=1,weight2=1,weight3=1,這樣三個(gè)service連接被獲取到的概率分別就是1/3,1/3,1/3,能夠保證均衡訪問;
- 假設(shè)ip1的處理能力是ip2,ip3的處理能力的2倍,可以設(shè)置weight1=2,weight2=1,weight3=1,這樣三個(gè)service連接被獲取到的概率分別就是2/4,1/4,1/4,能夠保證處理能力強(qiáng)的service分到等比的流量,不至于資源浪費(fèi);
Nginx就具備類似的能力。
- 方案優(yōu)點(diǎn):簡單粗暴,能夠快速的實(shí)現(xiàn)異構(gòu)服務(wù)器的負(fù)載均衡。
- 方案缺點(diǎn):權(quán)重是固定的,無法自適應(yīng)動(dòng)態(tài)調(diào)整,而很多時(shí)候,服務(wù)器的處理能力是很難用一個(gè)固定的數(shù)值量化。
(2) 方案二:通過“動(dòng)態(tài)權(quán)重”標(biāo)識service的處理能力。
如何來標(biāo)識一個(gè)service的處理能力呢?
服務(wù)能不能處理得過來,該由調(diào)用方說了算:
- 調(diào)用服務(wù),快速處理,處理能力跟得上
- 調(diào)用服務(wù),處理超時(shí),處理能力很有可能跟不上了
如何來設(shè)計(jì)動(dòng)態(tài)權(quán)重?
可以這么玩:
- 用一個(gè)動(dòng)態(tài)權(quán)重,來標(biāo)識每個(gè)service的處理能力,默認(rèn)初始處理能力相同,即分配給每個(gè)service的概率相等;
- 每當(dāng)service成功處理一個(gè)請求,認(rèn)為service處理能力足夠,權(quán)重動(dòng)態(tài)+1;
- 每當(dāng)service超時(shí)處理一個(gè)請求,認(rèn)為service處理能力可能要跟不上了,權(quán)重動(dòng)態(tài)-10;
畫外音:
權(quán)重下降,會(huì)比權(quán)重上升更快。
為了方便權(quán)重的處理,可以把權(quán)重的范圍限定為[0, 100],把權(quán)重的初始值設(shè)為60分。
舉例說明:
假設(shè)service-ip1,service-ip2,service-ip3的動(dòng)態(tài)權(quán)重初始值:
- weight1=60
- weight2=60
- weight3=60
剛開始時(shí),請求分配給這3臺(tái)service的概率分別是60/180,60/180,60/180,即負(fù)載是均衡的。
隨著時(shí)間的推移:
- 處理能力強(qiáng)的service成功處理的請求越來越多
- 處理能力弱的service偶爾有超時(shí)
隨著動(dòng)態(tài)權(quán)重的增減,權(quán)重會(huì)發(fā)生變化:
- weight1=100
- weight2=60
- weight3=40
那么此時(shí),請求分配給這3臺(tái)service的概率分別是100/200,60/200,40/200,即處理能力強(qiáng)的service會(huì)被分配到更多的流量。
那什么是過載保護(hù)?
如上圖所示,如果沒有過載保護(hù):
- 隨著外部負(fù)載的不斷升高,系統(tǒng)實(shí)際處理負(fù)載會(huì)增加
- 外部負(fù)載升高到一個(gè)臨界值,系統(tǒng)會(huì)被壓垮,實(shí)際處理能力會(huì)降為0
畫外音:這就是所謂的“掉底”。
過載保護(hù),是指當(dāng)外部負(fù)載超過系統(tǒng)處理能力時(shí),系統(tǒng)會(huì)進(jìn)行自我保護(hù),依然能對外提供有損的穩(wěn)定服務(wù)。
如上圖所示,如果進(jìn)行了過載保護(hù):
- 隨著外部負(fù)載的不斷升高,系統(tǒng)實(shí)際處理負(fù)載會(huì)增加
- 外部負(fù)載即使超過一個(gè)臨界值,系統(tǒng)不會(huì)被壓垮,而能保持一定的處理能力
畫外音:外部負(fù)載***大,系統(tǒng)也不會(huì)“掉底”。
那如何進(jìn)行過載保護(hù)?
(1) 方案一:可以通過“靜態(tài)權(quán)重”標(biāo)識service的處理能力。
這是最簡易的方式,服務(wù)端設(shè)定一個(gè)負(fù)載閾值,超過這個(gè)閾值的請求壓過來,全部拋棄。
畫外音:這個(gè)方式不是特別優(yōu)雅。
(2) 方案二:借助“動(dòng)態(tài)權(quán)重”來實(shí)施過載保護(hù)。
如同異構(gòu)服務(wù)器負(fù)載均衡,仍然通過:
- 成功處理加分(+1)
- 處理超時(shí)扣分(-10)
這種動(dòng)態(tài)權(quán)重,來標(biāo)識后端的處理能力。
畫外音:仍然是在連接池層面實(shí)現(xiàn)的。
當(dāng)一個(gè)服務(wù)端屢次處理超時(shí),權(quán)重不斷降低時(shí),連接池只要實(shí)施一些策略,就能夠?qū)Α耙伤七^載”的服務(wù)器進(jìn)行降壓,而不用服務(wù)器“拋棄請求”這么粗暴的實(shí)施過載保護(hù)。
應(yīng)該實(shí)施什么樣的策略,來對“疑似過載”的服務(wù)器進(jìn)行降壓保護(hù)呢?
可以這么玩:
(1) 如果某一個(gè)服務(wù)器,連續(xù)3個(gè)請求都超時(shí),即連續(xù)-10分三次,就可以認(rèn)為,服務(wù)器處理不過來了,得給這個(gè)服務(wù)器喘一小口氣,于是設(shè)定策略:接下來的若干時(shí)間內(nèi),例如1秒,負(fù)載不再分配給這個(gè)服務(wù)器;
畫外音:休息1秒后,再分給它。
(2) 如果某一個(gè)service的動(dòng)態(tài)權(quán)重,降為了0(休息了3次還超時(shí)),就可以認(rèn)為,服務(wù)器完全處理不過來了,得給這個(gè)服務(wù)器喘一大口氣,于是設(shè)定策略:接下來的若干時(shí)間內(nèi),例如1分鐘,請求不再分配給這個(gè)服務(wù)器;
畫外音:根據(jù)經(jīng)驗(yàn),此時(shí)服務(wù)器一般在fullGC,差不多1分鐘能回過神來。
這樣的話,不但能借助“動(dòng)態(tài)權(quán)重”來實(shí)施動(dòng)態(tài)自適應(yīng)的異構(gòu)服務(wù)器負(fù)載均衡,還能在客戶端層面更優(yōu)雅的實(shí)施過載保護(hù),在某個(gè)下游服務(wù)器快要響應(yīng)不過來的時(shí)候,給其喘息的機(jī)會(huì)。
過載保護(hù)要注意什么問題?
要防止過載保護(hù)引起服務(wù)器的雪崩,如果“整體負(fù)載”已經(jīng)超過了“服務(wù)器集群”的處理能力,怎么轉(zhuǎn)移請求也是處理不過來的。這時(shí),還是得通過拋棄請求來實(shí)施自我保護(hù)。
總結(jié)
- 負(fù)載均衡、故障轉(zhuǎn)移、超時(shí)處理通常是連接池層面來實(shí)施的
- 異構(gòu)服務(wù)器負(fù)載均衡,最簡單的方式是靜態(tài)權(quán)重法,缺點(diǎn)是無法自適應(yīng)動(dòng)態(tài)調(diào)整
- 動(dòng)態(tài)權(quán)重法,可以動(dòng)態(tài)的根據(jù)服務(wù)器的處理能力來分配負(fù)載,需要有連接池層面的微小改動(dòng)
- 過載保護(hù),是在負(fù)載過高時(shí),服務(wù)器為了保護(hù)自己,保證一定處理能力的一種自救方式
- 動(dòng)態(tài)權(quán)重法,還可以用做服務(wù)器的過載保護(hù)
【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】
分享題目:過載保護(hù)+異構(gòu)服務(wù)器的負(fù)載均衡,怎么設(shè)計(jì)?
標(biāo)題URL:http://m.5511xx.com/article/cdchhdc.html


咨詢
建站咨詢
