个人习惯把etcd拆解,划分一下几个模块:
对外接口模块:主要是通过grpc来对外实现通信。
raft模块:主要作用是使etcd构成的集群对外看起来是一个整体,提供所谓的分布式存储的功能。raft在etcd中的实现介绍比较好的 文章为:https://www.jianshu.com/p/5aed73b288f7
wal模块:预写日志模块。主要作用是提供数据在存储之前,先写入日志功能,便于故障恢复。内部还可以继续分为日志和快照两部分。日志部分为真实数据日志记录,快照部分为定时为日志部分生成快照,避免日志记录过多导致磁盘写满。
存储模块:etcd把key索引存储在内存中,把value执行为落盘。采用的mvcc机制实现的存储模块。这方面介绍比较好的文章是:https://mp.weixin.qq.com/s?__biz=MzAxMTA4Njc0OQ==&mid=2651442478&idx=2&sn=05a3ec4991f1f38cc7f8d47b4927422e&scene=21#wechat_redirect
补充:
etcd工作流程说明比较好的文章为:https://zhuanlan.zhihu.com/p/54996432
etcd租约介绍比较好的文章:https://my.oschina.net/u/4300698/blog/3382491
etcd的watch机制介绍比较好的文章:https://segmentfault.com/a/1190000021787055