缓存和发布订阅都是后端开发中常用的手段,其中缓存主要是用于可丢失数据的暂存,发布订阅主要是用于消息传递,今天给大家介绍一个k8s中带有发布订阅的缓存实现,其目标是给定一个时间,只关注该时间后续的事件,主要是用于近实时状态数据的获取
1. 业务背景
在k8s中的kubelet中支持不同的容器运行时,为了缓存容器运行时当前所有可见的Pod/Container就构造了一个Cache结构,当一个事件发生后,kubelet接收到事件后,此时需要获取当前Pod的状态,此时要获取的状态,就必须要求是在事件产生后的最新的状态,而不能是之前的状态,
2. 核心实现
2.1 数据与订阅记录
2.1.1 状态数据
状态数据主要是存储一个pod的状态数据
type data struct {
// 存储Pod的状态
status *PodStatus
// 试图检测Pod状态出错信息
err error
// 上次数据的修改时间
modified time.Time
}
2.1.2 订阅记录
订阅记录其实指的是一个订阅需求,其通过一个chan来进行数据通知,其中time字段是过滤条件&#x