本申請涉及計算機存儲領域,并且更具體地,涉及數(shù)據(jù)存儲的方法和存儲系統(tǒng)。
背景技術(shù):
鏡像是冗余的一種類型,一個磁盤上的數(shù)據(jù)在另一個磁盤上存在一個完全相同的副本即為鏡像。在服務器上常用鏡像操作是組建獨立磁盤冗余陣列(Redundant Array Of Independent Disks,RAID)1,RAID1是將一個兩塊硬盤所構(gòu)成的RAID磁盤陣列,其容量僅等于一個硬盤的容量,因為另一塊只是當作數(shù)據(jù)“鏡像”。
在分布式存儲系統(tǒng)中,為了達到可靠性的要求,選擇在節(jié)點間使用鏡像機制。將本地數(shù)據(jù),復制一份在鏡像節(jié)點保存,在故障情況下,快速恢復業(yè)務。
在現(xiàn)有技術(shù)中,待存儲數(shù)據(jù)發(fā)送到鏡像節(jié)點,鏡像節(jié)點需要為待存儲數(shù)據(jù)配置內(nèi)存索引,內(nèi)存索引用于方便讀取該鏡像節(jié)點存儲的數(shù)據(jù);之后鏡像節(jié)點需要申請資源空間,并設置資源空間的存儲地址與內(nèi)存索引的映射關系;最后將待存儲數(shù)據(jù)存儲到存儲地址對應的資源空間中?,F(xiàn)有技術(shù)鏡像節(jié)點存儲待存儲數(shù)據(jù)的上述操作對鏡像節(jié)點的中央處理器(Central Processing Unit,CPU)的占用較高。
技術(shù)實現(xiàn)要素:
本申請實施例提供一種數(shù)據(jù)存儲的方法和存儲系統(tǒng),能夠減少鏡像存儲設備存儲數(shù)據(jù)對CPU的占用。
第一方面,本申請實施例提供了一種數(shù)據(jù)存儲的方法,該方法應用于包括第一存儲設備和至少一個第二存儲設備的存儲系統(tǒng),其中,該第二存儲設備為該第一存儲設備的鏡像存儲設備,該方法包括:第一存儲設備接收寫請求消息,該寫請求消息攜帶目標數(shù)據(jù);該第一存儲設備根據(jù)該目標數(shù)據(jù),生成目標日志,該目標日志包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息;該第一存儲設備向該第二存儲設備發(fā)送該目標日志;該第二存儲設備存儲該目標日志,且該存儲該目標日志不需要配置內(nèi)存索引。
本申請實施例應用于包括第一存儲設備和至少一個第二存儲設備的存儲系統(tǒng)中,且第二存儲設備為一類第一存儲設備的鏡像存儲設備。第一存儲設備接收寫請求消息,寫請求消息中攜帶待寫的數(shù)據(jù)(表示為目標數(shù)據(jù)),根據(jù)該目標數(shù)據(jù),生成相應的目標日志,并向第二存儲設備發(fā)送該目標日志將該目標日志直接存儲到第二存儲設備中,由于該目標日志包括用于表示該目標數(shù)據(jù)的標識信息,這樣第二存儲設備存儲該目標日志時并不需要創(chuàng)建內(nèi)存索引,相比現(xiàn)有技術(shù)中,第二存儲設備需要配置內(nèi)存索引而言,本申請可以直接存儲該目標日志,從而節(jié)省了第二存儲設備配置內(nèi)存索引時對CPU的占用。
在一些可能的實現(xiàn)方式中,該方法還包括:該第二存儲設備在完成存儲該目標日志時,向該第一存儲設備發(fā)送存儲完成消息;該第一存儲設備存儲該目標日志;該第一存儲設備在完成該目標日志的存儲和接收到該存儲完成消息之后,發(fā)送寫請求響應消息。
第一存儲設備完成寫入目標日志,且接收到第二存儲設備發(fā)送的存儲完成消息之后,向IO設備發(fā)送寫請求響應消息,這樣避免現(xiàn)有技術(shù)中需要等待將目標數(shù)據(jù)存儲到內(nèi)存索引對應的資源空間之后才能向IO設備返回寫請求響應消息,從而減少了發(fā)出寫請求到收到寫請求響應消息的時延。
在一些可能的實現(xiàn)方式中,該第二存儲設備包括多個資源空間;其中,該第二存儲設備存儲該目標日志包括:該第二存儲設備根據(jù)該標識信息,確定存儲該目標日志的第一資源空間,該第一資源空間為該第二存儲設備的多個資源空間中滿足該目標日志的資源需求的任一資源空間;該第二存儲設備將該目標日志存儲到該第一資源空間中。
第二存儲設備根據(jù)該標識信息選擇合適的資源空間(表示為第一資源空間),將該目標日志存儲到第二存儲設備的第一資源空間中。此外,第二存儲設備可以根據(jù)標識信息識別目標數(shù)據(jù),以目標日志的形式可以將目標數(shù)據(jù)按照順序進行有規(guī)律的存儲,這樣第二存儲設備可以不需要為目標數(shù)據(jù)配置內(nèi)存索引,從而使得節(jié)省了第二存儲設備的CPU占用。
在一些可能的實現(xiàn)方式中,該第二存儲設備包括多個資源空間;該方法還包括:該第一存儲設備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量,該第二資源空間為該第二存儲設備的多個資源空間中任一資源空間;該第一存儲設備根據(jù)該第二資源空間的存儲容量和該標識信息,確定該第二資源空間是否滿足該目標日志的資源需求;該第一存儲設備在該第二資源空間滿足該目標日志的資源需求時,根據(jù)RDMA編碼方式、該目標日志和該第二資源空間的存儲地址,生成RDMA消息,該RDMA消息包括該第二資源空間的存儲地址和該目標日志;其中,該第一存儲設備向該第二存儲設備發(fā)送該目標日志包括:該第一存儲設備向該第二存儲設備的第二資源空間發(fā)送該RDMA消息;其中,該第二存儲設備存儲該目標日志包括:該第二存儲設備的第二資源空間根據(jù)該RDMA消息,存儲該目標日志。
第二存儲設備在將目標日志存儲到第二資源空間之后,就可以向第一存儲設備返回存儲完成消息。本申請實施例相比第二存儲設備接收目標日志,并需要為目標日志選擇合適的資源空間,能夠更進一步節(jié)省了第二存儲設備的CPU的占用。
在一些可能的實現(xiàn)方式中,該第一存儲設備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量包括:該第一存儲設備向該第二存儲設備發(fā)送資源請求消息,該資源請求消息用于請求存儲該目標日志的該第二資源空間;該第一存儲設備接收該第二存儲設備根據(jù)該資源請求消息發(fā)送的資源請求響應消息,該資源請求響應消息攜帶該第二資源空間的存儲地址和該第二資源空間的存儲容量。
第一存儲設備可以向第二存儲設備發(fā)送資源請求消息,第二存儲設備在多個資源空間中選擇任意一個資源空間(表示為第二資源空間),并向第一存儲設備發(fā)送資源請求響應消息,且在資源請求響應消息中攜帶該第二資源空間的存儲地址和該第二資源空間的剩余容量,從而使得第一存儲設備能夠為目標日志選擇合適的資源空間。第一存儲設備可以只獲取一次第二存儲設備的資源空間的地址和存儲容量,直至該資源空間沒有剩余資源,或者剩余資源不能夠滿足當前待寫入數(shù)據(jù)的大小,然后才進行下一次獲取第二存儲設備的資源空間的地址和存儲容量。
在一些可能的實現(xiàn)方式中,該方法還包括:該第一存儲設備為該目標數(shù)據(jù)配置內(nèi)存索引;該第一存儲設備根據(jù)該內(nèi)存索引,確定存儲該目標數(shù)據(jù)的該第一存儲設備的資源空間,其中,該第一存儲設備的資源空間的存儲地址對應于該內(nèi)存索引;該第一存儲設備將該目標數(shù)據(jù)寫入該第一存儲設備的資源空間中。
第一存儲設備為目標數(shù)據(jù)配置內(nèi)存索引,以及為目標數(shù)據(jù)申請存儲資源(表示為第一存儲設備的資源空間),且配置已經(jīng)申請的存儲資源的存儲地址與內(nèi)存索引的映射關系,該映射關系用于后續(xù)第一存儲設備能夠根據(jù)內(nèi)存索引讀取到對應的存儲地址中存儲的數(shù)據(jù),最后將目標數(shù)據(jù)寫入到存儲地址對應的資源空間中。這樣第一存儲設備將目標數(shù)據(jù)存儲到有內(nèi)存索引對應的資源空間中,并不會延長影響返回寫請求響應消息的時間。
第二方面,本申請實施例提供了一種存儲系統(tǒng),該存儲系統(tǒng)可以實現(xiàn)上述方面所涉及方法中第一存儲設備和第二存儲設備所執(zhí)行的功能,所述功能可以通過硬件實現(xiàn),也可以通過硬件執(zhí)行相應的軟件實現(xiàn)。所述硬件或軟件包括一個或多個上述功能相應的單元或模塊。
第三方面,提供了一種存儲系統(tǒng),該存儲系統(tǒng)的結(jié)構(gòu)中包括存儲器,該處理器被配置為支持上述方面所涉及方法中第一存儲設備和第二存儲設備所執(zhí)行的功能。該通信接口用于支持該第一存儲設備、第二存儲設備與其它網(wǎng)元之間的通信。該存儲器用于與處理器耦合,其保存該第一存儲設備、該第二存儲設備必要的程序指令和數(shù)據(jù)。
第四方面,提供了一種計算機存儲介質(zhì),該計算機存儲介質(zhì)中存儲有程序代碼,該程序代碼用于指示執(zhí)行上述存儲系統(tǒng)所用的計算機軟件指令,其包含用于執(zhí)行上述方面所設計的程序。
基于上述技術(shù)方案,第一存儲設備通過接收攜帶目標數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標數(shù)據(jù)生成包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息的目標日志,并向該第二存儲設備發(fā)送該目標日志,第二存儲設備存儲該目標日志,且存儲該目標日志不需要配置內(nèi)存索引,這樣第一存儲設備生成包括標識目標數(shù)據(jù)的標識信息的目標日志,第二存儲設備可以存儲目標日志不需要配置內(nèi)存索引,從而減少了對第二存儲設備的CPU的占用。
附圖說明
為了更清楚地說明本申請實施例的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請實施例的存儲系統(tǒng)的架構(gòu)示意圖;
圖2是本申請實施例的存儲節(jié)點和管理節(jié)點的結(jié)構(gòu)示意圖;
圖3是本申請實施例Cache模塊的工作流程圖;
圖4a、圖4b和圖4c是本申請實施例的日志格式的示意圖;
圖5是本申請實施例的資源空間的結(jié)構(gòu)示意圖;
圖6是現(xiàn)有技術(shù)數(shù)據(jù)存儲的方法的示意性流程圖;
圖7是本申請一個實施例的數(shù)據(jù)存儲的方法的示意性流程圖;
圖8是本申請另一個實施例的數(shù)據(jù)存儲的方法的示意性流程圖;
圖9是本申請實施例的存儲系統(tǒng)的示意性框圖;
圖10是本申請實施例的存儲系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
圖1示出了本申請實施例的存儲系統(tǒng)的架構(gòu)示意圖。如圖1所示,該存儲系統(tǒng)包括節(jié)點和網(wǎng)絡。其中,節(jié)點分為用戶節(jié)點(可以有多個用戶節(jié)點:用戶節(jié)點200a、用戶節(jié)點200b、用戶節(jié)點200c和用戶節(jié)點200d)、存儲節(jié)點(可以有多個存儲節(jié)點:存儲節(jié)點100a、存儲節(jié)點100b、存儲節(jié)點100c和存儲節(jié)點100d)和管理節(jié)點300。網(wǎng)絡分為用于承載用戶輸入輸出(Input/Output,IO)數(shù)據(jù)的前端網(wǎng)絡400和用于承載業(yè)務數(shù)據(jù)的后端網(wǎng)絡500。本申請實施例中的業(yè)務數(shù)據(jù)可以是指支持RDMA的鏡像數(shù)據(jù)。
用戶節(jié)點用于在前端接收用戶IO數(shù)據(jù),通過前端網(wǎng)絡轉(zhuǎn)發(fā)給存儲節(jié)點。存儲節(jié)點用于存儲用戶業(yè)務數(shù)據(jù),同時高速緩沖存儲器(Cache)功能也在存儲節(jié)點上。管理節(jié)點用于負責維護存儲節(jié)點間的鏡像關系。
圖2示出了存儲節(jié)點和管理節(jié)點的結(jié)構(gòu)示意圖。其中,存儲節(jié)點可以區(qū)分IO的主存儲節(jié)點(以圖1中的100a為例)和IO的鏡像存儲節(jié)點(以圖1中的100b為例)。IO的主節(jié)點100a主要包括前端IO模塊110a、后端磁盤模塊120a和Cache模塊130a。前端IO模塊110a用于負責用戶IO接收、IO流控以及IO錯誤處理。后端磁盤模塊120a用于提供用戶業(yè)務數(shù)據(jù)通過磁盤讀寫功能。Cache模塊130a分為日志層131a、資源層132a和本地存儲133a。管理節(jié)點300包括鏡像管理模塊310,鏡像管理模塊310用于在管理節(jié)點上負責維護節(jié)點間鏡像關系,并通知Cache模塊130。鏡像存儲節(jié)點100b的結(jié)構(gòu)與主存儲節(jié)點100a的結(jié)構(gòu)相同,在此不再贅述。
圖3示出了Cache模塊130a的內(nèi)部工作流程。日志層131a接收前端IO模塊110a發(fā)送的IO數(shù)據(jù),并將IO數(shù)據(jù)轉(zhuǎn)換為日志形式(例如,預寫日志(Write-ahead logging,WAL log)格式的數(shù)據(jù))發(fā)送給資源層132a;資源層132a負責資源(例如,非易失性的雙列內(nèi)存模塊(Non-Volatile Dual In-line Memory Module,NVDIMM)資源)的空間分配,并將日志發(fā)送到鏡像節(jié)點110b進行存儲。主存儲節(jié)點100a接收到存儲完成消息,本地存儲133a在本地存儲日志。
為了方便理解本申請實施例,首先在此介紹本申請實施例之前引入以下幾個要素。
遠程直接數(shù)據(jù)存取(Remote Direct Memory Access,RDMA)通過網(wǎng)絡將數(shù)據(jù)直接傳入鏡像節(jié)點的存儲區(qū),而不對操作系統(tǒng)造成任何影響,這樣就可以減少鏡像端的CPU的開銷。具體RDMA實現(xiàn)是通過發(fā)送方和接收方針對目的緩存區(qū)的位置進行協(xié)商,與傳統(tǒng)的TCP連接不同的是要對傳統(tǒng)傳輸控制協(xié)議(Transmission Control Protocol,TCP)頭部數(shù)據(jù)結(jié)構(gòu)進行一些改動以支持RDMA協(xié)議,主要是增加一個表示目的地址的字段(即生成RDMA消息)。RDMA讀寫操作要求源端和目的端都知道目的緩存區(qū)的位置和大小,如果從主機的內(nèi)存通過RDMA向另一個主機內(nèi)存寫一塊數(shù)據(jù),則必須提供目的緩存區(qū)的地址,并確保這個緩存區(qū)足夠大來接收這塊數(shù)據(jù)。
WAL log日志格式分為三種類型:簡單型日志、復合型日志和命令型日志。
簡單型日志只針對元數(shù)據(jù)(即是描述數(shù)據(jù)屬性的信息,用來指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能)的一個對象的日志,或數(shù)據(jù)的一個文件的日志。在一個寫IO只包含一個Cache模塊的數(shù)據(jù)時,通常使用簡單型日志格式。簡單型日志格式如圖4a所示,包括魔術(shù)字部分、數(shù)據(jù)部分、日志頭部分和日志尾部分。魔術(shù)字部分存儲一組魔術(shù)字表示日志開始,日志頭中存放元數(shù)據(jù),日志尾中存放日志的循環(huán)冗余碼校驗(Cyclic Redundancy Check,CRC)校驗信息。
復合型日志格式如圖4b所示,在一個寫IO包含多個Cache模塊的數(shù)據(jù)時,需要轉(zhuǎn)換為多條簡單日志,再對多條簡單日志封裝一個復合日志頭,組合成一條復合型日志,來保證這多條log的一致性。這條復合型日志的數(shù)據(jù)部分存放著多條簡單日志,具體日志個數(shù)及數(shù)據(jù)長度在日志頭中保存。
命令型日志格式如圖4c所示,當一個寫命令或者其他命令的IO下發(fā)數(shù)據(jù),這部分IO攜帶的數(shù)據(jù)將不需要在Cache中保存,為了鏡像節(jié)點能夠感知到,也需要寫入一條日志,描述實現(xiàn)數(shù)據(jù)的位置以及大小。其中,命令型日志頭中描述失效范圍信息。
資源層的資源分配是指將鏡像的空間分為多個段(Segment)(通常使用8M NVDIMM空間)來管理。每個Segment可以存放多條WAL log(如圖5所示),WAL log采用連續(xù)存放方式,每條WAL log首尾相連。魔術(shù)字部分存儲一組魔術(shù)字表示一個Segment的開始,日志頭記錄Segmnet狀態(tài)是否可用以及Segment序號等描述信息。
圖6示出了現(xiàn)有技術(shù)數(shù)據(jù)存儲的方法,具體流程如下所示:
101、IO前端模塊向本地緩存模塊發(fā)送寫請求消息,該寫請求消息攜帶待寫的目標數(shù)據(jù)。
102、本地緩存模塊接收到該目標數(shù)據(jù),并將該目標數(shù)據(jù)發(fā)送給鏡像緩存模塊以使鏡像緩存模塊存儲該目標數(shù)據(jù)。
103、鏡像緩存模塊接收該目標數(shù)據(jù),并為該目標數(shù)據(jù)配置內(nèi)存索引,該內(nèi)存索引用于方便讀取該目標數(shù)據(jù),具體地,鏡像緩存模塊可以先在已有的索引表查詢是否存在該目標數(shù)據(jù)對應的內(nèi)存索引,若不存在,為該目標數(shù)據(jù)創(chuàng)建相應的內(nèi)存索引;
104、鏡像緩存模塊根據(jù)內(nèi)存索引為目標數(shù)據(jù)申請存儲資源(即配置合適的用于存儲目標數(shù)據(jù)的資源空間),且設置目標數(shù)據(jù)的內(nèi)存索引與申請的資源空間的存儲地址的映射關系,使得根據(jù)索引以及索引對應的存儲地址能夠讀取存儲空間中的數(shù)據(jù)。
105、鏡像存儲模塊將目標數(shù)據(jù)存儲到申請的資源空間中。
106、鏡像緩存模塊完成目標數(shù)據(jù)的存儲后,向本地緩存模塊發(fā)送存儲完成消息。
107、本地緩存模塊接收到鏡像緩存模塊發(fā)送的存儲完成消息后,可以開始在本地緩存中進行存儲目標數(shù)據(jù),首先為目標數(shù)據(jù)配置內(nèi)存索引。具體流程與鏡像節(jié)點存儲數(shù)據(jù)的流程(如上述步驟103和步驟104)相同,在此不進行贅述。
108、本地緩存模塊為目標數(shù)據(jù)申請存儲資源。
109、本地緩存模塊將目標數(shù)據(jù)存儲到申請的資源空間中。
110、本地緩存模塊完成目標數(shù)據(jù)的存儲后,向IO前端模塊發(fā)送寫請求響應消息。
因此,現(xiàn)有技術(shù)中,鏡像緩存模塊存儲鏡像數(shù)據(jù)時需要經(jīng)過為目標數(shù)據(jù)配置內(nèi)存索引、申請存儲資源(鏡像緩存模塊需要根據(jù)目標數(shù)據(jù)的大小、類型等各種屬性找到合適的資源空間,并配置資源空間的存儲地址與內(nèi)存索引的映射關系)和并將目標數(shù)據(jù)存儲到鏡像緩存模塊的這些步驟都需要CPU參與,從而使得鏡像存儲節(jié)點的CPU占用較高。
本申請實施例應用于第一存儲設備正常工作的情況下,第一存儲設備存儲數(shù)據(jù)以及第二存儲設備存儲數(shù)據(jù)的場景。
應理解,本申請實施例的第一存儲設備對應于上述圖2的主存儲節(jié)點100a,第二存儲設備對應于上述圖2的鏡像存儲節(jié)點100b;或者說本申請實施例的第一存儲設備就是上述圖2的主存儲節(jié)點100a,第二存儲設備就是上述圖2的鏡像存儲節(jié)點100b;或者該第一存儲設備和第二存儲設備分別為具有上述Cache模塊130a功能的設備和上述Cache模塊130b功能的設備,本申請對此不進行限定。
圖7示出了根據(jù)本申請一個實施例的數(shù)據(jù)存儲的方法的示意性流程圖。本申請實施例中的第一存儲設備可以是圖1中的存儲節(jié)點100a、100b、100c和100d中的任意一個存儲節(jié)點,第二存儲設備可以是通過管理節(jié)點300確定的主存儲節(jié)點的鏡像存儲節(jié)點。
701、第一存儲設備接收寫請求消息,該寫請求消息攜帶目標數(shù)據(jù)。
本申請實施例應用于包括第一存儲設備和至少一個第二存儲設備的存儲系統(tǒng)中,且第二存儲設備為一類第一存儲設備的鏡像存儲設備。此外,第一存儲設備也可以是第二存儲設備的鏡像存儲設備,也就是說,第一存儲設備和第二存儲設備可以互為鏡像存設備,本申請對此不進行限定。
第一存儲設備可以是圖2中的Cache模塊130a,Cache模塊130a接收IO前端模塊110a發(fā)送的寫請求消息,但本申請并不限于此。第一存儲設備接收寫請求消息,寫請求消息中攜帶待寫的數(shù)據(jù)(表示為目標數(shù)據(jù)),該目標數(shù)據(jù)可以是需要同一個緩存處理的數(shù)據(jù),也可以是需要多個緩存單元處理的數(shù)據(jù);或者該目標數(shù)據(jù)不需要在緩存中保存。
應注意,該第一存儲設備可以包括多個內(nèi)存區(qū)域、處理器、控制器、且控制器上運行著操作系統(tǒng)等,第二存儲設備可以與第一存儲設備相同,也可以不同,本申請對此不進行限定。
702、第一存儲設備根據(jù)該目標數(shù)據(jù),生成相應的目標日志。
該目標日志包括目標數(shù)據(jù)和用于標識目標數(shù)據(jù)的標識信息,該標識信息為指示目標數(shù)據(jù)屬性的各種信息。例如,日志格式如圖4a、圖4b和圖4c所示,以簡單型日志為例,簡單型日志中包括魔術(shù)字部分、數(shù)據(jù)部分和日志頭部分和日志尾部分。存儲設備能夠根據(jù)魔術(shù)字部分識別日志的開始;而日志頭中存儲元數(shù)據(jù),元數(shù)據(jù)用于指示數(shù)據(jù)存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能;日志尾部分存放日志的CRC校驗信息,保證了數(shù)據(jù)的可靠性。因此,本申請實施例中的目標日志中包括的標識信息可以是日志頭、日志尾以及魔術(shù)字部分中存儲的所有信息。
日志格式包括簡單型日志、復合型日志和命令型日志。若目標數(shù)據(jù)需要一個緩存處理,則第一存儲存儲設備將該目標數(shù)據(jù)轉(zhuǎn)換為簡單型日志;若目標數(shù)據(jù)是需要多個緩存處理,則第一存儲設備將目標數(shù)據(jù)轉(zhuǎn)換為復合型日志。若目標數(shù)據(jù)不需要在緩存中保存,則第一存儲設備將目標數(shù)據(jù)轉(zhuǎn)換為命令型日志,以描述該數(shù)據(jù)失效,以及失效數(shù)據(jù)的位置和大小。這樣第一存儲設備能夠根據(jù)目標數(shù)據(jù)需要一個緩存處理、多個緩存處理還是不需要緩存處理,為目標數(shù)據(jù)選擇生成合適的目標日志。
應理解,本申請實施例中對“緩存”和“內(nèi)存”不進行區(qū)分,也就是說,緩存和內(nèi)存都能夠?qū)崿F(xiàn)本申請實施例對數(shù)據(jù)存儲的需求,因此本申請對此不進行限定。
例如,目標數(shù)據(jù)為需要一個緩存處理的塊存儲數(shù)據(jù),塊存儲數(shù)據(jù)主要包括卷標識(volume Identity,volume ID)、塊起始地址(Logical block address,LBA)、塊個數(shù)(lengh)、用戶數(shù)據(jù)(buff)。由于目標數(shù)據(jù)需要一個緩存處理,因此,第一存儲設備將該塊存儲數(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)冗余校驗碼(Cyclic Redundancy Check,CRC)寫在日志尾。
應理解,本申請實施例中對“緩存”和“內(nèi)存”不進行區(qū)分,也就是說,緩存和內(nèi)存都能夠?qū)崿F(xiàn)本申請實施例對數(shù)據(jù)存儲的需求。
703、第一存儲設備向該第二存儲設備發(fā)送該目標日志。
第二存儲設備接收到該第一存儲設備發(fā)送的目標日志,并將目標日志存儲到第二存儲設備的內(nèi)存中。
704、第二存儲設備鏡像存儲該目標日志。
第二存儲設備接收第一存儲設備根據(jù)寫請求消息中攜帶的目標數(shù)據(jù)生成的目標日志,并將該目標日志直接存儲到第二存儲設備中,由于該目標日志包括用于表示該目標數(shù)據(jù)的標識信息,這樣第二存儲設備存儲該目標日志時并不需要創(chuàng)建內(nèi)存索引,相比現(xiàn)有技術(shù)中,第二存儲設備需要配置內(nèi)存索引而言,本申請可以直接存儲該目標日志,從而節(jié)省了第二存儲設備配置內(nèi)存索引時對CPU的占用。
可選地,作為一個實施例,第一存儲設備接收到第二存儲設備完成鏡像存儲目標日志的存儲完成消息,保證第二存儲設備已經(jīng)成功完成寫入目標日志之后,第一存儲設備才開始在自己的緩存中寫入目標日志,這樣可以避免第二存儲設備失敗,浪費了第一存儲設備的CPU占用。第一存儲設備完成寫入目標日志,且接收到第二存儲設備發(fā)送的存儲完成消息之后,向IO設備發(fā)送寫請求響應消息,這樣避免現(xiàn)有技術(shù)中需要等待將目標數(shù)據(jù)存儲到內(nèi)存索引對應的資源空間之后才能向IO設備返回寫請求響應消息,從而減少了發(fā)出寫請求到收到寫請求響應消息的時延。
應理解,發(fā)送寫請求消息和接收寫請求響應消息的設備可以是IO設備也可以是其他設備,為描述方便以IO設備為例進行說明,但本申請并不限于此。
可選地,第一存儲設備沒有接收到存儲完成消息之前,第一存儲設備就開始寫入該目標日志,在第一存儲設備完成寫入目標日志,且接收到第二存儲設備發(fā)送的存儲完成消息之后,向IO設備發(fā)送寫請求響應消息,這樣可以更進一步節(jié)省向IO設備返回寫請求響應消息的時間。
可選地,作為一個實施例,該第二存儲設備包括多個資源空間;其中,該第二存儲設備鏡像存儲該目標日志包括:該第二存儲設備根據(jù)該標識信息,確定存儲該目標日志的第一資源空間,該第一資源空間為該第二存儲設備的多個資源空間中滿足該目標日志的資源需求的任一資源空間;該第二存儲設備將該目標日志鏡像存儲到該第一資源空間中。
具體而言,第二存儲設備接收目標日志,該目標日志包括用于標識目標數(shù)據(jù)的標識信息,第二存儲設備根據(jù)該標識信息選擇合適的資源空間(表示為第一資源空間),將該目標日志存儲到第二存儲設備的第一資源空間中。此外,第二存儲設備可以根據(jù)標識信息識別目標數(shù)據(jù),以目標日志的形式可以將目標數(shù)據(jù)按照順序進行有規(guī)律的存儲,這樣第二存儲設備可以不需要為目標數(shù)據(jù)配置內(nèi)存索引,從而使得節(jié)省了第二存儲設備的CPU占用。
應理解,第一資源空間即為上述提到的以Segment為單位的資源空間,每個Segment可以存放多條日志。
可選地,該第二存儲設備包括多個資源空間;該方法還包括:該第一存儲設備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量,該第二資源空間為該第二存儲設備的多個資源空間中任一資源空間;該第一存儲設備根據(jù)該第二資源空間的存儲容量和該標識信息,確定該第二資源空間是否滿足該目標日志的資源需求;該第一存儲設備在該第二資源空間滿足該目標日志的資源需求時,根據(jù)RDMA編碼方式、該目標日志和該第二資源空間的存儲地址,生成RDMA消息,該RDMA消息包括該第二資源空間的存儲地址和該目標日志;其中,該第一存儲設備向該第二存儲設備發(fā)送該目標日志包括:該第一存儲設備向該第二存儲設備發(fā)送該RDMA消息;其中,該第二存儲設備鏡像存儲該目標日志包括:該第二存儲設備根據(jù)該RDMA消息,將該目標日志存儲到該第二資源空間中。
具體而言,第二存儲設備包括多個資源空間,第二存儲設備可以隨意發(fā)送任意一個資源空間的存儲容量和存儲地址。第一存儲設備獲取到第二存儲設備中多個資源空間中任意一個資源空間(表示為第二資源空間)的存儲地址和存儲容量,并根據(jù)該第二資源空間的存儲容量和目標日志的標識信息確定第二資源空間是否滿足目標日志的資源需求,相應地,第二資源空間也是上述提到的Segment資源空間。由于目標日志的標識信息包括目標數(shù)據(jù)的資源大小(即存儲目標日志所需的資源),因此第一存儲設備可以通過比較標識信息中目標數(shù)據(jù)的資源大小與第二資源空間的存儲容量確定第二資源空間是否能夠滿足目標日志的資源需求。
該第一存儲設備在該第二資源空間滿足該目標日志的資源需求時,根據(jù)RDMA編碼方式、該目標日志和該第二資源空間的存儲地址,生成RDMA消息,該RDMA消息包括該第二資源空間的存儲地址和該目標日志,第一存儲設備向第二存儲設備發(fā)送該RDMA消息,第二存儲設備的第二資源空間接收到RDMA消息后,解析得到目標日志,并將目標日志直接存儲到第二資源空間中。第二存儲設備在將目標日志鏡像存儲到第二資源空間之后,就可以向第一存儲設備返回鏡像存儲完成消息。本申請實施例相比第二存儲設備接收目標日志,并需要為目標日志選擇合適的資源空間,能夠更進一步節(jié)省了第二存儲設備的CPU的占用。
例如,如圖2所示,第一存儲設備通過RDMA技術(shù),可以將目標日志從資源層132a直接發(fā)送到資源層132b。
可選地,作為一個實施例,該第一存儲設備獲取第二資源空間的存儲地址和該第二資源空間的存儲容量包括:該第一存儲設備向該第二存儲設備發(fā)送資源請求消息,該資源請求消息用于請求存儲該目標日志的該第二資源空間;該第一存儲設備接收該第二存儲設備根據(jù)該資源請求消息發(fā)送的資源請求響應消息,該資源請求響應消息攜帶該第二資源空間的存儲地址和該第二資源空間的存儲容量。
具體而言,第一存儲設備可以向第二存儲設備發(fā)送資源請求,以獲取第二存儲設備的資源空間的存儲地址以及該資源空間的剩余資源大小(即該資源空間中還能夠?qū)懭攵啻蟮臄?shù)據(jù))。第一存儲設備可以向第二存儲設備發(fā)送資源請求消息,第二存儲設備在多個資源空間中選擇任意一個資源空間(表示為第二資源空間),并向第一存儲設備發(fā)送資源請求響應消息,且在資源請求響應消息中攜帶該第二資源空間的存儲地址和該第二資源空間的剩余容量,從而使得第一存儲設備能夠為目標日志選擇合適的資源空間。
應理解,本申請實施例中,第一存儲設備可以只獲取一次第二存儲設備的資源空間的地址和存儲容量,直至該資源空間沒有剩余資源,或者剩余資源不能夠滿足當前待寫入數(shù)據(jù)的大小,然后才進行下一次獲取第二存儲設備的資源空間的地址和存儲容量。
可選地,作為一個實施例,該方法還包括:該第一存儲設備為該目標數(shù)據(jù)配置內(nèi)存索引;該第一存儲設備根據(jù)該內(nèi)存索引,確定存儲該目標數(shù)據(jù)的該第一存儲設備的資源空間,其中,該第一存儲設備的資源空間的存儲地址對應于該內(nèi)存索引;該第一存儲設備將該目標數(shù)據(jù)寫入該第一存儲設備的資源空間中。
第一存儲設備在完成存儲目標日志,以及接收到第二存儲設備返回的存儲完成消息后,向IO設備發(fā)送寫請求響應消息。由于根據(jù)內(nèi)存索引讀取目標數(shù)據(jù)比較快,因此,在此之后,第一存儲設備還可以為目標數(shù)據(jù)配置內(nèi)存索引,該內(nèi)存索引用于標識目標數(shù)據(jù)(例如,目標數(shù)據(jù)的大小、類型等),并根據(jù)該內(nèi)存索引為目標數(shù)據(jù)申請存儲資源(表示為第一存儲設備的資源空間,該第一存儲設備也可以包括多個存儲空間),且配置已經(jīng)申請的存儲資源的存儲地址與內(nèi)存索引的映射關系,該映射關系用于后續(xù)第一存儲設備能夠根據(jù)內(nèi)存索引讀取到對應的存儲地址中存儲的數(shù)據(jù),最后將目標數(shù)據(jù)寫入到存儲地址對應的資源空間中,這樣第一存儲設備將目標數(shù)據(jù)存儲到有內(nèi)存索引對應的資源空間中,并不會延長影響返回寫請求響應消息的時間。
應理解,該目標數(shù)據(jù)可以是寫請求中攜帶的目標數(shù)據(jù),也可以是解析目標日志獲得的目標數(shù)據(jù),本申請對此不進行限定。
還應理解,第一存儲設備也可以不存儲目標日志,而是直接將目標數(shù)據(jù)寫入內(nèi)存索引對應的資源空間中;或者,第一存儲設備寫入目標日志后,再進行將目標數(shù)據(jù)寫入內(nèi)存索引對應的資源空間中之后,才發(fā)送寫請求響應消息。本申請對此不進行限定。
第二存儲設備存儲目標日志用于在第一存儲設備故障時,第二存儲設備可以接管第一存儲設備當前服務的數(shù)據(jù)存儲,具體故障現(xiàn)象有如下幾種:
在第一存儲設備故障時,第二存儲設備檢測到該故障后,第二存儲設備接管數(shù)據(jù)存儲。這時,第二存儲設備需要進行目標日志回放,日志回放是指解析目標日志以獲取有效的目標數(shù)據(jù)(即將目標數(shù)據(jù)逐條讀出),為目標數(shù)據(jù)配置內(nèi)存索引,并將目標數(shù)據(jù)存儲到對應的資源空間中(即表示日志回放結(jié)束),該資源空間為內(nèi)存索引對應的存儲地址,該存儲地址對應的資源空間;此后,第二存儲設備才能夠處理數(shù)據(jù)存儲業(yè)務。
在第一存儲設備故障后快速恢復,第一存儲設備可以直接重啟回放日志,之后,第一存儲設備才能夠處理數(shù)據(jù)存儲業(yè)務。
在第一存儲設備和第二存儲設備都故障的情況下,重啟后,第一存儲設備可以與第二存儲設備競爭主存儲設備(即接管當前數(shù)據(jù)存儲),競爭為主存儲設備后,回放日志。此后,第二存儲設備才能夠處理數(shù)據(jù)存儲業(yè)務,不會造成內(nèi)存數(shù)據(jù)的丟失,提供了數(shù)據(jù)存儲的可靠性。。
應理解,在本申請的各種實施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應以其功能和內(nèi)在邏輯確定,而不應對本申請實施例的實施過程構(gòu)成任何限定。
因此,本申請實施例的數(shù)據(jù)存儲的方法,第一存儲設備通過接收攜帶目標數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標數(shù)據(jù)生成包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息的目標日志,并向該第二存儲設備發(fā)送該目標日志,第二存儲設備鏡像存儲該目標日志,且鏡像存儲該目標日志不需要配置內(nèi)存索引,這樣第一存儲設備生成包括標識目標數(shù)據(jù)的標識信息的目標日志,第二存儲設備可以存儲目標日志不需要配置內(nèi)存索引,從而減少了對第二存儲設備的CPU的占用。
圖8示出了根據(jù)本申請一個實施例的數(shù)據(jù)存儲的方法的交互流程圖。本申請實施例中的各種術(shù)語的含義與前述各實施例相同。
應注意,這只是為了幫助本領域技術(shù)人員更好地理解本申請實施例,而非限制本申請實施例的范圍。
801、第一存儲設備接收寫請求消息,該寫請求消息攜帶目標數(shù)據(jù)。
802、第一存儲設備根據(jù)目標數(shù)據(jù)生成相應的目標日志,目標日志包括目標數(shù)據(jù)和用于標識目標數(shù)據(jù)的標識信息。
803、第一存儲設備獲取第二存儲設備的資源空間(表示為第二資源空間)的存儲地址和資源空間的存儲容量。
804、第一存儲設備根據(jù)第二資源空間的存儲容量和標識信息,確定獲取的第二資源空間的存儲容量是否能夠滿足目標日志的資源需求。
805、第一存儲設備在確定獲取的第二資源空間的存儲容量能夠滿足目標日志的資源需求,根據(jù)目標日志、RDMA編碼方式、第二資源空間的存儲地址生成RDMA消息。
806、第一存儲設備向第二存儲設備發(fā)送RDMA消息。
807、第二存儲設備根據(jù)RDMA消息,將目標日志直接存儲到存儲地址對應的第二資源空間中。
可選地,第一存儲設備可以直接向第二存儲設備發(fā)送目標日志,由第二存儲設備來確定能夠存儲目標日志的資源空間,這樣可以不需要步驟803至807。
808、第二存儲設備在完成目標日志的鏡像存儲后,向第一存儲設備發(fā)送存儲完成消息。
809、第一存儲設備在本地存儲目標日志。
步驟808和步驟809可以沒有先后關系,本申請對此不進行限定。
810、第一存儲設備在本地完成存儲目標日志,且接收到存儲完成消息之后,向IO設備返回寫請求響應消息。
811、第一存儲設備在本地為目標數(shù)據(jù)配置對應的內(nèi)存索引,該內(nèi)存索引用于標識目標數(shù)據(jù)。
812、第一存儲設備根據(jù)該內(nèi)存索引,確定存儲目標數(shù)據(jù)的第一存儲設備的資源空間。
813、第一存儲設備將目標數(shù)據(jù)存儲到確定的第一存儲設備的資源空間中。
應理解,上述相應信息的具體指示方式可參考前述各實施例,為了簡潔,在此不再贅述。
因此,本申請實施例的數(shù)據(jù)存儲的方法,第一存儲設備通過接收攜帶目標數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標數(shù)據(jù)生成包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息的目標日志,獲取第二存儲設備的第二資源空間,在第二資源空間滿足目標日志的資源需求時,根據(jù)目標日志、RDMA編碼方式和第二資源空間的存儲地址生成RDMA消息,并向該第二存儲設備發(fā)送該目標日志,第二存儲設備根據(jù)RDMA消息將目標日志直接存儲到第二資源空間中,且存儲該目標日志不需要配置內(nèi)存索引,這樣第一存儲設備生成包括標識目標數(shù)據(jù)的標識信息的目標日志,并通過發(fā)送RDMA消息直接將目標日志存儲在滿足資源需求的存儲空間中,第二存儲設備存儲目標日志可以不需要配置內(nèi)存索引,從而減少了對第二存儲設備的CPU的占用。
應理解,在本申請的各種實施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應以其功能和內(nèi)在邏輯確定,而不應對本申請實施例的實施過程構(gòu)成任何限定。
上文中詳細描述了根據(jù)本申請實施例的數(shù)據(jù)存儲的方法,下面將描述根據(jù)本申請實施例的存儲設備。
圖9示出了根據(jù)本申請實施例的存儲系統(tǒng)900的示意性框圖,該存儲系統(tǒng)包括第一存儲設備910和至少一個第二存儲設備920,其中,該第二存儲設備920為該第一存儲設備910的鏡像存儲設備,該存儲系統(tǒng)900用于執(zhí)行圖7所述的數(shù)據(jù)存儲的方法,該存儲系統(tǒng)900包括:
該第一存儲設備910,用于接收寫請求消息,該寫請求消息攜帶目標數(shù)據(jù),根據(jù)該目標數(shù)據(jù)生成目標日志,并向該第二存儲設備920發(fā)送該目標日志,該目標日志包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息;
該第二存儲設備920,用于存儲該目標日志,且該存儲該目標日志不需要配置內(nèi)存索引。
因此,本申請實施例的存儲系統(tǒng),第一存儲設備通過接收攜帶目標數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標數(shù)據(jù)生成包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息的目標日志,并向該第二存儲設備發(fā)送該目標日志,第二存儲設備鏡像存儲該目標日志,且鏡像存儲該目標日志不需要配置內(nèi)存索引,這樣第一存儲設備生成包括標識目標數(shù)據(jù)的標識信息的目標日志,第二存儲設備可以存儲目標日志不需要配置內(nèi)存索引,從而減少了對第二存儲設備的CPU的占用。
可選地,在本申請一個實施例中,該第二存儲設備920還用于在完成存儲該目標日志時,向該第一存儲設備910發(fā)送存儲完成消息;
該第一存儲設備910還用于存儲該目標日志,并在完成該目標日志的存儲和接收到該存儲完成消息之后,發(fā)送寫請求響應消息。
可選地,在本申請一個實施例中,該第二存儲設備920包括多個資源空間;
該第二存儲設備920具體用于:
根據(jù)該標識信息,確定存儲該目標日志的第一資源空間,該第一資源空間為該第二存儲設備920的多個資源空間中滿足該目標日志的資源需求的任一資源空間;
將該目標日志存儲到該第一資源空間中。
可選地,在本申請一個實施例中,該第二存儲設備920包括多個資源空間;
該第一存儲設備910,還用于獲取第二資源空間的存儲地址和該第二資源空間的存儲容量,根據(jù)該第二資源空間的存儲容量和該標識信息確定該第二資源空間是否滿足該目標日志的資源需求,并在該第二資源空間滿足該目標日志的資源需求時根據(jù)遠程直接數(shù)據(jù)存取RDMA編碼方式、該目標日志和該第二資源空間的存儲地址生成RDMA消息,以及向該第二存儲設備920的第二資源空間發(fā)送該RDMA消息,該第二資源空間為該第二存儲設備920的多個資源空間中任一資源空間,該RDMA消息包括該第二資源空間的存儲地址和該目標日志;
該第二存儲設備920,還用于通過該第二資源空間根據(jù)該RDMA消息,存儲該目標日志。
可選地,在本申請一個實施例中,該第一存儲設備910,還用于向該第二存儲設備920發(fā)送資源請求消息,并接收該第二存儲設備920根據(jù)該資源請求消息發(fā)送的資源請求響應消息,該資源請求消息用于請求存儲該目標日志的該第二資源空間,該資源請求響應消息攜帶該第二資源空間的存儲地址和該第二資源空間的存儲容量。
可選地,在本申請一個實施例中,該第一存儲設備910,還用于為該目標數(shù)據(jù)配置內(nèi)存索引,并根據(jù)該內(nèi)存索引確定存儲該目標數(shù)據(jù)的該第一存儲設備的資源空間,以及將該目標數(shù)據(jù)寫入該第一存儲設備的資源空間中,其中,該第一存儲設備的資源空間的存儲地址對應于該內(nèi)存索引。
因此,本申請實施例的存儲系統(tǒng),第一存儲設備通過接收攜帶目標數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標數(shù)據(jù)生成包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息的目標日志,并向該第二存儲設備發(fā)送該目標日志,第二存儲設備鏡像存儲該目標日志,且鏡像存儲該目標日志不需要配置內(nèi)存索引,這樣第一存儲設備生成包括標識目標數(shù)據(jù)的標識信息的目標日志,第二存儲設備可以存儲目標日志不需要配置內(nèi)存索引,從而減少了對第二存儲設備的CPU的占用。
根據(jù)本申請實施例的存儲系統(tǒng)900可對應于根據(jù)本申請實施例圖7或圖8的數(shù)據(jù)存儲的方法的存儲系統(tǒng),并且存儲系統(tǒng)900中的各個模塊的上述和其它操作和/或功能分別為了實現(xiàn)前述各個方法的相應流程,為了簡潔,在此不再贅述。
圖10示出了本申請的實施例提供的存儲系統(tǒng)的結(jié)構(gòu),包括至少一個處理器1002(例如CPU),至少一個網(wǎng)絡接口1005或者其他通信接口,至少一個存儲器1006,和至少一個通信總線1003,用于實現(xiàn)這些裝置之間的連接通信。處理器1002用于執(zhí)行存儲器1006中存儲的可執(zhí)行模塊,例如計算機程序。存儲器1006可能包含高速隨機存取存儲器(Random Access Memory,RAM),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個網(wǎng)絡接口1005(可以是有線或者無線)實現(xiàn)與至少一個其他網(wǎng)元之間的通信連接。
在一些實施方式中,存儲器1006存儲了程序10061,處理器1002執(zhí)行程序10061,用于執(zhí)行以下操作:
通過網(wǎng)絡接口1005接收寫請求消息,該寫請求消息攜帶目標數(shù)據(jù);
根據(jù)該目標數(shù)據(jù),生成目標日志,該目標日志包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息;
通過網(wǎng)絡接口1005向第二存儲設備發(fā)送該目標日志;
存儲所述目標日志,且所述存儲所述目標日志不需要配置內(nèi)存索引。
需要說明的是,該存儲系統(tǒng)可以用于執(zhí)行上述圖7或圖8所示的方法實施例中的各個步驟和/或流程。
從本申請實施例提供的以上技術(shù)方案可以看出,第一存儲設備通過接收攜帶目標數(shù)據(jù)的寫請求消息,根據(jù)該寫請求消息中的目標數(shù)據(jù)生成包括該目標數(shù)據(jù)和用于標識該目標數(shù)據(jù)的標識信息的目標日志,并向該第二存儲設備發(fā)送該目標日志,第二存儲設備鏡像存儲該目標日志,且鏡像存儲該目標日志不需要配置內(nèi)存索引,這樣第一存儲設備生成包括標識目標數(shù)據(jù)的標識信息的目標日志,第二存儲設備可以存儲目標日志不需要配置內(nèi)存索引,從而減少了對第二存儲設備的CPU的占用。
本申請實施例還提供一種計算機存儲介質(zhì),該計算機存儲介質(zhì)可以存儲用于指示上述任一種方法的程序指令。
可選地,該存儲介質(zhì)具體可以為存儲器1106。
應理解,本申請中的具體的例子只是為了幫助本領域技術(shù)人員更好地理解本申請實施例,而非限制本申請實施例的范圍。
應理解,本文中術(shù)語“和/或”,僅僅是一種描述關聯(lián)對象的關聯(lián)關系,表示可以存在三種關系,例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另外,本文中字符“/”,一般表示前后關聯(lián)對象是一種“或”的關系。
應理解,在本申請的各種實施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應以其功能和內(nèi)在邏輯確定,而不應對本申請實施例的實施過程構(gòu)成任何限定。
本領域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應用和設計約束條件。專業(yè)技術(shù)人員可以對每個特定的應用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應認為超出本申請的范圍。
所屬領域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,該單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本申請的具體實施方式,但本申請的保護范圍并不局限于此,任何熟悉本技術(shù)領域的技術(shù)人員在本申請揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本申請的保護范圍之內(nèi)。因此,本申請的保護范圍應以該權(quán)利要求的保護范圍為準。