zk的技术内幕

作者: 光小月 | 来源:发表于2019-06-20 07:20 被阅读3次

来源:https://www.cnblogs.com/f1194361820/p/5514962.html

本章文章内容与之前内容有重叠部分

ZooKeeper 数据模型

见: https://www.cnblogs.com/f1194361820/p/5514962.html

树形的目录结构,跟文件系统结构似的。分为ZNode

连接的区别:

临时节点(ephemeral)与 持久型节点连接区别

  • 与持久节点不同的是,临时节点是与客户端会话关联的节点。也就是会话结束(或者失效)时,临时节点也会被ZooKeeper自动的清除了。另外要注意的是,会话失效并不是TCP连接断开。

  • 客户端建立长连接后,会话也就开始了。基于这个连接,客户端可以通过心跳检测与服务器保持有效的会话。Session的seesionTimeout用于设置一个客户端的会话超时时间。当由于服务器压力太大、网络故障或者时客户端主动断开连接等各种原因导致客户端连接断开时,只要在sessionTime规定时间内能够重新连接上集群中的任意一台服务器,那么之前创建的会话仍然有效。

State

每个ZNode除了自身的path外,还有一个Stat:

image image image

Watcher

Watcher工作原理

Watcher其实是一个Event的Handler。当发生指定事件后,会执行Watcher.process()方法。

Watcher事件说明

image

Watcher注册

image

1、通过上面的描述,知道可以通过exists,getData,getChildren来注册Watcher。

其中exists、getData方法注册的Watcher时用于处理指定节点的。

2、创建会话时,指定默认的Watcher

如果了解过ZooKeeper Java Client API的话,就可以知道getData、exists、getChildren方法都有一种使用默认Watcher的调用方式:

public Stat exists(String path, boolean watch);
public byte[] getData(String path, boolean watch, Stat stat);
public List<String> getChildren(String path , boolean watch);

这个boolean 标识就是表示是否使用默认的Watcher。如果是true,则表示使用默认的watcher,如果为false,则表示不注册Watcher。

指定默认的Watcher的方式有两种:

方式一:使用ZooKeeper构造器创建ZooKeeper client对象时。

image

方式二:在使用Zookeeper Client时,使用register方法。

image

另外,注册的Watcher只会存储在Client的 WatchManager中,不会发给服务端。

事件发布

服务端对节点进行操作(增加子节点、删除节点、修改节点数据)后,就会发布事件。服务端处理过程如下:

image

上面说的Watcher,并不是一个真实的Watcher对象,因为客户端在注册Watcher时,根本就没有把Watcher序列化传输给服务端。所以这上面说的Watcher,可以理解为Client注册的Watcher的一个引用。服务端其实只是把事件发给客户端而已

客户端接收到响应后,如果响应头中replyHdr中标识了XID为-1时,就认为是一个事件通知类的响应,接下来处理过程大体分为以下4步:

image

需要注意的是:

在进行Watcher回调时,会从WatchManager取出与相关path关联的多个Watcher(此时WatchManager中就不会再有这个path相关的Watcher了),然后串行的调用这多个Watcher#process方法。
所以在编程时,会根据业务的需要,有可能会反复注册Watcher。另外因为多个Watcher的调用是串行的,所以不要因为一个Watcher的处理逻辑影响了整个客户端的Watcher回调。

PS: 若你觉得可以、还行、过得去、甚至不太差的话,可以“关注”或者“点赞”一下,就此谢过!

相关文章

  • zk技术内幕

    一、系统模型 1、数据模型 zk结构视图与unix的文件系统有点类似,但是没有目录和文件的相关概念。而是使用特有的...

  • zk的技术内幕

    来源:https://www.cnblogs.com/f1194361820/p/5514962.html 本章文...

  • InnoDB存储引擎体系架构

    (本片博文是《MySQL技术内幕 InnoDB存储引擎第二版》的读书笔记)这是《MySQL技术内幕 InnoDB存...

  • 2017计划

    小鱼计划 读书 effective java,深入Java虚拟机,spring内幕,MySQL技术内幕, head...

  • 第一章 浏览器和浏览器内核

    webkit技术内幕 1. 技术内幕 渲染:根据描述或定义构建数学模型,通过模型生成图像的过程。 浏览器的渲染引擎...

  • 浏览器安全机制

    前言 此文章是我最近在看的【WebKit 技术内幕】一书的一些理解和做的笔记。 而【WebKit 技术内幕】是基于...

  • LifeHelper-技术支持

    LifeHelper-技术支持 Email:zk123458648@126.com

  • 数据库技术

    数据库技术 sschrodinger 2019/05/06 引用 MySQL 技术内幕 - InnoDB 存储引擎...

  • Jersey 学习总结 spring mvc对比

    功能特点 与spring mvc(后简称MVC)对比 技术内幕

  • webpack技术内幕

    webpack技术内幕 入口文件 对于多入口文件,如何巧妙地编写入口 Module浅析 开启对Webpack多核的...

网友评论

    本文标题:zk的技术内幕

    本文链接:https://www.haomeiwen.com/subject/ioglqctx.html