C/C++教程

ETCD探索

本文主要是介绍ETCD探索,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

这篇关于ETCD探索的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!