最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

數(shù)據(jù)存儲的方法和存儲系統(tǒng)與流程

文檔序號:11154707閱讀:1542來源:國知局
數(shù)據(jù)存儲的方法和存儲系統(tǒng)與制造工藝

本申請涉及計(jì)算機(jī)存儲領(lǐng)域,并且更具體地,涉及數(shù)據(jù)存儲的方法和存儲系統(tǒng)。



背景技術(shù):

鏡像是冗余的一種類型,一個(gè)磁盤上的數(shù)據(jù)在另一個(gè)磁盤上存在一個(gè)完全相同的副本即為鏡像。在服務(wù)器上常用鏡像操作是組建獨(dú)立磁盤冗余陣列(Redundant Array Of Independent Disks,RAID)1,RAID1是將一個(gè)兩塊硬盤所構(gòu)成的RAID磁盤陣列,其容量僅等于一個(gè)硬盤的容量,因?yàn)榱硪粔K只是當(dāng)作數(shù)據(jù)“鏡像”。

在分布式存儲系統(tǒng)中,為了達(dá)到可靠性的要求,選擇在節(jié)點(diǎn)間使用鏡像機(jī)制。將本地?cái)?shù)據(jù),復(fù)制一份在鏡像節(jié)點(diǎn)保存,在故障情況下,快速恢復(fù)業(yè)務(wù)。

在現(xiàn)有技術(shù)中,待存儲數(shù)據(jù)發(fā)送到鏡像節(jié)點(diǎn),鏡像節(jié)點(diǎn)需要為待存儲數(shù)據(jù)配置內(nèi)存索引,內(nèi)存索引用于方便讀取該鏡像節(jié)點(diǎn)存儲的數(shù)據(jù);之后鏡像節(jié)點(diǎn)需要申請資源空間,并設(shè)置資源空間的存儲地址與內(nèi)存索引的映射關(guān)系;最后將待存儲數(shù)據(jù)存儲到存儲地址對應(yīng)的資源空間中?,F(xiàn)有技術(shù)鏡像節(jié)點(diǎn)存儲待存儲數(shù)據(jù)的上述操作對鏡像節(jié)點(diǎn)的中央處理器(Central Processing Unit,CPU)的占用較高。



技術(shù)實(shí)現(xiàn)要素:

本申請實(shí)施例提供一種數(shù)據(jù)存儲的方法和存儲系統(tǒng),能夠減少鏡像存儲設(shè)備存儲數(shù)據(jù)對CPU的占用。

第一方面,本申請實(shí)施例提供了一種數(shù)據(jù)存儲的方法,該方法應(yīng)用于包括第一存儲設(shè)備和至少一個(gè)第二存儲設(shè)備的存儲系統(tǒng),其中,該第二存儲設(shè)備為該第一存儲設(shè)備的鏡像存儲設(shè)備,該方法包括:第一存儲設(shè)備接收寫請求消息,該寫請求消息攜帶目標(biāo)數(shù)據(jù);該第一存儲設(shè)備根據(jù)該目標(biāo)數(shù)據(jù),生成目標(biāo)日志,該目標(biāo)日志包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息;該第一存儲設(shè)備向該第二存儲設(shè)備發(fā)送該目標(biāo)日志;該第二存儲設(shè)備存儲該目標(biāo)日志,且該存儲該目標(biāo)日志不需要配置內(nèi)存索引。

本申請實(shí)施例應(yīng)用于包括第一存儲設(shè)備和至少一個(gè)第二存儲設(shè)備的存儲系統(tǒng)中,且第二存儲設(shè)備為一類第一存儲設(shè)備的鏡像存儲設(shè)備。第一存儲設(shè)備接收寫請求消息,寫請求消息中攜帶待寫的數(shù)據(jù)(表示為目標(biāo)數(shù)據(jù)),根據(jù)該目標(biāo)數(shù)據(jù),生成相應(yīng)的目標(biāo)日志,并向第二存儲設(shè)備發(fā)送該目標(biāo)日志將該目標(biāo)日志直接存儲到第二存儲設(shè)備中,由于該目標(biāo)日志包括用于表示該目標(biāo)數(shù)據(jù)的標(biāo)識信息,這樣第二存儲設(shè)備存儲該目標(biāo)日志時(shí)并不需要創(chuàng)建內(nèi)存索引,相比現(xiàn)有技術(shù)中,第二存儲設(shè)備需要配置內(nèi)存索引而言,本申請可以直接存儲該目標(biāo)日志,從而節(jié)省了第二存儲設(shè)備配置內(nèi)存索引時(shí)對CPU的占用。

在一些可能的實(shí)現(xiàn)方式中,該方法還包括:該第二存儲設(shè)備在完成存儲該目標(biāo)日志時(shí),向該第一存儲設(shè)備發(fā)送存儲完成消息;該第一存儲設(shè)備存儲該目標(biāo)日志;該第一存儲設(shè)備在完成該目標(biāo)日志的存儲和接收到該存儲完成消息之后,發(fā)送寫請求響應(yīng)消息。

第一存儲設(shè)備完成寫入目標(biāo)日志,且接收到第二存儲設(shè)備發(fā)送的存儲完成消息之后,向IO設(shè)備發(fā)送寫請求響應(yīng)消息,這樣避免現(xiàn)有技術(shù)中需要等待將目標(biāo)數(shù)據(jù)存儲到內(nèi)存索引對應(yīng)的資源空間之后才能向IO設(shè)備返回寫請求響應(yīng)消息,從而減少了發(fā)出寫請求到收到寫請求響應(yīng)消息的時(shí)延。

在一些可能的實(shí)現(xiàn)方式中,該第二存儲設(shè)備包括多個(gè)資源空間;其中,該第二存儲設(shè)備存儲該目標(biāo)日志包括:該第二存儲設(shè)備根據(jù)該標(biāo)識信息,確定存儲該目標(biāo)日志的第一資源空間,該第一資源空間為該第二存儲設(shè)備的多個(gè)資源空間中滿足該目標(biāo)日志的資源需求的任一資源空間;該第二存儲設(shè)備將該目標(biāo)日志存儲到該第一資源空間中。

第二存儲設(shè)備根據(jù)該標(biāo)識信息選擇合適的資源空間(表示為第一資源空間),將該目標(biāo)日志存儲到第二存儲設(shè)備的第一資源空間中。此外,第二存儲設(shè)備可以根據(jù)標(biāo)識信息識別目標(biāo)數(shù)據(jù),以目標(biāo)日志的形式可以將目標(biāo)數(shù)據(jù)按照順序進(jìn)行有規(guī)律的存儲,這樣第二存儲設(shè)備可以不需要為目標(biāo)數(shù)據(jù)配置內(nèi)存索引,從而使得節(jié)省了第二存儲設(shè)備的CPU占用。

在一些可能的實(shí)現(xiàn)方式中,該第二存儲設(shè)備包括多個(gè)資源空間;該方法還包括:該第一存儲設(shè)備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量,該第二資源空間為該第二存儲設(shè)備的多個(gè)資源空間中任一資源空間;該第一存儲設(shè)備根據(jù)該第二資源空間的存儲容量和該標(biāo)識信息,確定該第二資源空間是否滿足該目標(biāo)日志的資源需求;該第一存儲設(shè)備在該第二資源空間滿足該目標(biāo)日志的資源需求時(shí),根據(jù)RDMA編碼方式、該目標(biāo)日志和該第二資源空間的存儲地址,生成RDMA消息,該RDMA消息包括該第二資源空間的存儲地址和該目標(biāo)日志;其中,該第一存儲設(shè)備向該第二存儲設(shè)備發(fā)送該目標(biāo)日志包括:該第一存儲設(shè)備向該第二存儲設(shè)備的第二資源空間發(fā)送該RDMA消息;其中,該第二存儲設(shè)備存儲該目標(biāo)日志包括:該第二存儲設(shè)備的第二資源空間根據(jù)該RDMA消息,存儲該目標(biāo)日志。

