1. 程式人生 > >dubbo原始碼解析之負載均衡

dubbo原始碼解析之負載均衡

在分散式系統中,負載均衡是必不可少的一個模組,dubbo 中提供了五種負載均衡的實現,在閱讀這塊原始碼之前,建議先學習負載均衡的基礎知識。把看原始碼當做一個印證自己心中所想的過程,這樣會得到事半功倍的效果 以下原始碼分析基於 dubbo 2.77 版本 ### 類結構 先來看一下這一塊的類結構圖 ![](https://img2020.cnblogs.com/blog/1161430/202006/1161430-20200629100956012-2023933430.png) 大部分演算法都是在權重比的基礎上進行負載均衡,`RandomLoadBalance` 是預設的演算法 | 型別 | 描述 | 是否預設 | 是否加權 | | --- | --- | --- | --- | | RandomLoadBalance | 隨機 | 是 | 是,預設權重相同 | | RoundRobinLoadBalance | 輪訓 | 否 | 是,預設權重相同 | | LeastActiveLoadBalance | 最少活躍數呼叫 | 否 | 不完全是,預設權重相同,僅在活躍數相同時按照權重比隨機 | | ConsistentHashLoadBalance | 一致性hash | 否 | 否 | | ShortestResponseLoadBalance | 最短時間呼叫 | 否 | 不完全是,預設權重相同,僅在預估呼叫相同時按照權重比隨機 | ### AbstractLoadBalance `AbstractLoadBalance` 對一些通用的操作做了處理,是一個典型的模板方法模式的實現 `select` 方法只做一些簡單的範圍校驗,具體的實現有子類通過 `doSelect` 方法去實現 ```java @Override