天天看點

千萬不要給女朋友解釋 什麼是 “羊群效應”

千萬别給自己女朋友以任何方式講技術,問就是不知道,長壽秘訣~

媳婦最近突然愛學習了,各種刷算法、架構方面的題,沒日沒夜的帶娃還有這個勁頭,着實讓我沒想到。看似一片欣欣向榮,不過,長期的生存經驗告訴我,這并不是什麼好事,事出反常必有妖~

千萬不要給女朋友解釋 什麼是 “羊群效應”

一個測試人員不變着花樣找 bug,開始研究代碼想制造 bug了,彎轉的有點急啊,不過,不管怎麼樣渴望學習是好事。我這點水準忽悠她,那還不跟欺負國小生一樣。

那天突然問我:" 什麼是

zookeeper

的羊群效應?",我有點驚訝,問的挺深入,看來這次是認真學了啊。那得趕緊講不能打消人家的學習積極性。

其實這是個挺簡單的概念,羊群效應常在

zookeeper

實作分布式鎖的場景中發生,建議沒接觸過

ZK

的同學先補習下基礎知識

《一文徹底搞懂 zookeeper 核心知識點》

,分析一下

zookeeper

實作分布式鎖的原理就更容易了解了,看下圖:

千萬不要給女朋友解釋 什麼是 “羊群效應”

利用

zookeeper

獨特的類似檔案系統的資料結構,可以像建立檔案夾一樣随意建立節點

my_lock

,節點下可以建立子節點,節點還可以存儲資料并生成有序自增的節點ID

my_lock_00000001 .... my_lock_0000000N

等。這樣先建立的節點序号ID 就越小,誰的節點ID 最小則視為拿到鎖,拿到鎖的節點處理完業務後删除對應節點釋放鎖。

而沒拿到鎖的線程通過設定

watcher

監控節點

my_lock

,一旦發現該節點下有線程釋放鎖删除子節點,其餘 所有線程 重新擷取

my_lock

下 全部子節點 比較自身節點是否為最小,最小則獲得鎖,一直如此重複,直到所有線程都拿到鎖。

那這樣就産生一個現象,在整個分布式鎖的競争過程中,存在大量重複運作的動作,并且絕大多數都是無效操作,判斷出自己并非是序号最小的節點,進而繼續等待下一次通知,這就是所謂的 “

羊群效應

”。

如果節點數量足夠多,當删除一個節點大量用戶端同時監聽,比較自己自身節點是否為最小,就會産生大量的網絡開銷,會大大降低整個

zookeeper

叢集的性能,是以必須對現有的分布式鎖進行優化,如下圖:

千萬不要給女朋友解釋 什麼是 “羊群效應”

既然隻想判斷自身是不是最小的節點,那麼每次比較的時候,比如

my_lock_00000002

發現自己不是最小節點後,這時隻要找到前一個節點

my_lock_00000001

watcher

監控它。當

my_lock_00000001

釋放鎖删除節點,則會通知節點

my_lock_00000002

該你拿鎖了,其他節點以此類推,這樣有序監聽就解決了“

羊群效應

千萬不要給女朋友解釋 什麼是 “羊群效應”

吧啦吧啦半天,給我自己都講嗨了,我問人家懂了嘛,她來一句:懂了一丢丢,要不你再講一遍?

對于這種顔值高過智商的選手,我決定換一種講解思路,用一個故事打動她~

咳~ 咳~ 咳~ 開始了

學以緻用

未來的某一天,富仔(

ZK

)睜眼突然發現自己穿越到了大學時代,躺在某師範學院的宿舍床上,臉竟然還被換成了吳某凡的。這讓原本貧瘠的顔值一下子達到巅峰,再也不用因為是班裡唯一的男生,但又沒女生喜歡而自卑了。

帥歸帥課還是要上的,不巧這天上課遲到了,富仔剛推開階梯教室的大門,突然有個美女尖叫着大喊:“看,富仔今天好帥!”,頓時屋内一陣騷亂,大家左顧右盼,面面相觑。

千萬不要給女朋友解釋 什麼是 “羊群效應”

突然,衆美女們一窩蜂的向他撲過來,這時有個叫楊某幂(

線程1

)的美女眼疾手快,一把抓住他的手,問能不能陪她去操場溜達一圈(

處理業務

),富仔這人心軟,一看她楚楚可憐的樣子就答應了,楊某幂立馬拉着他的手飛奔向操場。其他的美女略顯失落的回到座位。

十分鐘後,做完該做的,富仔還是心心念念着學業,執意堅持去上課,回到教室門口松開楊某幂的手,準備走向自己的座位。

此時衆美女們又一擁而上,這回是一個叫唐某嫣(

線程2

)的美女得手了,問富仔是不是也能陪她溜達一圈,富仔看她不是那麼好看,委婉的拒絕了(

不是最小

)。

後邊的鄭某爽(

線程3

)一把推開唐某嫣抓住富仔的手,問能不能陪她,富仔看着這妹子顔值不錯,果斷答應了~

這樣幾次以後導員(

ZK叢集服務

)看不下去了,嚴厲的與富仔交涉,雖然你的容貌驚為天人,但是你不能影響課堂紀律,同學們天天在教室練百米沖刺可不行,沒法專心學習了。

富仔一想覺得非常有道理,告訴妹子們不用天天盯着自己了,還是要專心學習。

于是為全班妹子放了号,排了值日表,誰拿的号越靠前誰優先得到富仔溜達權,後邊的人隻要盯住(

watcher

)拿她前一個号的那個人就行,前邊的人溜達完,後邊的趕緊跟上,就這樣富仔開始了沒羞沒臊的大學時光。

千萬不要給女朋友解釋 什麼是 “羊群效應”

我:這回懂了嗎?

啪~ 一個大巴掌落我腦袋上了

暴躁女友:你們在操場幹什麼了?

我:......

暴躁女友:你是不是早就有這想法了,想當皇帝是嘛,啊!?

以上故事純屬虛構,如有雷同算你牛批

整理了幾百本各類技術電子書,有需要的同學可以,關注公衆号 [程式員内點事 ] 回複[ 666 ]自取。還有想要加技術群的同學可以加我好友,和大佬侃技術、不定期内推,程式員的内點事這都有。

繼續閱讀