记录下走过的Zookeeper源码!相互学习!
服务端架构图
image.png调试相关图
image.png image.png image.png image.png image.png image.pngdebug图
服务端启动流程
>org.apache.zookeeper.server.quorum.QuorumPeerMain.main main方法 启动 (可通过jps 或者 zkServer.sh查看)
>org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun 模板模式
>org.apache.zookeeper.server.quorum.QuorumPeerConfig zoo.cfg解析
>org.apache.zookeeper.server.DatadirCleanupManager 为新链接清理数据
>org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig 通过配置信息启动
>org.apache.zookeeper.server.ServerCnxnFactory.createFactory() 通过nio创建ServerCnxnFactory
>org.apache.zookeeper.server.quorum.QuorumPeer 创建QuorumPeer
>org.apache.zookeeper.server.persistence.FileTxnSnapLog 创建数据库管理器
>org.apache.zookeeper.server.ZKDatabase 封装zk数据存储结构
>org.apache.zookeeper.server.quorum.QuorumPeer.start 模板模式
>org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase
>org.apache.zookeeper.server.ServerCnxnFactory.start 启动ServerCnxnFactory
>org.apache.zookeeper.server.NIOServerCnxnFactory.run 启动ServerCnxnFactory NIO启动
>org.apache.zookeeper.server.quorum.QuorumPeer.startLeaderElection 初始化leader选举(后面有机会详细说)
>java.lang.Thread.start
>org.apache.zookeeper.server.quorum.QuorumPeer.run 启动QuorumPeer
>org.apache.zookeeper.server.quorum.QuorumBean JMX相关监控
>org.apache.zookeeper.server.quorum.Election.lookForLeader 如果是looking状态 寻找leader(后面有机会详细说)
总结
整个服务端围绕QuorumPeer对象做了cfg文件解析,并创建服务端ServerSocketChannel等待,zk数据结构的生成及临时存储,选举算法,以及运行中的选举leader策略。 (具体选举策略源代码待续)
参考
官网:http://zookeeper.apache.org
书籍:从Paxos到Zookeeper
网课: 推荐 慕课网 图灵学院 谷粒学院
网友评论