Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

watch 关键设计 | 袁昊的学习笔记 #43

Open
howieyuen opened this issue Jan 6, 2021 · 0 comments
Open

watch 关键设计 | 袁昊的学习笔记 #43

howieyuen opened this issue Jan 6, 2021 · 0 comments

Comments

@howieyuen
Copy link
Owner

https://howieyuen.github.io/docs/kubernetes/kube-apiserver/key-design-of-etcd-watch/

注:本文转自 图解 kubernetes 中基于 etcd 的 watch 关键设计
本文介绍了 kubernetes 针对 etcd 的 watch 场景,k8s 在性能优化上面的一些设计, 逐个介绍缓存、定时器、序列化缓存、bookmark 机制、forget 机制、 针对数据的索引与 ringbuffer 等组件的场景以及解决的问题, 希望能帮助到那些对 apiserver 中的 watch 机制实现感兴趣的朋友。

  1. 事件驱动与控制器 # k8s 中并没有将业务的具体处理逻辑耦合在 rest 接口中,rest 接口只负责数据的存储, 通过控制器模式,分离数据存储与业务逻辑的耦合,保证 apiserver 业务逻辑的简洁。
    控制器通过 watch 接口来感知对应的资源的数据变更,从而根据资源对象中的期望状态与当前状态之间的差异, 来决策业务逻辑的控制,watch 本质上做的事情其实就是将感知到的事件发生给关注该事件的控制器。
  2. Watch 的核心机制 # 这里我们先介绍基于 etcd 实现的基础的 watch 模块。
    2.1 事件类型与 etcd # 一个数据变更本质上无非就是三种类型:新增、更新和删除, 其中新增和删除都比较容易因为都可以通过当前数据获取,而更新则可能需要获取之前的数据, 这里其实就是借助了 etcd 中 revision 和 mvcc 机制来实现,这样就可以获取到之前的状态和更新后的状态, 并且获取后续的通知。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant