一种虚拟机信息同步方法及计算机可读介质转让专利

申请号 : CN202211388971.9

文献号 : CN115640100B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 请求不公布姓名

申请人 : 安超云软件有限公司

摘要 :

本发明属于云计算技术领域,并揭示了一种虚拟机信息同步方法及计算机可读介质,虚拟机信息同步方法包括:转发虚拟化层操作虚拟机所形成的事件信息至消息队列,并由云平台层中的适配层与拟化层中的资源管理器共享消息队列;由云平台层监听消息队列中的事件信息,并在接收到事件信息后,将事件信息回调至资源层,适配层对事件信息执行转换处理所形成的对象信息发送至通知层,并由通知层将对象信息通知视图层,并予以可视化展示。本发明实现了对虚拟机信息的实时同步,降低了对虚拟机信息同步操作过程中所消耗的资源,并避免了对虚拟机的源代码所造成代码入侵的技术问题。

权利要求 :

1.一种虚拟机信息同步方法,其特征在于,包括:

转发虚拟化层操作虚拟机所形成的事件信息至消息队列,并由云平台层中的适配层与所述虚拟化层中的资源管理器共享所述消息队列,所述云平台层包括:视图层、通知层、网关层、资源层与适配层,所述虚拟化层包括:API服务、调度器、资源管理器及纳管虚拟机的虚拟机监视器;

由云平台层监听所述消息队列中的事件信息,并在接收到事件信息后,将所述事件信息回调至资源层,将所述适配层对事件信息执行转换处理所形成的对象信息发送至通知层,并由所述通知层将所述对象信息通知视图层,并予以可视化展示。

2.根据权利要求1所述的虚拟机信息同步方法,其特征在于,所述适配层对事件信息执行转换处理包括:由所述适配层对事件信息通过适配层中内置的消息转换器将事件信息转换为对象信息。

3.根据权利要求1所述的虚拟机信息同步方法,其特征在于,所述适配层以被动方式监听消息队列中的事件信息,并将所述事件信息保存至第一存储装置,所述事件信息以消息队列的形式保存于第二存储装置,所述第一存储装置与第二存储装置包括数据库或者非易失性存储器件,所述第一存储装置与第二存储装置逻辑上独立于虚拟化层。

4.根据权利要求3所述的虚拟机信息同步方法,其特征在于,所述第一存储装置与第二存储装置部署于云平台层,或者,所述第一存储装置与第二存储装置部署于独立于云平台层及虚拟化层的第三方存储装置,所述第三方存储装置与云平台层及虚拟化层建立会话。

5.根据权利要求1所述的虚拟机信息同步方法,其特征在于,

所述调度器监听消息队列所保存的事件信息,并确定事件信息所关联的计算节点和/或存储节点,并将与所述事件信息关联的计算节点和/或存储节点发送至消息队列,所述资源管理器自消息队列获取事件信息,并调用资源管理器对虚拟机执行对应操作,并将操作虚拟机所形成的事件信息反馈至消息队列;

所述资源管理器自所述消息队列调用事件信息,以对虚拟机执行操作后获取所述操作所生成的操作结果,并将所述操作结果发送至消息队列,所述适配层自所述消息队列获取操作结果,并将所述操作结果在第一存储装置中查询所述虚拟机在事件信息之前的历史数据,并确定是否对第一存储装置中所包含的虚拟机信息予以更新。

6.根据权利要求5所述的虚拟机信息同步方法,其特征在于,所述虚拟机信息同步方法还包括:通过所述适配层对所述消息队列执行初始化,所述适配层以观察者模式监听初始化后的消息队列中因事件信息发生变动所产生的对象信息,所述适配层连接消息队列并转发已发生变动的对象信息所对应的事件信息至资源层。

7.根据权利要求5所述的虚拟机信息同步方法,其特征在于,所述网关层接收用户对虚拟机发起的访问请求,并对所述访问请求予以验证后分发至资源层;所述API服务转发适配层所传入访问请求至消息队列;云平台层通过命令行或者Dashboard对事件信息关联虚拟机的资源执行操作,以通过对关联虚拟机的资源执行操作形成所述事件信息。

8.根据权利要求7所述的虚拟机信息同步方法,其特征在于,由云平台层监听消息队列,并在所述消息队列收到事件信息时,由云平台层将消息队列收到事件信息转发至资源层,所述资源层将事件信息保存至第一存储装置后,在通知层与视图层之间建立websocket双向连接,以由视图层可视化展现写入消息队列所保存的事件信息。

