云里雾里的云计算 【7】-转载自邓侃博士的博客

【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。这个符号来自日本,通常被当作禅的标记。凭心而论,日本在世界范围内弘扬东方文化,是做了很大贡献的。譬如西方人对禅的了解,主要来自于日本的推介。

云里雾里的云计算 <wbr>【7】
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。这样,既高效地使用硬件资源,又保证井水不犯河水。
Xen提供了实现这一目标的技术解决方案,所以借着云计算的东风,Xen大热。 云里雾里的云计算 <wbr>【7】
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/

云里雾里的云计算 <wbr>【7】

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】-转载自邓侃博士的博客

【7】天上究竟会有几朵云?
上一章长篇大论地讨论,云计算是否能够提供有效的加密措施,保障客户的内容以及程序,不被云计算平台的拥有者偷窥。
我们的结论是悲观的。
既然云计算平台无法提供有效的加密措施,那么云计算平台只能吸引那些对于自己的内容和程序的保密不那么敏感的企业。
但是大型企业,包括银行和电信,它们对云计算能够提供的超大规模存储能力,以及超大规模并行数据处理的能力,有天然的需求。
怎么办?
现实的解决办法是帮助大型企业建设属于它们自己的云计算平台。
换而言之,未来的天空中,将漂浮着Google和Microsoft几朵云,这是几朵大云。在大云的周围,散落着一些小云。
如何构建云计算平台?
说来也不很神秘。云计算平台的基本思想,可以简单概括为,设计一套操作系统,同时管理多台电脑,尤其是把多台电脑结合起来,当一台超级电脑使用。
想深入了解云计算技术,以下论文是不能不看的。
1. Google File System: http://research.google.com/archive/gfs-sosp2003.pdf
把多个电脑的硬盘组合起来,形成一个超大规模的硬盘,用来存储海量数据,同时保障万一有某些硬盘崩溃了,不至于遗祸整个系统。
2. MapReduce: http://labs.google.com/papers/mapreduce-osdi04.pdf
如何实现并行计算。道理很简单,但是用好却不容易。下面两篇论文,可以作为范例,指导如何正确使用MapReduce。
2.1. Large Language Models in Machine Translation http://acl.ldc.upenn.edu/D/D07/D07-1090.pdf
2.2. Parallelizing Support Vector Machines on Distributed Computers http://books.nips.cc/papers/files/nips20/NIPS2007_0435.pdf
3. Chubby lock service: http://research.google.com/archive/chubby-osdi06.pdf
电脑操作经常要用到锁机制,譬如用锁防止两个进程同时向同一个文件写数据。这篇论文谈的是,在由多台电脑组成的分布式系统中,集中管理锁的机制。
4. BigTable: http://research.google.com/archive/bigtable-osdi06.pdf
这篇文章既是讲如何实现分布式数据库,同时也可以把它看成范例,如何正确使用Chubby锁机制,和GFS文件系统。
5. The Google cluster architecture: http://www.computer.org/micro/mi2003/m2022.pdf
各个组成部分完成以后,如何组建一个计算中心。这是这篇文章的主题。
Google式云计算平台有两大特色,
1. 便宜。即使用几台穷人买得起的烂PC,也能构建一个麻雀虽小但是五脏俱全的Google式云计算平台。其实,Google自己就是这么起家的。
2. 稳定。便宜的机器经常死机。Google式云计算平台,能保证一部份机器死机不会造成整个系统的崩溃。

云里雾里的云计算 <wbr>【6】

A cluster consisting of many cheap PCs Courtesy http://www.inria.fr/actualites/inedit/images/inedit29_parta.fr.jpg
以前CMU有个教授,说过这么一段话,大意是:遇到一篇以前没有读过的论文,最好先蹲在厕所里翻翻。很多论文无病呻吟,或者装神弄鬼。对待这样的论文,处理的办法是立刻冲掉。不幸的是,大多数论文都可以这样处理。
后来,这段话被记者捅了出去。系主任不得以,不仅公开道歉,而且内部通报批评该教授,不该说这种politically incorrect的话。但是暗地里,很多师生都非常认同教授的看法。
前面几篇文章,不仅不能被冲掉,而且值得反复读,再三读。读完这些论文,你一定会对这两个人感到亲切,Jeffrey Dean和Sanjay Ghemawat。
如 果说Google的两位创始人Larry Page和Sergey Brin确定了Google搜索引擎的算法和数据结构,那么奠定了Google后台的集群系统,也就是我们今天耳熟能详的Google云计算平台,就是 Jeffrey Dean 和Sanjay Ghemawat这两位。

云里雾里的云计算 <wbr>【6】

Jeffrey Dean, Ph.D Courtesy http://research.google.com/people/jeff/jeff.jpg

云里雾里的云计算 <wbr>【6】

Sanjay Ghemawat, Ph.D Courtesy http://research.google.com/people/sanjay/sanjay.jpg
但是,只读这么几篇论文是不是就足够了呢?
No!
对比一下传统的单机的操作系统,如果把GFS理解为云计算版的文件系统,把MapReduce理解为云计算版的进程管理,把Chubby理解为云计算版的synchronization。
缺了什么?
1. Memory management。2. Scheduling。
为什么不列举这两个方面的论文,方便大家阅读?
因为Google没有发表。或许是Google把这两个方面的技术,视为Google云计算的核心机密,所以才没有发表论文公开介绍。
读完论文后,想构建一个云计算平台,是不是必须写程序,从头实现?
No!
Hadoop是一个开源项目,把前面提到的几个Google式云计算技术,用Java实现了。
我们不妨站在Hadoop台阶上,把未尽的事业推向前进。前进方向,
1. Memory management。2. Scheduling。