專利名稱:基于容器的處理方法、裝置和系統(tǒng)的制作方法
技術(shù)領域:
本發(fā)明涉及計算機領域,更具體地,涉及基于容器的處理方法、裝置和系統(tǒng)。
背景技術(shù):
在計算機系統(tǒng)中,容器(contai ner)可以作為ー種輕量級的虛擬機,即容器是ー種操作系統(tǒng)層次上的資源的虛擬化,用以隔離進程和資源。借助于容器,計算機系統(tǒng)的操作系統(tǒng)可以讓應用程序如同在獨立的機器上運行一祥。它有效地將由單個操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。常見的容器技術(shù)包括Solaris Zones、BSD Jails和Linux操作系統(tǒng)上的容器等等。在Linux內(nèi)核(Kernel)中,通??梢允褂每刂平M(cgroup)文件系統(tǒng)來管理容器。控制組用于對ー組進程進行行為控制,從而可限制控制組中的進程及其子進程所使用的系統(tǒng)資源。相應地,在使用容器之前,需要掛載(mount)控制組文件系統(tǒng),例如,創(chuàng)建(create)控制組目錄“/cgroup”,并且在該目錄下生成控制組文件,用于限制進程所使用的系統(tǒng)資源。在容器的運行過程中,可能需要對容器狀態(tài)及進程狀態(tài)進行備份/恢復(checkpoint/restart, C/R),這就需要知道某一時刻的控制組的狀態(tài)(例如,容器的資源限制狀態(tài))。通常的方案是遍歷控制組目錄下的所有控制組文件來獲取并且保存控制組的狀態(tài)。控制組目錄“/cgroup”下通常保存有幾十個控制組文件,因此,遍歷機制的系統(tǒng)開銷比較大,而且系統(tǒng)開銷隨著文件數(shù)目的増加而線性增長。
發(fā)明內(nèi)容
本發(fā)明實施例提供了一種基于容器的處理方法、裝置和系統(tǒng),能夠減小系統(tǒng)開銷。一方面,提供了一種基于容器的處理方法,包括在需要備份該容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定該容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中至少ー組控制組文件用于對該容器中的一組進程的運行進行控制,該標志文件包括與至少ー個控制組文件相對應的至少ー個標志位,至少ー個標志位用于分別指示至少ー個控制組文件的內(nèi)容是否被修改;根據(jù)至少一個標志位與至少ー個控制組文件的文件名之間的對應關系獲取與第一標志位相對應的第一控制組文件的文件名;根據(jù)至少一個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名對應的第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置處存儲的第一控制組文件中提取修改后的第一控制組文件的內(nèi)容;備份第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容。另ー方面,提供了一種基于容器的處理裝置,包括確定模塊,用于在需要備份該容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定該容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中至少ー組控制組文件用于對該容器中的一組進程的運行進行控制,該標志文件包括與至少ー個控制組文件相對應的至少ー個標志位,至少ー個標志位用于分別指示至少ー個控制組文件的內(nèi)容是否被修改;獲取模塊,用于根據(jù)至少ー個標志位與至少ー個控制組文件的文件名之間的對應關系獲取與第一標志位相對應的第一控制組文件的文件名;查找模塊,用于根據(jù)至少ー個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名對應的第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的第一控制組文件的內(nèi)容;備份模塊,用于備份第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容。另ー方面,一種計算機系統(tǒng),包括總線;與該總線相連的處理器,所述處理器之上運行有ー個或多個容器;與該總線相連的存儲器;其中,該處理器通過該總線,調(diào)用該存儲器中存儲的代碼,以用于在需要備份所述ー個或多個容器中的容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定該容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中至少ー組控制組文件用于對該容器中的一組進程的運行進行控制,該標志文件包括與至少ー個控制組文件相對應的至少ー個標志位,至少ー個標志位用于分別指示至少一個控制組文件的內(nèi)容是否被修改;根據(jù)至少一個標志位與至少ー個控制組文件的文件名之間的對應關系獲取與第一標志位相對應的第一控制組文件的文件名;根據(jù)至少一個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系查找與所述第一控制組文 件的文件名對應的第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的第一控制組文件的內(nèi)容;備份第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容。本發(fā)明實施例中,在需要備份所述容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定所述容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中所述至少ー組控制組文件用于對所述容器中的一組進程的運行進行控制,所述標志文件包括與所述至少ー個控制組文件相對應的至少ー個標志位,所述至少一個標志位用于分別指示所述至少ー個控制組文件的內(nèi)容是否被修改;根據(jù)所述至少ー個標志位與所述至少ー個控制組文件的文件名之間的對應關系獲取與所述第一標志位相對應的所述第一控制組文件的文件名;根據(jù)所述至少ー個控制組文件的文件名與所述至少一個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名對應的所述第一控制組文件的存儲位置,并且從所述第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的所述第一控制組文件的內(nèi)容;備份所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容??梢?,本發(fā)明實施例可以通過標志文件中的標志位來確定與容器相對應的多個控制組文件中的哪些控制組文件的內(nèi)容被修改,因此,無需遍歷全部控制組文件就能夠獲知容器的狀態(tài),并且可以只根據(jù)標志位查找被修改控制組文件的存儲位置并備份被修改的控制組文件的內(nèi)容,從而減小了系統(tǒng)開銷。
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖I是根據(jù)本發(fā)明的實施例的基于容器的處理方法的示意性流程圖。圖2是根據(jù)本發(fā)明的實施例的控制組文件系統(tǒng)的截屏。圖3是根據(jù)本發(fā)明的實施例的哈希查找表的示意圖。圖4是根據(jù)本發(fā)明的實施例的基于容器的處理過程的示意圖。圖5是根據(jù)本發(fā)明的另ー實施例的基于容器的處理過程的示意圖。圖6是根據(jù)本發(fā)明的一個實施例的基于容器的處理系統(tǒng)的結(jié)構(gòu)性示意圖。圖7是根據(jù)本發(fā)明的另ー實施例的基于容器的處理系統(tǒng)的結(jié)構(gòu)性示意圖。圖8示出了根據(jù)本發(fā)明實施例的計算機系統(tǒng)的示意性框圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。在基于容器的處理系統(tǒng)中,備份/恢復指在某一時刻將容器的狀態(tài)(例如,控制組的狀態(tài))及控制組中的進程的執(zhí)行狀態(tài)進行保存與恢復。在容器的狀態(tài)及進程的執(zhí)行狀態(tài)恢復之后,進程可以從保存時刻的執(zhí)行狀態(tài)開始繼續(xù)執(zhí)行,并維持保存時刻的各種行為控制。容器的狀態(tài)可以包括容器的資源限制狀態(tài)、容器的安全信息以及容器所在的主機名等
坐寸ο實現(xiàn)應用程序的執(zhí)行狀態(tài)的實時保存與恢復的前提是,應用程序在虛擬的容器中運行,也就是說,使用獨立的命名空間實現(xiàn)輕量級的虛擬化??梢詾槿萜髦械膽贸绦騽?chuàng)建控制組,并且通過控制組機制對應用程序進行資源限制。在為容器創(chuàng)建控制組時,會產(chǎn)生與容器相對應的控制組目錄。當需要對容器中應用程序進行資源限制吋,需打開控制組目錄下表征指定資源的控制組文件,并且在打開的控制組文件中寫入允許進程使用資源的大小,即可達到限制資源的目的。因此,與容器相對應的控制組目錄下的各個文件中的值表明了在容器中的應用程序的運行所使用的各種資源的限定值。另外,在創(chuàng)建控制組文件時,控制組文件中的值為默認值。在對容器狀態(tài)及進程狀態(tài)的備份/恢復過程中,通過保存與容器對應的控制組目錄下各個控制組文件中的值來實現(xiàn)容器的資源限制狀態(tài)。常規(guī)的備份/恢復容器的狀態(tài)的方案為,在備份階段,遍歷與容器對應的控制組目錄下的所有控制組文件,記錄所有控制組文件中的值并保存到容器狀態(tài)文件中。備份完成之后,可以刪除上述容器以及與該容器相對應的控制組目錄。在恢復階段可以建立新的容器以及與該容器相對應的控制組目錄,以保存的容器狀態(tài)文件作為輸入,讀取容器狀態(tài)文件中保存的所有值,并且再次遍歷所有新的控制組目錄下所有控制組文件,并且將保存在容器狀態(tài)文件中的值寫到這些控制組文件中,以恢復備份階段的資源限制狀態(tài)。這里,新的控制組文件是指在恢復容器的狀態(tài)時為新的容器的進程創(chuàng)建的新的控制組目錄和新的控制組文件,新的控制組文件包含默認值。按照上述方法,在容器狀態(tài)的備份與恢復期間,需要兩次打開對應的控制組目錄下幾十個控制組文件并進行讀操作和寫操作,但這些控制組文件毎次被創(chuàng)建時初始值都相同,且往往只有少數(shù)幾個相對創(chuàng)建時有所改動或完全沒有改動,因此,常規(guī)方案明顯降低了備份與恢復的效率。隨著控制組機制的完善,控制組目錄下的文件將逐漸增多,遍歷機制的系統(tǒng)開銷隨文件數(shù)的増加而線性增長,因此,可擴展性較差。因此,本發(fā)明提出的目的還在于縮短容器狀態(tài)備份與恢復所需的時間,降低備份與恢復過程的系統(tǒng)開銷。圖I是根據(jù)本發(fā)明的實施例的基于容器的處理方法的示意性流程圖。圖I的方法包括如下內(nèi)容。110,在需要備份該容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定該容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中至少ー組控制組文件用于對該容器中的一組進程的運行進行控制,該標志文件包括與至少ー個控制組文件相對應的至少ー個標志位,至少ー個標志位用于分別指示至少ー個控制組文件的內(nèi)容是否被修改;120,根據(jù)至少一個標志位與至少ー個控制組文件的文件名之間的對應關系獲取 與第一標志位相對應的第一控制組文件的文件名;130,根據(jù)至少一個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名對應的第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的第一控制組文件的內(nèi)容;140,備份第一控制組文件的文件名和上述修改后的第一控制組文件的內(nèi)容。例如,上述至少ー個控制組文件和標志文件可以存儲在與容器相對應的控制組文件系統(tǒng)的目錄(以下稱為控制組目錄)下。上述至少ー個控制組文件可以用于對該容器中的運行的ー組進程進行行為控制,例如,可以限制上述進程及其子進程所使用的系統(tǒng)資源。上述至少一個控制組文件的內(nèi)容可以是進程能夠使用的系統(tǒng)資源的限定值,例如,CPU時間、內(nèi)存大小以及帶寬等等。例如,上述一組進程為至少ー個進程。當上述至少ー個控制組文件中的某個控制組文件的內(nèi)容被修改時,可以相應地修改與該控制組文件相對應的標志位,例如,可以將相應的標志位置位,以便記錄哪個控制組文件被修改。這樣,可以通過標志位的值或者標志位是否被修改來確定與該標志位相對應的控制組文件是否被修改,例如,該標志位為I表示與該標志位相對應的控制組文件被修改過,該標志位為O表示與該標志位相對應的控制組文件未被修改過,從而可以快速獲知控制組或容器的狀態(tài)(例如,系統(tǒng)資源限定值的大小)。在具體應用中,該標志位的修改可能在容器啟動時通過讀取設置的配置文件修改控制組文件而引起,或在容器運行過程中由于用戶手動修改控制組文件而引起,根據(jù)本發(fā)明的實施例對此并不限定。在需要備份該容器的狀態(tài)時,可以讀取上述標志文件,根據(jù)該標志文件中被修改的第一標志位確定第一控制組文件的文件名,根據(jù)第一控制組文件的文件名在上述至少ー個控制組文件中查找與第一標志位相對應的第一控制組文件,并且將修改后的第一控制組文件的內(nèi)容備份在容器狀態(tài)文件中。例如,可以在進程的目錄下(例如,進程的源文件所在的目錄下)存儲上述容器狀態(tài)文件,用于記錄控制組文件的修改情況。在備份容器的狀態(tài)的階段,可以從控制組目錄下讀取上述標志文件,根據(jù)被修改過的標志位知道哪些(哪個)控制組文件被修改過,并且根據(jù)該控制組文件的文件名在控制組目錄下查找該控制組文件,例如,查找該控制組文件的存儲位置。根據(jù)本發(fā)明的實施例并不限制查找控制組文件的方法,例如,可以采用遍歷法、二分法或哈希(hash)查找法等等。在查找到該控制組文件后,可以打開該控制組文件,讀取該控制組文件的內(nèi)容(例如CPU時間、內(nèi)存大小等等),并且將該內(nèi)容寫入到容器狀態(tài)文件中,以便恢復容器的狀態(tài)時使用。應理解,上述至少ー個標志位與至少ー個控制組文件的文件名之間的對應關系可以在建立標志文件時獲得并保存,例如,可以通過用來遍歷控制組目錄下的控制組文件的函數(shù)獲得上述至少ー個標志位與至少ー個控制組文件的文件名之間的對應關系,即標志位的順序與遍歷控制組文件的順序一致。根據(jù)本發(fā)明的實施例并不限于此,也可以在備份容器的狀態(tài)時利用該函數(shù)獲得。還應理解,可以在需要時備份容器的狀態(tài),也可以根據(jù)預先設定的周期備份容器的狀態(tài),本發(fā)明的實施例對備份容器的狀態(tài)的時機不作限制。
根據(jù)本發(fā)明的實施例可以通過標志文件中的標志位來確定哪些控制組文件中的內(nèi)容被修改過,因此,無需遍歷全部控制組文件就能夠獲知控制組及容器的狀態(tài),并且可以只根據(jù)標志位查找被修改控制組文件的存儲位置并備份被修改的控制組文件的內(nèi)容,從而減小了系統(tǒng)開銷??蛇x地,作為另ー實施例,該方法還包括為至少一個控制組文件的文件路徑建立第一哈希查找表,其中第一哈希查找表用于表示至少ー個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系,其中在130中,可以根據(jù)第一控制組文件的文件名在第一哈希查找表中查找與所述第一控制組文件的文件名對應的第一控制組文件的存儲位置;在140中,可以將第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容備份在容器狀態(tài)文件中。換句話說,可以為上述至少ー個控制組文件的文件路徑建立第一哈希查找表,其中可以根據(jù)第一控制組文件的文件名通過第一哈希查找表在上述至少ー個控制組文件中查找與第一標志位相對應的第一控制組文件。例如,在備份容器的狀態(tài)的階段,需要根據(jù)被修改的控制組文件的文件名在控制組目錄下查找該控制組文件。為了加快控制組文件的查找速度,可以為控制組文件的路徑建立哈希查找表,以根據(jù)哈希查找表直接找到該控制組文件的存儲位置,從而提高控制組文件的查找和訪問效率。例如,可以根據(jù)該控制組文件的文件名以及第一哈希查找表所使用的哈希函數(shù)計算索引值,并且根據(jù)該索引值查找第一哈希查找表來確定該控制組文件的存儲位置。由于根據(jù)本發(fā)明的實施例可以根據(jù)計算出的索引值直接找到該控制組文件的存儲位置,因此,避免了在備份容器的狀態(tài)階段遍歷控制組目錄下的全部控制組文件來查找該控制組文件。例如,根據(jù)本發(fā)明的實施例可以檢查上述至少ー個標志位,并且在確定上述至少一個標志位的值不為O (意味著與上述至少ー個標志位對應的控制組文件被修改過)的情況下,將與該容器對應的控制組目錄下所有文件的路徑建立哈希查找表。如果上述至少ー個標志位的值均為0,意味著沒有控制組文件被修改過,則沒有必要備份容器的狀態(tài),因此也沒有必要建立哈希查找表。另外,在備份完成之后,可以刪除上述容器以及與該容器相對應的控制組目錄??蛇x地,作為另ー實施例,該方法還包括在需要恢復該容器的狀態(tài)時,獲取備份的第一控制組文件的文件名和上述修改后的第一控制組文件的內(nèi)容;根據(jù)待恢復的至少ー個控制組文件的文件名與上述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名相對應的待恢復的第一控制組文件的存儲位置;將備份的上述修改后的第一控制組文件的內(nèi)容寫入到上述待恢復的第一控制組文件的存儲位置處存儲的上述待恢復的第一控制組文件中。換句話說,可以在需要恢復該容器的狀態(tài)時,讀取上述容器狀態(tài)文件以獲取第一控制組文件的文件名和修改后的第一控制組文件的內(nèi)容;存儲至少ー個新的控制組文件和新的標志文件,上述至少ー組新的控制組文件用于對新的容器的一組進程的運行進行控制;根據(jù)第一控制組文件的文件名在上述至少ー個新的控制組文件中查找新的第一控制組文件,并且將上述修改后的第一控制組文件的內(nèi)容寫入到上述新的第一控制組文件中。例如,在需要恢復容器的狀態(tài)的階段,可以為新的容器建立新的控制組目錄、新的控制組文件以及新的標志文件。然后,可以從容器狀態(tài)文件中讀取保存的控制組文件的文件名和修改后的內(nèi)容,并且根據(jù)該控制組文件的文件名在新的控制組目錄下查找新的控制組文件。根據(jù)本發(fā)明的實施例并不限制查找控制組文件的方法,例如,可以采用遍歷法、ニ分法或哈希查找法等等。在查找到新的控制組文件后,可以打開新的控制組文件,并且將上述容器狀態(tài)文件中保存的修改后的內(nèi)容寫入到新的控制組文件中,從而完成了容器狀態(tài)的恢復過程。其中新的容器以及與該新的容器相對應的控制組目錄可以在恢復容器的狀態(tài)時創(chuàng)建。還應理解,可以在需要時恢復容器的狀態(tài),本發(fā)明的實施例對恢復容器的狀態(tài)的時機不作限制??蛇x地,作為另ー實施例,該方法還包括為上述待恢復的至少ー個控制組文件的文件路徑建立第二哈希查找表,其中第二哈希查找表用于表示上述待恢復的至少ー個控制組文件的文件名與上述待恢復的(或者新的)至少ー個控制組文件的存儲位置的對應關系,其中上述根據(jù)待恢復的至少ー個控制組文件的文件名與上述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名相對應的上述待恢復的第一控制組文件的存儲位置,包括根據(jù)第一控制組文件的文件名在第二哈希查找表中查找與第一控制組文件的文件名對應的上述待恢復的第一控制組文件的存儲位置。換句話說,可以為上述至少ー個控制組文件的文件路徑建立第二哈希查找表,其中可以根據(jù)第一控制組文件的文件名通過第二哈希查找表在上述至少ー個控制組文件中查找第一控制組文件。例如,可以根據(jù)該控制組文件的文件名和第二哈希查找表所使用的哈希函數(shù)計算索引值,并且根據(jù)該索引值和第二哈希查找表確定該控制組文件的存儲位置。由于根據(jù)本發(fā)明的實施例可以根據(jù)計算出的索引值直接找到該控制組文件的存儲位置,因此,避免了在恢復容器的狀態(tài)階段遍歷控制組目錄下的全部控制組文件來查找該控制組文件??蛇x地,作為另ー實施例,圖I的方法還包括在恢復該容器的狀態(tài)時,創(chuàng)建新的容器;生成與該新的容器相對應的控制組目錄;在與該新的容器相對應的控制組目錄下生成上述待恢復的至少ー個控制組文件和待恢復的標志文件;建立上述待恢復的至少ー個控制組文件的文件名與上述待恢復的標志文件中的至少ー個標志位之間的一一對應關系。例如,為了備份該容器的狀態(tài),需要創(chuàng)建新的容器,并且在該新的容器的控制組目、錄下生成相應的控制組文件和標志文件,新的控制組文件和標志文件可以包括初始值。另夕卜,還可以在創(chuàng)建控制組目錄時采用數(shù)組的方式建立新控制組文件與新標志位的一一對應關系。可選地,作為另ー實施例,圖I的方法還包括在修改至少ー個控制組文件中的第一控制組文件的內(nèi)容的情況下,修改該標志文件中與第一控制組文件相對應的第一標志位,并且可以在該標志文件的至少ー個標志位被修改的情況下,確定需要備份該容器的狀態(tài),或者在接收到備份所述容器的狀態(tài)的指令或預先設定的備份所述容器狀態(tài)的周期期滿時,檢測所述標志文件的至少ー個標志位是否被修改(如果標志位的初始值為0,即檢測標志文件中的標志位是否全為0),并且在檢測到所述標志文件的至少ー個標志位被修改的情況下,確定需要備份所述容器的狀態(tài)的操作。例如,當某個控制組文件被修改時,與該控制組文件相對應的標志位也相應地被修改,并且觸發(fā)備份容器的狀態(tài)的操作??蛇x地,也可以在標志位被修改時暫時不備份容器的狀態(tài),而是在用戶發(fā)出備份指令或者預先設定的周期期滿時,才讀取上述標志文件,然后確定該標志文件中是否有標志位被修改過,如果被修改過才觸發(fā)執(zhí)行備份容器狀態(tài)的操 作。如果上述標志文件的標志位全部未被修改過(說明控制組文件未做任何修改),則直接跳過容器狀態(tài)的備份和恢復過程,這也降低了不必要的系統(tǒng)開銷。根據(jù)本發(fā)明的實施例,在修改至少ー個控制組文件中的第一控制組文件的內(nèi)容時,可以在該容器啟動時根據(jù)預先設置的配置文件修改上述至少ー個控制組文件中的第一控制組文件的內(nèi)容??蛇x地,作為另ー實施例,在修改至少ー個控制組文件中的第一控制組文件的內(nèi)容時,可以在該容器的運行過程中,根據(jù)用戶的需要修改上述至少ー個控制組文件中的第一控制組文件的內(nèi)容。根據(jù)本發(fā)明的實施例,上述至少ー個控制組文件的內(nèi)容為該容器中的一組進程在運行時所使用的資源的限定值。上述至少ー個控制組文件用來共同控制該組進程所使用的資源的限定值,例如,與CPU相關的控制組文件可以限定該組進程在運行時所使用的CPU時間或者CPU時間利用率,例如,當CPU時間為20%時,可以在該控制組文件中保存數(shù)值20%,以限定該組進程在運行時所使用的CPU時間總共為20%。再如,與內(nèi)存相關的控制組文件可以限定該組進程在運行時所占用的內(nèi)存的大小??蛇x地,作為另ー實施例,圖I的方法還包括在使用所述容器對所述一組進程的運行進行控制之前,創(chuàng)建上述容器;生成與該容器相對應的控制組目錄;在與所述容器相對應的控制組目錄下生成上述至少ー個控制組文件和該標志文件;建立上述至少ー個控制組文件的文件名與該標志文件中的上述至少ー個標志位的--對應關系。例如,在創(chuàng)建上述容器吋,可以在該容器的控制組目錄下生成相應的控制組文件和標志文件,控制組文件和標志文件可以包括初始值。另外,可以在創(chuàng)建控制組目錄時采用數(shù)組的方式建立控制組文件與標志位的一一對應關系??蛇x地,作為另ー實施例,圖I的方法還包括在創(chuàng)建該容器時,將該標志文件中的上述至少ー個標志位設置為初始化值,其中,在修改該標志文件中與第一控制組文件相對應的第一標志位時,可以將與第一控制組文件相對應的第一標志位對初始化值進行置位。如果在創(chuàng)建容器時將上述標志位初始化為零,則可以根據(jù)標志位的值是否為I來確定與該標志位相對應的控制組文件是否被修改過。應理解,當容器的狀態(tài)被恢復之后,下一次備份/恢復的過程與上述過程類似。根據(jù)本發(fā)明的實施例可以通過建立用于指示容器狀態(tài)是否被修改過的標志位的方式來表示控制組文件的修改情況,避免了不必要的控制組目錄遍歷。另外,可以為控制組文件路徑建立哈希查找表,提高了文件的查找和訪問效率,并且該效率不隨控制組目錄下文件數(shù)目的擴展而降低。與常規(guī)方案相比,本發(fā)明的實施例提高了容器狀態(tài)的備份/恢復過程的效率,同時增加了備份/恢復方法的可擴展性。圖2是根據(jù)本發(fā)明的實施例的控制組文件系統(tǒng)的截屏。 根據(jù)本發(fā)明的實施例的控制組文件系統(tǒng)可以包含多個子系統(tǒng)。例如,blkio子系統(tǒng)用于限制設備(例如磁盤,光盤以及usb等等)的輸入輸出控制,可以包括blkio. sectors、blkio. time、blkio. weight等控制組文件。cpu子系統(tǒng)用于使用調(diào)度程序為控制組任務(task)提供對cpu的訪問。cpuacct子系統(tǒng)用于產(chǎn)生控制組任務的cpu資源報告,可以包括cpuacct. stat、cpuacct. usage 和 cpuacct. usage_percpu 等文件。cpuset 子系統(tǒng)用于為控制組任務分配單獨的cpu和內(nèi)存,可以包括cpuset. cpus和cpuset. mems等文件。devices用于允許或拒絕控制組任務對設備的訪問,可以包括devices, allow和devices, list等文件。freezer用于暫停和恢復控制組任務,可以包括freezer, state文件。memory用于設置姆個控制組的內(nèi)存限制以及產(chǎn)生內(nèi)存資源報告,可以包括memory, failcnt和memory.force_empty 等文件。cgroup 子系統(tǒng)可以包括 event_control 和 cgroup. procs 等文件。net_cls標記姆個網(wǎng)絡包以供控制組方便使用,可以包括net_cls. classid等文件。根據(jù)本發(fā)明的實施例可以在創(chuàng)建控制組文件系統(tǒng)時在上述控制組文件系統(tǒng)中添加文件名為cont_flag的文件。該cont_flag文件可以包括與上述控制組文件相對應的標志位,例如,在該cont_flag文件中保存一個ニ進制序列,姆個ニ進制位記錄指示相應的控制組文件的內(nèi)容是否被修改過,例如,某個ニ進制位為I表示修改過該控制組文件,該ニ進制位為O表示未修改過該控制組文件,或者相反。圖3是根據(jù)本發(fā)明的實施例的哈希查找表的示意圖。圖4是根據(jù)本發(fā)明的實施例的基于容器的處理過程的示意圖。圖4的方法是圖I的方法的ー個例子。基于容器的處理過程可以經(jīng)歷容器的創(chuàng)建、容器的運行、容器狀態(tài)的備份以及容器狀態(tài)的恢復等階段。本實施例假設在容器I (COntainer_l)中創(chuàng)建應用程序,并且在創(chuàng)建容器時配置容器containerj綁定到編號為O的CPU (cpuO)上運行。根據(jù)本發(fā)明的實施例并不限于此,例如,也可以創(chuàng)建更多的容器,并且可以對進程使用的其它系統(tǒng)資源進行限定。根據(jù)本發(fā)明的實施例可以修改控制組文件系統(tǒng)的寫函數(shù),以在修改(或者寫)控制組文件的同時將標志文件cont_flag中與該控制組文件相對應的標志位置位。該標志位用以表示相應的控制組文件的內(nèi)容是否被修改過。405,創(chuàng)建容器,并且生成與該容器相對應的控制組目錄。具體而言,在創(chuàng)建container_l時,在/cgroup目錄下生成容器的控制組目錄/cgroup/container_l,該container_l目錄下也可以存儲如圖2所述的多個控制組文件,這些控制組文件包含默認值。在創(chuàng)建控制組目錄/cgroup/container_l時,與常規(guī)方法不同的是,本發(fā)明的實施例可以在控制組目錄/cgroup/container_l下存儲標志文件cont_flag,用于存放cont_flag標志位,以表示container_l下的相應控制組文件的內(nèi)容是否被修改過,例如,某個標志位為1,表明與該標志位相對應的控制組文件被修改過。410,建立控制組文件與cont_flag標志位的對應關系。例如,在創(chuàng)建容器過程中,可以同時創(chuàng)建標志文件cont_flag中的標志位與上述控制組文件的文件名的對應關系,例如,在創(chuàng)建控制組文件的過程中,采用數(shù)組的形式建立標志位與控制組文件的對應關系。415,對cont_flag標志位進行初始化。例如,可以對cont_flag標志文件中的cont_flag標志位進行初始化,使它們的值 全部為O。cont_flag標志位為零表示與該標志位對應的控制組文件沒有被修改。420,讀取配置文件,并且根據(jù)配置文件修改控制組文件的內(nèi)容。例如,可以在容器啟動時,讀取配置文件,該配置文件例如可以包含預先設置的系統(tǒng)資源的限定值,例如,包含各個控制組文件的文件名以及相應的系統(tǒng)資源的限定值,并且可以使用寫函數(shù)將這些系統(tǒng)資源的限定值寫入到相應的控制組文件中。特別地,為了配置container_l綁定在cpuO上運行,可以將cpuset. cpus文件中的值限定為O時。例如,可以首先打開container_l目錄下的cpuset. cpus文件,在該cpuset. cpus文件中寫入數(shù)值O,最后保存并關閉cpuset. cpus文件。425,在修改該控制組文件的內(nèi)容的情況下,修改與該控制組文件相對應的cont_flag標志位。當某個控制組文件被修改時,與該控制組文件相對應的標志位會被置位,并且保存在標志文件cont_flag中。例如,寫函數(shù)可以在將數(shù)據(jù)O寫入該cpuset. cpus文件之后,將cont_flag文件中與cpuset. cpus文件對應的cont_flag標志位自動置位,例如,在該標志位所在的位置寫入數(shù)值1,表示該標志位對應的cpuset. cpus文件被修改過。 430,從控制組目錄下的標志文件cont_flag中讀取cont_f lag標志位的值。在容器狀態(tài)的備份階段,為了獲知是否有控制組文件的內(nèi)容被修改過或者哪些控制組文件的內(nèi)容被修改過,可以首先打開控制組目錄/cgroup/container_l下的標志文件cont_flag,并且從標志文件cont_flag中讀取cont_flag標志位的值。435,確定cont_flag標志位的值是否為O 如果標志位的值為0,說明控制組文件未被修改過,則跳過容器狀態(tài)的備份階段,否則執(zhí)行步驟440。例如,如果讀取到的cont_fIag標志位的值全部為O,則說明所有cont_fIag標志位沒有改變,這意味著所有控制組文件均未被修改過,因此,沒有必要進行容器狀態(tài)的備份。如果控制組文件沒有任何修改,則可以將直接跳過控制組文件的備份過程,這也降低了不必要的系統(tǒng)開銷。440,為控制組的文件路徑建立哈希查找表。如果cont_flag標志位并非全部為0,說明有控制組文件被修改,則為container」下的所有控制組文件(如圖3所示)的路徑建立哈希查找表,以便快速查找某個控制組文件,例如,根據(jù)被修改為I的標志位可以確定被修改的文件的文件名為cpuset.cpus,然后再根據(jù)該文件名在上述控制組目錄下查找與該標志位相對應的cpuset. cpus文件。
為了快速查找到修改過的控制組文件,根據(jù)本發(fā)明的實施例可以為全部控制組文件的路徑建立哈希查找表,并且可以采用鏈地址法來避免相同關鍵字的值引起的沖突。根據(jù)本發(fā)明的實施例假設控制組文件系統(tǒng)中總共包含10個待索引的文件,例如,biKio. sectors、blkio. time、blkio. weight、cgroup. event_control> cgroup. procs、cpuacct. stat、cpuacct. usage、cpuacct.usage—percpu、cpuset. cpus、cpuset. mems。在建立哈希查找表時,可以先確定這些文件名的關鍵字(key)。例如,通過哈希函數(shù)將控制組文件的文件名最后三個字母的ASCII碼相加的值作為每個控制組文件的關鍵字,將這些關鍵字除以13取余數(shù)作為索引值(index value),因此該哈希查找表的索引值為O到12,共13個值。與上述控制組文件相對應的索引值計算結(jié)果如下111+114+115=340%13=2105+109+1=1=315%13=3103+104+116=323%13=1I114+111+108=333%13=8111+99+115=325%13=0116+97+116=329%13=497+103+101=328%13=299+112+117=328%13=3112+117+115=355%13=4101+109+115=325%13=0上述10個控制組文件在哈希查找表中的位置排列如圖3所示。445,通過哈希查找表查找被修改的控制組文件,并且保存被修改的控制組文件的內(nèi)容。例如,在查找某個控制組文件時,可以先根據(jù)上面的哈希函數(shù)計算出該控制組文件的索引值,然后根據(jù)該索引值找到圖3的哈希查找表中對應的索引列,從而找到相應的存儲地址。例如,控制組文件cpuset. cpus的索引值為4,位于索引=4的索引列。然后,將該控制組文件的文件名與該列的鏈表中每個節(jié)點的文件名進行比較。如果比較結(jié)果相同,則表明找到該文件。每個節(jié)點中除了控制組文件的文件名之外,還存儲了與該控制組文件唯一對應的指針(file*),用于確定該控制組文件的實際存儲位置。例如,本實施例可以從哈希查找表中找到cpuset. cpus文件,并且將cpuset. cpus文件中的當前內(nèi)容保存到上述容器狀態(tài)文件中,例如,可以采用列表的形式,一個字段保存控制組文件的文件名,另一字段保存與該控制組文件的文件名相對應的內(nèi)容。該容器狀態(tài)文件可以存儲到容器中運行的進程所在的文件目錄下,根據(jù)本發(fā)明的實施例并不限于此,該容器狀態(tài)文件也可以存儲其它文件目錄下。另外,在備份容器的狀態(tài)的階段之后,可以刪除容器以及與該容器相對應的控制
組目錄。450,在容器狀態(tài)的恢復階段,可以建立與新的容器對應的新的控制組目錄。例如,為了恢復容器的狀態(tài),可以創(chuàng)建新的容器,并且在創(chuàng)建新的容器時,為新的容器建立新的控制組目錄,該新的控制組目錄下包含新的控制組文件(即待恢復的控制組文件)和新的標志文件(即待恢復的標志文件),例如,新的控制組目錄下包含新的cpuset.cpus文件,該新的cpuset. cpus文件包含的內(nèi)容為默認值??蛇x地,可以根據(jù)是否有備份來確定是否需要進行恢復??蛇x地,作為另ー實施例,可以通過判斷cont_flag標志位的值是否為O確定是否
需要進行恢復。應理解,新的容器的狀態(tài)的備份/恢復過程與上述容器的備份/恢復過程相同,這里不再贅述。460,從容器狀態(tài)文件中讀取修改過的控制組文件的文件名和內(nèi)容。例如,可以打開容器狀態(tài)文件,并且讀取保存的控制組文件的文件名和內(nèi)容。例如,在容器狀態(tài)文件中讀取cpuset. cpus文件的文件名“cpuset. cpus文件”以及該cpuset.cpus文件中的值O。 465,為上述新的控制組文件的文件路徑建立哈希查找表。恢復容器狀態(tài)階段建立哈希查找表的過程與440中描述的備份容器狀態(tài)階段建立哈希查找表的過程類似,在此不再贅述。470,根據(jù)哈希查找表恢復被修改的控制組文件的內(nèi)容。例如,在建立好哈希查找表后,可以根據(jù)cpuset. cpus文件的文件名cpuset. cpus通過哈希查找表在新的控制組目錄下查找新的cpuset. cpus文件,打開新的cpuset. cpus文件,并且將讀取到的cpuset. cpus的內(nèi)容(即420的配置文件中的限定值O)寫入到該新的cpuset. cpus文件中,從而將容器恢復到備份前的狀態(tài),即新的容器的狀態(tài)與備份前的原有容器的狀態(tài)相同。另外,用戶可以對上述標志位手動清零,或者由系統(tǒng)在容器狀態(tài)恢復完成后自動對上述標志位清零。綜上,一方面本發(fā)明的實施例優(yōu)化了已有方案的遍歷機制,通過建立標志位的方式標識控制組文件的修改情況,避免了不必要的控制組目錄的遍歷。另外,在備份/恢復容器的狀態(tài)階段,為控制組文件路徑建立哈希查找表索引,提高了文件的查找和訪問效率,并且該效率不隨控制組目錄下文件數(shù)目的擴展而降低。與已有方案相比,本發(fā)明提高了容器狀態(tài)備份/恢復過程的效率,同時增加了備份/恢復方法的可擴展性。圖5是根據(jù)本發(fā)明的另ー實施例的基于容器的處理過程的示意圖。圖5的方法是圖I的方法的另ー個例子。與圖4不同的是,在容器創(chuàng)建過程中不對進程占用的系統(tǒng)資源進行限制,而是由用戶在容器的運行過程中對進程占用的系統(tǒng)資源進行限制。圖5的505至515、525至535、550至560與圖4的405至415、425至435、450至460類似,在此不再贅述。505,創(chuàng)建容器,并且生成與該容器相對應的控制組目錄。510,建立控制組文件與cont_flag標志位的對應關系。515,對cont_flag標志位進行初始化。520,根據(jù)用戶的需要修改控制組文件的內(nèi)容。例如,在容器運行過程中,由用戶手動修改控制組文件。當用戶希望容器綁定到cpuO運行,用戶可以手動向控制組目錄下的cpuse. cpus文件中寫入O值,從而將容器綁定在cpuO上運行。
525,在修改該控制組文件的內(nèi)容的情況下,修改與該控制組文件相對應的cont_flag標志位。530,從控制組目錄下的標志文件cont_flag中讀取cont_f lag標志位的值。535,確定cont_flag標志位的值是否為O 如果標志位的值為0,說明控制組文件未被修改過,則跳過容器狀態(tài)的備份階段,否則執(zhí)行步驟440。545,查找被修改的控制組文件,并且保存被修改的控制組文件的內(nèi)容。例如,如果cont_flag標志位并非全部為0,說明有控制組文件被修改,則可先采用常規(guī)查找方法(例如,遍歷或二分法等等)查找控制組目錄下的cpuse. cpus文件,并且將cpuset. cpus文件中的當前內(nèi)容保存到容器狀態(tài)文件中,該容器狀態(tài)文件可以存儲到容器中運行的進程所在的文件目錄下。當然,本發(fā)明的實施例也可以采用圖4中的哈希查找表的方法進行控制組文件的查找。
另外,在備份容器的狀態(tài)之后,可以刪除容器以及與該容器相對應的控制組目錄。550,在容器狀態(tài)的恢復階段,建立與新的容器對應的新的控制組目錄。560,從容器狀態(tài)文件中讀取修改的控制組文件的文件名和內(nèi)容。570,恢復被修改的控制組文件的內(nèi)容。例如,可先采用常規(guī)查找方法(例如,遍歷或二分法等等)查找新的控制組目錄下的新的cpuse. cpus文件,例如,可以根據(jù)cpuset. cpus文件的文件名cpuset. cpus在新的控制組目錄下查找新的cpuset. cpus文件,打開新的cpuset. cpus文件,并且將讀取到的cpuset. cpus文件的內(nèi)容(即用戶在520中寫入的O值)寫入到該新的cpuset. cpus文件中,從而將容器恢復到備份前的狀態(tài),即新的容器的狀態(tài)與備份前的原有容器的狀態(tài)相同。當然,本發(fā)明的實施例也可以采用圖4中的哈希查找表的方法進行控制組文件的查找。圖6是根據(jù)本發(fā)明的實施例的基于容器的處理裝置600的結(jié)構(gòu)性示意圖。圖6的處理裝置包括確定模塊610、獲取模塊620、查找模塊630和備份模塊640。確定模塊610用于在需要備份該容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定該容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中至少ー組控制組文件用于對該容器中的一組進程的運行進行控制,該標志文件包括與至少ー個控制組文件相對應的至少ー個標志位,至少ー個標志位用于分別指示至少ー個控制組文件的內(nèi)容是否被修改。獲取模塊620用于根據(jù)至少ー個標志位與至少ー個控制組文件的文件名之間的對應關系獲取與第一標志位相對應的第一控制組文件的文件名。查找模塊630用于根據(jù)至少ー個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名對應的第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的第一控制組文件的內(nèi)容。備份模塊640用于備份第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容??梢姡鶕?jù)本發(fā)明的實施例的基于容器的處理裝置可以通過標志文件中的標志位來確定哪些控制組文件的內(nèi)容被修改,因此,無需遍歷全部控制組文件就能夠獲知控制組及容器的狀態(tài),并且可以只根據(jù)標志位查找被修改控制組文件的存儲位置并備份被修改的控制組文件的內(nèi)容,從而減小了系統(tǒng)開銷。圖7是根據(jù)本發(fā)明的另ー實施例的基于容器的處理系統(tǒng)的結(jié)構(gòu)性示意圖。圖7的處理裝置包括確定模塊710、獲取模塊720、查找模塊730和備份模塊740。圖7的確定模塊710、獲取模塊720、查找模塊730和備份模塊740與圖6的確定模塊610、獲取模塊620、查找模塊630和備份模塊640類似,在此不再贅述。可選地,作為另ー實施例,處理裝置700還包括第一建立模塊750。第一建立模塊750用于為至少ー個控制組文件的文件路徑建立第一哈希查找表,其中第一哈希查找表用于表示至少ー個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系。相應的,查找模塊730具體用于根據(jù)第一控制組文件的文件名在第一哈希查找表中查找與第一控制組文件的文件名對應的第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置處存儲的第一控制組文件中提取修改后的第一控制組文件的內(nèi)容。
相應的,備份模塊740具體用于將第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容備份在容器狀態(tài)文件中。可選地,作為另ー實施例,獲取模塊720還用于在需要恢復該容器的狀態(tài)時,獲取備份的第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容;應當理解的是,在一種實現(xiàn)方式下,獲取模塊720從容器狀態(tài)文件中獲取備份的第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容。相應的,查找模塊730還用于根據(jù)待恢復的至少ー個控制組文件的文件名與上述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名相對應的待恢復的第一控制組文件的存儲位置。相應的,處理裝置700還包括恢復模塊760?;謴湍K760用于將備份的上述修改后的第一控制組文件的內(nèi)容寫入到上述待恢復的第一控制組文件的存儲位置處存儲的上述待恢復的第一控制組文件中??蛇x地,作為另ー實施例,第二建立模塊770,用于為上述待恢復的至少ー個控制組文件的文件路徑建立第二哈希查找表,其中第二哈希查找表用于表示上述待恢復的至少一個控制組文件的文件名與上述待恢復的至少ー個控制組文件的存儲位置的對應關系。相應的,查找模塊730具體用于根據(jù)第一控制組文件的文件名在第二哈希查找表中查找與第一控制組文件的文件名對應的上述待恢復的第一控制組文件的存儲位置??蛇x地,作為另ー實施例,處理裝置700還包括第一創(chuàng)建模塊780,用于在需要恢復該容器的狀態(tài)時,創(chuàng)建新的容器,生成與該新的容器相對應的控制組目錄,在與該新的容器相對應的控制組目錄下生成上述待恢復的至少ー個控制組文件和待恢復的標志文件,并且建立上述待恢復的至少ー個控制組文件的文件名與上述待恢復的標志文件中的至少ー個標志位之間的--對應關系??蛇x地,作為另一實施例,處理裝置700還包括修改模塊790,用于在修改至少一個控制組文件中的第一控制組文件的內(nèi)容的情況下,修改該標志文件中與第一控制組文件相對應的第一標志位。相應的,確定模塊710具體用于在該標志文件的至少ー個標志位被修改的情況下,確定需要備份該容器的狀態(tài),或者在接收到備份該容器的狀態(tài)的指令或預先設定的備份該容器狀態(tài)的周期期滿時,檢測該標志文件的至少ー個標志位是否被修改,并且在檢測到該標志文件的至少ー個標志位被修改的情況下,確定需要備份該容器的狀態(tài),井根據(jù)標志文件中的第一標志位確定該容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中上述至少ー組控制組文件用于對該容器中的一組進程的運行進行控制,該標志文件包括與上述至少ー個控制組文件相對應的至少ー個標志位,上述至少ー個標志位用于分別指示上述至少ー個控制組文件的內(nèi)容是否被修改。根據(jù)本發(fā)明的實施例,修改模塊790具體用于在該容器啟動時,根據(jù)預先設置的配置文件修改至少ー個控制組文件中的第一控制組文件的內(nèi)容??蛇x地,作為另ー實施例,修改模塊790具體用于在該容器的運行過程中,根據(jù)用戶的需要修改至少ー個控制組文件中的第一控制組文件的內(nèi)容??蛇x地,作為另ー實施例,修改模塊790還用于該容器被創(chuàng)建時,將該標志文件中的至少ー個標志位設置為初始化值,其中修改模塊790具體用于在修改上述至少ー個控制組文件中的第一控制組文件的內(nèi)容的情況下,將該標志文件中與第一控制組文件相對應的第一標志位對初始化值進行置位。根據(jù)本發(fā)明的實施例,至少ー個控制組文件的內(nèi)容包括該容器中的ー組進程在運行時所使用的資源的限定值??蛇x地,作為另ー實施例,處理裝置700還包括第二創(chuàng)建模塊795。第二創(chuàng)建模塊795用于在使用該容器對上述一組進程的運行進行控制之前,創(chuàng)建該容器,生成與該容器相對應的控制組目錄,在與該容器相對應的控制組目錄下生成至少ー個控制組文件和該標志文件,并且建立至少ー個控制組文件的文件名與該標志文件中的至少ー個標志位之間
的一一對應關系。圖8示出了根據(jù)本發(fā)明實施例的計算機系統(tǒng)800的示意性框圖。如圖8所示,該計算機系統(tǒng)包括總線810 ;與該總線810相連的處理器820 (處理器820可以是ー個或多個,圖8中以ー個處理器示意),處理器820之上運行有ー個或多個容器(例如,容器I、容器
2、···、容器η);與該總線810相連的存儲器830 ;其中,該處理器820通過該總線810,調(diào)用該存儲器830中存儲的代碼,以用于在需要備份上述ー個或多個容器中的容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定該容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中至少ー組控制組文件用于對該容器中的一組進程的運行進行控制,該標志文件包括與至少ー個控制組文件相對應的至少ー個標志位,至少ー個標志位用于分別指示至少ー個控制組文件的內(nèi)容是否被修改;根據(jù)至少一個標志位與至少ー個控制組文件的文件名之間的對應關系獲取與第一標志位相對應的第一控制組文件的文件名;根據(jù)至少ー個控制組文件的文件名與至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名對應的第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置處存儲的第一控制組文件中提取修改后的第一控制組文件的內(nèi)容;備份第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容。另外,該計算機系統(tǒng)還可以包括用戶接ロ840,用于在該容器的運行過程中為用戶提供修改上述至少ー個控制組文件中的第一控制組文件的內(nèi)容的接ロ,例如,輸入/輸出(Input/Output, I/O)接ロ。根據(jù)本發(fā)明的實施例的計算機系統(tǒng)可以通過標志文件中的標志位來確定哪些控制組文件的內(nèi)容被修改,因此,無需遍歷全部控制組文件就能夠獲知控制組及容器的狀態(tài), 并且可以只根據(jù)標志位查找被修改控制組文件的存儲位置并備份被修改的控制組文件的內(nèi)容,從而減小了系統(tǒng)開銷??蛇x地,作為另ー實施例,處理器820還用于在需要恢復該容器的狀態(tài)時,獲取備份的第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容,處理器820具體用于根據(jù)待恢復的至少ー個控制組文件的文件名與上述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與第一控制組文件的文件名相對應的待恢復的第一控制組文件的存儲位置,并且處理器820還用于將備 份的上述修改后的第一控制組文件的內(nèi)容寫入到上述待恢復的第一控制組文件中??蛇x地,作為另ー實施例,處理器820還用于在修改至少ー個控制組文件中的第一控制組文件的內(nèi)容的情況下,修改該標志文件中與第一控制組文件相對應的第一標志位。根據(jù)本發(fā)明的實施例可以通過建立容器狀態(tài)的標志位的方式來表示控制組文件的修改情況,避免了不必要的控制組目錄遍歷。另外,可以為控制組文件路徑建立哈希查找表,提高了文件的查找和訪問效率,并且該效率不隨控制組目錄下文件數(shù)目的擴展而降低。同已有方案相比,本發(fā)明的實施例提高了容器狀態(tài)的備份/恢復過程的效率,同時增加了備份/恢復方法的可擴展性。本領域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應用和設計約束條件。專業(yè)技術(shù)人員可以對每個特定的應用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應認為超出本發(fā)明的范圍。所屬領域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和単元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另ー個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過ー些接ロ,裝置或単元的間接耦合或通信連接,可以是電性,機械或其它的形式。所述作為分離部件說明的単元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理単元,即可以位于ー個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能単元可以集成在一個處理単元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。所述功能如果以軟件功能単元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在ー個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或 替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以權(quán)利要求的保護范圍為準 。
權(quán)利要求
1.一種基于容器的處理方法,其特征在于,包括 在需要備份所述容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定所述容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中所述至少一組控制組文件用于對所述容器中的一組進程的運行進行控制,所述標志文件包括與所述至少一個控制組文件相對應的至少ー個標志位,所述至少一個標志位用于分別指示所述至少一個控制組文件的內(nèi)容是否被修改; 根據(jù)所述至少ー個標志位與所述至少一個控制組文件的文件名之間的對應關系獲取與所述第一標志位相對應的所述第一控制組文件的文件名; 根據(jù)所述至少ー個控制組文件的文件名與所述至少一個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名對應的所述第一控制組文件的存儲位置,并且從所述第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的所述第一控制組文件的內(nèi)容; 備份所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容。
2.根據(jù)權(quán)利要求I所述的處理方法,其特征在于,還包括 為所述至少ー個控制組文件的文件路徑建立第一哈希查找表,其中所述第一哈希查找表用于表示所述至少一個控制組文件的文件名與所述至少一個控制組文件的存儲位置的對應關系, 其中所述根據(jù)所述至少一個控制組文件的文件名與所述至少一個控制組文件的存儲位置的對應關系查找所述第一控制組文件的存儲位置,包括 根據(jù)所述第一控制組文件的文件名在所述第一哈希查找表中查找與所述第一控制組文件的文件名對應的所述第一控制組文件的存儲位置。
3.根據(jù)權(quán)利要求I或2所述的處理方法,其特征在于,還包括 在需要恢復所述容器的狀態(tài)時,獲取備份的所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容; 根據(jù)待恢復的至少ー個控制組文件的文件名與所述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名相對應的待恢復的第一控制組文件的存儲位置; 將備份的所述修改后的所述第一控制組文件的內(nèi)容寫入到所述待恢復的第一控制組文件的存儲位置處存儲的所述待恢復的第一控制組文件中。
4.根據(jù)權(quán)利要求3所述的處理方法,其特征在于,還包括 為所述待恢復的至少ー個控制組文件的文件路徑建立第二哈希查找表,其中所述第二哈希查找表用于表示所述待恢復的至少ー個控制組文件的文件名與所述待恢復的至少ー個控制組文件的存儲位置的對應關系, 其中所述根據(jù)待恢復的至少ー個控制組文件的文件名與所述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名相對應的所述待恢復的第一控制組文件的存儲位置,包括 根據(jù)所述第一控制組文件的文件名在所述第二哈希查找表中查找與所述第一控制組文件的文件名對應的所述待恢復的第一控制組文件的存儲位置。
5.根據(jù)權(quán)利要求3或4所述的處理方法,其特征在于,還包括在需要恢復所述容器的狀態(tài)時,創(chuàng)建新的容器; 生成與所述新的容器相對應的控制組目錄; 在與所述新的容器相對應的控制組目錄下生成所述待恢復的至少ー個控制組文件和待恢復的標志文件; 建立所述待恢復的至少ー個控制組文件的文件名與所述待恢復的標志文件中的至少一個標志位之間的—對應關系。
6.根據(jù)權(quán)利要求I至5中的任一項所述的處理方法,其特征在于,還包括 在修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容的情況下,修改所述標志文件中與所述第一控制組文件相對應的所述第一標志位; 以及,在所述標志文件的至少ー個標志位被修改的情況下,確定需要備份所述容器的狀態(tài),或者在接收到備份所述容器的狀態(tài)的指令或預先設定的備份所述容器狀態(tài)的周期期滿時,檢測所述標志文件的至少ー個標志位是否被修改,并且在檢測到所述標志文件的至少ー個標志位被修改的情況下,確定需要備份所述容器的狀態(tài)。
7.根據(jù)權(quán)利要求6所述的處理方法,其特征在于,所述修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容,包括 在所述容器啟動時,根據(jù)預先設置的配置文件修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容;或者 在所述容器的運行過程中,根據(jù)用戶的需要修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容。
8.根據(jù)權(quán)利要求6或7所述的處理方法,其特征在于,還包括 在創(chuàng)建所述容器時,將所述標志文件中的所述至少一個標志位設置為初始化值; 其中所述修改所述標志文件中與所述第一控制組文件相對應的所述第一標志位,包括 將與所述第一控制組文件相對應的第一標志位對初始化值進行置位。
9.根據(jù)權(quán)利要求I至8中的任一項所述的處理方法,其特征在于,所述至少ー個控制組文件的內(nèi)容包括所述容器中的一組進程在運行時所使用的資源的限定值。
10.根據(jù)權(quán)利要求I至9中的任一項所述的處理方法,其特征在于,還包括 在使用所述容器對所述一組進程的運行進行控制之前,創(chuàng)建所述容器; 生成與所述容器相對應的控制組目錄; 在所述與所述容器相對應的控制組目錄下生成所述至少一個控制組文件和所述標志文件; 建立所述至少一個控制組文件的文件名與所述標志文件中的所述至少一個標志位之間的--對應關系。
11.一種基于容器的處理裝置,其特征在于,包括 確定模塊,用于在需要備份所述容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定所述容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中所述至少ー組控制組文件用于對所述容器中的一組進程的運行進行控制,所述標志文件包括與所述至少一個控制組文件相對應的至少ー個標志位,所述至少一個標志位用于分別指示所述至少ー個控制組文件的內(nèi)容是否被修改;獲取模塊,用于根據(jù)所述至少一個標志位與所述至少一個控制組文件的文件名之間的對應關系獲取與所述第一標志位相對應的所述第一控制組文件的文件名; 查找模塊,用于根據(jù)所述至少一個控制組文件的文件名與所述至少一個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名對應的所述第一控制組文件的存儲位置,并且從所述第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的所述第一控制組文件的內(nèi)容; 備份模塊,用于備份所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,還包括 第一建立模塊,用于為所述至少一個控制組文件的文件路徑建立第一哈希查找表,其中所述第一哈希查找表用于表示所述至少一個控制組文件的文件名與所述至少一個控制組文件的存儲位置的對應關系; 其中,所述查找模塊具體用于根據(jù)所述第一控制組文件的文件名在所述第一哈希查找表中查找與所述第一控制組文件的文件名對應的所述第一控制組文件的存儲位置,并且從所述第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的所述第一控制組文件的內(nèi)容; 所述備份模塊具體用于將所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容備份在容器狀態(tài)文件中。
13.根據(jù)權(quán)利要求11或12所述的裝置,其特征在于,所述獲取模塊還用于在需要恢復所述容器的狀態(tài)時,獲取備份的所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容; 所述查找模塊還用于根據(jù)待恢復的至少ー個控制組文件的文件名與所述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名相對應的待恢復的第一控制組文件的存儲位置; 所述處理裝置還包括 恢復模塊,用于將備份的所述修改后的所述第一控制組文件的內(nèi)容寫入到所述待恢復的第一控制組文件的存儲位置處存儲的所述待恢復的第一控制組文件中。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,還包括 第二建立模塊,用于為所述待恢復的至少ー個控制組文件的文件路徑建立第二哈希查找表,其中所述第二哈希查找表用于表示所述待恢復的至少ー個控制組文件的文件名與所述待恢復的至少ー個控制組文件的存儲位置的對應關系; 其中,所述查找模塊具體用于根據(jù)所述第一控制組文件的文件名在所述第二哈希查找表中查找與所述第一控制組文件的文件名對應的所述待恢復的第一控制組文件的存儲位置。
15.根據(jù)權(quán)利要求13或14中所述的裝置,其特征在于,還包括 第一創(chuàng)建模塊,用于在需要恢復所述容器的狀態(tài)時,創(chuàng)建新的容器,生成與所述新的容器相對應的控制組目錄,在與所述新的容器相對應的控制組目錄下生成所述待恢復的至少一個控制組文件和待恢復的標志文件,并且建立所述待恢復的至少ー個控制組文件的文件名與所述待恢復的標志文件中的至少ー個標志位之間的一一對應關系。
16.根據(jù)權(quán)利要求11至15中的任一項所述的裝置,其特征在于,還包括 修改模塊,用于在修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容的情況下,修改所述標志文件中與所述第一控制組文件相對應的所述第一標志位; 其中,所述確定模塊具體用于在所述標志文件的至少ー個標志位被修改的情況下,確定需要備份所述容器的狀態(tài),或者在接收到備份所述容器的狀態(tài)的指令或預先設定的備份所述容器狀態(tài)的周期期滿時,檢測所述標志文件的至少ー個標志位是否被修改,如果檢測到所述標志文件的至少ー個標志位被修改,則確定需要備份所述容器的狀態(tài),井根據(jù)標志文件中的第一標志位確定所述容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中所述至少ー組控制組文件用于對所述容器中的一組進程的運行進行控制,所述標志文件包括與所述至少一個控制組文件相對應的至少ー個標志位,所述至少一個標志位用于分別指示所述至少一個控制組文件的內(nèi)容是否被修改。
17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述修改模塊具體用于在所述容器啟動時,根據(jù)預先設置的配置文件修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容;或者所述修改模塊具體用于在所述容器的運行過程中,根據(jù)用戶的需要修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容。
18.根據(jù)權(quán)利要求16或17所述的裝置,其特征在于,所述修改模塊還用于所述容器被創(chuàng)建時,將所述標志文件中的所述至少一個標志位設置為初始化值,以及,具體用于在修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容的情況下,將所述標志文件中與所述第一控制組文件相對應的第一標志位對初始化值進行置位。
19.根據(jù)權(quán)利要求11至18中的任一項所述的裝置,其特征在于,還包括第二創(chuàng)建模塊,用于在使用所述容器對所述一組進程的運行進行控制之前,創(chuàng)建所述容器,生成與所述容器相對應的控制組目錄,在所述與所述容器相對應的控制組目錄下生成所述至少ー個控制組文件和所述標志文件,并且建立所述至少一個控制組文件的文件名與所述標志文件中的所述至少一個標志位之間的--對應關系。
20.一種計算機系統(tǒng),其特征在于,包括 總線; 與所述總線相連的處理器,所述處理器之上運行有ー個或多個容器; 與所述總線相連的存儲器; 其中,所述處理器通過所述總線,調(diào)用所述存儲器中存儲的代碼,以用于 在需要備份所述ー個或多個容器中的容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定所述容器的至少ー個控制組文件中的第一控制組文件的內(nèi)容被修改過,其中所述至少一組控制組文件用于對所述容器中的一組進程的運行進行控制,所述標志文件包括與所述至少ー個控制組文件相對應的至少ー個標志位,所述至少一個標志位用于分別指示所述至少一個控制組文件的內(nèi)容是否被修改; 根據(jù)所述至少ー個標志位與所述至少一個控制組文件的文件名之間的對應關系獲取與所述第一標志位相對應的所述第一控制組文件的文件名; 根據(jù)所述至少ー個控制組文件的文件名與所述至少一個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名對應的所述第一控制組文件的存儲位置,并且從所述第一控制組文件的存儲位置處存儲的所述第一控制組文件中提取修改后的所述第一控制組文件的內(nèi)容; 備份所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容。
21.根據(jù)權(quán)利要求20所述的計算機系統(tǒng),其特征在干,所述處理器還用于在需要恢復所述容器的狀態(tài)時,獲取備份的所述第一控制組文件的文件名和所述修改后的所述第一控制組文件的內(nèi)容,根據(jù)待恢復的至少ー個控制組文件的文件名與所述待恢復的至少ー個控制組文件的存儲位置的對應關系查找與所述第一控制組文件的文件名相對應的待恢復的第一控制組文件的存儲位置,并且將備份的所述修改后的所述第一控制組文件的內(nèi)容寫入到所述待恢復的第一控制組文件中。
22.根據(jù)權(quán)利要求20或21所述的計算機系統(tǒng),其特征在于,所述處理器還用于在修改所述至少一個控制組文件中的第一控制組文件的內(nèi)容的情況下,修改所述標志文件中與所述第一控制組文件相對應的所述第一標志位。
全文摘要
本發(fā)明實施例提供了一種基于容器的處理方法、裝置和系統(tǒng)。該方法包括在備份該容器的狀態(tài)時,根據(jù)標志文件中的第一標志位確定該容器的至少一個控制組文件中的第一控制組文件的內(nèi)容被修改過;根據(jù)至少一個標志位與至少一個控制組文件的文件名之間的對應關系獲取與第一標志位相對應的第一控制組文件的文件名;根據(jù)至少一個控制組文件的文件名與至少一個控制組文件的存儲位置的對應關系查找第一控制組文件的存儲位置,并且從第一控制組文件的存儲位置提取修改后的第一控制組文件的內(nèi)容;備份第一控制組文件的文件名和該修改后的第一控制組文件的內(nèi)容。本發(fā)明無需遍歷全部控制組文件就能夠獲知容器的狀態(tài),從而減小了系統(tǒng)開銷。
文檔編號G06F9/455GK102707990SQ201210148519
公開日2012年10月3日 申請日期2012年5月14日 優(yōu)先權(quán)日2012年5月14日
發(fā)明者楊振章, 趙琪 申請人:華為技術(shù)有限公司