Zookeeper分布式鎖中的羊群效應及解決方案

2021-09-26 07:45:44 字數 748 閱讀 1742

羊群是一種很散亂的組織,平時在一起也是盲目地左衝右撞,但一旦有乙隻頭羊動起來,其他的羊也會不假思索地一哄而上,全然不顧前面可能有狼或者不遠處有更好的草。因此,「羊群效應」就是比喻人都有一種從眾心理,從眾心理很容易導致盲從,而盲從往往會陷入**或遭到失敗。

zookeeper分布式鎖場景中的羊群效應指的是所有的客戶端都嘗試對乙個臨時節點去加鎖,當乙個鎖被占有的時候,其他的客戶端都會監聽這個臨時節點。一旦鎖被釋放,zookeeper反向通知新增監聽的客戶端,然後大量的客戶端都嘗試去對同乙個臨時節點建立鎖,最後也只有乙個客戶端能獲得鎖,但是大量的請求造成了很大的網路開銷,加重了網路的負載,影響zookeeper的效能。

步驟為:

所有客戶端都嘗試去建立臨時有序節點以獲取鎖

序號最小的臨時有序節點獲得鎖

未獲取到鎖的客戶端給自己的上乙個臨時有序節點新增監聽

獲得鎖的客戶端進行自己的操作,操作完成之後刪除自己的臨時有序節點

當監聽到自己的上乙個臨時有序節點釋放了鎖,嘗試自己去加鎖

操作完成之後釋放鎖

之後剩下的客戶端重複加鎖和解鎖的操作

其中最核心的思路就是獲取鎖時建立乙個臨時順序節點,順序最小的那個才能獲取到鎖,之後嘗試加鎖的客戶端就監聽自己的上乙個順序節點,當上乙個順序節點釋放鎖之後,自己嘗試加鎖,其餘的客戶端都對上乙個臨時順序節點監聽,不會一窩蜂的去嘗試給同乙個節點加鎖導致羊群效應。

zookeeper分布式鎖

方案1 演算法思路 利用名稱唯一性,加鎖操作時,只需要所有客戶端一起建立 test lock節點,只有乙個建立成功,成功者獲得鎖。解鎖時,只需刪除 test lock節點,其餘客戶端再次進入競爭建立節點,直到所有客戶端都獲得鎖。特點 這種方案的正確性和可靠性是zookeeper機制保證的,實現簡單。...

zookeeper分布式鎖

zookeeper節點有4個型別 1.持久型 2.瞬時型 3.持久自動排序型 4.瞬時自動排序型 分布式鎖利用的就是zookeeper中瞬時自動排序型節點特性。一 瞬時自動排序節點 瞬時特點為,當客戶端斷開連線的時候,該節點自動消除。自動排序則為,如果節點名字重複,則自動在該節點名字後新增數字,該數...

zookeeper 分布式鎖

分布式鎖肯定是用在分布式環境下。在分布式環境下,使用分布式鎖的目的也是保證同一時刻只有乙個執行緒來修改共享變數,修改共享快取 前景 jdk提供的鎖只能保證執行緒間的安全性,但分布式環境下,各節點之間的執行緒同步執行卻得不到保障,分布式鎖由此誕生。實現方式有以下幾種 基於資料庫實現分布式鎖 基於快取 ...