etcd实战课
唐聪
腾讯云资深工程师,etcd活跃贡献者
立即订阅
2003 人已学习
课程目录
已更新 9 讲 / 共 27 讲
0/3登录后,你可以任选3讲全文学习。
开篇词 (1讲)
开篇词|为什么你要学习etcd?
免费
基础篇 (8讲)
01 | etcd的前世今生:为什么Kubernetes使用etcd?
02 | 基础架构:etcd一个读请求是如何执行的?
03 | 基础架构:etcd一个写请求是如何执行的?
04 | Raft协议:etcd如何实现高可用、数据强一致的?
05 | 鉴权:如何保护你的数据安全?
06 | 租约:如何检测你的客户端存活?
07 | MVCC:如何实现多版本并发控制?
08 | Watch:如何高效获取数据变化通知?
etcd实战课
15
15
1.0x
00:00/00:00
登录|注册

07 | MVCC:如何实现多版本并发控制?

唐聪 2021-02-03
你好,我是唐聪。
01课里,我和你介绍 etcd v2 时,提到过它存在的若干局限,如仅保留最新版本 key-value 数据、丢弃历史版本。而 etcd 核心特性 watch 又依赖历史版本,因此 etcd v2 为了缓解这个问题,会在内存中维护一个较短的全局事件滑动窗口,保留最近的 1000 条变更事件。但是在集群写请求较多等场景下,它依然无法提供可靠的 Watch 机制。
那么不可靠的 etcd v2 事件机制,在 etcd v3 中是如何解决的呢?
我今天要和你分享的 MVCC(Multiversion concurrency control)机制,正是为解决这个问题而诞生的。
MVCC 机制的核心思想是保存一个 key-value 数据的多个历史版本,etcd 基于它不仅实现了可靠的 Watch 机制,避免了 client 频繁发起 List Pod 等 expensive request 操作,保障 etcd 集群稳定性。而且 MVCC 还能以较低的并发控制开销,实现各类隔离级别的事务,保障事务的安全性,是事务特性的基础。
希望通过本节课,帮助你搞懂 MVCC 含义和 MVCC 机制下 key-value 数据的更新、查询、删除原理,了解 treeIndex 索引模块、boltdb 模块是如何相互协作,实现保存一个 key-value 数据多个历史版本。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《etcd实战课》,如需阅读全部文章,
请订阅文章所属专栏
立即订阅
登录 后留言

精选留言(7)

  • 云原生工程师
    老师每讲内容太丰富了
    2021-02-03
    2
  • 五味子
    我理解etcd采用延迟删除,1是为了保证key对应的watcher能够获取到key的所有状态信息,留给watcher时间做相应的处理。2是实时从boltdb删除key,会可能触发树的不平衡,影响其他读写请求的性能。

    作者回复: 赞,理解很到位

    2021-02-04
    1
  • shuff1e
    当你再次查询 hello 的时候,treeIndex 模块根据 key hello 查找到 keyindex 对象后,若发现其存在空的 generation 对象,并且查询的版本号大于被删除时的版本号,则会返回空。
    ---
    如果删除了之后,又重新写入了。
    查询的最新的版本号,还是会返回最新的数据的吧。

    作者回复: 嗯,是的,新写入后会生成新的generation, 匹配generation过程中会优先匹配最新的一代,然后从中返回最后一次修改的版本号,就可从boltdb查询到最新的数据

    2021-02-03
    1
  • mckee
    思考题:
    etcd 为什么删除使用 lazy delete 方式呢?相比同步 delete, 各有什么优缺点?
    etcd要保存key的历史版本,直接删除就不能支持revision查询了;
    lazy方式性能更高,空闲空间可以再利用;

    当你突然删除大量 key 后,db 大小是立刻增加还是减少呢?
    应该会增大,etcd不会立即把空间返回系统而是维护起来后续使用,维护空闲页面应该需要一些内存;
    2021-02-05
  • 一步
    在进行 boltdb 存储的时候 key 和 value 都被编码了,这个编码的规则是什么的?
    2021-02-04
  • 一步
    为什么 etcd v2 版本基于内存的 Watch 机制会不可靠呢? 存在历史版本不就可以比较key 的 value 是否有变化的?

    作者回复: etcd v2历史版本只保存最近1000条,重启就没了,详细watch机制分析可看08讲,已更新

    2021-02-04
  • mmm
    “基于 Backend/boltdb 提供的 MVCC 机制,etcd 可实现读写不冲突。”
    老师buffer由于全拷贝实现了并发读,那treeindex和boltdb读写如何做到不冲突呢?
    2021-02-04
收起评论
7
返回
顶部