ETCD探索

HammerMax · · 1216 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

ETCD探索

梗概

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

ETCD是什么?

image.png
这是ETCD官网给出的解释,ETCD是一个KV存储。现在有太多的KV存储中间件,我们为什么要选择ETCD呢?原因就是这句话:"distributed", "reliable",ETCD是一个分布式的、可靠的KV存储。相比于Redis,ETDC不够快,但足够安全,可靠。每一个中间件都有自己的特点,我选择ETCD有两个原因:

  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是其他模块的整合。

另外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(红黑树)、优先级队列。

目录

ETCD-MVCC
ETCD-Watch
ETCD-Lease


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:HammerMax

查看原文:ETCD探索

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1216 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传