文件系統(tǒng)分布式鎖介紹

1 命名空間

不同服務(wù)的鎖用不同的namespace來(lái)區(qū)分,不同元數(shù)據(jù)服務(wù)上鎖namespace的名字不同纸泡,元數(shù)據(jù)鎖和數(shù)據(jù)鎖的namespace也不同赖瞒,客戶端理論上會(huì)向所有的服務(wù)發(fā)請(qǐng)求,所以客戶端的鎖分布在不同的namespace下栏饮,鎖客戶端用namespace來(lái)組織不同的鎖鏈表.


鎖與命名空間-self.png

分布式鎖模塊跟元數(shù)據(jù)服務(wù)器中其他模塊比較獨(dú)立袍嬉,它保存了系統(tǒng)中所有已經(jīng)向該元數(shù)據(jù)服務(wù)器申請(qǐng)的鎖。當(dāng)有新的鎖請(qǐng)求到來(lái)時(shí)伺通,會(huì)直接進(jìn)入鎖申請(qǐng)模塊。鎖模塊會(huì)檢查該資源上是否已經(jīng)有鎖吴藻,并檢查鎖是否存在沖突弓柱,以決定申請(qǐng)的鎖是否會(huì)被授權(quán)侧但∠乙叮客戶端上有專門的鎖客戶端緩存該客戶端已經(jīng)申請(qǐng)的分布式鎖。

2 鎖資源

鎖資源伤哺,就是鎖保護(hù)的對(duì)象。除了文件绢彤,還可以對(duì)象id等等蜓耻。一個(gè)鎖資源對(duì)應(yīng)于一個(gè)實(shí)際的實(shí)體,比如一個(gè)文件刹淌、一段數(shù)據(jù)、一個(gè)數(shù)據(jù)庫(kù)等等疹启,鎖資源的對(duì)象也決定鎖粒度蔼卡,比如你可以對(duì)整個(gè)inode加鎖,也可以對(duì)inode中一個(gè)屬性加鎖雇逞,前者的粒度顯然比后者粒度粗。

一個(gè)鎖資源可以擁有多個(gè)鎖持有它节仿,但是一個(gè)鎖只能被一個(gè)鎖資源持有。因此在DLM中粟耻,鎖資源和鎖是1:M關(guān)系眉踱。

2.1 資源所屬命名空間

2.2 鎖狀態(tài)

每個(gè)鎖資源有三個(gè)潛在的鎖狀態(tài):

  • 已批準(zhǔn):鎖請(qǐng)求成功獲得其所要求的模式
  • 轉(zhuǎn)換中:client嘗試改變的鎖模式和新請(qǐng)求的模式與已存在的鎖不兼容
  • 阻塞的:由于沖突的鎖已存在,新請(qǐng)求的鎖無(wú)法被批準(zhǔn)

鎖的狀態(tài)取決于它請(qǐng)求的鎖模式和對(duì)應(yīng)鎖資源已存在的其他鎖模式

對(duì)應(yīng)三個(gè)鏈表對(duì)它們的狀態(tài)進(jìn)行歸類:

  • 批準(zhǔn)鏈表: 已經(jīng)準(zhǔn)許在該資源上使用的所有鎖

  • 等待鏈表:正在請(qǐng)求該資源的所有鎖

  • 轉(zhuǎn)換鏈表:處于轉(zhuǎn)換狀態(tài)的所有鎖

2.3 轉(zhuǎn)換狀態(tài)機(jī)

已批準(zhǔn)
鎖被批準(zhǔn)的條件(其中之一滿足即可):

  1. 對(duì)應(yīng)鎖資源目前無(wú)鎖持有者
  2. 請(qǐng)求的鎖模式與最近已批準(zhǔn)的鎖兼容册烈,且轉(zhuǎn)化鏈表為空

轉(zhuǎn)換中
鎖轉(zhuǎn)換即改變已持有鎖的模式,只有批準(zhǔn)鎖可以轉(zhuǎn)化大猛,有兩種轉(zhuǎn)換方式:

  1. up_conversion: a less restrictive to a more restrictive mode

  2. down-conversion: a more restrictive to a less restrictive mode

鎖管理器會(huì)將需要轉(zhuǎn)換的lock從批準(zhǔn)鏈表移動(dòng)到轉(zhuǎn)換鏈表的尾部淀零。

離開轉(zhuǎn)換中狀態(tài)的條件(滿足任一即可):

  • 請(qǐng)求鎖的線程終止
  • 鎖持有者取消轉(zhuǎn)換請(qǐng)求
  • 請(qǐng)求的模式最嚴(yán)格的批準(zhǔn)鎖匹配

鎖管理者對(duì)down-conversion的請(qǐng)求執(zhí)行本地轉(zhuǎn)換,即無(wú)需將請(qǐng)求轉(zhuǎn)移到轉(zhuǎn)移中鏈表就可以直接轉(zhuǎn)換成功

等待鏈表
如果請(qǐng)求的鎖與最嚴(yán)格的批準(zhǔn)鎖不兼容驾中,則鎖被阻塞,鎖請(qǐng)求會(huì)被添加到等待鏈表唠亚。

離開block狀態(tài)的條件(滿足任一即可):

  • 請(qǐng)求鎖的線程終止
  • 鎖請(qǐng)求者取消請(qǐng)求
  • 鎖請(qǐng)求與資源上最嚴(yán)格的鎖兼容持痰,并且在鎖請(qǐng)求前面沒有轉(zhuǎn)換鎖或者block鎖

3 鎖類型

元數(shù)據(jù)鎖(比特鎖)

索引節(jié)點(diǎn)比特鎖,用來(lái)保護(hù)文件系統(tǒng)的元數(shù)據(jù)工窍。元數(shù)據(jù)就是對(duì)關(guān)于數(shù)據(jù)的數(shù)據(jù)的總稱,它可以分為很多種類究珊。我們將元數(shù)據(jù)分為六類:

  • 其中目錄項(xiàng)被歸為一類,對(duì)應(yīng)索引節(jié)點(diǎn)比特鎖的一個(gè)比特INODELOCK_LOOKUP
  • 文件模式言津、所有者、組被歸為一類悬槽,對(duì)應(yīng)索引節(jié)點(diǎn)比特鎖的INODELOCK_PERM;
  • 文件長(zhǎng)度,引用數(shù)蓬坡,時(shí)間戳被歸為一類磅叛,對(duì)應(yīng)INODELOCK_UPDATE比特;
  • 打開文件對(duì)應(yīng)INODELOCK_OPEN比特弊琴;
  • 分條布局信息對(duì)應(yīng)INODELOCK_LAYOUT比特;
  • 除ACL之外的擴(kuò)展屬性對(duì)應(yīng)INODELOCK_XATTR紫皇。

這六個(gè)比特共同構(gòu)成了索引比特鎖的各個(gè)部分慰安,也是它被稱為索引比特鎖的原因化焕。相比于傳統(tǒng)的平凡鎖方式铃剔,這種細(xì)分方式有助于提高目錄訪問(wèn)的并發(fā)度》客戶端在要讀取某文件的元數(shù)據(jù)信息時(shí),會(huì)對(duì)該文件加上索引節(jié)點(diǎn)比特鎖踱蠢。

flock

flock鎖為客戶端提供flock和fcntl接口,協(xié)助用戶空間請(qǐng)求文件鎖茎截。flock鎖作為單獨(dú)的命名空間赶盔,專門記錄客戶端申請(qǐng)的flock和fcntl鎖。Flock鎖也是對(duì)文件的某個(gè)范圍上鎖于未,這點(diǎn)與對(duì)象鎖類似,但與之不同的是抖坪,flock鎖請(qǐng)求會(huì)被發(fā)送到MDS而不是OSD

對(duì)象鎖

