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