【转】XenServer架构之XAPI的调用流程
XAPI 调用是使用XML-RPC协议通过网络发送到安装有XenServer 的主机上。XAPI对象的引用不保证对象的永久标识符,引用不允许对象进行相等比较。对同一物体的两个引用,不保证是文本相同的。对象UUID(Universally UniqueIdentifier,通用唯一识别码)的目的是永久的名字,客户可以通过比较对象的UUID 字符串测试平等。XenServer的XAPI 提供UUID 和不透明引用之间的转换机制,每个类都包含有一个UUID 字段。
XenServer API 是基于XML-RPC 协议进行通信的。XML-RPC 是在Internet 上实现远程方法调用的一种规范,它利用HTTP 作为传输协议,使用XML 作为消息请求的传输主体。XML-RPC 将一个XML 格式的消息体作为HTTP POST 请求发送给服务器,该消息包括名称、运行服务的程序以及输入参数,服务器将执行结果以XML 格式返回,其原理如图所示:
通过XenServer XAPI,用户可以管理虚拟机、存储、网络、主机配置和XenServer 池。调用XenServer API 的步骤如下:
(1)选择传输级别
可以通过以下两种传输发出API 调用:
-
远程管理使用HTTPS
-
本地管理通过Unix 的Domain Sockets 使用HTTP
(2)身份验证和会话处理
在执行其余的API 前,客户端需要先调用login_with_password 函数连接到XenServer主机进行身份验证,该函数会在服务器端创建一个会话并将该会话的引用返回给客户端。
(3)查找操作对象的引用
为了查询操作对象的状态或在其上调用操作,客户端需要获取操作对象的引用,获取对象引用的方法有以下几种:
-
get_by_name_label:返回具有特定标签的特定类的所有对象列表;
-
get by uuid:每个类都有一个UUID,通过这个引用可以返回指定的对象;
-
get_all:返回一组对特定类的所有对象的引用;
-
get all records:返回对特定类的每个对象的记录的引用映射。
(4)通过对象调用执行同步或异步操作
每个方法调用都可以是同步或异步的,除了会话、任务、设置的一些字段。同步RPC调用块,是指直到返回值被接收;同步RPC 调用块返回值完全按照RPC 返回值/状态码来说。本文中只有同步调用的API,所有的异步调用是在特殊的异步命名空间。异步RPC 调用返回一个任务ID,而不是直接返回结果;这个标识符随后被用来跟踪正在运行的异步RPC 的状态。但是异步调用可能立即失败,在一个任务ID 被创建之前可能代替这种可能性,然后返回的任务ID是包裹在一个XML-RPC 结构中,包括错误描述和字段值。
API 对象模型
本小节主要在对XenServer API类型、XenServer API 主要类及其类之间的映射关系的研究基础上给出API 对象模型调用关系。
XenServer API 类型简单,共有六种数据类型,如下表所示。
XenServer API 的类多种多样,如下表所示为XenServer 提供的所有类,并给出每个类的描述。
XenServer API 的类之间是以何种关系进行关联的,完成一个功能需要多个类的相互调用才能完成,如图给出主要类之间的映射关系:
在XenServer XAPI 类的类型、主要类和类之间的映射关系基础上,得出API 对象模型之间的关系。
(5) API 的一些核心类:
VM:VM 对象表示XenServer 主机或资源池上的特定虚拟机实例。
主机:主机对象表示资源池中的安装XenServer 物理主机。
VDI:VDI 对象表示虚拟磁盘映像。
SR: SR(存储库)聚合VDI 的集合并封装VDI 位所在的物理存储的属性。
网络:网络对象表示存在于 XenServer 主机实例所在的环境中的第二层网络。
(6) 4 个用作连接器的类,用于指定VM 和主机、存储和网络之间的关系:
VBD:VBD(虚拟块设备)对象表示VM 和VDI 之间的连接。
VIF:VIF(虚拟网络接口)对象表示VM 和网络对象之间的连接。
PIF:PIF(物理接口)对象表示主机和网络对象之间的连接。
PBD:PBD(物理块设备)对象表示主机和SR(存储库)对象之间的连接。
虚拟机的创建由Domain 0 来控制,虚拟机的存储和网络是如何创建的,如图所示为虚拟机的网络配置模型:
本文出自 “我拿流年乱了浮生” 博客,请务必保留此出处http://tasnrh.blog.51cto.com/4141731/1786867