成功最有效的方法就是向有经验的人学习!

DeltaFIFO技术原理简单分析

DeltaFIFO

DeltaFIFO原理

Reflector获取到我们的资源列表或者是监听到我们的资源事件变化的时候,他是如何将我们的数据放入到Delta FIFO Queue这个对列里面的,Delta FIFO其实是client-go给我们提供的一种存储,client-go提供了以下几种存储

  • cache: 它是一个内部的struct,实现Store,利用threadSafeMap存放数据
  • UndeltaStore: 实现了Store,利用cache存放数据,数据变更时通过PushFunc发送当前完整状态(数据变更时就会把cache里面的完整状态发送到PushFunc里面去)
  • FIFO: 实现Queue(含Store),利用自已内部的items数据结构存放数据
  • DeltaFIFO:
  • Heap: 实现Store,利用data数据结构存放数据,实现堆数据结构,用于优先级队列的场景
  • ExpirationCache: 实现Store,利用threadSafeMap存放数据

DeltaFIFO的应用场景

  • 希望处理每个对象的变化最多一次时
  • 处理一个对象时,希望知道这个对象与上次处理时,发生了哪些变化
  • 希望一个对象删除时,我们仍然能处理它
  • 能够周期性的重新处理所有的对象(实际就是Resync方法实现的逻辑)

DeltaFIFO定义

type DeltaFIFO struct {
    //...
    //存放Delta
    //与queue中存放的key是同样的key
    //items里面的key其实也是KeyFunc计算出来的key
    items map[string] Deltas

    //可以确保顺序性
    queue []string

    //默认使用MetaNamespaceKeyFunc,默认使用<namespace>/<name>的格式,不指定namespace时用name
    //那么我们从队列中key里面也可以获取到重要的信息了
    keyFunc KeyFunc

    //其实就是Indexer,专门存放全量数据的地方
    knownObjects KeyListerGetter
    //...
}

事件的生产和消费

生产

  • ReflectorList
  • ReflectorWatch
  • RelfectorResync

消费

  • 事件派发到work queue
  • 刷新本地缓存
赞(2) 打赏
未经允许不得转载:陈桂林博客 » DeltaFIFO技术原理简单分析
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册