在集群負載均衡時,Dubbo提供了4種均衡策略,默認為Random(隨機調用)
負載均衡策略:
1)、Random LoadBalance(隨機,按照權重的設置隨機概率)
2)、RoundRobin LoadBalance(輪詢,按照權重設置輪詢比率)
請求次數 | 提供者ID |
1 | 服務提供者1 |
2 | 服務提供者2 |
3 | 服務提供者3 |
4 | 服務提供者1 |
5 | 服務提供者2 |
6 | 服務提供者2 |
7 | 服務提供者2 |
3)、LeastActive LoadBalance(最少活躍數,ping值(延遲低)的調用,相同延遲的情況下隨機)
由於服務提供者1的延遲低,在保證延遲不變的情況下,服務提供者1將始終被調用
4)、ConsistentHash LoadBalance
一致性Hash,相同參數的請求總是發到同一個服務提供者(相同參數默認是指請求的第一個參數)
當原本發送到特定服務提供者的請求,而該服務提供者剛好宕掉,那么該請求將基於虛擬節點平攤到其它服務提供者,不會引起劇烈的變動。
*修改默認的負載均衡配置
通過暴露或引用服務的loadbalance屬性修改
1 @Component //org.springframework.stereotype.Component 2 @Service(loadbalance = "roundrobin") //com.alibaba.dubbo.config.annotation.Service 3 public class UserServiceImpl implements UserService { 4 ... 5 }
1 @Reference(loadbalance = "roundrobin") 2 private UserService userService;
*修改負載均衡權重
通過暴露服務的weight屬性修改
1 @Component //org.springframework.stereotype.Component 2 @Service(loadbalance = "roundrobin",weight = 100) //com.alibaba.dubbo.config.annotation.Service 3 public class UserServiceImpl implements UserService { 4 ... 5 }
**一般在項目中不會在代碼層面指定權重而是在監控中心(dubbo-admin)中對服務動態的指定權重。