面試官:Zookeeper怎么解決讀寫、雙寫并發(fā)不一致問題,以及共享鎖的實現(xiàn)原理?
哈嘍!大家好,我是小奇,一位不靠譜的程序員
小奇打算以輕松幽默的對話方式來分享一些技術(shù),如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧
文章持續(xù)更新
一、前言
今天清明假期,趕上北京玉淵潭公園櫻花盛開,女朋友非要拉著我去看櫻花,我頭一天晚上干文章到三點半,我很想睡覺,但是沒辦法,軍令難違呀。
來到這里猶如來到了花的海洋,讓我渾身的藝術(shù)細菌開始躁動,我忍不住吟詩一首“櫻花落盡子規(guī)啼、聞道龍標過五溪,我寄愁心與明月、隨君直到夜郎西”,啊,美麗的櫻花啊。
這時旁邊的公園管理員滿是疑惑的看著我,問我小伙子你的詩背錯了吧,不應(yīng)該是楊花落盡子規(guī)啼嗎?
我只能尷尬的笑笑說,今天應(yīng)景,我就自己改改詞。。。
就在我盡情展示我渾身的藝術(shù)細菌的時候,突然手機響了,我一看是一個北京號碼,手機尾號6543,我接通了電話
我:哈嘍啊
對方:喂,是小奇嗎?
我:正是在下,請問閣下是?
對方:我是某某某公司的,我在某某招聘網(wǎng)站上看到了你的簡歷,請問你還在找工作嗎?
我:沒錯,我還在找。
對方:那你現(xiàn)在方便進行面試嗎?
這個時候我看向了我家領(lǐng)導(dǎo),我家領(lǐng)導(dǎo)滿臉嫌棄的說,讓你陪我出來逛公園,不是刮風就是下雨,面吧。
二、面試
我:面試官您好,我現(xiàn)在方便面試。
面試官:好,我看你簡歷上寫的是精通ZooKeeper是吧。
我:不敢當,都是同行們抬愛,實在慚愧(其實心里已經(jīng)膨脹起來了)。
三、讀寫、雙寫不一致問題
面試官:好,那你說一下并發(fā)情況下讀寫、雙寫不一致問題是怎么回事呢?
我:讀寫不一致問題是在并發(fā)情況下,多個線程對同一個數(shù)據(jù)同時進行讀取和寫入操作,最后導(dǎo)致讀寫不一致。
比如這里我線程A查詢緩存為空,那么就要查詢數(shù)據(jù)庫,查詢數(shù)據(jù)庫name為張三,然后我就要去更緩存name為張三。
但是這個時候線程B在線程A查詢數(shù)據(jù)庫之后,更新緩存之前修改了數(shù)據(jù)庫的數(shù)據(jù)name為李四,但是緩存name還是張三,這里就出現(xiàn)數(shù)據(jù)庫與緩存不一致的情況了。
面試官:嗯,那雙寫不一致是什么情況呢?
雙寫不一致就是兩個線程都是寫的操作,結(jié)果還是造成了數(shù)據(jù)庫和緩存不一致的問題。
例如線程B在線程A寫入數(shù)據(jù)后、更新緩存前,進行了數(shù)據(jù)的修改,但是最終修改緩存的還是線程A,所以這時數(shù)據(jù)庫和緩存不一致。
面試官:嗯,那怎么解決呢?
我:使用共享鎖解決。
四、Zookeeper共享鎖的實現(xiàn)原理
面試官:嗯,zookeeper怎么實現(xiàn)共享鎖呢,它的實現(xiàn)原理是什么?
我:這個講起來有點復(fù)雜,要不我先陪我女朋友逛公園,我們晚上回去再聊吧。
面試官:別呀,你現(xiàn)在已經(jīng)勾起我的興趣了,我們一下子聊完吧,我們就一面
我:好吧,zookeeper共享鎖的實現(xiàn)原理就是如果挨著的線程都是讀請求,那么他們共享同一把鎖。
這里我們可以看到線程1、2、3是三個連續(xù)的讀請求的操作,那么他們共享同一把鎖A,也就是這個三個線程可以并發(fā)的去讀取數(shù)據(jù)。
然后我們看到線程4是寫請求,那么他只能等前面的所有線程執(zhí)行完了才能執(zhí)行自己的寫操作。
這里線程5也是寫請求,那么他只能等他前面的所有線程執(zhí)行完了才能執(zhí)行自己的寫操作。
然后線程6、7、8都是讀線程,那么他們獲取的是同一把鎖,在線程5執(zhí)行完畢后,線程6、7、8可以一起執(zhí)行讀取操作。
這里的監(jiān)聽我們之前說了是為了解決羊群問題的。
面試官:小伙子真厲害啊,我這邊沒有什么要問的了,你還有什么問題要問我的嗎
我:額。。。咱們公司加班挺嚴重的吧。
面試官:何以見得呢?你都沒來過公司你怎么知道的?
我:因為現(xiàn)在是假期你還在約面試,可想而知公司的加班文化挺濃厚的吧。
面試官:嗯~,我們公司其實不提倡加班,但是員工都很愛加班
我:額。。。那我還是考慮兩天吧,我感覺我可能有點不合群。。。
面試官:那你要是不過來可以幫忙推薦一些其他同學嗎
我:那你先好好學學zookeeper的原理吧,不然我推薦一些小奇趣味編程系列的忠實讀者的話你肯定招架不住啊。
面試官:那我也趕緊看看小奇趣味編程系列,到時候就見招拆招
我:額。。。那樣的話兩個人都是登峰造極的狀態(tài),誰也虐不了誰屬實有點尷尬。。。
五、總結(jié)
這里關(guān)于zookeeper還沒有整理完畢,文章后面持續(xù)更新,建議。
文章中涉及到的命令大家一定要像我一樣每個都敲幾遍,只有在敲的過程中才能發(fā)現(xiàn)自己對命令是否真正的掌握了。
如果覺得我的文章還不錯的話就點個贊吧
ZooKeeper 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。