-
羊群效应和可扩展性在监视点的应用-intouch2017培训资料
资源介绍
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下的子节点,并判断自己创建的节点是否是最小的序列
- 上一篇: 故障处理-intouch2017培训资料
- 下一篇: 不可恢复的故障-intouch2017培训资料