9.根据权利要求8所述的虚拟机信息同步方法,其特征在于,由视图层可视化展现写入消息队列所保存的事件信息之后,还包括:视图层刷新包含可视化页面信息。

10.根据权利要求1所述的虚拟机信息同步方法,其特征在于,还包括:

通过部署于云平台层中的适配层建立通过虚拟化层回调与监听所述消息队列中发生变动的消息的操作,所述适配层连接消息队列并转发消息变动事件至资源层。

11.根据权利要求5所述的虚拟机信息同步方法,其特征在于,所述适配层形成并维护一个主线程及由主线程管理的线程池,并在任意时刻中线程池内只运行一个子线程,并判断消息转换器所生成的对象信息是否属于虚拟机操作事件,若否,丢弃对象信息,若是,缓存对象信息至待处理事件队列。

12.根据权利要求11所述的虚拟机信息同步方法,其特征在于,所述消息队列形成待处理事件队列,并在缓存对象信息之后,还包括:判断所述对象信息所对应的虚拟机在第一存储装置中保存的事件信息所含的关键信息是否相同,若是,从待处理事件队列中剔除具有相同关键信息的事件信息并删除所述事件信息,若否,提取当前子线程所对应的事件信息与待处理事件队列中所保存的事件信息所形成的差异事件信息,以将所述差异事件信息更新到第一存储装置。

13.根据权利要求12所述的虚拟机信息同步方法,其特征在于,所述第一存储装置部署被设置失败次数阈值的失败计数器;

所述虚拟机信息同步方法还包括:判断将所述差异事件信息更新到第一存储装置是否成功,若是,执行线程池内的下一个子线程,若否,判断差异事件信息更新到第一存储装置的失败次数是否大于或者等于失败次数阈值,若是,结束将所述差异事件信息更新到第一存储装置的更新操作,若否,再次执行将所述差异事件信息更新到第一存储装置的更新操作。

14.根据权利要求5所述的虚拟机信息同步方法,其特征在于,所述虚拟化层部署与资源管理器建立会话的消息队列交换机,所述消息队列由所述适配层创建并被绑定至所述消息队列交换机,所述消息队列交换机与消息队列通过支持正则表示的绑定规则予以相互绑定;所述消息队列交换机根据访问请求所关联的虚拟机所形成的路由信息,将访问请求所对应的虚拟机因执行操作虚拟机所形成的事件信息通过所述路由信息转发至消息队列。

15.一种计算机可读介质,其特征在于,所述计算机可读介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行如权利要求1至14中任一项所述的虚拟机信息同步方法中的步骤。

说明书 :

一种虚拟机信息同步方法及计算机可读介质

技术领域

[0001] 本发明涉及云计算技术领域,尤其涉及一种虚拟机信息同步方法及计算机可读介质。

背景技术

[0002] 在云平台、数据中心及云操作系统的开发或者使用场景中,对虚拟机信息执行同步处理是非常重要的环节。基于存储、虚拟机运行、网络等业务逻辑需要虚拟机在执行各指令或者事务中实现前端与后端之间的信息同步。例如,逻辑上作为前端的用户界面(或者后台管理界面)与逻辑上作为后端的虚拟机或者为虚拟机配置的数据盘或者连接虚拟机的数据库之间的信息存在不一致的情形。管理员在后台管理界面对虚拟机的配置或者接口等配置予以修改,用户在用户界面中所感知的虚拟机信息可能发生变更,从而导致前端与后端之间的虚拟机信息发生差异。
[0003] 为消除前端与后端之间的消息差异,可采用自动定时同步、手动同步或者在业务逻辑中嵌入同步查询底层信息逻辑予以消除前端与后端之间的消息差异。采用自动定时同步的方法,如果同步周期过短,会造成虚拟机信息同步过程消耗资源过大的问题,如果同步周期过长,则也会造成虚拟机信息同步不及时的问题。采用手动同步的方法,存在对虚拟机信息同步过程繁琐的缺陷,并可能导致手动配置过程中配置错误的问题。如果在业务逻辑中嵌入同步查询底层信息逻辑的方法,会导致对虚拟机的业务逻辑及代码造成代码入侵化的问题。因此,现有技术中的上述三种虚拟机信息同步方式均在诸多技术缺陷。
[0004] 有鉴于此,有必要对现有技术中的虚拟机信息同步的技术予以改进,以解决上述问题。

发明内容

