第一:各个模块功能:
1、服务端
-
looking状态
开始为looking,然后进行选举,选举leader,follower,observe 三个角色信息
1、选举端口UDP, 每服务bind一定端口,发送vote,进行选举
leader:2、服务器之间的沟通(leader,follower,observer),同步数据信息各个服务器中同步分3个点:diff,snap,trunc 3、客户端进行端口连接sock tcp使用 ,
-
follower,observer
- 连接来源:
-
1、客户端NIOServerCnxnFactory
-
a、读操作:
如果是读取操作之间从本身获取,然后从request里面获取cn(socket)信息然后返回给客户端; -
b、写操作,greate等,
连接leader,然后提处理事务,等待请求信息,中间操作步骤:首先请求leader,leader,发送提议sal给follower,follower接受提议发送给ack给服务端,然后服务端返回commit,给follower,follower接受到进行持久化,其中有一流程,先处理commit日志,然后等待请求,请求完成后台notify,最后进行持久化
2、与leader之间交互:同步数据,同步数据包括快照snap和diff,TRUNC
2、客户端
直接连接服务端端口
第二:
-
leader处理数据链路setupRequestProcessors:
第一阶段:
CommitProcessor=CommitProcessor.next=ToBeAppliedRequestProcessor= ToBeAppliedRequestProcessor. next=FinalRequestProcessor(发送给客户端)
第二阶段
PrepRequestProcessor(run 方法从submittedRequests中获取信息)
=PrepRequestProcessor.next=ProposalRequestProcessor(发起提议调用next,。放到queueRequest中)
=ProposalRequestProcessor.next=CommitProcessor (存放到queuedRequests)
follower处理:
FollowerRequestProcessor=firstProcessor.next=commitProcessor=commitProcessor.next=FinalRequestProcessor
commitprocessor.start
FollowerRequestProcessor.start
SyncRequestProcessor.start
observer处理:
ObserverRequestProcessor=ObserverRequestProcessor.next=CommitProcessor=CommitProcessor.next=FinalRequestProcessor
CommitProcessor.start (处理请求放到queueRequest中,如果是写请求发送给leader)
ObserverRequestProcessor.start
如果syncRequestProcessorEnabled是true那么observer进行数据同步syncRequestProcessorEnabled.start
ReadOnly处理:
ReadOnlyRequestProcessor=ReadOnlyRequestProcessor.next=PrepRequestProcessor(发到submittedRequests)=PrepRequestProcessor.next=FinalRequestProcessor
PrepRequestProcessor.start(run:方法读取submittedRequests消息)
ReadOnlyRequestProcessor.start(处理消息放到submittedRequests)