每个节点等待发起选举的时间点不一致,优雅的解决了潜在的竞选活锁,同时易于理解
来自:04 | Raft协议:etcd如何实现高可用、数据强一致的?
11 人划过
etcd 通过引入一个 consistent index 的字段,来存储系统当前已经执行过的日志条目索引,实现幂等性。
来自:03 | 基础架构:etcd一个写请求是如何执行的?
8 人划过
如上图所示,在读事务中,它首先需要根据 key 从 treeIndex 模块获取版本号,因我们未带版本号读,默认是读取最新的数据。treeIndex 模块从 B-tree 中,根据 key 查找到 keyIndex 对象后,匹配有效的 generation,返回 generation 的 revisions 数组中最后一个版本号{2,0}给读事务对象。
来自:07 | MVCC:如何实现多版本并发控制?
6 人划过
一方面可能是你的磁盘 IO 比较慢。因为 etcd 从 Raft 的 Ready 结构获取到相关待提交日志条目后,它需要将此消息写入到 WAL 日志中持久化。你可以通过观察 etcd_wal_fsync_durations_seconds_bucket 指标来确定写 WAL 日志的延时。若延时较大,你可以使用 SSD 硬盘解决
来自:17 | 性能及稳定性(下):如何优化及扩展etcd性能?
5 人划过
etcd 启动的时候,会通过 mmap 机制将 db 文件映射到内存,后续可从内存中快速读取文件中的数据。
来自:10 | boltdb:如何持久化存储你的key-value数据?
5 人划过
而无需全量同步,它是 etcd Watch 机制数据增量同步的核心。
来自:08 | Watch:如何高效获取数据变化通知?
3 人划过
将有效的版本号保存到 map 数据结构中
来自:11 | 压缩:如何回收旧版本数据?
3 人划过
优化方案是 compact 的时候会将 treeIndex 克隆一份,以空间来换时间,尽量降低锁阻塞带来的超时问题
来自:16 | 性能及稳定性(上):如何优化及扩展etcd性能?
3 人划过
通过 Watch 机制各自监听 prefix 相同,revision 比自己小的 key,因为只有 revision 比自己小的 key 释放锁,我才能有机会,获得锁
来自:21 | 分布式锁:为什么基于etcd实现分布式锁比Redis锁更安全?
3 人划过
最后你要注意的是,此特性对性能有一定影响,目前仍然是试验特性。你可以通过 experimental-enable-lease-checkpoint 参数开启。
来自:06 | 租约:如何检测你的客户端存活?
3 人划过
*精彩内容为该课程各文章中划线次数最多的内容
编辑推荐
包含这门课的学习路径
架构师
28门课程 151.9w人学习
运维工程师
32门课程 149.2w人学习
云原生工程师
14门课程 86.5w人学习
后端工程师
27门课程 184.1w人学习
看过的人还看了