一種數(shù)據(jù)存儲(chǔ)方法以及協(xié)議服務(wù)器的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種數(shù)據(jù)存儲(chǔ)方法以及協(xié)議服務(wù)器。
【背景技術(shù)】
[0002] 在現(xiàn)有的分布式存儲(chǔ)系統(tǒng)中,多個(gè)存儲(chǔ)節(jié)點(diǎn)相連形成集群,每個(gè)存儲(chǔ)節(jié)點(diǎn)均具備 數(shù)據(jù)存儲(chǔ)功能。分布式存儲(chǔ)系統(tǒng)通常提供一臺(tái)或多臺(tái)協(xié)議服務(wù)器(英文全稱:Protocol server)向用戶提供標(biāo)準(zhǔn)的服務(wù)器信息塊(英文全稱:ServerMessageBlock,簡稱:SMB) 協(xié)議服務(wù)功能。
[0003] 如圖1所示,分布式存儲(chǔ)系統(tǒng)包括協(xié)議服務(wù)器和多個(gè)存儲(chǔ)節(jié)點(diǎn),圖1示出了存儲(chǔ) 節(jié)點(diǎn)1至存儲(chǔ)節(jié)點(diǎn)5,用戶程序可以通過如圖1所示的協(xié)議客戶端(英文全稱:Protocol client)訪問存儲(chǔ)系統(tǒng),其中,協(xié)議客戶端與協(xié)議服務(wù)器通過前端網(wǎng)絡(luò)相連,分布式存儲(chǔ)系 統(tǒng)內(nèi)部各存儲(chǔ)節(jié)點(diǎn)之間通過后端網(wǎng)絡(luò)連接,前端網(wǎng)絡(luò)用于用戶業(yè)務(wù)與分布式存儲(chǔ)系統(tǒng)之間 進(jìn)行請(qǐng)求與數(shù)據(jù)交互,后端網(wǎng)絡(luò)用于分布式存儲(chǔ)系統(tǒng)內(nèi)部各存儲(chǔ)節(jié)點(diǎn)之間進(jìn)行請(qǐng)求與數(shù)據(jù) 交互。
[0004] 現(xiàn)有技術(shù)通常采用前向糾錯(cuò)(英文全稱:ForwardErrorCorrection,簡稱:FEC) 的保護(hù)方式,使得分布式存儲(chǔ)系統(tǒng)具備在存儲(chǔ)節(jié)點(diǎn)發(fā)生故障時(shí)也能繼續(xù)提供數(shù)據(jù)服務(wù)的能 力。前向糾錯(cuò)數(shù)據(jù)保護(hù)方式也叫N+M保護(hù)方式,其中,N代表存儲(chǔ)節(jié)點(diǎn)的數(shù)量,Μ代表在不發(fā) 生數(shù)據(jù)丟失的前提下,集群所允許的同時(shí)發(fā)生故障的存儲(chǔ)節(jié)點(diǎn)數(shù)。在Ν+Μ保護(hù)方式下,協(xié)議 服務(wù)器以分條為單位進(jìn)行讀寫,一個(gè)分條包括Ν個(gè)數(shù)據(jù)條帶以及Μ個(gè)校驗(yàn)條帶,具體地,協(xié) 議服務(wù)器在寫入大塊數(shù)據(jù)時(shí),將大塊數(shù)據(jù)分割成長度固定的Ν個(gè)小塊數(shù)據(jù),根據(jù)所述Ν個(gè)小 塊數(shù)據(jù)通過算法進(jìn)行計(jì)算,得到Μ個(gè)糾刪碼,則一個(gè)分條中的Ν個(gè)數(shù)據(jù)條帶用于存儲(chǔ)所述Ν 個(gè)小塊數(shù)據(jù),Μ個(gè)校驗(yàn)條帶用于存儲(chǔ)所述Μ個(gè)糾刪碼,其中,糾刪碼具有冗余信息,在存儲(chǔ)節(jié) 點(diǎn)發(fā)生故障時(shí),可以利用糾刪碼計(jì)算出丟失的數(shù)據(jù)。
[0005] 但是,由于糾刪碼是根據(jù)整個(gè)分條計(jì)算出來的,因此,當(dāng)在分條的任意一數(shù)據(jù)條帶 內(nèi)新寫入數(shù)據(jù)時(shí),協(xié)議服務(wù)器需要先從整個(gè)分條內(nèi)的數(shù)據(jù)以及糾刪碼讀出,并與新寫入的 數(shù)據(jù)合并后重新計(jì)算糾刪碼,得到新的分條,并將新的分條的寫入存儲(chǔ)節(jié)點(diǎn)。以圖1舉例說 明,圖1示出了一個(gè)分條,該分條包括數(shù)據(jù)條帶1至數(shù)據(jù)條帶4以及校驗(yàn)條帶,其中,數(shù)據(jù)條 帶1至數(shù)據(jù)條帶4存儲(chǔ)數(shù)據(jù)1至數(shù)據(jù)4,校驗(yàn)條帶存儲(chǔ)有該分條的糾刪碼,協(xié)議服務(wù)器根據(jù) 數(shù)據(jù)1至數(shù)據(jù)4中的任意三個(gè)數(shù)據(jù),以及該糾刪碼,可以計(jì)算出第四個(gè)數(shù)據(jù),此時(shí),若協(xié)議服 務(wù)器向數(shù)據(jù)條帶3新寫入數(shù)據(jù)5時(shí),需要先將數(shù)據(jù)條帶1至數(shù)據(jù)條帶4中存儲(chǔ)的數(shù)據(jù)1至 數(shù)據(jù)4,以及校驗(yàn)條帶中的糾刪碼全部讀出,再利用數(shù)據(jù)5替換數(shù)據(jù)3,根據(jù)數(shù)據(jù)1,數(shù)據(jù)2, 數(shù)據(jù)5和數(shù)據(jù)4重新計(jì)算得到新的糾刪碼,最后將數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)5和數(shù)據(jù)4以及新的 糾刪碼重新寫入分條。
[0006] 由上可知,在現(xiàn)有的Ν+Μ保護(hù)方式下,協(xié)議服務(wù)器向分條的一個(gè)數(shù)據(jù)條帶內(nèi)寫入 新的數(shù)據(jù)的過程十分繁瑣,數(shù)據(jù)寫入速率較慢。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明提供一種數(shù)據(jù)存儲(chǔ)方法以及協(xié)議服務(wù)器,用于解決現(xiàn)有技術(shù)對(duì)于分布式存 儲(chǔ)系統(tǒng)的數(shù)據(jù)保護(hù)降低了數(shù)據(jù)寫入速率的技術(shù)問題。
[0008] 為了達(dá)到上述目的,本發(fā)明采用如下的技術(shù)方案:
[0009] 第一方面,提供一種數(shù)據(jù)存儲(chǔ)方法,包括:
[0010] 協(xié)議服務(wù)器接收第一數(shù)據(jù);其中,所述第一數(shù)據(jù)用于更新目的分條的第一數(shù)據(jù)條 帶內(nèi)存儲(chǔ)的數(shù)據(jù),所述目的分條包括N個(gè)數(shù)據(jù)條帶以及Μ個(gè)校驗(yàn)條帶,所述N個(gè)數(shù)據(jù)條帶分 別是Ν個(gè)存儲(chǔ)節(jié)點(diǎn)上特定的存儲(chǔ)空間,所述Μ個(gè)校驗(yàn)條帶分別是Μ個(gè)存儲(chǔ)節(jié)點(diǎn)上特定的存 儲(chǔ)空間,Ν為大于2的正整數(shù),Μ為小于Ν的正整數(shù);所述第一數(shù)據(jù)條帶是所述Κ個(gè)數(shù)據(jù)條 帶中的任一個(gè)數(shù)據(jù)條帶;
[0011]向L個(gè)鏡像條帶所處的存儲(chǔ)節(jié)點(diǎn)分別發(fā)送寫入指令,所述寫入指令包括所述第一 數(shù)據(jù),以及所述鏡像條帶的地址;所述L個(gè)鏡像條帶是至少兩個(gè)存儲(chǔ)節(jié)點(diǎn)上特定的存儲(chǔ)空 間,L為大于1的正整數(shù);
[0012] 建立所述L個(gè)鏡像條帶與所述第一數(shù)據(jù)條帶之間的對(duì)應(yīng)關(guān)系;其中,基于所述對(duì) 應(yīng)關(guān)系,所述協(xié)議服務(wù)器能夠?qū)?duì)所述第一數(shù)據(jù)條帶的讀取指令轉(zhuǎn)換為對(duì)任一所述鏡像條 帶的讀取指令。
[0013] 在結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式中,在所述建立所述L個(gè)鏡像條帶與所 述第一數(shù)據(jù)條帶之間的對(duì)應(yīng)關(guān)系之后,所述方法還包括:
[0014] 接收第二數(shù)據(jù);所述第二數(shù)據(jù)用于更新所述目的分條中的所有數(shù)據(jù)條帶內(nèi)存儲(chǔ)的 數(shù)據(jù);
[0015] 將所述第二數(shù)據(jù)分為Ν個(gè)數(shù)據(jù),并根據(jù)所述Ν個(gè)數(shù)據(jù)計(jì)算得到Μ個(gè)糾刪碼;在將所 述Ν個(gè)數(shù)據(jù)寫入所述Ν個(gè)數(shù)據(jù)條帶,將所述Μ個(gè)糾刪碼寫入所述Μ個(gè)校驗(yàn)條帶后,刪除所述 L鏡像條帶內(nèi)存儲(chǔ)的所述第一數(shù)據(jù),以及所述對(duì)應(yīng)關(guān)系。
[0016] 結(jié)合第一方面或者第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能 的實(shí)現(xiàn)方式中,所述刪除所述L鏡像條帶內(nèi)存儲(chǔ)的所述第一數(shù)據(jù),以及所述對(duì)應(yīng)關(guān)系之后, 還包括:
[0017] 接收協(xié)議客戶端發(fā)送的讀取指令;所述讀取指令用于指示所述協(xié)議服務(wù)器讀取所 述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù);
[0018] 若存在所述第一數(shù)據(jù)條帶與所述L個(gè)鏡像條帶的對(duì)應(yīng)關(guān)系,根據(jù)所述對(duì)應(yīng)關(guān)系, 讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的任一鏡像條帶內(nèi)存儲(chǔ)的所述第一數(shù)據(jù);
[0019] 將所述第一數(shù)據(jù)返回至所述協(xié)議客戶端。
[0020] 結(jié)合第一方面至第一方面的第二種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式, 在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述建立所述L個(gè)鏡像條帶與所述第一數(shù)據(jù)條帶 之間的對(duì)應(yīng)關(guān)系之后,還包括:
[0021] 接收協(xié)議客戶端發(fā)送的讀取指令;所述讀取指令用于指示所述協(xié)議服務(wù)器讀取所 述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù);
[0022] 讀取所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)的第一版本號(hào);
[0023] 根據(jù)所述對(duì)應(yīng)關(guān)系,讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的任一鏡像條帶內(nèi)存儲(chǔ)的所述第 一數(shù)據(jù)的版本號(hào);
[0024] 根據(jù)所述第一版本號(hào)以及所述第二版本號(hào),確定所述第一數(shù)據(jù)的寫入時(shí)間晚于所 述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)的寫入時(shí)間;
[0025] 讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的任一鏡像條帶內(nèi)存儲(chǔ)的所述第一數(shù)據(jù);并
[0026] 將所述第一數(shù)據(jù)返回至所述協(xié)議客戶端。
[0027] 結(jié)合第一方面至第一方面的第三種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式, 在第一方面的第四種可能的實(shí)現(xiàn)方式中,還包括:
[0028] 根據(jù)所述第一版本號(hào)以及所述第二版本號(hào),確定所述第一數(shù)據(jù)的寫入時(shí)間早于所 述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)的寫入時(shí)間;
[0029] 讀取所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù);并
[0030] 將所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)返回至所述協(xié)議客戶端。
[0031] 結(jié)合第一方面至第一方面的第四種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式, 在第一方面的第五種可能的實(shí)現(xiàn)方式中,所述讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的任一鏡像條帶 內(nèi)存儲(chǔ)的所述第一數(shù)據(jù),包括:
[0032] 若所述第一數(shù)據(jù)條帶對(duì)應(yīng)的所述L個(gè)鏡像條帶中的第一鏡像條帶所處的存儲(chǔ)節(jié) 點(diǎn)發(fā)生故障,則根據(jù)所述對(duì)應(yīng)關(guān)系讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的所述L個(gè)鏡像條帶中的第 二鏡像條帶內(nèi)存儲(chǔ)的所述第一數(shù)據(jù)。
[0033] 第二方面,提供一種協(xié)議服務(wù)器,包括:
[0034] 接收單元,用于接收第一數(shù)據(jù);其中,所述第一數(shù)據(jù)用于更新目的分條的第一數(shù)據(jù) 條帶內(nèi)存儲(chǔ)的數(shù)據(jù),所述目的分條包括N個(gè)數(shù)據(jù)條帶以及Μ個(gè)校驗(yàn)條帶,所述N個(gè)數(shù)據(jù)條帶 分別是Ν個(gè)存儲(chǔ)節(jié)點(diǎn)上特定的存儲(chǔ)空間,所述Μ個(gè)校驗(yàn)條帶分別是Μ個(gè)存儲(chǔ)節(jié)點(diǎn)上特定的 存儲(chǔ)空間,Ν為大于2的正整數(shù),Μ為小于Ν的正整數(shù);所述第一數(shù)據(jù)條帶是所述Κ個(gè)數(shù)據(jù) 條帶中的任一個(gè)數(shù)據(jù)條帶;
[0035] 寫入單元,用于向L個(gè)鏡像條帶所處的存儲(chǔ)節(jié)點(diǎn)分別發(fā)送寫入指令,所述寫入指 令包括所述第一數(shù)據(jù),以及所述鏡像條帶的地址;所述L個(gè)鏡像條帶是至少兩個(gè)存儲(chǔ)節(jié)點(diǎn) 上特定的存儲(chǔ)空間,L為大于1的正整數(shù);
[0036] 建立單元,用于建立所述L個(gè)鏡像條帶與所述第一數(shù)據(jù)條帶之間的對(duì)應(yīng)關(guān)系;其 中,基于所述對(duì)應(yīng)關(guān)系,所述協(xié)議服務(wù)器能夠?qū)?duì)所述第一數(shù)據(jù)條帶的讀取指令轉(zhuǎn)換為對(duì) 任一所述鏡像條帶的讀取指令。
[0037] 在結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式中,還包括計(jì)算單元以及刪除單元;
[0038] 所述接收單元還用于:接收第二數(shù)據(jù);所述第二數(shù)據(jù)用于更新所述目的分條中的 所有數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù);
[0039] 所述計(jì)算單元用于,將所述第二數(shù)據(jù)分為Ν個(gè)數(shù)據(jù),并根據(jù)所述Ν個(gè)數(shù)據(jù)計(jì)算得到 Μ個(gè)糾刪碼;
[0040] 所述刪除單元用于,在所述數(shù)據(jù)寫入單元將所述Ν個(gè)數(shù)據(jù)寫入所述Ν個(gè)數(shù)據(jù)條帶, 將所述Μ個(gè)糾刪碼寫入所述Μ個(gè)校驗(yàn)條帶后,刪除所述L鏡像條帶內(nèi)存儲(chǔ)的所述第一數(shù)據(jù), 以及所述對(duì)應(yīng)關(guān)系。
[0041] 結(jié)合第二方面或者第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第二種可能 的實(shí)現(xiàn)方式中,還包括:讀取單元以及發(fā)送單元;
[0042] 所述接收單元還用于,接收協(xié)議客戶端發(fā)送的讀取指令;所述讀取指令用于指示 所述協(xié)議服務(wù)器讀取所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù);
[0043] 所述讀取單元,用于在存在所述第一數(shù)據(jù)條帶與所述L個(gè)鏡像條帶的對(duì)應(yīng)關(guān)系 時(shí),根據(jù)所述對(duì)應(yīng)關(guān)系,讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的任一鏡像條帶內(nèi)存儲(chǔ)的所述第一數(shù) 據(jù);
[0044] 所述發(fā)送單元,用于將所述第一數(shù)據(jù)返回至所述協(xié)議客戶端。
[0045] 結(jié)合第二方面至第二方面的第二種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式, 在第二方面的第三種可能的實(shí)現(xiàn)方式中,還包括讀取單元和發(fā)送單元;
[0046] 所述接收單元還用于,接收協(xié)議客戶端發(fā)送的讀取指令;所述讀取指令用于指示 所述協(xié)議服務(wù)器讀取所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù);
[0047] 所述讀取單元用于,讀取所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)的第一版本號(hào);
[0048] 根據(jù)所述對(duì)應(yīng)關(guān)系,讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的任一鏡像條帶內(nèi)存儲(chǔ)的所述第 一數(shù)據(jù)的版本號(hào);
[0049] 在根據(jù)所述第一版本號(hào)以及所述第二版本號(hào),確定所述第一數(shù)據(jù)的寫入時(shí)間晚于 所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)的寫入時(shí)間時(shí),讀取所述第一數(shù)據(jù)條帶對(duì)應(yīng)的任一鏡像條 帶內(nèi)存儲(chǔ)的所述第一數(shù)據(jù);
[0050] 所述發(fā)送單元用于,將所述第一數(shù)據(jù)返回至所述協(xié)議客戶端。
[0051] 結(jié)合第二方面至第二方面的第三種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式, 在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述讀取單元還用于,在根據(jù)所述第一版本號(hào)以 及所述第二版本號(hào),確定所述第一數(shù)據(jù)的寫入時(shí)間早于所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)的 寫入時(shí)間時(shí),讀取所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù);
[0052] 所述發(fā)送單元還用于,將所述第一數(shù)據(jù)條帶內(nèi)存儲(chǔ)的數(shù)據(jù)返回至所述協(xié)議客戶 端。
[005