面試官:Zookeeper叢集怎麼搭建?

曠世奇才927發表於2022-04-04

哈嘍!大家好,我是小奇,一位不靠譜的程式設計師
小奇打算以輕鬆幽默的對話方式來分享一些技術,如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧
文章持續更新

一、前言

作為一名Java擰螺絲選手,不必要掌握造火箭的能力就可以工作,但是面試官偏偏要難為兄弟們,這我就有點看不下去了,我只能帶上家裡的火箭當場向面試官證明自己。

在這裡插入圖片描述

雖然我這個二踢腳可能算不上火箭,但是跟火箭的原理差不多,都是點火往天上發射的,我掌握了這個就相當於掌握了造火箭的能力。

關鍵是我這玩意它好使呀,往面試官桌子上一擺,面試官直接跟我談薪資了,會造火箭就是不一樣。

在這裡插入圖片描述

至於你問為什麼面試官明明只招擰螺絲的選手,但是卻問火箭的底層原理、火箭的叢集怎麼搭建,怎麼保證火箭的投遞可靠性(發射失敗我就再發射一顆),怎麼保證火箭的冪等性(同一顆火箭發射多次和發射一次是一樣的效果)

這個問題就不需要你去問面試官啦,我上次已經問過了,面試官的回答讓我啞口無言。。。

我:面試官您好,請問為什麼招我進去擰螺絲,卻問我火箭的底層原理呢?

面試官:這特麼還不都怪你們。。。

我:我們?我們怎麼了。。。

面試官:十年前我面試員工,那個時候只有一部分人說會擰螺絲,我面試一個錄取一個。

面試官:八年前我面試員工,所有人都說會擰螺絲了,我不知道該錄取誰了,然後有一兩個人說他會造摩托,我一聽這倆人不錯呀,畢竟我也剛剛只會造摩托就這倆吧,花擰螺絲的錢招了兩個造摩托的

面試官:五年前我面試員工,所有人都說會造摩托了,我又不知道該錄取誰了,然後有一兩個人說會造汽車,我心想這不錯呀,我這的老員工沒有會造汽車的,你既然會就來吧,工資給你比老員工高點。

面試官:三年前我面試員工,所有人都說會造汽車了,我又又不知道該錄取誰了,然後有一兩個人說會造火箭,我特麼只能錄取這兩個會造火箭的了。。。,並且為了面試我還去學了一些火箭的原理,我們這個摩托車修理店根本用不到這些原理,但是沒辦法,誰讓這些人這麼卷呢。

面試官:今天,我只能面試會造火箭的人了,雖然他們進來也只會擰螺絲。。。

我:那既然說會造火箭的人也只會擰螺絲,那你為什麼不直接錄取只會擰螺絲的選手呢?

面試官:你以為我沒有招收面試只會擰螺絲的嗎,我招收了,結果。。。

我:結果怎麼樣?

面試官:他把公司唯一的火箭給拆了。。。

在這裡插入圖片描述

二、面試

在一個晴朗的週二,我來到了“決戰天通苑、生死西二旗”中著名的西二旗橋下。

在這裡插入圖片描述

我懷著一顆忐忑的心走向即將要去赴約面試的公司,一路上我忐忑不安,不知道今天的面試會不會順利,一會面試官會不會刁難我,接待我的hr小姐姐好不好看。。。

不知不覺我來到了公司樓下,打電話給hr,她說給你留門了,門沒鎖,直接上來吧。。。

在這裡插入圖片描述

HR:小奇是吧,帶簡歷了嗎?

我:帶,帶,帶了。。。(吸溜),我把簡歷交給了HR,並急切的詢問什麼時候開始呢,我等不及了。。。

HR:別急嘛,先做一套筆試題

我:哦,我領取了一份筆試題,並來到了做題的會議室,這個會議室不大,但是坐滿了人。。。

在這裡插入圖片描述

我:我做完了題後發現好基友微信群裡問我在幹嘛,我就隨手拍了一張照片發給了他們,我不是故意拍答案的呀,但是這桌子太小人太多,畢竟0.8平米的桌子圍著坐了8個人。。。

我:後來公司里人要開會,差點把我們正在做題的人攆走,我也是服了這個公司了,看我一會虐不虐他們的面試官就完了。

面試官:做一個自我介紹吧。

我:面試官你好,我本科畢業於山東翔藍,精通挖掘機技術,研究生進入華清大學學習火箭研發技術,博士進入大北大學學習在火箭高併發發射情況下如何保證火箭一致性問題,不會造成誤發射了其它隊友的火箭。

三、Zookeeper叢集模式與叢集角色

面試官:可以呀小夥子,那你說說zookeeper叢集有哪些模式吧

我:zookeeper叢集無非有三種搭建方式,一是單機模式、二是偽分佈模式、三是分散式模式。

面試官:嗯。zookeeper叢集中都有哪些角色呢

