日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

zookeeper的羊群效应

發(fā)布時(shí)間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zookeeper的羊群效应 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是羊群效應(yīng)

zk的客戶端可以在znode上添加一個(gè)watch,用來(lái)監(jiān)聽(tīng)znode相關(guān)事件并被通知

羊群效應(yīng)就是 一個(gè)特定的znode 改變的時(shí)候ZooKeper 觸發(fā)了所有watches 的事件。

舉個(gè)例子,如果有1000個(gè)客戶端watch 一個(gè)znode的exists調(diào)用,當(dāng)這個(gè)節(jié)點(diǎn)被創(chuàng)建的時(shí)候,將會(huì)有1000個(gè)通知被發(fā)送。這種由于一個(gè)被watch的znode變化,導(dǎo)致大量的通知需要被發(fā)送,將會(huì)導(dǎo)致在這個(gè)通知期間的其他操作提交的延遲。因此,只要可能,我們都強(qiáng)烈建議不要這么使用watch。僅僅有很少的客戶端同時(shí)去watch一個(gè)znode比較好,理想的情況是只有1個(gè)。

案例分析

舉個(gè)例子,有n 個(gè)clients 需要去拿到一個(gè)全局的lock.

一種簡(jiǎn)單的實(shí)現(xiàn)就是所有的client 去create 一個(gè)/lock znode.如果znode 已經(jīng)存在,只是簡(jiǎn)單的watch 該znode 被刪除。當(dāng)該znode 被刪除的時(shí)候,client收到通知并試圖create /lock。這種策略下,就會(huì)存在上文所說(shuō)的問(wèn)題,每次變化都會(huì)通知所有的客戶端。(羊群效應(yīng))

另外一種策略就是每個(gè)client去創(chuàng)建一個(gè)順序的znode /lock/lock-.ZooKeeper 會(huì)自動(dòng)添加順序號(hào)/lock/lock-xxx.我們可以通過(guò)/lock getChildren 去拿到最小的順序號(hào)。如果client不是最小的序列號(hào),就再比自己小一點(diǎn)的znode上添加watch.

比如我們按照上述邏輯創(chuàng)建了有三個(gè)znodes.

/lock/lock-001,/lock/lock-002,/lock/lock-003.

/lock/lock-001 的這個(gè)客戶端獲得了lock
/lock/lock-002 的客戶端watch /lock/lock-001
/lock/lock-003 的客戶端watch /lock/lock-002
通過(guò)這種方式,每個(gè)節(jié)點(diǎn)只watch 一個(gè)變化

核心邏輯

不需要關(guān)心所有的事件,判斷自己是否是所有節(jié)點(diǎn)中序號(hào)最小的。于是,很容易可以聯(lián)想的到的是,每個(gè)節(jié)點(diǎn)的創(chuàng)建者只需要關(guān)注比自己序號(hào)小的那個(gè)節(jié)點(diǎn)。

總結(jié)

以上是生活随笔為你收集整理的zookeeper的羊群效应的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。