zk two-phase commit (to be improved)

After the election, leader and follower to perform their own logic:

org.apache.zookeeper.server.quorum.QuorumPeer#run

leader

org.apache.zookeeper.server.quorum.QuorumPeer#setLeader
// 构建 processor 链
org.apache.zookeeper.server.quorum.LeaderZooKeeperServer#setupRequestProcessors
// PrepRequestProcessor, ProposalRequestProcessor, CommitProcessor, ToBeAppliedRequestProcessor, FinalRequestProcessor
org.apache.zookeeper.server.quorum.Leader#lead

follower

org.apache.zookeeper.server.quorum.QuorumPeer#setFollower
// 构建 processor 链
org.apache.zookeeper.server.quorum.FollowerZooKeeperServer#setupRequestProcessors
// 链1:FollowerRequestProcessor, CommitProcessor, FinalRequestProcessor
// 链2:SyncRequestProcessor, SendAckRequestProcessor
org.apache.zookeeper.server.quorum.Follower#followLeader

leader sends recommendations to the follower

org.apache.zookeeper.server.quorum.LearnerHandler#sendPackets

leader follower receives and processes the transmitted recommendations

org.apache.zookeeper.server.quorum.Follower#processPacket
// SyncRequestProcessor written to the transaction log 
org.apache.zookeeper.server.SyncRequestProcessor # RUN 

// sends an ACK to the Leader 
org.apache.zookeeper.server.quorum.SendAckRequestProcessor the processRequest #

leader receives and processes requests follower

RUN # org.apache.zookeeper.server.quorum.LearnerHandler
 // ACK more than half, put the write operation is applied to the state machine, and sends an event follower 
org.apache.zookeeper.server.quorum.Leader # processAck

follower submit a write operation

CommitProcessor 和 FinalRequestProcessor

Guess you like

Origin www.cnblogs.com/allenwas3/p/11845549.html