Zookeeper分布式锁解决羊群效应的方案
勿以浮沙筑高臺
了解什么是羊群效應(yīng)?
在羊群中一頭羊做了某個(gè)動(dòng)作后一群羊跟著做的行為指羊群效應(yīng)。
在Zookeeper分布式鎖中會有一個(gè)臨時(shí)的節(jié)點(diǎn)只有拿到節(jié)點(diǎn)才能操作,當(dāng)A線程操作完成后會釋放掉鎖。這個(gè)時(shí)候分布式系統(tǒng)中就會有大量的線程請求去請求這個(gè)線程,如果請求線程過多,一個(gè)就4k,如果有幾十萬個(gè),可能需要的寬帶就會到4G甚至40G,導(dǎo)致寬帶阻塞,這就是羊群效應(yīng)。
Zookeeper的解決方案
為每一個(gè)請求的線程創(chuàng)建一個(gè)帶唯一編號臨時(shí)節(jié)點(diǎn),臨時(shí)節(jié)點(diǎn)隨著會話的消失而消失。
當(dāng)線程A操作數(shù)據(jù),B線程添加watch事件監(jiān)聽A節(jié)點(diǎn)的數(shù)據(jù)變化,當(dāng)A的數(shù)據(jù)變化完成,臨時(shí)節(jié)點(diǎn)編號最小的會去拿到這個(gè)鎖進(jìn)行數(shù)據(jù)的操作。每次拿的時(shí)候都會進(jìn)行排序預(yù)防宕機(jī)。
原理圖如下:
總結(jié)
以上是生活随笔為你收集整理的Zookeeper分布式锁解决羊群效应的方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 断点续传续播的大概原理
- 下一篇: 【Golang】查找-学习笔记