Zookeeper基础 - 监视器和通知

优质
小牛编辑
119浏览
2023-12-01

图 2-2 在同一个znode上执行多次读

监视器和通知 - 图2图2-3 利用通知来告知znode的变化

当使用通知时,有些事情需要注意。因为通知是一次性操作,有可能新的变化正好发生在接收通知和设置监视器之间(放心,你不会错过状态的变化)。让我们看一个例子来了解它是如果工作的。假设以下事件按顺序发生:

    通知一个重要的保证是在任何发生在znode上的变化生效之前它会传递到客户端。如果一个客户端在一个znode上设置了监视器,同时有两个连续的在这个znode上的更新操作,那么客户端接收到通知发生在第一次更新之后和在它有机会通过读取znode来捕获第二次更新之前。关键点是通知保留了客户端观察到的发生顺序。虽然zookeeper状态变化传播到任意指定的客户端会变慢,但是我们保证客户端观察到zookeeper的状态变化按一个全局的顺序发生的。

    Zookeeper提供不同类型的通知,这取决于监视器是如何回应设置的通知的。一个客户端可以设置一个znode数据变化的通知、子节点变化的通知和znode被创建和删除的通知。为了设置一个监视器,我们能使用API里面任意一个带读取zookeeper状态的调用。这些API调用给了一个可选参数Watcher对象,或者使用默认的监视器。在本章后面的master-worker的例子的讨论中和第四章,我们介绍了详细的使用该机制的细节。