zk的客戶端可以在znode上新增乙個watch,用來監聽znode相關事件並被通知
羊群效應就是 乙個特定的znode 改變的時候zookeper 觸發了所有watches 的事件。
舉個例子,如果有1000個客戶端watch 乙個znode的exists呼叫,當這個節點被建立的時候,將會有1000個通知被傳送。這種由於乙個被watch的znode變化,導致大量的通知需要被傳送,將會導致在這個通知期間的其他操作提交的延遲。因此,只要可能,我們都強烈建議不要這麼使用watch。僅僅有很少的客戶端同時去watch乙個znode比較好,理想的情況是只有1個。
舉個例子,有n 個clients 需要去拿到乙個全域性的lock.
一種簡單的實現就是所有的client 去create 乙個/lock znode.如果znode 已經存在,只是簡單的watch 該znode 被刪除。當該znode 被刪除的時候,client收到通知並試圖create /lock。這種策略下,就會存在上文所說的問題,每次變化都會通知所有的客戶端。(羊群效應)
另外一種策略就是每個client去建立乙個順序的znode /lock/lock-.zookeeper 會自動新增順序號/lock/lock-***.我們可以通過/lock getchildren 去拿到最小的順序號。如果client不是最小的序列號,就再比自己小一點的znode上新增watch.
比如我們按照上述邏輯建立了有三個znodes.
/lock/lock-001,/lock/lock-002,/lock/lock-003.
/lock/lock-001 的這個客戶端獲得了lock
/lock/lock-002 的客戶端watch /lock/lock-001
/lock/lock-003 的客戶端watch /lock/lock-002
通過這種方式,每個節點只watch 乙個變化
不需要關心所有的事件,判斷自己是否是所有節點中序號最小的。於是,很容易可以聯想的到的是,每個節點的建立者只需要關注比自己序號小的那個節點。
Zookeeper分布式鎖中的羊群效應及解決方案
羊群是一種很散亂的組織,平時在一起也是盲目地左衝右撞,但一旦有乙隻頭羊動起來,其他的羊也會不假思索地一哄而上,全然不顧前面可能有狼或者不遠處有更好的草。因此,羊群效應 就是比喻人都有一種從眾心理,從眾心理很容易導致盲從,而盲從往往會陷入 或遭到失敗。zookeeper分布式鎖場景中的羊群效應指的是所...
經典管理學定律5 羊群效應
herd effect 羊群效應 也叫 從眾效應 是個人的觀點或行為由於真實的或想象的群體的影響或壓力,而想與大多數人相一致的方向變化的現象。表現為對特定的或臨時的情境中的優勢觀念和行為方式的採納 隨潮 表現為對長期性的佔優勢地位的觀念和行為方式的接受 順應風俗行館 人們會追隨大眾所同意的,將自己的...
網際網路時代的羊群效應
小王在下班路上看到一家新開的餐廳,猶豫著要不要帶新交的女友來這裡吃飯,於是他登入飯統網,開啟該餐廳的鏈結,發現們評價甚高,便決定去吃一次,沒想到這家飯館質量很一般,也不便宜,兩人吃得很不爽。小王納悶,難道網上的評價都是商家買來的?心理學領域有個術語叫作 羊群效應 herdeffect 專門用來形容人...