文件名称:监视点的羊群效应和可扩展性-intouch2017培训资料
文件大小:4.44MB
文件格式:PDF
更新时间:2024-06-30 01:13:00
ZooKeeper 分布式
4.8 监视点的羊群效应和可扩展性 有一个问题需要注意,当变化发生时,ZooKeeper会触发一个特定 的znode节点的变化导致的所有监视点的集合。如果有1000个客户端通 过exists操作监视这个znode节点,那么当znode节点创建后就会发送1000 个通知,因而被监视的znode节点的一个变化会产生一个尖峰的通知, 该尖峰可能带来影响,例如,在尖峰时刻提交的操作延迟。可能的话, 我们建议在使用ZooKeeper时,避免在一个特定节点设置大量的监视 点,最好是每次在特定的znode节点上,只有少量的客户端设置监视 点,理想情况下最多只设置一个。 解决该问题的方法并不适用于所有的情况,但在以下情况下可能很 有用。假设有n个客户端争相获取一个锁(例如,主节点锁)。为了获 取锁,一个进程试着创建/lock节点,如果znode节点存在了,客户端就 会监视这个znode节点的删除事件。当/lock被删除时,所有监视/lock节 点的客户端收到通知。另一个不同的方法,让客户端创建一个有序的节 点/lock/lock-,回忆之前讨论的有序节点,ZooKeeper在这个znode节点 上自动添加一个序列号,成为/lock/lock-xxx,其中xxx为序列号。我们 可以使用这个序列号来确定哪个客户端获得锁,通过判断/lock下的所有 创建的子节点的最小序列号。在该方案中,客户端通过/getChildren方法 来获取所有/lock下的子节点,并判断自己创建的节点是否是最小的序列