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