第二存儲設(shè)備在將目標(biāo)日志存儲到第二資源空間之后,就可以向第一存儲設(shè)備返回存儲完成消息。本申請實(shí)施例相比第二存儲設(shè)備接收目標(biāo)日志,并需要為目標(biāo)日志選擇合適的資源空間,能夠更進(jìn)一步節(jié)省了第二存儲設(shè)備的CPU的占用。

在一些可能的實(shí)現(xiàn)方式中,該第一存儲設(shè)備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量包括:該第一存儲設(shè)備向該第二存儲設(shè)備發(fā)送資源請求消息,該資源請求消息用于請求存儲該目標(biāo)日志的該第二資源空間;該第一存儲設(shè)備接收該第二存儲設(shè)備根據(jù)該資源請求消息發(fā)送的資源請求響應(yīng)消息,該資源請求響應(yīng)消息攜帶該第二資源空間的存儲地址和該第二資源空間的存儲容量。

第一存儲設(shè)備可以向第二存儲設(shè)備發(fā)送資源請求消息,第二存儲設(shè)備在多個(gè)資源空間中選擇任意一個(gè)資源空間(表示為第二資源空間),并向第一存儲設(shè)備發(fā)送資源請求響應(yīng)消息,且在資源請求響應(yīng)消息中攜帶該第二資源空間的存儲地址和該第二資源空間的剩余容量,從而使得第一存儲設(shè)備能夠?yàn)槟繕?biāo)日志選擇合適的資源空間。第一存儲設(shè)備可以只獲取一次第二存儲設(shè)備的資源空間的地址和存儲容量,直至該資源空間沒有剩余資源,或者剩余資源不能夠滿足當(dāng)前待寫入數(shù)據(jù)的大小,然后才進(jìn)行下一次獲取第二存儲設(shè)備的資源空間的地址和存儲容量。

在一些可能的實(shí)現(xiàn)方式中,該方法還包括:該第一存儲設(shè)備為該目標(biāo)數(shù)據(jù)配置內(nèi)存索引;該第一存儲設(shè)備根據(jù)該內(nèi)存索引,確定存儲該目標(biāo)數(shù)據(jù)的該第一存儲設(shè)備的資源空間,其中,該第一存儲設(shè)備的資源空間的存儲地址對應(yīng)于該內(nèi)存索引;該第一存儲設(shè)備將該目標(biāo)數(shù)據(jù)寫入該第一存儲設(shè)備的資源空間中。

第一存儲設(shè)備為目標(biāo)數(shù)據(jù)配置內(nèi)存索引,以及為目標(biāo)數(shù)據(jù)申請存儲資源(表示為第一存儲設(shè)備的資源空間),且配置已經(jīng)申請的存儲資源的存儲地址與內(nèi)存索引的映射關(guān)系,該映射關(guān)系用于后續(xù)第一存儲設(shè)備能夠根據(jù)內(nèi)存索引讀取到對應(yīng)的存儲地址中存儲的數(shù)據(jù),最后將目標(biāo)數(shù)據(jù)寫入到存儲地址對應(yīng)的資源空間中。這樣第一存儲設(shè)備將目標(biāo)數(shù)據(jù)存儲到有內(nèi)存索引對應(yīng)的資源空間中,并不會延長影響返回寫請求響應(yīng)消息的時(shí)間。

第二方面,本申請實(shí)施例提供了一種存儲系統(tǒng),該存儲系統(tǒng)可以實(shí)現(xiàn)上述方面所涉及方法中第一存儲設(shè)備和第二存儲設(shè)備所執(zhí)行的功能,所述功能可以通過硬件實(shí)現(xiàn),也可以通過硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。所述硬件或軟件包括一個(gè)或多個(gè)上述功能相應(yīng)的單元或模塊。

第三方面,提供了一種存儲系統(tǒng),該存儲系統(tǒng)的結(jié)構(gòu)中包括存儲器,該處理器被配置為支持上述方面所涉及方法中第一存儲設(shè)備和第二存儲設(shè)備所執(zhí)行的功能。該通信接口用于支持該第一存儲設(shè)備、第二存儲設(shè)備與其它網(wǎng)元之間的通信。該存儲器用于與處理器耦合,其保存該第一存儲設(shè)備、該第二存儲設(shè)備必要的程序指令和數(shù)據(jù)。

第四方面,提供了一種計(jì)算機(jī)存儲介質(zhì),該計(jì)算機(jī)存儲介質(zhì)中存儲有程序代碼,該程序代碼用于指示執(zhí)行上述存儲系統(tǒng)所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述方面所設(shè)計(jì)的程序。

基于上述技術(shù)方案,第一存儲設(shè)備通過接收攜帶目標(biāo)數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標(biāo)數(shù)據(jù)生成包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,并向該第二存儲設(shè)備發(fā)送該目標(biāo)日志,第二存儲設(shè)備存儲該目標(biāo)日志,且存儲該目標(biāo)日志不需要配置內(nèi)存索引,這樣第一存儲設(shè)備生成包括標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,第二存儲設(shè)備可以存儲目標(biāo)日志不需要配置內(nèi)存索引,從而減少了對第二存儲設(shè)備的CPU的占用。

附圖說明

為了更清楚地說明本申請實(shí)施例的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1是本申請實(shí)施例的存儲系統(tǒng)的架構(gòu)示意圖;

圖2是本申請實(shí)施例的存儲節(jié)點(diǎn)和管理節(jié)點(diǎn)的結(jié)構(gòu)示意圖;

圖3是本申請實(shí)施例Cache模塊的工作流程圖;

圖4a、圖4b和圖4c是本申請實(shí)施例的日志格式的示意圖;

圖5是本申請實(shí)施例的資源空間的結(jié)構(gòu)示意圖;

圖6是現(xiàn)有技術(shù)數(shù)據(jù)存儲的方法的示意性流程圖;

圖7是本申請一個(gè)實(shí)施例的數(shù)據(jù)存儲的方法的示意性流程圖;

圖8是本申請另一個(gè)實(shí)施例的數(shù)據(jù)存儲的方法的示意性流程圖;

圖9是本申請實(shí)施例的存儲系統(tǒng)的示意性框圖;

圖10是本申請實(shí)施例的存儲系統(tǒng)的結(jié)構(gòu)示意圖。

具體實(shí)施方式

下面將結(jié)合本申請實(shí)施例中的附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例是本申請一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。

圖1示出了本申請實(shí)施例的存儲系統(tǒng)的架構(gòu)示意圖。如圖1所示,該存儲系統(tǒng)包括節(jié)點(diǎn)和網(wǎng)絡(luò)。其中,節(jié)點(diǎn)分為用戶節(jié)點(diǎn)(可以有多個(gè)用戶節(jié)點(diǎn):用戶節(jié)點(diǎn)200a、用戶節(jié)點(diǎn)200b、用戶節(jié)點(diǎn)200c和用戶節(jié)點(diǎn)200d)、存儲節(jié)點(diǎn)(可以有多個(gè)存儲節(jié)點(diǎn):存儲節(jié)點(diǎn)100a、存儲節(jié)點(diǎn)100b、存儲節(jié)點(diǎn)100c和存儲節(jié)點(diǎn)100d)和管理節(jié)點(diǎn)300。網(wǎng)絡(luò)分為用于承載用戶輸入輸出(Input/Output,IO)數(shù)據(jù)的前端網(wǎng)絡(luò)400和用于承載業(yè)務(wù)數(shù)據(jù)的后端網(wǎng)絡(luò)500。本申請實(shí)施例中的業(yè)務(wù)數(shù)據(jù)可以是指支持RDMA的鏡像數(shù)據(jù)。

