云里雾里云计算 【8】云中说禅

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




【8】云中说禅

云计算是一个大买卖,各大公司不会眼睁睁看着Google吃独食。IBM,Yahoo,Amazon,Microsoft等等相继跟进,都在宣传自己的云计算方案。

Google致力于云计算研究与实践,已经有十年了,技术积累厚实,说话底气足。其它公司嚷嚷归嚷嚷,总得拿出点真材实料,否则靠什么争取客户?从头开始 研究开发当然是来不及了,于是IBM也好,Yahoo也好,Amazon也好,纷纷借Open Source的Hadoop,作为自己切入云计算市场的基石。

看一看IBM的Blue Cloud方案,以及Amazon的EC2方案,除了Hadoop以外,它们还用到了另一个开源软件,Xen。Xen是Zen的异体词,Zen的意思是禅。

计算机技术和禅有什么关系?

看看Lucent公司的Logo。第一次见到这个logo的时候,不解。请教老美,老美很吃惊,说,“这是禅啊,你们东方的东西。”

这个用毛笔画出来的圆圈,英文名字叫Enso。这个符号来自日本,通常被当作禅的标记。凭心而论,日本在世界范围内弘扬东方文化,是做了很大贡献的。譬如西方人对禅的了解,主要来自于日本的推介。

Lucent Logo
Courtesy http://www.techshout.com/images/lucent-logo.jpg

1974年,美国出版了一本名字很古怪的书,“禅与摩托车维护的艺术:对价值的探求(Zen and the Art of Motorcycle Maintenance:An Inquiry into Value)”。这本书的主线是一伙人骑摩托,17天环游美国的游记,其中穿插了大量的哲学讨论。此书出版后,受到极大欢迎。

2003年,剑桥大学计算技术实验室的几个人在合写一篇论文,文章写得差不多了,但是还缺一个标题。其中一位开玩笑地建议到,“要么就叫Zen and the Art of CPU Cycle Maintenance吧”。众人大悦。

最后论文定名为“Xen and the Art of Virtualization”。同时,把整个项目定名为Xen。

Xen是做什么的?

用一句话来概括,Xen的目标,是如何在一台计算机的硬件上,同时运行多个OS。什么情况下需要在同一台计算机上同时运行多个OS?

举个例子,现在电脑病毒日益猖獗。纵然有卡巴斯基等等解药,但是道高一尺魔高一丈,病毒屡禁不止,而且毒性越来越烈,常常危及整个OS。

有人出了一个主意,在同一台电脑的硬件上,同时运行多个OS,把一些基本的应用放在一个OS上,其它的应用留在其它OS上。用户切换OS的方式,犹如切换窗口一样。如果一些应用染上了病毒,最多把该应用所在的OS重装,而不至于影响其它OS,尤其是不必担心硬盘上重要的文件遭到破坏。

为什么Xen与云计算有关?

在云计算平台上运行的程序,来自不同的客户。不能保证这些客户程序没有bugs,也不能杜绝恶意的破坏性程序。如何保证一个客户的程序,不至于破坏其它客 户的程序运行,不至于损坏其它客户的文件?

最简单的办法是给不同的客户分配不同的机器,井水不犯河水。但是这样的做法不能高效率地使用资源。美国客户的高峰时段,恰巧是中国客户的夜间休息时段。如 果分别给美国中国客户分配不同机器,美国高峰时段,美国客户的机器忙不过来,而中国客户的机器却在闲置。

所以最理想的做法,是让不同客户共享计算机硬件,但是各自拥有各自的OS。这样,既高效地使用硬件资源,又保证井水不犯河水。

举个例子,假设后台有两个功能,F1,F2。如果现在各自有个machine farms,MF1和MF2。MF1的每台机器只运行F1,而MF2的机器只运行F2。即便在系统里装了LoadBalancer,F1的请求只能发到 MF1的某一台机器上去。但是如果MF1里面所有机器都忙不开了呢?在这种情况下,LoadBalancer也没办法。

