在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。
主要文件说明
在ETCD中,Raft协议实现的源码主要在 etcd/raft 目录下
1.raft.go 实现Raft协议的主要逻辑。
2.log.go 用于维护日志记录,其中包括两部分 log,持久化 log 和 未持久化 log
3.log_unstable.go 用于维护未持久化 log
4.stable.go 定义存储接口协议,同时实现 MemoryStorage 存储实例
5.node.go & rawnode.go 共同实现 Raf t节点,一个 node 相当于一个 raft 节点。主要做消息转发功能,当有请求时,会调用底层 raft 协议处理,当底层 raft 处理完之后,会将消息封装,然后传递给上层模块处理。
6.tracker/inflights.go 用于维护已发送,但未得到对应节点响应的消息日志记录。
7.tracker/processs.go 用于维护单个节点状态,比如节点活跃状态、已提交的 Index、已匹配的 Index 等。
8. tracker/tracker.go 用于管理所有节点的状态。
9. quorum 目录下的文件,主要用于实现 quorum 机制(过半机制)
10. confchange 目录下的文件,是用于实现在接收的状态机配置变更时,如何实现当前节点的配置变更。
11.raftpb 目录下的文件是消息协议文件(protobuf)
Raft 协议的数据结构
type raft struc