面試官:Zookeeper怎麼解決讀寫、雙寫併發不一致問題,以及共享鎖的實現原理?

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

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

一、前言

今天清明假期,趕上北京玉淵潭公園櫻花盛開,女朋友非要拉著我去看櫻花,我頭一天晚上幹文章到三點半,我很想睡覺,但是沒辦法,軍令難違呀。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

來到這裡猶如來到了花的海洋,讓我渾身的藝術細菌開始躁動,我忍不住吟詩一首“櫻花落儘子規啼、聞道龍標過五溪,我寄愁心與明月、隨君直到夜郎西”,啊,美麗的櫻花啊。

這時旁邊的公園管理員滿是疑惑的看著我,問我小夥子你的詩背錯了吧,不應該是楊花落儘子規啼嗎?

我只能尷尬的笑笑說,今天應景,我就自己改改詞。。。

在這裡插入圖片描述

就在我盡情展示我渾身的藝術細菌的時候,突然手機響了,我一看是一個北京號碼,手機尾號6543,我接通了電話

我:哈嘍啊

對方:喂,是小奇嗎?

我:正是在下,請問閣下是?

對方:我是某某某公司的,我在某某招聘網站上看到了你的簡歷,請問你還在找工作嗎?

我:沒錯,我還在找。

對方:那你現在方便進行面試嗎?

這個時候我看向了我家領導,我家領導滿臉嫌棄的說,讓你陪我出來逛公園,不是颳風就是下雨,面吧。

二、面試

我:面試官您好,我現在方便麵試。

面試官:好,我看你簡歷上寫的是精通zookeeper是吧。

我:不敢當,都是同行們抬愛,實在慚愧(其實心裡已經膨脹起來了)。

在這裡插入圖片描述

三、讀寫、雙寫不一致問題

面試官:好,那你說一下併發情況下讀寫、雙寫不一致問題是怎麼回事呢?

我:讀寫不一致問題是在併發情況下,多個執行緒對同一個資料同時進行讀取和寫入操作,最後導致讀寫不一致。

在這裡插入圖片描述

比如這裡我執行緒A查詢快取為空,那麼就要查詢資料庫,查詢資料庫name為張三,然後我就要去更快取name為張三。

但是這個時候執行緒B線上程A查詢資料庫之後,更新快取之前修改了資料庫的資料name為李四,但是快取name還是張三,這裡就出現資料庫與快取不一致的情況了。

面試官:嗯,那雙寫不一致是什麼情況呢?

在這裡插入圖片描述

雙寫不一致就是兩個執行緒都是寫的操作,結果還是造成了資料庫和快取不一致的問題。

例如執行緒B線上程A寫入資料後、更新快取前,進行了資料的修改,但是最終修改快取的還是執行緒A,所以這時資料庫和快取不一致。

面試官:嗯,那怎麼解決呢?

我:使用共享鎖解決。

四、Zookeeper共享鎖的實現原理

面試官:嗯,zookeeper怎麼實現共享鎖呢,它的實現原理是什麼?

我:這個講起來有點複雜,要不我先陪我女朋友逛公園,我們晚上回去再聊吧。

面試官:別呀,你現在已經勾起我的興趣了,我們一下子聊完吧,我們就一面

我:好吧,zookeeper共享鎖的實現原理就是如果挨著的執行緒都是讀請求,那麼他們共享同一把鎖。

在這裡插入圖片描述

這裡我們可以看到執行緒1、2、3是三個連續的讀請求的操作,那麼他們共享同一把鎖A,也就是這個三個執行緒可以併發的去讀取資料。

然後我們看到執行緒4是寫請求,那麼他只能等前面的所有執行緒執行完了才能執行自己的寫操作。

這裡執行緒5也是寫請求,那麼他只能等他前面的所有執行緒執行完了才能執行自己的寫操作。

然後執行緒6、7、8都是讀執行緒,那麼他們獲取的是同一把鎖,線上程5執行完畢後,執行緒6、7、8可以一起執行讀取操作。

這裡的監聽我們之前說了是為了解決羊群問題的。

面試官:小夥子真厲害啊,我這邊沒有什麼要問的了,你還有什麼問題要問我的嗎

我:額。。。我們們公司加班挺嚴重的吧。

面試官:何以見得呢?你都沒來過公司你怎麼知道的?

我:因為現在是假期你還在約面試,可想而知公司的加班文化挺濃厚的吧。

面試官:嗯~,我們公司其實不提倡加班,但是員工都很愛加班

我:額。。。那我還是考慮兩天吧,我感覺我可能有點不合群。。。

面試官:那你要是不過來可以幫忙推薦一些其他同學嗎

我:那你先好好學學zookeeper的原理吧,不然我推薦一些小奇趣味程式設計系列的忠實讀者的話你肯定招架不住啊。

面試官:那我也趕緊看看小奇趣味程式設計系列,到時候就見招拆招

我:額。。。那樣的話兩個人都是登峰造極的狀態,誰也虐不了誰屬實有點尷尬。。。

五、總結

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

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

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

相關文章