數(shù)據(jù)存儲(chǔ)方法、裝置和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)和通信技術(shù)領(lǐng)域,具體涉及一種數(shù)據(jù)存儲(chǔ)方法、裝置和設(shè)備。
【背景技術(shù)】
[0002]容器虛擬化是一種操作系統(tǒng)級(jí)、非??焖俸透咝У奶摂M化技術(shù)。它的原理是基于操作系統(tǒng)內(nèi)核對(duì)不同的運(yùn)行進(jìn)程提供不同的系統(tǒng)視圖。這種隔離可以用于確保在保證安全和效率的情況下授權(quán)訪問(wèn)硬件資源,如CPU (Central Processing Unit,中央處理器)和1dnput Output,輸入輸出)帶寬。每個(gè)容器擁有一個(gè)僅供容器中進(jìn)程和應(yīng)用訪問(wèn)的文件系統(tǒng)環(huán)境。由于容器虛擬化的快速、輕量和高效,容器適用于大規(guī)模部署。在互聯(lián)網(wǎng)、私有云等場(chǎng)景下,大規(guī)模部署的容器中通常會(huì)運(yùn)行一些定制化的特定應(yīng)用,如數(shù)據(jù)庫(kù)、Apache等。
[0003]大規(guī)模使用容器的場(chǎng)景下,為了提高容器部署和使用,會(huì)使用層次化的存儲(chǔ)結(jié)構(gòu),從而達(dá)到節(jié)省空間、系統(tǒng)環(huán)境復(fù)用和便于管理的目的。容器的存儲(chǔ)結(jié)構(gòu)一般包括容器存儲(chǔ)和Base (基礎(chǔ))存儲(chǔ),其中,容器存儲(chǔ)是容器的私有存儲(chǔ),Base存儲(chǔ)可供多個(gè)容器使用。Base存儲(chǔ)可細(xì)分為BaSe0、BaSel、BaSe2等多個(gè)級(jí)別。當(dāng)前容器的層次化存儲(chǔ)主要通過(guò)將容器的存儲(chǔ)按照類型和作用分類。如:將容器的boot fs (容器啟動(dòng)依賴的一些文件)、系統(tǒng)配置文件等共通的文件作為BaseO級(jí)存儲(chǔ),在BaseO存儲(chǔ)上會(huì)有rootfs基本文件等Basel級(jí)存儲(chǔ),Basel之上會(huì)有應(yīng)用文件等Base2存儲(chǔ),依此類推。單個(gè)容器運(yùn)行于BaseN存儲(chǔ)之上,對(duì)文件的修改采用基于文件粒度的寫(xiě)時(shí)拷貝的策略。容器應(yīng)用要對(duì)Base存儲(chǔ)中的文件執(zhí)行寫(xiě)操作,需要先在容器存儲(chǔ)中建立該文件的副本后,再對(duì)副本操作。
[0004]如圖1所示是現(xiàn)有技術(shù)的層次化存儲(chǔ)結(jié)構(gòu)訪問(wèn)機(jī)制。其中容器自有的容器存儲(chǔ)中保存其對(duì)Base存儲(chǔ)的差異化文件。容器訪問(wèn)Base存儲(chǔ)時(shí),針對(duì)讀寫(xiě)分別有不同的處理。讀文件時(shí)直接操作Base存儲(chǔ)中的文件。而針對(duì)寫(xiě)操作,要先在容器存儲(chǔ)中建立文件的副本,再對(duì)這個(gè)副本文件進(jìn)行寫(xiě)操作。容器中的應(yīng)用訪問(wèn)存儲(chǔ)中的文件,當(dāng)有寫(xiě)文件時(shí),首先復(fù)制文件到可寫(xiě)的存儲(chǔ)環(huán)境中再操作,所以這是一種以文件為粒度的寫(xiě)時(shí)拷貝。
[0005]容器應(yīng)用要訪問(wèn)Base存儲(chǔ)中的大文件時(shí),需要等大文件副本在容器存儲(chǔ)中建立完成后,才能執(zhí)行寫(xiě)操作,而大文件副本建立需要較長(zhǎng)時(shí)間。因此,這種以文件為粒度的寫(xiě)時(shí)拷貝(Copy On Write,COW)過(guò)程消耗時(shí)間長(zhǎng),某些場(chǎng)景下,即使是對(duì)大文件做很少一部分的數(shù)據(jù)修改,也要等待建立副本后才能完成,這樣會(huì)導(dǎo)致上層應(yīng)用的寫(xiě)操作請(qǐng)求得不到及時(shí)的響應(yīng),效率很低。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供一種數(shù)據(jù)存儲(chǔ)方法、裝置和設(shè)備,以解決現(xiàn)有技術(shù)中容器對(duì)Base存儲(chǔ)中的文件執(zhí)行的寫(xiě)時(shí)拷貝操作耗時(shí)長(zhǎng),效率低的缺陷。
[0007]本發(fā)明第一方面提供一種數(shù)據(jù)存儲(chǔ)方法,用于容器虛擬化系統(tǒng),所述容器虛擬化系統(tǒng)中運(yùn)行多個(gè)容器,所述多個(gè)容器具有各自的容器存儲(chǔ)單元,且所述多個(gè)容器共用基礎(chǔ)Base存儲(chǔ)單元,所述多個(gè)容器包括第一容器,所述第一容器具有第一容器存儲(chǔ)單元;所述方法包括:檢測(cè)到第一容器中的應(yīng)用通過(guò)可寫(xiě)方式打開(kāi)保存在Base存儲(chǔ)單元中的文件時(shí),開(kāi)始在第一容器存儲(chǔ)單元中建立所述文件的副本;檢測(cè)到所述第一容器中的應(yīng)用對(duì)所述文件進(jìn)行寫(xiě)操作時(shí),獲取所述文件的更新數(shù)據(jù),根據(jù)所述文件的更新數(shù)據(jù)構(gòu)建并保存數(shù)據(jù)項(xiàng);檢測(cè)到所述文件的副本建立完成時(shí),從所述數(shù)據(jù)項(xiàng)中獲取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)同步到所述文件的副本中。
[0008]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述方法還包括:同步操作完成后,如果所述第一容器中的應(yīng)用對(duì)所述文件繼續(xù)進(jìn)行寫(xiě)操作時(shí),將文件操作對(duì)象切換到所述文件的副本,后續(xù)對(duì)所述文件的更新數(shù)據(jù)直接寫(xiě)入所述文件的副本中。
[0009]結(jié)合第一方面或者第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述獲取所述文件的更新數(shù)據(jù),根據(jù)所述文件的更新數(shù)據(jù)構(gòu)建并保存數(shù)據(jù)項(xiàng)包括:從所述第一容器的內(nèi)存中讀取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)及其數(shù)據(jù)控制信息,以及對(duì)應(yīng)的Base存儲(chǔ)單元中的源數(shù)據(jù)和所述寫(xiě)操作信息封裝為一個(gè)數(shù)據(jù)項(xiàng),將所述數(shù)據(jù)項(xiàng)保存在所述第一容器存儲(chǔ)單元的一個(gè)存儲(chǔ)文件中。
[0010]結(jié)合第一方面或者第一方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述從所述數(shù)據(jù)項(xiàng)中獲取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)同步到所述文件的副本中包括:讀取所述數(shù)據(jù)項(xiàng)信息,將每一個(gè)數(shù)據(jù)項(xiàng)都掛到一個(gè)總的處理隊(duì)列中;依次將所述處理隊(duì)列中每個(gè)數(shù)據(jù)項(xiàng)中記錄的所述文件的更新數(shù)據(jù),按照記錄的所述寫(xiě)操作信息,同步到所述文件的副本中。
[0011]結(jié)合第一方面或者第一方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任一種,在第四種可能的實(shí)現(xiàn)方式中,所述容器虛擬化系統(tǒng)部署于單個(gè)計(jì)算機(jī)設(shè)備上,所述計(jì)算機(jī)設(shè)備包括硬件層和運(yùn)行在硬件層上的宿主機(jī),所述多個(gè)容器運(yùn)行在所述宿主機(jī)中,所述硬件層包括所述Base存儲(chǔ)單元和所述多個(gè)容器存儲(chǔ)單元,所述多個(gè)容器存儲(chǔ)單元分別從屬于所述多個(gè)容器。
[0012]結(jié)合第一方面或者第一方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任一種,在第五種可能的實(shí)現(xiàn)方式中,所述容器虛擬化系統(tǒng)部署于分布式的計(jì)算機(jī)集群系統(tǒng)中,所述計(jì)算機(jī)集群系統(tǒng)包括多個(gè)計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)以及存儲(chǔ)管理節(jié)點(diǎn),所述多個(gè)容器分布式的運(yùn)行于所述多個(gè)計(jì)算節(jié)點(diǎn)中,所述存儲(chǔ)節(jié)點(diǎn)包括所述基礎(chǔ)Base存儲(chǔ)單元和所述多個(gè)容器存儲(chǔ)單元,所述多個(gè)容器存儲(chǔ)單元分別從屬于所述多個(gè)容器,所述管理存儲(chǔ)節(jié)點(diǎn)用于管理所述存儲(chǔ)節(jié)點(diǎn),所述多個(gè)計(jì)算節(jié)點(diǎn)包括第一計(jì)算節(jié)點(diǎn),所述第一容器運(yùn)行在所述第一計(jì)算節(jié)點(diǎn)中。
[0013]本發(fā)明第二方面提供一種數(shù)據(jù)存儲(chǔ)裝置,用于容器虛擬化系統(tǒng),所述容器虛擬化系統(tǒng)中運(yùn)行多個(gè)容器,所述多個(gè)容器具有各自的容器存儲(chǔ)單元,且所述多個(gè)容器共用基礎(chǔ)Base存儲(chǔ)單元,所述多個(gè)容器包括第一容器,所述第一容器具有第一容器存儲(chǔ)單元;所述數(shù)據(jù)存儲(chǔ)裝置包括:容器數(shù)據(jù)記錄模塊,用于檢測(cè)到第一容器中的應(yīng)用通過(guò)可寫(xiě)方式打開(kāi)保存在Base存儲(chǔ)單元中的文件時(shí),發(fā)送同步通知給容器數(shù)據(jù)同步模塊;所述容器數(shù)據(jù)同步模塊,用于在收到所述同步通知后,開(kāi)始在第一容器存儲(chǔ)單元中建立所述文件的副本;所述容器數(shù)據(jù)記錄模塊,還用于檢測(cè)到所述第一容器中的應(yīng)用對(duì)所述文件進(jìn)行寫(xiě)操作時(shí),獲取所述文件的更新數(shù)據(jù),根據(jù)所述文件的更新數(shù)據(jù)構(gòu)建并保存數(shù)據(jù)項(xiàng);所述容器數(shù)據(jù)同步模塊,還用于檢測(cè)到所述文件的副本建立完成時(shí),從所述數(shù)據(jù)項(xiàng)中獲取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)同步到所述文件的副本中。
[0014]結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述容器數(shù)據(jù)同步模塊,還用于在同步操作完成后,發(fā)送切換通知給容器數(shù)據(jù)記錄模塊;所述容器數(shù)據(jù)記錄模塊,還用于接收到切換通知后,如果檢測(cè)到所述第一容器中的應(yīng)用對(duì)所述文件繼續(xù)進(jìn)行寫(xiě)操作時(shí),將文件操作對(duì)象切換到所述文件的副本,后續(xù)對(duì)所述文件的更新數(shù)據(jù)直接寫(xiě)入所述文件的副本中。
[0015]結(jié)合第二方面或者第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述容器數(shù)據(jù)記錄模塊,具體用于從所述第一容器的內(nèi)存中讀取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)及其數(shù)據(jù)控制信息,以及對(duì)應(yīng)的Base存儲(chǔ)單元中的源數(shù)據(jù)和所述寫(xiě)操作信息封裝為一個(gè)數(shù)據(jù)項(xiàng),將所述數(shù)據(jù)項(xiàng)保存在所述第一容器存儲(chǔ)單元的一個(gè)存儲(chǔ)文件中。
[0016]結(jié)合第二方面或者第二方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述容器數(shù)據(jù)同步模塊,具體用于讀取所述數(shù)據(jù)項(xiàng)信息,將每一個(gè)數(shù)據(jù)項(xiàng)都掛到一個(gè)總的處理隊(duì)列中;依次將所述處理隊(duì)列中每個(gè)數(shù)據(jù)項(xiàng)中記錄的所述文件的更新數(shù)據(jù),按照記錄的所述寫(xiě)操作信息,同步到所述文件的副本中。
[0017]結(jié)合第二方面或者第二方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任一種,在第四種可能的實(shí)現(xiàn)方式中,所述容器虛擬化系統(tǒng)部署于單個(gè)計(jì)算機(jī)設(shè)備上,所述計(jì)算機(jī)設(shè)備包括硬件層和運(yùn)行在硬件層上的宿主機(jī),所述多個(gè)容器運(yùn)行在所述宿主機(jī)中,所述硬件層包括所述Base存儲(chǔ)單元和所述多個(gè)容器存儲(chǔ)單元,所述多個(gè)容器存儲(chǔ)單元分別從屬于所述多個(gè)容器。
[0018]結(jié)合第二方面或者第二方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任一種,在第五種可能的實(shí)現(xiàn)方式中,所述容器虛擬化系統(tǒng)部署于分布式的計(jì)算機(jī)集群系統(tǒng)中,所述計(jì)算機(jī)集群系統(tǒng)包括多個(gè)計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)以及存儲(chǔ)管理節(jié)點(diǎn),所述多個(gè)容器分布式的運(yùn)行于所述多個(gè)計(jì)算節(jié)點(diǎn)中,所述存儲(chǔ)節(jié)點(diǎn)包括所述基礎(chǔ)Base存儲(chǔ)單元和所述多個(gè)容器存儲(chǔ)單元,所述多個(gè)容器存儲(chǔ)單元分別從屬于所述多個(gè)容器,所述管理存儲(chǔ)節(jié)點(diǎn)用于管理所述存儲(chǔ)節(jié)點(diǎn),所述多個(gè)計(jì)算節(jié)點(diǎn)包括第一計(jì)算節(jié)點(diǎn),所述第一容器運(yùn)行在所述第一計(jì)算節(jié)點(diǎn)中。
[0019]本發(fā)明第三方面提供一種數(shù)據(jù)存儲(chǔ)方法,用于計(jì)算機(jī)設(shè)備,所述計(jì)算機(jī)設(shè)備包括硬件層和運(yùn)行在硬件層上的宿主機(jī),所述宿主機(jī)中運(yùn)行多個(gè)容器,所述硬件層包括基礎(chǔ)Base存儲(chǔ)單元和多個(gè)容器存儲(chǔ)單元,所述多個(gè)容器存儲(chǔ)單元分別從屬于所述多個(gè)容器,所述多個(gè)容器包括第一容器,所述多個(gè)容器存儲(chǔ)單元包括從屬于所述第一容器的第一容器存儲(chǔ)單元;所述方法包括:檢測(cè)到第一容器中的應(yīng)用通過(guò)可寫(xiě)方式打開(kāi)保存在Base存儲(chǔ)單元中的文件時(shí),開(kāi)始在第一容器存儲(chǔ)單元中建立所述文件的副本;檢測(cè)到所述第一容器中的應(yīng)用對(duì)所述文件進(jìn)行寫(xiě)操作時(shí),獲取所述文件的更新數(shù)據(jù),根據(jù)所述文件的更新數(shù)據(jù)構(gòu)建并保存數(shù)據(jù)項(xiàng);檢測(cè)到所述文件的副本建立完成時(shí),從所述數(shù)據(jù)項(xiàng)中獲取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)同步到所述文件的副本中。
[0020]結(jié)合第三方面,在第一種可能的實(shí)現(xiàn)方式中,方法還包括:同步操作完成后,如果所述第一容器中的應(yīng)用對(duì)所述文件繼續(xù)進(jìn)行寫(xiě)操作時(shí),將文件操作對(duì)象切換到所述文件的副本,后續(xù)對(duì)所述文件的更新數(shù)據(jù)直接寫(xiě)入所述文件的副本中。
[0021]結(jié)合第三方面或者第三方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述獲取所述文件的更新數(shù)據(jù),根據(jù)所述文件的更新數(shù)據(jù)構(gòu)建并保存數(shù)據(jù)項(xiàng)包括:從所述第一容器的內(nèi)存中讀取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)及其數(shù)據(jù)控制信息,以及對(duì)應(yīng)的Base存儲(chǔ)單元中的源數(shù)據(jù)和所述寫(xiě)操作信息封裝為一個(gè)數(shù)據(jù)項(xiàng),將所述數(shù)據(jù)項(xiàng)保存在所述第一容器存儲(chǔ)單元的一個(gè)存儲(chǔ)文件中。
[0022]結(jié)合第三方面或者第三方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述從所述數(shù)據(jù)項(xiàng)中獲取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)同步到所述文件的副本中包括:讀取所述數(shù)據(jù)項(xiàng)信息,將每一個(gè)數(shù)據(jù)項(xiàng)都掛到一個(gè)總的處理隊(duì)列中;依次將所述處理隊(duì)列中每個(gè)數(shù)據(jù)項(xiàng)中記錄的所述文件的更新數(shù)據(jù),按照記錄的所述寫(xiě)操作信息,同步到所述文件的副本中。
[0023]本發(fā)明第四方面提供一種數(shù)據(jù)存儲(chǔ)方法,包括:用于計(jì)算機(jī)集群系統(tǒng),所述計(jì)算機(jī)集群系統(tǒng)包括多個(gè)計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)以及存儲(chǔ)管理節(jié)點(diǎn),所述多個(gè)計(jì)算節(jié)點(diǎn)中的每一個(gè)計(jì)算節(jié)點(diǎn)上運(yùn)行多個(gè)容器,所述存儲(chǔ)節(jié)點(diǎn)包括基礎(chǔ)Base存儲(chǔ)單元和多個(gè)容器存儲(chǔ)單元,所述多個(gè)容器存儲(chǔ)單元分別從屬于所述多個(gè)計(jì)算節(jié)點(diǎn)上運(yùn)行的多個(gè)容器,所述管理存儲(chǔ)節(jié)點(diǎn)用于管理所述存儲(chǔ)節(jié)點(diǎn),所述多個(gè)計(jì)算節(jié)點(diǎn)包括第一計(jì)算節(jié)點(diǎn),所述第一計(jì)算節(jié)點(diǎn)上運(yùn)行有第一容器,所述多個(gè)容器存儲(chǔ)單元包括從屬于所述第一容器的第一容器存儲(chǔ)單元;所述方法包括:第一計(jì)算節(jié)點(diǎn)檢測(cè)到第一容器中的應(yīng)用通過(guò)可寫(xiě)方式打開(kāi)保存在Base存儲(chǔ)單元中的文件時(shí),發(fā)送副本建立通知給所述存儲(chǔ)管理節(jié)點(diǎn),以便所述存儲(chǔ)管理節(jié)點(diǎn)開(kāi)始在所述存儲(chǔ)節(jié)點(diǎn)的第一容器存儲(chǔ)單元中建立所述文件的副本;所述第一計(jì)算節(jié)點(diǎn)檢測(cè)到所述第一容器中的應(yīng)用對(duì)所述文件進(jìn)行寫(xiě)操作時(shí),獲取所述文件的更新數(shù)據(jù),根據(jù)所述文件的更新數(shù)據(jù)構(gòu)建并保存數(shù)據(jù)項(xiàng),以便所述存儲(chǔ)管理節(jié)點(diǎn)檢測(cè)到所述文件的副本建立完成時(shí),從所述數(shù)據(jù)項(xiàng)中獲取所述文件的更新數(shù)據(jù),將所述文件的更新數(shù)據(jù)同步到所述文件的副本中。
[0024]結(jié)合第四方面,在第一種可能的實(shí)現(xiàn)方式中,方法還包括:所述第一計(jì)算節(jié)點(diǎn)接收到所述存儲(chǔ)管理節(jié)點(diǎn)在所述同步操作完成后發(fā)送的切換通知后,如果所述第一容器中的應(yīng)用對(duì)所述文件繼續(xù)進(jìn)行寫(xiě)操作時(shí),將文件操作對(duì)象切換到所述文件的副本,后續(xù)對(duì)所述文件的更新數(shù)據(jù)直接寫(xiě)入所述文件的副本中。
[0025]結(jié)合第四方面或者第四方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述獲取所述文件的更新數(shù)據(jù),根據(jù)所述文件的更新數(shù)據(jù)構(gòu)建并保存數(shù)據(jù)