基于容器的处理方法、装置和系统的制作方法

文档序号:6369583阅读:159来源:国知局
专利名称:基于容器的处理方法、装置和系统的制作方法
技术领域
本发明涉及计算机领域,更具体地,涉及基于容器的处理方法、装置和系统。
背景技术
在计算机系统中,容器(contai ner)可以作为ー种轻量级的虚拟机,即容器是ー种操作系统层次上的资源的虚拟化,用以隔离进程和资源。借助于容器,计算机系统的操作系统可以让应用程序如同在独立的机器上运行一祥。它有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。常见的容器技术包括Solaris Zones、BSD Jails和Linux操作系统上的容器等等。在Linux内核(Kernel)中,通常可以使用控制组(cgroup)文件系统来管理容器。控制组用于对ー组进程进行行为控制,从而可限制控制组中的进程及其子进程所使用的系统资源。相应地,在使用容器之前,需要挂载(mount)控制组文件系统,例如,创建(create)控制组目录“/cgroup”,并且在该目录下生成控制组文件,用于限制进程所使用的系统资源。在容器的运行过程中,可能需要对容器状态及进程状态进行备份/恢复(checkpoint/restart, C/R),这就需要知道某一时刻的控制组的状态(例如,容器的资源限制状态)。通常的方案是遍历控制组目录下的所有控制组文件来获取并且保存控制组的状态。控制组目录“/cgroup”下通常保存有几十个控制组文件,因此,遍历机制的系统开销比较大,而且系统开销随着文件数目的増加而线性增长。

发明内容
本发明实施例提供了一种基于容器的处理方法、装置和系统,能够减小系统开销。一方面,提供了一种基于容器的处理方法,包括在需要备份该容器的状态时,根据标志文件中的第一标志位确定该容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中至少ー组控制组文件用于对该容器中的一组进程的运行进行控制,该标志文件包括与至少ー个控制组文件相对应的至少ー个标志位,至少ー个标志位用于分别指示至少ー个控制组文件的内容是否被修改;根据至少一个标志位与至少ー个控制组文件的文件名之间的对应关系获取与第一标志位相对应的第一控制组文件的文件名;根据至少一个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名对应的第一控制组文件的存储位置,并且从第一控制组文件的存储位置处存储的第一控制组文件中提取修改后的第一控制组文件的内容;备份第一控制组文件的文件名和该修改后的第一控制组文件的内容。另ー方面,提供了一种基于容器的处理装置,包括确定模块,用于在需要备份该容器的状态时,根据标志文件中的第一标志位确定该容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中至少ー组控制组文件用于对该容器中的一组进程的运行进行控制,该标志文件包括与至少ー个控制组文件相对应的至少ー个标志位,至少ー个标志位用于分别指示至少ー个控制组文件的内容是否被修改;获取模块,用于根据至少ー个标志位与至少ー个控制组文件的文件名之间的对应关系获取与第一标志位相对应的第一控制组文件的文件名;查找模块,用于根据至少ー个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名对应的第一控制组文件的存储位置,并且从第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的第一控制组文件的内容;备份模块,用于备份第一控制组文件的文件名和该修改后的第一控制组文件的内容。另ー方面,一种计算机系统,包括总线;与该总线相连的处理器,所述处理器之上运行有ー个或多个容器;与该总线相连的存储器;其中,该处理器通过该总线,调用该存储器中存储的代码,以用于在需要备份所述ー个或多个容器中的容器的状态时,根据标志文件中的第一标志位确定该容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中至少ー组控制组文件用于对该容器中的一组进程的运行进行控制,该标志文件包括与至少ー个控制组文件相对应的至少ー个标志位,至少ー个标志位用于分别指示至少一个控制组文件的内容是否被修改;根据至少一个标志位与至少ー个控制组文件的文件名之间的对应关系获取与第一标志位相对应的第一控制组文件的文件名;根据至少一个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系查找与所述第一控制组文 件的文件名对应的第一控制组文件的存储位置,并且从第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的第一控制组文件的内容;备份第一控制组文件的文件名和该修改后的第一控制组文件的内容。本发明实施例中,在需要备份所述容器的状态时,根据标志文件中的第一标志位确定所述容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中所述至少ー组控制组文件用于对所述容器中的一组进程的运行进行控制,所述标志文件包括与所述至少ー个控制组文件相对应的至少ー个标志位,所述至少一个标志位用于分别指示所述至少ー个控制组文件的内容是否被修改;根据所述至少ー个标志位与所述至少ー个控制组文件的文件名之间的对应关系获取与所述第一标志位相对应的所述第一控制组文件的文件名;根据所述至少ー个控制组文件的文件名与所述至少一个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名对应的所述第一控制组文件的存储位置,并且从所述第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的所述第一控制组文件的内容;备份所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容。可见,本发明实施例可以通过标志文件中的标志位来确定与容器相对应的多个控制组文件中的哪些控制组文件的内容被修改,因此,无需遍历全部控制组文件就能够获知容器的状态,并且可以只根据标志位查找被修改控制组文件的存储位置并备份被修改的控制组文件的内容,从而减小了系统开销。


