ZK@3.8源码-03-SessionTrackerImpl
在ZooKeeperServe
中维护这一个sessionTracker
,负责对session会话的管理,主要是针对过期的会话进行关闭。SessionTrackerImpl
就是这个会话管理器的实现。
1 类图关系
通过继承关系,可以明确知道两点:
- SessionTracker定义了一个会话跟踪器。
- ZK初始化中使用的线程跟踪器
SessionTrackerImpl
其本质是线程。因此启动线程跟踪器的核心逻辑就应该在run()
方法中。
2 run()方法
java
1 |
|
2.1 sessionExpiryQueue这个队列以一定机制维护连接的过期信息
这个就得看ExpiryQueue
数据结构的具体设计了。
java
1 |
|
过期的连接需要通过过期管理器进行处理
java
1 |
|
2.2 ZooKeeperServer作为连接管理器的职责
java
1 |
|
看到了熟悉的代码,想服务端提交请求,管中窥豹,可以猜测整个ZK系统交互也是有点想EDA设计,都是基于消息驱动的。这样的设计可以有效解耦业务,统一入口。
java
1 |
|
3 ExpireQueue数据结构
维护了以下阈值,巧妙的使用expirationInterval,这个设计的收益在于:
- 加少了hash表中数组大小
- 过期机制通过时间判定永远都会存在误差,在可接受的范围内,尽量将连接的过期时间归一化,减少离散,容易管理庞大的连接请求
- 一次性可以处理多个连接
- 不至于让cpu负担过重,配置sleep机制可以让出cpu执行权
java
1 |
|
4 连接过期管理流程图
绿色实线标识的就是SessionTracker组件委托持有的SessionExpirer组件提交关闭连接的一个请求。
ZK@3.8源码-03-SessionTrackerImpl
https://bannirui.github.io/2023/03/06/ZK-3-8源码-03-SessionTrackerImpl/