怎么办?把MF1和MF2合并,每台机器上即运行F1,也运行F2。

但是如果F1有bugs,导致死机,会不会影响到F2?当然会。怎么办?

用virtualization技术,在同一台机器的硬件上,同时运行两套OSes,OS1里面只跑F1,OS2里面只跑F2。F1的bug,导致OS1 崩溃,但是不会影响OS2里的F2。

Xen提供了实现这一目标的技术解决方案。当然,在一台计算机上支持多个OS,是有代价的。Xen消耗了一部份CPU时间,但是这个额外代价只有3%到7 %。

如果F1是Oracle,F2是DB2等等之类heavy duty applications,当然给它们分配专用机器最合适。但是如果F1和F2不是那么heavy duty,而且负载分布交错,也就是你忙我不忙的情况经常发生,那么把F1和F2放置在同一台机器上,用virtualization技术相互隔离,以保 证互不干扰,就有价值了。

Virtualization的价值在于减少服务器的数量。在前面的例子中,如果F1和F2各自有自己的machine farms,两个farms里面的机器数量分别是MF1和MF2,那么合并起来以后,统一的machine farm里的机器数量比MF1+MF2少。

所以,借着云计算的东风,Xen大热。

The structure of a machine running the Xen, hosting a number of different guest OSes.
Courtesy http://www.freesoftwaremagazine.com/files/www.freesoftwaremagazine.com/nodes/1159/slide2.jpg

上图描述的是Xen的体系结构。最底层的是计算机硬件,包括CPU,RAM,硬盘接口,网卡,外设数据总线等等。

硬件层之上,是Xen hypervisor层,包括总控界面(Xen Control Interface),虚拟CPU,虚拟RAM,虚拟硬盘,虚拟网卡等等。

在Xen层之上,是各个OS实例(OS instances)。其中最左边的OS实例很特别。在启动Xen的时候,最左边的OS实例,Domain0 on XenoLinux,自动被启动。Domain0里运行着Xen Control Software,这个软件控制着各个OS实例的启动,终止,以及监控其运行情况。

Domain0对于其它OS实例的控制,是通过Xen层中Xen Control Interface来实现的。而这个Xen Control Interface只对Domain0开放。其它OS实例只有被管理的义务,而没有管理其它实例的权力。

每个OS实例都被分配一套虚拟的CPU,RAM,硬盘和网卡。每个OS实例使用这些虚拟的设备,与通常的OS并无不同。

多个OS实例共享CPU的实现,是通过两套机制来完成。当多个OS实例请求使用CPU,这些请求被放置在hypercall队列里。Xen hypervisor根据预先设定的优先级政策,在hypercall队列里挑选出下一个被执行的请求。请求被处理完了以后,Xen通过异步的事件响应机 制(async event-callback handler),把结果反馈给相应的OS实例。所谓虚拟CPU,说白了就是这两套机制的interface APIs。

在启动一个新的OS实例的时候,Domain0会给它分配一部份RAM。如果实际运行中,需要更多的RAM,Domain0会增加这个OS实例的配额,直 至最高上限。各个OS实例都有自己的RAM区域,彼此不相互干扰。从每个OS实例的眼中看,似乎自己的RAM区域在物理上位于相邻区域。但是事实上不是这 样。这种善意的欺骗归功于虚拟RAM。虚拟RAM不仅记录着物理RAM的分配和使用,而且负责地址的翻译等等工作。

至于Disk IO和Network IO的读写请求,被放置在一个环状队列中,通过Consumer-Producer锁机制进行异步操作。

每个OS实例配备着一个虚拟硬盘,这个虚拟硬盘记录着每个OS实例所占用的物理硬盘的空间。每个OS实例只能看到分配给自己的硬盘空间,而不能看到其它 OS实例的硬盘里的文件。而Domain0是例外,它能够看到整个硬盘系统中所有文件。

Xen的详细描述和分析,可以读前面提到的那篇论文,“Xen and the Art of Virtualization”,http://www.cl.cam.ac.uk/netos/papers/2003-xensosp.pdf。