用戶節(jié)點(diǎn)用于在前端接收用戶IO數(shù)據(jù),通過前端網(wǎng)絡(luò)轉(zhuǎn)發(fā)給存儲節(jié)點(diǎn)。存儲節(jié)點(diǎn)用于存儲用戶業(yè)務(wù)數(shù)據(jù),同時(shí)高速緩沖存儲器(Cache)功能也在存儲節(jié)點(diǎn)上。管理節(jié)點(diǎn)用于負(fù)責(zé)維護(hù)存儲節(jié)點(diǎn)間的鏡像關(guān)系。

圖2示出了存儲節(jié)點(diǎn)和管理節(jié)點(diǎn)的結(jié)構(gòu)示意圖。其中,存儲節(jié)點(diǎn)可以區(qū)分IO的主存儲節(jié)點(diǎn)(以圖1中的100a為例)和IO的鏡像存儲節(jié)點(diǎn)(以圖1中的100b為例)。IO的主節(jié)點(diǎn)100a主要包括前端IO模塊110a、后端磁盤模塊120a和Cache模塊130a。前端IO模塊110a用于負(fù)責(zé)用戶IO接收、IO流控以及IO錯(cuò)誤處理。后端磁盤模塊120a用于提供用戶業(yè)務(wù)數(shù)據(jù)通過磁盤讀寫功能。Cache模塊130a分為日志層131a、資源層132a和本地存儲133a。管理節(jié)點(diǎn)300包括鏡像管理模塊310,鏡像管理模塊310用于在管理節(jié)點(diǎn)上負(fù)責(zé)維護(hù)節(jié)點(diǎn)間鏡像關(guān)系,并通知Cache模塊130。鏡像存儲節(jié)點(diǎn)100b的結(jié)構(gòu)與主存儲節(jié)點(diǎn)100a的結(jié)構(gòu)相同,在此不再贅述。

圖3示出了Cache模塊130a的內(nèi)部工作流程。日志層131a接收前端IO模塊110a發(fā)送的IO數(shù)據(jù),并將IO數(shù)據(jù)轉(zhuǎn)換為日志形式(例如,預(yù)寫日志(Write-ahead logging,WAL log)格式的數(shù)據(jù))發(fā)送給資源層132a;資源層132a負(fù)責(zé)資源(例如,非易失性的雙列內(nèi)存模塊(Non-Volatile Dual In-line Memory Module,NVDIMM)資源)的空間分配,并將日志發(fā)送到鏡像節(jié)點(diǎn)110b進(jìn)行存儲。主存儲節(jié)點(diǎn)100a接收到存儲完成消息,本地存儲133a在本地存儲日志。

為了方便理解本申請實(shí)施例,首先在此介紹本申請實(shí)施例之前引入以下幾個(gè)要素。

遠(yuǎn)程直接數(shù)據(jù)存取(Remote Direct Memory Access,RDMA)通過網(wǎng)絡(luò)將數(shù)據(jù)直接傳入鏡像節(jié)點(diǎn)的存儲區(qū),而不對操作系統(tǒng)造成任何影響,這樣就可以減少鏡像端的CPU的開銷。具體RDMA實(shí)現(xiàn)是通過發(fā)送方和接收方針對目的緩存區(qū)的位置進(jìn)行協(xié)商,與傳統(tǒng)的TCP連接不同的是要對傳統(tǒng)傳輸控制協(xié)議(Transmission Control Protocol,TCP)頭部數(shù)據(jù)結(jié)構(gòu)進(jìn)行一些改動以支持RDMA協(xié)議,主要是增加一個(gè)表示目的地址的字段(即生成RDMA消息)。RDMA讀寫操作要求源端和目的端都知道目的緩存區(qū)的位置和大小,如果從主機(jī)的內(nèi)存通過RDMA向另一個(gè)主機(jī)內(nèi)存寫一塊數(shù)據(jù),則必須提供目的緩存區(qū)的地址,并確保這個(gè)緩存區(qū)足夠大來接收這塊數(shù)據(jù)。

WAL log日志格式分為三種類型:簡單型日志、復(fù)合型日志和命令型日志。

簡單型日志只針對元數(shù)據(jù)(即是描述數(shù)據(jù)屬性的信息,用來指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能)的一個(gè)對象的日志,或數(shù)據(jù)的一個(gè)文件的日志。在一個(gè)寫IO只包含一個(gè)Cache模塊的數(shù)據(jù)時(shí),通常使用簡單型日志格式。簡單型日志格式如圖4a所示,包括魔術(shù)字部分、數(shù)據(jù)部分、日志頭部分和日志尾部分。魔術(shù)字部分存儲一組魔術(shù)字表示日志開始,日志頭中存放元數(shù)據(jù),日志尾中存放日志的循環(huán)冗余碼校驗(yàn)(Cyclic Redundancy Check,CRC)校驗(yàn)信息。

復(fù)合型日志格式如圖4b所示,在一個(gè)寫IO包含多個(gè)Cache模塊的數(shù)據(jù)時(shí),需要轉(zhuǎn)換為多條簡單日志,再對多條簡單日志封裝一個(gè)復(fù)合日志頭,組合成一條復(fù)合型日志,來保證這多條log的一致性。這條復(fù)合型日志的數(shù)據(jù)部分存放著多條簡單日志,具體日志個(gè)數(shù)及數(shù)據(jù)長度在日志頭中保存。

命令型日志格式如圖4c所示,當(dāng)一個(gè)寫命令或者其他命令的IO下發(fā)數(shù)據(jù),這部分IO攜帶的數(shù)據(jù)將不需要在Cache中保存,為了鏡像節(jié)點(diǎn)能夠感知到,也需要寫入一條日志,描述實(shí)現(xiàn)數(shù)據(jù)的位置以及大小。其中,命令型日志頭中描述失效范圍信息。

資源層的資源分配是指將鏡像的空間分為多個(gè)段(Segment)(通常使用8M NVDIMM空間)來管理。每個(gè)Segment可以存放多條WAL log(如圖5所示),WAL log采用連續(xù)存放方式,每條WAL log首尾相連。魔術(shù)字部分存儲一組魔術(shù)字表示一個(gè)Segment的開始,日志頭記錄Segmnet狀態(tài)是否可用以及Segment序號等描述信息。

圖6示出了現(xiàn)有技術(shù)數(shù)據(jù)存儲的方法,具體流程如下所示:

101、IO前端模塊向本地緩存模塊發(fā)送寫請求消息,該寫請求消息攜帶待寫的目標(biāo)數(shù)據(jù)。

102、本地緩存模塊接收到該目標(biāo)數(shù)據(jù),并將該目標(biāo)數(shù)據(jù)發(fā)送給鏡像緩存模塊以使鏡像緩存模塊存儲該目標(biāo)數(shù)據(jù)。

103、鏡像緩存模塊接收該目標(biāo)數(shù)據(jù),并為該目標(biāo)數(shù)據(jù)配置內(nèi)存索引,該內(nèi)存索引用于方便讀取該目標(biāo)數(shù)據(jù),具體地,鏡像緩存模塊可以先在已有的索引表查詢是否存在該目標(biāo)數(shù)據(jù)對應(yīng)的內(nèi)存索引,若不存在,為該目標(biāo)數(shù)據(jù)創(chuàng)建相應(yīng)的內(nèi)存索引;

