dubbo原始碼解析之負載均衡
阿新 • • 發佈:2020-06-29
在分散式系統中,負載均衡是必不可少的一個模組,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