您的位置:首頁 >  新聞中心 > 云通訊公告
  云通訊公告
 

多種負(fù)載均衡算法及其 Java 代碼實(shí)現(xiàn)

來源:原創(chuàng)    時(shí)間:2017-11-15    瀏覽:0 次

首先給我們介紹下什么是負(fù)載均衡
負(fù)載均衡 樹立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它供給了一種廉價(jià)有用通明的辦法擴(kuò)展 網(wǎng)絡(luò)設(shè)備和 效勞器的帶寬、添加 吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理才能、進(jìn)步網(wǎng)絡(luò)的靈敏性和可用性。
負(fù)載均衡,英文名稱為Load Balance,其意思就是分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行履行,例如Web 效勞器、 FTP效勞器、 企業(yè)要害應(yīng)用效勞器和其它要害使命效勞器等,然后共同完成工作使命。
多種負(fù)載均衡算法及其Java代碼完成
本文敘述的是”將外部發(fā)送來的懇求均勻分配到對稱結(jié)構(gòu)中的某一臺(tái)效勞器上”的各種算法,并以Java代碼演示每種算法的具體完成,OK,下面進(jìn)入正題,在進(jìn)入正題前,先寫一個(gè)類來模仿Ip列表:

輪詢(Round Robin)法
輪詢調(diào)度算法的原理是每一次把來自用戶的懇求輪番分配給內(nèi)部中的效勞器,從1開端,直到N(內(nèi)部效勞器個(gè)數(shù)),然后從頭開端循環(huán)。算法的長處是其簡潔性,它無需記載當(dāng)時(shí)一切銜接的狀況,所以它是一種無狀況調(diào)度。
其代碼完成大致如下:

因?yàn)閟erverWeightMap中的地址列表是動(dòng)態(tài)的,隨時(shí)可能有機(jī)器上線、下線或許宕機(jī),因而為了防止可能呈現(xiàn)的并發(fā)問題,辦法內(nèi)部要新建局部變量serverMap,現(xiàn)將serverMap中的內(nèi)容仿制到線程本地,以防止被多個(gè)線程修正。這樣可能會(huì)引進(jìn)新的問題,仿制今后serverWeightMap的修正無法反映給serverMap,也就是說這一輪挑選效勞器的過程中,新增效勞器或許下線效勞器,負(fù)載均衡算法將無法獲悉。新增無所謂,如果有效勞器下線或許宕機(jī),那么可能會(huì)拜訪到不存在的地址。因而,效勞調(diào)用端需求有相應(yīng)的容錯(cuò)處理,比方從頭建議一次server挑選并調(diào)用。
關(guān)于當(dāng)時(shí)輪詢的方位變量pos,為了確保效勞器挑選的次序性,需求在操作時(shí)對其加鎖,使得同一時(shí)間只能有一個(gè)線程能夠修正pos的值,不然當(dāng)pos變量被并發(fā)修正,則無法確保效勞器挑選的次序性,甚至有可能導(dǎo)致keyList數(shù)組越界。
輪詢法的長處在于:企圖做到懇求搬運(yùn)的肯定均衡。
輪詢法的缺陷在于:為了做到懇求搬運(yùn)的肯定均衡,有必要支付適當(dāng)大的價(jià)值,因?yàn)闉榱舜_保pos變量修正的互斥性,需求引進(jìn)重量級(jí)的失望鎖synchronized,這將會(huì)導(dǎo)致該段輪詢代碼的并發(fā)吞吐量發(fā)作顯著的下降。
隨機(jī)(Random)法
經(jīng)過體系的隨機(jī)算法,依據(jù)后端效勞器的列表巨細(xì)值來隨機(jī)選取其間的一臺(tái)效勞器進(jìn)行拜訪。由概率核算理論能夠得知,跟著客戶端調(diào)用效勞端的次數(shù)增多,
其實(shí)際作用越來越接近于平均分配調(diào)用量到后端的每一臺(tái)效勞器,也就是輪詢的成果。
隨機(jī)法的代碼完成大致如下:

全體代碼思路和輪詢法共同,先重建serverMap,再獲取到server列表。在選取server的時(shí)分,經(jīng)過Random的nextInt辦法取0~keyList.size()區(qū)間的一個(gè)隨機(jī)值,然后從效勞器列表中隨機(jī)獲取到一臺(tái)效勞器地址進(jìn)行回來。依據(jù)概率核算的理論,吞吐量越大,隨機(jī)算法的作用越接近于輪詢算法的作用。
源地址哈希(Hash)法
源地址哈希的思維是依據(jù)獲取客戶端的IP地址,經(jīng)過哈希函數(shù)核算得到的一個(gè)數(shù)值,用該數(shù)值對效勞器列表的巨細(xì)進(jìn)行取模運(yùn)算,得到的成果就是客服端要拜訪效勞器的序號(hào)。選用源地址哈希法進(jìn)行負(fù)載均衡,同一IP地址的客戶端,當(dāng)后端效勞器列表不變時(shí),它每次都會(huì)映射到同一臺(tái)后端效勞器進(jìn)行拜訪。
源地址哈希算法的代碼完成大致如下:

前兩部分和輪詢法、隨機(jī)法一樣就不說了,不同在于路由挑選部分。經(jīng)過客戶端的ip也就是remoteIp,取得它的Hash值,對效勞器列表的巨細(xì)取模,成果就是選用的效勞器在效勞器列表中的索引值。
源地址哈希法的長處在于:確保了相同客戶端IP地址將會(huì)被哈希到同一臺(tái)后端效勞器,直到后端效勞器列表改變。依據(jù)此特性能夠在效勞消費(fèi)者與效勞供給者之間樹立有狀況的session會(huì)話。
源地址哈希算法的缺陷在于:除非集群中效勞器的十分安穩(wěn),根本不會(huì)上下線,不然一旦有效勞器上線、下線,那么經(jīng)過源地址哈希算法路由到的效勞器是效勞器上線、下線前路由到的效勞器的概率十分低,如果是session則取不到session,如果是緩存則可能引發(fā)”雪崩”。如果這么解說不適合了解,能夠看我之前的一篇文章MemCache超具體解讀,共同性Hash算法部分。
加權(quán)輪詢(Weight Round Robin)法
不同的后端效勞器可能機(jī)器的裝備和當(dāng)時(shí)體系的負(fù)載并不相同,因而它們的抗壓才能也不相同。給裝備高、負(fù)載低的機(jī)器裝備更高的權(quán)重,讓其處理更多的請;而裝備低、負(fù)載高的機(jī)器,給其分配較低的權(quán)重,下降其體系負(fù)載,加權(quán)輪詢能很好地處理這一問題,并將懇求次序且依照權(quán)重分配到后端。加權(quán)輪詢法的代碼完成大致如下:

與輪詢法相似,只是在獲取效勞器地址之前添加了一段權(quán)重核算的代碼,依據(jù)權(quán)重的巨細(xì),將地址重復(fù)地添加到效勞器地址列表中,權(quán)重越大,該效勞器每輪所取得的懇求數(shù)量越多。
加權(quán)隨機(jī)(Weight Random)法
與加權(quán)輪詢法一樣,加權(quán)隨機(jī)法也依據(jù)后端機(jī)器的裝備,體系的負(fù)載分配不同的權(quán)重。不同的是,它是依照權(quán)重隨機(jī)懇求后端效勞器,而非次序。

這段代碼適當(dāng)所以隨機(jī)法和加權(quán)輪詢法的結(jié)合,比較好了解,就不解說了。
最小銜接數(shù)(Least Connections)法
最小銜接數(shù)算法比較靈敏和智能,因?yàn)楹蠖诵谄鞯难b備不盡相同,關(guān)于懇求的處理有快有慢,它是依據(jù)后端效勞器當(dāng)時(shí)的銜接狀況,動(dòng)態(tài)地選取其間當(dāng)時(shí)
積壓銜接數(shù)最少的一臺(tái)效勞器來處理當(dāng)時(shí)的懇求,盡可能地進(jìn)步后端效勞的使用功率,將擔(dān)任合理地分流到每一臺(tái)效勞器。
前面幾種辦法費(fèi)盡心思來完成效勞消費(fèi)者懇求次數(shù)分配的均衡,當(dāng)然這么做是沒錯(cuò)的,能夠?yàn)楹蠖说亩嗯_(tái)效勞器平均分配工作量,最大程度地進(jìn)步效勞器的使用率,可是實(shí)際狀況是否真的如此?實(shí)際狀況中,懇求次數(shù)的均衡真的能代表負(fù)載的均衡嗎?這是一個(gè)值得考慮的問題。
上面的問題,再換一個(gè)視點(diǎn)來說就是:今后端效勞器的視角來調(diào)查體系的負(fù)載,而非懇求建議方來調(diào)查。最小銜接數(shù)法便歸于此類。
最小銜接數(shù)算法比較靈敏和智能,因?yàn)楹蠖诵谄鞯难b備不盡相同,關(guān)于懇求的處理有快有慢,它正是依據(jù)后端效勞器當(dāng)時(shí)的銜接狀況,動(dòng)態(tài)地選取其間當(dāng)時(shí)積壓銜接數(shù)最少的一臺(tái)效勞器來處理當(dāng)時(shí)懇求,盡可能地進(jìn)步后端效勞器的使用功率,將負(fù)載合理地分流到每一臺(tái)機(jī)器。因?yàn)樽钚°暯訑?shù)規(guī)劃效勞器銜接數(shù)的匯總和感知,規(guī)劃與完成較為繁瑣,此處就不說它的完成了。


免费视频观无码一区,国内精品一区二区无码,99精品无码视频在线播放,ā片国产在线播放