104、鏡像緩存模塊根據(jù)內(nèi)存索引為目標(biāo)數(shù)據(jù)申請存儲資源(即配置合適的用于存儲目標(biāo)數(shù)據(jù)的資源空間),且設(shè)置目標(biāo)數(shù)據(jù)的內(nèi)存索引與申請的資源空間的存儲地址的映射關(guān)系,使得根據(jù)索引以及索引對應(yīng)的存儲地址能夠讀取存儲空間中的數(shù)據(jù)。

105、鏡像存儲模塊將目標(biāo)數(shù)據(jù)存儲到申請的資源空間中。

106、鏡像緩存模塊完成目標(biāo)數(shù)據(jù)的存儲后,向本地緩存模塊發(fā)送存儲完成消息。

107、本地緩存模塊接收到鏡像緩存模塊發(fā)送的存儲完成消息后,可以開始在本地緩存中進(jìn)行存儲目標(biāo)數(shù)據(jù),首先為目標(biāo)數(shù)據(jù)配置內(nèi)存索引。具體流程與鏡像節(jié)點(diǎn)存儲數(shù)據(jù)的流程(如上述步驟103和步驟104)相同,在此不進(jìn)行贅述。

108、本地緩存模塊為目標(biāo)數(shù)據(jù)申請存儲資源。

109、本地緩存模塊將目標(biāo)數(shù)據(jù)存儲到申請的資源空間中。

110、本地緩存模塊完成目標(biāo)數(shù)據(jù)的存儲后,向IO前端模塊發(fā)送寫請求響應(yīng)消息。

因此,現(xiàn)有技術(shù)中,鏡像緩存模塊存儲鏡像數(shù)據(jù)時(shí)需要經(jīng)過為目標(biāo)數(shù)據(jù)配置內(nèi)存索引、申請存儲資源(鏡像緩存模塊需要根據(jù)目標(biāo)數(shù)據(jù)的大小、類型等各種屬性找到合適的資源空間,并配置資源空間的存儲地址與內(nèi)存索引的映射關(guān)系)和并將目標(biāo)數(shù)據(jù)存儲到鏡像緩存模塊的這些步驟都需要CPU參與,從而使得鏡像存儲節(jié)點(diǎn)的CPU占用較高。

本申請實(shí)施例應(yīng)用于第一存儲設(shè)備正常工作的情況下,第一存儲設(shè)備存儲數(shù)據(jù)以及第二存儲設(shè)備存儲數(shù)據(jù)的場景。

應(yīng)理解,本申請實(shí)施例的第一存儲設(shè)備對應(yīng)于上述圖2的主存儲節(jié)點(diǎn)100a,第二存儲設(shè)備對應(yīng)于上述圖2的鏡像存儲節(jié)點(diǎn)100b;或者說本申請實(shí)施例的第一存儲設(shè)備就是上述圖2的主存儲節(jié)點(diǎn)100a,第二存儲設(shè)備就是上述圖2的鏡像存儲節(jié)點(diǎn)100b;或者該第一存儲設(shè)備和第二存儲設(shè)備分別為具有上述Cache模塊130a功能的設(shè)備和上述Cache模塊130b功能的設(shè)備,本申請對此不進(jìn)行限定。

圖7示出了根據(jù)本申請一個(gè)實(shí)施例的數(shù)據(jù)存儲的方法的示意性流程圖。本申請實(shí)施例中的第一存儲設(shè)備可以是圖1中的存儲節(jié)點(diǎn)100a、100b、100c和100d中的任意一個(gè)存儲節(jié)點(diǎn),第二存儲設(shè)備可以是通過管理節(jié)點(diǎn)300確定的主存儲節(jié)點(diǎn)的鏡像存儲節(jié)點(diǎn)。

701、第一存儲設(shè)備接收寫請求消息,該寫請求消息攜帶目標(biāo)數(shù)據(jù)。

本申請實(shí)施例應(yīng)用于包括第一存儲設(shè)備和至少一個(gè)第二存儲設(shè)備的存儲系統(tǒng)中,且第二存儲設(shè)備為一類第一存儲設(shè)備的鏡像存儲設(shè)備。此外,第一存儲設(shè)備也可以是第二存儲設(shè)備的鏡像存儲設(shè)備,也就是說,第一存儲設(shè)備和第二存儲設(shè)備可以互為鏡像存設(shè)備,本申請對此不進(jìn)行限定。

第一存儲設(shè)備可以是圖2中的Cache模塊130a,Cache模塊130a接收IO前端模塊110a發(fā)送的寫請求消息,但本申請并不限于此。第一存儲設(shè)備接收寫請求消息,寫請求消息中攜帶待寫的數(shù)據(jù)(表示為目標(biāo)數(shù)據(jù)),該目標(biāo)數(shù)據(jù)可以是需要同一個(gè)緩存處理的數(shù)據(jù),也可以是需要多個(gè)緩存單元處理的數(shù)據(jù);或者該目標(biāo)數(shù)據(jù)不需要在緩存中保存。

應(yīng)注意,該第一存儲設(shè)備可以包括多個(gè)內(nèi)存區(qū)域、處理器、控制器、且控制器上運(yùn)行著操作系統(tǒng)等,第二存儲設(shè)備可以與第一存儲設(shè)備相同,也可以不同,本申請對此不進(jìn)行限定。

702、第一存儲設(shè)備根據(jù)該目標(biāo)數(shù)據(jù),生成相應(yīng)的目標(biāo)日志。

該目標(biāo)日志包括目標(biāo)數(shù)據(jù)和用于標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息,該標(biāo)識信息為指示目標(biāo)數(shù)據(jù)屬性的各種信息。例如,日志格式如圖4a、圖4b和圖4c所示,以簡單型日志為例,簡單型日志中包括魔術(shù)字部分、數(shù)據(jù)部分和日志頭部分和日志尾部分。存儲設(shè)備能夠根據(jù)魔術(shù)字部分識別日志的開始;而日志頭中存儲元數(shù)據(jù),元數(shù)據(jù)用于指示數(shù)據(jù)存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能;日志尾部分存放日志的CRC校驗(yàn)信息,保證了數(shù)據(jù)的可靠性。因此,本申請實(shí)施例中的目標(biāo)日志中包括的標(biāo)識信息可以是日志頭、日志尾以及魔術(shù)字部分中存儲的所有信息。

日志格式包括簡單型日志、復(fù)合型日志和命令型日志。若目標(biāo)數(shù)據(jù)需要一個(gè)緩存處理,則第一存儲存儲設(shè)備將該目標(biāo)數(shù)據(jù)轉(zhuǎn)換為簡單型日志;若目標(biāo)數(shù)據(jù)是需要多個(gè)緩存處理,則第一存儲設(shè)備將目標(biāo)數(shù)據(jù)轉(zhuǎn)換為復(fù)合型日志。若目標(biāo)數(shù)據(jù)不需要在緩存中保存,則第一存儲設(shè)備將目標(biāo)數(shù)據(jù)轉(zhuǎn)換為命令型日志,以描述該數(shù)據(jù)失效,以及失效數(shù)據(jù)的位置和大小。這樣第一存儲設(shè)備能夠根據(jù)目標(biāo)數(shù)據(jù)需要一個(gè)緩存處理、多個(gè)緩存處理還是不需要緩存處理,為目標(biāo)數(shù)據(jù)選擇生成合適的目標(biāo)日志。

