ovirt-engine管理引擎的功能拓展方法

来源:互联网 发布:r软件sep“,” 编辑:程序博客网 时间:2024/06/01 08:32

1     引言

ovirt-engine是开源产品,在开源基础上开源社区升级和我们开发的功能不统一,每次升级RHEV底层就必须要与我们增加的功能进行合并,每次合并都会占用大量的时间对代码进行比对和测试,随着时间的推移和我们开发功能的增多,这个过程也会越来越复杂,直到无法为继的地步。为了解决这个问题,最好的方法是将我们开发的功能尽可能的与现有的ovirt平台分离,之间的相互关联,以最小的方式连接,每次ovirt升级只要检验和调整相互的关联关系,就可以省下大一部分的时间和精力。

2     管理引擎的接口

要和ovirt分离,就要分析目前管理引擎的系统架构和含有那些接口,我们能从这些接口里获取那些信息。如下图1所示。


图1

管理引擎主要分为下面几个接口:

  • 前后台接口(Servlet接口),管理后台数据传输到前台界面显示,目前由GWT架构管理,没有可以方便利用的接口,但是可以扩展,如现有利用:文件上传,用户登录等。由于前后台servlet定义需要修改web应用的web.xml文件,所以与ovirt的源代码结合比较紧密,但是需要修改的文件个数较少,修改起来比较方便。
  • 内部类调用接口,java内部的信息流转和业务处理的内部接口。现有修改主要是用来拓展管理引擎功能,由于要修改管理引擎内部源代码,而且需要修改的内容较多,与RHEV源代码结合紧密,升级时较难合并。
  • 数据库接口,数据库接口的连接信息由jboss本身提供,只要放在jboss容器内的web应用,都可以通过访问获取到数据库连接信息从而读取数据库。所以数据库接口是相当的开放的,可以从数据库层面把我们的应用和ovirt分离。但是主要风险是ovirt修改数据库结构导致升级后我们的应用无法运行,这种风险成都较小,因为数据库是软件较基础的内容,数据库表名称一旦形成,后面升级基本是不会大面积进行修改,及时修改也只是增加表或字段,对上个版本的数据读写是不会产生太大的影响。数据库接口是我们的开发应用与ovirt分离的主要方法之一。
  • 外部调用接口,外部调用接口主要包括管理引擎与vdsm通信的XMLRPC协议,与AD通信的LDAP协议和ovirt-engine-api用的是restfull接口架构等等。这里,与vdsm交互的接口和与AD通信的接口主要是内部功能组件接口,与ovirt分离关系不大,但ovirt-engine-api是ovirt设计的对外进行通信和操作的api,我们ovirt系统解绑主要就要依靠这个api进行。但是这个api仍然有它自己的局限性:api主要用来远程实现对系统的操作,对系统查询时没有翻页操作,数据无法直接用于前台;无法查询系统日志信息等。ovirt-engine-api是我们与ovirt解绑的主要利器,但还需要其他接口辅助完善其功能。

3     对于功能分离的思考

我们已经对ovirt进行了多层次的修改和开发新的系统,要使这些修改和系统与ovirt平台分离,仅仅靠一个api是无法完全实现的,我建议在以下几个方面入手,实现解绑的最大化和ovirt更新升级的最方便化。

  • 对于增加ovirt本身没有该功能的修改,需要对ovirt底层源代码进行修改,应尽量避免对ovirt源代码直接进行修改操作,应对源代码进行继承(extend)新文件,对源代码方法进行改写,尽量减少对方法本身的修改。
  • 对与ovirt本身有的功能或信息,并没有通过ovirt-engine-api接口对外提供的。建议静态数据可以直接从数据库中提取,动态可变数据或内部调用方法采用class内部调用或servlet调用方式把内部接口暴露出来,再进行调用。
  • 对与ovirt本身有的功能或信息,通过ovirt-engine-api接口对外提供的,可直接调用其接口。

经过修改,我们系统和ovirt系统之间的关系如下图2所示:


图2

0 0