全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

zookeeper watch机制的理解

首先我们看看为什么添加Watch。

ZooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核,用户可以在此之上构建更多复杂的分布式协调功能。

多个分布式进程通过ZooKeeper提供的 API 来操作共享的ZooKeeper内存数据对象ZNode来达成某种一致的行为或结果,这种模式本质上是基于状态共享的并发模型,与Java的多线程并发模型一致,他们的线程或进程都是“共享式内存通信”。Java没有直接提供某种响应式通知接口来监控某个对象状态的变化,只能要么浪费CPU时间毫无响应式的轮询重试,或基于Java提供的某种主动通知(Notif)机制(内置队列)来响应状态变化,但这种机制是需要循环阻塞调用。而ZooKeeper实现这些分布式进程的状态(ZNode的Data、Children)共享时,基于性能的考虑采用了类似的异步非阻塞的主动通知模式即Watch机制,使得分布式进程之间的“共享状态通信”更加实时高效,其实这也是ZooKeeper的主要任务决定的—协调。

所有的Zookeeper读操作,包括getData()、getChildren()和exists(),都有一个开关,可以在操作的同时再设置一个watch。在ZooKeeper中,Watch是一个一次性触发器,会在被设置watch的数据发生变化的时候,发送给设置watch的客户端。watch的定义中有三个关键点:

一次性触发器

一个watch事件将会在数据发生变更时发送给客户端。例如,如果客户端执行操作getData(“/znode1″, true),而后/znode1 发生变更或是删除了,客户端都会得到一个/znode1 的watch事件。如果/znode1 再次发生变更,则在客户端没有设置新的watch的情况下,是不会再给这个客户端发送watch事件的。

发送给客户端

这就是说,一个事件会发送给客户端,但可能在操作成功的返回值到达发起变动的客户端之前,这个事件还没有送达watch的客户端。Watch是异步发送的。但ZooKeeper保证了一个顺序:一个客户端在收到watch事件之前,一定不会看到它设置过watch的值的变动。网络时延和其他因素可能会导致不同的客户端看到watch和更新返回值的时间不同。但关键点是,每个客户端所看到的每件事都是有顺序的。

被设置了watch的数据

这是指节点发生变动的不同方式。你可以认为ZooKeeper维护了两个watch列表:data watch和child watch。getData()和exists()设置data watch,而getChildren()设置child watch。或者,可以认为watch是根据返回值设置的。getData()和exists()返回节点本身的信息,而getChildren()返回子节点的列表。因此,setData()会触发znode上设置的data watch(如果set成功的话)。一个成功的?create() 操作会触发被创建的znode上的数据watch,以及其父节点上的child watch。而一个成功的?delete()操作将会同时触发一个znode的data watch和child watch(因为这样就没有子节点了),同时也会触发其父节点的child watch。

Watch由client连接上的ZooKeeper服务器在本地维护。这样可以减小设置、维护和分发watch的开销。当一个客户端连接到一个新的服务器上时,watch将会被以任意会话事件触发。当与一个服务器失去连接的时候,是无法接收到watch的。而当client重新连接时,如果需要的话,所有先前注册过的watch,都会被重新注册。通常这是完全透明的。只有在一个特殊情况下,watch可能会丢失:对于一个未创建的znode的exist watch,如果在客户端断开连接期间被创建了,并且随后在客户端连接上之前又删除了,这种情况下,这个watch事件可能会被丢失。?

ZooKeeper对Watch提供了什么保障

对于watch,ZooKeeper提供了这些保障:

Watch与其他事件、其他watch以及异步回复都是有序的。ZooKeeper客户端库保证所有事件都会按顺序分发;客户端会保障它在看到相应的znode的新数据之前接收到watch事件;从ZooKeeper接收到的watch事件顺序一定和ZooKeeper服务所看到的事件顺序是一致的。

关于Watch的一些值得注意的事情

Watch是一次性触发器,如果你得到了一个watch事件,而你希望在以后发生变更时继续得到通知,你应该再设置一个watch。
因为watch是一次性触发器,而获得事件再发送一个新的设置watch的请求这一过程会有延时,所以你无法确保你看到了所有发生在ZooKeeper上的一个节点上的事件。所以请处理好在这个时间窗口中可能会发生多次znode变更的这种情况。(你可以不处理,但至少请认识到这一点)。

一个watch对象或一个函数/上下文对,为一个事件只会被通知一次。比如,如果同一个watch对象在同一个文件上分别通过exists和getData注册了两次,而这个文件之后被删除了,这时这个watch对象将只会收到一次该文件的deletion通知。

当你从一个服务器上断开时(比如服务器出故障了),在再次连接上之前,你将无法获得任何watch。请使用这些会话事件来进入安全模式:在disconnected状态下你将不会收到事件,所以你的程序在此期间应该谨慎行事。

总结

以上就是本文关于zookeeper watch机制的全部介绍,有兴趣的朋友可以参阅:为zookeeper配置相应的acl权限、apache zookeeper使用方法实例详解等,希望对大家有所帮助。


# zookeeper  # watch机制  # 实现watch  # java使用zookeeper实现的分布式锁示例  # 基于Zookeeper的使用详解  # 使用curator实现zookeeper锁服务的示例分享  # Shell脚本实现自动安装zookeeper  # 理解zookeeper选举机制  # 为zookeeper配置相应的acl权限  # java 中 zookeeper简单使用  # apache zookeeper使用方法实例详解  # 如何操作Redis和zookeeper实现分布式锁  # 深入浅析ZooKeeper的工作原理  # 客户端  # 都是  # 这是  # 发送给  # 你可以  # 将会  # 在此  # 返回值  # 会在  # 只会  # 情况下  # 你将  # 其父  # 是一个  # 他们的  # 这一  # 如果你  # 都有  # 还没有  # 会有 


相关文章: 无锡营销型网站制作公司,无锡网选车牌流程?  公司网站的制作公司,企业网站制作基本流程有哪些?  焦点电影公司作品,电影焦点结局是什么?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  建站之星收费标准详解:套餐费用及年费价格表一览  建站之星多图banner生成与模板自定义指南  如何快速搭建安全的FTP站点?  如何通过西部建站助手安装IIS服务器?  建站之星北京办公室:智能建站系统与小程序生成方案解析  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  建站主机是否等同于虚拟主机?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  建站VPS配置与SEO优化指南:关键词排名提升策略  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  如何用花生壳三步快速搭建专属网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何通过WDCP绑定主域名及创建子域名站点?  如何注册花生壳免费域名并搭建个人网站?  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何选择高性价比服务器搭建个人网站?  Swift开发中switch语句值绑定模式  网站制作服务平台,有什么网站可以发布本地服务信息?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何在Windows 2008云服务器安全搭建网站?  如何快速生成橙子建站落地页链接?  定制建站如何定义?其核心优势是什么?  在线教育网站制作平台,山西立德教育官网?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  建站之星代理费用多少?最新价格详情介绍  定制建站流程步骤详解:一站式方案设计与开发指南  如何在阿里云通过域名搭建网站?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  表情包在线制作网站免费,表情包怎么弄?  网站制作新手教程,新手建设一个网站需要注意些什么?  如何确保西部建站助手FTP传输的安全性?  如何通过wdcp面板快速创建网站?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何快速搭建FTP站点实现文件共享?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  C#怎么创建控制台应用 C# Console App项目创建方法  如何快速上传自定义模板至建站之星?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  高防服务器如何保障网站安全无虞?  建站之星2.7模板:企业网站建设与h5定制设计专题  制作充值网站的软件,做人力招聘为什么要自己交端口钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。