應(yīng)理解,本申請實(shí)施例中對“緩存”和“內(nèi)存”不進(jìn)行區(qū)分,也就是說,緩存和內(nèi)存都能夠?qū)崿F(xiàn)本申請實(shí)施例對數(shù)據(jù)存儲的需求,因此本申請對此不進(jìn)行限定。

例如,目標(biāo)數(shù)據(jù)為需要一個(gè)緩存處理的塊存儲數(shù)據(jù),塊存儲數(shù)據(jù)主要包括卷標(biāo)識(volume Identity,volume ID)、塊起始地址(Logical block address,LBA)、塊個(gè)數(shù)(lengh)、用戶數(shù)據(jù)(buff)。由于目標(biāo)數(shù)據(jù)需要一個(gè)緩存處理,因此,第一存儲設(shè)備將該塊存儲數(shù)據(jù)轉(zhuǎn)換為簡單型日志,并將LBA轉(zhuǎn)化為緩存管理單元的編號,比如LBA除以64k取整得到單元編號(chunk ID)、取余得到單元內(nèi)的偏移(offset),把volume ID、chunk ID、offset寫入日志頭中,將buff寫入日志數(shù)據(jù)部分,將用于保證數(shù)據(jù)的可靠性的循環(huán)冗余校驗(yàn)碼(Cyclic Redundancy Check,CRC)寫在日志尾。

應(yīng)理解,本申請實(shí)施例中對“緩存”和“內(nèi)存”不進(jìn)行區(qū)分,也就是說,緩存和內(nèi)存都能夠?qū)崿F(xiàn)本申請實(shí)施例對數(shù)據(jù)存儲的需求。

703、第一存儲設(shè)備向該第二存儲設(shè)備發(fā)送該目標(biāo)日志。

第二存儲設(shè)備接收到該第一存儲設(shè)備發(fā)送的目標(biāo)日志,并將目標(biāo)日志存儲到第二存儲設(shè)備的內(nèi)存中。

704、第二存儲設(shè)備鏡像存儲該目標(biāo)日志。

第二存儲設(shè)備接收第一存儲設(shè)備根據(jù)寫請求消息中攜帶的目標(biāo)數(shù)據(jù)生成的目標(biāo)日志,并將該目標(biāo)日志直接存儲到第二存儲設(shè)備中,由于該目標(biāo)日志包括用于表示該目標(biāo)數(shù)據(jù)的標(biāo)識信息,這樣第二存儲設(shè)備存儲該目標(biāo)日志時(shí)并不需要創(chuàng)建內(nèi)存索引,相比現(xiàn)有技術(shù)中,第二存儲設(shè)備需要配置內(nèi)存索引而言,本申請可以直接存儲該目標(biāo)日志,從而節(jié)省了第二存儲設(shè)備配置內(nèi)存索引時(shí)對CPU的占用。

可選地,作為一個(gè)實(shí)施例,第一存儲設(shè)備接收到第二存儲設(shè)備完成鏡像存儲目標(biāo)日志的存儲完成消息,保證第二存儲設(shè)備已經(jīng)成功完成寫入目標(biāo)日志之后,第一存儲設(shè)備才開始在自己的緩存中寫入目標(biāo)日志,這樣可以避免第二存儲設(shè)備失敗,浪費(fèi)了第一存儲設(shè)備的CPU占用。第一存儲設(shè)備完成寫入目標(biāo)日志,且接收到第二存儲設(shè)備發(fā)送的存儲完成消息之后,向IO設(shè)備發(fā)送寫請求響應(yīng)消息,這樣避免現(xiàn)有技術(shù)中需要等待將目標(biāo)數(shù)據(jù)存儲到內(nèi)存索引對應(yīng)的資源空間之后才能向IO設(shè)備返回寫請求響應(yīng)消息,從而減少了發(fā)出寫請求到收到寫請求響應(yīng)消息的時(shí)延。

應(yīng)理解,發(fā)送寫請求消息和接收寫請求響應(yīng)消息的設(shè)備可以是IO設(shè)備也可以是其他設(shè)備,為描述方便以IO設(shè)備為例進(jìn)行說明,但本申請并不限于此。

可選地,第一存儲設(shè)備沒有接收到存儲完成消息之前,第一存儲設(shè)備就開始寫入該目標(biāo)日志,在第一存儲設(shè)備完成寫入目標(biāo)日志,且接收到第二存儲設(shè)備發(fā)送的存儲完成消息之后,向IO設(shè)備發(fā)送寫請求響應(yīng)消息,這樣可以更進(jìn)一步節(jié)省向IO設(shè)備返回寫請求響應(yīng)消息的時(shí)間。

可選地,作為一個(gè)實(shí)施例,該第二存儲設(shè)備包括多個(gè)資源空間;其中,該第二存儲設(shè)備鏡像存儲該目標(biāo)日志包括:該第二存儲設(shè)備根據(jù)該標(biāo)識信息,確定存儲該目標(biāo)日志的第一資源空間,該第一資源空間為該第二存儲設(shè)備的多個(gè)資源空間中滿足該目標(biāo)日志的資源需求的任一資源空間;該第二存儲設(shè)備將該目標(biāo)日志鏡像存儲到該第一資源空間中。

具體而言,第二存儲設(shè)備接收目標(biāo)日志,該目標(biāo)日志包括用于標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息,第二存儲設(shè)備根據(jù)該標(biāo)識信息選擇合適的資源空間(表示為第一資源空間),將該目標(biāo)日志存儲到第二存儲設(shè)備的第一資源空間中。此外,第二存儲設(shè)備可以根據(jù)標(biāo)識信息識別目標(biāo)數(shù)據(jù),以目標(biāo)日志的形式可以將目標(biāo)數(shù)據(jù)按照順序進(jìn)行有規(guī)律的存儲,這樣第二存儲設(shè)備可以不需要為目標(biāo)數(shù)據(jù)配置內(nèi)存索引,從而使得節(jié)省了第二存儲設(shè)備的CPU占用。

應(yīng)理解,第一資源空間即為上述提到的以Segment為單位的資源空間,每個(gè)Segment可以存放多條日志。

可選地,該第二存儲設(shè)備包括多個(gè)資源空間;該方法還包括:該第一存儲設(shè)備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量,該第二資源空間為該第二存儲設(shè)備的多個(gè)資源空間中任一資源空間;該第一存儲設(shè)備根據(jù)該第二資源空間的存儲容量和該標(biāo)識信息,確定該第二資源空間是否滿足該目標(biāo)日志的資源需求;該第一存儲設(shè)備在該第二資源空間滿足該目標(biāo)日志的資源需求時(shí),根據(jù)RDMA編碼方式、該目標(biāo)日志和該第二資源空間的存儲地址,生成RDMA消息,該RDMA消息包括該第二資源空間的存儲地址和該目標(biāo)日志;其中,該第一存儲設(shè)備向該第二存儲設(shè)備發(fā)送該目標(biāo)日志包括:該第一存儲設(shè)備向該第二存儲設(shè)備發(fā)送該RDMA消息;其中,該第二存儲設(shè)備鏡像存儲該目標(biāo)日志包括:該第二存儲設(shè)備根據(jù)該RDMA消息,將該目標(biāo)日志存儲到該第二資源空間中。

具體而言,第二存儲設(shè)備包括多個(gè)資源空間,第二存儲設(shè)備可以隨意發(fā)送任意一個(gè)資源空間的存儲容量和存儲地址。第一存儲設(shè)備獲取到第二存儲設(shè)備中多個(gè)資源空間中任意一個(gè)資源空間(表示為第二資源空間)的存儲地址和存儲容量,并根據(jù)該第二資源空間的存儲容量和目標(biāo)日志的標(biāo)識信息確定第二資源空間是否滿足目標(biāo)日志的資源需求,相應(yīng)地,第二資源空間也是上述提到的Segment資源空間。由于目標(biāo)日志的標(biāo)識信息包括目標(biāo)數(shù)據(jù)的資源大小(即存儲目標(biāo)日志所需的資源),因此第一存儲設(shè)備可以通過比較標(biāo)識信息中目標(biāo)數(shù)據(jù)的資源大小與第二資源空間的存儲容量確定第二資源空間是否能夠滿足目標(biāo)日志的資源需求。