Xen开源软件的下载,可以去Xen网站寻找。http://www.xen.org/

VMWare infrastructure
Courtesy http://www.topgreat.com.tw/WebMaster/uploads/images/1_images/l_070508152747.jpg

Xen并不是横空出世的新创意。计算机界往往出现工业界领先于学术界的局面,Virtualization技术就是这样一个例子。早在1998年,硅谷 Palo Alto出现了一家公司,最早实现了多个OS共享一台计算机的设想。这家公司的名字叫VMWare,现在卖给了EMC。 http://www.vmware.com

Xen与VMWare在技术上有很大相似之处。从Xen的论文看,Xen的技术似乎比VMWare有更多优势。但是从产品系列的完整,以及多年来的实际运 行经验来看,VMWare似乎能够提供用户更可靠的稳定性和售后服务。

(6个打分, 平均:3.83 / 5)

雁过留声

“云里雾里云计算 【8】云中说禅”有20个回复

  1. appleleaf 于 2010-04-07 1:07 上午

    我觉得VM和云计算没有关系。前者是为了省钱省电而在一台设备商虚拟多台设备。后者是将多台设备(无论VM与否)虚拟成一个计算平台。
    两者本质上无关。

  2. 素里太守 于 2010-04-07 2:57 上午

    1楼这个说法不对,VM和云计算关系大大的。VM提供了某种硬件抽象层,对于云的可扩展性可是大有好处。

  3. appleleaf 于 2010-04-07 4:25 上午

    我的意思是两者不相互依赖。没有VM也会有云计算,同样没有云计算也会与VM。VM的出现确实为云计算提供了好处。
    另外,素里太守倒过来念就是“手太利索”,令人怀疑您的真正职业:-)

  4. rhapsodyn 于 2010-04-07 4:41 上午

    VMWARE是在操作系统上虚拟多个操作系统?
    XEN是在硬件上虚拟多个操作系统?

  5. kk 于 2010-04-07 5:10 上午

    @appleleaf
    要想让Datacenter更有效率,虚拟化必不可少。

    BTW, r u an Apple fan? :)

  6. frogman 于 2010-04-07 5:11 上午

    IaaS的基础是虚拟机技术

    PaaS, SaaS可以不依赖虚拟机

  7. frogman 于 2010-04-07 5:14 上午

    To rhapsodyn:

    VMware有一个很长的产品系列

    workstatation和player是在操作系统上虚拟多个操作系统,所谓的TYPE2
    esx是在硬件上虚拟多个操作系统, 所谓的TYPE 1

  8. appleleaf 于 2010-04-07 5:28 上午

    to kk,我喜欢但是没有budget:-)

  9. cal 于 2010-04-07 10:20 上午

    几个地方值得商榷:
    1. xen属于Paravirtualization, 需要修改guest os, vmware workstation不用 (技术上有很大不同,xen的文章说的非常清楚)
    2. xen并不是借着cloud computiing火起来的
    3. xen现在属于citrix
    4. vmware已经从EMC分出来好几年了
    5. IBM是第一个,不是vmware

  10. wting 于 2010-04-07 5:05 下午

    讲得还是比较浅,当科普性的知识比较合适

  11. John 于 2010-04-07 7:07 下午

    虚拟化真出道的时候由于都是用在有钱人(比如IBM的360)上面,因此并不为普通百姓所知道.大概在60/70年代,就已经有虚拟化技术的研究.
    而说到VMWARE,就不得不说斯坦福的 SIMOS和 Disco. SIMOS的开发者之一后来到了VMWARE.

    XEN的出现可以说是遇到了好时候吧. 当时INTEL也在望硬件中加虚拟化的支持.而XEN的研究小组的研究资金有一部分来自INTEL.所以,可以猜想是INTEL的背后推动才推动了XEN项目的研发. 想当时首席在CLF上发起虚拟化研究的时候,如果能坚持下来,现在应该培养了不少人.可惜.

    另外硬件虚拟化支持后,已经不需要去修改guest os了. 所以9楼的说法不是太准确.不需要修改OS很关键,关键到可以牺牲一些性能. 另外, VMWARE/XEN乃至VBOX都可以支持VT技术.

    对了,说到INTEL VT,当时VMWARE还有一篇paper挺有意思. 大意是VT的出现对于老的软件如VMWARE的软件,并没有太大的好处. 要利用VT的话,需要做很大的改动. KVM一出生就是为VT准备的,而且得到LINUX的支持,前景不错.

  12. ABCD 于 2010-04-07 10:18 下午

    有些信息可能是不准确或者不完全的
    1. 技术上来说VMware比Xen强很多,尤其在management上
    2. 在Linux上Xen多半会被KVM干掉,Xen的动作太大,不招Linux Kernel那帮人待见
    3. Paravirtulization的角色有些变化,之前是因为没有硬件支持,现在是为了效率
    4. Virtualization是Cloud的一个很重要的基础设施,因为它提供了很好的计算资源控制粒度
    5. Mobile设备的Virtualization就是为了更安全的资源控制
    6. Virtualization和micro kernel的边界变得越来越模糊,L4 kernel在mobile设备上就是这个趋势,这个很有意思

  13. ABCD 于 2010-04-07 10:23 下午

    上面第六点其实就是hypervisor和guest的定义越来越模糊,hypervisor可以是个单独的OS,可以是现有OS的一个module,guest可以是一个单独的OS,也可以作为一个OS里面的一个module.

  14. 陈怀临 于 2010-04-13 7:14 上午

    L4,特别是OKL4在mobile上的兴起,也让我惊讶。。。我当初看我一遍L4 spec之后,就放弃了L4的学习。觉得太晦涩。对XEN倒是一直看好。。。

    如果OKL4做虚拟化在手机上,性能能保证吗?例如同时run AP和Baseband在一个CPU上。。。

  15. john 于 2010-04-13 8:22 上午

    》如果OKL4做虚拟化在手机上,性能能保证吗?例如同时run AP和Baseband在一个CPU上。。。

    首席,悄悄告诉你,现在某河在推hypervisor,同时跑RTOS和LINUX并且还能保证RT。 所以这个问题应该是可解的。在弯曲的有某河的同学,这个可以八卦一下。

  16. Sunny 于 2010-04-13 9:29 上午

    john,

    “现在某河在推hypervisor,同时跑RTOS和LINUX并且还能保证RT” 是在ARM上,还是Atom上?

  17. deltali 于 2010-04-13 6:00 下午

    1.目前kvm还无法跟xen相比,当然就更别提vmware了,vmware目前最大的问题是它高高在上的价格

    2.个人认为kvm得到linux kernel那帮人的支持还不足以干掉xen,我倒觉得把hypervisor和domain0分开也有它的好处。关键是现在还没有基于kvm的商业应用,这个也是个很大的障碍。

    3.说到底,一个对os熟悉的人能够很快的搞定xen或者kvm的东西甚至能自己写个类似的hypervisor。真正难得是各种各样的管理工具,virtualiron早就把virtualbox开源了,把它的管理工具作为利润来源。同样,xenserver和vmware拼得也是谁更好用,客户不会关心你用啥类型的虚拟化技术的

  18. comcat 于 2010-04-13 8:35 下午

    某河的 hypervisor 现在只发力于 x86 和 PPC (Multicore 上),ARM 和 MIPS 是将来的事1

  19. 读者 于 2010-04-13 8:53 下午

    “virtualiron早就把virtualbox开源了”

    Virtual Iron 和 Innotek (Virtualbox 的开发商)是两个不同的公司, 尽管两者最后都被Oracle 买下。 (Innotek 先被Sun买下)

    URL: http://en.wikipedia.org/wiki/VirtualBox

    http://en.wikipedia.org/wiki/Virtual_Iron

  20. ppg 于 2010-06-01 10:13 下午

    vmware觉得很不错,学习系统首选