为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图I是根据本发明的实施例的基于容器的处理方法的示意性流程图。图2是根据本发明的实施例的控制组文件系统的截屏。图3是根据本发明的实施例的哈希查找表的示意图。图4是根据本发明的实施例的基于容器的处理过程的示意图。图5是根据本发明的另ー实施例的基于容器的处理过程的示意图。图6是根据本发明的一个实施例的基于容器的处理系统的结构性示意图。图7是根据本发明的另ー实施例的基于容器的处理系统的结构性示意图。图8示出了根据本发明实施例的计算机系统的示意性框图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在基于容器的处理系统中,备份/恢复指在某一时刻将容器的状态(例如,控制组的状态)及控制组中的进程的执行状态进行保存与恢复。在容器的状态及进程的执行状态恢复之后,进程可以从保存时刻的执行状态开始继续执行,并维持保存时刻的各种行为控制。容器的状态可以包括容器的资源限制状态、容器的安全信息以及容器所在的主机名等
坐寸ο实现应用程序的执行状态的实时保存与恢复的前提是,应用程序在虚拟的容器中运行,也就是说,使用独立的命名空间实现轻量级的虚拟化。可以为容器中的应用程序创建控制组,并且通过控制组机制对应用程序进行资源限制。在为容器创建控制组时,会产生与容器相对应的控制组目录。当需要对容器中应用程序进行资源限制吋,需打开控制组目录下表征指定资源的控制组文件,并且在打开的控制组文件中写入允许进程使用资源的大小,即可达到限制资源的目的。因此,与容器相对应的控制组目录下的各个文件中的值表明了在容器中的应用程序的运行所使用的各种资源的限定值。另外,在创建控制组文件时,控制组文件中的值为默认值。在对容器状态及进程状态的备份/恢复过程中,通过保存与容器对应的控制组目录下各个控制组文件中的值来实现容器的资源限制状态。常规的备份/恢复容器的状态的方案为,在备份阶段,遍历与容器对应的控制组目录下的所有控制组文件,记录所有控制组文件中的值并保存到容器状态文件中。备份完成之后,可以删除上述容器以及与该容器相对应的控制组目录。在恢复阶段可以建立新的容器以及与该容器相对应的控制组目录,以保存的容器状态文件作为输入,读取容器状态文件中保存的所有值,并且再次遍历所有新的控制组目录下所有控制组文件,并且将保存在容器状态文件中的值写到这些控制组文件中,以恢复备份阶段的资源限制状态。这里,新的控制组文件是指在恢复容器的状态时为新的容器的进程创建的新的控制组目录和新的控制组文件,新的控制组文件包含默认值。按照上述方法,在容器状态的备份与恢复期间,需要两次打开对应的控制组目录下几十个控制组文件并进行读操作和写操作,但这些控制组文件毎次被创建时初始值都相同,且往往只有少数几个相对创建时有所改动或完全没有改动,因此,常规方案明显降低了备份与恢复的效率。随着控制组机制的完善,控制组目录下的文件将逐渐增多,遍历机制的系统开销随文件数的増加而线性增长,因此,可扩展性较差。因此,本发明提出的目的还在于缩短容器状态备份与恢复所需的时间,降低备份与恢复过程的系统开销。图I是根据本发明的实施例的基于容器的处理方法的示意性流程图。图I的方法包括如下内容。110,在需要备份该容器的状态时,根据标志文件中的第一标志位确定该容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中至少ー组控制组文件用于对该容器中的一组进程的运行进行控制,该标志文件包括与至少ー个控制组文件相对应的至少ー个标志位,至少ー个标志位用于分别指示至少ー个控制组文件的内容是否被修改;120,根据至少一个标志位与至少ー个控制组文件的文件名之间的对应关系获取 与第一标志位相对应的第一控制组文件的文件名;130,根据至少一个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名对应的第一控制组文件的存储位置,并且从第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的第一控制组文件的内容;140,备份第一控制组文件的文件名和上述修改后的第一控制组文件的内容。例如,上述至少ー个控制组文件和标志文件可以存储在与容器相对应的控制组文件系统的目录(以下称为控制组目录)下。上述至少ー个控制组文件可以用于对该容器中的运行的ー组进程进行行为控制,例如,可以限制上述进程及其子进程所使用的系统资源。上述至少一个控制组文件的内容可以是进程能够使用的系统资源的限定值,例如,CPU时间、内存大小以及带宽等等。例如,上述一组进程为至少ー个进程。当上述至少ー个控制组文件中的某个控制组文件的内容被修改时,可以相应地修改与该控制组文件相对应的标志位,例如,可以将相应的标志位置位,以便记录哪个控制组文件被修改。这样,可以通过标志位的值或者标志位是否被修改来确定与该标志位相对应的控制组文件是否被修改,例如,该标志位为I表示与该标志位相对应的控制组文件被修改过,该标志位为O表示与该标志位相对应的控制组文件未被修改过,从而可以快速获知控制组或容器的状态(例如,系统资源限定值的大小)。在具体应用中,该标志位的修改可能在容器启动时通过读取设置的配置文件修改控制组文件而引起,或在容器运行过程中由于用户手动修改控制组文件而引起,根据本发明的实施例对此并不限定。在需要备份该容器的状态时,可以读取上述标志文件,根据该标志文件中被修改的第一标志位确定第一控制组文件的文件名,根据第一控制组文件的文件名在上述至少ー个控制组文件中查找与第一标志位相对应的第一控制组文件,并且将修改后的第一控制组文件的内容备份在容器状态文件中。例如,可以在进程的目录下(例如,进程的源文件所在的目录下)存储上述容器状态文件,用于记录控制组文件的修改情况。在备份容器的状态的阶段,可以从控制组目录下读取上述标志文件,根据被修改过的标志位知道哪些(哪个)控制组文件被修改过,并且根据该控制组文件的文件名在控制组目录下查找该控制组文件,例如,查找该控制组文件的存储位置。根据本发明的实施例并不限制查找控制组文件的方法,例如,可以采用遍历法、二分法或哈希(hash)查找法等等。在查找到该控制组文件后,可以打开该控制组文件,读取该控制组文件的内容(例如CPU时间、内存大小等等),并且将该内容写入到容器状态文件中,以便恢复容器的状态时使用。应理解,上述至少ー个标志位与至少ー个控制组文件的文件名之间的对应关系可以在建立标志文件时获得并保存,例如,可以通过用来遍历控制组目录下的控制组文件的函数获得上述至少ー个标志位与至少ー个控制组文件的文件名之间的对应关系,即标志位的顺序与遍历控制组文件的顺序一致。根据本发明的实施例并不限于此,也可以在备份容器的状态时利用该函数获得。还应理解,可以在需要时备份容器的状态,也可以根据预先设定的周期备份容器的状态,本发明的实施例对备份容器的状态的时机不作限制。
根据本发明的实施例可以通过标志文件中的标志位来确定哪些控制组文件中的内容被修改过,因此,无需遍历全部控制组文件就能够获知控制组及容器的状态,并且可以只根据标志位查找被修改控制组文件的存储位置并备份被修改的控制组文件的内容,从而减小了系统开销。可选地,作为另ー实施例,该方法还包括为至少一个控制组文件的文件路径建立第一哈希查找表,其中第一哈希查找表用于表示至少ー个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系,其中在130中,可以根据第一控制组文件的文件名在第一哈希查找表中查找与所述第一控制组文件的文件名对应的第一控制组文件的存储位置;在140中,可以将第一控制组文件的文件名和该修改后的第一控制组文件的内容备份在容器状态文件中。换句话说,可以为上述至少ー个控制组文件的文件路径建立第一哈希查找表,其中可以根据第一控制组文件的文件名通过第一哈希查找表在上述至少ー个控制组文件中查找与第一标志位相对应的第一控制组文件。例如,在备份容器的状态的阶段,需要根据被修改的控制组文件的文件名在控制组目录下查找该控制组文件。为了加快控制组文件的查找速度,可以为控制组文件的路径建立哈希查找表,以根据哈希查找表直接找到该控制组文件的存储位置,从而提高控制组文件的查找和访问效率。例如,可以根据该控制组文件的文件名以及第一哈希查找表所使用的哈希函数计算索引值,并且根据该索引值查找第一哈希查找表来确定该控制组文件的存储位置。由于根据本发明的实施例可以根据计算出的索引值直接找到该控制组文件的存储位置,因此,避免了在备份容器的状态阶段遍历控制组目录下的全部控制组文件来查找该控制组文件。例如,根据本发明的实施例可以检查上述至少ー个标志位,并且在确定上述至少一个标志位的值不为O (意味着与上述至少ー个标志位对应的控制组文件被修改过)的情况下,将与该容器对应的控制组目录下所有文件的路径建立哈希查找表。如果上述至少ー个标志位的值均为0,意味着没有控制组文件被修改过,则没有必要备份容器的状态,因此也没有必要建立哈希查找表。另外,在备份完成之后,可以删除上述容器以及与该容器相对应的控制组目录。可选地,作为另ー实施例,该方法还包括在需要恢复该容器的状态时,获取备份的第一控制组文件的文件名和上述修改后的第一控制组文件的内容;根据待恢复的至少ー个控制组文件的文件名与上述待恢复的至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名相对应的待恢复的第一控制组文件的存储位置;将备份的上述修改后的第一控制组文件的内容写入到上述待恢复的第一控制组文件的存储位置处存储的上述待恢复的第一控制组文件中。换句话说,可以在需要恢复该容器的状态时,读取上述容器状态文件以获取第一控制组文件的文件名和修改后的第一控制组文件的内容;存储至少ー个新的控制组文件和新的标志文件,上述至少ー组新的控制组文件用于对新的容器的一组进程的运行进行控制;根据第一控制组文件的文件名在上述至少ー个新的控制组文件中查找新的第一控制组文件,并且将上述修改后的第一控制组文件的内容写入到上述新的第一控制组文件中。例如,在需要恢复容器的状态的阶段,可以为新的容器建立新的控制组目录、新的控制组文件以及新的标志文件。然后,可以从容器状态文件中读取保存的控制组文件的文件名和修改后的内容,并且根据该控制组文件的文件名在新的控制组目录下查找新的控制组文件。根据本发明的实施例并不限制查找控制组文件的方法,例如,可以采用遍历法、ニ分法或哈希查找法等等。在查找到新的控制组文件后,可以打开新的控制组文件,并且将上述容器状态文件中保存的修改后的内容写入到新的控制组文件中,从而完成了容器状态的恢复过程。其中新的容器以及与该新的容器相对应的控制组目录可以在恢复容器的状态时创建。还应理解,可以在需要时恢复容器的状态,本发明的实施例对恢复容器的状态的时机不作限制。可选地,作为另ー实施例,该方法还包括为上述待恢复的至少ー个控制组文件的文件路径建立第二哈希查找表,其中第二哈希查找表用于表示上述待恢复的至少ー个控制组文件的文件名与上述待恢复的(或者新的)至少ー个控制组文件的存储位置的对应关系,其中上述根据待恢复的至少ー个控制组文件的文件名与上述待恢复的至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名相对应的上述待恢复的第一控制组文件的存储位置,包括根据第一控制组文件的文件名在第二哈希查找表中查找与第一控制组文件的文件名对应的上述待恢复的第一控制组文件的存储位置。换句话说,可以为上述至少ー个控制组文件的文件路径建立第二哈希查找表,其中可以根据第一控制组文件的文件名通过第二哈希查找表在上述至少ー个控制组文件中查找第一控制组文件。例如,可以根据该控制组文件的文件名和第二哈希查找表所使用的哈希函数计算索引值,并且根据该索引值和第二哈希查找表确定该控制组文件的存储位置。由于根据本发明的实施例可以根据计算出的索引值直接找到该控制组文件的存储位置,因此,避免了在恢复容器的状态阶段遍历控制组目录下的全部控制组文件来查找该控制组文件。可选地,作为另ー实施例,图I的方法还包括在恢复该容器的状态时,创建新的容器;生成与该新的容器相对应的控制组目录;在与该新的容器相对应的控制组目录下生成上述待恢复的至少ー个控制组文件和待恢复的标志文件;建立上述待恢复的至少ー个控制组文件的文件名与上述待恢复的标志文件中的至少ー个标志位之间的一一对应关系。例如,为了备份该容器的状态,需要创建新的容器,并且在该新的容器的控制组目、录下生成相应的控制组文件和标志文件,新的控制组文件和标志文件可以包括初始值。另夕卜,还可以在创建控制组目录时采用数组的方式建立新控制组文件与新标志位的一一对应关系。可选地,作为另ー实施例,图I的方法还包括在修改至少ー个控制组文件中的第一控制组文件的内容的情况下,修改该标志文件中与第一控制组文件相对应的第一标志位,并且可以在该标志文件的至少ー个标志位被修改的情况下,确定需要备份该容器的状态,或者在接收到备份所述容器的状态的指令或预先设定的备份所述容器状态的周期期满时,检测所述标志文件的至少ー个标志位是否被修改(如果标志位的初始值为0,即检测标志文件中的标志位是否全为0),并且在检测到所述标志文件的至少ー个标志位被修改的情况下,确定需要备份所述容器的状态的操作。例如,当某个控制组文件被修改时,与该控制组文件相对应的标志位也相应地被修改,并且触发备份容器的状态的操作。可选地,也可以在标志位被修改时暂时不备份容器的状态,而是在用户发出备份指令或者预先设定的周期期满时,才读取上述标志文件,然后确定该标志文件中是否有标志位被修改过,如果被修改过才触发执行备份容器状态的操 作。如果上述标志文件的标志位全部未被修改过(说明控制组文件未做任何修改),则直接跳过容器状态的备份和恢复过程,这也降低了不必要的系统开销。根据本发明的实施例,在修改至少ー个控制组文件中的第一控制组文件的内容时,可以在该容器启动时根据预先设置的配置文件修改上述至少ー个控制组文件中的第一控制组文件的内容。可选地,作为另ー实施例,在修改至少ー个控制组文件中的第一控制组文件的内容时,可以在该容器的运行过程中,根据用户的需要修改上述至少ー个控制组文件中的第一控制组文件的内容。根据本发明的实施例,上述至少ー个控制组文件的内容为该容器中的一组进程在运行时所使用的资源的限定值。上述至少ー个控制组文件用来共同控制该组进程所使用的资源的限定值,例如,与CPU相关的控制组文件可以限定该组进程在运行时所使用的CPU时间或者CPU时间利用率,例如,当CPU时间为20%时,可以在该控制组文件中保存数值20%,以限定该组进程在运行时所使用的CPU时间总共为20%。再如,与内存相关的控制组文件可以限定该组进程在运行时所占用的内存的大小。可选地,作为另ー实施例,图I的方法还包括在使用所述容器对所述一组进程的运行进行控制之前,创建上述容器;生成与该容器相对应的控制组目录;在与所述容器相对应的控制组目录下生成上述至少ー个控制组文件和该标志文件;建立上述至少ー个控制组文件的文件名与该标志文件中的上述至少ー个标志位的--对应关系。例如,在创建上述容器吋,可以在该容器的控制组目录下生成相应的控制组文件和标志文件,控制组文件和标志文件可以包括初始值。另外,可以在创建控制组目录时采用数组的方式建立控制组文件与标志位的一一对应关系。可选地,作为另ー实施例,图I的方法还包括在创建该容器时,将该标志文件中的上述至少ー个标志位设置为初始化值,其中,在修改该标志文件中与第一控制组文件相对应的第一标志位时,可以将与第一控制组文件相对应的第一标志位对初始化值进行置位。如果在创建容器时将上述标志位初始化为零,则可以根据标志位的值是否为I来确定与该标志位相对应的控制组文件是否被修改过。应理解,当容器的状态被恢复之后,下一次备份/恢复的过程与上述过程类似。根据本发明的实施例可以通过建立用于指示容器状态是否被修改过的标志位的方式来表示控制组文件的修改情况,避免了不必要的控制组目录遍历。另外,可以为控制组文件路径建立哈希查找表,提高了文件的查找和访问效率,并且该效率不随控制组目录下文件数目的扩展而降低。与常规方案相比,本发明的实施例提高了容器状态的备份/恢复过程的效率,同时增加了备份/恢复方法的可扩展性。图2是根据本发明的实施例的控制组文件系统的截屏。 根据本发明的实施例的控制组文件系统可以包含多个子系统。例如,blkio子系统用于限制设备(例如磁盘,光盘以及usb等等)的输入输出控制,可以包括blkio. sectors、blkio. time、blkio. weight等控制组文件。cpu子系统用于使用调度程序为控制组任务(task)提供对cpu的访问。cpuacct子系统用于产生控制组任务的cpu资源报告,可以包括cpuacct. stat、cpuacct. usage 和 cpuacct. usage_percpu 等文件。cpuset 子系统用于为控制组任务分配单独的cpu和内存,可以包括cpuset. cpus和cpuset. mems等文件。devices用于允许或拒绝控制组任务对设备的访问,可以包括devices, allow和devices, list等文件。freezer用于暂停和恢复控制组任务,可以包括freezer, state文件。memory用于设置姆个控制组的内存限制以及产生内存资源报告,可以包括memory, failcnt和memory.force_empty 等文件。cgroup 子系统可以包括 event_control 和 cgroup. procs 等文件。net_cls标记姆个网络包以供控制组方便使用,可以包括net_cls. classid等文件。根据本发明的实施例可以在创建控制组文件系统时在上述控制组文件系统中添加文件名为cont_flag的文件。该cont_flag文件可以包括与上述控制组文件相对应的标志位,例如,在该cont_flag文件中保存一个ニ进制序列,姆个ニ进制位记录指示相应的控制组文件的内容是否被修改过,例如,某个ニ进制位为I表示修改过该控制组文件,该ニ进制位为O表示未修改过该控制组文件,或者相反。图3是根据本发明的实施例的哈希查找表的示意图。图4是根据本发明的实施例的基于容器的处理过程的示意图。图4的方法是图I的方法的ー个例子。基于容器的处理过程可以经历容器的创建、容器的运行、容器状态的备份以及容器状态的恢复等阶段。本实施例假设在容器I (COntainer_l)中创建应用程序,并且在创建容器时配置容器containerj绑定到编号为O的CPU (cpuO)上运行。根据本发明的实施例并不限于此,例如,也可以创建更多的容器,并且可以对进程使用的其它系统资源进行限定。根据本发明的实施例可以修改控制组文件系统的写函数,以在修改(或者写)控制组文件的同时将标志文件cont_flag中与该控制组文件相对应的标志位置位。该标志位用以表示相应的控制组文件的内容是否被修改过。405,创建容器,并且生成与该容器相对应的控制组目录。具体而言,在创建container_l时,在/cgroup目录下生成容器的控制组目录/cgroup/container_l,该container_l目录下也可以存储如图2所述的多个控制组文件,这些控制组文件包含默认值。在创建控制组目录/cgroup/container_l时,与常规方法不同的是,本发明的实施例可以在控制组目录/cgroup/container_l下存储标志文件cont_flag,用于存放cont_flag标志位,以表示container_l下的相应控制组文件的内容是否被修改过,例如,某个标志位为1,表明与该标志位相对应的控制组文件被修改过。410,建立控制组文件与cont_flag标志位的对应关系。例如,在创建容器过程中,可以同时创建标志文件cont_flag中的标志位与上述控制组文件的文件名的对应关系,例如,在创建控制组文件的过程中,采用数组的形式建立标志位与控制组文件的对应关系。415,对cont_flag标志位进行初始化。例如,可以对cont_flag标志文件中的cont_flag标志位进行初始化,使它们的值 全部为O。cont_flag标志位为零表示与该标志位对应的控制组文件没有被修改。420,读取配置文件,并且根据配置文件修改控制组文件的内容。例如,可以在容器启动时,读取配置文件,该配置文件例如可以包含预先设置的系统资源的限定值,例如,包含各个控制组文件的文件名以及相应的系统资源的限定值,并且可以使用写函数将这些系统资源的限定值写入到相应的控制组文件中。特别地,为了配置container_l绑定在cpuO上运行,可以将cpuset. cpus文件中的值限定为O时。例如,可以首先打开container_l目录下的cpuset. cpus文件,在该cpuset. cpus文件中写入数值O,最后保存并关闭cpuset. cpus文件。425,在修改该控制组文件的内容的情况下,修改与该控制组文件相对应的cont_flag标志位。当某个控制组文件被修改时,与该控制组文件相对应的标志位会被置位,并且保存在标志文件cont_flag中。例如,写函数可以在将数据O写入该cpuset. cpus文件之后,将cont_flag文件中与cpuset. cpus文件对应的cont_flag标志位自动置位,例如,在该标志位所在的位置写入数值1,表示该标志位对应的cpuset. cpus文件被修改过。 430,从控制组目录下的标志文件cont_flag中读取cont_f lag标志位的值。在容器状态的备份阶段,为了获知是否有控制组文件的内容被修改过或者哪些控制组文件的内容被修改过,可以首先打开控制组目录/cgroup/container_l下的标志文件cont_flag,并且从标志文件cont_flag中读取cont_flag标志位的值。435,确定cont_flag标志位的值是否为O 如果标志位的值为0,说明控制组文件未被修改过,则跳过容器状态的备份阶段,否则执行步骤440。例如,如果读取到的cont_fIag标志位的值全部为O,则说明所有cont_fIag标志位没有改变,这意味着所有控制组文件均未被修改过,因此,没有必要进行容器状态的备份。如果控制组文件没有任何修改,则可以将直接跳过控制组文件的备份过程,这也降低了不必要的系统开销。440,为控制组的文件路径建立哈希查找表。如果cont_flag标志位并非全部为0,说明有控制组文件被修改,则为container」下的所有控制组文件(如图3所示)的路径建立哈希查找表,以便快速查找某个控制组文件,例如,根据被修改为I的标志位可以确定被修改的文件的文件名为cpuset.cpus,然后再根据该文件名在上述控制组目录下查找与该标志位相对应的cpuset. cpus文件。
为了快速查找到修改过的控制组文件,根据本发明的实施例可以为全部控制组文件的路径建立哈希查找表,并且可以采用链地址法来避免相同关键字的值引起的冲突。根据本发明的实施例假设控制组文件系统中总共包含10个待索引的文件,例如,biKio. sectors、blkio. time、blkio. weight、cgroup. event_control> cgroup. procs、cpuacct. stat、cpuacct. usage、cpuacct.usage—percpu、cpuset. cpus、cpuset. mems。在建立哈希查找表时,可以先确定这些文件名的关键字(key)。例如,通过哈希函数将控制组文件的文件名最后三个字母的ASCII码相加的值作为每个控制组文件的关键字,将这些关键字除以13取余数作为索引值(index value),因此该哈希查找表的索引值为O到12,共13个值。与上述控制组文件相对应的索引值计算结果如下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,通过哈希查找表查找被修改的控制组文件,并且保存被修改的控制组文件的内容。例如,在查找某个控制组文件时,可以先根据上面的哈希函数计算出该控制组文件的索引值,然后根据该索引值找到图3的哈希查找表中对应的索引列,从而找到相应的存储地址。例如,控制组文件cpuset. cpus的索引值为4,位于索引=4的索引列。然后,将该控制组文件的文件名与该列的链表中每个节点的文件名进行比较。如果比较结果相同,则表明找到该文件。每个节点中除了控制组文件的文件名之外,还存储了与该控制组文件唯一对应的指针(file*),用于确定该控制组文件的实际存储位置。例如,本实施例可以从哈希查找表中找到cpuset. cpus文件,并且将cpuset. cpus文件中的当前内容保存到上述容器状态文件中,例如,可以采用列表的形式,一个字段保存控制组文件的文件名,另一字段保存与该控制组文件的文件名相对应的内容。该容器状态文件可以存储到容器中运行的进程所在的文件目录下,根据本发明的实施例并不限于此,该容器状态文件也可以存储其它文件目录下。另外,在备份容器的状态的阶段之后,可以删除容器以及与该容器相对应的控制
组目录。450,在容器状态的恢复阶段,可以建立与新的容器对应的新的控制组目录。例如,为了恢复容器的状态,可以创建新的容器,并且在创建新的容器时,为新的容器建立新的控制组目录,该新的控制组目录下包含新的控制组文件(即待恢复的控制组文件)和新的标志文件(即待恢复的标志文件),例如,新的控制组目录下包含新的cpuset.cpus文件,该新的cpuset. cpus文件包含的内容为默认值。可选地,可以根据是否有备份来确定是否需要进行恢复。可选地,作为另ー实施例,可以通过判断cont_flag标志位的值是否为O确定是否
需要进行恢复。应理解,新的容器的状态的备份/恢复过程与上述容器的备份/恢复过程相同,这里不再赘述。460,从容器状态文件中读取修改过的控制组文件的文件名和内容。例如,可以打开容器状态文件,并且读取保存的控制组文件的文件名和内容。例如,在容器状态文件中读取cpuset. cpus文件的文件名“cpuset. cpus文件”以及该cpuset.cpus文件中的值O。 465,为上述新的控制组文件的文件路径建立哈希查找表。恢复容器状态阶段建立哈希查找表的过程与440中描述的备份容器状态阶段建立哈希查找表的过程类似,在此不再赘述。470,根据哈希查找表恢复被修改的控制组文件的内容。例如,在建立好哈希查找表后,可以根据cpuset. cpus文件的文件名cpuset. cpus通过哈希查找表在新的控制组目录下查找新的cpuset. cpus文件,打开新的cpuset. cpus文件,并且将读取到的cpuset. cpus的内容(即420的配置文件中的限定值O)写入到该新的cpuset. cpus文件中,从而将容器恢复到备份前的状态,即新的容器的状态与备份前的原有容器的状态相同。另外,用户可以对上述标志位手动清零,或者由系统在容器状态恢复完成后自动对上述标志位清零。综上,一方面本发明的实施例优化了已有方案的遍历机制,通过建立标志位的方式标识控制组文件的修改情况,避免了不必要的控制组目录的遍历。另外,在备份/恢复容器的状态阶段,为控制组文件路径建立哈希查找表索引,提高了文件的查找和访问效率,并且该效率不随控制组目录下文件数目的扩展而降低。与已有方案相比,本发明提高了容器状态备份/恢复过程的效率,同时增加了备份/恢复方法的可扩展性。图5是根据本发明的另ー实施例的基于容器的处理过程的示意图。图5的方法是图I的方法的另ー个例子。与图4不同的是,在容器创建过程中不对进程占用的系统资源进行限制,而是由用户在容器的运行过程中对进程占用的系统资源进行限制。图5的505至515、525至535、550至560与图4的405至415、425至435、450至460类似,在此不再赘述。505,创建容器,并且生成与该容器相对应的控制组目录。510,建立控制组文件与cont_flag标志位的对应关系。515,对cont_flag标志位进行初始化。520,根据用户的需要修改控制组文件的内容。例如,在容器运行过程中,由用户手动修改控制组文件。当用户希望容器绑定到cpuO运行,用户可以手动向控制组目录下的cpuse. cpus文件中写入O值,从而将容器绑定在cpuO上运行。
525,在修改该控制组文件的内容的情况下,修改与该控制组文件相对应的cont_flag标志位。530,从控制组目录下的标志文件cont_flag中读取cont_f lag标志位的值。535,确定cont_flag标志位的值是否为O 如果标志位的值为0,说明控制组文件未被修改过,则跳过容器状态的备份阶段,否则执行步骤440。545,查找被修改的控制组文件,并且保存被修改的控制组文件的内容。例如,如果cont_flag标志位并非全部为0,说明有控制组文件被修改,则可先采用常规查找方法(例如,遍历或二分法等等)查找控制组目录下的cpuse. cpus文件,并且将cpuset. cpus文件中的当前内容保存到容器状态文件中,该容器状态文件可以存储到容器中运行的进程所在的文件目录下。当然,本发明的实施例也可以采用图4中的哈希查找表的方法进行控制组文件的查找。
另外,在备份容器的状态之后,可以删除容器以及与该容器相对应的控制组目录。550,在容器状态的恢复阶段,建立与新的容器对应的新的控制组目录。560,从容器状态文件中读取修改的控制组文件的文件名和内容。570,恢复被修改的控制组文件的内容。例如,可先采用常规查找方法(例如,遍历或二分法等等)查找新的控制组目录下的新的cpuse. cpus文件,例如,可以根据cpuset. cpus文件的文件名cpuset. cpus在新的控制组目录下查找新的cpuset. cpus文件,打开新的cpuset. cpus文件,并且将读取到的cpuset. cpus文件的内容(即用户在520中写入的O值)写入到该新的cpuset. cpus文件中,从而将容器恢复到备份前的状态,即新的容器的状态与备份前的原有容器的状态相同。当然,本发明的实施例也可以采用图4中的哈希查找表的方法进行控制组文件的查找。图6是根据本发明的实施例的基于容器的处理装置600的结构性示意图。图6的处理装置包括确定模块610、获取模块620、查找模块630和备份模块640。确定模块610用于在需要备份该容器的状态时,根据标志文件中的第一标志位确定该容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中至少ー组控制组文件用于对该容器中的一组进程的运行进行控制,该标志文件包括与至少ー个控制组文件相对应的至少ー个标志位,至少ー个标志位用于分别指示至少ー个控制组文件的内容是否被修改。获取模块620用于根据至少ー个标志位与至少ー个控制组文件的文件名之间的对应关系获取与第一标志位相对应的第一控制组文件的文件名。查找模块630用于根据至少ー个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名对应的第一控制组文件的存储位置,并且从第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的第一控制组文件的内容。备份模块640用于备份第一控制组文件的文件名和该修改后的第一控制组文件的内容。可见,根据本发明的实施例的基于容器的处理装置可以通过标志文件中的标志位来确定哪些控制组文件的内容被修改,因此,无需遍历全部控制组文件就能够获知控制组及容器的状态,并且可以只根据标志位查找被修改控制组文件的存储位置并备份被修改的控制组文件的内容,从而减小了系统开销。图7是根据本发明的另ー实施例的基于容器的处理系统的结构性示意图。图7的处理装置包括确定模块710、获取模块720、查找模块730和备份模块740。图7的确定模块710、获取模块720、查找模块730和备份模块740与图6的确定模块610、获取模块620、查找模块630和备份模块640类似,在此不再赘述。可选地,作为另ー实施例,处理装置700还包括第一建立模块750。第一建立模块750用于为至少ー个控制组文件的文件路径建立第一哈希查找表,其中第一哈希查找表用于表示至少ー个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系。相应的,查找模块730具体用于根据第一控制组文件的文件名在第一哈希查找表中查找与第一控制组文件的文件名对应的第一控制组文件的存储位置,并且从第一控制组文件的存储位置处存储的第一控制组文件中提取修改后的第一控制组文件的内容。
相应的,备份模块740具体用于将第一控制组文件的文件名和该修改后的第一控制组文件的内容备份在容器状态文件中。可选地,作为另ー实施例,获取模块720还用于在需要恢复该容器的状态时,获取备份的第一控制组文件的文件名和该修改后的第一控制组文件的内容;应当理解的是,在一种实现方式下,获取模块720从容器状态文件中获取备份的第一控制组文件的文件名和该修改后的第一控制组文件的内容。相应的,查找模块730还用于根据待恢复的至少ー个控制组文件的文件名与上述待恢复的至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名相对应的待恢复的第一控制组文件的存储位置。相应的,处理装置700还包括恢复模块760。恢复模块760用于将备份的上述修改后的第一控制组文件的内容写入到上述待恢复的第一控制组文件的存储位置处存储的上述待恢复的第一控制组文件中。可选地,作为另ー实施例,第二建立模块770,用于为上述待恢复的至少ー个控制组文件的文件路径建立第二哈希查找表,其中第二哈希查找表用于表示上述待恢复的至少一个控制组文件的文件名与上述待恢复的至少ー个控制组文件的存储位置的对应关系。相应的,查找模块730具体用于根据第一控制组文件的文件名在第二哈希查找表中查找与第一控制组文件的文件名对应的上述待恢复的第一控制组文件的存储位置。可选地,作为另ー实施例,处理装置700还包括第一创建模块780,用于在需要恢复该容器的状态时,创建新的容器,生成与该新的容器相对应的控制组目录,在与该新的容器相对应的控制组目录下生成上述待恢复的至少ー个控制组文件和待恢复的标志文件,并且建立上述待恢复的至少ー个控制组文件的文件名与上述待恢复的标志文件中的至少ー个标志位之间的--对应关系。可选地,作为另一实施例,处理装置700还包括修改模块790,用于在修改至少一个控制组文件中的第一控制组文件的内容的情况下,修改该标志文件中与第一控制组文件相对应的第一标志位。相应的,确定模块710具体用于在该标志文件的至少ー个标志位被修改的情况下,确定需要备份该容器的状态,或者在接收到备份该容器的状态的指令或预先设定的备份该容器状态的周期期满时,检测该标志文件的至少ー个标志位是否被修改,并且在检测到该标志文件的至少ー个标志位被修改的情况下,确定需要备份该容器的状态,井根据标志文件中的第一标志位确定该容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中上述至少ー组控制组文件用于对该容器中的一组进程的运行进行控制,该标志文件包括与上述至少ー个控制组文件相对应的至少ー个标志位,上述至少ー个标志位用于分别指示上述至少ー个控制组文件的内容是否被修改。根据本发明的实施例,修改模块790具体用于在该容器启动时,根据预先设置的配置文件修改至少ー个控制组文件中的第一控制组文件的内容。可选地,作为另ー实施例,修改模块790具体用于在该容器的运行过程中,根据用户的需要修改至少ー个控制组文件中的第一控制组文件的内容。可选地,作为另ー实施例,修改模块790还用于该容器被创建时,将该标志文件中的至少ー个标志位设置为初始化值,其中修改模块790具体用于在修改上述至少ー个控制组文件中的第一控制组文件的内容的情况下,将该标志文件中与第一控制组文件相对应的第一标志位对初始化值进行置位。根据本发明的实施例,至少ー个控制组文件的内容包括该容器中的ー组进程在运行时所使用的资源的限定值。可选地,作为另ー实施例,处理装置700还包括第二创建模块795。第二创建模块795用于在使用该容器对上述一组进程的运行进行控制之前,创建该容器,生成与该容器相对应的控制组目录,在与该容器相对应的控制组目录下生成至少ー个控制组文件和该标志文件,并且建立至少ー个控制组文件的文件名与该标志文件中的至少ー个标志位之间
的一一对应关系。图8示出了根据本发明实施例的计算机系统800的示意性框图。如图8所示,该计算机系统包括总线810 ;与该总线810相连的处理器820 (处理器820可以是ー个或多个,图8中以ー个处理器示意),处理器820之上运行有ー个或多个容器(例如,容器I、容器
2、···、容器η);与该总线810相连的存储器830 ;其中,该处理器820通过该总线810,调用该存储器830中存储的代码,以用于在需要备份上述ー个或多个容器中的容器的状态时,根据标志文件中的第一标志位确定该容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中至少ー组控制组文件用于对该容器中的一组进程的运行进行控制,该标志文件包括与至少ー个控制组文件相对应的至少ー个标志位,至少ー个标志位用于分别指示至少ー个控制组文件的内容是否被修改;根据至少一个标志位与至少ー个控制组文件的文件名之间的对应关系获取与第一标志位相对应的第一控制组文件的文件名;根据至少ー个控制组文件的文件名与至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名对应的第一控制组文件的存储位置,并且从第一控制组文件的存储位置处存储的第一控制组文件中提取修改后的第一控制组文件的内容;备份第一控制组文件的文件名和该修改后的第一控制组文件的内容。另外,该计算机系统还可以包括用户接ロ840,用于在该容器的运行过程中为用户提供修改上述至少ー个控制组文件中的第一控制组文件的内容的接ロ,例如,输入/输出(Input/Output, I/O)接ロ。根据本发明的实施例的计算机系统可以通过标志文件中的标志位来确定哪些控制组文件的内容被修改,因此,无需遍历全部控制组文件就能够获知控制组及容器的状态, 并且可以只根据标志位查找被修改控制组文件的存储位置并备份被修改的控制组文件的内容,从而减小了系统开销。可选地,作为另ー实施例,处理器820还用于在需要恢复该容器的状态时,获取备份的第一控制组文件的文件名和该修改后的第一控制组文件的内容,处理器820具体用于根据待恢复的至少ー个控制组文件的文件名与上述待恢复的至少ー个控制组文件的存储位置的对应关系查找与第一控制组文件的文件名相对应的待恢复的第一控制组文件的存储位置,并且处理器820还用于将备 份的上述修改后的第一控制组文件的内容写入到上述待恢复的第一控制组文件中。可选地,作为另ー实施例,处理器820还用于在修改至少ー个控制组文件中的第一控制组文件的内容的情况下,修改该标志文件中与第一控制组文件相对应的第一标志位。根据本发明的实施例可以通过建立容器状态的标志位的方式来表示控制组文件的修改情况,避免了不必要的控制组目录遍历。另外,可以为控制组文件路径建立哈希查找表,提高了文件的查找和访问效率,并且该效率不随控制组目录下文件数目的扩展而降低。同已有方案相比,本发明的实施例提高了容器状态的备份/恢复过程的效率,同时增加了备份/恢复方法的可扩展性。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和単元的具体工作过程,可以參考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另ー个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过ー些接ロ,装置或単元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的単元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理単元,即可以位于ー个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能単元可以集成在一个处理単元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能単元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在ー个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或 替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准 。
权利要求
1.一种基于容器的处理方法,其特征在于,包括 在需要备份所述容器的状态时,根据标志文件中的第一标志位确定所述容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中所述至少一组控制组文件用于对所述容器中的一组进程的运行进行控制,所述标志文件包括与所述至少一个控制组文件相对应的至少ー个标志位,所述至少一个标志位用于分别指示所述至少一个控制组文件的内容是否被修改; 根据所述至少ー个标志位与所述至少一个控制组文件的文件名之间的对应关系获取与所述第一标志位相对应的所述第一控制组文件的文件名; 根据所述至少ー个控制组文件的文件名与所述至少一个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名对应的所述第一控制组文件的存储位置,并且从所述第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的所述第一控制组文件的内容; 备份所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容。
2.根据权利要求I所述的处理方法,其特征在于,还包括 为所述至少ー个控制组文件的文件路径建立第一哈希查找表,其中所述第一哈希查找表用于表示所述至少一个控制组文件的文件名与所述至少一个控制组文件的存储位置的对应关系, 其中所述根据所述至少一个控制组文件的文件名与所述至少一个控制组文件的存储位置的对应关系查找所述第一控制组文件的存储位置,包括 根据所述第一控制组文件的文件名在所述第一哈希查找表中查找与所述第一控制组文件的文件名对应的所述第一控制组文件的存储位置。
3.根据权利要求I或2所述的处理方法,其特征在于,还包括 在需要恢复所述容器的状态时,获取备份的所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容; 根据待恢复的至少ー个控制组文件的文件名与所述待恢复的至少ー个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名相对应的待恢复的第一控制组文件的存储位置; 将备份的所述修改后的所述第一控制组文件的内容写入到所述待恢复的第一控制组文件的存储位置处存储的所述待恢复的第一控制组文件中。
4.根据权利要求3所述的处理方法,其特征在于,还包括 为所述待恢复的至少ー个控制组文件的文件路径建立第二哈希查找表,其中所述第二哈希查找表用于表示所述待恢复的至少ー个控制组文件的文件名与所述待恢复的至少ー个控制组文件的存储位置的对应关系, 其中所述根据待恢复的至少ー个控制组文件的文件名与所述待恢复的至少ー个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名相对应的所述待恢复的第一控制组文件的存储位置,包括 根据所述第一控制组文件的文件名在所述第二哈希查找表中查找与所述第一控制组文件的文件名对应的所述待恢复的第一控制组文件的存储位置。
5.根据权利要求3或4所述的处理方法,其特征在于,还包括在需要恢复所述容器的状态时,创建新的容器; 生成与所述新的容器相对应的控制组目录; 在与所述新的容器相对应的控制组目录下生成所述待恢复的至少ー个控制组文件和待恢复的标志文件; 建立所述待恢复的至少ー个控制组文件的文件名与所述待恢复的标志文件中的至少一个标志位之间的—对应关系。
6.根据权利要求I至5中的任一项所述的处理方法,其特征在于,还包括 在修改所述至少一个控制组文件中的第一控制组文件的内容的情况下,修改所述标志文件中与所述第一控制组文件相对应的所述第一标志位; 以及,在所述标志文件的至少ー个标志位被修改的情况下,确定需要备份所述容器的状态,或者在接收到备份所述容器的状态的指令或预先设定的备份所述容器状态的周期期满时,检测所述标志文件的至少ー个标志位是否被修改,并且在检测到所述标志文件的至少ー个标志位被修改的情况下,确定需要备份所述容器的状态。
7.根据权利要求6所述的处理方法,其特征在于,所述修改所述至少一个控制组文件中的第一控制组文件的内容,包括 在所述容器启动时,根据预先设置的配置文件修改所述至少一个控制组文件中的第一控制组文件的内容;或者 在所述容器的运行过程中,根据用户的需要修改所述至少一个控制组文件中的第一控制组文件的内容。
8.根据权利要求6或7所述的处理方法,其特征在于,还包括 在创建所述容器时,将所述标志文件中的所述至少一个标志位设置为初始化值; 其中所述修改所述标志文件中与所述第一控制组文件相对应的所述第一标志位,包括 将与所述第一控制组文件相对应的第一标志位对初始化值进行置位。
9.根据权利要求I至8中的任一项所述的处理方法,其特征在于,所述至少ー个控制组文件的内容包括所述容器中的一组进程在运行时所使用的资源的限定值。
10.根据权利要求I至9中的任一项所述的处理方法,其特征在于,还包括 在使用所述容器对所述一组进程的运行进行控制之前,创建所述容器; 生成与所述容器相对应的控制组目录; 在所述与所述容器相对应的控制组目录下生成所述至少一个控制组文件和所述标志文件; 建立所述至少一个控制组文件的文件名与所述标志文件中的所述至少一个标志位之间的--对应关系。
11.一种基于容器的处理装置,其特征在于,包括 确定模块,用于在需要备份所述容器的状态时,根据标志文件中的第一标志位确定所述容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中所述至少ー组控制组文件用于对所述容器中的一组进程的运行进行控制,所述标志文件包括与所述至少一个控制组文件相对应的至少ー个标志位,所述至少一个标志位用于分别指示所述至少ー个控制组文件的内容是否被修改;获取模块,用于根据所述至少一个标志位与所述至少一个控制组文件的文件名之间的对应关系获取与所述第一标志位相对应的所述第一控制组文件的文件名; 查找模块,用于根据所述至少一个控制组文件的文件名与所述至少一个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名对应的所述第一控制组文件的存储位置,并且从所述第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的所述第一控制组文件的内容; 备份模块,用于备份所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容。
12.根据权利要求11所述的装置,其特征在于,还包括 第一建立模块,用于为所述至少一个控制组文件的文件路径建立第一哈希查找表,其中所述第一哈希查找表用于表示所述至少一个控制组文件的文件名与所述至少一个控制组文件的存储位置的对应关系; 其中,所述查找模块具体用于根据所述第一控制组文件的文件名在所述第一哈希查找表中查找与所述第一控制组文件的文件名对应的所述第一控制组文件的存储位置,并且从所述第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的所述第一控制组文件的内容; 所述备份模块具体用于将所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容备份在容器状态文件中。
13.根据权利要求11或12所述的装置,其特征在于,所述获取模块还用于在需要恢复所述容器的状态时,获取备份的所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容; 所述查找模块还用于根据待恢复的至少ー个控制组文件的文件名与所述待恢复的至少ー个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名相对应的待恢复的第一控制组文件的存储位置; 所述处理装置还包括 恢复模块,用于将备份的所述修改后的所述第一控制组文件的内容写入到所述待恢复的第一控制组文件的存储位置处存储的所述待恢复的第一控制组文件中。
14.根据权利要求13所述的装置,其特征在于,还包括 第二建立模块,用于为所述待恢复的至少ー个控制组文件的文件路径建立第二哈希查找表,其中所述第二哈希查找表用于表示所述待恢复的至少ー个控制组文件的文件名与所述待恢复的至少ー个控制组文件的存储位置的对应关系; 其中,所述查找模块具体用于根据所述第一控制组文件的文件名在所述第二哈希查找表中查找与所述第一控制组文件的文件名对应的所述待恢复的第一控制组文件的存储位置。
15.根据权利要求13或14中所述的装置,其特征在于,还包括 第一创建模块,用于在需要恢复所述容器的状态时,创建新的容器,生成与所述新的容器相对应的控制组目录,在与所述新的容器相对应的控制组目录下生成所述待恢复的至少一个控制组文件和待恢复的标志文件,并且建立所述待恢复的至少ー个控制组文件的文件名与所述待恢复的标志文件中的至少ー个标志位之间的一一对应关系。
16.根据权利要求11至15中的任一项所述的装置,其特征在于,还包括 修改模块,用于在修改所述至少一个控制组文件中的第一控制组文件的内容的情况下,修改所述标志文件中与所述第一控制组文件相对应的所述第一标志位; 其中,所述确定模块具体用于在所述标志文件的至少ー个标志位被修改的情况下,确定需要备份所述容器的状态,或者在接收到备份所述容器的状态的指令或预先设定的备份所述容器状态的周期期满时,检测所述标志文件的至少ー个标志位是否被修改,如果检测到所述标志文件的至少ー个标志位被修改,则确定需要备份所述容器的状态,井根据标志文件中的第一标志位确定所述容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中所述至少ー组控制组文件用于对所述容器中的一组进程的运行进行控制,所述标志文件包括与所述至少一个控制组文件相对应的至少ー个标志位,所述至少一个标志位用于分别指示所述至少一个控制组文件的内容是否被修改。
17.根据权利要求16所述的装置,其特征在于,所述修改模块具体用于在所述容器启动时,根据预先设置的配置文件修改所述至少一个控制组文件中的第一控制组文件的内容;或者所述修改模块具体用于在所述容器的运行过程中,根据用户的需要修改所述至少一个控制组文件中的第一控制组文件的内容。
18.根据权利要求16或17所述的装置,其特征在于,所述修改模块还用于所述容器被创建时,将所述标志文件中的所述至少一个标志位设置为初始化值,以及,具体用于在修改所述至少一个控制组文件中的第一控制组文件的内容的情况下,将所述标志文件中与所述第一控制组文件相对应的第一标志位对初始化值进行置位。
19.根据权利要求11至18中的任一项所述的装置,其特征在于,还包括第二创建模块,用于在使用所述容器对所述一组进程的运行进行控制之前,创建所述容器,生成与所述容器相对应的控制组目录,在所述与所述容器相对应的控制组目录下生成所述至少ー个控制组文件和所述标志文件,并且建立所述至少一个控制组文件的文件名与所述标志文件中的所述至少一个标志位之间的--对应关系。
20.一种计算机系统,其特征在于,包括 总线; 与所述总线相连的处理器,所述处理器之上运行有ー个或多个容器; 与所述总线相连的存储器; 其中,所述处理器通过所述总线,调用所述存储器中存储的代码,以用于 在需要备份所述ー个或多个容器中的容器的状态时,根据标志文件中的第一标志位确定所述容器的至少ー个控制组文件中的第一控制组文件的内容被修改过,其中所述至少一组控制组文件用于对所述容器中的一组进程的运行进行控制,所述标志文件包括与所述至少ー个控制组文件相对应的至少ー个标志位,所述至少一个标志位用于分别指示所述至少一个控制组文件的内容是否被修改; 根据所述至少ー个标志位与所述至少一个控制组文件的文件名之间的对应关系获取与所述第一标志位相对应的所述第一控制组文件的文件名; 根据所述至少ー个控制组文件的文件名与所述至少一个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名对应的所述第一控制组文件的存储位置,并且从所述第一控制组文件的存储位置处存储的所述第一控制组文件中提取修改后的所述第一控制组文件的内容; 备份所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容。
21.根据权利要求20所述的计算机系统,其特征在干,所述处理器还用于在需要恢复所述容器的状态时,获取备份的所述第一控制组文件的文件名和所述修改后的所述第一控制组文件的内容,根据待恢复的至少ー个控制组文件的文件名与所述待恢复的至少ー个控制组文件的存储位置的对应关系查找与所述第一控制组文件的文件名相对应的待恢复的第一控制组文件的存储位置,并且将备份的所述修改后的所述第一控制组文件的内容写入到所述待恢复的第一控制组文件中。
22.根据权利要求20或21所述的计算机系统,其特征在于,所述处理器还用于在修改所述至少一个控制组文件中的第一控制组文件的内容的情况下,修改所述标志文件中与所述第一控制组文件相对应的所述第一标志位。
全文摘要
本发明实施例提供了一种基于容器的处理方法、装置和系统。该方法包括在备份该容器的状态时,根据标志文件中的第一标志位确定该容器的至少一个控制组文件中的第一控制组文件的内容被修改过;根据至少一个标志位与至少一个控制组文件的文件名之间的对应关系获取与第一标志位相对应的第一控制组文件的文件名;根据至少一个控制组文件的文件名与至少一个控制组文件的存储位置的对应关系查找第一控制组文件的存储位置,并且从第一控制组文件的存储位置提取修改后的第一控制组文件的内容;备份第一控制组文件的文件名和该修改后的第一控制组文件的内容。本发明无需遍历全部控制组文件就能够获知容器的状态,从而减小了系统开销。
文档编号G06F9/455GK102707990SQ201210148519
公开日2012年10月3日 申请日期2012年5月14日 优先权日2012年5月14日
发明者杨振章, 赵琪 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1