該第一存儲設(shè)備在該第二資源空間滿足該目標(biāo)日志的資源需求時(shí),根據(jù)RDMA編碼方式、該目標(biāo)日志和該第二資源空間的存儲地址,生成RDMA消息,該RDMA消息包括該第二資源空間的存儲地址和該目標(biāo)日志,第一存儲設(shè)備向第二存儲設(shè)備發(fā)送該RDMA消息,第二存儲設(shè)備的第二資源空間接收到RDMA消息后,解析得到目標(biāo)日志,并將目標(biāo)日志直接存儲到第二資源空間中。第二存儲設(shè)備在將目標(biāo)日志鏡像存儲到第二資源空間之后,就可以向第一存儲設(shè)備返回鏡像存儲完成消息。本申請實(shí)施例相比第二存儲設(shè)備接收目標(biāo)日志,并需要為目標(biāo)日志選擇合適的資源空間,能夠更進(jìn)一步節(jié)省了第二存儲設(shè)備的CPU的占用。

例如,如圖2所示,第一存儲設(shè)備通過RDMA技術(shù),可以將目標(biāo)日志從資源層132a直接發(fā)送到資源層132b。

可選地,作為一個(gè)實(shí)施例,該第一存儲設(shè)備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量包括:該第一存儲設(shè)備向該第二存儲設(shè)備發(fā)送資源請求消息,該資源請求消息用于請求存儲該目標(biāo)日志的該第二資源空間;該第一存儲設(shè)備接收該第二存儲設(shè)備根據(jù)該資源請求消息發(fā)送的資源請求響應(yīng)消息,該資源請求響應(yīng)消息攜帶該第二資源空間的存儲地址和該第二資源空間的存儲容量。

具體而言,第一存儲設(shè)備可以向第二存儲設(shè)備發(fā)送資源請求,以獲取第二存儲設(shè)備的資源空間的存儲地址以及該資源空間的剩余資源大小(即該資源空間中還能夠?qū)懭攵啻蟮臄?shù)據(jù))。第一存儲設(shè)備可以向第二存儲設(shè)備發(fā)送資源請求消息,第二存儲設(shè)備在多個(gè)資源空間中選擇任意一個(gè)資源空間(表示為第二資源空間),并向第一存儲設(shè)備發(fā)送資源請求響應(yīng)消息,且在資源請求響應(yīng)消息中攜帶該第二資源空間的存儲地址和該第二資源空間的剩余容量,從而使得第一存儲設(shè)備能夠?yàn)槟繕?biāo)日志選擇合適的資源空間。

應(yīng)理解,本申請實(shí)施例中,第一存儲設(shè)備可以只獲取一次第二存儲設(shè)備的資源空間的地址和存儲容量,直至該資源空間沒有剩余資源,或者剩余資源不能夠滿足當(dāng)前待寫入數(shù)據(jù)的大小,然后才進(jìn)行下一次獲取第二存儲設(shè)備的資源空間的地址和存儲容量。

可選地,作為一個(gè)實(shí)施例,該方法還包括:該第一存儲設(shè)備為該目標(biāo)數(shù)據(jù)配置內(nèi)存索引;該第一存儲設(shè)備根據(jù)該內(nèi)存索引,確定存儲該目標(biāo)數(shù)據(jù)的該第一存儲設(shè)備的資源空間,其中,該第一存儲設(shè)備的資源空間的存儲地址對應(yīng)于該內(nèi)存索引;該第一存儲設(shè)備將該目標(biāo)數(shù)據(jù)寫入該第一存儲設(shè)備的資源空間中。

第一存儲設(shè)備在完成存儲目標(biāo)日志,以及接收到第二存儲設(shè)備返回的存儲完成消息后,向IO設(shè)備發(fā)送寫請求響應(yīng)消息。由于根據(jù)內(nèi)存索引讀取目標(biāo)數(shù)據(jù)比較快,因此,在此之后,第一存儲設(shè)備還可以為目標(biāo)數(shù)據(jù)配置內(nèi)存索引,該內(nèi)存索引用于標(biāo)識目標(biāo)數(shù)據(jù)(例如,目標(biāo)數(shù)據(jù)的大小、類型等),并根據(jù)該內(nèi)存索引為目標(biāo)數(shù)據(jù)申請存儲資源(表示為第一存儲設(shè)備的資源空間,該第一存儲設(shè)備也可以包括多個(gè)存儲空間),且配置已經(jīng)申請的存儲資源的存儲地址與內(nèi)存索引的映射關(guān)系,該映射關(guān)系用于后續(xù)第一存儲設(shè)備能夠根據(jù)內(nèi)存索引讀取到對應(yīng)的存儲地址中存儲的數(shù)據(jù),最后將目標(biāo)數(shù)據(jù)寫入到存儲地址對應(yīng)的資源空間中,這樣第一存儲設(shè)備將目標(biāo)數(shù)據(jù)存儲到有內(nèi)存索引對應(yīng)的資源空間中,并不會延長影響返回寫請求響應(yīng)消息的時(shí)間。

應(yīng)理解,該目標(biāo)數(shù)據(jù)可以是寫請求中攜帶的目標(biāo)數(shù)據(jù),也可以是解析目標(biāo)日志獲得的目標(biāo)數(shù)據(jù),本申請對此不進(jìn)行限定。

還應(yīng)理解,第一存儲設(shè)備也可以不存儲目標(biāo)日志,而是直接將目標(biāo)數(shù)據(jù)寫入內(nèi)存索引對應(yīng)的資源空間中;或者,第一存儲設(shè)備寫入目標(biāo)日志后,再進(jìn)行將目標(biāo)數(shù)據(jù)寫入內(nèi)存索引對應(yīng)的資源空間中之后,才發(fā)送寫請求響應(yīng)消息。本申請對此不進(jìn)行限定。

第二存儲設(shè)備存儲目標(biāo)日志用于在第一存儲設(shè)備故障時(shí),第二存儲設(shè)備可以接管第一存儲設(shè)備當(dāng)前服務(wù)的數(shù)據(jù)存儲,具體故障現(xiàn)象有如下幾種:

在第一存儲設(shè)備故障時(shí),第二存儲設(shè)備檢測到該故障后,第二存儲設(shè)備接管數(shù)據(jù)存儲。這時(shí),第二存儲設(shè)備需要進(jìn)行目標(biāo)日志回放,日志回放是指解析目標(biāo)日志以獲取有效的目標(biāo)數(shù)據(jù)(即將目標(biāo)數(shù)據(jù)逐條讀出),為目標(biāo)數(shù)據(jù)配置內(nèi)存索引,并將目標(biāo)數(shù)據(jù)存儲到對應(yīng)的資源空間中(即表示日志回放結(jié)束),該資源空間為內(nèi)存索引對應(yīng)的存儲地址,該存儲地址對應(yīng)的資源空間;此后,第二存儲設(shè)備才能夠處理數(shù)據(jù)存儲業(yè)務(wù)。

在第一存儲設(shè)備故障后快速恢復(fù),第一存儲設(shè)備可以直接重啟回放日志,之后,第一存儲設(shè)備才能夠處理數(shù)據(jù)存儲業(yè)務(wù)。

