etcd
2021-03-12 10:02:32 0 举报
登录查看完整内容
下次 v
作者其他创作
大纲/内容
2
RawNode
raftLog
+ unstable struct+ storage interface
+ operation1(params):returnType- operation2(params)- operation3()
7
各个结构体包含关系
5
kvstorecontrib/raftexample/kvstore.go
+ proposeC chan<-string+kvStore map[string]string
raft
raftlog
node
1
4
storage
箭头方向为etcd example启动时各个结构体创建流程顺序
RawNoderaft/rawnode.go感觉这个结构体是就是封装了调用raft的方法
+ raft *raft+ prevSSoftSt * SoftState+ prevHardSt pb.HardState
6
noderaft/node.go实现了type Node interface与共识模块交互
+ propc chan msgWithResult+ recvc chan pb.Message+ readyc chan Ready+ advancec chan struct{}+ rn *RawNode
+ newNode(rn) construct | + run() go | 检查是否有完成的 | 消费propc管道并调用raft.Step(m) | 消费recvc管道 |消费tickc并调用rn.Tick()|消费advancec管道+ Tick() 往tickc管道扔扔空struct{}{}+ Propose() 将客户端数据封装pb.MsgProp类型的消息,并放到propc管道
3
raftnode
RaftNodecontrib/raftexample/raft.go
+ proposeC <-chan string 客户端的输入+ commitC chan<- *string 共识模块的输出+ node raft.Node
unstable
raftraft/raft.go
+ id 节点在集群的id+ Term 任期号+ Vote 当前任期,当前节点将选票投给了哪个节点+ raftLog *raftLog+ state StateType 当前角色/follower/candidate/leader/preCadidate+ lead 集群中的leader是谁+ electionElapsed int 选举计时器进度+ heartbeatElapsed int 心跳计时器进度+ heartbeatTimeout 阀值+ electionTimeout 阀值+ tick func() 根据角色方法不同
+ newRaft(c (Config) construct+ becomeFollower()+ becomeCandidate()+ becomePreCandidate()+ becomeLeader()+ Step(m pb.Message)
收藏
0 条评论
回复 删除
下一页