羊群效应是使用zookeeper比较容易犯的一个错误。
问题描述:
羊群效应常出现于通过zookeeper实现分布式锁的场景。
客户端创建节点,序号最小的获取锁
其他客户端监控最小节点,最小节点完成任务,发出通知,并释放
其他客户端获取通知后,获取所有节点,序号最小的获取锁,依此类推。
问题原因:
但是由于通知的客户端很多,所以通知操作会造成zookeeper性能突然下降,这样会影响zookeeper的使用。
解决方案:
客户端创建节点,序号最小的获取锁
客户端只监控比自己小的那个节点
最小节点完成任务,发出通知,并释放
客户端获取通知后,获取所有节点,如果自己的序号最小,则获取锁,如果不是,监控比自己小的那个节点,依此类推。
总结:
使用zookeeper时,尽量避免大量节点监控一个节点的行为。