基于虚拟化平台搭建语音教室的关键技术探究
2014-10-20梁峥刁伟孟
梁峥,刁伟孟
0 引言
近年来,以虚拟化技术为核心的“云计算”已经成为继个人计算机、互联网之后新的热点技术,各种商业软件和开源软件层出不穷。商业软件主要有Citrix XenDesktop、VMware ESXi、Microsoft Hyper-V和Redhat Hypervisor等,在开源技术方面,基于Xen[1]和KVM[2]等Linux下的虚拟化引擎,有OpenStack[3]、CloudStack[4]、Ovirt[5]等多种虚拟桌面和服务器管理项目。
从相关文献和项目可以看到,对于各种虚拟化技术的独立研究已经比较深入,但是综合上述技术的产品和应用相对还少。我们在Linux下利用KVM[6]和QEMU[7]的模块部署了一个虚拟化平台,KVM作为虚拟化引擎,QEMU则提供PC环境仿真能力。然后再基于该虚拟化平台搭建一个语音教室,并在这个语音教室中进行了实际应用的各种测试,总体来说效果还不错,但这个过程中,也需要解决一些具体的问题,采取一些相应的措施。
本文整理了基于虚拟化平台在搭建语音教室应用中的一些关键技术问题及其解决方法,组织如下:第1节介绍虚拟化平台中可以采用的不同设备重定向技术;第2节和第3节分别阐述视频和音频消息在桌面与客户端之间的传输方法,以及合适的协议;第4节说明如何对无盘启动技术简化客户端部署的过程进行了阐述;第5节说明使用用户认证方式的虚拟化平台,如何通过用户/客户端映射模块,实现客户端自动登录连接相应的桌面;最后进行总结。
1 设备重定向
基于虚拟化平台构建语音教学环境首先要解决的问题就是设备重定向。在很多场合下需要用到设备重定向:例如教师将存有课件的 U盘插到教师机上,其内容需要呈现在教师机所连接的运行在虚拟化服务器上的教师桌面中。更重要的是,同很多商业软件一样,语音软件也通过加密狗作为许可证保护机制。在传统网络环境中部署时,加密狗硬件设备插在装有语音软件教师端的教师机上,允许一定数目的学生端来连接。在虚拟化平台下教师桌面,要使语音软件能够继续工作,需要使得加密狗硬件设备被“重定向”教师桌面中。有两种方式实现加密狗重定向:
第一种是将加密狗还是插在教师机上,实际上它作为一个硬件设备出现在教师机本地的操作系统。可以使用 USB over IP的机制将它实现重定向。
a) 在教师机本地安装USB重定向服务器软件,教师机将作为USB服务器;
b) 在USB服务器上共享加密狗硬件设备(在USB设备被共享后,它就无法在教师机本地使用);
c) 在教师桌面上安装USB重定向客户端软件,教师桌面将作为USB客户端;
d) 在USB客户端和USB服务器之间建立通信,这将在USB客户端列出从USB服务器共享的所有USB设备;
e) 在USB客户端上选择要重定向的USB设备,并执行连接,这时USB设备会出现在教师桌面的设备列表中,现在就可以在教师桌面上使用这个USB设备了。
2.第二种是将加密狗插在教师桌面所运行的虚拟化服务器上,这种情况下,可以使用qemu本身的设备重定向机制。
这种方式需要将教师桌面“固定”在某台特定的虚拟化服务器上运行,一般的虚拟化平台都提供此项功能。这种方案实际上是将宿主机上的本地USB设备“分配”给虚拟机,例如,如果虚拟化平台采用QEMU来仿真,qemu命令的-usb参数允许添加宿主机的主机控制器,添加-device usb-host,hostbus=2,hostaddr=3将添加宿主机在总线2设备3的USB设备。
a) 将USB设备插到虚拟化服务器上;
b) 虚拟化服务器上添加主机钩子,这个钩子的目的就是在启动运行在其上的虚拟机时,修改虚拟机的启动参数;
c) 在宿主机钩子中,根据UUID或名字检查要处理的虚拟机是否就是教师桌面;
d) 若是教师桌面,则读取USB重定向配置文件,其中包含要重定向到教师桌面的USB设备的厂商ID和产品ID;
e)修改qemu参数,添加-device usb-host,vendorid=#,productid=#参数。
这样,在教师桌面启动起来后,插在虚拟化服务器上的USB设备就将会出现在教师桌面的设备列表中。
在虚拟化平台上使用设备重定向允许某些传统软件能够继续在虚拟化平台中使用,并且让用户在享用新技术的同时,保持与传统桌面相同的体验。
2 桌面协议
在虚拟化平台中,所有虚拟桌面都运行在服务器上,而用户从客户端连接这些虚拟桌面,其中的关键是桌面协议。桌面协议是一组用来在虚拟桌面和客户端之间进行通信的协议,主要完成虚拟桌面到客户端的图形、图像、音频的传输以及客户端到虚拟桌面输入信息的传输,包括鼠标、键盘、外设等,如图1所示:
图1 虚拟化平台中的传输协议原理
桌面协议为用户提供一个从客户端到虚拟桌面的链接。连接在客户端的键盘和鼠标的输入通过网络被发送到虚拟桌面,虚拟桌面解释这些指令,然后以图像的形式发回结果到客户端。这样,用户在客户端访问虚拟桌面时,就如同使用本地系统一样。
桌面协议的效率决定了虚拟化平台的用户体验。当前,虚拟化平台中使用的桌面协议主要分为两种类型。第一种称为基于像素的桌面协议,在送回图像时使用原始像素数据;而另一种称为基于对象的桌面协议,使用的是画图原语。
(1)基于像素的桌面协议:使用远程像素数据具有很大的灵活性,但这是以性能为代价的。这种类型的桌面协议的工作原理是:发送帧缓冲区的一个拷贝到客户端,而帧缓冲区保存了所有显示在屏幕上的像素的记录。这允许基于像素的桌面协议可以在任何类型的窗口系统、操作系统和应用程序中工作。
(2)基于对象的桌面协议:桌面协议可以在本地主机上画图像,通过使用应用程序级的显示命令,从虚拟桌面发送过来的,例如画方框和写文本。这些命令由客户端解释,然后在屏幕上画出来。正因为如此,和使用原始像素数据的桌面协议相比,这种桌面协议要求客户端主机具有更高的计算能力。
基于像素和基于对象的桌面协议各有优缺点,与客户端计算能力、虚拟桌面中应用类型等密切相关。在基于虚拟化平台搭建语音教室时,测试了多种桌面协议,包括:
RDP[8]:RDP(远程桌面协议)是微软开发的协议,允许用户通过图形界面连接到远程计算机。RDP是一种多通道协议,允许单独的虚拟通道携带演示文稿数据、串行设备通信、授权信息、加密的键盘和鼠标活动等。RDP还支持驱动器重定向、剪贴板映射、远程应用等高级功能。
SPICE[9]:SPICE(独立计算环境的简单协议)是一个开放到远程计算解决方案。其工作原理是创建几个通用接口或“通道”,每样都会获得不同的用户体验,它们都高度抽象,所以能在各种平台上使用。SPICE是的一个主要特点是自适用性,能够根据客户端的计算能力确定是否是将画图命令发送给客户端,或者是将渲染的结果发送过去。
Splashtop[10]:Splashtop是一款商业版本的高性能、跨平台远程桌面控制协议,它具有广泛的个人用户。其技术原理是将远程主机的屏幕像素进行“编码”,通过 Internet、Wi-Fi或其他网络协议传输到客户端设备,由它进行解码并显示在屏幕上。Splashtop有很多的技术独特性,其中一个主要的就是采用了P2P技术穿透防火墙或NAT内部,实现客户端和虚拟桌面的连接。
3 音频传输
语音教室的另一个重要方面是语音传输:教师在话筒中的声音需要被传送到学生的耳机,学生在话筒中的声音也要被传送到教师以及其他学生的耳机。如果是在传统网络架构下,这个过程非常简单,只需要语音软件通过特定的协议在教师机与学生机之间进行传输即可。
在虚拟化平台下,这个过程就要复杂的多。如图2所示:
图2 基于虚拟化平台的语音教室应用中音频传输的过程
教师(学生)声音先通过RECORD通道从教师(学生)机传输到教师(学生)桌面,然后由语音软件协议传送到学生(教师)桌面,进而通过PLAYBACK通道传输到学生(教师)机。这里的关键就在于声音在桌面和客户端之间的传输。大多数桌面媒体流传输技术只支持将视频和音频从桌面传输到客户端。要实现声音从客户端传输到桌面,必须借助于其他的协议。
基于QEMU和KVM的虚拟化平台可以采用SPICE协议。
SPICE通信会话被分成多个通信通道以便可以按照通道类型控制消息的通信和执行。当前 SPICE协议定义了下列通信通道:
主通道是 SPICE会话控制通道,复杂处理通信初始化(通道列表)、迁移和代理通信等。
显示通道用于接受远程显示更新。
输入通道用于发送鼠标和键盘事件。
光标通道用于接受指针形状和位置。
回放通道用于接受音频流。
记录通道用于发送音频捕获。
而 SPICEC客户端包含一些参数用于启用(--enable-channels)或禁用(--disable-channels)通道。
综上所述,为了实现语音教学过程中的音频传输,可以同时使用两种协议,桌面媒体流传输协议用于传输音频回放消息,而SPICE协议只用于传输音频记录消息。
4 无盘启动
在现有大多数虚拟化平台中,都引入了模板和虚拟机池。模板从已经安装了完整环境的桌面制作而成,可以很方便地克隆出具有相同初始配置的虚拟桌面。基于已制作好的模板部署虚拟桌面省去了操作系统和软件安装的过程,基本上只是在虚拟机服务器上的映像文件拷贝,因为非常快速。桌面池表示从同一个模板创建的一批桌面,引入的目的是为了方便为一组用户创建多个具有相同初始配置的桌面。
在教学环境中使用虚拟化平台时的操作流程是:教师连接到在管理员创建好并分配给他的虚拟桌面中安装操作系统以及所需要的应用程序,然后从已准备好的虚拟桌面制作模板,然后再基于这个模块创建一个虚拟机池,确保每个学生在虚拟机池中分配一个虚拟桌面。当需要更改教学环境时,教师必须修改原始虚拟桌面,再次制作模板和创建虚拟机池,因此,过程稍显复杂。
实际上,无盘启动技术在教学中有很长的应用历史,并且非常成熟。当前网络环境下的无盘启动技术是物理机通过网络启动,从无盘启动服务器上抓起一个系统映像,然后从这个系统映像引导进入操作系统。每次物理机启动时,学生选择是否还原到系统的最初状态。
实际上,无盘启动技术也可以结合到虚拟化平台中,从而简化教学环境的制作和修改过程。虚拟化平台中的无盘启动部署方案如图3所示:
图3 通过无盘技术简化基于虚拟化平台的语言教室部署
图3中包含无盘启动服务器、Windows共享服务器、教师机和学生机等,它们实际上都是虚拟化平台中的虚拟机(虚拟服务器和虚拟桌面)。
无盘启动服务器是基于无盘启动技术的核心。其中包含有DHCP、TFTP、HTTP以及iSCSI目标器(或AOE目标器)等各种服务,并且存储有客户端所希望进入的各种操作系统,在客户端通过网络启动时,为其分配IP地址,并且向客户端提供启动进入操作系统所需的文件。
Windows共享服务器为教师在安装基于Windows的操作系统时使用。Windows操作系统的安装过程是,首先,无盘启动进入 Window预装环境,然后连接到包含 Windows安装文件的文件服务器运行安装程序。
教师机实际上是无盘启动的管理端,它通过网络启动后,将请求无盘启动服务器生成动态管理菜单,每个菜单对应无盘启动服务器上代表教学环境的一个映像文件,管理员可以更新映像文件、删除映像文件,或者创建新的映像文件。
学生机实际上是无盘启动的普通客户端,它们通过网络启动后,将从无盘启动服务器下载生成的映像菜单,供用户选择任何一个映像文件并进入对应的教学环境。
无盘启动技术让教师制作和修改教学环境非常方便。教师只需要运行并连接到教师机,通过网络启动,即可创建新的映像文件,如果是Windows的教学环境,利用WINPE启动,然后从Windows服务器上映射Windows操作系统的安装文件,直接运行安装文件进行安装。如果要修改教学环境,只需要进入该映像文件的操作系统,在其上直接安装新的应用程序即可。
而学生可以运行并连接到各自的学生机即可,可以同时访问同一个教学环境,进入对应操作系统,并使用其中的应用程序。并且学生所作的任何修改都是无状态的,即一旦关机或重启,这些改动将丢失,操作系统和应用程序自动还原到上次管理员更新的状态。
在实际的语音教室搭建时,无盘启动采用iPXE[11]技术,映像文件挂接到物理客户端采用的是iSCSI[12]协议。学生桌面运行时,后台基于相应映像文件创建一个快照,同样将这些快照挂载到物理客户端,这个每个学生进入系统之后,实际上看到的环境和教师在教师机上制作的环境完全一致。在学生客户端重启时,后天删除现有快照,创建新的快照,从而达到还原的效果。
5 用户/客户端映射
虚拟化平台可以和基于LDAP和Windows活动目录的现有用户认证系统相集成,还支持使用独立的用户认证系统。用户认证模块作为一个虚拟实例部署,允许在管理引擎中管理外部认证域,并通过浏览器很方便地添加、删除、锁定和激活用户。
虚拟化平台将虚拟桌面分配给不同的用户,凭自己的帐号和密码,用户几乎在任何时间、从任何地点、用任何设备来访问。
但是当应用虚拟化平台技术来搭建语音教室时,使用用户帐号登录就显得“多此一举”了,最好的方式是每个客户端(学生机或教师机)对应一个固定的桌面(学生桌面或教师桌面)。当学生在任意一台主机前坐下,运行虚拟化客户端软件,将自动连接到和这台主机对应的桌面。这里面的关键就是实现“客户端和用户之间的映射”,有两种方法来做:
第一种是,每个客户端都有一个配置文件,其中记录映射到该客户端的用户帐号和(加过密的)密码,虚拟化客户端软件运行时,将读取该配置文件,解析出帐号和密码然后自动连接分配给该用户的桌面。这种方法的缺点在于客户端的部署和维护比较困难。
第二种方法是将这些映射信息保存在某个服务器上,例如创建一个虚拟服务器,并安装用于用户/客户端映射的模块。管理员通过浏览器查看虚拟化平台中已经建好的用户信息,以及语音教室每个客户端的信息,然后为每组用户和客户端之间建立映射。客户端本地则安装完全相同的虚拟化客户端软件,或者使用无盘启动技术抓起包含相同虚拟化客户端软件的映像。在客户端软件运行起来后,首先发送请求到映射服务器,获取对应的用户信息,解析出帐号和密码然后自动连接分配给该用户的桌面。
6 总结
基于虚拟化平台搭建语音教学环境,和在传统网络架构下搭建语音教学环境,具有充分利用当前基础设施,方便管理和访问,方便教学环境的制作和修改等很多优势。但是,在这个过程中,也发现了虚拟化技术在与日常办公环境下部署面临的不同问题。通过解决这些问题,确实证明虚拟化平台是可以实际应用在各种教学环境下的。
[1]Barham P, Dragovic B, Fraser K, et al.Xen and the Art of Virtualization [C]//Proceedings of the 19th ACM Symposium on Operating Systems Principles.New York:Bolton Landing, 2003:164-177.
[2]Kivity A, Kamay Y, Laor D, et al.KVM: the Linux virtual machine monitor [C]//Proceedings of the 2007 Ottawa Linux Symposium.Ottawa, Canada: Ottawa Linux Symposium, 2007: 225-230.
[3]Sefraoui O, Aissaoui M, Eleuldj M.OpenStack: Toward an Open-source Solution for Cloud Computing [J].International Journal of Computer Applications.2012,55(3):38-42.
[4]CloudStack.Open Source Cloud Computing [EB/OL].[2013-12].http://cloudstack.apache.org.
[5]oVirt.Quick Start Guide [EB/OL].[2013-12].http://www.ovirt.org/Quick_Start_Guide.
[6]KVM.Kernel Based Virtual Machine [EB/OL].[2013-12].http://www.linux-kvm.org/.
[7]QEMU.Open Source Processor Emulator [EB/OL],http://www.qemu.org/
[8]FreeRDP.A Remote Desktop Protocol Implementation[EB/OL].[2013-12].http://www.freerdp.com/.
[9]SPICE.Spice User Manual [EB/OL].[2013-12].http://www.spice-space.org/docs/spice_user_manual.pdf.
[10]Splashtop.Top-performing Remote Desktop and Remote Support [EB/OL].[2013-12].http://www.splashtop.com/.
[11]iPXE.Open Source Boot Firmware [EB/OL].[2013-12].http://www.ipxe.org/.
[12]Satran J, Meth K, Sapuntzakis C, et al.RFC 3720-2004,Internet Small Computer System Interface (iSCSI) [S].USA: IETF, 2004-4.