您好,登錄后才能下訂單哦!
如何分析Controller Manager 中的SharedInformer結構,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
絕大多數Controller的實現都依賴一種特殊結構-SharedInformer,它主要負責訂閱etcd上資源的變更并調用注冊的Handlers。
SharedInformer相關的類結構如下圖:
SharedInformer是一個復雜的嵌套結構,自底向上總共包含四層
DeltaFIFO結構實現了Queue(以及Store)接口,在內部使用一個叫做items的map來存儲Delta數據。items的key是通過一個預先傳入的keyFunc對每個入隊的object計算出來的。
基于map的存儲結構能夠使得DeltaFIFO快速檢索到任意一個內部元素(這也是為了實現Store接口),同時queue存儲了元素的進入順序。
Reflector結構能夠通過listWatcher監控etcd上的變更,實時同步到本地的store結構中。
Controller初始化了一個DeltaFIFO結構,并將它作為store創建了一個Reflector結構,用來監控特定的etcd資源的變更。listWatcher觀察到的變更會被存儲到DeltaFIFO中,同時Controller會不斷消費DeltaFIFO中的元素,將它作為入參call構造時傳入的Process Func。
sharedIndexInformer實現了SharedInformer接口,它用自己的HandleDeltas()方法作為Process Func來構造Controller。Controller檢測到的所有資源變更都會回調sharedIndexInformer.HandleDeltas()。
indexer是一種cache結構,它存儲了監控資源的最新數據。當Controller接收到變更的時候,可以通過indexer來獲取變更數據在變更前的值。
sharedProcessor用來存儲所有注冊的Listener。當HandleDeltas被回調時,會觸發sharedProcessor上的distribute()方法,來最終調用所有注冊的Listeners。
通過以上四種數據結構的配合使用,最終實現了從資源監控到Listener回調的整個數據鏈路。
關于如何分析Controller Manager 中的SharedInformer結構問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。