发明内容
为解决上述问题,本申请提供如下技术方案:
一种容器镜像管理系统,包括:多个容器工作节点、与所述多个容器工作节点分别通信连接的镜像代理服务器、以及与所述镜像代理服务器通信连接的镜像服务器,所述多个容器工作节点中两两容器工作节点之间相互通信连接;其中,所述镜像代理服务器存储有至少一个镜像分别对应的元数据以及已获得所述至少一个镜像分别对应的层数据的容器工作节点的节点标识;
所述第一容器工作节点,用于向所述镜像代理服务器发送用于下载目标镜像的第一请求;
所述镜像代理服务器,用于在存储的所述至少一个镜像中包括所述目标镜像的情况下,获得所述目标镜像对应的元数据和已获得所述目标镜像的至少一个层数据的容器工作节点的目标节点标识,并发送至所述第一容器工作节点;
所述第一容器工作节点,还用于从所述目标节点标识对应的第二容器工作节点中获得所述目标镜像的至少一个层数据;至少基于所述目标镜像的至少一个层数据以及所述目标镜像的元数据构建所述目标镜像;其中,所述第一容器工作节点和所述第二容器工作节点为所述多个容器工作节点中的任意容器工作节点。
优选的,所述系统还包括:与所述镜像代理服务器通信连接的容器编排调度器;
所述容器编排调度器,用于向所述镜像代理服务器发送针对待运行镜像的第二请求,所述第二请求用于指示所述镜像代理服务器确定至少已获得部分所述待运行镜像对应的层数据的容器工作节点;
所述镜像代理服务器,还用于确定至少已获得部分所述待运行镜像对应的层数据的至少一个容器工作节点;
所述容器编排调度器,还用于从所述至少一个容器工作节点中确定用于构建目标镜像的所述第一容器工作节点;其中,所述目标镜像为所述待运行镜像中的至少一个镜像。
优选的,其中,所述镜像代理服务器,还用于:
基于至少已获得部分所述待运行镜像对应的层数据对所述至少一个容器工作节点分别进行评分,并将评分结果发送至所述容器编排调度器;
用于从所述至少一个容器工作节点中确定用于构建目标镜像的所述第一容器工作节点的所述容器编排调度器,具体用于:
至少基于所述评分结果从所述至少一个容器工作节点中确定所述第一容器工作节点。
优选的,其中,用于至少基于所述评分结果从所述至少一个容器工作节点中确定所述第一容器工作节点的所述容器编排调度器,具体用于:
基于所述评分结果和所述至少一个容器工作节点的运行状态,从所述至少一个容器工作节点中确定所述第一容器工作节点。
一种容器镜像管理方法,应用于容器镜像管理系统中的镜像代理服务器,所述方法包括:
接收第一容器工作节点发送的用于下载目标镜像的第一请求;
在存储的至少一个镜像中包括所述目标镜像的情况下,获得所述目标镜像对应的元数据和已获得所述目标镜像的至少一个层数据的容器工作节点的目标节点标识,并发送至所述第一容器工作节点;其中,所述目标镜像对应的元数据和所述目标节点标识是所述第一容器工作节点构建所述目标镜像的基础。
优选的,所述方法还包括:
在存储的所述至少一个镜像中不包括所述目标镜像的情况下,从所述镜像服务器中获得所述目标镜像对应的元数据以及所述目标镜像的未被获得的至少一个层数据;
获得已获得所述目标镜像的至少一个层数据的容器工作节点的目标节点标识,并将所述目标镜像对应的元数据、所述目标镜像的未被获得的至少一个层数据和所述目标节点标识发送至所述第一容器工作节点;其中,所述目标镜像对应的元数据、所述目标镜像的未被获得的至少一个层数据和所述目标节点标识是所述第一容器工作节点构建所述目标镜像的基础;
存储所述目标镜像对应的元数据以及获得所述目标镜像对应的层数据的第一容器工作节点的节点标识。
优选的,所述方法还包括:
向所述第一容器工作节点发送与所述目标镜像的至少一个层数据相关联的新的层数据。
优选的,所述方法还包括:
接收所述第一容器工作节点所上传的新镜像;
存储所述新镜像,并向所述第一容器工作节点发送用于表征上传成功的通知。
优选的,所述方法还包括:
在指定条件下将所存储的所述新镜像上传至所述镜像服务器。
一种容器镜像管理方法,应用于容器镜像管理系统中的第一容器工作节点,所述方法包括:
向所述镜像代理服务器发送用于下载目标镜像的第一请求;
接收所述镜像代理服务器基于所述第一请求所发送的所述目标镜像对应的元数据和已获得所述目标镜像的至少一个层数据的容器工作节点的目标节点标识;
从所述目标节点标识对应的第二容器工作节点中获得所述目标镜像的至少一个层数据;
至少基于所述目标镜像的至少一个层数据以及所述目标镜像的元数据构建所述目标镜像。
经由上述的技术方案可知,本申请实施例提供了一种容器镜像管理系统,该系统包括多个容器工作节点、镜像代理服务器和镜像服务器。镜像代理服务器可以在第一容器工作节点请求下载目标镜像时,将已存储的目标镜像的元数据和已获得目标镜像的至少一个层数据的容器工作节点的目标节点标识发送给第一容器工作节点。第一容器工作节点可以从目标节点标识对应的第二容器工作节点中获得目标镜像的至少一个层数据,进而至少基于目标镜像的至少一个层数据以及目标镜像的元数据构建目标镜像。由此,本申请实施例提供了一种全新的镜像下载方式。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为方便理解,以下对容器资源调度的相关概念进行介绍:
容器技术:为软件和其依赖环境的标准化打包,可以解决开发与运维环境不一致的问题。
启动容器化应用:其本质是容器工作节点通过该容器引擎启动被调度的容器,来将应用的镜像加载到该容器中并运行;其中,镜像包含应用的二进制代码以及相关数据。
综上可知,容器工作节点运行容器的前提就是该容器工作节点预先下载有被调度的容器的镜像。如图1所示出的现有容器镜像管理系统,当容器工作节点101本地未存储被调度的容器的镜像,也就是第一次运行该容器时,就需要从镜像服务器102处下载。但是,传统应用的镜像通常很大,从镜像服务器102处下载镜像的耗时很长,这就会降低应用启动或者扩容的效果。此外,应用启动或者扩容时,会同时在若干个容器工作节点101下载镜像并运行,这就会进一步拖慢应用启动或者扩容的时间,并且由于镜像服务器102通常位于外部网络,这还会浪费很多外部带宽。
为解决上述问题,本申请提供一种全新的容器镜像管理系统。本申请公开的一种容器镜像管理系统实施例一中,如图2所示,该系统包括:
多个容器工作节点201、与多个容器工作节点201分别通信连接的镜像代理服务器202、以及与镜像代理服务器202通信连接的镜像服务器203,多个容器工作节点201中两两容器工作节点之间相互通信连接;其中,镜像代理服务器202存储有至少一个镜像分别对应的元数据以及已获得至少一个镜像分别对应的层数据的容器工作节点201的节点标识。
本实施例中,容器工作节点201可以是安装有容器引擎的服务设备,可以由单台物理服务器实现,也可以由多台服务器组成的服务器集群实现。
镜像代理服务器202和镜像服务器203可以是设置于网络侧的服务设备;其中,镜像代理服务器202为提供镜像代理服务的电脑系统或者其他类型的网络终端,镜像代理服务具体指允许容器工作节点通过这个服务与镜像服务器进行非直接连接。镜像服务器203则本地存储有不同应用的镜像。以下对镜像进行简单介绍:
镜像具有多层,第一层为基础数据,第二层为基于第一层所增加的部分数据,以此类推,下一层均指向上一层。而与镜像相关的数据分为镜像的元数据和镜像的层数据。其中,镜像的元数据用于描述镜像,比如镜像的层数、每层数据的大小以及数据内容的哈希值,以防止层数据篡改并方便查找层数据;镜像的层数据即上述各层的数据,为镜像的基础数据,包含应用相关的、或者应用所依赖的系统相关的二进制配置文件。
第一容器工作节点,用于向镜像代理服务器202发送用于下载目标镜像的第一请求。
现阶段一般由容器编排调度器(安装有编排软件的服务设备)将应用的容器调度至容器工作节点。以应用A为例,应用A对应的容器包括容器1、容器2和容器3,容器编排调度器按照现有编排算法将容器1调度至容器工作节点1、将容器2和容器3调度至容器工作节点2。
为方便理解,本实施例中,以下以容器工作节点1为例进行说明:
容器工作节点1通过解析被调度的容器1的元数据可以获得容器1的镜像,即镜像1的名称、版本和元数据等信息;进而通过哈希值匹配来检测本地是否存储有镜像1的所有层数据。假设镜像1对应的层数据包括层数据1、层数据2和层数据3,容器工作节点1通过哈希值匹配确定本地仅存储有层数据1和层数据2,则向镜像代理服务器发送用于下载镜像1的第一请求,该第一请求中包含有镜像1的元数据。反之,如果容器工作节点1通过哈希值匹配确定本地存储有层数据1、层数据2和层数据3,则直接构建镜像1,并将镜像1加载到容器1中运行。当然,容器工作节点2分别检测容器2的镜像、容器3的镜像的过程与此相同,在此不再赘述。
镜像代理服务器202,用于在存储的至少一个镜像中包括目标镜像的情况下,获得目标镜像对应的元数据和已获得目标镜像的至少一个层数据的容器工作节点的目标节点标识,并发送至第一容器工作节点。
本实施例中,容器工作节点201从镜像服务器203中下载镜像时都是通过镜像代理服务器202完成的,因此镜像代理服务器202可以获得所有容器工作节点历次下载的镜像的元数据、以及下载镜像的容器工作节点的节点标识。其中,节点标识为唯一标记容器工作节点的标识,比如IP地址,再比如容器编码等,本实施例对此不做限定。
当然,由于镜像具有多层,因此镜像代理服务器202可以获得镜像的各层数据的分布情况。为方便理解,本实施例中,继续以容器工作节点1为例进行说明:
如果镜像代理服务器202确定存储的至少一个镜像分别对应的元数据中包括镜像1的元数据,则表示除容器工作节点1之外的其他容器工作节点下载有镜像1。假设容器工作节点1本地存储有层数据1、层数据2和层数据4、容器工作节点2本地存储有层数据1、层数据2和层数据3、容器工作节点3本地存储有层数据3和层数据5。此时镜像代理服务器202可以确定容器工作节点1、容器工作节点2和容器工作节点3中均已获得镜像1的至少一个层数据。此时,镜像代理服务器202可以将容器工作节点1、容器工作节点2和容器工作节点3各自的IP地址发送给容器工作节点1。
需要说明的是,镜像代理服务器202在向容器工作节点201发送目标节点标识之前,还可以对第一容器工作节点外的其他已获得的目标镜像的至少一个层数据相同的容器工作节点去重,比如镜像代理服务器202确定容器工作节点1已获得层数据1和层数据2、待获得层数据3,而容器工作节点2和容器工作节点3已获得的层数据中均包含层数据3,则镜像代理服务器202可以将容器工作节点2和容器工作节点3中任意节点的IP地址发送给容器工作节点1。
还需要说明的是,如果镜像代理服务器202确定存储的至少一个镜像分别对应的元数据中不包括镜像1的元数据,则表示所有容器工作节点均未下载有镜像1。此时镜像代理服务器202从镜像服务器203中获得镜像1的元数据以及镜像1的未被获得的至少一个层数据,进一步通过哈希值匹配确定已获得镜像1的至少一个层数据的容器工作节点的IP地址并发送给容器工作节点1,由容器工作节点1构建镜像1。此外,镜像代理服务器202存储镜像1的元数据以及获得镜像1的层数据的容器工作节点1的IP地址。
第一容器工作节点,还用于从目标节点标识对应的第二容器工作节点中获得目标镜像的至少一个层数据;至少基于目标镜像的至少一个层数据以及目标镜像的元数据构建目标镜像;其中,第一容器工作节点和第二容器工作节点为多个容器工作节点中的任意容器工作节点。
为方便理解,本实施例中,继续以容器工作节点1为例:
容器工作节点1从本地获得用于构建镜像1的层数据1和层数据2,从容器工作节点2或者容器工作节点3处获得用于构建镜像1的层数据3。进而基于镜像1的元数据分别处理层数据1、层数据2和层数据3建立各层数据的依赖关系,以此构建镜像1。
需要说明的是,容器工作节点基于镜像的层数据以及元数据构建镜像的过程,可以采用现有算法完成,本实施例对此不做限定。
本申请实施例提供的容器镜像管理系统,容器工作节点可以从镜像代理服务器处获得目标镜像的元数据、从其他容器工作节点处获得目标镜像的至少一个层数据。由于容器工作节点位于内部网络,因此可以大大降低下载镜像的耗时,保证应用启动或者扩容的效果。另外,由于镜像之间有很多相同的层,这也可以实现镜像间层数据的共享,减少内存消耗。
基于上述实施例一公开的容器镜像管理系统,本申请实施例二还公开一种容器镜像管理系统,如图3所示,该系统还包括:
与镜像代理服务器202通信连接的容器编排调度器204。
容器编排调度器204,用于向镜像代理服务器202发送针对待运行镜像的第二请求,第二请求用于指示镜像代理服务器202确定至少已获得部分待运行镜像对应的层数据的容器工作节点。
本实施例中,容器编排调度器204在调度容器之前,通过镜像代理服务器202获得待运行镜像的各层数据的分布情况。为方便理解,本实施例中,继续以应用A为例:
应用A对应的容器为容器1、容器2和容器3,容器编排调度器204确定待运行镜像包括容器1对应的镜像1、容器2对应的镜像2、以及容器3对应的镜像3,并向镜像代理服务器202发送针对镜像1、镜像2和镜像3的第二请求,该第二请求中包含有镜像1、镜像2和镜像3的元数据,并且该第二请求用于指示镜像代理服务器202分别确定至少已获得部分镜像1、镜像2和镜像3的层数据的容器工作节点。
镜像代理服务器202,还用于确定至少已获得部分待运行镜像对应的层数据的至少一个容器工作节点。
为方便理解,本实施例中,继续以应用A为例:
镜像1的层数据包括层数据1、层数据2和层数据3;容器工作节点1本地存储有层数据1、层数据2和层数据4、容器工作节点2本地存储有层数据1、层数据2和层数据3、容器工作节点3本地存储有层数据3和层数据5。
镜像代理服务器202在获得镜像1的元数据后,通过哈希值匹配确定已获得镜像1的至少一个层数据的容器工作节点,也就是容器工作节点1、容器工作节点2和容器工作节点3的节点标识。当然,确定至少获得部分镜像2对应的层数据的至少一个容器工作节点、以及确定至少获得部分镜像3对应的层数据的至少一个容器工作节点的过程与此相同,在此不再赘述。
容器编排调度器204,还用于从至少一个容器工作节点中确定用于构建目标镜像的第一容器工作节点;其中,目标镜像为待运行镜像中的至少一个镜像。
为方便理解,本实施例中,继续以应用A为例:
容器编排调度器204确定的至少获得部分镜像1对应的层数据的至少一个容器工作节点包括容器工作节点1、容器工作节点2和容器工作节点3。此时,容器编排调度器可以按照指定规则,比如选取物理计算资源(比如内存)占用率最小的容器工作节点来确定第一容器工作节点。
当然,如果镜像代理服务器202在将已获得镜像1的至少一个层数据的容器工作节点的容器节点标识发送给容器编排调度器的同时,还将镜像1的各层数据的分布情况发送给容器编排调度器204。此时,容器编排调度器204还可以在指定规则的基础上进一步结合镜像1的各层数据的分布情况来确定第一容器工作节点,比如选取已获得镜像1对应的层数据层数最多的容器工作节点,再比如选取已获得镜像1对应的层数据数据量最大的容器工作节点等等。
当然,上述容器编排调度器204从至少一个容器工作节点中确定第一容器工作节点的方式可以由用户指定,上述举例内容仅为具体实现的一种方式,可以理解的是,其他未列举的方式也在本申请的保护范围内。
本申请实施例提供的容器镜像管理系统,可以解决容器编排调度器在调度容器时随机选择容器工作节点的问题。通过将容器调度到合适的容器工作节点,进一步降低下载镜像的耗时,保证应用启动或者扩容的效果。
基于上述实施例二公开的容器镜像管理系统,本申请实施例三还公开一种容器镜像管理系统,其中,镜像代理服务器202,还用于:
基于至少已获得部分待运行镜像对应的层数据对至少一个容器工作节点分别进行评分,并将评分结果发送至容器编排调度器204。
为方便理解,本实施例中,继续以应用A为例:
镜像代理服务器可以结合镜像1的各层数据的分布情况来对容器工作节点1、容器工作节点2和容器工作节点3分别进行评分。比如,可以针对镜像1对应的层数据层数或者镜像1对应的层数据数据量进行评分。以镜像1对应的层数据层数为例:
由于容器工作节点1本地存储有层数据1和层数据2、容器工作节点2本地存储有层数据1、层数据2和层数据3、容器工作节点3本地存储有层数据3,则评分结果中容器工作节点1的分数a、容器工作节点2的分数b和容器工作节点3的分数c的大小关系为:b>a>c。
用于从至少一个容器工作节点中确定用于构建目标镜像的第一容器工作节点的容器编排调度器204,具体用于:
至少基于评分结果从至少一个容器工作节点中确定第一容器工作节点。
为方便理解,本实施例中,继续以应用A为例:
容器编排调度器204可以直接基于容器工作节点1、容器工作节点2和容器工作节点3的分数,从中选取分数最高的工作节点作为第一容器工作节点。
当然,进一步考虑容器工作节点本身的物理计算能力,容器编排调度器204具体用于:
基于评分结果和至少一个容器工作节点的运行状态,从至少一个容器工作节点中确定第一容器工作节点。
本实施例中,容器编排调度器204可以通过获得容器工作节点执行应用A所输出的性能参数来确定容器工作节点的运行状态。具体的,对于服务类应用,容器编排调度器204所获得的性能参数可以是单位时间内完成的请求数;对于事物类应用,容器编排调度器204所获得的性能参数可以是单位时间内完成的事物数;对于数据处理类应用,容器编排调度器204所获得的性能参数可以是单位时间内处理的数据量;对于高性能计算类应用,容器编排调度器204所获得的性能参数可以是运行时间。
以服务类应用为例,如果容器工作节点1单位时间内完成的请求数为d、容器工作节点2单位时间内完成的请求数为e、容器工作节点3单位时间内完成的请求数为f,且d>e>f。并且,请求数d对应的运行状态为优、请求数e对应的运行状态为良、请求数f对应的运行状态为差。
进一步,考虑评分结果和运行状态的优先级,从容器工作节点1、容器工作节点2和容器工作节点3中选取作为第一容器工作节点的节点。比如,评分结果的优先级要高于运行状态的优选级,则将容器工作节点1作为第一容器工作节点。
当然,还可以直接基于容器工作节点的运行状态对容器工作节点再次评分,从而结合两次评分结果对容器工作节点1、容器工作节点2和容器工作节点3进行综合评分,从中选取综合评分最高的容器工作节点作为第一容器工作节点。需要说明的是,对于容器工作节点再次评分、以及综合评分的具体评分规则,本实施例对此不做限定。
本申请实施例提供的容器镜像管理系统,在容器编排调度器调度容器之前,由镜像代理服务器对容器工作节点进行评分,从而由容器编排调度器将器调度到合适的容器工作节点,进一步降低下载镜像的耗时,保证应用启动或者扩容的效果。
与上述容器镜像管理系统对应的,本申请实施例四还公开一种容器镜像管理方法,该方法应用于容器镜像管理系统中的镜像代理服务器,如图4所示,该方法包括如下步骤:
步骤S101:接收第一容器工作节点发送的用于下载目标镜像的第一请求。
步骤S102:在存储的至少一个镜像中包括目标镜像的情况下,获得目标镜像对应的元数据和已获得目标镜像的至少一个层数据的容器工作节点的目标节点标识,并发送至第一容器工作节点;其中,目标镜像对应的元数据和目标节点标识是第一容器工作节点构建目标镜像的基础。
此外,在存储的至少一个镜像中不包括目标镜像的情况下,从镜像服务器中获得目标镜像对应的元数据以及目标镜像的未被获得的至少一个层数据;获得已获得目标镜像的至少一个层数据的容器工作节点的目标节点标识,并将目标镜像对应的元数据、目标镜像的未被获得的至少一个层数据和目标节点标识发送至第一容器工作节点;其中,目标镜像对应的元数据、目标镜像的未被获得的至少一个层数据和目标节点标识是第一容器工作节点构建目标镜像的基础;存储目标镜像对应的元数据以及获得目标镜像对应的层数据的第一容器工作节点的节点标识。
本申请实施例提供的容器镜像管理方法,镜像代理服务器可以向容器工作节点提供目标镜像的元数据和已获得目标镜像的至少一个层数据的容器工作节点的目标节点标识,由该容器工作节点基于目标镜像的元数据和目标节点标识构建目标镜像。由于容器工作节点位于内部网络,因此可以大大降低下载镜像的耗时,保证应用启动或者扩容的效果。另外,由于镜像之间有很多相同的层,这也可以实现镜像间层数据的共享,减少内存消耗。
基于上述实施例四公开的容器镜像管理方法,本申请实施例五还公开了一种容器镜像管理方法,还包括如下步骤:
向第一容器工作节点发送与目标镜像的至少一个层数据相关联的新的层数据。
本实施例中,为提高外部带宽的利用率,镜像代理服务器在空闲时刻可以主动向第一容器工作节点推送与目标镜像至少一个层数据相关联的新的层数据。为方便理解,本实施例中,继续以应用A为例:
容器工作节点1所构建的镜像1的层数据包括层数据1、层数据2和层数据3。镜像代理服务器可以基于用户预先关联或者学习统计得到的层数据3和层数据4的关联关系,在空闲时刻将层数据4主动推送至容器工作节点1。这就可以实现第一容器工作节点提前下载与层数据3相关联的层数据4,在后续构建层数据包括层数据4的其他镜像时减少下载镜像的耗时。
本申请实施例提供的容器镜像管理方法,可以实现第一容器工作节点预下载新的层数据,从而在后续构建层数据包括新的层数据的其他镜像时降低下载镜像的耗时,保证应用启动或者扩容的效果。
基于上述实施例四公开的容器镜像管理方法,本申请实施例六还公开了一种容器镜像管理方法,还包括如下步骤:
接收第一容器工作节点所上传的新镜像;存储新镜像,并向第一容器工作节点发送用于表征上传成功的通知。
本实施例中,第一容器工作节点可以响应用户操作,在现有镜像的基础上采用增加层数据或者减少层数据或者修改层数据等方式生成新镜像。第一容器工作节点可以将新镜像通过镜像代理服务器上传至镜像服务器,而在此过程中,镜像代理服务器在收到新镜像后可以向第一容器工作节点发送用于表征上传成功的通知,并在当前满足指定条件,比如空闲时刻,再比如存储的新镜像的数量超过数量阈值,再比如存储的新镜像的数据量超过数据量阈值时,将新镜像发送给镜像服务器。
可以理解的是,指定条件的内容可以由用户指定,上述举例内容仅为具体实现的一种方式,可以理解的是,其他未列举的方式也在本申请的保护范围内。
本申请实施例提供的容器镜像管理方法,可以实现新镜像上传,丰富镜像服务器中镜像的种类。
与上述容器镜像管理系统对应的,本申请实施例七还公开一种容器镜像管理方法,该方法应用于容器镜像管理系统中的第一容器工作节点,如图5所示,该方法包括如下步骤:
步骤S201:向镜像代理服务器发送用于下载目标镜像的第一请求。
步骤S202:接收镜像代理服务器基于第一请求所发送的目标镜像对应的元数据和已获得目标镜像的至少一个层数据的容器工作节点的目标节点标识。
步骤S203:从目标节点标识对应的第二容器工作节点中获得目标镜像的至少一个层数据。
步骤S204:至少基于目标镜像的至少一个层数据以及目标镜像的元数据构建目标镜像。
本申请实施例提供的容器镜像管理方法,第一容器工作节点可以向镜像代理服务器处获得目标镜像的元数据和已获得目标镜像的至少一个层数据的容器工作节点的目标节点标识,进而构建目标镜像。由于容器工作节点位于内部网络,因此可以大大降低下载镜像的耗时,保证应用启动或者扩容的效果。另外,由于镜像之间有很多相同的层,这也可以实现镜像间层数据的共享,减少内存消耗。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
为了描述的方便,描述以上系统或装置时以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
最后,还需要说明的是,在本文中,诸如第一、第二、第三和第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。