控制分布式節(jié)點(diǎn)間訪問共享資源的分布式鎖的實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,尤其涉及一種控制分布式節(jié)點(diǎn)間訪問共享資源的分布式鎖的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]如今大數(shù)據(jù)分析、分布式計(jì)算、云計(jì)算已經(jīng)成為繼互聯(lián)網(wǎng)技術(shù)后推動(dòng)IT產(chǎn)業(yè)發(fā)展的主流技術(shù)。各IT公司、互聯(lián)網(wǎng)公司在這些領(lǐng)域展開了殘酷的競(jìng)爭(zhēng)。哪些公司能在這些領(lǐng)域掌控核心技術(shù),哪些公司就能掌控和主導(dǎo)下一代信息技術(shù)。
[0003]隨著信息技術(shù)的迅猛發(fā)展,數(shù)據(jù)分析的目標(biāo)資源已經(jīng)由原來的MB、GB量級(jí)增長(zhǎng)為TB、PB量級(jí)。隨著目標(biāo)資源尺寸的極大增加,控制分布式計(jì)算節(jié)點(diǎn)間訪問共享資源的分布式鎖所需資源也隨之急速增加。目前,通常用一個(gè)全局的結(jié)構(gòu)描述上述資源的每個(gè)無需分割邏輯單元的占用情況,每個(gè)對(duì)資源的操作請(qǐng)求,均可通過查詢和標(biāo)記該全局結(jié)構(gòu)來獲得資源。但當(dāng)資源尺寸較大時(shí),通常該全局結(jié)構(gòu)尺寸也會(huì)是很可觀的,從而導(dǎo)致上述分布式鎖的訪問效率降低,因此,開發(fā)一種消耗資源少、訪問效率高的分布式鎖是十分必要的。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的實(shí)施例提供了一種控制分布式節(jié)點(diǎn)間訪問共享資源的分布式鎖的實(shí)現(xiàn)方法,以提高可分布式鎖的訪問效率。
[0005]本發(fā)明提供了如下方案:
[0006]一種控制分布式節(jié)點(diǎn)間訪問共享資源的分布式鎖的實(shí)現(xiàn)方法,適用于如如_八和Node_B組成的雙節(jié)點(diǎn)模式,所述的方法具體包括:
[0007]通過多個(gè)鎖操作請(qǐng)求中的鎖操作元數(shù)據(jù)來記錄所述Node_A和Node_B共享資源的占用情況;
[0008]在所述Node_A中存儲(chǔ)Node_A當(dāng)前正在執(zhí)行的鎖操作請(qǐng)求、可占用的鎖操作請(qǐng)求信息,在所述Node_B中存儲(chǔ)Node_B當(dāng)前正在執(zhí)行的鎖操作請(qǐng)求、可占用的鎖操作請(qǐng)求信息;
[0009]在所述節(jié)點(diǎn)Node_A或者Node_B產(chǎn)生一個(gè)資源訪問請(qǐng)求后,給所述資源訪問請(qǐng)求分配一個(gè)鎖操作請(qǐng)求0P_NEW,根據(jù)所述Node_A和Node_B中存儲(chǔ)的鎖操作請(qǐng)求信息獲取所述鎖操作請(qǐng)求0P_NEW的準(zhǔn)許信息;
[0010]在所述鎖操作請(qǐng)求0P_NEW被準(zhǔn)許后,執(zhí)行所述鎖操作請(qǐng)求0P_NEW。
[0011 ] 所述的通過多個(gè)鎖操作請(qǐng)求中的鎖操作元數(shù)據(jù)來記錄所述Node_A和Node_B共享資源的占用情況,包括:
[0012]將所述Node_A和Node_B共享資源劃分為多個(gè)邏輯單元,給每個(gè)邏輯單元分配起始和結(jié)束地址,設(shè)置每個(gè)鎖操作請(qǐng)求中的鎖操作元數(shù)據(jù)包括:本次操作邏輯單元的起始和結(jié)束地址、本次操作的讀寫請(qǐng)求類型和本次操作的發(fā)起節(jié)點(diǎn),將所有鎖操作請(qǐng)求中的鎖操作元數(shù)據(jù)進(jìn)行綜合,得到所述Node_A和Node_B共享資源的占用情況。
[0013]所述的在所述Node_A中存儲(chǔ)Node_A當(dāng)前正在執(zhí)行的鎖操作請(qǐng)求、可占用的鎖操作請(qǐng)求信息,在所述Node_B中存儲(chǔ)Node_B當(dāng)前正在執(zhí)行的鎖操作請(qǐng)求、可占用的鎖操作請(qǐng)求信息,包括:
[0014]在所述Node_A和Node_B中分別存儲(chǔ)當(dāng)前鎖操作請(qǐng)求鏈表Local_Grant_Link、鎖操作請(qǐng)求等待鏈表Operat1n_Waiting_Link和可操作鎖操作請(qǐng)求緩存鏈表0perat1n_Cache ;
[0015]所述Local_Grant_Link中包括本端節(jié)點(diǎn)產(chǎn)生的、無沖突的、當(dāng)前正在執(zhí)行的所有鎖操作請(qǐng)求,所述Operat1n_Waiting_Link中包括的所有鎖操作請(qǐng)求都和Local_Grant_Link鏈表中的至少一個(gè)鎖操作請(qǐng)求存在沖突,所述Operat1n_Cache中包括本端節(jié)點(diǎn)可占用的所有鎖操作請(qǐng)求。
[0016]所述的根據(jù)所述如如_4和Node_B中存儲(chǔ)的鎖操作請(qǐng)求信息獲取所述鎖操作請(qǐng)求0P_NEW的準(zhǔn)許信息,包括:
[0017]節(jié)點(diǎn)Node_A產(chǎn)生了一個(gè)資源訪問請(qǐng)求,為所述資源訪問請(qǐng)求分配一個(gè)鎖操作請(qǐng)求0P_NEW,并配置所述鎖操作請(qǐng)求0P_NEW對(duì)應(yīng)的鎖操作元數(shù)據(jù)。
[0018]所述節(jié)點(diǎn)Node_A查詢Node_A的Local_Grant_Link鏈表,查看所述鎖操作請(qǐng)求0P_NEff是否和所述Local_Grant_Link鏈表中的鎖操作請(qǐng)求互相沖突,如果存在沖突,則將所述鎖操作請(qǐng)求0P_NEW插入Node_A的Operat1n_Waiting_Link鏈表中,并等待;
[0019]當(dāng)所述鎖操作請(qǐng)求0P_NEW和所述Local_Grant_Link鏈表中的鎖操作請(qǐng)求不存在沖突時(shí),則將所述鎖操作請(qǐng)求0P_NEW插入到所述Local_Grant_Link鏈表中,并查看所述Node_A的Operat1n_Cache鏈表中是否存儲(chǔ)了所述鎖操作請(qǐng)求0P_NEW,如果已經(jīng)緩存,則所述鎖操作請(qǐng)求0P_NEW被準(zhǔn)許;如果沒有緩存,則所述Node_A將所述鎖操作請(qǐng)求0P_NEW發(fā)送給所述Node_B,當(dāng)接收到所述Node_B返回的所述鎖操作請(qǐng)求0P_NEW的準(zhǔn)許消息后,則所述鎖操作請(qǐng)求0P_NEW被準(zhǔn)許。
[0020]所述的Node_A將所述鎖操作請(qǐng)求0P_NEW發(fā)送給所述Node_B,當(dāng)接收到所述Node_B返回的所述鎖操作請(qǐng)求0P_NEW的準(zhǔn)許消息后,則所述鎖操作請(qǐng)求0P_NEW被準(zhǔn)許,包括:
[0021 ] 所述Node_B收到所述Node_A發(fā)送過來的鎖操作請(qǐng)求0P_NEW后,查詢Node_B的 Local_Grant_Link 鏈表,查看鎖操作請(qǐng)求 0P_NEW 是否和 Node_B 的 Local_Grant_Link鏈表上的鎖操作請(qǐng)求存在沖突,如果存在沖突,則將鎖操作請(qǐng)求0P_NEW插入Node_B的Operat1n_Waiting_Link鏈表中,并等待;如果不存在沖突,則將Node_B的0perat1n_Cache中所有與鎖操作請(qǐng)求0P_NEW沖突的鎖操作請(qǐng)求從所述Node_B的Operat1n_Cache中刪除,向所述Node_A返回所述鎖操作請(qǐng)求0P_NEW的準(zhǔn)許消息。
[0022]所述的在所述鎖操作請(qǐng)求0P_NEW準(zhǔn)許后,執(zhí)行所述鎖操作請(qǐng)求0P_NEW,包括:
[0023]所述Node_A收到所述Node_B返回的所述鎖操作請(qǐng)求0P_NEW的準(zhǔn)許消息后,將所述鎖操作請(qǐng)求0P_NEW增加到Node_A的Operat1n_Cache鏈表中,所述Node_A等待執(zhí)行所述鎖操作請(qǐng)求0P_NEW。
[0024]所述的方法還包括:
[0025]所述Node_A執(zhí)行所述鎖操作請(qǐng)求0P_NEW完畢后,釋放所述鎖操作請(qǐng)求0P_NEW,將所述鎖操作請(qǐng)求0P_NEW從Node_A的Local_Grant_Link中刪除;
[0026]節(jié)點(diǎn)Node_A逐一處理與所述鎖操作請(qǐng)求0P_NEW關(guān)聯(lián)的Node_A的0perat1n_ffaiting_Link中的鎖操作請(qǐng)求,針對(duì)與所述鎖操作請(qǐng)求0P_NEW關(guān)聯(lián)的Node_A的Operat1n_ffaiting_Link中的每一個(gè)鎖操作請(qǐng)求,根據(jù)所述Node_A和Node_B中存儲(chǔ)的鎖操作請(qǐng)求信息獲取所述每一個(gè)鎖操作請(qǐng)求的準(zhǔn)許信息。
[0027]所述的方法還包括:
[0028]將Node_A的Operat1n_Cache初始化為對(duì)整個(gè)資源有訪問權(quán),Node_A的Operat1n_Cache鏈表中初始存儲(chǔ)了針對(duì)整個(gè)資源的所有鎖操作請(qǐng)求,將Node_B的Operat1n_Cache初始化為對(duì)整個(gè)資源無直接訪問權(quán),Node_B的Operat1n_Cache鏈表中初始為空。
[0029]所述的資源包括數(shù)據(jù)文件、邏輯資源或者地址空間資源。
[0030]由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,本發(fā)明實(shí)施例通過對(duì)資源進(jìn)行分割,利用多個(gè)分散的鎖操作請(qǐng)求來描述整個(gè)資源的占用情況,在不降低分布式鎖精度的情況下,大大降低了描述分布式鎖狀態(tài)所需要的內(nèi)存資源,降低了對(duì)內(nèi)存資源的消耗,從而大大提高了可分布式鎖的訪問效率。
【附圖說明】
[0031]為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0032]圖1為本發(fā)明實(shí)施例提供的一種將資源分割為多個(gè)最小邏輯單元的示意圖;
[0033]圖2為本發(fā)明實(shí)施例提供的一種描述每個(gè)鎖操作請(qǐng)求的鎖操作元數(shù)據(jù)的示意圖;
[0034]圖3為本發(fā)明實(shí)施例提供的一種描述每一個(gè)節(jié)點(diǎn)維護(hù)的鎖狀態(tài)視圖;
[0035]圖4為本發(fā)明實(shí)施例提供的一種整體描述全局鎖狀態(tài)視圖;
[0036]圖5為針對(duì)Node_A和Node_B兩個(gè)節(jié)點(diǎn)組成的雙節(jié)點(diǎn)模型,本發(fā)明實(shí)施例提供的一種控制分布式節(jié)點(diǎn)間訪問共享資源的分布式鎖中分配鎖操作請(qǐng)求的方法的處理流程圖;
[0037]圖6為針對(duì)Node_A和Node_B兩個(gè)節(jié)點(diǎn)組成的雙節(jié)點(diǎn)模型,本發(fā)明實(shí)施例提供的一種控制分布式節(jié)點(diǎn)間訪問共享資源的分布式鎖中釋放鎖操作請(qǐng)求的方法的處理流程圖;
【具體實(shí)施方式】
[0038]為便于對(duì)本發(fā)明實(shí)施例的理解,下面將結(jié)合附圖以幾個(gè)具體實(shí)施例為例做進(jìn)一步的解釋說明,且各個(gè)實(shí)施例并不構(gòu)成對(duì)本發(fā)明實(shí)施例的限定。
[0039]本發(fā)明實(shí)施例提供了一種應(yīng)用于大數(shù)據(jù)分布式計(jì)算場(chǎng)景下的分布式鎖的實(shí)現(xiàn)方案,該方案適用于Node_A和Node_B組成的雙節(jié)點(diǎn)模型。
[0040]本發(fā)明實(shí)施例中分布式鎖描述的資源具有邏輯上的連續(xù)性,可分割,尺寸大的特點(diǎn),即可以在邏輯上將資源分為連續(xù)的N份,每一份為一個(gè)無需分割的最小邏輯單元,給每個(gè)邏輯單元分配起始