dubbo運(yùn)行的過程中兼蕊,在兩個位置會使用負(fù)載均衡初厚。
1.有多個注冊中心時,客戶端使用負(fù)載均衡選擇其中一個注冊中心上注冊的服務(wù)孙技;
2.客戶端使用負(fù)載均衡選擇一個注冊中心上注冊的多個服務(wù)产禾。
這兩個位置使用相同的配置選擇負(fù)載均衡算法,通過
@Reference(loadbalance = "XXXX")
指定牵啦,所以這兩個位置使用的負(fù)載均衡算法是相同的亚情。
對多注冊中心負(fù)載均衡
當(dāng)存在多個注冊中心時,客戶端啟動的時候哈雏,會創(chuàng)建ZoneAwareClusterInvoker對象(該對象不能使用SPI替換)楞件。ZoneAwareClusterInvoker對象包含客戶端注冊到注冊中心的url和MockClusterInvoker對象集合,每個注冊中心對應(yīng)一個MockClusterInvoker對象裳瘪。
當(dāng)客戶端調(diào)用遠(yuǎn)程服務(wù)時土浸,客戶端調(diào)用ZoneAwareClusterInvoker的doInvoke方法,doInvoke方法使用配置的負(fù)載均衡類選擇MockClusterInvoker對象集合中的一個對象彭羹。
如果通過負(fù)載均衡找到的MockClusterInvoker對象是不可用的黄伊,dubbo會遍歷MockClusterInvoker對象集合,選擇集合中第一個可用的對象派殷。
對多服務(wù)負(fù)載均衡
客戶端使用MockClusterInvoker對象調(diào)用遠(yuǎn)程服務(wù)还最。默認(rèn)情況下,MockClusterInvoker對象將調(diào)用遠(yuǎn)程服務(wù)的任務(wù)委托給FailoverClusterInvoker毡惜。FailoverClusterInvoker通過select方法選擇合適的服務(wù)拓轻。select方法的入?yún)ㄘ?fù)載均衡對象,InvokerWrapper對象集合等经伙,其中每個服務(wù)對應(yīng)一個InvokerWrapper對象扶叉,InvokerWrapper對象是對遠(yuǎn)程調(diào)用服務(wù)的包裝類。