集群:集群是一種計算機(jī)系統(tǒng),是一種服務(wù)器結(jié)構(gòu)。把一組多個計算機(jī),包括硬件和軟件組織在一個網(wǎng)絡(luò)中。相互連接起來共同完成某個工作。對用戶來說使用的是一個計算機(jī), 集群對用戶是透明的。
負(fù)載均衡:負(fù)載均衡是以集群為前提的。英文名稱為 Load Balance,其意思就是將負(fù)載(工作任務(wù))進(jìn)行平衡、分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行。
對于網(wǎng)絡(luò)應(yīng)用而言,并不是一開始就需要負(fù)載均衡,當(dāng)網(wǎng)絡(luò)應(yīng)用的訪問量不斷增長,單個處理單元無法滿足負(fù)載需求時,網(wǎng)絡(luò)應(yīng)用流量將要出現(xiàn)瓶頸時,負(fù)載均衡才會起到作用。一般通過一個或者多個前端負(fù)載均衡器,將工作負(fù)載分發(fā)到后端的一組服務(wù)器上,從而達(dá)到整個系統(tǒng)的高性能和高可用性。
負(fù)載均衡有兩方面的含義:首先,單個重負(fù)載的工作分配到多臺服務(wù)器做并行處理,每個服務(wù)器處理結(jié)束后,將結(jié)果匯總,返回給用戶,系統(tǒng)處理能力得到大幅度提高,這是集群(cluster)技術(shù)帶來的優(yōu)勢。第二層含義是:大量的并發(fā)訪問或數(shù)據(jù)流量分擔(dān)到多臺服務(wù)器分別處理,減少用戶等待響應(yīng)的時間。每個訪問分配給不同的服務(wù)器處理。
Dubbo 提供了多種均衡策略,缺省為 random 隨機(jī)調(diào)用。
A、Random LoadBalance隨機(jī),按權(quán)重設(shè)置隨機(jī)概率。
在一個截面上碰撞的概率高,但調(diào)用量越大分布越均勻,而且按概率使用權(quán)重后也比較均勻,有利于動態(tài)調(diào)整提供者權(quán)重。
B、 RoundRobin LoadBalance輪循,按公約后的權(quán)重設(shè)置輪循比率。
存在慢的提供者累積請求問題,比如:第二臺機(jī)器很慢,但沒掛,當(dāng)請求調(diào)到第二臺時就卡在那,久而久之,所有請求都卡在調(diào)到第二臺上。
C、 LeastActive LoadBalance最少活躍調(diào)用數(shù),相同活躍數(shù)的隨機(jī),活躍數(shù)指調(diào)用前后計數(shù)差。
使慢的提供者收到更少請求,因為越慢的提供者的調(diào)用前后計數(shù)差會越大。
D、ConsistentHash LoadBalance一致性 Hash,相同參數(shù)的請求總是發(fā)到同一提供者。
當(dāng)某一臺提供者掛時,原本發(fā)往該提供者的請求,基于虛擬節(jié)點,平攤到其它提供者, 不會引起劇烈變動。算法參見:http://en.wikipedia.org/wiki/Consistent_hashing。
缺省只對第一個參數(shù) Hash,如果要修改,請配置<dubbo:parameter key="hash.arguments"
value="0,1" />
<dubbo:service interface="..." loadbalance="roundrobin" />或<dubbo:reference interface="..." loadbalance="roundrobin" />
隨機(jī):loadbalance=” random”
輪詢:loadbalance=” roundrobin”
最少活躍:loadbalance=” leastactive”
一致性 Hash:loadbalance=” consistenthash”