對(duì)象鎖保護(hù)文件系統(tǒng)對(duì)象的數(shù)據(jù),客戶端可以對(duì)不同的對(duì)象分別加鎖擦俐,在同一對(duì)象中握侧,只能支持一寫多讀的模式。系統(tǒng)中數(shù)據(jù)對(duì)象的大小是4M品擎,文件超過(guò)4M后會(huì)創(chuàng)建一個(gè)新對(duì)象繼續(xù)寫入。同一文件的不同對(duì)象可以同時(shí)被寫饥悴,即使這些對(duì)象屬于同一文件。對(duì)象鎖的resource id是對(duì)象oid西设。對(duì)象鎖保護(hù)文件的數(shù)據(jù),對(duì)對(duì)象加鎖棠笑,對(duì)象鎖服務(wù)器位于數(shù)據(jù)服務(wù)器上,每個(gè)數(shù)據(jù)服務(wù)器上的鎖服務(wù)器負(fù)責(zé)該數(shù)據(jù)服務(wù)器上保存的主份對(duì)象的鎖蓖救。

對(duì)象鎖被用在三種情形下印屁,一是在讀寫時(shí),二是在計(jì)算文件大小時(shí)雄人,三是在文件截?cái)鄷r(shí)。

  • 在第一種情況下础钠,在對(duì)文件的某個(gè)范圍內(nèi)的數(shù)據(jù)進(jìn)行實(shí)際讀寫前恰力,計(jì)算數(shù)據(jù)屬于哪個(gè)對(duì)象踩萎,對(duì)該對(duì)象加鎖。
  • 第二種是獲得文件size時(shí)香府,如果多個(gè)客戶端在同時(shí)寫一個(gè)文件的不同對(duì)象码倦,文件size更新依賴于各對(duì)象寫的匯總信息。
  • 在第三種情況下叹洲,會(huì)計(jì)算文件截?cái)嗪蟊A舻膕ize大小及要截?cái)嗟膶?duì)象运提,分別對(duì)對(duì)象加寫鎖。

意圖鎖

客戶端在訪問(wèn)數(shù)據(jù)或者元數(shù)據(jù)資源時(shí),需要先向鎖服務(wù)器申請(qǐng)鎖,然后再發(fā)送相應(yīng)的請(qǐng)求鞍爱。為了減少交互頻率,在請(qǐng)求鎖的同時(shí)將鎖的意圖數(shù)據(jù)發(fā)給鎖服務(wù)器,如果請(qǐng)求的鎖可以被授權(quán)嬉橙,鎖服務(wù)器根據(jù)客戶端發(fā)的意圖調(diào)用元數(shù)據(jù)服務(wù)注冊(cè)的意圖函數(shù)進(jìn)行相應(yīng)的操作寥假,完成后把操作結(jié)果和鎖一起返回給客戶端。

數(shù)據(jù)的意圖鎖主要跟文件size更新有關(guān)糕韧,當(dāng)系統(tǒng)中多個(gè)客戶端同時(shí)在寫同一文件的不同對(duì)象時(shí),元數(shù)據(jù)服務(wù)上記錄的文件size不準(zhǔn)確粪滤,所以會(huì)發(fā)一個(gè)意圖鎖召回各對(duì)象上的數(shù)據(jù)鎖,各對(duì)象收到鎖召回請(qǐng)求后會(huì)上報(bào)各自的size以及modify time等相關(guān)信息杖小,元數(shù)據(jù)服務(wù)匯總之后確定文件的相關(guān)屬性怕吴。

4 鎖模式

鎖模式?jīng)Q定鎖持有者是否與其他人共享鎖資源的訪問(wèn)或者是否阻止其他人訪問(wèn)自身正在訪問(wèn)的資源。

鎖模式說(shuō)明

