-
Notifications
You must be signed in to change notification settings - Fork 106
1 整体结构
flabby edited this page Jun 27, 2017
·
3 revisions
- 各种线程:
- PeerThread(N-1个):
- 负责和其他Floyd节点通信;
- 发送RequestVote和AppendEntries请求给其他节点的WorkerThread,并统计更新结果;
- 每个Peer负责一个节点;N个节点的Floyd集群,每个节点有(N-1)个PeerThread;
- WorkerThread(1个):
- 负责接收对端Peer的请求;
- Leader节点会接收Follower节点转发的用户请求(例如,Read/Write/Delete)
- PrimaryThread (1个):
- 节点的主逻辑线程;
- 负责和Peer线程,Apply线程交互;
- RequstVote相关逻辑:
- Follower和Candidate时,维护选主的Timer;
- 当选主Timer超时,触发所有Peer RequestVote;
- 当Peer的RequestVote请求,获得大多数投票时,节点状态更新为Leader;触发一次AppendEntries;
- Follower和Candidate时,维护选主的Timer;
- 用户请求和AppendEntries的逻辑:
- ApplyThread(1个):
- 当CommitIndex更新后,会触发Apply,Apply成功后,唤醒阻塞的用户线程;
- UserThread(多个):
- Floyd作为一个库,用户的线程;
- PeerThread(N-1个):
- 其他组件:
- Log: Raft的log模块;
- DB: nemo-RocksDB
- Follower会把一致性的Read/Write/Delete等用户请求转发给Leader的Worker线程执行;
- Leader线程通过Peer线程和集群的其他节点交互;