面向分布式存儲系統(tǒng)帶流檢測技術(shù)的糾刪碼寫緩沖方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機存儲技術(shù)領(lǐng)域,特別地,涉及一種面向分布式存儲系統(tǒng)帶流檢測技術(shù)的糾刪碼寫緩沖方法。
【背景技術(shù)】
[0002]糾刪碼(erasure coding,EC)是一種數(shù)據(jù)保護方法,它將原始數(shù)據(jù)分割成若干個片段,把冗余數(shù)據(jù)塊擴展、編碼,并將其存儲在不同的物理位置。糾刪碼可以用于有大量數(shù)據(jù)和任何需要容錯的應用程序或系統(tǒng)中,比如磁盤陣列系統(tǒng)、數(shù)據(jù)網(wǎng)格、分布式存儲應用程序、對象存儲或歸檔存儲。糾刪碼提供的保護可以用簡單的公式來表示:K = M+N。變量“Μ”代表原始數(shù)據(jù)或符號的值,變量“N”代表添加的提供保護的額外或冗余符號的值,變量“K”代表糾刪碼過程后創(chuàng)建的符號總值。原始文件可以從K中的任意M個驗證片段中重建,磁盤容量利用率為Μ/Κ。
[0003]現(xiàn)在越來越多的分布式存儲系統(tǒng)使用糾刪碼技術(shù)對數(shù)據(jù)進行分塊存儲,塊大小U可以由用戶定義,通常為512字節(jié)或1024字節(jié)。分布式存儲系統(tǒng)如圖1所示,客戶端和服務器端通過網(wǎng)絡進行連接,服務器端提供存儲服務,客戶端將應用程序的數(shù)據(jù)根據(jù)一定規(guī)則寫入服務器端,或者從服務器端讀取數(shù)據(jù)提供給應用程序使用。支持糾刪碼的分布式存儲系統(tǒng)會將K塊數(shù)據(jù)寫入不同的服務器端,則能容忍任意N個服務器端失效。
[0004]在現(xiàn)有的糾刪碼技術(shù)中,參見圖2,客戶端與服務器端交互的最小操作單位為M*U個字節(jié),在客戶端的原始數(shù)據(jù)結(jié)尾處不足M*U個字節(jié),則用零補齊。如果是對原有文件的覆寫(在覆蓋原始數(shù)據(jù)的基礎(chǔ)上進行數(shù)據(jù)寫入),也就是從偏移量L處,寫入S個字節(jié)的數(shù)據(jù)。在該覆蓋寫過程中,需要將這些數(shù)據(jù)劃分成多個塊,使得盡可能多的塊其首字節(jié)在文件中的偏移量為M*U的整數(shù)倍,這個操作我們稱之為對齊。對于能夠?qū)R且長度為M*U整數(shù)倍的數(shù)據(jù)塊,則可以直接以M*U為單位進行編碼寫入操作。但是對于不能對齊或者長度不足M*U長度的數(shù)據(jù),則需要將客戶端原有文件中對應的M*U長度的字節(jié)讀出,然后用新數(shù)據(jù)覆蓋部分內(nèi)容,重新編碼后再寫入。
[0005]因此,在覆蓋寫的過程中如果存在大量不能對齊且長度不足M*U長度的數(shù)據(jù),則會在存儲過程中引發(fā)大量的讀操作,從而大大降低了寫操作的效率和性能。
【發(fā)明內(nèi)容】
[0006]本發(fā)明目的在于提供一種面向分布式存儲系統(tǒng)帶流檢測技術(shù)的糾刪碼寫緩沖方法,以解決現(xiàn)有覆蓋寫存儲過程的讀操作過多的技術(shù)問題。
[0007]為實現(xiàn)上述目的,本發(fā)明提供了一種面向分布式存儲系統(tǒng)帶流檢測技術(shù)的糾刪碼寫緩沖方法,包括:
[0008]在對原始數(shù)據(jù)進行覆寫操作時,第一次覆寫操作的長度為緩沖層數(shù)據(jù)起始位置至第一個對齊點,最后一次覆寫操作的長度為最后一個對齊點至緩沖層數(shù)據(jù)結(jié)束位置;第一次覆寫操作和最后一次覆寫操作之間的每一次覆寫操作的長度均與任意兩個對齊點之間的長度相等,位置對齊。
[0009]優(yōu)選的,第一次覆寫操作和最后一次覆寫操作之間的每一次覆寫操作的長度均與相鄰的兩個對齊點之間的長度相等,位置對齊。
[0010]優(yōu)選的,在客戶端建立緩沖層,對寫操作進行合并和對齊;
[0011]客戶端接收到非寫操作,先執(zhí)行緩沖層中的寫操作,再執(zhí)行非寫操作。
[0012]優(yōu)選的,在客戶端建立緩沖層,對寫操作進行合并和對齊的步驟包括:
[0013]Al、在客戶端建立緩沖層;
[0014]B1、在指定時間內(nèi)接收應用程序1操作;
[0015]Cl、判斷該1操作命令的執(zhí)行過程是否可以與客戶端的緩沖空間內(nèi)已有的1操作命令的執(zhí)行過程合并,
[0016]D1、進行1操作命令的執(zhí)行過程的合并,按對齊規(guī)則進行分拆;然后掃描緩沖隊列,進行客戶端的緩沖空間的整理。
[0017]優(yōu)選的,加入流檢測機制:如果寫操作是流式數(shù)據(jù),在緩沖層滿的時候,將緩沖層全部執(zhí)行,只留最后進入緩沖層的一個;寫操作是非流式數(shù)據(jù),在緩沖層滿的時候僅執(zhí)行一個寫請求并回收緩沖空間;
[0018]加入流檢測機制的步驟包括:
[0019]A2、接收一個1操作命令;
[0020]B2、判斷該1操作命令是否為流式數(shù)據(jù),是則轉(zhuǎn)C2,否則轉(zhuǎn)D2 ;
[0021]C2、執(zhí)行緩沖隊列內(nèi)一個1操作命令,回收客戶端的緩沖空間;
[0022]D2、按隊列順序執(zhí)行一個1操作命令,回收客戶端的緩沖空間。
[0023]優(yōu)選的,加入定時機制,防止緩沖層內(nèi)的操作長時間得不到執(zhí)行;
[0024]加入定時機制的步驟包括:
[0025]在該1操作命令沒有超時時,進行該1操作命令是否為寫操作的判斷;在1操作命令超時時,則判斷緩沖隊列是否有寫操作。
[0026]優(yōu)選的,在客戶端的緩沖層內(nèi)空閑空間大小小于執(zhí)行該1操作命令所需數(shù)據(jù)所占的空間大小,且在該1操作命令超時時,暫停接收新的1操作命令,執(zhí)行客戶端的緩沖層里的至少一個1操作命令。
[0027]優(yōu)選的,在客戶端建立緩沖層的步驟包括:確定執(zhí)行寫操作的客戶端緩沖層空間大小和分配寫操作隊列的步驟。
[0028]優(yōu)選的,步驟B還包括判斷接收的1操作命令是否為需要進行寫操作,若需要進行寫操作,則判斷客戶端的緩沖層內(nèi)空閑空間大小是否大于執(zhí)行該1操作命令所需數(shù)據(jù)所占的空間大小;若不需要進行寫操作,則先執(zhí)行操作隊列內(nèi)的1操作,然后執(zhí)行步驟A接收的當前1操作。
[0029]優(yōu)選的,客戶端的緩沖隊列的數(shù)目為10個1操作。
[0030]本發(fā)明具有以下有益效果:
[0031]本發(fā)明在客戶端增加緩沖層進行1操作(Input/Output Operat1n,輸入輸出操作)命令的執(zhí)行,使得客戶端的1操作命令可在本地緩沖層直接進行修改、合并等操作,將多個寫操作在緩沖層合并,可以大大減少覆蓋寫存儲過程中因為非對齊寫操作引發(fā)的讀操作,提高命令響應速度和寫操作帶寬。
[0032]例如在一個配置為2+1,數(shù)據(jù)塊為512字節(jié)的糾刪碼分布式存儲系統(tǒng)中,從文件偏移量256字節(jié)開始,每次覆蓋寫1024字節(jié),總共寫I兆字節(jié),共需要1024次寫操作,如圖2所示。圖2中每個方塊表示512字節(jié)數(shù)據(jù),豎直虛線表示要在2*512 = 1024字節(jié)處對齊,第一行表示原始數(shù)據(jù),第二行表示現(xiàn)有方法覆蓋寫操作,第三行表示本申請方法使用緩沖層組織后的覆蓋寫操作。現(xiàn)有方法中每一個覆蓋寫操作都跨越了對齊點,需要在對齊點劃分為兩個子寫操作。并且因為每個子寫操作數(shù)據(jù)都小于1024字節(jié),所以會引發(fā)一次讀操作??偣残枰牟僮鲾?shù)為:1024*2*(1次讀操作+1次寫操作)。使用本申請方法,在緩沖層重新組織寫操作后,會增加一次寫操作。但是只有第一個操作沒有對齊,最后一個操作數(shù)據(jù)不滿1024字節(jié),這兩個操作需要引發(fā)讀操作,其余的寫操作都已經(jīng)對齊并且數(shù)據(jù)為1024字節(jié)??偣残枰牟僮鲾?shù)為:(1024+1)寫操作+2次讀操作。1操作數(shù)幾乎只有原來的1/4,大大提高了覆蓋寫的效率。
[0033]中國專利201410154741.5公開了一種基于糾刪碼緩沖的重構(gòu)優(yōu)化方法,提供了在存儲服務器失效的情況下,如何解決客戶端繼續(xù)寫數(shù)據(jù)以及重建數(shù)據(jù)的問題,且將緩沖設(shè)置在服務器端。本申請將緩沖設(shè)置在客戶端,在服務器正常情況下,減少寫操作引發(fā)的讀操作問題。
[0034]除了上面所描述的目的、特征和優(yōu)點之外,本發(fā)明還有其它的目的、特征和優(yōu)點。下面將參照圖,對本發(fā)明作進一步詳細的說明。
【附圖說明】
[0035]構(gòu)成本申請的一部分的附圖用來提供對本發(fā)明的進一步理解,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當限定。在附圖中:
[0036]圖1是分布式存儲系統(tǒng)示意圖;
[0037]圖2是糾刪碼覆寫操作和緩沖層優(yōu)化后對齊操作示意圖;
[0038]圖3是本發(fā)明優(yōu)選實施例的流程示意圖之一;
[0039]圖4是本發(fā)明優(yōu)選實施例的流程示意圖之二。
【具體實施方式】
[0040]以下結(jié)合附圖對本發(fā)明的實施例進行詳細說明,但是本發(fā)明可以根據(jù)權(quán)利要求限定和覆蓋的多種不同方式實施。
[0041]本申請存儲系統(tǒng)在對原始數(shù)據(jù)進行覆寫操作時,第一次覆寫操作的長度為緩沖層數(shù)據(jù)起始位置至第一個對齊點,最后一次覆寫操作的長度為最后一個對齊點至緩沖層數(shù)據(jù)結(jié)束位置;第一次覆寫操作和最后一次覆寫操作之間的覆寫操作的長度均與任意兩個對齊點之間的長度相等,位置對齊。相比現(xiàn)有技術(shù)的每次覆寫操作均需跨越對齊點,而引發(fā)的大量讀操作,本申請只需在頭尾兩次覆寫操作中進行讀操作即可。例如,在存在10個對齊點的數(shù)據(jù)段中,任意兩個對齊點可以指第I個對齊點與第3個對齊點,也可以指第3個對齊點與第4個對齊點等情況。當然,考慮到不對數(shù)據(jù)進行重復操作,已經(jīng)進行了覆寫操作的數(shù)據(jù)段則不再列入下一次覆寫操作的范圍內(nèi)。例如,已經(jīng)對第I個對齊點與第3個對齊點之間的數(shù)據(jù)進行了覆寫操作,則不會對第3個對齊點之前的數(shù)據(jù)進行對齊和覆寫操作了。
[0042]也就是說,第一次覆寫操作和最后一次覆寫操作之間的每一次覆寫操作的長度可以均與相鄰的兩個對齊點之間的長度相等,位置對齊。即第二次覆寫操作為第I個對齊點與第2個對齊點之間的數(shù)據(jù),第三次覆寫操作為第2個對齊點與第3個對齊點之間的數(shù)據(jù),依次類推,直至最后一個對齊點。
[0043]另外,本申請在現(xiàn)有的客戶端增加緩沖層,對寫操作進行合并和對齊。即在接收應用程序1操作后,判斷該1操作命令的執(zhí)行過程是否可以與客戶端的緩沖空間內(nèi)已有的1操作命令的執(zhí)行過程合并,若可以進行1操作命令的執(zhí)行過程的合并,則按對齊規(guī)則進行分拆;然后掃描緩沖隊列,進行客戶端的緩沖空間的整理。
[0044]進一步地,在進行寫操作的過程中,為減少讀寫次數(shù),加入了流檢測機制。即先檢測該1操作命令是否為流式數(shù)據(jù),是則執(zhí)行緩沖隊列內(nèi)一個1操作命令,回收客戶端的緩沖空間;否則按隊列順序執(zhí)行一個1操作命令,回收客戶端的緩沖空間。
[0045]為防止緩沖層內(nèi)的操作長時間得不到執(zhí)行,還加入了定時機制。即在