[原始碼分析] Dynomite 分散式儲存引擎 之 DynoJedisClient(2)
阿新 • • 發佈:2021-02-06
# [原始碼分析] Dynomite 分散式儲存引擎 之 DynoJedisClient(2)
[toc]
## 0x00 摘要
上文我們介紹了 NetFlix Dynomite 客戶端 DynoJedisClient 的 連線管理和拓撲感知部分,本文將繼續分析自動發現和故障轉移。
## 0x02 需求 & 思路
我們還是要回顧下基本思路和圖例。
因為要為上層遮蔽資訊,所以 DynoJedisClient 就需要應對各種複雜資訊,需要對系統有深刻的瞭解,,比如:
- 如何維護連線,為持久連線提供連線池;
- 如何維護拓撲;
- 如何負載均衡;
- 如何故障轉移;
- 如何自動重試及發現,比如自動重試掛掉的主機。自動發現叢集中的其他主機。
- 如何監控底層機架狀態;
因此,DynoJedisClient 的思路是:java驅動提供多個策略介面,可以用來驅動程式行為調優。包括負載均衡,重試請求,管理節點連線等等。
目前圖例如下:
![](https://img2020.cnblogs.com/blog/1850883/202102/1850883-20210202212315830-368454949.png)
## 0x3 自動發現
自動發現 是在 ConnectionPoolImpl 的 start 方法中,啟動了執行緒,定期重新整理host狀態,進行update。
### 2.1 執行緒
重新整理執行緒邏輯如下,就是定期:
- 呼叫 hostsUpdater 來獲得最新的狀態;
- 呼叫 updateHosts 來依據這些狀態 更新 ConnectionPoolImpl 內部成員變數;
```java
@Override
publi