zoukankan      html  css  js  c++  java
  • zookeeper watches

    在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.当你从一个服务器断开连接的时候(比如服务器挂掉了),你不会得到任何事件,直到连接被重新建立。由于这个原因,会话事件将被发送到所有的外部观察处理器。使用会话事件去进入安全模式,当断开连接的时候,你将不会受到事件。所以在进入这个模式的时候,你的进程需要表现的保守一些。

  • 相关阅读:
    电脑分辨率与pc端页面布局
    webpack打包优化并开启gzip
    JS继承实现的几种方式
    angular项目使用Swiper组件Loop时 ng-click点击事件失效处理方法
    浅谈JSONP (vue-jsonp组件 XXXtoken:报错处理)
    vue项目webpack打包后图片路径错误
    页面渲染过程详解
    vscode调试html页面,及配置说明
    跨域请求cookie获取与设置问题
    HTTP 错误 500.21
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2864416.html
Copyright © 2011-2022 走看看