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

6.0 Zookeeper session 基本原理详解教程

客户端与服务端之间的连接是基于 TCP 长连接,client 端连接 server 端默认的 2181 端口,也就

是 session 会话。

从第一次连接建立开始,客户端开始会话的生命周期,客户端向服务端的ping包请求,每个会话都可以设置一个超时时间。

Session 的创建

sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建会话的时候,zookeeper 都会为其分配一个全局唯一的 sessionID。zookeeper 创建 sessionID 类 SessionTrackerImpl 中的源码。

Timeout:会话超时时间。客户端在构造 Zookeeper 实例时候,向服务端发送配置的超时时间,server 端会根据自己的超时时间限制最终确认会话的超时时间。

TickTime:下次会话超时时间点,默认 2000 毫秒。可在 zoo.cfg 配置文件中配置,便于 server 端对 session 会话实行分桶策略管理

isClosing:该属性标记一个会话是否已经被关闭,当 server 端检测到会话已经超时失效,该会话标记为"已关闭",不再处理该会话的新请求。

Session 的状态

下面介绍几个重要的状态:

  • connecting:连接中,session 一旦建立,状态就是 connecting 状态,时间很短。

  • connected:已连接,连接成功之后的状态。

  • closed:已关闭,发生在 session 过期,一般由于网络故障客户端重连失败,服务器宕机或者客户端主动断开。

会话超时管理(分桶策略+会话激活)

zookeeper 的 leader 服务器再运行期间定时进行会话超时检查,时间间隔是 ExpirationInterval,单位是毫秒,默认值是 tickTime,每隔 tickTime 进行一次会话超时检查。

ExpirationTime 的计算方式:

ExpirationTime = CurrentTime + SessionTimeout;
ExpirationTime = (ExpirationTime / ExpirationInterval + 1) * ExpirationInterval;

在 zookeeper 运行过程中,客户端会在会话超时过期范围内向服务器发送请求(包括读和写)或者 ping 请求,俗称心跳检测完成会话激活,从而来保持会话的有效性。

会话激活流程:

激活后进行迁移会话的过程,然后开始新一轮:

希望你也学会了,更多编程源码模板请来二当家的素材网:https://www.erdangjiade.com

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

相关文章:

  • 生成式人工智能攻击的一年:2024
  • K8S之Namespace的介绍和使用
  • 封装sku组件
  • Unity笔记:相机移动
  • Java项目管理01-Maven基础
  • 计算机网络(第六版)复习提纲30
  • 基于SSM的图书管理系统
  • 【GAMES101】Lecture 19 相机
  • 《走进科学》灵异事件:Nginx配置改了之后一直报错
  • Select 选择器 el-option 回显错误 value
  • 【51单片机Keil+Proteus8.9】门锁控制电路
  • 比较Kamailio和OpenSIPS的重写contact函数
  • 【ETOJ P1046】斐波那契数列 题解(数学+动态规划)
  • 编码技巧——基于RedisTemplate的RedisClient实现、操作Lua脚本
  • Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
  • 【PTA浙大版《C语言程序设计(第4版)》|编程题】习题7-3 判断上三角矩阵(附测试点)
  • JVM 性能调优 - 参数调优(3)
  • Django(十)
  • OpenHarmony开源鸿蒙开发之旅
  • SpringBoot之整合PageHelper分页插件
  • Android java基础_类的封装
  • Vue-57、Vue技术路由的参数如何传递
  • 《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
  • Linux 软件管理(YUM RPM)
  • 【Makefile语法 05】动静态库编译链接
  • JS - 处理元素滚动
  • JavaScript滚动事件
  • 4.0 Zookeeper Java 客户端搭建
  • C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?
  • 3.1 Verilog 连续赋值