rtfc 发表于 2015-9-7 08:47:24

zookeeper 源码阅读---框架

  
  1. 启动类 QuorumPeerMain.java
  集群方式:调用runFromConfig(QuorumPeerConfig config)   
  创建一个QuorumPeer 对象,并初始化设置其相关属性,如ZKDatabase,ServerCnxnFactory成员等。
  QuorumPeer继承了Thread(ublic class QuorumPeer extends Thread implements QuorumStats.Provider),所以 调用 对象的 start() 和 join()方法,join返回就结束退出。
  
  2.QuorumPeer 的 start方法,真正开始zookeeper 实例的工作:



    public synchronized void start() {
loadDataBase();      // 从磁盘加载,恢复数据
cnxnFactory.start();   // 启动处理客户端连接与交互的模块
startLeaderElection(); // 开始选举机制
super.start();         
}

  
  3.QuorumPeer类的成员: zkDb = new ZKDatabase(this.logFactory); // logFactory 是 FileTxnSnapLog 类对象,涉及到logDir和dataDir
  FileTxnSnapLog 包含处理快照的对象和操作日志的对象。
  FileSnap 处理快照,主要是序列化和反序列化;

loadDataBase 函数从磁盘恢复数据到内存dt,并回放操作日志。

4. cnxnFactory.start 主要是开启另一个线程主要用于处理客户端连接和请求的,至此已经有3个线程了:主线程,QuorumPeer线程,客户端连接的网络线程
5. startLeaderElection 开始选举,server 从leader崩溃/网络分行或者启动时候都要开始选举,启动时候server都处于lookuping状态,supper.start就使QuorumPeer线程真正开始执行了,其run方法主要就是处理server的各种状态:LOOKING,LEADING,FOLLOWING,OBSERVING..
页: [1]
查看完整版本: zookeeper 源码阅读---框架