当前位置: 首页 > news >正文

【ZooKeeper】zookeeper源码9-ZooKeeper读写流程源码分析

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

    • ZooKeeper选举和状态同步结束之后的服务启动
    • ZooKeeper SessionTracker启动和工作机制

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){//创建SessionTackerzk.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();//更新状态为RUNNINGsetState(state);//解除其他线程的阻塞notifyAll();
}

ZooKeeper SessionTracker启动和工作机制

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

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

http://www.lryc.cn/news/6188.html

相关文章:

  • Python实现批量导入xlsx数据1000条
  • Ubuntu20.04安装redis与远程连接
  • SAS应用入门学习笔记5
  • PHP新特性集合
  • 【开发环境配置】--Python3的安装
  • postman实现接口测试详细教程
  • 使用crontab执行定时任务
  • 剑指 Offer 56 - II. 数组中数字出现的次数 II
  • C语言学习笔记(八): 自定义数据类型
  • Video Speed Controller谷歌视频加速插件——16倍速
  • VSCode 的下载安装及基本使用
  • 【操作系统】磁盘IO常见性能指标和分析工具实战
  • SpringMVC基础
  • 低代码开发平台|制造管理-质检管理搭建指南
  • 推荐一个.Ner Core开发的配置中心开源项目
  • Vue3+vite4使用mockjs进行模拟开发遇到的坑
  • 一起Talk Android吧(第四百九十三回:动画知识总结)
  • 腾讯云企业网盘正式入驻数字工具箱
  • 2.13练习
  • 【iOS】APP IM聊天框架的设计(基于第三方SDK)
  • centos安装FastDFS,集成到SpringBoot中
  • 看透react源码之感受react的进化
  • 【最优化理论】线性规划
  • 数据库测试的认知和分类
  • MQ中间件概念一览
  • 爱尔兰公司注册要求及条件
  • Java中如何打印对象内存地址?
  • CF1707E Replace
  • 【Hello Linux】Linux工具介绍 (make/makefile git)
  • 享元模式flyweight