[0005] 本发明的目的在于揭示一种虚拟机信息同步方法及计算机可读介质,用以实现对云平台中逻辑上位于底层的虚拟机与逻辑上位于上层的数据库之间信息予以实时同步,降低对虚拟机信息同步所消耗资源,在降低对虚拟机的源代码造成入侵的同时提高虚拟机信息同步效率。
[0006] 为实现上述目的之一,本发明提供了一种虚拟机信息同步方法,包括:
[0007] 转发虚拟化层操作虚拟机所形成的事件信息至消息队列,并由云平台层中的适配层与所述拟化层中的资源管理器共享所述消息队列;
[0008] 由云平台层监听所述消息队列中的事件信息,并在接收到事件信息后,将所述事件信息回调至资源层,所述适配层对事件信息执行转换处理所形成的对象信息发送至通知层,并由所述通知层将所述对象信息通知视图层,并予以可视化展示。
[0009] 作为本发明的进一步改进,所述适配层对事件信息执行转换处理包括:由所述适配层对事件信息通过适配层中内置的消息转换器将事件信息转换为对象信息。
[0010] 作为本发明的进一步改进,所述适配层以被动方式监听消息队列中的事件信息,并将所述事件信息保存至第一存储装置,所述事件信息以消息队列的形式保存于第二存储装置,所述第一存储装置与第二存储装置包括数据库或者非易失性存储器件,所述第一存储装置与第二存储装置逻辑上独立于虚拟化层。
[0011] 作为本发明的进一步改进,所述第一存储装置与第二存储装置部署于云平台层,或者,所述第一存储装置与第二存储装置部署于独立于云平台层及虚拟化层的第三方存储装置,所述第三方存储装置与云平台层及虚拟化层建立会话。
[0012] 作为本发明的进一步改进,所述云平台层包括:视图层、通知层、网关层、资源层与适配层,所述虚拟化层包括:API服务、调度器、资源管理器及纳管虚拟机的虚拟机监视器;
[0013] 所述调度器监听消息队列所保存的事件信息,并确定事件信息所关联的计算节点和/或存储节点,并将与所述事件信息关联的计算节点和/或存储节点发送至消息队列,所述资源管理器自消息队列获取事件信息,并调用资源管理器对虚拟机执行对应操作,并将操作虚拟机所形成的事件信息反馈至消息队列;
[0014] 所述资源管理器自所述消息队列调用事件信息,以对虚拟机执行操作后获取所述操作所生成的操作结果,并将所述操作结果发送至消息队列,所述适配层自所述消息队列获取操作结果,并将所述操作结果在第一存储装置中查询所述虚拟机在事件信息之前的历史数据,并确定是否对第一存储装置中所包含的虚拟机信息予以更新。
[0015] 作为本发明的进一步改进,所述虚拟机信息同步方法还包括:通过所述适配层对所述消息队列执行初始化,所述适配层以观察者模式监听初始化后的消息队列中因事件信息发生变动所产生的对象信息,所述适配层连接消息队列并转发已发生变动的对象信息所对应的事件信息至资源层。
[0016] 作为本发明的进一步改进,所述网关层接收用户对虚拟机发起的访问请求,并对所述访问请求予以验证后分发至资源层;所述API服务转发适配层所传入访问请求至消息队列;云平台层通过命令行或者Dashboard对事件信息关联虚拟机的资源执行操作,以通过对关联虚拟机的资源执行操作形成所述事件信息。
[0017] 作为本发明的进一步改进,由云平台层监听消息队列,并在所述消息队列收到事件信息时,由云平台层将消息队列收到事件信息转发至资源层,所述资源层将事件信息保存至第一存储装置后,在通知层与视图层之间建立websocket双向连接,以由视图层可视化展现写入消息队列所保存的事件信息。
[0018] 作为本发明的进一步改进,由视图层可视化展现写入消息队列所保存的事件信息之后,还包括:视图层刷新包含可视化页面信息。
[0019] 作为本发明的进一步改进,还包括:
[0020] 通过部署于云平台层中的适配层建立通过虚拟化层回调与监听所述消息队列中发生变动的消息的操作,所述适配层连接消息队列并转发消息变动事件至资源层。
[0021] 作为本发明的进一步改进,所述适配层形成并维护一个主线程及由主线程管理的线程池,并在任意时刻中线程池内只运行一个子线程,并判断消息转换器所生成的对象信息是否属于虚拟机操作事件,若否,丢弃对象信息,若是,缓存对象信息至待处理事件队列。
[0022] 作为本发明的进一步改进,所述消息队列形成待处理事件队列,并在缓存对象信息之后,还包括:
[0023] 判断所述对象信息所对应的虚拟机在第一存储装置中保存的事件信息所含的关键信息是否相同,若是,从待处理事件队列中剔除具有相同关键信息的事件信息并删除所述事件信息,若否,提取当前子线程所对应的事件信息与待处理事件队列中所保存的事件信息所形成的差异事件信息,以将所述差异事件信息更新到第一存储装置。
[0024] 作为本发明的进一步改进,所述第一存储装置部署被设置失败次数阈值的失败计数器;
[0025] 所述虚拟机信息同步方法还包括:判断将所述差异事件信息更新到第一存储装置是否成功,若是,执行线程池内的下一个子线程,若否,判断差异事件信息更新到第一存储装置的失败次数是否大于或者等于失败次数阈值,若是,结束将所述差异事件信息更新到第一存储装置的更新操作,若否,再次执行将所述差异事件信息更新到第一存储装置的更新操作。
[0026] 作为本发明的进一步改进,所述虚拟化层部署与资源管理器建立会话的消息队列交换机,所述消息队列由所述适配层创建并被绑定至所述消息队列交换机,所述消息队列交换机与消息队列通过支持正则表示的绑定规则予以相互绑定;所述消息队列交换机根据访问请求所关联的虚拟机所形成的路由信息,将访问请求所对应的虚拟机因执行操作虚拟机所形成的事件信息通过所述路由信息转发至消息队列。
[0027] 基于相同发明思想,本发明还揭示了一种计算机可读介质,所述计算机可读介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行如上述任一项发明创造所揭示的虚拟机信息同步方法中的步骤。
[0028] 与现有技术相比,本发明的有益效果是:
[0029] 在本申请中,由于云平台层中的适配层与所述拟化层中的资源管理器共享消息队列,从而使得无论是从云平台层对虚拟机执行操作还是通过虚拟化层对虚拟机执行操作,云平台层均会在瞬间实现云平台层与虚拟化层之间的实现对虚拟机信息的同步操作,从而使得用户或者管理员在任意时刻从云平台层所纳管的虚拟机信息均与真实的虚拟机信息保持实时同步;同时,本申请通过避免使用定时同步服务或者管理员在云平台层以手动方式同步虚拟机信息或者在业务逻辑中嵌入同步查询底层信息逻辑的技术手段,既降低了对虚拟机信息同步操作过程中所消耗的资源,还避免了对虚拟机的源代码所造成代码入侵的技术问题。

