本發(fā)明屬于云計算領(lǐng)域,具體地說,涉及一種元數(shù)據(jù)輸出方法、客戶端和元數(shù)據(jù)服務(wù)器。
背景技術(shù):
文件系統(tǒng)的使用過程中,經(jīng)常會對系統(tǒng)中的文件或者目錄進行統(tǒng)計,以獲取當(dāng)前用戶數(shù)據(jù)的特點,指導(dǎo)文件系統(tǒng)的后續(xù)開發(fā);同時這些信息可以幫助文件系統(tǒng)的用戶來分析數(shù)據(jù)使用,對不同的用戶進行記賬等用途。
目前互聯(lián)網(wǎng)企業(yè)的生產(chǎn)系統(tǒng)上所采用的大規(guī)模分布式存儲系統(tǒng)架構(gòu)都采用了類似于GFS(谷歌文件系統(tǒng))的架構(gòu)。在這種架構(gòu)下,所有的數(shù)據(jù)修改都會形成操作日志,在重啟恢復(fù)的時候可以再次調(diào)用日志到內(nèi)存中以達(dá)到進程重啟前的內(nèi)存狀態(tài)。隨著時間的積累,文件系統(tǒng)內(nèi)的操作日志會越來越多,導(dǎo)致元數(shù)據(jù)服務(wù)(MetaServer)進程重啟花費的時間也越來越長,同時需要保留所有操作日志會造成的存儲空間不足的問題。為了提高元數(shù)據(jù)服務(wù)進程重啟恢復(fù)速度和控制存儲空間的無限使用,元數(shù)據(jù)服務(wù)進程會定期將內(nèi)存中的內(nèi)容輸出到本地磁盤形成快照,然后將快照前的操作日志刪除。在進程重啟恢復(fù)內(nèi)存狀態(tài)時會先從磁盤將快照文件讀取并恢復(fù)至內(nèi)存,然后將快照后產(chǎn)生的操作日志應(yīng)用到內(nèi)存中來避免應(yīng)用所有操作日志帶來的長時間恢復(fù)問題。
在現(xiàn)有系統(tǒng)實現(xiàn)方案下,為了可以對部分或者全部文件進行分析,通常有如下方法來獲取到與想要的時間點一致的元(meta)數(shù)據(jù)。
方法一:
1、在想要分析的時間點,觸發(fā)元數(shù)據(jù)服務(wù)進程將內(nèi)存信息輸出為磁盤 上的快照(snapshot);
2、將快照拷貝到額外的一臺空閑機器上,將快照加載到該機器的內(nèi)存;
3、輸出需要的元數(shù)據(jù)。
方法二:
1、拷貝元數(shù)據(jù)服務(wù)進程的任何一個快照和其后面產(chǎn)生的操作日志到額外的一臺空閑機器上;
2、使用工具來加載快照并應(yīng)用其后的操作日志到達(dá)某個時刻的內(nèi)存狀態(tài);
3、輸出需要的元數(shù)據(jù)。
現(xiàn)有的上述方法存在以下問題:當(dāng)前無論需要的是部分還是全量的元數(shù)據(jù),都需要將所有文件的內(nèi)存狀態(tài)恢復(fù)。在文件數(shù)量多造成元數(shù)據(jù)服務(wù)器內(nèi)存使用率較高時,需要額外的閑置機器來保證在恢復(fù)內(nèi)存的過程中不與原來的元數(shù)據(jù)服務(wù)進程競爭內(nèi)存而導(dǎo)致系統(tǒng)不穩(wěn)定,造成實現(xiàn)成本增加,尤其是在多個集群同時需要該功能的時候表現(xiàn)尤為嚴(yán)重。
技術(shù)實現(xiàn)要素:
有鑒于此,本申請?zhí)峁┝艘环N元數(shù)據(jù)輸出方法、客戶端和元數(shù)據(jù)服務(wù)器,以解決現(xiàn)有技術(shù)中在輸出特定時間的元數(shù)據(jù)時,需要恢復(fù)所有文件的內(nèi)存狀態(tài)的技術(shù)問題。
為了解決上述技術(shù)問題,本申請公開了一種元數(shù)據(jù)輸出方法,包括:接收到對元數(shù)據(jù)服務(wù)(MetaServer)進程的調(diào)用,所述調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù);通過分叉(fork)函數(shù)創(chuàng)建所述元數(shù)據(jù)服務(wù)進程的子進程;控制所述子進程根據(jù)所述輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)。
所述接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用,所述調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù)包括:接收到來自客戶端的對所述元數(shù)據(jù)服務(wù)進程的遠(yuǎn)程過程調(diào)用。
所述接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用,所述調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù)包括:判斷上一次創(chuàng)建的所述元數(shù)據(jù)服務(wù)進程的子進程是否已完成執(zhí) 行;當(dāng)上一次創(chuàng)建的所述元數(shù)據(jù)服務(wù)進程的子進程已完成執(zhí)行時,保存所述輸出配置參數(shù)至本地配置文件;當(dāng)上一次創(chuàng)建的所述元數(shù)據(jù)服務(wù)進程的子進程未完成執(zhí)行時,返回所述元數(shù)據(jù)服務(wù)進程當(dāng)前繁忙的消息。
所述控制所述子進程根據(jù)所述輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)包括:控制所述子進程根據(jù)所述輸出配置參數(shù)將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件;當(dāng)所述元數(shù)據(jù)輸出完畢時,標(biāo)記所述子進程已完成執(zhí)行。
所述輸出配置參數(shù)包括多個輸出對象。
所述控制所述子進程根據(jù)所述輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)包括:判斷所述子進程是否出現(xiàn)死鎖狀態(tài);當(dāng)所述子進程出現(xiàn)死鎖狀態(tài)時,殺死所述子進程。
所述控制所述子進程根據(jù)所述輸出配置參數(shù)將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件之前,所述方法還包括:判斷未上傳的所述臨時文件的個數(shù)是否達(dá)到預(yù)設(shè)閾值;當(dāng)未上傳的所述臨時文件的個數(shù)達(dá)到預(yù)設(shè)閾值時,進入等待狀態(tài),以等待未上傳的所述臨時文件被上傳完畢。
所述調(diào)用還包括元數(shù)據(jù)的上傳配置參數(shù);所述控制所述子進程根據(jù)所述輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)的同時,所述方法還包括:根據(jù)所述上傳配置參數(shù)將所述輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)。
所述上傳配置參數(shù)包括上傳速率和目標(biāo)目錄,其中,所述上傳速率用于控制上傳過程的數(shù)據(jù)傳輸速率;所述根據(jù)所述上傳配置參數(shù)將所述輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)包括:上傳所述輸出的元數(shù)據(jù)至所述分布式存儲系統(tǒng)的臨時目錄;當(dāng)所述輸出的元數(shù)據(jù)被完整的上傳完畢時,將所述臨時目錄重命名為所述目標(biāo)目錄,并標(biāo)記本次任務(wù)已完成。
為了解決上述技術(shù)問題,本申請還公開了一種元數(shù)據(jù)輸出方法,包括:配置元數(shù)據(jù)的輸出配置參數(shù);向元數(shù)據(jù)服務(wù)器發(fā)起對元數(shù)據(jù)服務(wù)進程的調(diào)用,以通過分叉函數(shù)創(chuàng)建出所述元數(shù)據(jù)服務(wù)進程的子進程,由所述子進程根據(jù)所述輸出配置函數(shù)輸出相應(yīng)的元數(shù)據(jù)。
所述配置元數(shù)據(jù)的輸出配置參數(shù)的同時,所述方法還包括:配置元數(shù)據(jù)的上傳配置參數(shù)。
所述方法還包括:發(fā)送進度查詢請求至元數(shù)據(jù)服務(wù)器;接收所述元數(shù)據(jù)服務(wù)器返回的任務(wù)狀態(tài)信息。
為了解決上述技術(shù)問題,本申請還公開了一種元數(shù)據(jù)服務(wù)器,所述元數(shù)據(jù)服務(wù)器包括:接收模塊,用于接收到對元數(shù)據(jù)服務(wù)(MetaServer)進程的調(diào)用,所述調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù);創(chuàng)建模塊,用于通過分叉(fork)函數(shù)創(chuàng)建所述元數(shù)據(jù)服務(wù)進程的子進程;處理模塊,用于控制所述子進程根據(jù)所述輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)。
所述接收模塊包括:接收子模塊,用于接收到來自客戶端的對所述元數(shù)據(jù)服務(wù)進程的遠(yuǎn)程過程調(diào)用。
所述接收模塊包括:第一判斷子模塊,用于判斷上一次創(chuàng)建的所述元數(shù)據(jù)服務(wù)進程的子進程是否已完成執(zhí)行;保存子模塊,用于當(dāng)上一次創(chuàng)建的所述元數(shù)據(jù)服務(wù)進程的子進程已完成執(zhí)行時,保存所述輸出配置參數(shù)至本地配置文件;返回子模塊,用于當(dāng)上一次創(chuàng)建的所述元數(shù)據(jù)服務(wù)進程的子進程未完成執(zhí)行時,返回所述元數(shù)據(jù)服務(wù)進程當(dāng)前繁忙的消息。
所述處理模塊包括:寫入子模塊,用于控制所述子進程根據(jù)所述輸出配置參數(shù)將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件;標(biāo)記子模塊,用于當(dāng)所述元數(shù)據(jù)輸出完畢時,標(biāo)記所述子進程已完成執(zhí)行。
所述輸出配置參數(shù)包括多個輸出對象。
所述處理模塊包括:第二判斷子模塊,用于判斷所述子進程是否出現(xiàn)死鎖狀態(tài);第一處理子模塊,用于當(dāng)所述子進程出現(xiàn)死鎖狀態(tài)時,殺死所述子進程。
所述處理模塊還包括:第三判斷子模塊,用于判斷未上傳的所述臨時文件的個數(shù)是否達(dá)到預(yù)設(shè)閾值;第二處理子模塊,用于當(dāng)未上傳的所述臨時文件的個數(shù)達(dá)到預(yù)設(shè)閾值時,進入等待狀態(tài),以等待未上傳的所述臨時文件被上傳完畢。
所述調(diào)用還包括元數(shù)據(jù)的上傳配置參數(shù);所述元數(shù)據(jù)服務(wù)器還包括:上傳模塊,用于根據(jù)所述上傳配置參數(shù)將所述輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)。
所述上傳配置參數(shù)包括上傳速率和目標(biāo)目錄,其中,所述上傳速率用于控制上傳過程的數(shù)據(jù)傳輸速率;所述上傳模塊包括:上傳子模塊,用于上傳所述輸出的元數(shù)據(jù)至所述分布式存儲系統(tǒng)的臨時目錄;重命名子模塊,用于當(dāng)所述輸出的元數(shù)據(jù)被完整的上傳完畢時,將所述臨時目錄重命名為所述目標(biāo)目錄,并標(biāo)記本次任務(wù)已完成。
為了解決上述技術(shù)問題,本申請還公開了一種元數(shù)據(jù)輸出客戶端,包括:第一配置模塊,用于配置元數(shù)據(jù)的輸出配置參數(shù);調(diào)用模塊,用于向元數(shù)據(jù)服務(wù)器發(fā)起對元數(shù)據(jù)服務(wù)進程的調(diào)用,以通過分叉函數(shù)創(chuàng)建出所述元數(shù)據(jù)服務(wù)進程的子進程,由所述子進程根據(jù)所述輸出配置函數(shù)輸出相應(yīng)的元數(shù)據(jù)。
所述客戶端還包括:第二配置模塊,用于配置元數(shù)據(jù)的上傳配置參數(shù)。
所述客戶端還包括:查詢模塊,用于發(fā)送進度查詢請求至元數(shù)據(jù)服務(wù)器;接收模塊,用于接收所述元數(shù)據(jù)服務(wù)器返回的任務(wù)狀態(tài)信息。
與現(xiàn)有技術(shù)相比,本申請可以獲得包括以下技術(shù)效果:不再需要恢復(fù)所有文件的內(nèi)存狀態(tài),能夠得到在分叉操作的時間點相應(yīng)的輸出目標(biāo)的內(nèi)存狀態(tài),從而保證元數(shù)據(jù)輸出的時效性;不再需要配備額外的計算機,使實現(xiàn)成本降低。此外對當(dāng)前元數(shù)據(jù)服務(wù)器的內(nèi)存使用量的增加極少,只會為子進程分配由于父進程的寫入操作而修改的內(nèi)存量。
當(dāng)然,實施本申請的任一產(chǎn)品必不一定需要同時達(dá)到以上所述的所有技術(shù)效果。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1是本申請實施例的一種元數(shù)據(jù)輸出方法的流程示意圖;
圖2是本申請實施例的接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用的流程示意圖;
圖3是本申請實施例控制子進程輸出元數(shù)據(jù)的流程示意圖;
圖4是本申請實施例的一種元數(shù)據(jù)輸出方法的流程示意圖;
圖5是本申請實施例上傳元數(shù)據(jù)的流程示意圖;
圖6是本申請實施例的一種元數(shù)據(jù)輸出方法的流程示意圖;
圖7是本申請實施例的一種元數(shù)據(jù)輸出方法的流程示意圖;
圖8是本申請實施例的一種元數(shù)據(jù)輸出方法的流程示意圖;
圖9是本申請實施例的一種元數(shù)據(jù)服務(wù)器的示例性結(jié)構(gòu)框圖;
圖10是本申請實施例的一種元數(shù)據(jù)輸出客戶端的示例性結(jié)構(gòu)框圖。
具體實施方式
以下將配合附圖及實施例來詳細(xì)說明本發(fā)明的實施方式,藉此對本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題并達(dá)成技術(shù)功效的實現(xiàn)過程能充分理解并據(jù)以實施。
圖1是本申請實施例提供的一種元數(shù)據(jù)輸出方法,適用于服務(wù)器設(shè)備,該方法包括以下步驟。
在步驟S10中,接收到對元數(shù)據(jù)服務(wù)(MetaServer)進程的調(diào)用,調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù)。
該元數(shù)據(jù)服務(wù)進程運行在元數(shù)據(jù)服務(wù)器中,根據(jù)接收到的調(diào)用輸出相應(yīng)的元數(shù)據(jù)。對元數(shù)據(jù)服務(wù)進程的調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù)。
該輸出配置參數(shù)包括輸出目標(biāo)、輸出格式和輸出內(nèi)容存放路徑。其中,輸出目標(biāo)是指需要輸出的元數(shù)據(jù)當(dāng)前所在的內(nèi)存目錄;輸出格式是指元數(shù)據(jù)輸出后的保存形式,如文件形式或者內(nèi)存目錄形式;輸出內(nèi)容存放路徑是輸出的元數(shù)據(jù)在內(nèi)存中的存放路徑。例如,輸出目標(biāo)為/var/log/abc,輸出格式為文件形式,輸出內(nèi)容存放路徑為/tmp/msv/abc;上述輸出配置參數(shù)將/var/log/abc目錄下的元數(shù)據(jù)以文件形式輸出到/tmp/msv/abc目錄。
在步驟S11中,通過分叉(fork)函數(shù)創(chuàng)建元數(shù)據(jù)服務(wù)進程的子進程。
元數(shù)據(jù)服務(wù)器接收到針對元數(shù)據(jù)服務(wù)進程的調(diào)用后,通過分叉函數(shù)創(chuàng)建元數(shù)據(jù)服務(wù)進程的子進程。該子進程用于輸出在分叉操作這一時刻與輸出目標(biāo)對應(yīng)的元數(shù)據(jù);父進程繼續(xù)進行有關(guān)元數(shù)據(jù)服務(wù)器的其他操作。該子進程 與元數(shù)據(jù)服務(wù)進程(父進程)共享內(nèi)存地址空間,并且父進程采用寫時拷貝技術(shù)(Copy-on-Write),在父進程對內(nèi)存地址空間有寫入操作時才會復(fù)制相應(yīng)變化的內(nèi)存地址空間分配給子進程。保證子進程對應(yīng)的內(nèi)存地址空間在分叉函數(shù)的分叉操作完成后可以定格在該分叉操作的時間點來實現(xiàn)元數(shù)據(jù)在某個時間點上的一致性,并通過該子進程根據(jù)輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)。
在步驟S12中,控制子進程根據(jù)輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)。
使元數(shù)據(jù)的輸出不再需要將元數(shù)據(jù)服務(wù)器所有文件的內(nèi)存狀態(tài)恢復(fù),通過分叉函數(shù)創(chuàng)建子進程,得到在分叉操作的時間點相應(yīng)的輸出目標(biāo)的內(nèi)存狀態(tài),能夠保證元數(shù)據(jù)輸出的時效性。同時,現(xiàn)有技術(shù)中在額外配備的計算機設(shè)備上恢復(fù)內(nèi)存狀態(tài)是為了避免與元數(shù)據(jù)服務(wù)進程競爭內(nèi)存,而采用本申請的元數(shù)據(jù)輸出方法,不再需要配備額外的計算機,使實現(xiàn)成本降低。此外對當(dāng)前元數(shù)據(jù)服務(wù)器的內(nèi)存使用量的增加極少,只會為子進程分配由于父進程的寫入操作而修改的內(nèi)存量。
在一個實施例中,步驟S10接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用,是來自于客戶端的對元數(shù)據(jù)服務(wù)進程的遠(yuǎn)程過程調(diào)用(Remote Procedure Call,RPC)。即由元數(shù)據(jù)服務(wù)器之外的客戶端計算機來向元數(shù)據(jù)服務(wù)器發(fā)起針對元數(shù)據(jù)服務(wù)進程的調(diào)用。此時,針對分布式存儲系統(tǒng)中所有元數(shù)據(jù)的輸出操作都由該客戶端計算機進行控制操作,通過該客戶端計算機來設(shè)置輸出配置參數(shù)并向元數(shù)據(jù)服務(wù)器的元數(shù)據(jù)服務(wù)進程發(fā)起遠(yuǎn)程過程調(diào)用。此時能夠?qū)υ獢?shù)據(jù)的輸出進行遠(yuǎn)程集中控制,在同時為多個集群提供元數(shù)據(jù)服務(wù)的情況下,通過客戶端計算機集中控制,有效將降低了系統(tǒng)的維護難度和成本,提高維護效率。
在一個實施例中,如圖2所示,步驟S10接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用進一步包括以下步驟。
在步驟S101中,接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用。
在步驟S102中,判斷上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程是否已完成執(zhí)行。當(dāng)上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程已執(zhí)行完成時,執(zhí)行步驟S103;當(dāng)上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程未執(zhí)行完成時,執(zhí)行步驟 S104。
每次分叉操作創(chuàng)建的子進程,在完成元數(shù)據(jù)的輸出之后都會標(biāo)記相應(yīng)的狀態(tài),例如已完成執(zhí)行的子進程狀態(tài)標(biāo)記為“Done(完成)”。為了避免占用內(nèi)存資源過多,判斷上一次創(chuàng)建的子進程是否已完成執(zhí)行。
在步驟S103中,保存輸出配置參數(shù)至本地配置文件。
元數(shù)據(jù)服務(wù)器將本次調(diào)用的輸出配置參數(shù)保存在本地配置文件,以備創(chuàng)建出的子進程來完成元數(shù)據(jù)輸出。
在步驟S104中,返回元數(shù)據(jù)服務(wù)進程當(dāng)前繁忙的消息,并返回步驟S102。
如果對元數(shù)據(jù)服務(wù)進程的調(diào)用來自遠(yuǎn)程客戶端計算機,則將元數(shù)據(jù)服務(wù)進程當(dāng)前繁忙的消息返回至遠(yuǎn)程客戶端計算機。
在不同時間通過分叉函數(shù)創(chuàng)建的子進程所對應(yīng)的內(nèi)存空間具有不同的時間屬性,內(nèi)存中的元數(shù)據(jù)狀態(tài)也會不同。在需要多個輸出目標(biāo)的元數(shù)據(jù)時,為了保證所輸出的元數(shù)據(jù)的時效性,將需要輸出的多個輸出目標(biāo)同時設(shè)置在輸出配置參數(shù)中,通過對元數(shù)據(jù)服務(wù)進程的一次調(diào)用來完成。此時,分叉操作創(chuàng)建的子進程將完成多個輸出目標(biāo)的元數(shù)據(jù)輸出,以保證所有輸出目標(biāo)的時效性。例如,輸出配置參數(shù)共包括/var/log/abc、/var/log/efg、/var/log/chb等多個輸出目標(biāo)。
在一個實施例中,如圖3所示,步驟S12控制子進程根據(jù)輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)進一步包括以下步驟。
在步驟S121中,控制子進程根據(jù)輸出配置參數(shù)將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件。
子進程將與輸出目標(biāo)對應(yīng)的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件。當(dāng)該臨時文件的大小達(dá)到預(yù)設(shè)閾值(如200M)或者相應(yīng)的元數(shù)據(jù)已全部輸出完畢時,將該臨時文件命名為服務(wù)器上傳進程可識別的文件名??勺R別的文件名通常是與輸出目標(biāo)相對應(yīng)的文件名,例如,輸出目標(biāo)為/var/log/abc,則該臨時文件命名為abc_tmp,當(dāng)該臨時文件大小已達(dá)到閾值需要輸出或者元數(shù)據(jù)已寫入完畢需要輸出時,將文件名從abc_tmp變?yōu)閍bc,如果按照文件大小的閾 值將輸出的元數(shù)據(jù)劃分為多個臨時文件,則分別命名為:abc1、abc2、……
服務(wù)器上傳進程用于將輸出的元數(shù)據(jù)上傳到分布式存儲系統(tǒng),以實現(xiàn)與元數(shù)據(jù)相關(guān)的其他功能,例如用戶數(shù)據(jù)分析,用戶行為統(tǒng)計等等。上傳元數(shù)據(jù)的過程將在后續(xù)實施例中詳細(xì)說明。
在步驟S122中,當(dāng)元數(shù)據(jù)輸出完畢時,標(biāo)記子進程已完成執(zhí)行。
在元數(shù)據(jù)輸出過程中,該子進程通常標(biāo)記為“等待(waiting)”,元數(shù)據(jù)輸出完畢后,通常標(biāo)記為“完成(Done)”,以繼續(xù)下一次元數(shù)據(jù)輸出。將元數(shù)據(jù)輸出到本地內(nèi)存,能夠減少對元數(shù)據(jù)服務(wù)器本地磁盤的訪問,避免影響元數(shù)據(jù)服務(wù)器的性能。
在一個實施例中,步驟S12控制子進程根據(jù)輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)的同時,還需要判斷該子進程是否出現(xiàn)死鎖狀態(tài)。當(dāng)子進程需要輸出的元數(shù)據(jù)被其他進程鎖定(如排他鎖),則該子進程有可能會一直等待其他進程釋放,但其他進程需要的內(nèi)存資源也有可能同時被該子進程鎖定,需要等待該子進程釋放,此時即出現(xiàn)死鎖狀態(tài)。檢測到子進程進入死鎖狀態(tài)后,殺死該子進程,將該子進程標(biāo)記為“失敗”,為了保證元數(shù)據(jù)輸出功能的正常運行,需要殺死已進入死鎖狀態(tài)的子進程。例如,利用該子進程的進程標(biāo)識(PID)和相應(yīng)命令殺死進入死鎖狀態(tài)的子進程。
圖4是本申請實施例提供的一種元數(shù)據(jù)輸出方法,適用于服務(wù)器設(shè)備,該方法包括以下步驟。
在步驟S20中,接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用,調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù)和上傳配置參數(shù)。
在設(shè)置輸出配置參數(shù)的同時,設(shè)置相應(yīng)的上傳配置參數(shù)。上傳配置參數(shù)包括上傳速率、目標(biāo)目錄和壓縮參數(shù)。其中,上傳速率用于控制上傳過程的數(shù)據(jù)傳輸速率,例如該上傳速率為20Mb/S,則上傳過程的數(shù)據(jù)傳輸速率會小于或等于20Mb/S。該目標(biāo)目錄是將輸出的元數(shù)據(jù)上傳至的目錄,該目標(biāo)目錄可位于本地集群,也可以位于其他遠(yuǎn)程集群。該壓縮參數(shù)用于控制輸出的元數(shù)據(jù)在上傳之前是否需要壓縮處理,當(dāng)需要上傳的元數(shù)據(jù)過多時,為了提高效率,通過該壓縮參數(shù)設(shè)置在上傳之前對數(shù)據(jù)進行壓縮處理。
在步驟S21中,通過分叉函數(shù)創(chuàng)建元數(shù)據(jù)服務(wù)進程的子進程。
在步驟S22中,控制子進程根據(jù)輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù),同時根據(jù)上傳配置參數(shù)將輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)。
在元數(shù)據(jù)服務(wù)器中設(shè)置服務(wù)器上傳進程,用于輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)。該服務(wù)器上傳進程被設(shè)置為每隔預(yù)設(shè)時長啟動一次,以檢查是否有輸出的元數(shù)據(jù)需要上傳。例如,利用Crontab命令設(shè)置每分鐘運行一次服務(wù)器上傳進程。服務(wù)器上傳進程檢測元數(shù)據(jù)服務(wù)器的本地配置文件是否包括輸出配置參數(shù)和上傳配置參數(shù),檢測到上述配置參數(shù)時開始根據(jù)上傳配置參數(shù)進行元數(shù)據(jù)的上傳操作。
元數(shù)據(jù)的輸出過程和上傳過程是并行過程,將輸出的元數(shù)據(jù)盡快上傳以減少對內(nèi)存空間的占用,避免影響元數(shù)據(jù)服務(wù)器的性能。在控制子進程根據(jù)輸出配置參數(shù)將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件之前,判斷當(dāng)前未上傳的臨時文件的個數(shù)是否達(dá)到預(yù)設(shè)閾值,例如判斷未上傳的臨時文件的個數(shù)是否達(dá)到5個。當(dāng)未上傳的臨時文件的個數(shù)未達(dá)到預(yù)設(shè)閾值時,繼續(xù)將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件;當(dāng)未上傳的臨時文件的個數(shù)達(dá)到預(yù)設(shè)閾值時,控制該子進程進入等待狀態(tài),以等待未上傳的臨時文件被上傳完畢。從而使元數(shù)據(jù)的輸出速度能夠自適應(yīng)上傳速度,盡量保證內(nèi)存不會被過多占用。
元數(shù)據(jù)服務(wù)器每次啟動該服務(wù)器上傳進程時,需要打開位于本地磁盤的執(zhí)行文件。在打開執(zhí)行文件時,對該執(zhí)行文件添加排他鎖,此時元數(shù)據(jù)服務(wù)器無法再啟動第二個服務(wù)器上傳進程,需等待本次啟動的服務(wù)器上傳進程執(zhí)行完成后,將對執(zhí)行文件的排他鎖釋放,才能再次啟動下一個服務(wù)器上傳進程。以防止上傳元數(shù)據(jù)的過程占用網(wǎng)絡(luò)帶寬過多,影響元數(shù)據(jù)服務(wù)器的其他進程的網(wǎng)絡(luò)數(shù)據(jù)傳輸。
元數(shù)據(jù)服務(wù)器成功啟動該服務(wù)器上傳進程之后,根據(jù)本地配置文件判斷是否有需要執(zhí)行上傳的任務(wù)。如果沒有則退出服務(wù)器上傳進程;如果有則開始上傳元數(shù)據(jù)并檢測該任務(wù)是否已完成執(zhí)行(元數(shù)據(jù)是否已全部輸出),檢測到該任務(wù)已完成執(zhí)行時,設(shè)置本次上傳為該任務(wù)的最后一次上傳,直到檢測到該任務(wù)的最后一次上傳也已經(jīng)上傳完畢。
如圖5所示,步驟S22根據(jù)上傳配置參數(shù)將輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)的過程中進一步包括:
在步驟S221中,上傳輸出的元數(shù)據(jù)至分布式存儲系統(tǒng)的臨時目錄。
控制啟動的服務(wù)器上傳進程上傳輸出的元數(shù)據(jù),并在上傳的目標(biāo)集群創(chuàng)建一臨時目錄以保存上傳中的元數(shù)據(jù)。
在步驟S222中,當(dāng)輸出的元數(shù)據(jù)被完整的上傳完畢時,將臨時目錄重命名為目標(biāo)目錄,并標(biāo)記本次任務(wù)已完成。
即該任務(wù)的最后一次上傳完畢之后,將臨時目錄修改為上傳配置參數(shù)中的目標(biāo)目錄,從而將輸出的元數(shù)據(jù)保存到分布式存儲系統(tǒng)的目標(biāo)目錄,例如將臨時目錄/tmp/upload修改為目標(biāo)目錄/var/lib/abc。在元數(shù)據(jù)的上傳完成后,將任務(wù)標(biāo)記為“上傳已完成”。
圖6是本申請實施例提供的一種元數(shù)據(jù)輸出方法,該方法包括以下步驟。
在步驟S301中,接收到對元數(shù)據(jù)服務(wù)進程的調(diào)用,調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù)和上傳配置參數(shù)。
在步驟S302中,判斷上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程是否已完成執(zhí)行。當(dāng)上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程已執(zhí)行完成時,執(zhí)行步驟S304;當(dāng)上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程未執(zhí)行完成時,執(zhí)行步驟S303。
在步驟S303中,返回元數(shù)據(jù)服務(wù)進程當(dāng)前繁忙的消息,并返回步驟S302。
在步驟S304中,保存輸出配置參數(shù)和上傳配置參數(shù)至本地配置文件。
在步驟S305中,通過分叉函數(shù)創(chuàng)建元數(shù)據(jù)服務(wù)進程的子進程。
在步驟S306中,控制該子進程從本地配置文件中獲取輸出配置參數(shù)。
在步驟S307中,判斷當(dāng)前未上傳的臨時文件的個數(shù)是否達(dá)到預(yù)設(shè)閾值。當(dāng)未上傳的文件個數(shù)未達(dá)到預(yù)設(shè)閾值時,執(zhí)行步驟S308;當(dāng)未上傳的文件個數(shù)達(dá)到預(yù)設(shè)閾值時,執(zhí)行步驟S309。
在步驟S308中,控制該子進程進入等待狀態(tài),以等待未上傳的臨時文件被上傳完畢。
在步驟S309中,將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件。
在步驟S310中,當(dāng)臨時文件的大小到達(dá)了某個閾值或者該輸出元數(shù)據(jù)的任務(wù)執(zhí)行完成時,將臨時文件命名為服務(wù)器上傳進程可識別的文件名,以等待服務(wù)器上傳進程將輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)。
步驟S305通過分叉函數(shù)創(chuàng)建元數(shù)據(jù)服務(wù)進程的子進程之后,元數(shù)據(jù)服務(wù)器在控制該子進程輸出元數(shù)據(jù)時,還要并行的檢測該子進程是否出現(xiàn)死鎖狀態(tài),包括以下相關(guān)步驟。
在步驟S311中,判斷子進程是否進入死鎖狀態(tài)。當(dāng)子進程進入死鎖狀態(tài)時,執(zhí)行步驟S312;當(dāng)子進程未進入死鎖狀態(tài)時,繼續(xù)執(zhí)行步驟S311。
在步驟S312中,殺死子進程并標(biāo)記本次輸出任務(wù)執(zhí)行失敗。
本申請實施例中元數(shù)據(jù)服務(wù)進程執(zhí)行的元數(shù)據(jù)輸出過程,與服務(wù)器上傳進程執(zhí)行的元數(shù)據(jù)上傳過程是并行的。元數(shù)據(jù)服務(wù)器每隔預(yù)設(shè)時長啟動一次服務(wù)器上傳進程,元數(shù)據(jù)上傳過程包括以下步驟。
在步驟S313中,打開位于本地磁盤的服務(wù)器上傳進程的執(zhí)行文件。
在步驟S314中,判斷該執(zhí)行文件是否被成功打開。當(dāng)該執(zhí)行文件打開不成功時,返回步驟S313;當(dāng)該執(zhí)行文件被成功打開時,執(zhí)行步驟S315。
在步驟S315中,根據(jù)本地配置文件判斷是否有任務(wù)在運行。當(dāng)判斷出沒有任務(wù)在運行時,執(zhí)行步驟S316;當(dāng)判斷出有任務(wù)在運行時,執(zhí)行步驟S317。
在步驟S316中,關(guān)閉服務(wù)器上傳進程。
在步驟S317中,將輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)的臨時目錄。
在步驟S318中,判斷子進程輸出元數(shù)據(jù)的任務(wù)是否已完成。當(dāng)子進程輸出元數(shù)據(jù)的任務(wù)已完成時,執(zhí)行步驟S319;當(dāng)子進程輸出元數(shù)據(jù)的任務(wù)未完成時,返回步驟S317。
在步驟S319中,將本次上傳設(shè)置為本任務(wù)的最后一次上傳。
在步驟S320中,當(dāng)輸出的元數(shù)據(jù)被完整的上傳完畢時,將臨時目錄重命名為目標(biāo)目錄,并標(biāo)記本次上傳已完成。
在輸出元數(shù)據(jù)的同時異步并發(fā)上傳該輸出的元數(shù)據(jù)到分布式存儲系統(tǒng),及時回收內(nèi)存,以達(dá)到不限量的元數(shù)據(jù)輸出并減少網(wǎng)絡(luò)帶寬爭搶。
圖7是本申請實施例提供的一種元數(shù)據(jù)輸出方法,適用于客戶端設(shè)備,包括以下步驟。
在步驟S40中,配置元數(shù)據(jù)的輸出配置參數(shù)。
客戶端計算機根據(jù)用戶操作配置元數(shù)據(jù)的輸出配置參數(shù),包括輸出目標(biāo)、輸出格式和輸出內(nèi)容存放路徑。
在步驟S41中,向元數(shù)據(jù)服務(wù)器發(fā)起對元數(shù)據(jù)服務(wù)進程的調(diào)用,以通過分叉函數(shù)創(chuàng)建出元數(shù)據(jù)服務(wù)進程的子進程,由子進程根據(jù)所述輸出配置函數(shù)輸出相應(yīng)的元數(shù)據(jù)。
客戶端計算機向元數(shù)據(jù)服務(wù)器發(fā)起對元數(shù)據(jù)服務(wù)進程的調(diào)用,該調(diào)用包括步驟S40中配置的輸出配置參數(shù)。通過該調(diào)用使元數(shù)據(jù)服務(wù)器利用分叉函數(shù)創(chuàng)建出元數(shù)據(jù)服務(wù)進程的子進程,由子進程根據(jù)所述輸出配置函數(shù)輸出相應(yīng)的元數(shù)據(jù)。
該調(diào)用可以是遠(yuǎn)程過程調(diào)用,從而在由多個集群組成的分布式存儲系統(tǒng)中,實現(xiàn)對元數(shù)據(jù)輸出的遠(yuǎn)程集中配置和管理,多個集群可以并行操作,降低系統(tǒng)維護難度和成本,提高效率。
在一個實施例中,步驟S40在配置元數(shù)據(jù)的輸出配置參數(shù)的同時,還配置元數(shù)據(jù)的上傳配置參數(shù)。上傳配置參數(shù)包括上傳速率、目標(biāo)目錄和壓縮參數(shù)。使元數(shù)據(jù)服務(wù)器在輸出相應(yīng)的元數(shù)據(jù)后,根據(jù)目標(biāo)目錄將輸出的元數(shù)據(jù)上傳到分布式存儲系統(tǒng)。
圖8是本申請實施例提供的一種元數(shù)據(jù)輸出方法,適用于客戶端設(shè)備,包括以下步驟。
在步驟S50中,配置元數(shù)據(jù)的輸出配置參數(shù)和上傳配置參數(shù)。
在步驟S51中,向元數(shù)據(jù)服務(wù)器發(fā)起對元數(shù)據(jù)服務(wù)進程的調(diào)用,以通過分叉函數(shù)創(chuàng)建出所述元數(shù)據(jù)服務(wù)進程的子進程,由所述子進程根據(jù)所述輸出 配置函數(shù)輸出相應(yīng)的元數(shù)據(jù),并由元數(shù)據(jù)服務(wù)器的服務(wù)器上傳進程將輸出的元數(shù)據(jù)上傳到分布式存儲系統(tǒng)。
在步驟S52中,發(fā)送進度查詢請求至元數(shù)據(jù)服務(wù)器。
在配置元數(shù)據(jù)的輸出配置參數(shù)和上傳配置參數(shù)并向元數(shù)據(jù)服務(wù)器發(fā)起調(diào)用后,客戶端計算機生成相應(yīng)的配置標(biāo)識??筛鶕?jù)該配置標(biāo)識向元數(shù)據(jù)服務(wù)器發(fā)送進度查詢請求,以查詢相應(yīng)的配置任務(wù)的執(zhí)行進度。發(fā)送的進度查詢請求也可以不包含該配置標(biāo)識,此時則默認(rèn)查詢當(dāng)前正在執(zhí)行的配置任務(wù)的進度或者最后一個執(zhí)行完成任務(wù)狀態(tài)。
在步驟S53中,接收元數(shù)據(jù)服務(wù)器返回的任務(wù)狀態(tài)信息。
通過該任務(wù)狀態(tài)信息,可查詢到該配置任務(wù)的輸出配置參數(shù)、上傳配置參數(shù)和任務(wù)進度狀態(tài)。如果是正在執(zhí)行中的配置任務(wù),該任務(wù)進度狀態(tài)包括“執(zhí)行中”和“等待中”;如果是已經(jīng)執(zhí)行完成的配置任務(wù),該任務(wù)進度狀態(tài)包括“執(zhí)行失敗”和“執(zhí)行失敗”,其中該任務(wù)進度狀態(tài)為“執(zhí)行失敗”時還能夠查詢到造成執(zhí)行失敗的原因。
圖9是本申請實施例提供的一種元數(shù)據(jù)服務(wù)器,所述元數(shù)據(jù)服務(wù)器包括:
接收模塊60,用于接收到對元數(shù)據(jù)服務(wù)(MetaServer)進程的調(diào)用,調(diào)用包括元數(shù)據(jù)的輸出配置參數(shù);
創(chuàng)建模塊61,用于通過分叉(fork)函數(shù)創(chuàng)建元數(shù)據(jù)服務(wù)進程的子進程;
處理模塊62,用于控制子進程根據(jù)輸出配置參數(shù)輸出相應(yīng)的元數(shù)據(jù)。
該接收模塊60包括:
接收子模塊,用于接收到來自客戶端的對元數(shù)據(jù)服務(wù)進程的遠(yuǎn)程過程調(diào)用。
在一個實施例中,該接收模塊60包括:
第一判斷子模塊,用于判斷上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程是否已完成執(zhí)行;
保存子模塊,用于當(dāng)上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程已完成執(zhí)行 時,保存輸出配置參數(shù)至本地配置文件;
返回子模塊,用于當(dāng)上一次創(chuàng)建的元數(shù)據(jù)服務(wù)進程的子進程未完成執(zhí)行時,返回元數(shù)據(jù)服務(wù)進程當(dāng)前繁忙的消息。
在一個實施例中,該處理模塊62包括:
寫入子模塊,用于控制子進程根據(jù)輸出配置參數(shù)將輸出的元數(shù)據(jù)寫入本地內(nèi)存的臨時文件;
標(biāo)記子模塊,用于當(dāng)元數(shù)據(jù)輸出完畢時,標(biāo)記子進程已完成執(zhí)行。
在一個實施例中,輸出配置參數(shù)包括多個輸出對象。
在一個實施例中,該處理模塊62包括:
第二判斷子模塊,用于判斷子進程是否出現(xiàn)死鎖狀態(tài);
第一處理子模塊,用于當(dāng)子進程出現(xiàn)死鎖狀態(tài)時,殺死子進程。
在一個實施例中,該處理模塊62還包括:
第三判斷子模塊,用于判斷未上傳的臨時文件的個數(shù)是否達(dá)到預(yù)設(shè)閾值;
第二處理子模塊,用于當(dāng)未上傳的臨時文件的個數(shù)達(dá)到預(yù)設(shè)閾值時,進入等待狀態(tài),以等待未上傳的臨時文件被上傳完畢。
在一個實施例中,該調(diào)用還包括元數(shù)據(jù)的上傳配置參數(shù);元數(shù)據(jù)服務(wù)器還包括:
上傳模塊,用于根據(jù)上傳配置參數(shù)將輸出的元數(shù)據(jù)上傳至分布式存儲系統(tǒng)。
上傳配置參數(shù)包括上傳速率和目標(biāo)目錄,其中,上傳速率用于控制上傳過程的數(shù)據(jù)傳輸速率;該上傳模塊包括:
上傳子模塊,用于上傳輸出的元數(shù)據(jù)至分布式存儲系統(tǒng)的臨時目錄;
重命名子模塊,用于當(dāng)輸出的元數(shù)據(jù)被完整的上傳完畢時,將臨時目錄重命名為目標(biāo)目錄,并標(biāo)記本次任務(wù)已完成。
圖10是本申請實施例提供的一種元數(shù)據(jù)輸出客戶端,包括:
第一配置模塊70,用于配置元數(shù)據(jù)的輸出配置參數(shù);
調(diào)用模塊71,用于向元數(shù)據(jù)服務(wù)器發(fā)起對元數(shù)據(jù)服務(wù)進程的調(diào)用,以通過分叉函數(shù)創(chuàng)建出元數(shù)據(jù)服務(wù)進程的子進程,由子進程根據(jù)輸出配置函數(shù)輸出相應(yīng)的元數(shù)據(jù)。
在一個實施例中,該客戶端還包括:
第二配置模塊,用于配置元數(shù)據(jù)的上傳配置參數(shù)。
在一個實施例中,該客戶端還包括:
查詢模塊,用于發(fā)送進度查詢請求至元數(shù)據(jù)服務(wù)器;
接收模塊,用于接收元數(shù)據(jù)服務(wù)器返回的任務(wù)狀態(tài)信息。
下面結(jié)合應(yīng)用場景對本申請實施例做進一步說明。
本申請實施例提供的元數(shù)據(jù)輸出方法、服務(wù)器和客戶端可以用于互聯(lián)網(wǎng)企業(yè)的云計算平臺,為云計算平臺的分布式文件系統(tǒng)提供支持。對于分布在不同地區(qū)的多個存儲集群,可通過客戶端對各個集群的元數(shù)據(jù)服務(wù)器進行集中管理,從而控制各個集群的元數(shù)據(jù)輸出。在分布式文件系統(tǒng)中,文件的元數(shù)據(jù)通常用于記錄相應(yīng)文件屬性信息,例如文件的存儲路徑、占用空間、訪問次數(shù)、讀寫操作次數(shù)等等,輸出這些元數(shù)據(jù)使云計算平臺能夠?qū)τ脩粜袨楹驮撔袨楫a(chǎn)生的文件進行分析。例如,通過客戶端計算機配置元數(shù)據(jù)的輸出配置參數(shù)和上傳配置參數(shù),將分布式文件系統(tǒng)中與某網(wǎng)站的用戶文件的對應(yīng)的元數(shù)據(jù)輸出并上傳到指定的目錄,并每隔預(yù)設(shè)周期(例如每天或者每周)完成一次輸出和上傳。從上傳的目標(biāo)目錄中獲取與不同時間點對應(yīng)的元數(shù)據(jù),利用不同時間點的元數(shù)據(jù)分析該網(wǎng)站的用戶文件的變化,進一步分析用戶行為變化和趨勢,為云計算平臺提供可靠的元數(shù)據(jù)支持。
此外,在ODPS(Open Data Processing Service,開放數(shù)據(jù)處理服務(wù))計算平臺中也可以應(yīng)用本申請實施例提供的元數(shù)據(jù)輸出方法、服務(wù)器和客戶端,ODPS提供針對TB/PB級數(shù)據(jù)、實時性要求不高的分布式處理能力,應(yīng)用于數(shù)據(jù)分析、挖掘、商業(yè)智能等領(lǐng)域,使用戶可以將更多的時間來專注于用戶數(shù)據(jù)挖掘和分析。利用本申請實施例提供的元數(shù)據(jù)輸出方法,用戶可以根據(jù)實際的用戶數(shù)據(jù)分析需求配置不同的輸出參數(shù)。利用輸出的元數(shù)據(jù)來分 析用戶文件的變化,用戶文件每天的增加量,各個集群的用戶文件存儲情況,已確定是否需要對相應(yīng)的集群進行擴容。根據(jù)輸出的元數(shù)據(jù)分析用戶文件的訪問量,已卻確定需要將已成為“熱點”數(shù)據(jù)的用戶文件進行遷移等等;或者利用輸出的元數(shù)據(jù)分析不同特征用戶的分布情況。本申請實施例提供的元數(shù)據(jù)輸出方法是為互聯(lián)網(wǎng)企業(yè)推出的云計算平臺以及大數(shù)據(jù)服務(wù)提供支持的基礎(chǔ)性方案,為多集群的集中管理以及元數(shù)據(jù)需要頻繁輸出的場景帶來了極大便利,提高了云計算平臺以及大數(shù)據(jù)服務(wù)在用戶數(shù)據(jù)挖掘和分析方面的效率。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
如在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會用不同名詞來稱呼同一個組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。如在通篇說明書及權(quán)利要求當(dāng)中所提及的“包含”為一開放式用語,故應(yīng)解釋成“包含但不限定于”?!按笾隆笔侵冈诳山邮盏恼`差范圍內(nèi),本領(lǐng)域技術(shù)人員能夠在一定誤差范圍內(nèi)解決所述技術(shù)問題, 基本達(dá)到所述技術(shù)效果。此外,“耦接”一詞在此包含任何直接及間接的電性耦接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表所述第一裝置可直接電性耦接于所述第二裝置,或通過其他裝置或耦接手段間接地電性耦接至所述第二裝置。說明書后續(xù)描述為實施本發(fā)明的較佳實施方式,然所述描述乃以說明本發(fā)明的一般原則為目的,并非用以限定本發(fā)明的范圍。本發(fā)明的保護范圍當(dāng)視所附權(quán)利要求所界定者為準(zhǔn)。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的商品或者系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種商品或者系統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的商品或者系統(tǒng)中還存在另外的相同要素。
上述說明示出并描述了本發(fā)明的若干優(yōu)選實施例,但如前所述,應(yīng)當(dāng)理解本發(fā)明并非局限于本文所披露的形式,不應(yīng)看作是對其他實施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進行改動。而本領(lǐng)域人員所進行的改動和變化不脫離本發(fā)明的精神和范圍,則都應(yīng)在本發(fā)明所附權(quán)利要求的保護范圍內(nèi)。