我:有三種角色,一是Leader角色,可以處理讀寫請求,叢集中只能有一個Leader角色,二是Follower角色,只能處理讀請求,同時也是Leader的候選節點,如果Leader節點掛了,Follower節點就可以選舉為Leader節點,三是Observer節點,該節點只能處理讀請求,不能參與Leader的選舉。

在這裡插入圖片描述

四、Zookeeper叢集搭建方式

面試官:嗯,那你說說zookeeper叢集搭建的具體步驟吧

我:首先我們下在zookeeper後有一個配置檔案為zoo_sample.cfg,我們可以修改為zoo1.cfg這樣更好記一些,然後我們編輯配置檔案

在這裡插入圖片描述

dataDir=[儲存資料的目錄]
clientPort=[客戶端連線zookeeper伺服器的埠]
server.[數字表示第幾臺伺服器]=[伺服器的ip][伺服器與叢集中其他伺服器通訊的埠][表示如果Leader伺服器掛了,用這個備用埠來進行選舉][表示伺服器的角色]

我這裡配置好後就是一個叢集的節點了,這裡我們再將zoo1.cfg複製三個出來,表示另外三個叢集節點,我這裡是在一臺機器上建立四個節點來搭建一個偽叢集,真實的叢集只要對應上ip地址和埠就可以了。

現在我們有四個cfg檔案,分別為zoo1.cfg、zoo2.cfg、zoo3.cfg、zoo4.cfg,這四個檔案只有clientPort不相同即可,因為客戶端連線不同的伺服器要有指定的埠號,這裡我們在一臺機器上搭建的偽叢集,所以dataDir資料儲存路徑也應該設定為不同的。

這個時候我們來根據這四個配置檔案來啟動四個zookeeper例項。

在這裡插入圖片描述

這個時候我們會發現啟動失敗,因為需要我們設定標識ID,這個時候我們找到我們dataDir目錄下,在我們的zookeeper1目錄下新建一個myid檔案,並且在裡面寫上1,然後在zookeeper2目錄下也新建一個myid檔案,並且在裡面寫上2,以此類推,然後我們再啟動這四個配置檔案。

在這裡插入圖片描述

這個時候我們發現啟動成功了,我們可以使用status命令來檢視各個節點的角色情況。

在這裡插入圖片描述

這個時候我們可以看到每個節點的角色了。

在這裡插入圖片描述

五、Zookeeper羊群效應

面試官:嗯,小夥子非常棒,你能說一下zookeeper羊群效應是怎麼回事嗎,如何避免呢

我:zookeeper用來實現分散式鎖的時候,如果有一個客戶端A拿到了鎖,那麼客戶端B、C、D都會監聽A有沒有變化,如果A處理完業務釋放了鎖,那麼這個時候B、C、D都監聽到了訊息,都會去搶鎖,假如有一百個正在等待的,那麼就會有100個上去搶鎖,像羊群一樣蜂擁而至。

在這裡插入圖片描述

我:這樣的話就會造成資源的浪費,因為這麼多節點被驚動了,但是拿到鎖的只有一個節點,為何不只驚動一個節點呢。這裡的話我們就要使用zookeeper的公平鎖了。

六、Zookeeper公平鎖怎麼實現

面試官:嗯。那zookeeper公平鎖怎麼實現的呢

我:在上一次面試的時候我回答了zookeeper有哪些特性,其中就有一個臨時順序節點的特性,這個時候我們可以每一次都建立一個臨時順序節點,然後後一個節點監聽前一個節點的變化,只有前一個節點有變化他才能感知到,再往前的節點變化他無法感知到,也就不存在搶鎖的問題。

在這裡插入圖片描述

我:這樣的話就可以通過臨時順序節點來實現公平鎖。

面試官:小夥子真厲害啊,我這邊沒有什麼要問的了,你還有什麼問題要問(面試官兩眼放光)

我:額。。。我們們公司的會議室就那一個嗎,那裡面的餐桌是不是有點小了。。。

面試官:哎呀,現在公司正在高速發展階段,錢都用在了二手電腦的購買上,這樣,你進來幹兩年,給公司掙了錢了我們們換個超大的桌子

我:(電腦還是二手的。。。)這樣吧,我考慮考慮吧,我現在手上還有幾個預約好的面試沒有面呢,等我面完了再答覆你吧。

面試官:行,你平時怎麼學習呀,這麼厲害

我:我通過看小奇的趣學程式設計系列,乾貨很多又非常有趣。

面試官:那你再給我推薦幾個小奇趣學程式設計系列的讀者過來吧,我急需人才

我:那你先買個大點的桌子吧放在會議室吧,人才也需要桌子才能辦公(說罷我奪門而出,留下了瀟灑的背影)

七、總結

這裡關於zookeeper還沒有整理完畢,文章後面持續更新,建議收藏。

文章中涉及到的命令大家一定要像我一樣每個都敲幾遍,只有在敲的過程中才能發現自己對命令是否真正的掌握了。

如果覺得我的文章還不錯的話就點個贊吧

相關文章