您当前的位置:首页 > 计算机 > 服务器 > 网络服务

Zookeeper 客户端与会话

时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz

zookeeper 提供了命令行模式下的客户端连接以及 java 与 C 两种语言的客户端。

zythum.zip
6a54e2781701251bf13698a471e34b88.zip (19.99 KB)

客户端

命令行模式下连接

zkCli.sh -server 127.0.0.1:2181
zkCli.sh -server 127.0.0.1:21811,127.0.0.1:21812,127.0.0.1:21813

原生客户端

查看压缩包 /zythum/zk-api/

ZkClient

个人开源项目,是对于原生的封装。相对于原生特色有:

  • 自动化创建节点层级
  • 可以设置持久监听,或删除某个监听
  • 可以插入JAVA对象,自动进行序列化和反序列化
  • 简化了基本的增删改查操作。

基本操作

查看压缩包 /zythum/zk-client/

Curator

curator 是连接 ZK 应用最广泛的工具

原因如下:

  1. zk 应用场景(分布式锁,Master 选举等等),curator 包含了这些场景。
  2. 应用场景出现极端的情况下,curator 考虑到处理了。

apache 旗下开源项目。封装功能更多,更完善。相对于原生特色有:

  • 流式编程
  • 自动化创建节点层级
  • 可以设置持久监听,或删除某个监听
  • 可以插入JAVA对象,自动进行序列化和反序列化
  • 简化了基本的增删改查操作。
  • 缓存
  • 分布式原子操作
  • 分布式锁
  • 屏障

基本操作

查看压缩包 /zythum/zk-curator/

Session会话

Session Backoff 退避算法

有这样一种场景,有多个请求,如果网络出现阻塞,每1分钟重试一次。

  1. 20:25 request1(block)
  2. 20:26 request2(block)
  3. 20:27 request3(block)
  4. 当网络通顺的时候,请求都累在一起来发送
  5. 20:28 request4(通顺)request1、2、3、4

那么前面的请求就没有意义了,所以就有了退避算法,按照指数间隔重试,比如第一次1分钟,第二次2分钟......随着时间的推移,重试间隔越长。

zookeeper 连接的几种状态

  1. CONNECTING 正在连接
  2. CONNECTED 已经连接## 原生客户端
  3. RECONNECTING 正在重新连接客户端类是 org.apache.zookeeper.ZooKeeper,实例化该类之后将会自动与集群建立连接。
  4. RECONNECTED 重新连接上
  5. CLOSE 会话关闭

session 主要由几个类控制:

  • SessionTracker,
  • LearnerSessionTracker,
  • SessionTrackerImpl

session 初始化的方法

org.apache.zookeeper.server.SessionTrackerImpl.initializeNextSession(long)
public static long initializeNextSession(long id) {
        long nextSid = 0;
        nextSid = (System.currentTimeMillis() << 24) >>> 8;
        nextSid =  nextSid | (id <<56);
        return nextSid;
    }

说明:

SessionID 的分配(初始化)函数,策略如下:

  1. 取时间,并且左移24位得到的结果再右移8位(高8位,低16位都是0)
  2. sid 拿出来进行左移56位
  3. 和第一步的结果做或运算

Session 分桶(zookeeper 的一个特性)

按照Session会话过期时间进行分区块保存。这样设计的好处:可以快速清理过期的session

session 激活过程

  1. 检测会话是否过期
  2. 计算会话下一次超时时间
  3. 定位会话的所在区块
  4. 迁移会话
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