在第一存儲設(shè)備和第二存儲設(shè)備都故障的情況下,重啟后,第一存儲設(shè)備可以與第二存儲設(shè)備競爭主存儲設(shè)備(即接管當(dāng)前數(shù)據(jù)存儲),競爭為主存儲設(shè)備后,回放日志。此后,第二存儲設(shè)備才能夠處理數(shù)據(jù)存儲業(yè)務(wù),不會造成內(nèi)存數(shù)據(jù)的丟失,提供了數(shù)據(jù)存儲的可靠性。。

應(yīng)理解,在本申請的各種實(shí)施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本申請實(shí)施例的實(shí)施過程構(gòu)成任何限定。

因此,本申請實(shí)施例的數(shù)據(jù)存儲的方法,第一存儲設(shè)備通過接收攜帶目標(biāo)數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標(biāo)數(shù)據(jù)生成包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,并向該第二存儲設(shè)備發(fā)送該目標(biāo)日志,第二存儲設(shè)備鏡像存儲該目標(biāo)日志,且鏡像存儲該目標(biāo)日志不需要配置內(nèi)存索引,這樣第一存儲設(shè)備生成包括標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,第二存儲設(shè)備可以存儲目標(biāo)日志不需要配置內(nèi)存索引,從而減少了對第二存儲設(shè)備的CPU的占用。

圖8示出了根據(jù)本申請一個(gè)實(shí)施例的數(shù)據(jù)存儲的方法的交互流程圖。本申請實(shí)施例中的各種術(shù)語的含義與前述各實(shí)施例相同。

應(yīng)注意,這只是為了幫助本領(lǐng)域技術(shù)人員更好地理解本申請實(shí)施例,而非限制本申請實(shí)施例的范圍。

801、第一存儲設(shè)備接收寫請求消息,該寫請求消息攜帶目標(biāo)數(shù)據(jù)。

802、第一存儲設(shè)備根據(jù)目標(biāo)數(shù)據(jù)生成相應(yīng)的目標(biāo)日志,目標(biāo)日志包括目標(biāo)數(shù)據(jù)和用于標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息。

803、第一存儲設(shè)備獲取第二存儲設(shè)備的資源空間(表示為第二資源空間)的存儲地址和資源空間的存儲容量。

804、第一存儲設(shè)備根據(jù)第二資源空間的存儲容量和標(biāo)識信息,確定獲取的第二資源空間的存儲容量是否能夠滿足目標(biāo)日志的資源需求。

805、第一存儲設(shè)備在確定獲取的第二資源空間的存儲容量能夠滿足目標(biāo)日志的資源需求,根據(jù)目標(biāo)日志、RDMA編碼方式、第二資源空間的存儲地址生成RDMA消息。

806、第一存儲設(shè)備向第二存儲設(shè)備發(fā)送RDMA消息。

807、第二存儲設(shè)備根據(jù)RDMA消息,將目標(biāo)日志直接存儲到存儲地址對應(yīng)的第二資源空間中。

可選地,第一存儲設(shè)備可以直接向第二存儲設(shè)備發(fā)送目標(biāo)日志,由第二存儲設(shè)備來確定能夠存儲目標(biāo)日志的資源空間,這樣可以不需要步驟803至807。

808、第二存儲設(shè)備在完成目標(biāo)日志的鏡像存儲后,向第一存儲設(shè)備發(fā)送存儲完成消息。

809、第一存儲設(shè)備在本地存儲目標(biāo)日志。

步驟808和步驟809可以沒有先后關(guān)系,本申請對此不進(jìn)行限定。

810、第一存儲設(shè)備在本地完成存儲目標(biāo)日志,且接收到存儲完成消息之后,向IO設(shè)備返回寫請求響應(yīng)消息。

811、第一存儲設(shè)備在本地為目標(biāo)數(shù)據(jù)配置對應(yīng)的內(nèi)存索引,該內(nèi)存索引用于標(biāo)識目標(biāo)數(shù)據(jù)。

812、第一存儲設(shè)備根據(jù)該內(nèi)存索引,確定存儲目標(biāo)數(shù)據(jù)的第一存儲設(shè)備的資源空間。

813、第一存儲設(shè)備將目標(biāo)數(shù)據(jù)存儲到確定的第一存儲設(shè)備的資源空間中。

應(yīng)理解,上述相應(yīng)信息的具體指示方式可參考前述各實(shí)施例,為了簡潔,在此不再贅述。

因此,本申請實(shí)施例的數(shù)據(jù)存儲的方法,第一存儲設(shè)備通過接收攜帶目標(biāo)數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標(biāo)數(shù)據(jù)生成包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,獲取第二存儲設(shè)備的第二資源空間,在第二資源空間滿足目標(biāo)日志的資源需求時(shí),根據(jù)目標(biāo)日志、RDMA編碼方式和第二資源空間的存儲地址生成RDMA消息,并向該第二存儲設(shè)備發(fā)送該目標(biāo)日志,第二存儲設(shè)備根據(jù)RDMA消息將目標(biāo)日志直接存儲到第二資源空間中,且存儲該目標(biāo)日志不需要配置內(nèi)存索引,這樣第一存儲設(shè)備生成包括標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,并通過發(fā)送RDMA消息直接將目標(biāo)日志存儲在滿足資源需求的存儲空間中,第二存儲設(shè)備存儲目標(biāo)日志可以不需要配置內(nèi)存索引,從而減少了對第二存儲設(shè)備的CPU的占用。

應(yīng)理解,在本申請的各種實(shí)施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本申請實(shí)施例的實(shí)施過程構(gòu)成任何限定。

上文中詳細(xì)描述了根據(jù)本申請實(shí)施例的數(shù)據(jù)存儲的方法,下面將描述根據(jù)本申請實(shí)施例的存儲設(shè)備。

圖9示出了根據(jù)本申請實(shí)施例的存儲系統(tǒng)900的示意性框圖,該存儲系統(tǒng)包括第一存儲設(shè)備910和至少一個(gè)第二存儲設(shè)備920,其中,該第二存儲設(shè)備920為該第一存儲設(shè)備910的鏡像存儲設(shè)備,該存儲系統(tǒng)900用于執(zhí)行圖7所述的數(shù)據(jù)存儲的方法,該存儲系統(tǒng)900包括:

該第一存儲設(shè)備910,用于接收寫請求消息,該寫請求消息攜帶目標(biāo)數(shù)據(jù),根據(jù)該目標(biāo)數(shù)據(jù)生成目標(biāo)日志,并向該第二存儲設(shè)備920發(fā)送該目標(biāo)日志,該目標(biāo)日志包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息;

該第二存儲設(shè)備920,用于存儲該目標(biāo)日志,且該存儲該目標(biāo)日志不需要配置內(nèi)存索引。

因此,本申請實(shí)施例的存儲系統(tǒng),第一存儲設(shè)備通過接收攜帶目標(biāo)數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標(biāo)數(shù)據(jù)生成包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,并向該第二存儲設(shè)備發(fā)送該目標(biāo)日志,第二存儲設(shè)備鏡像存儲該目標(biāo)日志,且鏡像存儲該目標(biāo)日志不需要配置內(nèi)存索引,這樣第一存儲設(shè)備生成包括標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,第二存儲設(shè)備可以存儲目標(biāo)日志不需要配置內(nèi)存索引,從而減少了對第二存儲設(shè)備的CPU的占用。

可選地,在本申請一個(gè)實(shí)施例中,該第二存儲設(shè)備920還用于在完成存儲該目標(biāo)日志時(shí),向該第一存儲設(shè)備910發(fā)送存儲完成消息;

