首页 > 其他分享 >informer 架构

informer 架构

时间:2022-12-26 12:23:05浏览次数:37  
标签:DeltaFIFO 架构 Reflector client 事件 go informer Pod

Informer 架构

上图是整个 client-go 的完整架构图,或者说是我们要去实现一个自定义的控制器的一个整体流程,其中黄色图标是开发者需要自行开发的部分,而其它的部分是 client-go 已经提供的,直接使用即可。 由于 client-go 实现非常复杂,我们这里先对上图中最核心的部分 Informer 进行说明。在 Informer 的架构中包含如下几个核心的组件:

Informers 是 client-go 中非常重要得概念,接下来我们来仔细分析下 Informers 的实现原理,下图是 client-go 的官方实现架构图:

Reflector(反射器)

Reflector 用于监控(Watch)指定的 Kubernetes 资源,当监控的资源发生变化时,触发相应的变更事件,例如 Add 事件、Update 事件、Delete 事件,并将其资源对象存放到本地缓存 DeltaFIFO 中。

DeltaFIFO

DeltaFIFO 是一个生产者-消费者的队列,生产者是 Reflector,消费者是 Pop 函数,FIFO 是一个先进先出的队列,而 Delta 是一个资源对象存储,它可以保存资源对象的操作类型,例如 Add 操作类型、Update 操作类型、Delete 操作类型、Sync 操作类型等。

Indexer

Indexer 是 client-go 用来存储资源对象并自带索引功能的本地存储,Reflector 从 DeltaFIFO 中将消费出来的资源对象存储至 Indexer。Indexer 与 Etcd 集群中的数据保持完全一致。这样我们就可以很方便地从本地存储中读取相应的资源对象数据,而无须每次从远程 APIServer 中读取,以减轻服务器的压力。

这里理论知识太多,直接去查看源码显得有一定困难,我们可以用一个实际的示例来进行说明,比如现在我们删除一个 Pod,一个 Informers 的执行流程是怎样的:

  1. 首先初始化 Informer,Reflector 通过 List 接口获取所有的 Pod 对象

  2. Reflector 拿到所有 Pod 后,将全部 Pod 放到 Store(本地缓存)中

  3. 如果有人调用 Lister 的 List/Get 方法获取 Pod,那么 Lister 直接从 Store 中去拿数据

  4. Informer 初始化完成后,Reflector 开始 Watch Pod 相关的事件

  5. 此时如果我们删除 Pod1,那么 Reflector 会监听到这个事件,然后将这个事件发送到 DeltaFIFO 中

  6. DeltaFIFO 首先先将这个事件存储在一个队列中,然后去操作 Store 中的数据,删除其中的 Pod1

  7. DeltaFIFO 然后 Pop 这个事件到事件处理器(资源事件处理器)中进行处理

  8. LocalStore 会周期性地把所有的 Pod 信息重新放回 DeltaFIFO 中去

标签:DeltaFIFO,架构,Reflector,client,事件,go,informer,Pod
From: https://www.cnblogs.com/geraldkohn/p/17005516.html

相关文章

  • Informer 使用
    Informer介绍想要获取资源,可以使用clientset://使用clientset获取Deploymentsdeployments,err:=clientset.AppsV1().Deployments("default").List(context.Bac......
  • StoneDB 首席架构师李浩:如何选择一款 HTAP 产品?
    作者:李浩责编:宇亭当我们选择一款HTAP数据库时,总是先被其相关文档里所描述的优异性能所吸引。卓越的性能是我们选择一款产品的出发点,因为我们希望该款产品能够解决我们业务......
  • 技术架构(10)- 负载均衡
    负载均衡(LoadBalance,简称LB)是高并发、高可用系统必不可少的关键组件,作用是将网络流量按策略分发到多个服务器上,以提高系统整体的响应速度和可用性。硬件负载均衡硬件负......
  • LNMP架构环境之Nginx安装部署
    1.搭建准备#0)操作系统版本cat/etc/redhat-release#1)关闭selinux:setenforce0#临时关闭selinuxgetenforce#查看临时关闭情况sed-i's#SELINUX=enforcing#......
  • .NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构二)--学习笔记
    目录为什么我们用OrleansDaprVSOrleansActor模型Orleans的核心概念结合OPStorming的实践结合OPStorming的实践业务模型设计模型代码实现业务模型......
  • 企业级数据中台的建设方法、架构和技术栈
    ​多数企业都意识到数据的重要性,都希望利用数据来驱动业务发展。但经常会听到这样一句话:“我们企业现在业务都还没做起来,连数据都没有,还不到考虑数据利用的时候。”这句话在......
  • 【博学谷学习记录】超强总结,用心分享|狂野架构TiDB与MySQL兼容性对比
    目录TiDB与MySQL兼容性对比3.1TiDB不支持的MySql特性3.2自增ID3.3SELECT的限制3.4视图3.5默认设置差异3.5.1字符集3.5.2排序规则3.5.3大小写敏感3.5.3.1参数解释......
  • 架构设计(九):估算
    架构设计(九):估算作者:Grey原文地址:博客园:架构设计(九):估算CSDN:架构设计(九):估算估算在系统设计中非常重要,这决定了你的设计是否可以满足要求,要实现比较靠谱的估算,就需要对如......
  • [ 成为架构师系列 ] 1. 第一个 Java Web 程序
    [成为架构师系列]1.第一个JavaWeb程序1.新建mavenwebapp工程打开idea,NewProject,选择Maven,从maven-archetype创建,找到maven-archetype-webapp:......
  • MVC架构和三层架构的关系
    MVC架构模式系统为什么要分层?希望专人干专事,各司其事,职能分工明确,代码耦合度降低软件的架构中:有一个非常著名的架构模式:MVC架构模式M(Modle:数据/业务) V(View:视图/......