一種分布式鎖服務的實現方法及組件的制作方法
【專利摘要】本發明公開一種分布式鎖服務的實現方法及其組件,方法包括:接收到客戶端程序體在觸發事務時發送的分布式鎖服務注冊請求,所述分布式鎖服務注冊請求通過注解方式嵌入所述客戶端程序體中;根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接;在為所述客戶端程序體執行所述事務的分布式系統中,創建與所述客戶端程序體對應的zookeeper系統節點,其中zookeeper系統為所述分布式系統的可靠協調系統;通過所述zookeeper系統節點,為所述客戶端程序體提供分布式鎖服務。對于客戶端的開發者來說,分布式鎖服務完全透明,非常方便,分布式鎖的管理更加統一,達到通過zookeeper統一控制事務的目的。最后,采用注解方式嵌入,相對于采用配置文件來說更為靈活。
【專利說明】一種分布式鎖服務的實現方法及組件
【技術領域】
[0001]本發明涉及分布式系統相關【技術領域】,特別是一種分布式鎖服務的實現方法及組件。
【背景技術】
[0002]常在項目中會需要對某個程序、組件或服務發送指令,來啟動某個服務或做某件事情。而現在應用服務通常為分布式部署,即一個應用部署在多個服務器,或一個服務器部署多個實例當中。這樣當需要對某個程序、組件或服務發送指令時,在同一時間被操作組件會接收到多條操作指令,這樣被操作組件就會亂套,為了使被操作組件能夠被統一執行,采用zookeeper的分布式鎖功能中的paxos算法對應用服務選舉一個leader,由leader負責發起各種任務指令。
[0003]zookeeper是Hadoop (—個分布式系統基礎架構)的正式子項目,它是一個針對大型分布式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分布式同步、組服務等。zookeeper的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能聞效、功能穩定的系統提供給用戶。zookeeper使用paxos算法進行leader選舉,選舉出一個leader,由這個leader負責發起各種系統任務,控制分布式鎖調度。以此來達到分布式事務鎖的功能。
[0004]然而,現在的zookeeper分布式鎖的方式較為麻煩,需要用戶自己去管理實現,一方面用戶自己開發比較困難,另一方面,同一個系統中,由于用戶眾多,不同用戶遇到分布式事務沖突的問題,解決方式也是各不相同,并且解決程度有限,操作不靈活,導致系統維護困難。同時,對zookeeper的配置采用的是就配置文件配置,隨著需要配置的增多,配置文件顯得臃腫復雜,不夠靈活。
【發明內容】
[0005]基于此,有必要針對現有技術對zook^per系統的分布式鎖功能應用管理不方便的技術問題,提供一種分布式鎖服務的實現方法及組件。
[0006]一種分布式鎖服務的實現方法,包括:
[0007]接收到客戶端程序體在觸發事務時發送的分布式鎖服務注冊請求,所述分布式鎖服務注冊請求通過注解方式嵌入所述客戶端程序體中;
[0008]根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接;
[0009]在為所述客戶端程序體執行所述事務的分布式系統中,根據所述唯一事務鏈接,創建與所述客戶端程序體對應的zookeeper系統節點,其中zookeeper系統為所述分布式系統的可靠協調系統;
[0010]通過所述zookeeper系統節點,為所述客戶端程序體提供分布式鎖服務。
[0011]一種分布式鎖服務的組件,包括: [0012]注冊請求接收模塊,用于接收到客戶端程序體在觸發事務時發送的分布式鎖服務注冊請求,所述分布式鎖服務注冊請求通過注解方式嵌入所述客戶端程序體中;
[0013]事務鏈接獲取模塊,用于根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接;
[0014]節點創建模塊,用于在為所述客戶端程序體執行所述事務的分布式系統中,根據所述唯一事務鏈接,倉Il建與所述客戶端程序體對應的zookeeper系統節點,其中zookeeper系統為所述分布式系統的可靠協調系統;
[0015]鎖服務提供模塊,用于通過所述zookeeper系統節點,為所述客戶端程序體提供分布式鎖服務。
[0016]本發明客戶端程序體僅需要通過注解方式嵌入分布式鎖服務注冊,其余的分布式鎖服務由本發明的組件實現,因此,對于客戶端的開發者來說,分布式鎖服務完全透明,非常方便,同時,由于所有的分布式鎖服務完全由組件進行管理,因此分布式鎖的管理會更加統一,達到通過zookeeper統一控制事務的目的。最后,采用注解方式嵌入,相對于采用配置文件來說更為靈活。
【專利附圖】
【附圖說明】
[0017]圖1為本發明一種分布式鎖服務的實現方法的工作流程圖;
[0018]圖2為本發明步驟14的具體工作流程圖;
[0019]圖3為本發明一種分布式鎖服務的組件的結構模塊圖。
【具體實施方式】
[0020]下面結合附圖和具體實施例對本發明做進一步詳細的說明。
[0021]如圖1所示為本發明一種分布式鎖服務的實現方法的工作流程圖,包括:
[0022]步驟11,接收到客戶端程序體在觸發事務時發送的分布式鎖服務注冊請求,所述分布式鎖服務注冊請求通過注解方式嵌入所述客戶端程序體中;
[0023]步驟12,根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接;
[0024]步驟13,在為所述客戶端程序體執行所述事務的分布式系統中,根據所述唯一事務鏈接,倉Il建與所述客戶端程序體對應的zookeeper系統節點,其中zookeeper系統為所述分布式系統的可靠協調系統;
[0025]步驟14,通過所述zookeeper系統節點,為所述客戶端程序體提供分布式鎖服務。
[0026]其中,步驟11中的注解方式,指的是采用spring(Java的一個開源框架)的aop(面向行為編程)技術實現的注解方式。具體例子,如下所示:
[0027]OZkTrans (name =’ savevehicle,type =,mysql,timeout =,6000,)
[0028]public String saveVehiclelnfo (Vehiclelnfo vehiclelnfo) {};
[0029]其中,OZkTrans為zookeeper事務注解方式,“name”為該事務注解名稱,“type”為該注解類型為mysql,“timeout”是超時時間。從上述例子可以看出,注解方式非常簡單明了,能顯式地在客戶端程序體中表示,對用戶來說,更為清晰更為靈活。
[0030]該程序中執行saveVehiclelnfo事務時,則會發送的分布式鎖服務注冊請求到本發明的組件,由組件執行上述步驟11?14向zookeeper系統申請分布式鎖服務。[0031]其中,步驟12中,事務鏈接可以是在分布式系統中的一個唯一的地址。根據該地址可以生成一個對應的zookeeper系統節點。并由zookeeper系統進行維護。
[0032]本發明為客戶端程序體提供了一個實現分布式鎖的組件,用戶僅需要將該組件,采用例如jar包的方式加載到程序中。并在需要分布式鎖服務的地方通過注解方式加入分布式鎖注冊請求。后續的分布式鎖服務,例如生成鎖、取得鎖、刪除鎖,均由組件進行維護,客戶端程序體無需關心,從而減少用戶的開發難度,并統一管理。
[0033]作為一個例子,組件中對注釋的創建如下:
[0034]
【權利要求】
1.一種分布式鎖服務的實現方法,其特征在于,包括: 步驟(11),接收到客戶端程序體在觸發事務時發送的分布式鎖服務注冊請求,所述分布式鎖服務注冊請求通過注解方式嵌入所述客戶端程序體中; 步驟(12),根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接; 步驟(13),在為所述客戶端程序體執行所述事務的分布式系統中,根據所述唯一事務鏈接,倉Il建與所述客戶端程序體對應的zookeeper系統節點,其中zookeeper系統為所述分布式系統的可靠協調系統; 步驟(14),通過所述zookeeper系統節點,為所述客戶端程序體提供分布式鎖服務。
2.根據權利要求1所述的分布式鎖服務的實現方法,其特征在于,所述步驟(12),具體包括: 記錄所述客戶端程序體發送分布式鎖服務注冊請求的次數作為請求次數,如果所述請求次數大于預設請求閾值,則對所述分布式鎖服務注冊請求執行屏蔽處理,否則根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接。
3.根據權利要求2所述的分布式鎖服務的實現方法,其特征在于,所述屏蔽處理,具體包括: 在預設時間段內拒 絕所述分布式鎖服務注冊請求,且經過所述預設時間段后對與所述客戶端程序體關聯的所述請求次數清零。
4.根據權利要求2所述的分布式鎖服務的實現方法,其特征在于,所述屏蔽處理,具體包括: 延遲一段時間后,根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接。
5.根據權利要求1所述的分布式鎖服務的實現方法,其特征在于,所述步驟(14),具體包括: 步驟(141),向所述客戶端程序體發送程序阻塞開始命令,以所述客戶端程序體對應的zookeeper系統節點為當前zookeeper系統節點; 步驟(142),判斷由多個zookeeper系統節點組成的zookeeper系統節點列表中,命名名稱最小的zookeeper系統節點是否為當前zookeeper系統節點,如果命名名稱最小的zookeeper系統節點為當前zookeeper系統節點,則執行步驟(143),否則執行步驟(144); 步驟(143),向所述客戶端程序體發送程序阻塞結束命令,當接收到所述客戶端程序體在結束事務時發送的節點刪除請求時,從所述zookeeper系統節點列表中刪除所述當前zookeeper系統節點; 步驟(144),向所述zookeeper系統發送與所述客戶端程序體關聯的監視命令,所述監視命令對所述zookeeper系統節點列表進行監視,當任意一個zookeeper系統節點從所述zookeeper系統節點列表中刪除時,執行步驟(142)。
6.—種分布式鎖服務的組件,其特征在于,包括: 注冊請求接收模塊,用于接收到客戶端程序體在觸發事務時發送的分布式鎖服務注冊請求,所述分布式鎖服務注冊請求通過注解方式嵌入所述客戶端程序體中; 事務鏈接獲取模塊,用于根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接; 節點創建模塊,用于在為所述客戶端程序體執行所述事務的分布式系統中,根據所述唯一事務鏈接,倉Il建與所述客戶端程序體對應的zookeeper系統節點,其中zookeeper系統為所述分布式系統的可靠協調系統; 鎖服務提供模塊,用于通過所述zookeeper系統節點,為所述客戶端程序體提供分布式鎖服務。
7.根據權利要求6所述的分布式鎖服務的組件,其特征在于,所述事務鏈接獲取模塊,具體包括: 記錄所述客戶端程序體發送分布式鎖服務注冊請求的次數作為請求次數,如果所述請求次數大于預設請求閾值,則對所述分布式鎖服務注冊請求執行屏蔽處理,否則根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接。
8.根據權利要求7所述的分布式鎖服務的組件,其特征在于,所述屏蔽處理,具體包括: 在預設時間段內拒絕所述分布式鎖服務注冊請求,且經過所述預設時間段后對與所述客戶端程序體關聯的所述請求次數清零。
9.根據權利要求7所述的分布式鎖服務的組件,其特征在于,所述屏蔽處理,具體包括: 延遲一段時間后,根據所述分布式鎖注冊請求,獲取與所述客戶端程序體對應的唯一事務鏈接。
10.根據權利要求6所述的分布式鎖服務的組件,其特征在于,所述鎖服務提供模塊,具體包括: 阻塞開始子模塊,用于向所述客戶端程序體發送程序阻塞開始命令,以所述客戶端程序體對應的zookeeper系統節點為當前zookeeper系統節點; 最小節點判斷子模塊,用于判斷由多個zookeeper系統節點組成的zookeeper系統節點列表中,命名名稱最小的zookeeper系統節點是否為當前zookeeper系統節點,如果命名名稱最小的zookeeper系統節點為當前zookeeper系統節點,則執行鎖獲取子模塊,否則執行鎖阻塞子模塊; 鎖獲取子模塊,用于向所述客戶端程序體發送程序阻塞結束命令,當接收到所述客戶端程序體在結束事務時發送的節點刪除請求時,從所述zookeeper系統節點列表中刪除所述當前zookeeper系統節點; 鎖阻塞子模塊,用于向所述zookeeper系統發送與所述客戶端程序體關聯的監視命令,所述監視命令對所述zookeeper系統節點列表進行監視,當任意一個zookeeper系統節點從所述zookeeper系統節點列表中刪除時,執行最小節點判斷子模塊。
【文檔編號】H04L29/06GK103997498SQ201410226764
【公開日】2014年8月20日 申請日期:2014年5月27日 優先權日:2014年5月27日
【發明者】呂波 申請人:北京京東尚科信息技術有限公司, 北京京東世紀貿易有限公司