设为首页 收藏本站
查看: 851|回复: 0

[经验分享] zookeeper watches

[复制链接]

尚未签到

发表于 2015-9-6 11:40:29 | 显示全部楼层 |阅读模式
  在zookeeper中所有的读操作getData(), getChildren() 和 exists() 可以有一个选项设置一个观察(watch)。一个观察是一个单次的触发器,当这个观察设置的数据发生变化的时候,客户就会接到一个通知。以下是几个比较重要的点:
  单次的触发:
  如果一个客户做了getData("/znode1", true),然后/znode1的数据被改变了或者删除了,该客户就会得到一个观察事件。如果/znode1的数据又被改变了,这个客户将不会再收到通知,除非它再次进行读操作,并设置一个新的观察。
  发送到客户:
  Zookeeper提供了一致性保证:一个客户首先会受到观察事件之后,才看到数据的变化。也就是说,没有收到事件之前,客户是不会看到数据变化的。关键点就是,所有被不同客户看到的事情都具有一个一致性的顺序。
  观察设置的数据:
  zookeeper有两组观察:数据观察(data watches)和子观察(child watches)。getData() 和 exists() 设置数据观察,getChildren()设置子观察。setData() 将会触发数据观察,create()将会触发数据观察和其父节点的子观察。delete()同样会出发数据观察和其父节点的子观察。
  所有的观察是在维护在客户连接的服务器本地。这个可以使得更容易去设置,维护和分发。当一个客户连接一个新的服务器的时候,这个观察将会被所有session事件触发。当从服务器断开连接的时候,观察不会被接收到。当一个客户重新连接的时候,任何事先被注册的观察将被重新注册和出发(如果有需要的话)。通常情况下,这个都透明的发生。有一种情况观察会被错过,如果设置了一个是znode否存在的watch。这个znode在客户断开连接的时候被创建,那么这个事件就会被丢失。
  zookeeper对于观察的保证:
  1.观察对于其他事件,其他观察,和异步回复都的是有序的。zookeeper库会保证所有事情按顺序被分发。
  2.客户会先受到观察时间,然后才会看到新的数据。
  3.来自zookeeper观察事件的顺序与zookeeper服务看到的更新一致(这个是个什么意思?)
  关于观察需要记住的几点:
  1.观察是单次触发,如果你得到一个观察事件,而且你想得到新改变的事件,你必须设置另外一个观察。
  2.因为是单次触发,所以得到观察事件和设置新的观察之间有一个延迟。你可能不可能可靠的看到所有的变化,注意处理这种情况。
  3.设置多个同样的观察实体,观察只会被触发一次。
  4.当你从一个服务器断开连接的时候(比如服务器挂掉了),你不会得到任何事件,直到连接被重新建立。由于这个原因,会话事件将被发送到所有的外部观察处理器。使用会话事件去进入安全模式,当断开连接的时候,你将不会受到事件。所以在进入这个模式的时候,你的进程需要表现的保守一些。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110093-1-1.html 上篇帖子: zookeeper 选举过程 下篇帖子: 分布式助手Zookeeper(四)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表