ETCD探索

ETCD探索

梗概

这篇文章旨在从源码角度分析ETCD MVCC、Lease、Watch的实现,帮助咱们更好的使用ETCD。git

ETCD是什么?

image.png
这是ETCD官网给出的解释,ETCD是一个KV存储。如今有太多的KV存储中间件,咱们为何要选择ETCD呢?缘由就是这句话:"distributed", "reliable",ETCD是一个分布式的、可靠的KV存储。相比于Redis,ETDC不够快,但足够安全,可靠。每个中间件都有本身的特色,我选择ETCD有两个缘由:github

  1. ETCD是GO写的,因此GO用起来很方便。(不用ZK的缘由)
  2. 扩容方便。

在讨论以前,咱们先看下ETCD的目录结构
image.png算法

  • auth 访问权限
  • client/clientv3 GO客户端SDK
  • contrib 里面放着raftexample实现
  • embed 主要是config
  • etcdctl
  • etcdmain 入口程序
  • etcdserver 主server
  • functional/hack 一些很杂的东西,好比CMD、DockerFile之类的
  • integration 和etcd集群相关
  • lease 租约
  • logos
  • mvcc ETCD的底层存储,包含Watch实现
  • pkg ETCD使用的工具集合
  • proxy ETCD支持的grpc、http
  • raft raft模块
  • scripts/security/tests/tools/version 顾名思义
  • wal 日志模块

我认为,以上这些目录中,属于ETCD核心的仅有lease、mvcc、raft、etcdserver,其他都是辅助的功能。其中etcdserver是其余模块的整合。segmentfault

另外ETCD之因此是"distributed"、"reliable",依赖于raft的实现。raft是一个共识算法,我以前读过一篇关于raft的论文(读的中文版,依然不懂),结合ETCD-raft的代码,依然有不少模棱两可的地方,因此这里不打算讨论raft模块的实现。我一开始写了一些关于怎么直接使用ETCD-raft的文章,后来发现了一篇讲解更好的,那我就再也不赘述这部分了,这里直接贴出来。
想了解raft的同窗:安全

以上三者结合着看,我感受是学习raft最直接的方法了数据结构

如何使用ETCD-raft模块:
https://zhuanlan.zhihu.com/p/...
这篇文章我认为已经很详细的说明raft模块的使用,建议阅读mvc

那么此次我想与你们讨论的是ETCD中MVCC、Watch、Lease这三者的实现,讨论ETCD是如何实现这些功能的。涉及到的数据结构有BTree、ADT(红黑树)、优先级队列。分布式

目录

ETCD-MVCC
ETCD-Watch
ETCD-Lease工具

相关文章
相关标签/搜索