鎖模式 請(qǐng)求進(jìn)程 其他進(jìn)程 說(shuō)明
EX 讀或?qū)懺L問(wèn) 不許訪問(wèn) 允許鎖client安全的讀取或者寫鎖資源伟件,其他人在此期間不允許訪問(wèn)鎖資源,EX是一種傳統(tǒng)的獨(dú)占鎖
PW 讀或?qū)懺L問(wèn) 只允許讀 允許鎖client安全的讀取或者寫鎖資源斧账,其他人在此期間不允許寫鎖資源煞肾,PW鎖是一種傳統(tǒng)的更新鎖
PR 讀訪問(wèn) 只允許讀 允許鎖client安全的讀取鎖資源,其他人在此期間不允許寫鎖資源籍救,PR鎖是一種傳統(tǒng)的共享鎖
CW 讀或?qū)懺L問(wèn) 讀或?qū)懺L問(wèn) 允許沒有保護(hù)的讀或者寫操作
CR 讀訪問(wèn) 讀或?qū)懺L問(wèn) 允許沒有保護(hù)的讀操作,因?yàn)樵贑R鎖持有者讀取鎖資源時(shí)闪萄,其他人可以讀或者寫對(duì)應(yīng)的鎖資源,因此CR鎖的讀操作是不受保護(hù)的
NL 無(wú)請(qǐng)求 可以讀或?qū)懺L問(wèn) 未授予所持有者任何權(quán)限败去,通常使用NL作為后續(xù)轉(zhuǎn)換請(qǐng)求的占位符

限制級(jí)別(高-->低):
EX --> PW --> CW/PR --> CR --> NL

鎖兼容性

鎖兼容性決定兩種鎖是否可以同時(shí)被批準(zhǔn)對(duì)同一個(gè)鎖資源加鎖烈拒,比如广鳍,EX鎖不允許其他人訪問(wèn)對(duì)應(yīng)的鎖資源吓妆,它與除去NL之外的鎖均不兼容,CR鎖限制性較小耿战,它與除了EX之外的所有其他鎖均兼容,以下是兼容性二維矩陣

EX PW PR CW CR NL
EX 0 0 0 0 0 1
PW 0 0 0 0 1 1
PR 0 0 1 0 1 1
CW 0 0 0 1 1 1
CR 0 1 1 1 1 1
NL 1 1 1 1 1 1

它們的關(guān)系矩陣是一個(gè)對(duì)稱矩陣狈涮,因此我們知道它們之間的兼容關(guān)系是對(duì)稱關(guān)系鸭栖。對(duì)于鎖兼容關(guān)系的對(duì)稱性,我們可以這樣理解:如果A模式的鎖與B模式的鎖兼容晕鹊,則意味著,如果某資源已被A模式的鎖保護(hù)晓锻,則請(qǐng)求對(duì)該資源加上B模式的新鎖會(huì)被批準(zhǔn);同時(shí)也意味著砚哆,如果資源已被B模式的鎖保護(hù),則請(qǐng)求對(duì)該資源加上A模式的新鎖也會(huì)被批準(zhǔn)躁锁;反之亦然卵史。
系是對(duì)稱關(guān)系。對(duì)于鎖兼容關(guān)系的對(duì)稱性以躯,我們可以這樣理解:如果A模式的鎖與B模式的鎖兼容,則意味著忧设,如果某資源已被A模式的鎖保護(hù),則請(qǐng)求對(duì)該資源加上B模式的新鎖會(huì)被批準(zhǔn);同時(shí)也意味著蒜哀,如果資源已被B模式的鎖保護(hù)吏砂,則請(qǐng)求對(duì)該資源加上A模式的新鎖也會(huì)被批準(zhǔn)乘客;反之亦然。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末易核,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缀匕,更是在濱河造成了極大的恐慌,老刑警劉巖乡小,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饵史,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胳喷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門吠撮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奴饮,“玉大人,你說(shuō)我怎么就攤上這事戴卜。” “怎么了投剥?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吃警。 經(jīng)常有香客問(wèn)我啄育,道長(zhǎng),這世上最難降的妖魔是什么挑豌? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任墩崩,我火速辦了婚禮侯勉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铐拐。我一直安慰自己,他們只是感情好遍蟋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布锹淌。 她就那樣靜靜地躺著,像睡著了一般赂摆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烟号,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音达传,去河邊找鬼。 笑死宪赶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搂妻。 我是一名探鬼主播辕棚,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逝嚎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起引几,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挽铁,失蹤者是張志新(化名)和其女友劉穎硅堆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡够掠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年疯潭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竖哩。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖相叁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情增淹,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布成玫,位于F島的核電站,受9級(jí)特大地震影響哭当,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钦勘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一渗柿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朵栖,春花似錦、人聲如沸陨溅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)偿渡。三九已至霸奕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間质帅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工煤惩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人魄揉。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓣俯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子降铸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容