创建连接:
每当有客户端新连接进来 , 就会进入该方法 创建 NettyServerCnxn对象 。并添加至cnxns队列
执行堆栈
CnxnChannelHandler#channelActive >new NettyServerCnxn // 构建连接器>NettyServerCnxnFactory#addCnxn // 添加至连接器 , 并根据客户端IP进行分组 >ipMap.get(addr) // 基于IP进行分组
读取消息:
执行堆栈
CnxnChannelHandler#channelRead>NettyServerCnxn#processMessage // 处理消息 >NettyServerCnxn#receiveMessage // 接收消息 >ZooKeeperServer#processPacket //处理消息包 >org.apache.zookeeper.server.Request // 封装request 对象 >org.apache.zookeeper.server.ZooKeeperServer#submitRequest // 提交request >org.apache.zookeeper.server.RequestProcessor#processRequest // 处理请求
快照与事务日志存储结构概要ZK中所有的数据都是存储在内存中 , 即zkDataBase中 。但同时所有对ZK数据的变更都会记录到事务日志中 , 并且当写入到一定的次数就会进行一次快照的生成 。已保证数据的备份 。其后缀就是ZXID(唯一事务ID) 。
- 事务日志:每次增删改 , 的记录日志都会保存在文件当中
- 快照日志:存储了在指定时间节点下的所有的数据
文章插图
UML 类图:
文章插图
读取快照日志:
org.apache.zookeeper.server.SnapshotFormatter
读取事务日志:org.apache.zookeeper.server.LogFormatter
快照相关配置 文章插图
快照装载流程
>ZooKeeperServer#loadData // 加载数据>FileTxnSnapLog#restore // 恢复数据>FileSnap#deserialize() // 反序列化数据>FileSnap#findNValidSnapshots // 查找有效的快照 >Util#sortDataDir // 基于后缀排序文件
推荐阅读
- 央视|央视网评App用户协议太长:就是不想让用户看明白!
- 浅谈ARP地址解析协议
- 一文领略 HTTP 的前世今生
- 淞沪会战停战协议 淞沪停战协定后上海抗战
- 音视频开发1. 基本概念及媒体协议
- zabbix5.0 配置监控agent, 并通过微信接收报警
- IP 通俗易懂网络协议
- https ssl 请求过程详解
- rtsp协议之dss服务器与vlc服务器比较
- rtsp协议之dss搭建rtsp服务器