附图说明

[0030] 图1为本发明一种虚拟机信息同步方法的整体流程图。
[0031] 图2为虚拟机信息同步方法所包含的消息实时同步机制示意图。
[0032] 图3为本发明一种虚拟机信息同步方法的具体流程图。
[0033] 图4为云平台层与虚拟化层共享消息队列的拓扑图。
[0034] 图5为第一存储装置与第二存储装置部署于独立于云平台层及虚拟化层的第三方存储装置的拓扑图;
[0035] 图6为虚拟机执行操作虚拟机事件所导致虚拟机信息发生变动后被适配层所监听并回调至资源层的详细流程图。
[0036] 图7为本发明一种计算机可读介质的拓扑图。

具体实施方式

[0037] 下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。
[0038] 在详细阐述本申请各个实施例之前,对本申请各个实施例中所涉及的技术术语予以简要阐述。
[0039] 术语“消息队列”:在消息的传输过程中保存消息的容器。“消息”是在两台以上的计算机或者具有计算机功能的装置之间传送的数据单位。消息可包括文本、字符串或者对象。
[0040] 术语“消息队列管理器”:在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递消息。本申请中的消息队列管理器可选自RabbitMQ。
[0041] 术语“队列”:一种数据结构,例如FIFO。
[0042] 术语“线程”:是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,多线程程序设计的好处是会提高了程序的执行效率或吞吐率。
[0043] 术语“线程池”:一种线程使用模式。线程过多会带来创建、调度、删除的开销,进而影响性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。
[0044] 需要说明的是,当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。在详细阐述本申请所含技术方案及发明思想之前,对本申请所涉及的部分术语或者缩写所指技术含义予以简述或者定义。除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。
[0045] 以下通过若干实施例对本发明具体实现过程予以范例性阐述。
[0046] 实施例一:
[0047] 首先,本申请揭示了一种虚拟机信息同步方法的一种具体实施方式。
[0048] 参图1所示,一种虚拟机信息同步方法,包括如下步骤S1与步骤S2。该虚拟机信息同步方法运行于如图2所示出的云平台中。云平台包括云平台层10、虚拟化层20、第一存储装置10、第二存储装置20及虚拟化层20所纳管的物理层(未示出)。物理层中部署物理机等物理资源。物理资源通过虚拟化层20的虚拟化技术形成虚拟资源,并通过虚拟资源封装呈虚拟机VM,应用通过虚拟机VM所承载。
[0049] 本实施例所揭示的一种虚拟机信息同步方法旨在对虚拟机执行的各种操作所形成的虚拟机信息在云平台层10与虚拟化层20之间实现同步。云平台层10通过微服务架构构建而成,并可供用户或者管理员通过视图层101查看并操作资源。视图层101可为Web页面,并嵌布形成于被用户或者管理员操控的终端设备(未示出,并可为PC)中。本申请以用户为例予以示范性阐述。用户向云平台层10发起各种虚拟机操作请求,虚拟机VM基于前述操作请求形成事件信息,并通过云平台层10与虚拟化层20对虚拟机VM执行诸如创建、挂起、迁移、删除等虚拟机操作,从而通过虚拟化层20实现因创建、挂起、迁移、删除等虚拟机操作所产生的事件信息,并最终由云平台层10向用户进行可视化展现,从而被用户所感知。
[0050] 步骤S1、转发虚拟化层20操作虚拟机所形成的事件信息至消息队列321,并由云平台层10中的适配层105与拟化层20中的资源管理器203共享消息队列321。在本实施例中,适配层105与资源管理器203共享消息队列321,使得基于对虚拟机发起的虚拟机操作请求所导致的资源变动信息得以实时同步。
[0051] 结合图2所示,云平台层10包括:视图层101、通知层102、网关层103、资源层104与适配层105,虚拟化层20包括:API服务201、调度器202、资源管理器203及纳管虚拟机VM的虚拟机监视器204,虚拟机监视器204可为Hypervisor,Hypervisor运行在基础物理服务器和操作系统之间的中间软件层,并包括VMware ESX Servie、Citrix XenServer和Microsoft Hyper‑V。用户通过网络与视图层101建立会话,并通过视图层101向云平台层10下发各种虚拟机操作请求。视图层101与通知层102及网关层103建立会话。视图层101为用户提供了以可视化方式查看并操作虚拟机资源,并可视化展现虚拟机信息。网关层103负责接收用户下云平台层10下发的虚拟机操作请求,并对虚拟机操作请求进行验证与转发,并转发至资源层104。资源层104接收到虚拟机操作请求后执行包含虚拟机操作请求的业务逻辑。业务逻辑发送到适配层105,并借助适配层105发送至API服务201。适配层105为虚拟化层20提供调用及监听消息队列321的监听功能。
[0052] 步骤S2、由云平台层10监听消息队列321中的事件信息,并在接收到事件信息后,将事件信息回调至资源层104,适配层105对事件信息执行转换处理所形成的对象信息发送至通知层102,并由通知层102将对象信息通知视图层101,并予以可视化展示。其中,适配层105对事件信息执行转换处理包括:由适配层105对事件信息通过适配层105中内置的消息转换器125将事件信息转换为对象信息。例如,第一存储装置31包括数据库或者非易失性存储器件,并优选为数据库。在本实施例中,将事件信息转换为对象信息,以便于后续将对象信息保存至数据库中,以满足数据库存储对象文件(即,对象信息)的格式要求,并有利于后续对对象信息的调用。优选地,第一存储装置31与第二存储装置32部署于云平台层10。此外,前述非易失性存储器件还可包括固态硬盘或者NVMe。数据库用于保存虚拟化层20所包含的虚拟资源的状态及资源变动信息。
[0053] 适配层105以被动方式监听消息队列321中的事件信息,并将事件信息保存至第一存储装置31,事件信息以消息队列321的形式保存于第二存储装置32,第二存储装置32包括数据库或者非易失性存储器件,第一存储装置31与第二存储装置32逻辑上独立于虚拟化层20。消息队列321负责体现虚拟机信息的消息管理,并执行事件信息的接收、存储与转发操作。虚拟化层20挂载至少一个计算节点或者挂载至少一个存储节点或者同时挂载一个或者多个计算节点与一个或者多个存储节点,并组成虚拟化资源池,以满足OpenStack集群的部署需求。
[0054] 调度器202监听消息队列321所保存的事件信息,并确定事件信息所关联的计算节点和/或存储节点,并将与事件信息关联的计算节点和/或存储节点发送至消息队列321,资源管理器203自消息队列321获取事件信息,并调用资源管理器203对虚拟机执行对应操作,并将操作虚拟机所形成的事件信息反馈至消息队列321。资源管理器203自消息队列321调用事件信息,以对虚拟机执行操作后获取操作所生成的操作结果,并将操作结果发送至消息队列321,适配层105自消息队列321获取操作结果,并将操作结果在第一存储装置31中查询虚拟机在事件信息之前的历史数据,并确定是否对第一存储装置31中所包含的虚拟机信息予以更新。历史数据保存在可采用数据库形式的第一存储装置31中,以实现对历史数据的持久化存储。历史数据体现了对虚拟机执行操作所形成的操作结果的记录,从而在适配层105回调后确定是否需要对虚拟机信息予以更新,从而避免第一存储装置31所保存的虚拟机信息执行重复且无意义的更新操作,以节约计算开销。
[0055] 参图4所示,虚拟化层20部署与资源管理器203建立会话的消息队列交换机205,消息队列321由适配层105创建并被绑定(Binding)至消息队列交换机205,消息队列交换机205与消息队列321通过支持正则表示的绑定规则予以相互绑定;消息队列交换机205根据访问请求所关联的虚拟机所形成的路由信息,将访问请求所对应的虚拟机因执行操作虚拟机所形成的事件信息通过路由信息转发至消息队列321。路由信息形成路由规则并下发至消息队列交换机205。在本实施例中,凡是符合正则表示的绑定规则所对应的事件信息将会发送至适配层105并被适配层105接收,由此在虚拟化层20中过滤掉不被适配层105所读取的事件信息。适配层105接收到的事件信息如图3所示出的流程回调至资源层104,并最终通过通知层102向视图层101予以可视化展现。因此,在本实施例中,云平台层10与虚拟化层20之间是通过消息队列321实现虚拟机信息的共享与实时同步。示例性地,本实施例中的消息队列交换机205的类型可选为fanout。对于fanout的消息队列交换机205,在一般情况下,消息队列交换机205就不再判断routekey了,而是将消息直接分发到绑定的消息队列321中去。一个队列是可以指定多个路由键,并由多个路由键(routekey)形成多个待处理队列
322。消息队列交换机205的类型也可选为RabbitMQ,RabbitMQ自定义了一套匹配规则。假设生产者(即,虚拟化层10)发送了一个消息,其中,routingKey为wiki.imooc.com,当消息队列交换机205为topic类型时候,想要获取到这条消息,可以用*号作为通配符,来指定路由键(routingKey),分别是*.*.com、*.imooc.*、*wiki.imooc.*;同样,也可以使用#作为通配符来指定路由键,例如wiki.#、#.com。因此,消息队列交换机205的类型是可选的。
[0056] 在现实场景中,如果某个用户调用底层命令(例如,命令行或者Dashboard)创建了大量的虚拟机并由此导致了占用了大量的虚拟资源,而这些被调度的虚拟资源所对应的事件信息并未及时地同步至云平台层10,而恰巧此时另一个用户或者管理员在同一时间段内又对相同的虚拟资源进行调度或者其发起的虚拟机操作事件所需要的虚拟资源已经枯竭,则必然导致对业务造成严重影响。因此,本申请所揭示的虚拟机信息同步方法旨在实时地便于用户或者管理员了解虚拟化层20及物理层中的资源状态,以满足业务的可靠运行。同时,在本实施例中,由于云平台层10与虚拟化层20之间是通过消息队列321实现虚拟机信息的共享与实时同步,从而使得云平台层10对虚拟机VM执行操作还是通过虚拟化层20对虚拟机执行操作,云平台层10均会在瞬间实现云平台层10与虚拟化层20之间的实现对虚拟机信息的同步操作,从而使得用户或者管理员在任意时刻从云平台层10所纳管的虚拟机信息均与真实的虚拟机信息保持实时同步,从而确保了云平台层10及包含云平台层10的整个虚拟化资源池对用户或者管理员发起的某(些)个虚拟机操作所对应业务的可靠响应,以实现良好的用户体验。
[0057] 参图3所示,回调至资源层104并向视图层101予以通知的具体步骤如下子步骤11至子步骤17所示。
[0058] 子步骤11、云平台层10通过命令行或者Dashboard对事件信息关联虚拟机的资源执行操作(例如,对已创建的虚拟机VM执行开机操作),以通过对关联虚拟机的资源执行操作形成事件信息。
[0059] 子步骤12、确定资源管理节点并发送到消息队列321,子步骤12由调度器202予以执行。确定资管管理节点的目的在于确定事件信息所关联的虚拟资源对象,并最终确定形成该虚拟资源的物理资源的位置,以调度被虚拟化层20所纳管的物理层中的物理资源,例如,某个具体的计算节点或者某个具体的存储节点,以响应用户所发起的虚拟机操作请求。
[0060] 子步骤13、虚拟调度服务从消息队列321中接收到事件信息后,执行调度算法并发送事件信息到资源管理服务。事件信息在消息队列321中以消息形式保存并形成一个或者多个待处理事件队列322。调度算法保存于调度器202中,且包括但不限于先来先去调度算法(FCFS)、优先级调度算法、最短作业优先调度算法(SJF)、轮转调度算法(RR)或者多级反馈轮转调度算法等。调度算法发送至资源管理器203以实现对资源响应虚拟机操作事件执行调度所对应的虚拟资源。
[0061] 子步骤14、资源管理器203接收到消息后调用虚拟机监视器204执行操作,并将执行结果发送到消息队列321。
[0062] 子步骤15、云平台层10的适配器105监听消息队列321,并在收到消息后转发至资源层104。
[0063] 子步骤16、资源层104收到信息并处理后写入数据库(即,第一存储装置31的一种下位概念),且前述处理是指对信息通过适配层105中的消息转换器125将事件信息转换为对象信息并最终将对象信息写入数据库,并在写入数据库后告知通知层102。
[0064] 子步骤17、通知层102与视图层101建立会话,当收到资源层104请求时,直接通知视图层101予以可视化展示。优选地,可视化展示可为通过弹窗形式通知用户。
[0065] 虚拟机信息同步方法还包括:通过适配层105对消息队列321执行初始化,适配层105以观察者模式监听初始化后的消息队列321中因事件信息发生变动所产生的对象信息,适配层105连接消息队列321并转发已发生变动的对象信息所对应的事件信息至资源层
104。在观察者模式中,消息队列321作为被观察的对象,可在消息队列321所保存的对象信息发生变动时,实时通知适配层,实现适配层105回调与监听消息队列321中发生变动的消息的操作,从而通过云平台层10被用户所感知。
[0066] 网关层103接收用户对虚拟机发起的访问请求,并对访问请求予以验证后分发至资源层104。API服务201转发适配层105所传入访问请求至消息队列321。由云平台层10监听消息队列321,并在消息队列321收到事件信息时,由云平台层10将消息队列321收到事件信息转发至资源层104,资源层104将事件信息保存至第一存储装置31后,在通知层102与视图层101之间建立websocket双向连接,以由视图层可视化展现写入消息队列321所保存的事件信息,并最终由视图层101刷新包含可视化页面信息。可视化页面信息向用户或者管理员展示写入消息队列321所保存的事件信息。申请人以创建虚拟机VM为范例举例说明。虚拟化层20中部署Nova组件(未示出),Nova组件将创建虚拟机VM的虚拟机操作事件推送到消息队列321所包含的notification.info队列。此时,Nova组件作为观察者会监听notification.info队列,基于创建虚拟机VM所形成的事件信息会推送至作为被观察者的适配层105,并由适配层105轮询所有已经注册的观察者并通过回调第二存储装置32中所保存的转换前的事件信息,并将事件信息发送至Nova组件。
[0067] 进一步地,结合图2与图6所示,该虚拟机信息同步方法还包括:通过部署于云平台层10中的适配层105建立通过虚拟化层20回调与监听消息队列321中发生变动的消息的操作,适配层105连接消息队列321并转发消息变动事件至资源层104。
[0068] 适配层105作为被观察者,可回调并监听消息队列321。消息队列321中所保存的队列信息在被观察者回调后,创建子线程并确保在任意时刻中线程池115内只运行一个子线程,其中,创建子线程的操作由适配层105执行。具体而言,适配层105形成并维护一个主线程及由主线程管理的线程池115,并在任意时刻中线程池115内只运行一个子线程,并判断消息转换器125所生成的对象信息是否属于虚拟机操作事件,若否,丢弃对象信息,若是,缓存对象信息至待处理事件队列322。适配层105中内置的消息转换器125将事件信息转换为对象信息,同时,在将完成事件信息转换后还可进一步据此判断该事件信息是否属于虚拟机操作事件,若是,将对象信息放入待处理事件队列322,若否,则丢弃,并直接结束,具体参图6所示。线程池115中运行的子线程负责某个具体的对象信息的消费,并可对云平台层10的当前对象信息进行更新。通常地,将对象信息所对应的虚拟机与第一存储装置31中保存的事件信息所含的关键信息是否相同进行判断。在主线程启动后,逐个获取待处理事件队列322,并判断待处理事件队列322是否为空;若是(则证明待处理事件队列322为空),则直接结束,若否(则证明待处理事件队列322不为空),则开始/继续处理事件,并进一步跳转下述判断逻辑。线程池115持续地通过适配层105监听待处理事件队列322并重复上述流程,直到待处理事件队列322为空为止,并使得线程池115结束。
[0069] 具体地,参图6所示,消息队列321形成待处理事件队列322,并在缓存对象信息之后,还包括:判断对象信息所对应的虚拟机在第一存储装置31中保存的事件信息所含的关键信息是否相同,若是,从待处理事件队列322中剔除具有相同关键信息的事件信息并删除事件信息,若否,提取当前子线程所对应的事件信息与待处理事件队列322中所保存的事件信息所形成的差异事件信息,以将差异事件信息更新到第一存储装置31。然后,再判断事件信息是否处理成功,若是,则删除事件信息,若否,则更新失败计数器。前述关键信息包括:虚拟机VM的名称、对虚拟机VM执行虚拟机操作的内容(例如,删除操作、创建操作、挂起操作等)、虚拟机操作事件所对应的虚拟资源的类型及规格(例如,1G的虚拟内存)或者虚拟资源所在的逻辑位置(例如,虚拟资源所在物理机的IP地址、MAC地址、物理名称等)中的一种或者任意几种的组合。
[0070] 第一存储装置31部署被设置失败次数阈值的失败计数器311。虚拟机信息同步方法还包括:判断将差异事件信息更新到第一存储装置31是否成功,若是,执行线程池115内的下一个子线程,若否,判断差异事件信息更新到第一存储装置31的失败次数是否大于或者等于失败次数阈值,若是,结束将差异事件信息更新到第一存储装置31的更新操作并结束,若否,再次执行将差异事件信息更新到第一存储装置31的更新操作,并循环地执行判断对象信息所对应的虚拟机在第一存储装置31中保存的事件信息所含的关键信息是否相同至判断差异事件信息更新到第一存储装置31的失败次数是否大于或者等于失败次数阈值之间的步骤。
[0071] 本实施例所揭示的虚拟机信息同步方法不需要在云平台层10中部署特定的云编排引擎(例如,AliYun插件、AWS插件、Heat插件或者TOSCA插件)或者与特定硬件进行绑定,能够兼容麒麟操作系统、金蝶ERP或者长城ERP,具有良好的兼容性。同时,在本实施例中,通过避免使用定时同步服务或者管理员在云平台层10以手动方式同步虚拟机信息或者在业务逻辑中嵌入同步查询底层信息逻辑的技术手段,既降低了对虚拟机信息同步操作过程中所消耗的资源,同时,由于不需要部署云编排引擎,因此有效地避免了对虚拟机VM执行虚拟机信息同步操作过程中的对虚拟机VM的源代码所造成代码入侵的技术问题。
[0072] 实施例二:
[0073] 作为前述实施例所揭示的虚拟机信息同步方法的一种合理变形。本申请还揭示了一种虚拟机信息同步方法的一种变形实施例。
[0074] 参图5所示,在实施例中,第一存储装置31与第二存储装置32部署于独立于云平台层10及虚拟化层20的第三方存储装置40,第三方存储装置40与云平台层10及虚拟化层20建立会话。第三方存储装置40选自具有数据存储功能的计算机、服务器或者网络存储装置等。第三方存储装置40与云平台层10及虚拟化层20在物理上相互分离,并可通过网络建立会话。本实施例所揭示的一种虚拟机信息同步方法与实施例一中具有相同部分的技术方案,参前所述,在此不再赘述。
[0075] 相对于实施例一而言,本实施例所揭示的虚拟机信息同步方法能够进一步降低云平台层10与虚拟化层20的逻辑复杂度,并可将云平台层10与虚拟化层20独立地部署于虚拟化资源池的一个控制节点中,并有利于保证第一存储装置31与第二存储装置32所含数据的可靠性与稳定性。
[0076] 实施例三:
[0077] 最后,基于前述技术方案,本申请还揭示了一种计算机可读介质900的一种具体实施方式。该计算机可读介质900可整体或者部分配置于物理形态的计算机、服务器、集群服务器或者数据中心中。在本实施例中,一种计算机可读介质900,该计算机可读介质900中存储有计算机程序指令901,计算机程序指令901被一处理器902读取并运行时,执行如前述实施例一和/或实施例二所揭示的虚拟机信息同步方法中的步骤。可选地,计算机可读介质900可配置为服务器,且该服务器运行于构建私有云、混合云或者公有云的物理设备上。
[0078] 需要说明的是,本实施例中集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(例如个人计算机,服务器或者网络设备等)或处理器执行本发明各个实施例所述方法的全部或部分步骤。前述存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
[0079] 上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
[0080] 此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。