本申請涉及計算機(jī)技術(shù)領(lǐng)域,具體涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種調(diào)用分布式文件系統(tǒng)的方法和裝置。
背景技術(shù):
基于分布式文件系統(tǒng)運(yùn)行的分布式文件系統(tǒng),需要解決高可用相關(guān)的所有,例如滿足包括選主、主角色通知、柵欄(Fence)機(jī)制、數(shù)據(jù)流的復(fù)制和持久化、數(shù)據(jù)流的緊置化(Compaction)等需求。
目前的分布式文件系統(tǒng),通常采用以下兩種高可用設(shè)計方案:
1、組合式方案:例如,選主用分布式服務(wù)框架(ZooKeeper)方案、基于心跳的方案或者其它自主設(shè)計的方案;Fence采用第三方系統(tǒng)或者自主設(shè)計的方案;數(shù)據(jù)流復(fù)制采用自主設(shè)計的復(fù)制方案等。
2、整體方案,例如分布式一致性協(xié)議(Raft),基于Raft協(xié)議實現(xiàn)各種庫,Raft的日志流存儲在本地。
然而,上述的兩種高可用涉及方案,其中組合式方案常常依賴第三方,甚至同時依賴多個第三方,系統(tǒng)中存在著各種自主設(shè)計的方案,系統(tǒng)整體架構(gòu)復(fù)雜,穩(wěn)定性風(fēng)險高,并且難以演化;整體方案中基于Raft協(xié)議實現(xiàn)的分布式文件系統(tǒng)補(bǔ)建副本非常緩慢,很難實現(xiàn)一個快速的負(fù)載均衡機(jī)制,尤其是在全局范圍內(nèi)難以實現(xiàn)數(shù)據(jù)流的分裂與合并,難以和分布式文件系統(tǒng)協(xié)作。例如適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫(HBase),如果數(shù)據(jù)流使用了Raft協(xié)議,那么如果仍然基于分布式文件系統(tǒng),會造成大量的額外流量開銷,如果不再基于分布式文件系統(tǒng),則又會失去了HBase節(jié)點(diǎn)的無狀態(tài)特性。
技術(shù)實現(xiàn)要素:
本申請的目的在于提出一種改進(jìn)的調(diào)用分布式文件系統(tǒng)的方法和裝置,來解決以上背景技術(shù)部分提到的技術(shù)問題。
一次方面,本申請?zhí)峁┝艘环N調(diào)用分布式文件系統(tǒng)的方法,所述方法包括:基于接收的用戶端的會話請求,建立新會話;向分布式文件系統(tǒng)的管理者發(fā)送首次加鎖請求,所述首次加鎖請求用于請求對租約目錄加鎖;響應(yīng)于接收到對所述首次加鎖請求的響應(yīng)為加鎖成功,向所述管理者發(fā)送在租約目錄中新建子目錄的請求,所述子目錄以所述新會話的IP地址和端口命名;響應(yīng)于接收到對所述新建子目錄的請求的響應(yīng)為新建成功,將所述新會話標(biāo)記為主會話。
在一些實施例中,所述方法還包括以下任意一項或多項:在所述主會話存活期間,定期向所述管理者發(fā)送更新所述租約目錄的修改時間戳的請求;和響應(yīng)于所述主會話關(guān)閉,向所述管理者發(fā)送刪除所述租約目錄中的子目錄并解鎖所述租約目錄的請求。
在一些實施例中,響應(yīng)于接收到對所述首次加鎖請求的響應(yīng)為加鎖成功,向所述管理者發(fā)送在租約目錄中新建子目錄的請求包括:響應(yīng)于接收到對所述首次加鎖請求的響應(yīng)為加鎖成功,向所述管理者發(fā)送首次查詢請求,所述首次查詢請求用于查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄;響應(yīng)于接收到對所述首次查詢請求的響應(yīng)為存在,向所述管理者發(fā)送刪除請求,所述刪除請求用于刪除所述租約目錄中的子目錄;響應(yīng)于接收到對所述首次查詢請求的響應(yīng)為不存在或接收到對所述刪除請求的響應(yīng)為刪除成功,向所述管理者發(fā)送在租約目錄中新建子目錄的請求。
在一些實施例中,所述方法還包括:響應(yīng)于接收到對首次加鎖請求的響應(yīng)為加鎖失敗,間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;響應(yīng)于所述修改時間戳距當(dāng)前時間的時長超過預(yù)設(shè)時長,向所述管理者發(fā)送再次加鎖請求,所述再次加鎖請求用于請求對所述租約目錄加鎖;響應(yīng)于接收到對所述再次加鎖請求的響應(yīng)為加鎖成功,執(zhí)行所述向所述管理者發(fā)送首次查詢請求。
在一些實施例中,所述方法還包括:響應(yīng)于接收到對所述再次加鎖請求的響應(yīng)為加鎖失敗,向所述管理者發(fā)送再次查詢請求,所述再次查詢請求用于查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄;響應(yīng)于接收到對再次查詢請求的響應(yīng)為存在,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長。
在一些實施例中,所述方法還包括:響應(yīng)于接收到對再次查詢請求的響應(yīng)為不存在,執(zhí)行所述向分布式文件系統(tǒng)的管理者發(fā)送加鎖租約目錄的首次加鎖請求。
在一些實施例中,所述方法還包括以下任意一項或多項:響應(yīng)于接收到對所述新建子目錄請求的響應(yīng)為新建失敗,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;響應(yīng)于接收到對所述刪除請求的響應(yīng)為刪除失敗,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;以及響應(yīng)于所述修改時間戳距當(dāng)前時間的時長未超過預(yù)設(shè)時長,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長。
在一些實施例中,所述方法還包括:響應(yīng)于接收生成日志請求,生成每條數(shù)據(jù)流的每個日志的日志序列號;響應(yīng)于切換主會話或日志文件大小達(dá)到預(yù)定字節(jié),新創(chuàng)建日志文件;以日志文件中最小的日志序列號命名創(chuàng)建的日志文件;將所述日志序列號、日志的長度、校驗信息以及寫入的會話的IP地址添加至創(chuàng)建的日志文件的頭部信息;將日志添加至創(chuàng)建的日志文件中直至日志文件大小達(dá)到預(yù)定字節(jié)。
在一些實施例中,所述方法還包括:響應(yīng)于接收生成快照請求,間隔預(yù)定時間觸發(fā)快照;將所有日志序列號均小于快照中日志序列號的日志文件刪除。
在一些實施例中,所述方法還包括:接收回放日志請求;根據(jù)所述日志序列號,回放日志。
第二方面,本申請?zhí)峁┝艘环N調(diào)用分布式文件系統(tǒng)的裝置,所述裝置包括:會話建立單元,用于基于接收的用戶端的會話請求,建立新會話;首次加鎖請求單元,用于向分布式文件系統(tǒng)的管理者發(fā)送首次加鎖請求,所述首次加鎖請求用于請求對租約目錄加鎖;新建子目錄請求單元,用于響應(yīng)于接收到對所述首次加鎖請求的響應(yīng)為加鎖成功,向所述管理者發(fā)送在租約目錄中新建子目錄的請求,所述子目錄以所述新會話的IP地址和端口命名;主會話標(biāo)記單元,用于響應(yīng)于接收到對所述新建子目錄的請求的響應(yīng)為新建成功,將所述新會話標(biāo)記為主會話。
在一些實施例中,所述裝置還包括以下任意一項或多項:修改時間戳單元,用于在所述主會話存活期間,定期向所述管理者發(fā)送更新所述租約目錄的修改時間戳的請求;和刪除及加鎖單元,用于響應(yīng)于所述主會話關(guān)閉,向所述管理者發(fā)送刪除所述租約目錄中的子目錄并解鎖所述租約目錄的請求。
在一些實施例中,所述新建子目錄請求單元包括:首次查詢請求子單元,用于響應(yīng)于接收到對所述首次加鎖請求的響應(yīng)為加鎖成功,向所述管理者發(fā)送首次查詢請求,所述首次查詢請求用于查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄;刪除子目錄子單元,用于響應(yīng)于接收到對所述首次查詢請求的響應(yīng)為存在,向所述管理者發(fā)送刪除請求,所述刪除請求用于刪除所述租約目錄中的子目錄;新建子目錄子單元,用于響應(yīng)于接收到對所述首次查詢請求的響應(yīng)為不存在或接收到對所述刪除請求的響應(yīng)為刪除成功,向所述管理者發(fā)送在租約目錄中新建子目錄的請求。
在一些實施例中,所述裝置還包括:時長檢查單元,用于響應(yīng)于接收到對首次加鎖請求的響應(yīng)為加鎖失敗,間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;再次加鎖請求單元,用于響應(yīng)于所述修改時間戳距當(dāng)前時間的時長超過預(yù)設(shè)時長,向所述管理者發(fā)送再次加鎖請求,所述再次加鎖請求用于請求對所述租約目錄加鎖;所述子目錄查詢子單元進(jìn)一步用于:響應(yīng)于接收到對所述再次加鎖請求的響應(yīng)為加鎖成功,執(zhí)行所述向所述管理者發(fā)送首次查詢請求。
在一些實施例中,所述裝置還包括:再次查詢請求單元,用于響應(yīng)于接收到對所述再次加鎖請求的響應(yīng)為加鎖失敗,向所述管理者發(fā)送再次查詢請求,所述再次查詢請求用于查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄;所述時長檢查單元進(jìn)一步用于:響應(yīng)于接收到對再次查詢請求的響應(yīng)為存在,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長。
在一些實施例中,所述裝置還包括:所述首次加鎖請求單元進(jìn)一步用于:響應(yīng)于接收到對再次查詢請求的響應(yīng)為不存在,執(zhí)行所述向分布式文件系統(tǒng)的管理者發(fā)送加鎖租約目錄的首次加鎖請求。
在一些實施例中,所述裝置還包括以下任意一項或多項:所述時長檢查單元進(jìn)一步用于:響應(yīng)于接收到對所述新建子目錄請求的響應(yīng)為新建失敗,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;所述時長檢查單元進(jìn)一步用于:響應(yīng)于接收到對所述刪除請求的響應(yīng)為刪除失敗,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;以及所述時長檢查單元進(jìn)一步用于:響應(yīng)于所述修改時間戳距當(dāng)前時間的時長未超過預(yù)設(shè)時長,執(zhí)行所述間隔預(yù)定時長檢查所述修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長。
在一些實施例中,所述裝置還包括:日志請求接收單元,用于接收生成日志請求;序列號生成單元,用于生成每條數(shù)據(jù)流的每個日志的日志序列號;文件創(chuàng)建單元,用于響應(yīng)于切換主會話或日志文件大小達(dá)到預(yù)定字節(jié),新創(chuàng)建日志文件;文件命名單元,用于以日志文件中最小的日志序列號命名創(chuàng)建的日志文件;信息添加單元,用于將所述日志序列號、日志的長度、校驗信息以及寫入的會話的IP地址添加至創(chuàng)建的日志文件的頭部信息;日志添加單元,用于將日志添加至創(chuàng)建的日志文件中直至日志文件大小達(dá)到預(yù)定字節(jié)。
在一些實施例中,所述裝置還包括:快照請求接收單元,用于接收生成快照請求;快照觸發(fā)單元,用于間隔預(yù)定時間觸發(fā)快照;文件刪除單元,用于將所有日志序列號均小于快照中日志序列號的日志文件刪除。
在一些實施例中,所述裝置還包括:回放請求接收單元,用于接收回放日志請求;日志回放單元,用于根據(jù)所述日志序列號,回放日志。
本申請?zhí)峁┑恼{(diào)用分布式文件系統(tǒng)的方法和裝置,首先基于接收的用戶端的會話請求,建立新會話;之后向分布式文件系統(tǒng)的管理者發(fā)送加鎖租約目錄的首次加鎖請求;之后響應(yīng)于接收到對應(yīng)首次加鎖請求的一次加鎖成功的響應(yīng),向所述管理者發(fā)送用于在租約目錄中新建以所述新會話的IP地址和端口命名的子目錄的新建子目錄請求;最后響應(yīng)于接收到對應(yīng)所述新建子目錄請求的新建子目錄成功的響應(yīng),將所述新會話標(biāo)記為主會話,從而實現(xiàn)了新會話的選主,并對主會話進(jìn)行鎖定,有效提高了調(diào)用分布式文件系統(tǒng)的健壯性。另外,該調(diào)用分布式文件系統(tǒng)的方法和裝置簡化了系統(tǒng)架構(gòu),不再需要依賴任何第三方機(jī)制/系統(tǒng),提升了調(diào)用分布式文件系統(tǒng)的方法和裝置的穩(wěn)定性和可演化性,易實現(xiàn)無狀態(tài)化,從而很容易實現(xiàn)全局的快速負(fù)載均衡機(jī)制和分片分裂與合并機(jī)制等。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細(xì)描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會變得更明顯:
圖1是本申請可以應(yīng)用于其中的示例性系統(tǒng)架構(gòu)圖;
圖2是根據(jù)本申請的調(diào)用分布式文件系統(tǒng)的方法的一個實施例的示意性流程圖;
圖3是根據(jù)本申請的調(diào)用分布式文件系統(tǒng)的方法的另一個實施例的示意性流程圖;
圖4是根據(jù)本申請的調(diào)用分布式文件系統(tǒng)的方法的一個實施例的應(yīng)用場景;
圖5是根據(jù)本申請的調(diào)用分布式文件系統(tǒng)的裝置的一個實施例的示例性結(jié)構(gòu)圖;
圖6是適于用來實現(xiàn)本申請實施例的終端設(shè)備或服務(wù)器的計算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖和實施例對本申請作進(jìn)一步的詳細(xì)說明。可以理解的是,此處所描述的具體實施例僅僅用于解釋相關(guān)發(fā)明,而非對該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與有關(guān)發(fā)明相關(guān)的部分。
需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細(xì)說明本申請。
圖1示出了可以應(yīng)用本申請的調(diào)用分布式文件系統(tǒng)的方法或調(diào)用分布式文件系統(tǒng)的裝置的實施例的示例性系統(tǒng)架構(gòu)100。
如圖1所示,系統(tǒng)架構(gòu)100可以包括終端設(shè)備101、102、103,網(wǎng)絡(luò)104和服務(wù)器105、106。網(wǎng)絡(luò)104用以在終端設(shè)備101、102、103和服務(wù)器105、106之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)104可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。
用戶110可以使用終端設(shè)備101、102、103通過網(wǎng)絡(luò)104與服務(wù)器105、106交互,以接收或發(fā)送消息等。終端設(shè)備101、102、103上可以安裝有各種通訊客戶端應(yīng)用,例如視頻播放類應(yīng)用、搜索引擎類應(yīng)用、購物類應(yīng)用、即時通信工具、郵箱客戶端、社交平臺軟件等。
終端設(shè)備101、102、103可以是具有顯示屏并且支持彈幕交互功能的各種電子設(shè)備,包括但不限于智能手機(jī)、平板電腦、電子書閱讀器、MP3播放器(Moving Picture Experts Group Audio Layer III,動態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面3)、MP4(Moving Picture Experts Group Audio Layer IV,動態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面4)播放器、膝上型便攜計算機(jī)和臺式計算機(jī)等等。
服務(wù)器105、106可以是提供各種服務(wù)的服務(wù)器,例如對終端設(shè)備101、102、103提供支持的后臺服務(wù)器。后臺服務(wù)器可以對終端提交的數(shù)據(jù)進(jìn)行存儲或計算等處理,并在接收到終端的請求時將存儲或計算結(jié)果反饋給終端設(shè)備。
需要說明的是,本申請中實施例所提供的調(diào)用分布式文件系統(tǒng)的方法一般由服務(wù)器105、106執(zhí)行,相應(yīng)地,調(diào)用分布式文件系統(tǒng)的裝置一般設(shè)置于服務(wù)器105、106中。
應(yīng)該理解,圖1中的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器的數(shù)目僅僅是示意性的。根據(jù)實現(xiàn)需要,可以具有任意數(shù)目的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器。
繼續(xù)參考圖2,圖2示出了根據(jù)本申請的調(diào)用分布式文件系統(tǒng)的方法的一個實施例的流程200。該調(diào)用分布式文件系統(tǒng)的方法,包括以下步驟:
步驟201,基于接收的用戶端的會話請求,建立新會話。
在本實施例中,調(diào)用分布式文件的方法所運(yùn)行的設(shè)備(例如圖1中所示的服務(wù)器105、106)向用戶端提供了建立新會話的接口,該接口在接收用戶端發(fā)送的會話請求時,與用戶端建立新會話。
步驟202,向分布式文件系統(tǒng)的管理者發(fā)送首次加鎖請求,首次加鎖請求用于請求對租約目錄加鎖。
在本實施例中,響應(yīng)于步驟201中建立了新會話,該新會話默認(rèn)為從角色,采用新會話加鎖租約目錄進(jìn)行搶主角色。這里的租約目錄為文件系統(tǒng)中預(yù)先設(shè)定的作為搶到主會話的指示器的目錄,這里的加鎖方式可以為現(xiàn)有技術(shù)或未來發(fā)展的技術(shù)中的加鎖方式,本申請對此不做限定。這里的分布式文件系統(tǒng),可以為分布式存儲系統(tǒng)、分布式計算系統(tǒng)或基于分布式文件之上的其它存儲系統(tǒng),甚至可以包括另一個分布式文件系統(tǒng)。分布式文件系統(tǒng)的管理者(例如目錄樹管理器)可以記錄下租約目錄當(dāng)前是被哪個會話所鎖住,如果該會話掛掉,則自動清理該會話所持有的鎖。
步驟203,響應(yīng)于接收到對首次加鎖請求的響應(yīng)為加鎖成功,向管理者發(fā)送在租約目錄中新建子目錄的請求,子目錄以所述新會話的IP地址和端口命名。
在本實施例中,當(dāng)步驟202中的管理者對首次加鎖請求返回的響應(yīng)為加鎖成功時,可以將包括新會話的IP地址和端口的在租約目錄中新建子目錄請求發(fā)送至管理者,以便管理者采用新會話的IP地址和端口命名子目錄。
步驟204,響應(yīng)于接收到對新建子目錄的請求的響應(yīng)為新建成功,將新會話標(biāo)記為主會話。
在本實施例中,當(dāng)接收到管理者返回的對應(yīng)新建子目錄請求的響應(yīng)為新建成功時,可以確定新會話搶主成功,從而可以將新會話標(biāo)記為主會話。
本申請上述實施例提供的調(diào)用分布式文件系統(tǒng)的方法和裝置,實現(xiàn)了新會話的選主,并對主會話進(jìn)行鎖定,有效提高了調(diào)用分布式文件系統(tǒng)的健壯性。另外,該調(diào)用分布式文件系統(tǒng)的方法和裝置簡化了系統(tǒng)架構(gòu),不再需要依賴任何第三方機(jī)制/系統(tǒng),提升了調(diào)用分布式文件系統(tǒng)的方法和裝置的穩(wěn)定性和可演化性,易實現(xiàn)無狀態(tài)化,從而很容易實現(xiàn)全局的快速負(fù)載均衡機(jī)制和分片分裂與合并機(jī)制等。
進(jìn)一步參考圖3,圖3示出了根據(jù)本申請的調(diào)用分布式文件系統(tǒng)的方法的另一個實施例的流程。該調(diào)用分布式文件系統(tǒng)的方法,包括以下步驟:
在步驟301中,響應(yīng)于用戶端的請求,建立新會話,之后執(zhí)行步驟302;
在步驟302中,向分布式文件系統(tǒng)的管理者發(fā)送加鎖租約目錄的首次加鎖請求,之后執(zhí)行步驟303;
在步驟303中,判斷管理者返回的響應(yīng)是否為加鎖成功,若是,執(zhí)行步驟304,若否,執(zhí)行步驟305;
在步驟304中,向管理者首次查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄,若是,執(zhí)行步驟306,若否,則執(zhí)行步驟308;
在步驟305中,間隔預(yù)定時長檢查修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長,若是,則執(zhí)行步驟313,若否,則繼續(xù)執(zhí)行步驟305;
在步驟306中,向管理者發(fā)送用于刪除租約目錄中的子目錄的刪除請求,之后執(zhí)行步驟307;
在步驟307中,判斷管理者返回的對應(yīng)刪除請求的響應(yīng)是否為刪除成功,若是,則執(zhí)行步驟308,若否,則執(zhí)行步驟305;
在步驟308中,向管理者發(fā)送在租約目錄中新建子目錄的請求,子目錄以所述新會話的IP地址和端口命名,之后執(zhí)行步驟309;
在步驟309中,判斷管理者返回的對新建子目錄的請求的響應(yīng)是否為新建成功,若是,則執(zhí)行步驟310,若否,則執(zhí)行步驟305;
在步驟310中,將新會話標(biāo)記為主會話,之后執(zhí)行步驟311;
在步驟311中,在主會話存活期間,定期向管理者發(fā)送更新租約目錄的修改時間戳的請求,之后執(zhí)行步驟312;
在步驟312中,響應(yīng)于主會話關(guān)閉,向管理者發(fā)送刪除租約目錄中的子目錄并解鎖租約目錄的請求;
在步驟313中,向管理者發(fā)送再次加鎖請求,再次加鎖請求用于請求對租約目錄加鎖,之后執(zhí)行步驟314;
在步驟314中,判斷接收到對再次加鎖請求的響應(yīng)是否為加鎖成功,若是,則執(zhí)行步驟304,若否,則執(zhí)行步驟315;
在步驟315中,向管理者再次查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄,若是,則執(zhí)行步驟305,若否,則執(zhí)行步驟302。
在本實施例中,可以預(yù)先在分布式文件系統(tǒng)中指定一個目錄(下文稱之為租約目錄)作為搶主的指示器,搶到主的會話則將自己的IP地址和端口(例如IP:PORT)作為子目錄名字記錄到租約目錄的子樹中去,我們稱之為服務(wù)標(biāo)識。主會話會定期更新租約目錄的最后修改時間戳(ModificationTime),從會話定期檢查該時間戳是否超過了規(guī)定的時長而沒有發(fā)生任何變化,如果是,則發(fā)起搶主。
以下舉例說明租約目錄及其中的子目錄的結(jié)構(gòu):
假定有A(假定其IP:PORT為1.1.1.1:1111)和B(假定其IP:PORT為2.2.2.2:2222)兩個會話參與選主,如果A是主,則目錄結(jié)構(gòu)是:
xxx/lease/1.1.1.1:1111
如果B是主,則目錄結(jié)構(gòu)是
xxx/lease/2.2.2.2:2222
這里的lease就是指租約目錄,它的子目錄的名字代表了當(dāng)前的主的服務(wù)標(biāo)識。
在本實施例中,選主可以通過以下過程實現(xiàn):
過程1:啟動一個新的會話時,默認(rèn)為從角色。該會話首先對租約目錄進(jìn)行加鎖操作,如果加鎖失敗,說明此時有主,本會話進(jìn)入周期性檢查租約目錄時間戳的階段。如果加鎖成功,說明搶到了主,則首先將租約目錄下的內(nèi)容清空,然后將自己的服務(wù)標(biāo)識記錄到租約目錄下,結(jié)束過程。
過程2:本會話不斷地檢查租約目錄的時間戳是否超過規(guī)定時間閾值仍然沒有發(fā)生任何變化,是則觸發(fā)選主,也是通過對租約目錄執(zhí)行加鎖操作,如果加鎖成功,參見過程1結(jié)束搶主過程。如果加鎖失敗,則先檢查租約目錄下是否存在其它角色的服務(wù)標(biāo)識,若存在,則說明其它會話搶到了主,本會話進(jìn)入周期檢查租約目錄時間戳的階段;如果不存在,則過一會繼續(xù)加鎖,重復(fù)之前的過程。
本申請上述實施例提供的調(diào)用分布式文件系統(tǒng)的方法和裝置,通過響應(yīng)于建立的新會話執(zhí)行如圖3中所述的操作步驟,可以實現(xiàn)新會話從從角色到主角色的角色轉(zhuǎn)換過程,并且實現(xiàn)了對主會話的鎖定,有效提高了調(diào)用分布式文件系統(tǒng)的健壯性。另外,該調(diào)用分布式文件系統(tǒng)的方法和裝置簡化了系統(tǒng)架構(gòu),不再需要依賴任何第三方機(jī)制/系統(tǒng),提升了調(diào)用分布式文件系統(tǒng)的方法和裝置的穩(wěn)定性和可演化性,易實現(xiàn)無狀態(tài)化,從而很容易實現(xiàn)全局的快速負(fù)載均衡機(jī)制和分片分裂與合并機(jī)制等。
在上述實施例的一些可選實現(xiàn)方式中(圖中未示出),上述調(diào)用分布式文件系統(tǒng)的方法還可以包括:接收生成日志請求;生成每條數(shù)據(jù)流的每個日志的日志序列號;響應(yīng)于切換主會話或日志文件大小達(dá)到預(yù)定字節(jié),新創(chuàng)建日志文件;以日志文件中最小的日志序列號命名創(chuàng)建的日志文件;將所述日志序列號、日志的長度、校驗信息以及添加日志的會話的IP地址添加至創(chuàng)建的日志文件的頭部信息,將日志寫入創(chuàng)建的日志文件中直至日志文件大小達(dá)到預(yù)定字節(jié)。
在上述實現(xiàn)方式中,通過首先響應(yīng)于接收生成日志請求,生成每條數(shù)據(jù)流的每個日志的日志序列號;之后響應(yīng)于切換主會話或日志文件大小達(dá)到預(yù)定字節(jié),新創(chuàng)建日志文件;之后以日志文件中最小的日志序列號命名創(chuàng)建的日志文件;最后將所述日志序列號、日志的長度、校驗信息以及添加日志的會話的IP地址添加至創(chuàng)建的日志文件的頭部信息,將日志寫入創(chuàng)建的日志文件中直至日志文件大小達(dá)到預(yù)定字節(jié),實現(xiàn)了數(shù)據(jù)流的復(fù)制和持久化。
在上述實施例的一些可選實現(xiàn)方式中(圖中未示出),所述方法還可以包括:接收生成快照請求;間隔預(yù)定時間觸發(fā)快照;將所有日志序列號均小于快照中日志序列號的日志文件刪除。
在本實現(xiàn)方式中,提供了一個周期性地快照接口,默認(rèn)按照預(yù)定時間間隔觸發(fā),也可以設(shè)計定制化觸發(fā)策略。每次執(zhí)行完畢一個快照之后,本方案自動將那些日志序列號比該快照對應(yīng)的日志序列號還要小的記錄所在的文件刪掉。需要注意的是,有的文件前半部分比該日志序列號要小,后半部分比該日志序列號要大,那么這樣的文件本次不能刪除。做快照然后刪除數(shù)據(jù),就是一次緊置化過程。通過響應(yīng)于接收生成快照請求,間隔預(yù)定時間觸發(fā)快照,并將所有日志序列號均小于快照中日志序列號的日志文件刪除,可以實現(xiàn)數(shù)據(jù)流的緊置化。
在上述實施例的一些可選實現(xiàn)方式中(圖中未示出),方法還可以包括:接收回放日志請求;根據(jù)日志序列號,回放日志。
在本實現(xiàn)方式中,可以實現(xiàn)將日志回放到狀態(tài)機(jī),也即將寫入的數(shù)據(jù)一條一條地,嚴(yán)格按照與寫入時一樣的順序提交給服務(wù)單元在內(nèi)存中進(jìn)行處理。對于主會話來說,它在寫入分布式文件系統(tǒng)結(jié)束之后,直接將該記錄在內(nèi)存狀態(tài)機(jī)中進(jìn)行回放。可以看出,狀態(tài)機(jī)的回放順序嚴(yán)格符合日志序列號的單調(diào)遞增順序,二者完全一致。對于從會話來說,本方案提供了一個自動循環(huán)執(zhí)行的機(jī)制,該機(jī)制自動從數(shù)據(jù)流(也就是分布式文件系統(tǒng)的一系列文件)中按序讀取記錄,該機(jī)制在讀到記錄之后,嚴(yán)格按照日志序列號的順序?qū)⒂涗浱峤唤o狀態(tài)機(jī)進(jìn)行回放,因此,可以看出,主從的回放順序因為日志序列號的序從而保證了嚴(yán)格的一致。
進(jìn)一步參考圖4,圖4示出了根據(jù)本申請的調(diào)用分布式文件系統(tǒng)的方法的一個實施例的應(yīng)用場景。
如圖4所示,在該調(diào)用分布式文件系統(tǒng)的方法的應(yīng)用場景中,包括:應(yīng)用系統(tǒng)410、接口裝置420和分布式文件系統(tǒng)430。
首先,應(yīng)用系統(tǒng)410與接口裝置420建立會話411和會話412,其中的會話411和會話412經(jīng)由接口裝置420中的會話狀態(tài)與數(shù)據(jù)控制器421與選主管理器422發(fā)生交互,由選主管理器422與分布時文件系統(tǒng)430中的目錄鎖管理器431進(jìn)行目錄鎖的狀態(tài)交換,從而確定了會話411為主會話。
在主會話411和從會話412與會話狀態(tài)與數(shù)據(jù)控制器421進(jìn)行交互的過程中,主會話411和從會話412可以經(jīng)由會話狀態(tài)與數(shù)據(jù)控制器421向日志寫入器423寫入日志,再經(jīng)由日志寫入器423向分布式文件系統(tǒng)430寫入日志數(shù)據(jù)流,例如日志文件1、日志文件2直至日志文件N等;主會話411和從會話412還可以經(jīng)由會話狀態(tài)與數(shù)據(jù)控制器421向快照寫入器425寫入快照,再經(jīng)由快照寫入器425向分布式文件系統(tǒng)430寫入快照,例如寫入快照文件1、快照文件2等,其中快照1中可以包括快照1文件1和快照1文件2,快照2中可以包括快照2文件1、快照2文件2、快照2文件3等;從會話412還可以經(jīng)由會話狀態(tài)與數(shù)據(jù)控制器421從日志與快照讀取器424讀取日志和/或讀取快照,此時快照讀取器從分布式文件系統(tǒng)430中存儲的以下一項或多項數(shù)據(jù)中讀取從會話412請求的數(shù)據(jù):日志文件1至日志文件N、快照1和快照2。
應(yīng)當(dāng)理解,在本應(yīng)用場景中,本申請調(diào)用分布式文件系統(tǒng)的方法通過接口裝置420實現(xiàn),在上述主會話411和從會話412與會話狀態(tài)與數(shù)據(jù)控制器421交互的過程中,會話狀態(tài)與數(shù)據(jù)控制器421可以對日志寫入器423、日志與快照讀取器424進(jìn)行內(nèi)部狀態(tài)控制,還可以對快照寫入器425進(jìn)行快照狀態(tài)控制。另外,本應(yīng)用場景僅為本申請調(diào)用分布式文件系統(tǒng)的方法的一個示例性應(yīng)用場景,并不代表對本申請的限定。例如其中的會話狀態(tài)與數(shù)據(jù)控制器421、選主管理器422、日志寫入器423、日志與快照讀取器424和快照寫入器425這五個器件,可以合并為一個或多個器件;這五個器件中的任意一個器件,也可以拆分為多個子器件,本申請對此不作限定。
進(jìn)一步參考圖5,作為對上述方法的實現(xiàn),本申請?zhí)峁┝艘环N調(diào)用分布式文件系統(tǒng)的裝置的一個實施例,該裝置實施例與圖2所示的方法實施例相對應(yīng),由此,上文針對方法描述的操作和特征同樣適用于裝置500及其中包含的單元,在此不再贅述。該裝置具體可以應(yīng)用于各種電子設(shè)備中。
如圖5所示,本實施例的調(diào)用分布式文件系統(tǒng)的裝置500包括:會話建立單元510、首次加鎖請求單元520、新建子目錄請求單元530和主會話標(biāo)記單元540。
其中,會話建立單元510,用于基于接收的用戶端的會話請求,建立新會話。
首次加鎖請求單元520,用于向分布式文件系統(tǒng)的管理者發(fā)送首次加鎖請求,首次加鎖請求用于請求對租約目錄加鎖。
新建子目錄請求單元530,用于響應(yīng)于接收到對首次加鎖請求的響應(yīng)為加鎖成功,向管理者發(fā)送在租約目錄中新建子目錄的請求,子目錄以新會話的IP地址和端口命名。
主會話標(biāo)記單元540,用于響應(yīng)于接收到對新建子目錄的請求的響應(yīng)為新建成功,將新會話標(biāo)記為主會話。
在本實施例的一些可選實現(xiàn)方式中,裝置還可以包括以下任意一項或多項:修改時間戳單元,用于在主會話存活期間,定期向管理者發(fā)送更新租約目錄的修改時間戳的請求;和刪除及加鎖單元,用于響應(yīng)于主會話關(guān)閉,向管理者發(fā)送刪除租約目錄中的子目錄并解鎖租約目錄的請求。
在本實施例的一些可選實現(xiàn)方式中,新建子目錄請求單元可以包括:首次查詢請求子單元,用于響應(yīng)于接收到對首次加鎖請求的響應(yīng)為加鎖成功,向管理者發(fā)送首次查詢請求,首次查詢請求用于查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄;刪除子目錄子單元,用于響應(yīng)于接收到對首次查詢請求的響應(yīng)為存在,向管理者發(fā)送刪除請求,刪除請求用于刪除租約目錄中的子目錄;新建子目錄子單元,用于響應(yīng)于接收到對首次查詢請求的響應(yīng)為不存在或接收到對刪除請求的響應(yīng)為刪除成功,向管理者發(fā)送在租約目錄中新建子目錄的請求。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括:時長檢查單元,用于響應(yīng)于接收到對首次加鎖請求的響應(yīng)為加鎖失敗,間隔預(yù)定時長檢查修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;再次加鎖請求單元,用于響應(yīng)于修改時間戳距當(dāng)前時間的時長超過預(yù)設(shè)時長,向管理者發(fā)送再次加鎖請求,再次加鎖請求用于請求對租約目錄加鎖;子目錄查詢子單元進(jìn)一步用于:響應(yīng)于接收到對再次加鎖請求的響應(yīng)為加鎖成功,執(zhí)行向管理者發(fā)送首次查詢請求。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括:再次查詢請求單元,用于響應(yīng)于接收到對再次加鎖請求的響應(yīng)為加鎖失敗,向管理者發(fā)送再次查詢請求,再次查詢請求用于查詢租約目錄中是否存在以其它會話的IP地址和端口命名的子目錄;時長檢查單元進(jìn)一步用于:響應(yīng)于接收到對再次查詢請求的響應(yīng)為存在,執(zhí)行間隔預(yù)定時長檢查修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括:首次加鎖請求單元進(jìn)一步用于:響應(yīng)于接收到對再次查詢請求的響應(yīng)為不存在,執(zhí)行向分布式文件系統(tǒng)的管理者發(fā)送加鎖租約目錄的首次加鎖請求。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括以下任意一項或多項:時長檢查單元進(jìn)一步用于:響應(yīng)于接收到對新建子目錄請求的響應(yīng)為新建失敗,執(zhí)行間隔預(yù)定時長檢查修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;時長檢查單元進(jìn)一步用于:響應(yīng)于接收到對刪除請求的響應(yīng)為刪除失敗,執(zhí)行間隔預(yù)定時長檢查修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長;以及時長檢查單元進(jìn)一步用于:響應(yīng)于修改時間戳距當(dāng)前時間的時長未超過預(yù)設(shè)時長,執(zhí)行間隔預(yù)定時長檢查修改時間戳距當(dāng)前時間的時長是否超過預(yù)設(shè)時長。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括:序列號生成單元,用于響應(yīng)于接收生成日志請求,生成每條數(shù)據(jù)流的每個日志的日志序列號;文件創(chuàng)建單元,用于響應(yīng)于切換主會話或日志文件大小達(dá)到預(yù)定字節(jié),新創(chuàng)建日志文件;文件命名單元,用于以日志文件中最小的日志序列號命名創(chuàng)建的日志文件;信息添加單元,用于將日志序列號、日志的長度、校驗信息以及寫入的會話的IP地址添加至創(chuàng)建的日志文件的頭部信息;日志添加單元,用于將日志添加至創(chuàng)建的日志文件中直至日志文件大小達(dá)到預(yù)定字節(jié)。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括:快照觸發(fā)單元,用于響應(yīng)于接收生成快照請求,間隔預(yù)定時間觸發(fā)快照;文件刪除單元,用于將所有日志序列號均小于快照中日志序列號的日志文件刪除。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括:回放請求接收單元,用于接收回放日志請求;日志回放單元,用于根據(jù)日志序列號,回放日志。
應(yīng)當(dāng)理解,本申請上述實施例中的調(diào)用分布式文件系統(tǒng)的裝置,僅為對本申請的示例性描述,并不代表對本申請的限定。例如,可以根據(jù)需要將其中包括的多個單元合并為一個單元,也可以根據(jù)需要將其中包括的單元拆分為多個子單元。服務(wù)器端可以為單個服務(wù)器、多個服務(wù)器或服務(wù)器集群等。
下面參考圖6,其示出了適于用來實現(xiàn)本申請實施例的終端設(shè)備或服務(wù)器的計算機(jī)系統(tǒng)600的結(jié)構(gòu)示意圖。
如圖6所示,計算機(jī)系統(tǒng)600包括中央處理單元(CPU)601,其可以根據(jù)存儲在只讀存儲器(ROM)602中的程序或者從存儲部分608加載到隨機(jī)訪問存儲器(RAM)603中的程序而執(zhí)行各種適當(dāng)?shù)膭幼骱吞幚?。在RAM 603中,還存儲有系統(tǒng)600操作所需的各種程序和數(shù)據(jù)。CPU 601、ROM 602以及RAM 603通過總線604彼此相連。輸入/輸出(I/O)接口605也連接至總線604。
以下部件連接至I/O接口605:包括鍵盤、鼠標(biāo)等的輸入部分606;包括諸如陰極射線管(CRT)、液晶顯示器(LCD)等以及揚(yáng)聲器等的輸出部分607;包括硬盤等的存儲部分608;以及包括諸如LAN卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分609。通信部分609經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動器610也根據(jù)需要連接至I/O接口606。可拆卸介質(zhì)611,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲器等等,根據(jù)需要安裝在驅(qū)動器610上,以便于從其上讀出的計算機(jī)程序根據(jù)需要被安裝入存儲部分608。
特別地,根據(jù)本公開的實施例,上文參考流程圖描述的過程可以被實現(xiàn)為計算機(jī)軟件程序。例如,本公開的實施例包括一種計算機(jī)程序產(chǎn)品,其包括有形地包含在機(jī)器可讀介質(zhì)上的計算機(jī)程序,所述計算機(jī)程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實施例中,該計算機(jī)程序可以通過通信部分609從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)611被安裝。在該計算機(jī)程序被中央處理單元(CPU)601執(zhí)行時,執(zhí)行本申請的方法中限定的上述功能。
附圖中的流程圖和框圖,圖示了按照本申請各種實施例的系統(tǒng)、方法和計算機(jī)程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個方框可以代表一個單元、程序段、或代碼的一部分,所述單元、程序段、或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機(jī)指令的組合來實現(xiàn)。
描述于本申請實施例中所涉及到的單元可以通過軟件的方式實現(xiàn),也可以通過硬件的方式來實現(xiàn)。所描述的單元也可以設(shè)置在處理器中,例如,可以描述為:一種處理器包括會話建立單元、首次加鎖請求單元、新建子目錄請求單元和主會話標(biāo)記單元。其中,這些單元的名稱在某種情況下并不構(gòu)成對該單元本身的限定,例如,會話建立單元還可以被描述為“基于接收的用戶端的會話請求,建立新會話的單元”。
作為另一方面,本申請還提供了一種非易失性計算機(jī)存儲介質(zhì),該非易失性計算機(jī)存儲介質(zhì)可以是上述實施例中所述裝置中所包含的非易失性計算機(jī)存儲介質(zhì);也可以是單獨(dú)存在,未裝配入終端中的非易失性計算機(jī)存儲介質(zhì)。上述非易失性計算機(jī)存儲介質(zhì)存儲有一個或者多個程序,當(dāng)所述一個或者多個程序被一個設(shè)備執(zhí)行時,使得所述設(shè)備:基于接收的用戶端的會話請求,建立新會話;向分布式文件系統(tǒng)的管理者發(fā)送首次加鎖請求,首次加鎖請求用于請求對租約目錄加鎖;響應(yīng)于接收到對首次加鎖請求的響應(yīng)為加鎖成功,向管理者發(fā)送在租約目錄中新建子目錄的請求,子目錄以新會話的IP地址和端口命名;響應(yīng)于接收到對新建子目錄的請求的響應(yīng)為新建成功,將新會話標(biāo)記為主會話。
以上描述僅為本申請的較佳實施例以及對所運(yùn)用技術(shù)原理的說明。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,本申請中所涉及的發(fā)明范圍,并不限于上述技術(shù)特征的特定組合而成的技術(shù)方案,同時也應(yīng)涵蓋在不脫離所述發(fā)明構(gòu)思的情況下,由上述技術(shù)特征或其等同特征進(jìn)行任意組合而形成的其它技術(shù)方案。例如上述特征與本申請中公開的(但不限于)具有類似功能的技術(shù)特征進(jìn)行互相替換而形成的技術(shù)方案。