2020-08-07


XenServer的源码类分析与远程调用


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 类型简单,共有六种数据类型,如下表所示。
类型 描述
String 文本串
Int 64 位的整数
Float IEEE 双精度浮点数
Bool 布尔型
DateTime 日期和时间戳
Ref(对象名) 引用一个类的对象名
XenServer API 的类多种多样,如下表所示为XenServer 提供的所有类,并给出每个类的描述。
名称 描述
Session 一个会话
auth 远程身份验证服务的管理
subject 一个可以登录xAPI 的用户或组
role 与用户或组有关的一组权限
task 一个长时间运行的异步任务
event 异步事件注册和处理
pool 池信息
pool patch 池补丁
VM 虚拟机
VM_metrics 与虚拟机相关的属性
Vm_guest_metrics 虚拟机报告的属性
VMPP 虚拟机保护机制
VM_appliance 虚拟机设备
DR_task 数据接收任务
host 物理主机
host_crashdump 代表一个主机崩溃转储
host_patch 代表一个补丁存储在一个服务器上
host_metrics 与主机相关的属性
host_cpu 物理CPU
network 虚拟网络
VIF 虚拟网络接口
VIF
metrics 虚拟网络接口的属性
PIF 物理网络接口
PIF _metrics 物理网络接口的属性
Bond 绑定
VLAN 虚拟局域网多路复用器
SM 存储管理器插件
SR 存储库
VDI 虚拟磁盘映像
VBD 虚拟块设备
VBD _metrics 虚拟块设备属性
PBD 通过主机访问SR 的物理块设备
crashdump 虚拟机故障转移
VTPM 虚拟TPM 设备
console 控制台
user 系统用户
data source RRDs 数据源
blob 一个二进制blob 的占位符
message 管理员注意的消息
secret 秘密
tunnel 网络流量通道
PCI PCI 设备
PGPU 物理 GPU (pGPU)
GPU group 一组兼容GPU 的资源池
VGPU 虚拟GPU (vGPU)
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 来控制,虚拟机的存储和网络是如何创建的,如图所示为虚拟机的网络配置模型:

如图为虚拟机的磁盘配置模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值