第1章
虚拟化与云计算
本书是一本以KVM为例,讲解虚拟化技术的书。可是看到这一章的标题,有读者会问:虚拟化为什么会跟云计算扯到一起去呢?其实,作为两个时下比较热门的技术,它们之间有着密不可分的千丝万缕的联系。本章将试图为读者理清它们之间的关系,从简单介绍云计算的概念开始,逐步解释虚拟化技术在云计算中的作用,并对当前流行的虚拟化解决方案进行一些简单的对比。
1.1 云计算概念
云计算是一个本世纪初才方兴未艾的热门名词,其本身是由Google前首席执行官埃里克?施密特(Eric Schmidt)在2006年8月9日的搜索引擎大会(SES San Jose 2006)上首次提出的。在此之后,云计算变得炙手可热,很多公司趁势宣传,号称自己是先进的云计算公司。加之业界也一直没有对云计算形成一个统一的定义,各种各样的云变得“乱花渐欲迷人眼”。抛开形形色色的宣传,本书试图为读者一步步理清云计算的真实面目。
1.1.1 发展历史和现状
虽然云计算的提出距离现在还只是短短的几年,但是云计算并不算是个彻底的新事物,因为早在它之前已经有各种类似或关联的概念被先后提出。早在60年代麦卡锡(John McCarthy)就提出了把计算能力作为一种像水和电一样的公用事业提供给用户。1999年,Salesforce.com提出的通过一个网站向企业提供企业级的应用的概念,已经颇有云计算的雏形。另外,20世纪90年代,为了充分利用空闲的CPU资源,通过网络互联搭建平行分布式计算平台,诞生了网格计算,例如1999年出现的SETI@home[1]科学研究项目。在网格计算中,将一个大型的计算任务拆分,分配给各个网格终端计算然后组合的思想,与云计算中的MapReduce技术不谋而合。
这些早期的概念虽然与云计算相关,但是要么碍于当时的计算机和网络技术,要么只是作为一种研究项目,始终没有能够被广泛推广并形成规模。然而,在本世纪初,计算机网络的大量普及和Web数据中心的建立,为云计算提供了必要的硬件准备。
在现有的被大家熟知并使用的共有云计算平台中,最著名的是由Amazon(亚马逊)和Google(谷歌)公司提供的服务。
Amazon使用弹性计算云(EC2)和简单存储服务(S3)为企业提供计算和存储服务。收费的服务项目包括存储服务器、带宽、CPU资源以及月租费。月租费与电话月租费类似,存储服务器、带宽按容量收费,CPU根据时长(小时)运算量收费。Amazon把云计算做成一个大生意并没有花太长的时间:不到两年时间,在Amazon上注册的开发人员就达44万人,还有为数众多的企业级用户。云计算是Amazon增长最快的业务之一。Amazon的财报数据显示,在其2012年收入中,云计算相关业务的收入已经高达21亿美元。
Google则当数最大的云计算的使用者。Google搜索引擎就建立在分布在全世界200多个地点、超过100万台服务器的支撑之上,这些设施的数量正在迅猛增长。Google地球、地图、Gmail、Docs等也同样使用了这些基础设施。对于Google Docs[2]之类的应用,用户数据会保存在互联网上的某个位置,可以通过任何一个与互联网相连的系统十分便利地访问这些数据。Google于2008年4月推出了Google App Engine(GAE)云计算服务,GAE是采用“平台即服务”(PaaS)的云计算模式,可以让第三方开发者在GAE平台上快速地开发自己的Web应用程序,而且GAE还将开发者的Web应用程序部署在Google全球的数据中心。Google还于2012年6月底发布了自己的“基础设施即服务”(IaaS)模式的云计算平台—Google Compute Engine(GCE),GCE的底层采用的是KVM虚拟化技术,它提供了与亚马逊EC2类似的云计算服务。
随着云计算的价值被不断发掘,越来越多的大公司开始加入到研究和部署云计算技术的阵营。
2008年2月1日,IBM宣布将在中国无锡的太湖新城科教产业园为中国的软件公司建立全球第一个云计算中心。
2008年7月29日,雅虎、惠普和英特尔宣布一项涵盖美国、德国和新加坡的联合研究计划,推出云计算研究测试床,推进云计算。该计划要与合作伙伴创建6个数据中心作为研究试验平台,每个数据中心配置1400个至4000个处理器。这些合作伙伴包括新加坡资讯通信发展管理局、德国卡尔斯鲁厄大学Steinbuch计算中心、美国伊利诺伊大学香宾分校、英特尔研究院、惠普实验室和雅虎。
2010年7月,美国国家航空航天局和包括Rackspace、AMD、Intel、戴尔等支持厂商共同宣布“OpenStack”开放源代码计划,微软在2010年10月表示支持OpenStack与Windows Server 2008 R2的集成,而Ubuntu已把OpenStack添加到Ubuntu 11.04版本中。
2011年2月,思科系统正式加入OpenStack,重点研发OpenStack的网络服务。
1.1.2 概念
云计算自从提出,一直没有一个明确而统一的定义。维基百科对云计算做了如下的描述[3]:云计算是一种通过因特网以服务的方式提供动态可伸缩的虚拟化的资源的计算模式(Cloud computing is a style of computing in which dynamically scalable and often virtualized resources are provided as a service over the Internet)。美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件和服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互(Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction)。
也有人基于云端计算的实现方式,认为云计算是分布式计算技术的一种,其最基本的概念是,透过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再交给由多部服务器所组成的庞大系统经搜寻、计算分析之后将处理结果回传给用户。透过这项技术,网络服务提供者可以在数秒之内,处理数以千万计甚至亿计字节的信息,实现和“超级计算机”同样强大效能的网络服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用。
1.1.3 云计算模式
云计算是推动IT转向以业务为中心模式的一次重大变革。它着眼于运营效率、竞争力和快速响应等实际成果。这意味着IT的作用正在从提供IT服务逐步过渡到根据业务需求优化服务的交付和使用。这种全新的模式将以前的信息孤岛转化为灵活高效的资源池和具备自我管理能力的虚拟基础架构,从而以更低的成本和更好的服务的形式提供给用户。IT即服务将提供业务所需要的一切,并在不丧失对系统的控制力的同时,保持系统的灵活性和敏捷性。
云计算的表现形式多种多样,简单的云计算在日常网络应用中随处可见,比如腾讯QQ空间提供的在线制作Flash图片,Google的搜索服务,Google Docs和 Google Apps等。目前,云计算的主要服务形式有:SaaS(Software as a Service,软件即服务)、PaaS(Platform as a Service,平台即服务)和IaaS(Infrastructure as a Service,基础设施即服务)。
1. 软件即服务
SaaS提供商将应用软件统一部署在自己的服务器上,用户根据需求通过互联网向厂商订购应用软件服务,服务提供商根据客户所定软件的数量、时间的长短等因素收费,并且通过浏览器向客户提供软件的模式。这种服务模式的优势是,由服务提供商维护和管理软件,提供软件运行的硬件设施,用户只需拥有能够接入互联网的终端,即可随时随地使用软件。在这种模式下,客户不再像传统模式那样花费大量资金在硬件、软件、维护人员上,只需要支出一定的租赁服务费用,通过互联网就可以享受到相应的硬件、软件和维护服务,这是网络应用最具效益的营运模式。对于小型企业来说,SaaS是采用先进技术的最好途径。
目前,Salesforce.com是提供这类服务最著名的公司,Google Docs、Google Apps和Zoho Office也属于这类服务。
2. 平台即服务
PaaS把开发环境作为一种服务来提供。这是一种分布式平台服务,厂商提供开发环境、服务器平台、硬件资源等服务给客户,用户在其平台基础上定制开发自己的应用程序并通过其服务器和互联网传递给其他客户。PaaS能够为企业或个人提供研发的中间件平台,提供应用程序开发、数据库、应用服务器、试验、托管及应用服务。
Google App Engine、Salesforce的force.com平台、八百客的800APP是PaaS的代表产品。以Google App Engine为例,它是一个由python应用服务器群、BigTable数据库及GFS组成的平台,为开发者提供一体化主机服务器及可自动升级的在线应用服务。用户编写应用程序并在Google的基础架构上运行就可以为互联网用户提供服务,Google提供应用运行及维护所需要的平台资源。
3. 基础设施即服务
IaaS即把厂商的由多台服务器组成的“云端”基础设施,作为计量服务提供给客户。它将内存、IO设备、存储和计算能力整合成一个虚拟的资源池为整个业界提供所需要的存储资源和虚拟化服务器等服务。这是一种托管型硬件方式,用户付费使用厂商的硬件设施。例如Amazon Web服务(AWS)、Google的Google Compute Engine、 IBM的BlueCloud等均将基础设施作为服务出租。
IaaS的优点是用户只需低成本获得所需的硬件资源,按需租用相应计算能力、存储容量、网络带宽,而且省去了硬件运维方面的成本,大大降低了用户在硬件上的开销。
1.2 云计算技术
云计算的兴起,改变了现有的以本地计算为主的应用模型。用户不再需要付费购买软件并将其安装到本地的计算机中执行。取而代之,大量的计算任务,由客户端通过网络发起,在云计算提供商的数据中心的服务器集群上进行计算,其结果经由网络返回,在客户端进行呈现。新的计算模型的提出,必然伴随着新的问题需要解决。在云计算的环境下,不同厂商对如何有效地管理云端的资源,为用户提供快捷的计算进行了大量研究,提出和总结了一些行之有效的云计算技术。
1.2.1 MapReduce
MapReduce是Google开发的编程模型,它是一种简化的分布式编程模型和高效的任务调度模型,用于大规模数据集(大于1TB)的并行运算。严格的编程模型使云计算环境下的编程十分简单。MapReduce模式的思想是将要执行的问题分解成Map(映射)和Reduce(化简)的方式,先通过Map程序将数据切割成不相关的区块,分配(调度)给大量计算机处理,达到分布式运算的效果,再通过Reduce程序将结果汇总输出。
MapReduce编程模型适用于很多应用,例如,分布式搜索、分布式排序、机器学习、基于统计的机器翻译等。在Google公司,互联网网页的搜索索引也是用MapReduce技术计算生成的。
MapReduce目前已经有基于各种不同计算机编程语言的库实现,其中相当流行的是有Apache基金会的用Java语言开发的开源的Hadoop。
1.2.2 资源管理平台
云计算资源规模庞大,服务器数量众多并分布在不同的地点,同时运行着数百种应用,如何有效地管理这些服务器,保证整个系统提供不间断的服务是巨大的挑战。
云计算系统的平台管理技术能够使大量的服务器协同工作,方便进行业务部署和开通,快速发现和恢复系统故障,通过自动化、智能化的手段实现大规模系统的可靠运营。
当前比较流行的云计算平台,主要有思杰的CloudStack,开源的Eucalyptus,VMware公司的vCloud Director和开源的OpenStack等。除了VMware公司的vCloud Director没有免费版本和只支持VMware自由的虚拟化产品以外,其余几个都提供免费版本,而且支持多个虚拟化产品。Eucalyptus和OpenStack还对亚马逊的API保持兼容,基于亚马逊API的所有的脚本和软件产品都可以轻松地进行私有云部署。
现在,CloudStack和OpenStack正处在激烈的竞争中,两者都希望自己能够成为开源社区云计算平台的事实标准。CloudStack在成熟度上面明显优于OpenStack,在培育客户方面也占了先机,但是背后的推手主要是思杰。OpenStack虽然是后起之秀,但是得到了诸如IBM、思科、英特尔、惠普和戴尔等大牌厂商的支持。究竟谁是未来的开源云平台老大,鹿死谁手,还未可知。
1.2.3 虚拟化
虚拟化是构建云基础架构不可或缺的关键技术之一。云计算的云端系统,其实质上就是一个大型的分布式系统。虚拟化通过在一个物理平台上虚拟出更多的虚拟平台,而其中的每一个虚拟平台则可以作为独立的终端加入云端的分布式系统。比起直接使用物理平台,虚拟化在资源的有效利用、动态调配和高可靠性方面有着巨大的优势。利用虚拟化,企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地利用原有的IT投资。
可以说,虚拟化是云端系统部署必不可少的基础。正是因为虚拟化在云计算中的重要性,本书将集中篇幅以KVM为例,为各位读者讲解虚拟化从技术理解到实践部署的方方面面。从下一节开始,本书将进入虚拟化技术的专题。
1.3 虚拟化技术
虚拟化是一个广义的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理、优化资源的解决方案。
如图1-1所示,我们可以将一般的计算模型抽象成为一定的物理资源和运行于之上的计算元件,它们之间通过定义的物理资源接口进行交互。随着计算机硬件技术的发展,物理资源的容量越来越大而价格越来越低,在既有的计算元件架构下,物理资源不可避免地产生了闲置和浪费。为了充分利用新的物理资源,提高效率,一个比较直接的办法就是更新计算元件以利用更加丰富的物理资源。但是,人们往往出于对稳定性和兼容性的追求,并不情愿频繁地对已经存在的计算元件做大幅度的变更。虚拟化技术则是另辟蹊径,通过引入一个新的虚拟化层,对下管理真实的物理资源,对上提供虚拟的系统资源,从而实现了在扩大硬件容量的同时,简化软件的重新配置过程。