zookeeper 会话

事务:能改变zookeeper一致性的操作都是事务,比如添加节点、删除节点和更新数据等。
zk为每个事务分配一个唯一的zxid,用于标记事务的顺序。对于竞争,zk使用乐观锁的保证高效性。过程如下:

  • 获取znode的版本
  • 执行操作
  • 更新数据时,重新获取版本,并比对版本的序号,如果一致则执行更新

一个客户端会话包含4个核心的数据:

  • sessionId:会话唯一的ID
  • TimeOut:会话过期的时间
  • TickTime:下次检查客户端活性的时间
  • isClosing:客户端是否关闭的标记

会话管理

SessionTicker是管理会话的类,有3个核心的成员,分别是:

  • sessionById:HashMap<Long, SessionImpl> 管理会话的实体
  • sessionWithTimeOut:ConcurrentHashMap<Long, Integer> 包含了对话的过期时间,与内存数据库相通,与持久化快照文件有关
  • sessionSets: HashMap<Long, SessionSet> 根据下次的超时时间,利用分桶策略管理会话的过期情况

会话的分桶管理策略:

  • 每个会话都有下一次需要检测活性的时间
  • zk把相同时间需要检测活性的会话,放到一个桶中,如上图。
  • 到时间后,zk会统一检测一个桶中的会话活性
  • 如果会话未关闭,则重新计算新的时间,并把对应的会话转移进入新的桶。t/3是计算的活性时间

检测会话活性由Leader节点来处理

会话关闭

会话关闭发生在超时或者节点主动请求关闭的时候。

会话主要分成7个步骤,分别介绍:

  • 设置状态isClosing为True,不在接收该会话的任何新的请求
  • 集群发起关闭会话请求,其他服务同时也收到关闭的请求
  • 收集与该会话相关的临时节点,内存数据库中由对应的信息,但是会有两种特殊情况
    • 有删除节点请求:先执行删除,在统一删除其它的关联节点
    • 有临时创建节点的请求,创建,然后删除
  • 添加节点变更事务
  • 删除临时节点
  • 删除会话
  • NIOServerCxn删除对应的数据

会话重连

会话重连发生在客户端与服务器断开连接的时候,此时客户端会重连服务器。

重连有以下4个场景:

  • 超时时间内重连:服务器接受重连的客户端
  • 过期:不接受重连,需要建立新的会话
  • 失效:重连的时间太久了,比如网络慢的情况
  • 会话转移。

会话转移:假设集群有s1, s2, s3服务器,c1客户端发送请求r1到s1,但是网络太慢,导致客户端以为s1已经失去了连接,此时c1向s2发送请求r2,而且s2正常地执行了r2,此时发生了会话转移。

请求覆盖: r1最终到达了s1,导致集群执行r1,此时r1就覆盖了r2。

处理方案:每个服务求,都认为会话有自己的Owner,比如上面的c1的owner是s1。当s2收到r2时,判断owner不是自己,此时不执行请求。

想让s2执行r2,则需要c1与s1之间取消链接,集群同步后,方可与s2发送请求。此时,由上面说的删除过程保证,不会发生会话转移。

zookeeper的会话相关推荐

  1. zookeeper系列(九)zookeeper的会话详解

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6103870.html尊重原创,大家共同学习: 一.前言 ...

  2. 限制会话id服务端不共享_不懂 Zookeeper?看完不懂你打我

    高并发分布式开发技术体系已然非常的庞大,从国内互联网企业使用情况,可发现RPC.Dubbo.ZK是最基础的技能要求.关于Zookeeper你是不是还停留在Dubbo注册中心的印象中呢?还有它的工作原理 ...

  3. 深入浅出 ZooKeeper

    ZooKeeper 是一个分布式协调服务 ,由 Apache 进行维护. ZooKeeper 可以视为一个高可用的文件系统. ZooKeeper 可以用于发布/订阅.负载均衡.命令服务.分布式协调/通 ...

  4. 不懂 Zookeeper?没关系,看这篇就够了!

    前言 话不多说进入正题 1. 并发环境下面临的挑战 2. Zookeeper的介绍 3.zookeeper的理论 finally 前言 前面几篇以spring作为主题也是有些时日了,高并发分布式这个主 ...

  5. Zookeeper知识汇总

    文章目录 一.简介 二.CAP定理 三.Zookeeper的特性 四.Zookeeper基本原理 4.1 Zookeeper系统架构 4.2 Zookeeper Server的状态与角色 4.2.1 ...

  6. 不懂 Zookeeper?没关系,看这篇就够了

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 |  说出你的愿望吧 来源 |  juejin.i ...

  7. Apache ZooKeeper - 使用原生的API操作ZK

    文章目录 概述 maven依赖 验证 测试基类 ZK构造函数参数 connectString:ZooKeeper服务器列表 sessionTimeout:会话的超时时间, "毫秒" ...

  8. 很遗憾,没有一篇文章能讲清楚ZooKeeper

    作为分布式系统解决方案的 ZooKeeper,被广泛应用于多个分布式场景.例如:数据发布/订阅,负载均衡,命名服务,集群管理等等. 因此,ZooKeeper 在分布式系统中扮演着重要的角色,今天通过一 ...

  9. 《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记

    一.分布式架构 1.分布式特点 分布性 对等性.分布式系统中的所有计算机节点都是对等的 并发性.多个节点并发的操作一些共享的资源 缺乏全局时钟.节点之间通过消息传递进行通信和协调,因为缺乏全局时钟,很 ...

最新文章

  1. SM4密码算法(附源码)
  2. 什么是堆和栈以及区别详解
  3. ASP.NET Web Pages 的冲突版本问题
  4. java.util.ListIterator
  5. 【转载】可复用的FS
  6. wamp2.2c集成环境搭建网站问题总结
  7. 并行程序设计---cuda memory
  8. 关于jvm的OutOfMemory:PermGen space异常的解决
  9. OCX控件的创建与调用
  10. 浅析R语言单因素方差分析中的多重比较
  11. CDN月95计费方式
  12. Alpha Fold 2
  13. 关于{高级语言和低级语言}的。谬论!思想误区!解释。author:盗墓者是个丑奴儿
  14. 激光雷达移动状态下的数据矫正
  15. U盘装系统教程,一键安装和U盘安装的区别
  16. 如何利用网站优化给网站引流做营销
  17. 云原生Java架构实战 K8s+Docker+KubeSphere+DevOps(上)
  18. [读书笔记] 图解HTTP
  19. Core Audio I/O File Recording
  20. ExcelReport(Excel报表系统)

热门文章

  1. spring小实验 用spring的方式管理JDBC
  2. AcWing1074. 二叉苹果树(树形DP)题解
  3. pip安装包时报错:The repository located at pypi.doubanio.com is not a trusted or secure host
  4. 【CSP考前复习】关于考试时的注意事项
  5. 【CVPR 2020】Learning RoI Transformer for Oriented Object Detection in Aerial Images
  6. SRL——无人机区域定位系统
  7. ROS2——Windows上的安装笔记
  8. Linux查看GPU使用情况
  9. 【算法设计】最大子段和问题解析(对应算法第三题)
  10. Programming in the Mid-Future(转)