如何分析ControllerManager中的SharedInformer结构

如何分析Controller Manager 中的SharedInformer结构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

岳塘ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

绝大多数Controller的实现都依赖一种特殊结构-SharedInformer,它主要负责订阅etcd上资源的变更并调用注册的Handlers。

SharedInformer相关的类结构如下图:

SharedInformer是一个复杂的嵌套结构,自底向上总共包含四层

Queue

DeltaFIFO结构实现了Queue(以及Store)接口,在内部使用一个叫做items的map来存储Delta数据。items的key是通过一个预先传入的keyFunc对每个入队的object计算出来的。

基于map的存储结构能够使得DeltaFIFO快速检索到任意一个内部元素(这也是为了实现Store接口),同时queue存储了元素的进入顺序。

Reflector

Reflector结构能够通过listWatcher监控etcd上的变更,实时同步到本地的store结构中。

Controller

Controller初始化了一个DeltaFIFO结构,并将它作为store创建了一个Reflector结构,用来监控特定的etcd资源的变更。listWatcher观察到的变更会被存储到DeltaFIFO中,同时Controller会不断消费DeltaFIFO中的元素,将它作为入参call构造时传入的Process Func。

sharedIndexInformer

sharedIndexInformer实现了SharedInformer接口,它用自己的HandleDeltas()方法作为Process Func来构造Controller。Controller检测到的所有资源变更都会回调sharedIndexInformer.HandleDeltas()。

indexer是一种cache结构,它存储了监控资源的最新数据。当Controller接收到变更的时候,可以通过indexer来获取变更数据在变更前的值。

sharedProcessor用来存储所有注册的Listener。当HandleDeltas被回调时,会触发sharedProcessor上的distribute()方法,来最终调用所有注册的Listeners。

通过以上四种数据结构的配合使用,最终实现了从资源监控到Listener回调的整个数据链路。

如何分析Controller Manager 中的SharedInformer结构

关于如何分析Controller Manager 中的SharedInformer结构问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


网站栏目:如何分析ControllerManager中的SharedInformer结构
路径分享:http://azwzsj.com/article/pohicj.html