ZooKeeperzookeeper源码9-ZooKeeper读写流程源码分析

Posted Aponson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeperzookeeper源码9-ZooKeeper读写流程源码分析相关的知识,希望对你有一定的参考价值。

源码项目zookeeper-3.6.3:核心工作流程

ZooKeeper选举和状态同步结束之后的服务启动

在Leader的lead()方法的最后,即Leader完成了和集群过半Follower的同步之后,就会调用startZkServer()来启动必要的服务,主要包括:
SessionTracker
RequestProcessor
更新Leader ZooKeeperServer的状态

Leader.lead()
	startZkServer()
		zk.startup()
			//ZooKeeperServer启动
			super.startup()
				startupWithServerState(State.RUNNING);
			
			//ZK Container ZNode定时清除任务
			if(containerManager != null)
				containerManager.start();
			
		
	

同理,Follower也是一样的,在完成了和Leader的状态同步之后,也就是接收到Leader发送过来的NEWLEADER消息的时候,先拍摄快照,然后调用zk.startupWithoutServing()来启动Follower必要的一些基础服务,包括:
SessionTracker
RequestProcessor
更新Leader ZooKeeperServer的状态

Leader.syncWithLeader(long newLeaderZxid)
	//创建SessionTacker
	zk.createSessionTracker();
	//启动一些服务
	zk.startupWithoutServing()
		startupWithoutServerState(State.INITIAL);
	

不管Leader还是Follower,最后都执行startupWithServerState(State state),具体实现:

ZooKeeperServer.startupWithServerState(State state)
	//创建和启动SessionTracker 重要
	if(sessionTracker == null)
		createSessionTracker();
	
	startSessionTracker();
	
	//初始化RequestProcessors 重要
	setupRequestProcessors();

	//其他各项基础服务
	startRequestThrottler();
	registerJMX();
	startJvmPauseMonitor();
	registerMetrics();

	//更新状态为RUNNING
	setState(state);

	//解除其他线程的阻塞
	notifyAll();

ZooKeeper SessionTracker启动和工作机制

需求背景:现在每个客户端链接到ZK服务器的时候,在服务器内部,都会创建一个Session来管理这个链接
如果链接断开,删除这个session
如果链接超时,删除这个session(在规定的超时时间前,没有任何动作)
会遇到什么问题?大量的session管理,ZK提供的方案:桶管理机制(Session管理,Connection管理)

在Leader启动的时候,Leader会创建LeaderSessionTracker,在Follower启动的时候,内部会创建一个LearnerSessionTracker。SessionTracker的内部都有

以上是关于ZooKeeperzookeeper源码9-ZooKeeper读写流程源码分析的主要内容,如果未能解决你的问题,请参考以下文章

zookeeperzookeeper 选举 源码解读

ZooKeeperzookeeper源码9-ZooKeeper读写流程源码分析

zookeeperzookeeper源码 zookeeperz中Kerberos认证流程

ZooKeeperZooKeeper安装及简单操作

zookeeperZooKeeper常见问题

zookeeper 是什么应用场景有哪些?docker 部署zookeeperzookeeper命令