1.本发明涉及云计算技术领域,具体涉及一种虚拟机管理方法、装置、设备及存储介质。
背景技术:
2.随着云计算业务场景和业务规模的不断发展,云计算数据中心的规模越来越大,对云平台系统性能的要求越来越高。其中,计算模块(nova)作为云平台最重要的模块,一般包括应用程序编程接口(application programming interface,api)、计算(compute)、调度(scheduler)、conductor(管理)、数据库等子模块。
3.目前,计算模块(nova)中各个子模块之间需要依赖数据库和消息队列来进行通信,同时每个请求在执行时,计算子模块可能还需要跟其他外部模块,进行数据交互,也是通过消息队列进行。
4.但是,在虚拟机管理时,若采用上述计算模块(nova),会导致请求并发量升高,会导致大量消息堆积,降低了虚拟机管理效率。
技术实现要素:
5.有鉴于此,本发明实施例提供了一种虚拟机管理方法、装置、设备及存储介质,以解决在虚拟机管理时,若采用现有技术中的计算模块(nova),会导致请求并发量升高,会导致大量消息堆积,降低了虚拟机管理效率的问题。
6.根据第一方面,本发明实施例提供了虚拟机管理方法,包括:
7.应用程序编程接口api接收虚拟机管理请求,根据所述虚拟机管理请求生成对应的虚拟机管理任务,将所述虚拟机管理任务采用键值的方式存储到键值数据库;
8.应用程序引擎若从所述键值数据库监听到所述虚拟机管理任务时,根据所述设定的配置文件将所述虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,所述有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到所述键值数据库;
9.应用程序执行器若从所述键值数据库监听到所述有向图节点信息中需要自身执行的第一作业时,执行所述第一作业,得到第一执行结果,将所述第一执行结果采用键值的方式存储到所述键值数据库。
10.本技术实施方式中,在虚拟机管理时,使用应用程序引擎,将虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到键值数据库,这样对于执行器而言,并不关注自身执行的作业(job)具体属于哪个api请求,只关注引擎下发到自身的作业(job),可以并行的执行1个甚至多个任务(task)的作业(job),从而提高了虚拟机管理效率。
11.结合第一方面,在第一方面第一实施方式中,所述虚拟机管理请求包括包括虚拟机创建请求、虚拟机删除请求、虚拟机迁移请求、虚拟机疏散请求和虚拟机开关机请求中的
一项或多项。
12.本技术实施方式中,虚拟机管理请求可以包括一种管理请求,也可以包括多种管理请求,提高了虚拟机管理的实用性。
13.结合第一方面,在第一方面第二实施方式中,还包括:
14.所述应用程序引擎从所述键值数据库监听所述第一执行结果。
15.本技术实施方式中,应用程序引擎除了下发作业之外,还需要监听各个执行器的执行状态,进而保证了虚拟机管理的可靠性。
16.结合第一方面第二实施方式,在第一方面第三实施方式中,还包括:
17.若所述第一执行结果为执行成功,所述应用程序引擎将所述第一作业对应的状态数据更新为执行成功;
18.若所述第一执行结果为执行失败,所述应用程序引擎将所述第一作业对应的状态数据更新为执行失败。
19.本技术实施方式中,应用程序引擎更新第一作业对应的状态数据,这样可以让后续作业(job)可以使用这些状态数据,并且在调试时,可以通过这些状态数据对问题进行定位,提高了虚拟机管理的效率。
20.结合第一方面,在第一方面第四实施方式中,所述有向图包括多层节点;
21.所述将有向图节点信息采用键值的方式存储到所述键值数据库,包括:
22.所述应用程序引擎根据节点指向关系将所述多层节点中各层节点的节点信息采用键值的方式依次存储到所述键值数据库。
23.本技术实施方式中,应用程序引擎根据节点指向关系将各层节点的节点信息采用键值的方式依次存储到键值数据库,这样对于执行器而言,并不关注自身执行的作业(job)具体属于哪个api请求,只关注引擎下发到自身的作业(job),可以并行的执行1个甚至多个任务(task)的作业(job),从而提高了虚拟机管理效率。
24.结合第一方面第四实施方式,在第一方面第五实施方式中,所述多层节点包括第一层节点和第二层节点;
25.所述根据节点指向关系将所述多层节点中各层节点的节点信息采用键值的方式依次存储到所述键值数据库,包括:
26.所述应用程序引擎将所述有向图中的第一层节点信息采用键值的方式存储到所述键值数据库;
27.若所述第一层节点信息对应的第二执行结果为执行成功,所述应用程序引擎将所述有向图中的第二层节点信息采用键值的方式存储到所述键值数据库;
28.若所述第二执行结果为执行失败,所述应用程序引擎不再将所述第二层节点信息存储到所述键值数据库。
29.本技术实施方式中,只有执行成功时,才可以将下一层节点的节点信息采用键值的方式存储到键值数据库,从而提高了虚拟机管理的可靠性。
30.结合第一方面,在第一方面第六实施方式中,所述键值数据库为etcd数据库。
31.本技术实施方式中,采用etcd这种轻量级分布式键值(key-value)数据库进行虚拟机管理,降低了虚拟机管理的复杂度,实现简单,提高了虚拟机管理的效率。
32.根据第二方面,本发明实施例提供了一种虚拟机管理装置,包括:
33.应用程序编程接口api模块,用于接收虚拟机管理请求,根据所述虚拟机管理请求生成对应的虚拟机管理任务,将所述虚拟机管理任务采用键值的方式存储到键值数据库;
34.应用程序引擎模块,用于若从所述键值数据库监听到所述虚拟机管理任务时,根据所述设定的配置文件将所述虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,所述有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到所述键值数据库;
35.应用程序执行器模块,用于若从所述键值数据库监听到所述有向图节点信息中需要自身执行的第一作业时,执行所述第一作业,得到第一执行结果,将所述第一执行结果采用键值的方式存储到所述键值数据库。
36.结合第二方面,在第二方面第一实施方式中,所述虚拟机管理请求包括包括虚拟机创建请求、虚拟机删除请求、虚拟机迁移请求、虚拟机疏散请求和虚拟机开关机请求中的一项或多项。
37.结合第二方面,在第二方面第二实施方式中,应用程序引擎模块还用于:
38.所述应用程序引擎从所述键值数据库监听所述第一执行结果。
39.结合第二方面第二实施方式,在第二方面第三实施方式中,应用程序引擎模块还用于:
40.若所述第一执行结果为执行成功,所述应用程序引擎将所述第一作业对应的状态数据更新为执行成功;
41.若所述第一执行结果为执行失败,所述应用程序引擎将所述第一作业对应的状态数据更新为执行失败。
42.结合第二方面,在第二方面第四实施方式中,所述有向图包括多层节点;所述应用程序引擎模块还用于:
43.所述将有向图节点信息采用键值的方式存储到所述键值数据库,包括:
44.所述应用程序引擎根据节点指向关系将所述多层节点中各层节点的节点信息采用键值的方式依次存储到所述键值数据库。
45.结合第二方面第四实施方式,在第二方面第五实施方式中,所述多层节点包括第一层节点和第二层节点;所述应用程序引擎模块具体用于:
46.所述应用程序引擎将所述有向图中的第一层节点信息采用键值的方式存储到所述键值数据库;
47.若所述第一层节点信息对应的第二执行结果为执行成功,所述应用程序引擎将所述有向图中的第二层节点信息采用键值的方式存储到所述键值数据库;
48.若所述第二执行结果为执行失败,所述应用程序引擎不再将所述第二层节点信息存储到所述键值数据库。
49.结合第二方面,在第二方面第六实施方式中,所述键值数据库为etcd数据库。
50.根据第三方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的虚拟机管理方法。
51.根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读
存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的虚拟机管理方法。
附图说明
52.通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
53.图1示出了一种虚拟机管理方法的方法流程图。
54.图2示出了一种虚拟机管理方法的应用场景示意图。
55.图3示出了一种虚拟机管理方法的另一方法示意图。
56.图4示出了一种虚拟机管理装置的结构示意图。
57.图5示出了一种电子设备的结构示意图。
具体实施方式
58.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
59.图1示出了一种虚拟机管理方法的方法流程图,该虚拟机管理方法可以用于虚拟机管理的电子设备上,该电子设备可以位于宿主机。如图1所示,该虚拟机管理方法可以包括:
60.步骤101、api接收虚拟机管理请求,根据虚拟机管理请求生成对应的虚拟机管理任务,将虚拟机管理任务采用键值的方式存储到键值数据库(比如:etcd)。
61.具体地,如图2所示,api11接收虚拟机管理请求,根据虚拟机管理请求生成对应的虚拟机管理任务,将虚拟机管理任务采用键值的方式存储到键值数据库12。
62.api接收到用户的虚拟机管理请求命令之后,可以向etcd中写入一个key为/任务(task),value为一个结构体,包含:任务(task)状态(比如:创建),任务(task)名字为需要执行的具体任务(task)名字(比如:createinstance),另外还会包含一些执行此次任务(task)所必要的参数信息(比如:虚拟机的规格,镜像信息等)。
63.步骤102、应用程序引擎(engine)若从键值数据库监听到虚拟机管理任务时,根据设定的配置文件将虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到键值数据库。
64.具体地,如图2所示,引擎13从键值数据库12监听到虚拟机管理任务时,根据设定的配置文件将虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到键值数据库12。
65.其中,设定的配置文件可以指的是预先将所有的api请求按照固定格式写入的文件,这样便于应用程序引擎根据该配置文件将任务(task)拆分成一或多个作业(job),根据作业(job)间的依赖关系形成有向图,每个节点对应一个作业(job),根据节点指向关系对
作业(job)分批进行下发。
66.步骤103、应用程序执行器若从键值数据库监听到有向图节点信息中需要自身执行的第一作业时,执行第一作业,得到第一执行结果,将第一执行结果采用键值的方式存储到键值数据库。
67.具体地,如图2所示,调度(schduler)模块14若从键值数据库监听到有向图节点信息中需要自身执行的第一作业时,执行第一作业,得到第一执行结果,将第一执行结果采用键值的方式存储到键值数据库12。或
68.计算(compute)模块15若从键值数据库监听到有向图节点信息中需要自身执行的第一作业时,执行第一作业,得到第一执行结果,将第一执行结果采用键值的方式存储到键值数据库12。
69.其中,schduler是执行器,是task中job的具体实现者,负责进行调度来挑选出最合适的compute。需要执行scheduler的job会是task中的第一个job,scheduler会监听/job/scheduler这个key,挑选出具体符合条件的宿主机,并将相应的信息写入到etcd中。写入etcd是通过写key为/job/scheduler,value中包含了调度到的compute的信息,同时将job的状态改为success,表示job执行完成。
70.compute也是执行器,task中job的具体实现者,每个compute会监听/job/$computeid这个key,当有变化时,获取value值,当job状态为ready后,根据job的名字去调用相应的executor执行具体的工作。最后会根据执行结果,修改etcd中/job/$computeid这个key的value值,修改job的状态为success或者failed,以及执行完任务后其他需要返回的数据。compute只有etcd中/job为前缀的key的权限,其他key不可访问和修改,这样不需要conductor模块也可以保证系统的安全性。
71.值得说明的是,调度模块14和计算模块15均属于应用程序执行器。另外,从图2中可以看出:api11、键值数据库12(即etcd)、引擎13、以及调度模块14和计算模块15均与键值数据库12建立通信连接,各个模块间通过各自监听(watch)etcd中特定key,分析获取到的value值来进行通信以及执行相应的任务。
72.比如:api11将这个虚拟机管理请求作为一个task进行发送,引擎(engine)13根据配置文件将这个task拆分成一或多个job,根据job间的依赖关系形成有向图,每个节点对应一个job,先下发层数为1的节点们的jobs,同时会进行监听job的执行情况,当监听到有job执行成功后,将此job节点指向的节点jobs进行下发,当再次监听到有job执行成功后,再下发这个节点指向的jobs
…
这样task中没有依赖关系的job,会在执行器中并行执行,存在依赖关系的job会串行执行。各个执行器只需要实时监听各自专属的key,根据获取的value值不同便可知有哪种job将要执行,做出相应的执行动作,并将执行结果写回etcd中。
73.本技术实施例中,在虚拟机管理时,使用应用程序引擎,将虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到键值数据库,这样对于执行器而言,并不关注自身执行的作业(job)具体属于哪个api请求,只关注引擎下发到自身的作业(job),可以并行的执行1个甚至多个任务(task)的作业(job),从而提高了虚拟机管理效率。
74.在一个可选的实施例中,虚拟机管理请求包括包括虚拟机创建请求、虚拟机删除请求、虚拟机迁移请求、虚拟机疏散请求和虚拟机开关机请求中的一项或多项。
75.具体地,虚拟机管理请求可以只包括一种管理请求,比如:虚拟机创建请求;也可以包括多种管理请求,比如:针对第一虚拟机的虚拟机迁移请求和针对第二虚拟机的虚拟机疏散请求等。
76.本技术实施例中,虚拟机管理请求可以包括一种管理请求,也可以包括多种管理请求,提高了虚拟机管理的实用性。
77.在一个可选的实施例中,在执行步骤103之后,该虚拟机管理方法还可以包括:
78.应用程序引擎从键值数据库监听第一执行结果。
79.具体地,如图2所示,引擎13从键值数据库12监听调度模块14或计算模块15得到的第一执行结果。
80.本技术实施例中,应用程序引擎除了下发作业之外,还需要监听各个执行器的执行状态,进而保证了虚拟机管理的可靠性。
81.在一个可选的实施例中,该虚拟机管理方法还可以包括:
82.若第一执行结果为执行成功,应用程序引擎将第一作业对应的状态数据更新为执行成功;
83.若第一执行结果为执行失败,应用程序引擎将第一作业对应的状态数据更新为执行失败。
84.具体地,如图2所示,若第一执行结果为执行成功,引擎13将第一作业对应的状态数据更新为执行成功;若第一执行结果为执行失败,引擎13将第一作业对应的状态数据更新为执行失败。
85.比如:引擎主要包含第一子模块(task_handler),第二子模块(job_handler)和第三子模块(processor)三部分。
86.task_handler主要是负责对/task这个key进行监听(watch),当发现有更新,会分析其value值,当task的状态为creat时,根据配置文件对task的job根据依赖关系拆解形成有向图,并按照有向图的各个节点关系将job进行下发。job下发的过程具体为:如果是需要选择宿主机的task,那么约定配置文件中scheduler会作为这个task的第一个job,task_handler向etcd中写入一个key为/job/scheduler,value为compute需要满足的条件,当scheduler监听到这个job请求执行并返回结果后,job_handler会获取得到的computeid。如果是不需要调度的task,那么将会从task的value信息中获取需要操作的computeid。之后task_handler会根据每一个job需要执行的compute的id,向etcd依次写入一个key为/job/$computeid,value是一个结构体,包含:job的状态(此时为ready),job名字为需要执行的具体job名字,修改task状态为running。
87.job_hander主要是负责对compute(计算)和scheduler(调度)的执行结果进行监听,并通知task_handler对下一批任务进行下发。具体为监听/job这个前缀的key,发现有更新时会分析其value值,根据job的状态不同会进行相应的处理,如果job状态为success的话,会调用这个job对应的处理器(processor)来进行对etcd中相关数据的更新。
88.本技术实施例中,应用程序引擎更新第一作业对应的状态数据,这样可以让后续作业(job)可以使用这些状态数据,并且在调试时,可以通过这些状态数据对问题进行定位,提高了虚拟机管理的效率。
89.在一个可选的实施例中,上述步骤102中构建的有向图可以包括多层节点;在执行
步骤102中将有向图节点信息采用键值的方式存储到键值数据库,可以包括:
90.应用程序引擎根据节点指向关系将各层节点的节点信息采用键值的方式依次存储到键值数据库。
91.具体地,如图2所示,引擎13根据节点指向关系将各层节点的节点信息采用键值的方式依次(分批次)存储到键值数据库12。
92.比如:如图3中的有向图,包括:作业1、作业2、作业3、作业4、和作业5。其中,第一层节点包括作业1,作为第一批下发;第二层节点包括作业2、作业3和作业4,作为第二批下发;第一层节点包括作业5,作为第三批下发。
93.本技术实施例中,应用程序引擎根据节点指向关系将各层节点的节点信息采用键值的方式依次存储到键值数据库,这样对于执行器而言,并不关注自身执行的作业(job)具体属于哪个api请求,只关注引擎下发到自身的作业(job),可以并行的执行1个甚至多个任务(task)的作业(job),从而提高了虚拟机管理效率。
94.在一个可选的实施例中,多层节点包括第一层节点和第二层节点;在根据节点指向关系将各层节点的节点信息采用键值的方式依次存储到键值数据库时,可以采用但不限于以下实现形式:
95.应用程序引擎将有向图中的第一层节点信息采用键值的方式存储到键值数据库;
96.若第一层节点信息对应的第二执行结果为执行成功,应用程序引擎将有向图中的第二层节点信息采用键值的方式存储到键值数据库;
97.若第二执行结果为执行失败,应用程序引擎不再将第二层节点信息存储到键值数据库。
98.具体地,在多层节点包括第一层节点和第二层节点时,若第一层节点的执行结果为执行成功,则可以继续下发第二层节点信息;若第一层节点的执行结果为执行失败,则不再下发信息。与此类似,若多层节点还包括第三层节点,只有第一层节点和第二层节点的执行结果均为执行成功时,才可以继续下发第三层节点信息。
99.比如:图3中的有向图,第一层节点信息可以为作业1,第二层节点信息可以为作业2、作业3和作业4,第三层节点信息可以为作业5。若作业1的执行结果为执行成功,则可以继续下发作业2、作业3和作业4;若作业1的执行结果为执行失败,则不再下发作业2、作业3和作业4;针对作业5,只有作业1的执行结果和作业2、作业3和作业4的执行结果均为执行成功时,才可以继续下发作业5。
100.本技术实施例中,只有执行成功时,才可以将下一层节点的节点信息采用键值的方式存储到键值数据库,从而提高了虚拟机管理的可靠性。
101.在一个可选的实施例中,上述各个实施例中涉及到的键值数据库可以为etcd,该etcd是一种轻量级分布式键值(key-value)数据库。
102.本技术实施例中,采用etcd这种轻量级分布式键值(key-value)数据库进行虚拟机管理,降低了虚拟机管理的复杂度,实现简单,提高了虚拟机管理的效率。
103.下面通过一个以创建虚拟机为例来说明上述虚拟机管理的实现过程。
104.1)准备配置文件,格式为yaml。其中第一级的名字(name)为task的名字,jobs下面为这个task所包含的jobs,依赖关系通过dependencies来表示,name为在执行器中要执行的任务的名字,processor为在engine中当job_handler监听到job执行成功后会去调用执
行的processor的名字。
[0105][0106]
2)api模块收到用户的虚拟机创建请求之后,随机生成一个taskid,之后向etcd中写入key为/task/$taskid,value为[status:create,data:[name:xxx,image:xxxx,flavor:xxx,network:xxx等]]。
[0107]
3)engine模块监听到/task这个前缀的key有更新,检查status为create,会根据配置文件将这个task的jobs形成有向图,比如这个创建虚拟机的task为scheduler-》getimagemeta-》allocatenetwork
…
然后随机生成一个jobid,向etcd中写入key为/job/scheduler/$jobid,value为[status:ready,data:[flavor:xxx,tag:xxx等]],同时将task的status改为running。
[0108]
4)scheduler监听到这个/job/scheduler前缀的key有更新,scheduler检查status为ready,就会按照data中的各个信息通过调度算法挑选一个合适的compute,etcd中写入key为/job/scheduler,value为[status:success,data:[id:$id等]]。
[0109]
5)engine模块监听/job/scheduler前缀的key,监听到这个status为success的job,获取到$id等信息。根据有向图节点关系,下发getimagemeta这个job,先随机生成一个jobid,向etcd中写入key为/job/$id/$jobid,value为[status:ready,data[name:getimagemeta,image:xxx等]]。
[0110]
6)各个compute模块监听前缀/job/自己的id,当对应的compute监听到value值有更新,检查status为ready,会去根据name去执行相应的程序。执行完之后,向etcd中写入key为/job/自己id/$jobid,value为[status:success,data[后续job需要的数据]]。
[0111]
7)engine中监听/job为前缀的key,当发现有value值更新,并且状态为success
时,将调用这个job对应的processor,将数据进行更新,让后续job可以使用这些数据。同时,engine会下发一批job,这里为allocatenetwork,下发的方式同第5步,然后重复6-7步,直至完成所有的job,最后更新task的status为end,如果上述步骤中哪步失败了,将该job的status改为failed,后续job不再执行,同时将所属task的状态改为failed。
[0112]
在调试时,首先查看task信息列表,找到失败的task,然后查看此task的各个job的状态,找到状态为failed的job,再查看它返回的信息,同时也可以根据taskid、jobid,去宿主机上检索调试信息,可快速对问题进行定位。
[0113]
8)在3000计算节点的规模下,并发1、100、500的进行创建/删除虚拟机的请求,进行其系统的稳定性和测试例执行时间测试。已保证在大规模测试环境下能够稳定的进行并发测试,并且创建/删除虚拟机的时间系数比之前旧方案提升数倍,并发数越多提升越明显.具体数据如表1所示。
[0114]
表1
[0115][0116]
由上述实施例可见,本发明能够实现的技术效果可以包括:
[0117]
(1)为了避免大规模集群、高并发下会产生消息堆积带来的性能下降,本专利方案中抛弃了传统数据库和消息队列机制,各模块间通信改为各自模块对etcd的watch机制,并且使用etcd替代传统数据库也使云平台系统更为轻量级。
[0118]
(2)提高了整个云平台系统的工作效率:本方案引入了engine模块,api的请求会在engine中根据job间的依赖关系生成有向图,根据有向图的节点关系分批对job进行下发。对于执行器而言,并不关注自身执行的job具体属于哪个api请求,只关注engine下发到自身的job,可以并行的执行1个甚至多个task的jobs。
[0119]
(3)提高了运维人员工作效率:由于api请求被分解到job粒度,调试工具可以获取到task中各job的执行情况和返回信息,在调试时可以直接定位到具体失败的job进行分析。
[0120]
图4示出了一种虚拟机管理装置的结构示意图。该虚拟机管理装置可以为用于虚
拟机管理的设备,比如:宿主机。如图4所示,该虚拟机管理装置可以包括:
[0121]
应用程序编程接口api模块41,用于接收虚拟机管理请求,根据所述虚拟机管理请求生成对应的虚拟机管理任务,将所述虚拟机管理任务采用键值的方式存储到键值数据库44;
[0122]
应用程序引擎模块42,用于若从所述键值数据库监听到所述虚拟机管理任务时,根据所述设定的配置文件将所述虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,所述有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到所述键值数据库44;
[0123]
应用程序执行器模块43,用于若从所述键值数据库监听到所述有向图节点信息中需要自身执行的第一作业时,执行所述第一作业,得到第一执行结果,将所述第一执行结果采用键值的方式存储到所述键值数据库44。
[0124]
在一种可能的实现方式中,所述虚拟机管理请求包括包括虚拟机创建请求、虚拟机删除请求、虚拟机迁移请求、虚拟机疏散请求和虚拟机开关机请求中的一项或多项。
[0125]
在一种可能的实现方式中,应用程序引擎模块42还用于:
[0126]
所述应用程序引擎从所述键值数据库监听所述第一执行结果。
[0127]
在一种可能的实现方式中,应用程序引擎模块42还用于:
[0128]
若所述第一执行结果为执行成功,所述应用程序引擎将所述第一作业对应的状态数据更新为执行成功;
[0129]
若所述第一执行结果为执行失败,所述应用程序引擎将所述第一作业对应的状态数据更新为执行失败。
[0130]
在一种可能的实现方式中,所述有向图包括多层节点;所述应用程序引擎模块42还用于:
[0131]
所述将有向图节点信息采用键值的方式存储到所述键值数据库,包括:
[0132]
所述应用程序引擎根据节点指向关系将所述多层节点中各层节点的节点信息采用键值的方式依次存储到所述键值数据库。
[0133]
在一种可能的实现方式中,所述多层节点包括第一层节点和第二层节点;所述应用程序引擎模块42具体用于:
[0134]
所述应用程序引擎将所述有向图中的第一层节点信息采用键值的方式存储到所述键值数据库;
[0135]
若所述第一层节点信息对应的第二执行结果为执行成功,所述应用程序引擎将所述有向图中的第二层节点信息采用键值的方式存储到所述键值数据库;
[0136]
若所述第二执行结果为执行失败,所述应用程序引擎不再将所述第二层节点信息存储到所述键值数据库。
[0137]
在一种可能的实现方式中,所述键值数据库为etcd数据库。
[0138]
在此需要说明的是,本技术实施例提供的虚拟机管理装置,能够实现上述方法实施例所实现的所有方法步骤,且能够达到相同的技术效果,在此不再对本实施例中与方法实施例相同的部分及有益效果进行具体赘述。
[0139]
图5示出了一种电子设备的结构示意图。如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(communications interface)520、存储器(memory)530和通信
总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行虚拟机管理方法,该方法包括:
[0140]
应用程序编程接口api接收虚拟机管理请求,根据所述虚拟机管理请求生成对应的虚拟机管理任务,将所述虚拟机管理任务采用键值的方式存储到键值数据库;
[0141]
应用程序引擎若从所述键值数据库监听到所述虚拟机管理任务时,根据所述设定的配置文件将所述虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,所述有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到所述键值数据库;
[0142]
应用程序执行器若从所述键值数据库监听到所述有向图节点信息中需要自身执行的第一作业时,执行所述第一作业,得到第一执行结果,将所述第一执行结果采用键值的方式存储到所述键值数据库。
[0143]
定所述热迁移预估结果为适合发起虚拟机管理,则发起虚拟机管理。
[0144]
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0145]
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的虚拟机管理方法,该方法包括:
[0146]
应用程序编程接口api接收虚拟机管理请求,根据所述虚拟机管理请求生成对应的虚拟机管理任务,将所述虚拟机管理任务采用键值的方式存储到键值数据库;
[0147]
应用程序引擎若从所述键值数据库监听到所述虚拟机管理任务时,根据所述设定的配置文件将所述虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,所述有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式存储到所述键值数据库;
[0148]
应用程序执行器若从所述键值数据库监听到所述有向图节点信息中需要自身执行的第一作业时,执行所述第一作业,得到第一执行结果,将所述第一执行结果采用键值的方式存储到所述键值数据库。
[0149]
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的虚拟机管理方法,该方法包括:
[0150]
应用程序编程接口api接收虚拟机管理请求,根据所述虚拟机管理请求生成对应的虚拟机管理任务,将所述虚拟机管理任务采用键值的方式存储到键值数据库;
[0151]
应用程序引擎若从所述键值数据库监听到所述虚拟机管理任务时,根据所述设定的配置文件将所述虚拟机管理任务拆分成一个或多个作业,根据各个作业之间的依赖关系构建有向图,所述有向图中的每个节点对应一个作业,将有向图节点信息采用键值的方式
存储到所述键值数据库;
[0152]
应用程序执行器若从所述键值数据库监听到所述有向图节点信息中需要自身执行的第一作业时,执行所述第一作业,得到第一执行结果,将所述第一执行结果采用键值的方式存储到所述键值数据库。
[0153]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0154]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0155]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。