該第一存儲設(shè)備910還用于存儲該目標(biāo)日志,并在完成該目標(biāo)日志的存儲和接收到該存儲完成消息之后,發(fā)送寫請求響應(yīng)消息。

可選地,在本申請一個(gè)實(shí)施例中,該第二存儲設(shè)備920包括多個(gè)資源空間;

該第二存儲設(shè)備920具體用于:

根據(jù)該標(biāo)識信息,確定存儲該目標(biāo)日志的第一資源空間,該第一資源空間為該第二存儲設(shè)備920的多個(gè)資源空間中滿足該目標(biāo)日志的資源需求的任一資源空間;

將該目標(biāo)日志存儲到該第一資源空間中。

可選地,在本申請一個(gè)實(shí)施例中,該第二存儲設(shè)備920包括多個(gè)資源空間;

該第一存儲設(shè)備910,還用于獲取第二資源空間的存儲地址和該第二資源空間的存儲容量,根據(jù)該第二資源空間的存儲容量和該標(biāo)識信息確定該第二資源空間是否滿足該目標(biāo)日志的資源需求,并在該第二資源空間滿足該目標(biāo)日志的資源需求時(shí)根據(jù)遠(yuǎn)程直接數(shù)據(jù)存取RDMA編碼方式、該目標(biāo)日志和該第二資源空間的存儲地址生成RDMA消息,以及向該第二存儲設(shè)備920的第二資源空間發(fā)送該RDMA消息,該第二資源空間為該第二存儲設(shè)備920的多個(gè)資源空間中任一資源空間,該RDMA消息包括該第二資源空間的存儲地址和該目標(biāo)日志;

該第二存儲設(shè)備920,還用于通過該第二資源空間根據(jù)該RDMA消息,存儲該目標(biāo)日志。

可選地,在本申請一個(gè)實(shí)施例中,該第一存儲設(shè)備910,還用于向該第二存儲設(shè)備920發(fā)送資源請求消息,并接收該第二存儲設(shè)備920根據(jù)該資源請求消息發(fā)送的資源請求響應(yīng)消息,該資源請求消息用于請求存儲該目標(biāo)日志的該第二資源空間,該資源請求響應(yīng)消息攜帶該第二資源空間的存儲地址和該第二資源空間的存儲容量。

可選地,在本申請一個(gè)實(shí)施例中,該第一存儲設(shè)備910,還用于為該目標(biāo)數(shù)據(jù)配置內(nèi)存索引,并根據(jù)該內(nèi)存索引確定存儲該目標(biāo)數(shù)據(jù)的該第一存儲設(shè)備的資源空間,以及將該目標(biāo)數(shù)據(jù)寫入該第一存儲設(shè)備的資源空間中,其中,該第一存儲設(shè)備的資源空間的存儲地址對應(yīng)于該內(nèi)存索引。

因此,本申請實(shí)施例的存儲系統(tǒng),第一存儲設(shè)備通過接收攜帶目標(biāo)數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標(biāo)數(shù)據(jù)生成包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,并向該第二存儲設(shè)備發(fā)送該目標(biāo)日志,第二存儲設(shè)備鏡像存儲該目標(biāo)日志,且鏡像存儲該目標(biāo)日志不需要配置內(nèi)存索引,這樣第一存儲設(shè)備生成包括標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,第二存儲設(shè)備可以存儲目標(biāo)日志不需要配置內(nèi)存索引,從而減少了對第二存儲設(shè)備的CPU的占用。

根據(jù)本申請實(shí)施例的存儲系統(tǒng)900可對應(yīng)于根據(jù)本申請實(shí)施例圖7或圖8的數(shù)據(jù)存儲的方法的存儲系統(tǒng),并且存儲系統(tǒng)900中的各個(gè)模塊的上述和其它操作和/或功能分別為了實(shí)現(xiàn)前述各個(gè)方法的相應(yīng)流程,為了簡潔,在此不再贅述。

圖10示出了本申請的實(shí)施例提供的存儲系統(tǒng)的結(jié)構(gòu),包括至少一個(gè)處理器1002(例如CPU),至少一個(gè)網(wǎng)絡(luò)接口1005或者其他通信接口,至少一個(gè)存儲器1006,和至少一個(gè)通信總線1003,用于實(shí)現(xiàn)這些裝置之間的連接通信。處理器1002用于執(zhí)行存儲器1006中存儲的可執(zhí)行模塊,例如計(jì)算機(jī)程序。存儲器1006可能包含高速隨機(jī)存取存儲器(Random Access Memory,RAM),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個(gè)磁盤存儲器。通過至少一個(gè)網(wǎng)絡(luò)接口1005(可以是有線或者無線)實(shí)現(xiàn)與至少一個(gè)其他網(wǎng)元之間的通信連接。

在一些實(shí)施方式中,存儲器1006存儲了程序10061,處理器1002執(zhí)行程序10061,用于執(zhí)行以下操作:

通過網(wǎng)絡(luò)接口1005接收寫請求消息,該寫請求消息攜帶目標(biāo)數(shù)據(jù);

根據(jù)該目標(biāo)數(shù)據(jù),生成目標(biāo)日志,該目標(biāo)日志包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息;

通過網(wǎng)絡(luò)接口1005向第二存儲設(shè)備發(fā)送該目標(biāo)日志;

存儲所述目標(biāo)日志,且所述存儲所述目標(biāo)日志不需要配置內(nèi)存索引。

需要說明的是,該存儲系統(tǒng)可以用于執(zhí)行上述圖7或圖8所示的方法實(shí)施例中的各個(gè)步驟和/或流程。

從本申請實(shí)施例提供的以上技術(shù)方案可以看出,第一存儲設(shè)備通過接收攜帶目標(biāo)數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標(biāo)數(shù)據(jù)生成包括該目標(biāo)數(shù)據(jù)和用于標(biāo)識該目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,并向該第二存儲設(shè)備發(fā)送該目標(biāo)日志,第二存儲設(shè)備鏡像存儲該目標(biāo)日志,且鏡像存儲該目標(biāo)日志不需要配置內(nèi)存索引,這樣第一存儲設(shè)備生成包括標(biāo)識目標(biāo)數(shù)據(jù)的標(biāo)識信息的目標(biāo)日志,第二存儲設(shè)備可以存儲目標(biāo)日志不需要配置內(nèi)存索引,從而減少了對第二存儲設(shè)備的CPU的占用。

本申請實(shí)施例還提供一種計(jì)算機(jī)存儲介質(zhì),該計(jì)算機(jī)存儲介質(zhì)可以存儲用于指示上述任一種方法的程序指令。

可選地,該存儲介質(zhì)具體可以為存儲器1106。

應(yīng)理解,本申請中的具體的例子只是為了幫助本領(lǐng)域技術(shù)人員更好地理解本申請實(shí)施例,而非限制本申請實(shí)施例的范圍。

應(yīng)理解,本文中術(shù)語“和/或”,僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:單獨(dú)存在A,同時(shí)存在A和B,單獨(dú)存在B這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。

應(yīng)理解,在本申請的各種實(shí)施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本申請實(shí)施例的實(shí)施過程構(gòu)成任何限定。

本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本申請的范圍。

所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。

在本申請所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,該單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。

另外,在本申請各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。

所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲在一個(gè)計(jì)算機(jī)可讀取存儲介質(zhì)中。基于這樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

以上所述,僅為本申請的具體實(shí)施方式,但本申請的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本申請揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本申請的保護(hù)范圍之內(nèi)。因此,本申請的保護(hù)范圍應(yīng)以該權(quán)利要求的保護(hù)范圍為準(zhǔn)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1