本發(fā)明屬于數(shù)據(jù)讀寫技術(shù)領(lǐng)域,尤其涉及一種基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法及存儲(chǔ)設(shè)備。
背景技術(shù):
在有冗余數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)中,冗余數(shù)據(jù)對(duì)象會(huì)在不同的存儲(chǔ)設(shè)備之間存放多份副本。但同一時(shí)刻一個(gè)數(shù)據(jù)對(duì)象的多個(gè)副本只能用于讀或者用于寫。
Quorum機(jī)制是分布式系統(tǒng)中用來保證數(shù)據(jù)冗余和最終一致性的一種投票算法。這個(gè)機(jī)制有三個(gè)關(guān)鍵值N、R和W,又可以稱為NRW機(jī)制,其中,N表示數(shù)據(jù)所具有的副本數(shù),R表示完成讀操作所需要讀取的最小副本數(shù),W表示完成寫操作所需要寫入的最小副本數(shù)。采用該機(jī)制,只需要保證R+W>N,就會(huì)提供強(qiáng)一致性的保證,因?yàn)樽x取數(shù)據(jù)的存儲(chǔ)節(jié)點(diǎn)和被同步寫入的存儲(chǔ)節(jié)點(diǎn)是有重疊的。例如:N=5,W=3,R=3,表示系統(tǒng)中數(shù)據(jù)有5個(gè)不同的副本,對(duì)于寫操作,需要等待至少3個(gè)副本完成該寫操作,系統(tǒng)才會(huì)返回寫成功的狀態(tài);對(duì)于讀操作,需要至少3個(gè)副本完成讀操作,系統(tǒng)才會(huì)返回讀成功的狀態(tài)。
理論上,讀取分布式系統(tǒng)中的數(shù)據(jù)對(duì)象時(shí),可以只讀取其中的一個(gè)副本,但是,采用Quorum機(jī)制,讀操作需要成功讀取的副本數(shù)與寫操作需要寫成功的副本數(shù)相同。而且,為了保證盡快獲得要求的讀成功副本數(shù),通常需要向所有副本所在的存儲(chǔ)節(jié)點(diǎn)發(fā)送讀IO請(qǐng)求,因此,讀IO請(qǐng)求比較多,讀成功的時(shí)延增大,大大降低了讀性能。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明在于提供一種基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法及存儲(chǔ)設(shè)備,可以解決現(xiàn)有技術(shù)存在的讀操作需要讀成功的副本數(shù)較多、讀成功時(shí)延大、讀性能差的技術(shù)問題。
第一方面,本發(fā)明提供一種基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法,讀取數(shù)據(jù)時(shí),主存儲(chǔ)節(jié)點(diǎn)接收讀IO請(qǐng)求,接著,主存儲(chǔ)節(jié)點(diǎn)判斷所述主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象是否可信;如果主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的所述目標(biāo)數(shù)據(jù)對(duì)象可信,則只需讀取主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象,并將該目標(biāo)數(shù)據(jù)對(duì)象直接發(fā)送給發(fā)起該讀IO請(qǐng)求的發(fā)起端,不需要再?gòu)闹鞔鎯?chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的其它存儲(chǔ)節(jié)點(diǎn)上讀取目標(biāo)數(shù)據(jù)對(duì)象。該讀IO請(qǐng)求用于請(qǐng)求讀取主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)上的目標(biāo)數(shù)據(jù)對(duì)象,每個(gè)所述邏輯分區(qū)包括多個(gè)存儲(chǔ)節(jié)點(diǎn),每個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)有數(shù)據(jù)對(duì)象,且每個(gè)邏輯分區(qū)中有一個(gè)存儲(chǔ)節(jié)點(diǎn)是主存儲(chǔ)節(jié)點(diǎn)。
第一方面提供的該數(shù)據(jù)處理方法的有益效果在于:在讀取數(shù)據(jù)時(shí),當(dāng)主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象可信時(shí),只需從主存儲(chǔ)節(jié)點(diǎn)中讀取目標(biāo)數(shù)據(jù)對(duì)象,并直接將讀取的目標(biāo)數(shù)據(jù)對(duì)象返回給發(fā)起讀IO請(qǐng)求的發(fā)起端,不需要再?gòu)漠?dāng)前邏輯分區(qū)的其它存儲(chǔ)節(jié)點(diǎn)上讀取數(shù)據(jù)。與Quorum機(jī)制相比,大大減少了讀操作的副本數(shù)量,從而減少了讀操作的時(shí)延,提高了讀操作的性能。
在第一種可能的實(shí)現(xiàn)方式中,所述主存儲(chǔ)節(jié)點(diǎn)判斷所述主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象是否可信,包括:判斷所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài),所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)包括可信狀態(tài)和不可信狀態(tài);如果所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)為可信狀態(tài),則確定所述主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象可信;如果所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)為不可信狀態(tài),則獲取所述主存儲(chǔ)節(jié)點(diǎn)上的黑名單,并判斷所述黑名單是否完整,所述黑名單中存儲(chǔ)所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象;如果所述黑名單不完整,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信;如果所述黑名單完整,則判斷所述黑名單中是否包含所述目標(biāo)數(shù)據(jù)對(duì)象,如果包含所述目標(biāo)數(shù)據(jù)對(duì)象,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信;如果不包含所述目標(biāo)數(shù)據(jù)對(duì)象,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信。
在第二種可能的實(shí)現(xiàn)方式中,所述方法還包括:所述主存儲(chǔ)節(jié)點(diǎn)接收主存儲(chǔ)節(jié)點(diǎn)確定消息,所述主存儲(chǔ)節(jié)點(diǎn)確定消息包含主存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)信息;當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)確定消息確定自身為主存儲(chǔ)節(jié)點(diǎn)時(shí),向所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)的全部存儲(chǔ)節(jié)點(diǎn)收集對(duì)象降級(jí)寫日志,并標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為不可信狀態(tài);所述對(duì)象降級(jí)寫日志用于記錄數(shù)據(jù)對(duì)象寫失敗的存儲(chǔ)節(jié)點(diǎn)的日志,且記錄在所述邏輯分區(qū)內(nèi)所述數(shù)據(jù)對(duì)象寫成功的全部存儲(chǔ)節(jié)點(diǎn)上;如果所述對(duì)象降級(jí)寫日志中包含所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象,則從所述對(duì)象降級(jí)寫日志中,選取所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的全部數(shù)據(jù)對(duì)象獲得黑名單;如果所述對(duì)象降級(jí)寫日志中不包含所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象,則標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為可信狀態(tài)。
在第三種可能的實(shí)現(xiàn)方式中,所述判斷所述黑名單是否完整,包括:所述主存儲(chǔ)節(jié)點(diǎn)獲取所述黑名單的狀態(tài),所述黑名單的狀態(tài)包括完成狀態(tài)和未完成狀態(tài),所述主存儲(chǔ)節(jié)點(diǎn)收集所述對(duì)象降級(jí)寫日志的過程中,所述黑名單為未完成狀態(tài),直到收集完所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)所有存儲(chǔ)節(jié)點(diǎn)的對(duì)象降級(jí)寫日志,所述黑名單的狀態(tài)為完成狀態(tài);當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)獲得的所述狀態(tài)為完成狀態(tài)時(shí),確定所述黑名單完整;當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)獲得的所述狀態(tài)為未完成狀態(tài)時(shí),確定所述黑名單不完整。
在第四種可能的實(shí)現(xiàn)方式中,若所述黑名單中包含在所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象,則所述方法還包括:所述主存儲(chǔ)節(jié)點(diǎn)逐個(gè)重構(gòu)所述黑名單中寫失敗的數(shù)據(jù)對(duì)象,并從所述黑名單中刪除重構(gòu)成功的數(shù)據(jù)對(duì)象所對(duì)應(yīng)的降級(jí)寫日志;當(dāng)所述黑名單中的全部數(shù)據(jù)對(duì)象都重構(gòu)成功后,標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為可信狀態(tài)。
第二方面,本發(fā)明提供一種基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法,包括:主存儲(chǔ)節(jié)點(diǎn)接收寫IO請(qǐng)求,所述寫IO請(qǐng)求用于請(qǐng)求向所述主存儲(chǔ)節(jié)點(diǎn)所在的邏輯分區(qū)寫入目標(biāo)數(shù)據(jù)對(duì)象,所述邏輯分區(qū)包括多個(gè)存儲(chǔ)節(jié)點(diǎn),每個(gè)邏輯分區(qū)中有一個(gè)存儲(chǔ)節(jié)點(diǎn)是主存儲(chǔ)節(jié)點(diǎn);當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)寫入所述目標(biāo)數(shù)據(jù)對(duì)象失敗時(shí),直接向所述寫IO請(qǐng)求的發(fā)起端返回寫失敗響應(yīng)消息;當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)寫入所述目標(biāo)數(shù)據(jù)對(duì)象成功時(shí),將所述目標(biāo)數(shù)據(jù)對(duì)象復(fù)制到所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的其它存儲(chǔ)節(jié)點(diǎn)上;當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)接收到所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)預(yù)設(shè)數(shù)量個(gè)存儲(chǔ)節(jié)點(diǎn)返回的寫成功響應(yīng)消息時(shí),向所述寫IO請(qǐng)求的發(fā)起端返回寫成功響應(yīng)消息,所述預(yù)設(shè)數(shù)量根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的存儲(chǔ)節(jié)點(diǎn)數(shù)量及Quorum機(jī)制確定。
第二方面提供的基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法,在寫數(shù)據(jù)時(shí),如果主存儲(chǔ)節(jié)點(diǎn)寫數(shù)據(jù)失敗,則直接向?qū)慖O請(qǐng)求的發(fā)起端返回寫失敗的響應(yīng)消息。如果主存儲(chǔ)節(jié)點(diǎn)寫成功,則還需要在當(dāng)前邏輯分區(qū)的預(yù)設(shè)數(shù)量個(gè)其它存儲(chǔ)節(jié)點(diǎn)上寫成功才向發(fā)起寫IO請(qǐng)求的發(fā)起端返回寫成功的響應(yīng)消息,這樣,才能保證當(dāng)前主存儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)對(duì)象是可信數(shù)據(jù)。
第三方面,本發(fā)明提供一種存儲(chǔ)設(shè)備,所述存儲(chǔ)設(shè)備是分布式存儲(chǔ)系統(tǒng)中一個(gè)邏輯分區(qū)中的主存儲(chǔ)節(jié)點(diǎn),所述存儲(chǔ)設(shè)備包括:第一接收模塊,用于接收讀IO請(qǐng)求,所述讀IO請(qǐng)求用于請(qǐng)求讀取所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)上的目標(biāo)數(shù)據(jù)對(duì)象;判斷模塊,用于判斷所述存儲(chǔ)設(shè)備中存儲(chǔ)的所述目標(biāo)數(shù)據(jù)對(duì)象是否可信;讀取模塊,用于當(dāng)所述判斷模塊確定所述目標(biāo)數(shù)據(jù)對(duì)象可信,則讀取所述存儲(chǔ)設(shè)備中的所述目標(biāo)數(shù)據(jù)對(duì)象;發(fā)送模塊,用于將所述讀取模塊讀取的所述目標(biāo)數(shù)據(jù)對(duì)象發(fā)送給所述讀IO請(qǐng)求的發(fā)起端。
在第三方面的第一種可能的實(shí)現(xiàn)方式中,所述判斷模塊包括:第一判斷子模塊,用于判斷所述存儲(chǔ)設(shè)備的狀態(tài),所述存儲(chǔ)設(shè)備的狀態(tài)包括可信狀態(tài)和不可信狀態(tài);如果所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)為可信狀態(tài),則確定所述主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象可信;第二判斷子模塊,用于當(dāng)所述第一判斷子模塊確定所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)為不可信狀態(tài)時(shí),獲取所述主存儲(chǔ)節(jié)點(diǎn)上的黑名單,并判斷所述黑名單是否完整,所述黑名單中存儲(chǔ)所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象;如果所述黑名單不完整,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信;第三判斷子模塊,用于當(dāng)所述第二判斷子模塊確定所述黑名單完整時(shí),判斷所述黑名單中是否包含所述目標(biāo)數(shù)據(jù)對(duì)象,如果包含所述目標(biāo)數(shù)據(jù)對(duì)象,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信;如果不包含所述目標(biāo)數(shù)據(jù)對(duì)象,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信。
在第三方面的第二種可能的實(shí)現(xiàn)方式中,所述存儲(chǔ)設(shè)備還包括:第二接收模塊,用于接收主存儲(chǔ)節(jié)點(diǎn)確定消息,并根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)確定消息確定自身為主存儲(chǔ)節(jié)點(diǎn),所述主存儲(chǔ)節(jié)點(diǎn)確定消息包含主存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)信息;收集模塊,用于向所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)的全部存儲(chǔ)節(jié)點(diǎn)收集對(duì)象降級(jí)寫日志,并標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為不可信狀態(tài);所述對(duì)象降級(jí)寫日志用于記錄數(shù)據(jù)對(duì)象寫失敗的存儲(chǔ)節(jié)點(diǎn)的日志,且記錄在所述邏輯分區(qū)內(nèi)所述數(shù)據(jù)對(duì)象寫成功的全部存儲(chǔ)節(jié)點(diǎn)上;黑名單構(gòu)建模塊,用于從所述對(duì)象降級(jí)寫日志中,選取所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的全部數(shù)據(jù)對(duì)象獲得黑名單;可信標(biāo)記模塊,用于當(dāng)所述對(duì)象降級(jí)寫日志中不包含所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象,則標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為可信狀態(tài)。
在第三方面的第三種可能的實(shí)現(xiàn)方式中,所述第二判斷子模塊具體用于:
獲取所述黑名單的狀態(tài),所述黑名單的狀態(tài)包括完成狀態(tài)和未完成狀態(tài),所述主存儲(chǔ)節(jié)點(diǎn)收集所述對(duì)象降級(jí)寫日志的過程中,所述黑名單為未完成狀態(tài),直到收集完所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)所有存儲(chǔ)節(jié)點(diǎn)的對(duì)象降級(jí)寫日志,所述黑名單的狀態(tài)為完成狀態(tài);當(dāng)所述黑名單的狀態(tài)為完成狀態(tài)時(shí),確定所述黑名單完整;當(dāng)所述黑名單的狀態(tài)為未完成狀態(tài)時(shí),確定所述黑名單不完整。
在第三方面的第四種可能的實(shí)現(xiàn)方式中,若所述黑名單中包含在所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象,則所述存儲(chǔ)設(shè)備還包括:數(shù)據(jù)重構(gòu)模塊,用于逐個(gè)重構(gòu)所述黑名單中寫失敗的數(shù)據(jù)對(duì)象,并從所述黑名單中刪除重構(gòu)成功的數(shù)據(jù)對(duì)象所對(duì)應(yīng)的降級(jí)寫日志;狀態(tài)修改模塊,用于當(dāng)所述黑名單中的全部數(shù)據(jù)對(duì)象都重構(gòu)成功后,標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為可信狀態(tài)。
在第三方面的第五種可能的實(shí)現(xiàn)方式中,還包括:第三接收模塊,用于接收寫IO請(qǐng)求,所述寫IO請(qǐng)求用于請(qǐng)求向所述主存儲(chǔ)節(jié)點(diǎn)所在的邏輯分區(qū)寫入目標(biāo)數(shù)據(jù)對(duì)象;寫數(shù)據(jù)模塊,用于根據(jù)所述寫IO請(qǐng)求將所述目標(biāo)數(shù)據(jù)對(duì)象寫入所述存儲(chǔ)設(shè)備的相應(yīng)存儲(chǔ)空間中;第一返回模塊,用于當(dāng)所述目標(biāo)數(shù)據(jù)對(duì)象寫入失敗時(shí),直接向所述寫IO請(qǐng)求的發(fā)起端返回寫失敗響應(yīng)消息;
復(fù)制模塊,用于當(dāng)所述目標(biāo)數(shù)據(jù)對(duì)象寫入成功時(shí),將所述目標(biāo)數(shù)據(jù)對(duì)象復(fù)制到所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的其它存儲(chǔ)節(jié)點(diǎn)上;第二返回模塊,用于當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)接收到所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)預(yù)設(shè)數(shù)量個(gè)存儲(chǔ)節(jié)點(diǎn)返回的寫成功響應(yīng)消息時(shí),向所述寫IO請(qǐng)求的發(fā)起端返回寫成功響應(yīng)消息,所述預(yù)設(shè)數(shù)量根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的存儲(chǔ)節(jié)點(diǎn)數(shù)量及Quorum機(jī)制確定。
第四方面,本發(fā)明提供一種存儲(chǔ)設(shè)備,所述存儲(chǔ)設(shè)備是分布式存儲(chǔ)系統(tǒng)中一個(gè)邏輯分區(qū)中的主存儲(chǔ)節(jié)點(diǎn),所述存儲(chǔ)設(shè)備包括:接收器,用于讀IO請(qǐng)求,所述讀IO請(qǐng)求用于請(qǐng)求讀取所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)上的目標(biāo)數(shù)據(jù)對(duì)象;處理器,用于判斷所述存儲(chǔ)設(shè)備中存儲(chǔ)的所述目標(biāo)數(shù)據(jù)對(duì)象是否可信;如果確定所述目標(biāo)數(shù)據(jù)對(duì)象可信,則讀取所述存儲(chǔ)設(shè)備中的所述目標(biāo)數(shù)據(jù)對(duì)象;發(fā)送器,用于將讀取的所述目標(biāo)數(shù)據(jù)對(duì)象發(fā)送給所述讀IO請(qǐng)求的發(fā)起端。
在第四方面的第一種可能的實(shí)現(xiàn)方式中,所述接收器,還用于接收寫IO請(qǐng)求,所述寫IO請(qǐng)求用于請(qǐng)求向所述主存儲(chǔ)節(jié)點(diǎn)所在的邏輯分區(qū)寫入目標(biāo)數(shù)據(jù)對(duì)象;所述處理器,還用于根據(jù)所述寫IO請(qǐng)求將所述目標(biāo)數(shù)據(jù)對(duì)象寫入所述存儲(chǔ)設(shè)備的相應(yīng)存儲(chǔ)空間中,如果所述目標(biāo)數(shù)據(jù)對(duì)象寫入失敗時(shí),直接向所述寫IO請(qǐng)求的發(fā)起端返回寫失敗響應(yīng)消息;如果所述目標(biāo)數(shù)據(jù)對(duì)象寫入成功,將所述目標(biāo)數(shù)據(jù)對(duì)象復(fù)制到所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的其它存儲(chǔ)節(jié)點(diǎn)上,并接收所述其它存儲(chǔ)節(jié)點(diǎn)返回的寫成功響應(yīng)消息;發(fā)送器,還用于當(dāng)接收到所述其它存儲(chǔ)節(jié)點(diǎn)返回的預(yù)設(shè)數(shù)量個(gè)寫成功響應(yīng)消息時(shí),向所述寫IO請(qǐng)求的發(fā)起端返回寫成功響應(yīng)消息,所述預(yù)設(shè)數(shù)量根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的存儲(chǔ)節(jié)點(diǎn)數(shù)量及Quorum機(jī)制確定。
本發(fā)明提供的基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法,首先,對(duì)于分布式存儲(chǔ)系統(tǒng)中的任意一個(gè)邏輯分區(qū)(Partition,PT)選取一個(gè)存儲(chǔ)節(jié)點(diǎn)作為主存儲(chǔ)節(jié)點(diǎn)。主存儲(chǔ)節(jié)點(diǎn)接收到讀IO請(qǐng)求,讀IO請(qǐng)求用于讀取所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)中的目標(biāo)數(shù)據(jù)對(duì)象。主存儲(chǔ)節(jié)點(diǎn)接收到讀IO請(qǐng)求后,先判斷主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象是否可信,如果可信,則只從主存儲(chǔ)節(jié)點(diǎn)上讀取目標(biāo)數(shù)據(jù)對(duì)象并返回給發(fā)送讀IO請(qǐng)求的發(fā)起端。采用該方法,在讀取數(shù)據(jù)時(shí),如果主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信只需從主存儲(chǔ)節(jié)點(diǎn)上讀取,不需要從其它存儲(chǔ)節(jié)點(diǎn)上讀取目標(biāo)數(shù)據(jù)對(duì)象,與Quorum機(jī)制相比,大大減少了讀操作的IO請(qǐng)求數(shù)量,從而減少了讀操作的時(shí)延,提高了讀操作的性能。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1是本發(fā)明實(shí)施例一種分布式存儲(chǔ)系統(tǒng)的示意圖;
圖2是本發(fā)明實(shí)施例一種邏輯分區(qū)的示意圖;
圖3是本發(fā)明實(shí)施例一種基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法的流程示意圖;
圖4是本發(fā)明實(shí)施例一種主存儲(chǔ)節(jié)點(diǎn)構(gòu)建黑名單的方法流程示意圖;
圖5是本發(fā)明實(shí)施例提供的一種主存儲(chǔ)節(jié)點(diǎn)判斷自身存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象是否可信的流程示意圖;
圖6是本發(fā)明實(shí)施例另一種基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法的流程圖;
圖7是本發(fā)明實(shí)施例一種存儲(chǔ)設(shè)備的框圖;
圖8是本發(fā)明實(shí)施例一種判斷模塊的框圖;
圖9是本發(fā)明實(shí)施例另一種存儲(chǔ)設(shè)備的框圖;
圖10是本發(fā)明實(shí)施例又一種存儲(chǔ)設(shè)備的框圖;
圖11是本發(fā)明實(shí)施例又一種存儲(chǔ)設(shè)備的框圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1是本發(fā)明實(shí)施例一種分布式存儲(chǔ)系統(tǒng)的示意圖,如圖1所示,一個(gè)分布式存儲(chǔ)系統(tǒng)包括多個(gè)存儲(chǔ)節(jié)點(diǎn)(或稱為節(jié)點(diǎn),例如,存儲(chǔ)設(shè)備或硬盤)、數(shù)據(jù)集群服務(wù)器和集群管理模塊;其中,節(jié)點(diǎn)1~節(jié)點(diǎn)N分別表示不同的存儲(chǔ)節(jié)點(diǎn)的硬盤分區(qū)。
在本發(fā)明的一些實(shí)施例中,分布式存儲(chǔ)系統(tǒng)中存儲(chǔ)的數(shù)據(jù)是元數(shù)據(jù),則所述數(shù)據(jù)集群服務(wù)器可以為MDS(MetaData Service,元數(shù)據(jù)服務(wù)器);當(dāng)然,在其它實(shí)施例中,分布式存儲(chǔ)系統(tǒng)中存儲(chǔ)的數(shù)據(jù)可以是其它類型的數(shù)據(jù)。
數(shù)據(jù)集群服務(wù)器用于管理數(shù)據(jù)對(duì)象,例如,接收IO發(fā)起端發(fā)送的IO請(qǐng)求,根據(jù)該IO請(qǐng)求確定該IO請(qǐng)求所請(qǐng)求讀/寫操作的邏輯分區(qū),然后,將該IO請(qǐng)求發(fā)送給對(duì)應(yīng)邏輯分區(qū)中的主存儲(chǔ)節(jié)點(diǎn),從而完成所述IO請(qǐng)求對(duì)應(yīng)的讀/寫操作。
集群管理模塊用于管理存儲(chǔ)節(jié)點(diǎn)及負(fù)責(zé)PT分組等。集群管理模塊將各個(gè)存儲(chǔ)節(jié)點(diǎn)所包含的硬盤分區(qū),劃分成不同的PT,并從每一個(gè)PT中選取一個(gè)硬盤分區(qū)對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)為主存儲(chǔ)節(jié)點(diǎn)。
如圖2所示,PT1包括節(jié)點(diǎn)1~節(jié)點(diǎn)7中的硬盤分區(qū),例如,disk1~disk7,其中,disk1表示節(jié)點(diǎn)1中的硬盤分區(qū),依次類推,disk7表示節(jié)點(diǎn)7中的硬盤分區(qū)。即,PT1包括7個(gè)節(jié)點(diǎn)成員;集群管理模塊可以設(shè)定disk1為PT1的主存儲(chǔ)節(jié)點(diǎn)。
PT2包括節(jié)點(diǎn)1~節(jié)點(diǎn)7中的另一些硬盤分區(qū),如disk11~disk17,其中,disk11表示節(jié)點(diǎn)1中不同于disk1的硬盤分區(qū),依次類推,disk17表示節(jié)點(diǎn)7中不同于disk7的硬盤分區(qū)。集群管理模塊可以設(shè)定disk12為PT2的主存儲(chǔ)節(jié)點(diǎn)。
圖3是本發(fā)明實(shí)施例一種基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法的流程示意圖,本實(shí)施例以圖2所示的PT分區(qū)為例進(jìn)行說明,假設(shè)PT1分區(qū)中的主存儲(chǔ)節(jié)點(diǎn)是disk1,則數(shù)據(jù)處理方法包括以下步驟:
S110,disk1接收主存儲(chǔ)節(jié)點(diǎn)確定消息,并確定自身為當(dāng)前邏輯分區(qū)的主存儲(chǔ)節(jié)點(diǎn)。
集群管理模塊從PT1中確定一個(gè)存儲(chǔ)節(jié)點(diǎn)(例如,disk1)作為PT1分區(qū)的主存儲(chǔ)節(jié)點(diǎn),并向確定的主存儲(chǔ)節(jié)點(diǎn)(disk1)發(fā)送主存儲(chǔ)節(jié)點(diǎn)確定消息,其中,主存儲(chǔ)節(jié)點(diǎn)確定消息中攜帶主存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)信息(例如,設(shè)備唯一標(biāo)識(shí))。主存儲(chǔ)節(jié)點(diǎn)根據(jù)主存儲(chǔ)節(jié)點(diǎn)確定消息中的標(biāo)識(shí)信息確定自身為該邏輯分區(qū)的主存儲(chǔ)節(jié)點(diǎn)。
S120,disk1接收讀IO請(qǐng)求;
IO請(qǐng)求的發(fā)起端(例如,可以是PC機(jī)客戶端或智能終端客戶端等),發(fā)起端將IO請(qǐng)求發(fā)送給分布式存儲(chǔ)系統(tǒng)中的數(shù)據(jù)集群服務(wù)器,然后,由數(shù)據(jù)集群服務(wù)器將該IO請(qǐng)求發(fā)送給對(duì)應(yīng)的PT分區(qū)的主存儲(chǔ)節(jié)點(diǎn)(即,本實(shí)施例中的disk1)。disk1判斷IO請(qǐng)求的類型,IO請(qǐng)求包括讀IO請(qǐng)求和寫IO請(qǐng)求;讀IO請(qǐng)求用于讀取存儲(chǔ)設(shè)備中的目標(biāo)數(shù)據(jù)對(duì)象;寫IO請(qǐng)求用于寫存儲(chǔ)設(shè)備中的目標(biāo)數(shù)據(jù)對(duì)象。IO請(qǐng)求中包括所請(qǐng)求讀或?qū)懙臄?shù)據(jù)對(duì)象的對(duì)象標(biāo)識(shí)。
S130,disk1判斷自身上存儲(chǔ)的讀IO請(qǐng)求所請(qǐng)求讀取的目標(biāo)數(shù)據(jù)對(duì)象是否可信;如果可信,則執(zhí)行S140;如果不可信,則執(zhí)行S150。
disk1根據(jù)讀IO請(qǐng)求攜帶的對(duì)象標(biāo)識(shí)判斷自身存儲(chǔ)的所述對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象是否可信。
S140,disk1讀取自身上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象,并向讀IO請(qǐng)求的發(fā)起端返回目標(biāo)數(shù)據(jù)對(duì)象。
如果disk1上的目標(biāo)數(shù)據(jù)對(duì)象可信,則直接從disk1上讀取目標(biāo)數(shù)據(jù)對(duì)象并返回給IO請(qǐng)求的發(fā)起端。
S150,按照Quorum機(jī)制讀取目標(biāo)數(shù)據(jù)對(duì)象。
如果disk1上的目標(biāo)數(shù)據(jù)對(duì)象不可信,則按照傳統(tǒng)的Quorum機(jī)制進(jìn)行讀取操作。
本實(shí)施例中,PT1包括7個(gè)存儲(chǔ)節(jié)點(diǎn),根據(jù)R+W>7的原則可知,R為4,W為4,即,至少讀成功4份才認(rèn)為讀操作成功。
在本發(fā)明的一些應(yīng)用場(chǎng)景中,如果disk1沒有故障,只是disk1內(nèi)存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象不可信,則可以由disk1向PT1內(nèi)的其它存儲(chǔ)節(jié)點(diǎn)轉(zhuǎn)發(fā)讀IO請(qǐng)求。為了能夠盡快收集到至少4份讀成功響應(yīng),通常需要向其它6個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)送讀IO請(qǐng)求,如圖3所示,disk1分別向disk2~disk7轉(zhuǎn)發(fā)讀IO請(qǐng)求。
然后,disk1收集各個(gè)存儲(chǔ)節(jié)點(diǎn)返回的讀響應(yīng)結(jié)果,收集到4個(gè)讀成功響應(yīng)結(jié)果時(shí),確定讀取操作成功;根據(jù)Quorum機(jī)制可知,4個(gè)讀成功結(jié)果中必定包含一個(gè)最新的目標(biāo)數(shù)據(jù)對(duì)象。如果收集到的4個(gè)讀成功結(jié)果中目標(biāo)數(shù)據(jù)對(duì)象的版本號(hào)不相同,則選取最新版本號(hào)對(duì)應(yīng)的目標(biāo)數(shù)據(jù)對(duì)象發(fā)送給IO請(qǐng)求的發(fā)起端。
在本發(fā)明的另一些應(yīng)用場(chǎng)景中,如果集群管理模塊檢測(cè)到disk1故障,則由集群管理模塊從當(dāng)前邏輯分區(qū)中重新選取一個(gè)存儲(chǔ)節(jié)點(diǎn)作為主存儲(chǔ)節(jié)點(diǎn),然后,將讀IO請(qǐng)求重新發(fā)給新的主存儲(chǔ)節(jié)點(diǎn)。
本實(shí)施例提供的基于分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)處理方法,對(duì)分布式存儲(chǔ)系統(tǒng)中的任意一個(gè)邏輯分區(qū)選取一個(gè)存儲(chǔ)節(jié)點(diǎn)作為主存儲(chǔ)節(jié)點(diǎn)。當(dāng)接收到讀IO請(qǐng)求后,首先判斷相應(yīng)的邏輯分區(qū)中主存儲(chǔ)節(jié)點(diǎn)上的讀IO請(qǐng)求所請(qǐng)求讀取的目標(biāo)數(shù)據(jù)對(duì)象是否可信,如果可信,則直接從主存儲(chǔ)節(jié)點(diǎn)上讀取目標(biāo)數(shù)據(jù)對(duì)象并返回給發(fā)送讀IO請(qǐng)求的發(fā)起端。如果主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信,則按照傳統(tǒng)的Quorum機(jī)制進(jìn)行讀取操作。采用該方法,在讀取數(shù)據(jù)時(shí),如果主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信只需從主存儲(chǔ)節(jié)點(diǎn)上讀取,此種應(yīng)用場(chǎng)景只需從一個(gè)存儲(chǔ)節(jié)點(diǎn)上讀取數(shù)據(jù),與Quorum機(jī)制相比,大大減少了讀操作的副本數(shù)量,從而減少了讀操作的時(shí)延,提高了讀操作的性能。
圖4是本發(fā)明實(shí)施例一種主存儲(chǔ)節(jié)點(diǎn)構(gòu)建黑名單的方法流程示意圖,本實(shí)施例仍以圖2所示的PT分區(qū)為例進(jìn)行說明,本實(shí)施例將詳細(xì)介紹主存儲(chǔ)節(jié)點(diǎn)構(gòu)建黑名單的過程,黑名單是存儲(chǔ)節(jié)點(diǎn)成為當(dāng)前邏輯分區(qū)的主存儲(chǔ)節(jié)點(diǎn)之前,在該存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象的列表,即,該存儲(chǔ)節(jié)點(diǎn)上黑名單內(nèi)的數(shù)據(jù)對(duì)象不可信。該方法在圖3所示實(shí)施例的S110和S120之間包括以下步驟:
S210,disk1接收主存儲(chǔ)節(jié)點(diǎn)確定消息,并確定自身為當(dāng)前邏輯分區(qū)的主存儲(chǔ)節(jié)點(diǎn)。
S220,disk1收集當(dāng)前邏輯分區(qū)內(nèi)其它存儲(chǔ)節(jié)點(diǎn)上的對(duì)象降級(jí)寫日志,并標(biāo)記disk1為不可信狀態(tài)。
對(duì)象降級(jí)寫日志是指數(shù)據(jù)對(duì)象在存儲(chǔ)節(jié)點(diǎn)上寫失敗的日志并記錄在當(dāng)前邏輯分區(qū)內(nèi)所有寫成功的存儲(chǔ)節(jié)點(diǎn)上。對(duì)象降級(jí)寫日志中記錄了寫失敗數(shù)據(jù)對(duì)象的對(duì)象標(biāo)識(shí)、寫失敗的盤、所屬的邏輯分區(qū),以及寫失敗所發(fā)生的時(shí)間信息。例如,T1時(shí)刻數(shù)據(jù)對(duì)象1在disk2上寫失敗、其它存儲(chǔ)節(jié)點(diǎn)均寫成功,則數(shù)據(jù)對(duì)象1在disk2上寫失敗的日志會(huì)記錄在disk1和disk3~disk7的日志中。
disk1只需要收集自身成為主存儲(chǔ)節(jié)點(diǎn)之前、當(dāng)前邏輯分區(qū)內(nèi)的全部其它存儲(chǔ)節(jié)點(diǎn)記錄的對(duì)象降級(jí)寫日志。disk1向當(dāng)前邏輯分區(qū)內(nèi)的其它各個(gè)節(jié)點(diǎn)發(fā)送收集對(duì)象降級(jí)寫日志的請(qǐng)求,接收各個(gè)存儲(chǔ)節(jié)點(diǎn)返回的對(duì)象降級(jí)寫日志。在對(duì)象降級(jí)寫日志收集過程中,將disk1標(biāo)記為不可信狀態(tài),不可信狀態(tài)表示不知道disk1上的數(shù)據(jù)對(duì)象是否完整。
S230,disk1判斷收集到的對(duì)象降級(jí)寫日志中是否包含在disk1上寫失敗的數(shù)據(jù)對(duì)象;如果包含,則執(zhí)行S240;如果收集到的全部對(duì)象降級(jí)寫日志中都不包含,則執(zhí)行S270。
disk1在收集對(duì)象降級(jí)寫日志過程中判斷已收集到的對(duì)象降級(jí)寫日志中是否包含在disk1上寫失敗的數(shù)據(jù)對(duì)象。
S240,將對(duì)象降級(jí)寫日志中包含的在disk1上寫失敗的數(shù)據(jù)對(duì)象添加到黑名單中,并標(biāo)記黑名單為未完成狀態(tài)。
黑名單為未完成狀態(tài)時(shí),表示黑名單還不完整,不知道要讀取的數(shù)據(jù)對(duì)象是否在黑名單中。
S250,當(dāng)disk1收集到全部對(duì)象降級(jí)寫日志得到完整的黑名單后,并標(biāo)記黑名單為完成狀態(tài)。
S260,逐個(gè)重構(gòu)黑名單中寫失敗的數(shù)據(jù)對(duì)象,并從黑名單中刪除將恢復(fù)成功的數(shù)據(jù)對(duì)象對(duì)應(yīng)的降級(jí)寫日志,直到黑名單中全部數(shù)據(jù)對(duì)象都重構(gòu)成功,執(zhí)行S270。
數(shù)據(jù)重構(gòu)就是根據(jù)數(shù)據(jù)對(duì)象寫成功的存儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)對(duì)象內(nèi)容重新恢復(fù)數(shù)據(jù)對(duì)象寫失敗的存儲(chǔ)節(jié)點(diǎn)上的該數(shù)據(jù)對(duì)象。具體的,可以由主存儲(chǔ)節(jié)點(diǎn)(disk1)主動(dòng)讀取數(shù)據(jù)對(duì)象寫成功的存儲(chǔ)節(jié)點(diǎn)中存儲(chǔ)的所要恢復(fù)的數(shù)據(jù)對(duì)象對(duì)應(yīng)的對(duì)象內(nèi)容。
例如,黑名單中寫失敗的數(shù)據(jù)對(duì)象包括數(shù)據(jù)對(duì)象1、數(shù)據(jù)對(duì)象2和數(shù)據(jù)對(duì)象3,然后,分別從數(shù)據(jù)對(duì)象1寫成功的存儲(chǔ)節(jié)點(diǎn)中復(fù)制數(shù)據(jù)對(duì)象1到disk1中;同理,從數(shù)據(jù)對(duì)象2寫成功的存儲(chǔ)節(jié)點(diǎn)中復(fù)制數(shù)據(jù)對(duì)象2到disk1中;從數(shù)據(jù)對(duì)象3寫成功的存儲(chǔ)節(jié)點(diǎn)中復(fù)制數(shù)據(jù)對(duì)象3到disk1中。
S270,標(biāo)記disk1為可信狀態(tài)。
如果黑名單中的數(shù)據(jù)對(duì)象全部重構(gòu)完成后,重新將disk1標(biāo)記為可信狀態(tài)。如果disk1收集到的全部對(duì)象降級(jí)寫日志中都不包含在disk1上寫失敗的數(shù)據(jù)對(duì)象,則確定disk1上不存在寫失敗的數(shù)據(jù)對(duì)象,即,disk1上的數(shù)據(jù)對(duì)象全部可信,則可以標(biāo)記disk1為可信狀態(tài)。
在本發(fā)明的其它應(yīng)用場(chǎng)景中,當(dāng)集群管理模塊判斷出PT1中的主存儲(chǔ)節(jié)點(diǎn)disk1由于某種原因故障時(shí),集群管理模塊從PT1中重新選取一個(gè)存儲(chǔ)節(jié)點(diǎn)作為新的主存儲(chǔ)節(jié)點(diǎn)(根據(jù)每個(gè)存儲(chǔ)節(jié)點(diǎn)都作為主存儲(chǔ)節(jié)點(diǎn)的均衡原則選取),新的主存儲(chǔ)節(jié)點(diǎn)確定自身為主存儲(chǔ)節(jié)點(diǎn)后重復(fù)執(zhí)行上述S210~S270的方法流程。
本實(shí)施例提供的數(shù)據(jù)處理方法,在disk1確定自身為當(dāng)前邏輯分區(qū)的主存儲(chǔ)節(jié)點(diǎn)后,收集當(dāng)前邏輯分區(qū)中其它存儲(chǔ)節(jié)點(diǎn)上的對(duì)象降級(jí)寫日志,并從中選取在在自身作為主存儲(chǔ)節(jié)點(diǎn)之前在自身上寫失敗的數(shù)據(jù)對(duì)象,得到黑名單,并在此期間標(biāo)記disk1為不可信狀態(tài),需要進(jìn)一步判斷disk1上的目標(biāo)數(shù)據(jù)對(duì)象是否可信。
圖5是本發(fā)明實(shí)施例提供的一種主存儲(chǔ)節(jié)點(diǎn)判斷自身存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象是否可信的流程示意圖,該方法根據(jù)圖4所示實(shí)施例中構(gòu)建的黑名單判斷主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象是否可信,本實(shí)施例仍以圖2所示的邏輯分區(qū)為例進(jìn)行說明,PT1分區(qū)中disk1為主存儲(chǔ)節(jié)點(diǎn)。如圖5所示,該方法可以包括以下步驟:
S310,disk1接收讀IO請(qǐng)求。
S320,disk1判斷自身的狀態(tài),主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)包括可信狀態(tài)和非可信狀態(tài);如果disk1為不可信狀態(tài),則執(zhí)行S330;如果disk1為可信狀態(tài),則執(zhí)行S350。
S330,disk1判斷自身對(duì)應(yīng)的黑名單是否完整;如果完整,則執(zhí)行S340;如果不完整,則執(zhí)行S360。
S340,disk1判斷黑名單中是否包含讀IO請(qǐng)求所請(qǐng)求讀取的目標(biāo)數(shù)據(jù)對(duì)象;如果包含,則執(zhí)行S360;如果不包含,則執(zhí)行S350;
S350,disk1確定自身上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象可信。
S360,disk1確定自身上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象不可信。
本實(shí)施例提供的判斷主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象是否可信的過程,首先判斷主存儲(chǔ)節(jié)點(diǎn)的狀態(tài),如果主存儲(chǔ)節(jié)點(diǎn)為可信狀態(tài),則確定主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信;如果主存儲(chǔ)節(jié)點(diǎn)為不可信狀態(tài),則判斷主存儲(chǔ)節(jié)點(diǎn)的黑名單是否完整;如果黑名單完整,則進(jìn)一步判斷黑名單中是否包含目標(biāo)數(shù)據(jù)對(duì)象;如果包含,則確定主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信;如果黑名單中不包含目標(biāo)數(shù)據(jù)對(duì)象,或者,黑名單不完整,則確定主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信。確定主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信后,只需要從主存儲(chǔ)節(jié)點(diǎn)上讀取該目標(biāo)數(shù)據(jù)對(duì)象即可,大大降低了讀操作的時(shí)延,提高了讀取性能。
本發(fā)明實(shí)施例為了減少讀取數(shù)據(jù)的時(shí)延,從邏輯分區(qū)的多個(gè)存儲(chǔ)節(jié)點(diǎn)中選取一個(gè)存儲(chǔ)節(jié)點(diǎn)作為主存儲(chǔ)節(jié)點(diǎn),并在主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信的前提下,只需從主存儲(chǔ)節(jié)點(diǎn)上讀取目標(biāo)數(shù)據(jù)對(duì)象。相應(yīng)地,在寫數(shù)據(jù)時(shí),必須保證主存儲(chǔ)節(jié)點(diǎn)的數(shù)據(jù)對(duì)象寫成功。下面結(jié)合圖6對(duì)寫數(shù)據(jù)的過程進(jìn)行詳細(xì)說明。
圖6是本發(fā)明實(shí)施例一種基于分布式存儲(chǔ)系統(tǒng)的寫數(shù)據(jù)方法的流程圖,該方法仍以圖2所示的邏輯分區(qū)為例進(jìn)行說明,如圖6所示,寫數(shù)據(jù)方法可以包括以下步驟:
S410,disk1接收寫IO請(qǐng)求,寫IO請(qǐng)求中攜帶待寫入的目標(biāo)數(shù)據(jù)對(duì)象。
S420,disk1將目標(biāo)數(shù)據(jù)對(duì)象寫入本地。
S430,如果目標(biāo)數(shù)據(jù)對(duì)象在disk1上寫失敗,則disk1向?qū)慖O請(qǐng)求的發(fā)起端返回寫失敗響應(yīng)消息。
在本發(fā)明的一些應(yīng)用場(chǎng)景中,如果由于disk1故障導(dǎo)致寫操作失敗,則由集群管理模塊從當(dāng)前邏輯分區(qū)中重新選擇一個(gè)其它存儲(chǔ)節(jié)點(diǎn)作為主存儲(chǔ)節(jié)點(diǎn),集群管理模塊重新向新的主存儲(chǔ)節(jié)點(diǎn)發(fā)送寫IO請(qǐng)求進(jìn)行寫操作。
在本發(fā)明的另一些應(yīng)用場(chǎng)景中,如果disk1沒有故障,則發(fā)起重試請(qǐng)求,即重新發(fā)起寫IO請(qǐng)求。
S440,如果目標(biāo)數(shù)據(jù)對(duì)象在disk1上寫成功,則直接將該目標(biāo)數(shù)據(jù)對(duì)象復(fù)制到其它存儲(chǔ)節(jié)點(diǎn)上。
S450,當(dāng)disk1接收到其它存儲(chǔ)節(jié)點(diǎn)返回的至少3個(gè)返回寫成功的響應(yīng)結(jié)果后,向?qū)慖O請(qǐng)求的發(fā)起端返回寫成功響應(yīng)消息。
寫操作仍按照Quorum機(jī)制,而且,主存儲(chǔ)節(jié)點(diǎn)必須包含在寫成功的至少4個(gè)寫成功的存儲(chǔ)節(jié)點(diǎn)中,即,寫成功的存儲(chǔ)節(jié)點(diǎn)必須包括主存儲(chǔ)節(jié)點(diǎn)及3個(gè)其它存儲(chǔ)節(jié)點(diǎn),此時(shí),認(rèn)為寫操作成功,并向?qū)慖O請(qǐng)求的發(fā)起端返回寫成功響應(yīng)結(jié)果。
本實(shí)施例提供的基于分布式存儲(chǔ)系統(tǒng)的寫數(shù)據(jù)方法,主存儲(chǔ)節(jié)點(diǎn)接收寫IO請(qǐng)求并在主存儲(chǔ)節(jié)點(diǎn)本地,如果主存儲(chǔ)節(jié)點(diǎn)寫成功,還需要在其它存儲(chǔ)節(jié)點(diǎn)寫數(shù)據(jù),并寫包含主存儲(chǔ)節(jié)點(diǎn)在內(nèi)的寫成功的數(shù)量需要滿足Quorum機(jī)制的規(guī)定,此時(shí),才認(rèn)為寫操作成功,并由主存儲(chǔ)節(jié)點(diǎn)向?qū)慖O請(qǐng)求的發(fā)起端返回寫成功響應(yīng)結(jié)果;如果主存儲(chǔ)節(jié)點(diǎn)寫操作失敗,則直接由主存儲(chǔ)節(jié)點(diǎn)向?qū)慖O請(qǐng)求的發(fā)起端返回寫失敗響應(yīng)結(jié)果。保證主存儲(chǔ)節(jié)點(diǎn)寫成功能夠最大程度地提高只從主存儲(chǔ)節(jié)點(diǎn)上成功讀取數(shù)據(jù)的概率。
對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其它順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
相應(yīng)于上述的數(shù)據(jù)處理方法實(shí)施例,本發(fā)明還提供了相應(yīng)的存儲(chǔ)設(shè)備的實(shí)施例。
請(qǐng)參見圖7,示出了本發(fā)明實(shí)施例一種存儲(chǔ)設(shè)備的框圖,該存儲(chǔ)設(shè)備是分布式存儲(chǔ)系統(tǒng)中一個(gè)邏輯分區(qū)的主存儲(chǔ)節(jié)點(diǎn)。如圖7所示,該存儲(chǔ)設(shè)備包括:第一接收模塊110、判斷模塊120、讀取模塊130和發(fā)送模塊140;
第一接收模塊110接收讀IO請(qǐng)求,判斷模塊120判斷存儲(chǔ)設(shè)備的目標(biāo)數(shù)據(jù)對(duì)象是否可信,目標(biāo)數(shù)據(jù)對(duì)象是讀IO請(qǐng)求所要讀取的數(shù)據(jù)對(duì)象;如果可信,則由讀取模塊130從存儲(chǔ)設(shè)備中讀取目標(biāo)數(shù)據(jù)對(duì)象;發(fā)送模塊140將讀取模塊130讀取的目標(biāo)數(shù)據(jù)對(duì)象返回給讀IO請(qǐng)求的發(fā)起端。
在本發(fā)明的一些實(shí)施例中,如圖8所示,判斷模塊120包括第一判斷子模塊121、第二判斷子模塊122和第三判斷子模塊123。
第一判斷子模塊121,用于判斷所述存儲(chǔ)設(shè)備的狀態(tài),所述存儲(chǔ)設(shè)備的狀態(tài)包括可信狀態(tài)和不可信狀態(tài);如果所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)為可信狀態(tài),則確定所述主存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象可信。
第二判斷子模塊122,用于當(dāng)所述第一判斷子模塊確定所述主存儲(chǔ)節(jié)點(diǎn)的狀態(tài)為不可信狀態(tài)時(shí),獲取所述主存儲(chǔ)節(jié)點(diǎn)上的黑名單,并判斷所述黑名單是否完整,所述黑名單中存儲(chǔ)所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象;如果所述黑名單不完整,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信。
第二判斷子模塊具體用于:獲取黑名單的狀態(tài),黑名單的狀態(tài)包括完成狀態(tài)和未完成狀態(tài),主存儲(chǔ)節(jié)點(diǎn)收集所述對(duì)象降級(jí)寫日志的過程中,所述黑名單為未完成狀態(tài),直到收集完所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)所有存儲(chǔ)節(jié)點(diǎn)的對(duì)象降級(jí)寫日志,所述黑名單的狀態(tài)為完成狀態(tài);當(dāng)黑名單的狀態(tài)為完成狀態(tài)時(shí),確定黑名單完整;當(dāng)黑名單的狀態(tài)為未完成狀態(tài)時(shí),確定黑名單不完整。
第三判斷子模塊123,用于當(dāng)所述第二判斷子模塊確定所述黑名單完整時(shí),判斷所述黑名單中是否包含所述目標(biāo)數(shù)據(jù)對(duì)象,如果包含所述目標(biāo)數(shù)據(jù)對(duì)象,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信;如果不包含所述目標(biāo)數(shù)據(jù)對(duì)象,則確定所述主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信。
本實(shí)施例提供的存儲(chǔ)設(shè)備,當(dāng)接收到讀IO請(qǐng)求后,首先判斷相應(yīng)的邏輯分區(qū)中主存儲(chǔ)節(jié)點(diǎn)上的讀IO請(qǐng)求所請(qǐng)求讀取的目標(biāo)數(shù)據(jù)對(duì)象是否可信,如果可信,則直接從主存儲(chǔ)節(jié)點(diǎn)上讀取目標(biāo)數(shù)據(jù)對(duì)象并返回給發(fā)送讀IO請(qǐng)求的發(fā)起端。如果主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信,則按照傳統(tǒng)的Quorum機(jī)制進(jìn)行讀取操作。采用該存儲(chǔ)設(shè)備,在讀取數(shù)據(jù)時(shí),如果主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信只需從主存儲(chǔ)節(jié)點(diǎn)上讀取,此種應(yīng)用場(chǎng)景只需從一個(gè)存儲(chǔ)節(jié)點(diǎn)上讀取數(shù)據(jù),與Quorum機(jī)制相比,大大減少了讀操作的副本數(shù)量,從而減少了讀操作的時(shí)延,提高了讀操作的性能。
請(qǐng)參見圖9,示出了本發(fā)明實(shí)施例另一種存儲(chǔ)設(shè)備的框圖,該存儲(chǔ)設(shè)備在圖7所示實(shí)施例的基礎(chǔ)上還包括:第二接收模塊210、收集模塊220、黑名單構(gòu)建模塊230、數(shù)據(jù)重構(gòu)模塊240、狀態(tài)修改模塊250和可信標(biāo)記模塊260。
第二接收模塊210,用于接收主存儲(chǔ)節(jié)點(diǎn)確定消息,并根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)確定消息確定自身為主存儲(chǔ)節(jié)點(diǎn)。
所述主存儲(chǔ)節(jié)點(diǎn)確定消息包含主存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)信息。
需要說明的是,在存儲(chǔ)設(shè)備接收到主存儲(chǔ)節(jié)點(diǎn)確定消息后,隨時(shí)可能接收到讀IO請(qǐng)求,例如,可能在主存儲(chǔ)節(jié)點(diǎn)創(chuàng)建黑名單的過程中接收到讀IO請(qǐng)求,或者,還有可能在創(chuàng)建完黑名單之后接收到讀IO請(qǐng)求,或者,在黑名單中的數(shù)據(jù)對(duì)象重構(gòu)完成后接收到讀IO請(qǐng)求。
收集模塊220,用于向所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)的全部存儲(chǔ)節(jié)點(diǎn)收集對(duì)象降級(jí)寫日志,并標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為不可信狀態(tài);所述對(duì)象降級(jí)寫日志用于記錄數(shù)據(jù)對(duì)象寫失敗的存儲(chǔ)節(jié)點(diǎn)的日志,且記錄在所述邏輯分區(qū)內(nèi)所述數(shù)據(jù)對(duì)象寫成功的全部存儲(chǔ)節(jié)點(diǎn)上;
黑名單構(gòu)建模塊230,用于從所述對(duì)象降級(jí)寫日志中,選取所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的全部數(shù)據(jù)對(duì)象獲得黑名單;
數(shù)據(jù)重構(gòu)模塊240,用于逐個(gè)重構(gòu)所述黑名單中寫失敗的數(shù)據(jù)對(duì)象,并從所述黑名單中刪除重構(gòu)成功的數(shù)據(jù)對(duì)象所對(duì)應(yīng)的降級(jí)寫日志;
狀態(tài)修改模塊250,用于當(dāng)所述黑名單中的全部數(shù)據(jù)對(duì)象都重構(gòu)成功后,標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為可信狀態(tài)。
可信標(biāo)記模塊260,用于當(dāng)所述對(duì)象降級(jí)寫日志中不包含所述主存儲(chǔ)節(jié)點(diǎn)上寫失敗的數(shù)據(jù)對(duì)象,則標(biāo)記所述主存儲(chǔ)節(jié)點(diǎn)為可信狀態(tài)。
本實(shí)施例提供的存儲(chǔ)設(shè)備,在存儲(chǔ)設(shè)備確定自身為當(dāng)前邏輯分區(qū)的主存儲(chǔ)節(jié)點(diǎn)后,收集當(dāng)前邏輯分區(qū)中其它存儲(chǔ)節(jié)點(diǎn)上的對(duì)象降級(jí)寫日志,并從中選取在在自身作為主存儲(chǔ)節(jié)點(diǎn)之前在自身上寫失敗的數(shù)據(jù)對(duì)象,得到黑名單,并在此期間標(biāo)記自身為不可信狀態(tài),需要進(jìn)一步判斷自身存儲(chǔ)的目標(biāo)數(shù)據(jù)對(duì)象是否可信。
請(qǐng)參見圖10,示出了本發(fā)明實(shí)施例又一種存儲(chǔ)設(shè)備的框圖,該存儲(chǔ)設(shè)備在圖7所示實(shí)施例的基礎(chǔ)上還包括:第二接收模塊210、第三接收模塊310、寫數(shù)據(jù)模塊320、第一返回模塊330、復(fù)制模塊340和第二返回模塊350。
第二接收模塊210,用于接收主存儲(chǔ)節(jié)點(diǎn)確定消息,并根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)確定消息確定自身為主存儲(chǔ)節(jié)點(diǎn)。
所述主存儲(chǔ)節(jié)點(diǎn)確定消息包含主存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)信息。
第三接收模塊310,用于接收寫IO請(qǐng)求,所述寫IO請(qǐng)求用于請(qǐng)求向所述主存儲(chǔ)節(jié)點(diǎn)所在的邏輯分區(qū)寫入目標(biāo)數(shù)據(jù)對(duì)象。
寫數(shù)據(jù)模塊320,用于根據(jù)所述寫IO請(qǐng)求將所述目標(biāo)數(shù)據(jù)對(duì)象寫入所述存儲(chǔ)設(shè)備的相應(yīng)存儲(chǔ)空間中。
第一返回模塊330,用于當(dāng)所述目標(biāo)數(shù)據(jù)對(duì)象寫入失敗時(shí),直接向所述寫IO請(qǐng)求的發(fā)起端返回寫失敗響應(yīng)消息。
復(fù)制模塊340,用于當(dāng)所述目標(biāo)數(shù)據(jù)對(duì)象寫入成功時(shí),將所述目標(biāo)數(shù)據(jù)對(duì)象復(fù)制到所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的其它存儲(chǔ)節(jié)點(diǎn)上。
第二返回模塊350,用于當(dāng)所述主存儲(chǔ)節(jié)點(diǎn)接收到所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)內(nèi)預(yù)設(shè)數(shù)量個(gè)存儲(chǔ)節(jié)點(diǎn)返回的寫成功響應(yīng)消息時(shí),向所述寫IO請(qǐng)求的發(fā)起端返回寫成功響應(yīng)消息。
所述預(yù)設(shè)數(shù)量根據(jù)所述主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)的存儲(chǔ)節(jié)點(diǎn)數(shù)量及Quorum機(jī)制確定。
本實(shí)施例提供的存儲(chǔ)設(shè)備,主存儲(chǔ)節(jié)點(diǎn)接收寫IO請(qǐng)求并在主存儲(chǔ)節(jié)點(diǎn)本地,如果主存儲(chǔ)節(jié)點(diǎn)寫成功,還需要在其它存儲(chǔ)節(jié)點(diǎn)寫數(shù)據(jù),并寫包含主存儲(chǔ)節(jié)點(diǎn)在內(nèi)的寫成功的數(shù)量需要滿足Quorum機(jī)制的規(guī)定,此時(shí),才認(rèn)為寫操作成功,并由主存儲(chǔ)節(jié)點(diǎn)向?qū)慖O請(qǐng)求的發(fā)起端返回寫成功響應(yīng)結(jié)果;如果主存儲(chǔ)節(jié)點(diǎn)寫操作失敗,則直接由主存儲(chǔ)節(jié)點(diǎn)向?qū)慖O請(qǐng)求的發(fā)起端返回寫失敗響應(yīng)結(jié)果。保證主存儲(chǔ)節(jié)點(diǎn)寫成功能夠最大程度地提高只從主存儲(chǔ)節(jié)點(diǎn)上成功讀取數(shù)據(jù)的概率。
請(qǐng)參見圖11,示出了本發(fā)明實(shí)施例又一種存儲(chǔ)設(shè)備的框圖,該存儲(chǔ)設(shè)備是分布式存儲(chǔ)系統(tǒng)中一個(gè)邏輯分區(qū)中的主存儲(chǔ)節(jié)點(diǎn)。
如圖11所示,該存儲(chǔ)設(shè)備包括處理器410,以及與處理器410連接的接收器420和發(fā)送器430。
接收器420,用于接收IO請(qǐng)求并提供給處理器410。
IO請(qǐng)求的類型包括讀IO請(qǐng)求和寫IO請(qǐng)求,如果是讀IO請(qǐng)求,則該讀IO請(qǐng)求用于讀取主存儲(chǔ)節(jié)點(diǎn)所在邏輯分區(qū)上的目標(biāo)數(shù)據(jù)對(duì)象;如果是寫IO請(qǐng)求,則用于請(qǐng)求向所述主存儲(chǔ)節(jié)點(diǎn)所在的邏輯分區(qū)寫入目標(biāo)數(shù)據(jù)對(duì)象;
處理器410,用于執(zhí)行圖3~圖6所示實(shí)施例中的方法。
發(fā)送器430,用于將讀取的目標(biāo)數(shù)據(jù)對(duì)象發(fā)送給讀IO請(qǐng)求的發(fā)起端,或者,當(dāng)處理器410接收到所述其它存儲(chǔ)節(jié)點(diǎn)返回的預(yù)設(shè)數(shù)量個(gè)寫成功響應(yīng)消息時(shí),向所述寫IO請(qǐng)求的發(fā)起端返回寫成功響應(yīng)消息。
本實(shí)施例提供的存儲(chǔ)設(shè)備,當(dāng)接收到讀IO請(qǐng)求后,首先判斷相應(yīng)的邏輯分區(qū)中主存儲(chǔ)節(jié)點(diǎn)上的讀IO請(qǐng)求所請(qǐng)求讀取的目標(biāo)數(shù)據(jù)對(duì)象是否可信,如果可信,則直接從主存儲(chǔ)節(jié)點(diǎn)上讀取目標(biāo)數(shù)據(jù)對(duì)象并返回給發(fā)送讀IO請(qǐng)求的發(fā)起端。如果主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象不可信,則按照傳統(tǒng)的Quorum機(jī)制進(jìn)行讀取操作。采用該存儲(chǔ)設(shè)備,在讀取數(shù)據(jù)時(shí),如果主存儲(chǔ)節(jié)點(diǎn)上的目標(biāo)數(shù)據(jù)對(duì)象可信只需從主存儲(chǔ)節(jié)點(diǎn)上讀取,此種應(yīng)用場(chǎng)景只需從一個(gè)存儲(chǔ)節(jié)點(diǎn)上讀取數(shù)據(jù),與Quorum機(jī)制相比,大大減少了讀操作的副本數(shù)量,從而減少了讀操作的時(shí)延,提高了讀操作的性能。
需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其它實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其它變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其它要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。