勿以浮沙筑高台
了解什么是羊群效应?
在羊群中一头羊做了某个动作后一群羊跟着做的行为指羊群效应。
在Zookeeper分布式锁中会有一个临时的节点只有拿到节点才能操作,当A线程操作完成后会释放掉锁。这个时候分布式系统中就会有大量的线程请求去请求这个线程,如果请求线程过多,一个就4k,如果有几十万个,可能需要的宽带就会到4G甚至40G,导致宽带阻塞,这就是羊群效应。
Zookeeper的解决方案
为每一个请求的线程创建一个带唯一编号临时节点,临时节点随着会话的消失而消失。
当线程A操作数据,B线程添加watch事件监听A节点的数据变化,当A的数据变化完成,临时节点编号最小的会去拿到这个锁进行数据的操作。每次拿的时候都会进行排序预防宕机。
原理图如下: