zookeeper框架

发布于:2024-03-04 ⋅ 阅读:(58) ⋅ 点赞:(0)

事务ID

Znode的创建删除,更改内容等都是作为zookeeper的事务进行执行的。
对于每一个事务请求,zookeeper都会为其分配一个全局唯一的事务ID,从ID可以识别出事务的全局顺序。

节点特性

czxid:create zxid,数据节点创建时的事务ID
mzxid:modified zxid,节点最后更新时的事务ID
ctime:create time
mtime:modified zxid
version :节点版本号
cversion:子节点版本号
aversion:acl版本号
enumChildren:子节点数量
pzxid:子节点修改的最后事务id

版本:表示对数据节点内容,子节点,acl的修改次数

当创建时都为0
每个数据节点都有三个版本:
version:当前数据节点内容的版本号
cversion:当前数据子节点的版本号
aversion:当前节点的acl版本号
版本的作用:充当乐观锁的写入校验。用CAS的方式。

Watcher:数据变更的通知

当客户端在zookeeper上注册后,会在客户端生成回调函数,当触发监听任务时,zookeeper通知客户端,客户端执行watchermanager的回调函数。

客户端的视角创建会话

以下是一次 ZooKeeper 会话创建的详细过程,以客户端的视角为主:

  1. 客户端启动: 客户端应用启动,并创建一个ZooKeeper客户端实例。

  2. Watcher对象注册: 客户端可以注册Watcher对象,用于在特定事件发生时接收通知。Watcher对象负责处理与会话相关的事件,如连接建立、节点变更等。

  3. 建立连接: 客户端调用createSession()操作来连接到ZooKeeper集群。在这个过程中,客户端选择一个服务器进行连接。

  4. ClientCnxn: 一旦连接建立,将创建一个ClientCnxn对象,代表客户端与服务器之间的连接。该对象处理底层的TCP连接和数据传输。

  5. Session ID 和密码分配:如果是客户端的第一次连接,或者之前的会话已经过期,服务器会为客户端分配一个唯一的 Session ID。同时,服务器会生成与该 Session ID 相关联的会话密码(Session Password)。

  6. SendThread: 客户端的SendThread负责向服务器发送请求,包括创建Session、读取、写入等操作。这个线程处理所有的网络通信。

  7. EventThread: 客户端的EventThread用于处理从服务器返回的事件(Event)。这包括连接状态的改变、节点变更等。Watcher对象将在这里收到通知。

  8. Watch事件和通知: 如果客户端注册了Watcher对象,当与会话相关的事件发生时,服务器将生成相应的事件(Event),并通过EventThread传递给客户端。这样,客户端能够得知会话中的状态变化。

  9. 心跳检测: 会话期间,客户端和服务器之间定期发送心跳以保持连接的活跃。

  10. 会话超时处理: 如果客户端未在规定的会话超时时间内发送心跳,或者由于其他原因导致通信中断,服务器将终止会话。此时,相关的Watcher对象将收到会话超时的通知。

服务器


网站公告

今日签到

点亮在社区的每一天
去签到