1. 程式人生 > >[原始碼分析] Dynomite 分散式儲存引擎 之 DynoJedisClient(2)

[原始碼分析] Dynomite 分散式儲存引擎 之 DynoJedisClient(2)

# [原始碼分析] 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