这篇文章旨在从源码角度分析ETCD MVCC、Lease、Watch的实现,帮助我们更好的使用ETCD。
这是ETCD官网给出的解释,ETCD是一个KV存储。现在有太多的KV存储中间件,我们为什么要选择ETCD呢?原因就是这句话:"distributed", "reliable",ETCD是一个分布式的、可靠的KV存储。相比于Redis,ETDC不够快,但足够安全,可靠。每一个中间件都有自己的特点,我选择ETCD有两个原因:
在讨论之前,我们先看下ETCD的目录结构
我认为,以上这些目录中,属于ETCD核心的仅有lease、mvcc、raft、etcdserver,其余都是辅助的功能。其中etcdserver是其他模块的整合。
另外ETCD之所以是"distributed"、"reliable",依赖于raft的实现。raft是一个共识算法,我之前读过一篇关于raft的论文(读的中文版,依然不懂),结合ETCD-raft的代码,依然有很多模棱两可的地方,所以这里不打算讨论raft模块的实现。我一开始写了一些关于怎么直接使用ETCD-raft的文章,后来发现了一篇讲解更好的,那我就不再赘述这部分了,这里直接贴出来。
想了解raft的同学:
以上三者结合着看,我感觉是学习raft最直接的方法了
如何使用ETCD-raft模块:
https://zhuanlan.zhihu.com/p/...
这篇文章我认为已经很详细的说明raft模块的使用,建议阅读
那么这次我想与大家讨论的是ETCD中MVCC、Watch、Lease这三者的实现,讨论ETCD是如何实现这些功能的。涉及到的数据结构有BTree、ADT(红黑树)、优先级队列。