dubbo四種負載均衡策略

客戶端調用服務端時,如何選擇調用服務端的哪臺機器上的服務呢。這就設計到負載均衡策略了,dubbo給出瞭如下四種策略:

  • 隨機模式。按權重設置隨機概率。在一個截面上碰撞的概率較高,但調用越大分佈越均勻
  • 輪詢模式。按公約後的權重設置輪詢比例。但存在響應慢的服務提供者會累積請求
  • 最少活躍調用數。響應快的提供者接受越多請求,響應慢的接受越少請求
  • 一致hash。根據服務提供者ip設置hash環,攜帶相同的參數總是發送的同一個服務提供者,若服務掛了,則會基於虛擬節點平攤到其他提供者上

而且,dubbo的這幾種策略都是通過@SPI方式使用的:

通過LoadBalance我們也知道了,dubbo默認的負載均衡策略是隨機調用法。

package com.alibaba.dubbo.rpc.cluster;

import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.extension.Adaptive;
import com.alibaba.dubbo.common.extension.SPI;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.RpcException;
import java.util.List;

@SPI("random")
public interface LoadBalance {
  @Adaptive({"loadbalance"})
  <T> Invoker<T> select(List<Invoker<T>> var1, URL var2, Invocation var3) throws RpcException;
}

那麼,如何改變dubbo的負載均衡策略呢?

1)如果是springboot項目,直接註解在@Reference中引用,然後註明loadblance="xx".其中xx爲每個實現類中的name的值

public class LoadBalanceTest{

   @Reference(loadBalance="consistenthash", retries = 3)
   private UserService userService;

}

2)xml配置的方式

<dubbo:serviceinterface="..." loadbalance="consistenthash"/>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章