云里雾里云计算【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 似乎能够提供用户更可靠的稳定性和售后服务。