发布时间 : 星期四 文章Spice学习文档更新完毕开始阅读
Spice学习文档
SPICE简介
SPICE(Simple Protocol for Independent Computing Environment独立计算环境简单协议)是一项高性能、动态的自适应远程呈现技术,能为终端用户带来和物理桌面个人计算机难以区分的体验。
SPICE是为远程访问虚拟化桌面而专门设计和创建,它是使用redhat企业虚拟化桌面版时,将用户连接至虚拟化桌面的协议。
与Microsoft的RDP和Citrix的ICA旧协议不同,SPICE是以多层架构为基础,旨在满足目前桌面用户的丰富多媒体需求。设计的核心是实现对用户端设备(CPU、RAM等)或主机虚拟服务器上可用系统资源的智能访问。作为访问的结果,协议会以动态方式判定是在客户端设备上还是在主机服务器上对桌面应用程序进行呈现,从而在任何网络条件下都能生成最佳用户体验。
优势:
1. 超群的用户体验
SPICE 可充分利用终端用户客户端设备的系统资源以呈现资源密集型应用程序、远程桌面可实现近似于在本地安装环境时的功能。这种方式产生了极佳效果,尤其是在更具挑战性应用方面,如音频、视频和其他形式多媒体,这些一度曾是效果较差或甚至无法利用虚拟桌面解决方案进行观看。
2. 降低部署成本和支出费用
通过利用本地客户端的系统资源,在可用情况下,它可即时释放主机虚拟服务器上的重要系统资源。其结果是实现主机服务器上最高的虚拟机密度,极大地释放了主机服务器系统资源,并可运行更多虚拟机,和其他备选解决方案相比,使企业只需要购买和支持较少的服务器硬件。
3. 确保数据安全性
红帽企业虚拟化桌面版具有一项可选功能,可充分加密 SPICE 连接终端用户的客户端设备与桌面虚拟机之间的端对端 SSL(安全套接层)通道。这一安全通道确保无论客户端设备用户在何处对其桌面进行访问,客户端和主机服务器之间的数据链接都能受到保护。
4. 连接任何 USB 设备 今天大多数桌面用户在他们的本地桌面 PC 上连接各种各样的 USB 设备。当客户移至虚拟化桌面基础设施时,他们仍希望如此。与其他解决方案限制存储设备或可能有局限于某些硬编码设备不同,红帽企业虚拟化桌面版和 SPICE协议在虚拟化桌面上充分运用了 USB 数据重定向。这意味着几乎所有 USB 1.0 和 USB 2.0 设备受SPICE 协议的支持。这包括用户输入设备,如写字板和专业键盘,及通用设备如,手机、PDA、闪存盘和打印机。
重要功能:
1. 虚拟客户机操作系统:
Windows XP和windows 7(32位和64位) Redhat企业Linux 5和Linux 6(32位和64位) 在桌面和客户端之间复制和粘贴 从简单的网页浏览器进行访问 2. 安全和身份验证
客户端和桌面之间安全的SSL加密通道
单点登录
3. 客户端设备
Windows或Linux客户端
桌面个人计算机或便携式计算机 瘦客户端
4. 音频/视频
所有视频格式/编解码器 双向音频/视频
原生帧率回播(流式传输或本地) 音画同步使音频和视频保持同步 动态图像压缩 5. 显示
每台显示分辨率可达2560*1600 支持多监视器(最多为4个监视器) 32位自然色 6. 外围设备
适用于任何设备的完全USB重定向 USB1.0和USB2.0设备 同步摄像机支持 几乎任何USB外围设备
SPICE架构
SPICE架构以三层模式为基础,让协议智能判定呈现用户操作的最佳位置。 a) SPICE驱动
可选软件组件,包含在redhat企业虚拟化工具包中,可安装在虚拟客户机上。旨在通过执行面向客户机的管理任务,如增强鼠标位置报告、显示监视器设置、USB设备装入等来增强用户体验。
b) SPICE服务器
属于位于主机服务器上的redhat企业虚拟化系统管理程序的一个软件组件。它是虚拟机内代理机和终端用户PC内客户端之间的主接口,提供无缝数据通信和设备交互。
c) SPICE客户端
位于终端用户客户端设备上的跨平台软件组件,它用于访问redhat企业虚拟化桌面版上的每个虚拟机。该客户端可运行于windows和linux客户端设备上,包括瘦客户端和改造的PC。
深入了解spice 基本架构:
Spice基本构建块有:spice协议、spice server 和spice client Spice相关的组件包括:QXL设备和客户QXL驱动
图像命令流:
上图显示的是基本spice架构和使用libspice和QEMU时从guest到client图像命令的数据流。Libspice能被任何兼容VDI主机使用。由图可知图像命令数据流由用户应用(guest中)请求OS图像引擎(X或GDI)去执行渲染操作开始。图像引擎将命令传递给QXL驱动,QXL驱动将OS图像引擎命令翻译成QXL命令并将其放到命令环中。此命令环在QXL设备内存中。Libspice从环中取出命令并将其加到图像命令树中。此图像命令树包含命令集,命令集的执行将重新构建显示内容。Libspice使用命令树通过丢弃被其他命令隐藏的命令优化后传输给client。此命令树还被用来检测视频流。Libspice也维持一个发送给client的更新其显示命令队列。当一个命令从队列中取出发送给client时,将被翻译成spice协议消息(之前是QXL命令)。命令也从命令树和发送队列中移除。当一个命令不再被libspice需要时,其进入到QXL设备释放环中,QXL驱动用这个环进行资源的释放。当client收到一个图像命令,其将根据这个命令
更新显示。
代理命令流:
Spice agent是在guest中执行的一个软件模块。Spice server和client为需要在guest环境中执行的任务使用agent,如配置guest显示设置等。上图显示的是spice client用agent与server 交互的过程。消息可能被client(例如:guest显示设置)、server(例如:鼠标移动)或agent(例如:配置ack)。
Spice几个重要的概念:
通道:
Client和server通过通道进行交互。每个通道类型专用于一种特殊数据类型传输。每个通道用一个专用的TCP套接字,可能是安全的(用SSL加密)或不安全的。在客户端每个通道有一个专用的线程。因此通过不同的线程优先级,每个通道被给与不同的QoS。 通道类型:
主通道:由RedClient类实现
显示通道:处理图形命令,图像和视频流 输入通道:键盘和鼠标输入
光标通道:指针设备位置,可见性和光标形状 播放通道:从server接收音频在client进行播放 录音通道:在client中捕获音频 类继承关系: RedClient
Screens和windows
RedWindow RedWindow_p ScreenLayer RedScreen RedDrawable RedChannel RedChannelBase RedPeer
Spice server
Spice server在libspice中实现,libspice是一个VDI插件库。VDI提供了一种标准的方式去发布虚拟设备的接口,以便其它软件组件能和这些设备交互。Spice server一方面用spice协议与远程client进行交互。另一方面,其与主机应用程序进行交互。