云计算解码——技术架构和产业运营(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-15 23:57:00

点击下载

作者:雷葆华等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

云计算解码——技术架构和产业运营

云计算解码——技术架构和产业运营试读:

前言

“云计算”自从2007年被提出后,逐渐引起了人们的关注和热捧,一时间风起云涌——不仅Google、Amazon等互联网公司大举开辟这一新的业务领域,推陈出新,抢占领先位置;IBM、Dell等传统的IT厂商也被迫转型,不断调整公司组织和产品体系、开展大量的市场并购和技术研发工作、进行商业模式的创新,以图保持在IT市场的地位,抵御互联网公司的进攻;AT&T、Verizon等电信运营商作为传统的IDC和电信服务提供商也看到了机遇,一方面积极应用新的技术改造成果、整合已有的IT基础设施并提升IT管理和运营能力,另一方面也在探索如何提供基于互联网的云计算新业务。

目前,云计算市场上已经基本形成互联网公司、IT厂商和电信运营商3支主要力量,它们分别基于自身的优势,或主攻公有云市场,或抢占私有云市场,并且形成了不同的技术流派。例如,互联网公司由于自身业务需求构建了基于分布式技术的可支撑海量数据信息处理和存储的统一IT基础设施;IT厂商考虑的则是如何保护企业已有的IT投资,主推虚拟化技术作为IT资源的整合手段,以帮助企业更平滑地过渡到云计算。不过,不论是分布式技术还是虚拟化技术,都只是云计算实现的基本技术手段,真正使云计算“落地”的核心技术还是如何实现虚拟化资源和分布式集群规模化及统一管理,以形成具备良好的弹性和可扩展性的资源池(计算和存储云),同时将应用基于互联网交付给用户(交付云)。这就像程控交换技术和软交换技术,它们都是实现电话业务的技术,在设备技术成熟后,更重要的是要通过部署和组网形成一张规模较大的交换网,并实现全网统一管理和运营,才能真正提供优质的语音业务。因此,“云计算中没有新技术”的观点是有失偏颇的,只能说,在虚拟化、分布式技术基本成熟的环境下,云计算当前的关键技术已经聚焦到如何实现规模化运营上,这涉及对大量分布式资源的统一管理、调度、监控,以及运营所需的计费、网络管理、互连和业务开通等方方面面的技术。

虽然云计算进入国内要晚一些,但这并不妨碍云计算成为近两年国内IT领域最热门的方向之一——从一开始大家都在质疑云计算的发展,甚至有人认为这是国外的“阴谋”,到如今每个公司都争先恐后地把“云计算”的标签贴到自己的品牌和产品上;各类云计算研讨会、展会、基地、中心、联盟如雨后春笋般在全国各地出现;同时,市面上也出现了很多介绍云计算的概念、关键技术、典型服务、产业转型趋势的书籍,可以说是一派繁荣。但令人遗憾的是,国内目前还是说得比做得多——真正能够理解云计算的技术本质并勇于投入资源研发相关产品和平台的国内公司凤毛麟角,真正能够理解云计算的业务和市场本质并积极开展业务运营的服务提供商更是屈指可数。可以说,大部分人仍然在观望。他们希望看透云计算的本质,对云计算有更全面的认识,通过对更多国外成功案例的模仿和学习了解开展云计算业务运营的一些关键要素,用更多的积累和储备迎接国内云计算黄金时代的到来。

鉴于目前国内正处于云计算破茧而出的前夜,人们对云计算的概念已经接受,并且在技术、产品等方面也都加深了理解,但对云计算的总体架构、业务和技术的关系及云计算运营中的若干关键技术和影响因素则可能了解得比较少,国内也鲜有这些方面的令人满意的资料可以参考,因此,我们编写了这本《云计算解码》,试图拨“云”见日,从操作系统的视角全面解读云计算,让读者认识到云计算不是简单的技术应用,而是新的IT软件架构技术,同时明确云计算真正的技术创新在于IT服务化和规模化服务运营。通过阅读这本书,我们期待读者既能从宏观的角度更全面地认识云计算,同时也能从微观的业务实现角度去接触云计算,更多地了解云计算的应用与运营方面的内涵。

本书的主要内容包括云计算的背景和基本知识、云计算操作系统(技术和业务体系架构)、三类主流服务类型及其关键实现技术、影响云计算成功运营的关键要素、对网络的要求和影响及产业展望等。

第1章通过探寻IT的发展轨迹引出“云计算是第三次IT革命”这一观念,并通过对云计算的主要特征、业务类型及云计算可能对信息产业产生的影响等方面的介绍,让读者对云计算有一个初步的认识。

第2章介绍云计算的架构,从操作系统的视角去剖析云计算,并结合对IaaS、PaaS和SaaS的业务架构分析,让读者对云计算的总体技术和业务架构有一个清晰的认识。

第3章~第5章则分别从IaaS、PaaS和SaaS这3种业务类型及其关键实现技术的角度深入浅出地介绍相关业务的实现、部署和运营技术,并结合对典型厂商的典型业务产品案例的介绍,揭开云计算技术的神秘面纱,让读者不仅能对云计算的具体业务有更明确的了解,同时也能对业务的相关技术实现有更深入的理解。

第6章阐述云计算对产业的影响,希望通过对云计算发展驱动因素的梳理,让读者了解云计算是技术发展、商业模式创新、运营组织调整等因素共同促进的结果,而这也决定了云计算将成为破坏性的创新,对IT、互联网和电信行业都会产生深刻的影响,也将随之出现不同的产业竞争力量、技术流派和主流市场。

第7章是对云计算发展的展望,主要探讨了云计算的技术和产业发展趋势(即随着云计算技术的发展,人们将可以像使用水和电一样通过互联网使用计算和存储,在这个过程中,计算和存储服务将实现标准化),并对如何推进产业的发展提出了建设性的建议。

第8章着重从电信运营商的视角解析云计算,基于规模经济性原理提出云计算规模化运营的必要性,并通过云计算产业链分析了云计算发展的现状,全面介绍了云计算给运营商带来的挑战、冲击与机遇,给出运营商在云计算产业链中的定位。

本书部分内容和案例来自于作者的实践经验和研究成果。同时,本书的写作得到了中国电信集团公司和中国电信北京研究院的支持,并参考了大量的业界研究成果和相关技术材料,在此一并表示感谢。

云计算作为一个新的技术和产业,涵盖的知识范围较广,同时仍在快速发展和演进的过程中。由于作者水平有限,书中难免存在谬误,欢迎读者批评、指正。Chapter 1 云计算的基本概念了解云计算的相关概念是研究云计算的必要前提。本章首先探讨云计算的两个内涵(互联网、资源池)及其特征,帮助读者初步认识云计算;然后,比较云计算的三类服务(IaaS、PaaS、SaaS)与现有IT产品体系,明确它们的业务范围及关系;接着,引入公有云、私有云和混合云,并重点说明它们出现的背景;最后,全面分析云计算对IT产业和生态链的影响,强调云计算将给IT带来的深刻变革。1.1 云计算:第三次IT革命

工业革命的发生使人类从手工业、农业社会开始迈入机器工业、信息化社会。第一次工业革命以蒸汽机的发明为标志,第二次工业革命以电力、内燃机、交通工具的广泛应用为标志,第三次工业革命则是以信息技术的广泛应用为标志。人类目前正处于第三次工业革命的中后期,第四次工业革命(以新能源、生物技术、人工智能为标志)的初期。第三次工业革命是伴随着信息技术革命而发生的,它起始于20世纪40年代计算机的发明。其后,根本性地影响人类信息化进程的是第一次IT革命(个人计算机的出现)和第二次IT革命(互联网技术的广泛应用)。目前,人类又将经历第三次IT革命,这将持续较长一段时间。

IT(Information Technology)指的是支撑信息的产生、处理、存储、交换及传播的技术。计算机的出现将人类从繁重的计算工作中解放出来,突破了人脑的极限,大大提高了人们的工作效率。但早期的计算机由于硬件和软件的限制及高昂的价格,并没有得到广泛的应用,只是在科研机构等之中有小范围的应用。

20世纪80年代初出现的个人计算机(Personal Computer,简称PC)彻底改变了人类的工作方式,信息的产生和处理速度大大加快。特别是Wintel联盟,极大地加快了个人计算机的普及速度,计算机开始进入千家万户。开发人员在Windows平台上开发出了成千上万的应用程序,用户在计算机上不仅可以办公(Word、Excel等),还可以玩游戏、听音乐、看电影和处理照片。同时,Windows操作系统和Intel CPU芯片不断升级,个人计算机的功能越来越强,存储空间越来越大,能做的事情越来越多(处理能力甚至已经超越原来的小型机和大型机)。

20世纪90年代出现的互联网又一次颠覆了人类的想象力,它使信息的交换变得非常便捷,改变了信息传播、娱乐、商业交易、工作、沟通甚至政府和军队运作的方式。互联网的发展经历了Web 1.0时代(由网站编辑产生内容,用户单向获取信息)、Web 2.0时代(由用户产生内容,双向信息互动),目前正在进入Web 3.0时代(由机器产生内容,信息自动交互、自然语义交互等),信息量爆炸性地增长。另外,传统的用户终端也开始分化,除了PC、笔记本电脑继续发展外,开始出现上网本、平板电脑、智能手机等更“瘦小”、更便携、可随时随地接入网络的终端。同时,PC、笔记本电脑也从传统的以桌面应用为中心逐渐发展为以浏览器为中心,浏览器有替代操作系统的趋势。总的趋势是终端多样化、操作系统瘦小化、浏览器中心化、网络无线化、存储处理网络化,终端正在发生革命性的变化,而这个过程将与网络侧的另一个革命遥相呼应,即被称为“第三次IT革命”的云计算技术。随着终端需要处理的数据越来越多,以及浏览器逐步成为信息交换中心,更多的存储计算能力迁移了到网络上,更多的软件Web化,传统的B/S(Browser/Server,浏览器/服务器)模式正在向B/C(Browser/Cloud,浏览器/庞大的服务器集群)模式发展,后端的服务器开始演变为“云”(大规模分布式数据中心/服务器农场)。云计算技术使后端服务器能够以较低的成本实现规模化扩展,满足海量数据的存储和并发处理需求。

以PC为核心的第一次IT革命主要解决信息的本地处理问题,大部分的计算和存储都在本地发生,人们的多数活动都围绕着PC来完成,但是信息的分享和交换主要以光盘、软盘等方式为主,信息交互率很低。

以互联网为核心的第二次IT革命则极大提升了信息的交换和传播效率,同时也颠覆了人们使用PC的方式。PC的功能虽然还在增强,但人们已经开始更多地利用PC作为接入终端来使用互联网上的应用。第二次IT革命的初始阶段是以C/S(客户机/服务器)模式来实现本地PC和远端服务器的数据信息交互的,例如早期的文件传输、电子邮件、新闻组、BBS等应用。随着HTML的出现,Web发展为主流的信息交互方式,人们开始更多地通过浏览器来获取和分享信息,即B/S模式。

Web 2.0技术的发展则进一步改变了信息的产生和交互模式,普通人也可以参与信息的制造和传播。同时,信息的交互形式更为丰富,出现了博客、SNS、微博等新型的应用,用户规模不断扩大,互联网数据量出现了爆炸性增长,大型的互联网提供商不断地建设新的数据中心以满足海量数据的存储和处理需求。特别是像Google这样的搜索公司,其搜索引擎致力于收集全球范围内不断增加的数据,包括文本、图片、视频等,为此,Google构建了全球规模最大的数据中心以统一管理和调度庞大的分布式资源。在这个过程中,分布式技术逐渐成熟,更多的应用可以基于这些技术来提供,人们通过浏览器不再仅从某些服务器上获得数据和应用能力,而是可以从几千甚至几万台服务器的庞大集群上获得数据和应用能力,也就是从B/S走向B/C(Cloud,庞大的服务器集群),即所谓的“云计算”。这就是目前大家认识比较一致的“第三次IT革命”,它将彻底改变人们获取信息、软件甚至硬件资源能力的方式。它不仅会颠覆传统的PC桌面软件模式,也会颠覆人们生产软件、获取计算和存储能力的模式。它既是互联网发展的高级阶段,也意味着人类将进入一个崭新的IT时代,移动互联网、物联网这些互联网的新形态都将依赖于云计算的发展。1.2 云计算的特征

对于什么是云计算,众说纷纭,确实很难给出一个让大家都满意的答案,但我们却可以从一些特征去窥探云计算的内涵。

云计算的“云”包含两方面的内涵。(1)“云”指互联网,也就是说,云计算是通过互联网来使用的,这就决定了它具有互联网的很多特征。◎ 使用模式:可随时随地任意接入互联网的终端,即申请/注册即使用。◎ 业务模式:自助服务(用户不需要专业的支持就能使用),可定制,按需使用(弹性服务,例如一天可以搜索1次,也可以搜索10000次)。◎ 商业模式:免费或按使用付费,部分云计算业务也可以遵循互联网“免费+广告”的盈利模式。(2)“云”指计算池,也就是说,不是构建一两台机器的问题,而是要构建一定规模的集群,并且对该集群统一管理,形成“资源池”,才能满足云计算业务的需求。计算池需要具备以下几个特征。◎ 较大的规模:如果系统具备良好的可扩展性,一开始不一定要达到很大的规模。但考虑到互联网流量的突发性,如果是基于互联网来提供云计算业务,就需要具备一定的规模才有可能满足基本的业务可用性(当资源不足时,用户申请就可能失败)。◎ 良好的可扩展性:互联网的业务特征要求云计算的计算池能实现高速扩展,以便在用户快速增长的情况下迅速满足需要。缺乏可扩展性对于云计算运营商来说可能是致命的,因为这既可能导致很高的管理成本,也可能导致很差的用户体验。◎ 良好的可伸缩性:与业务平台的可扩展性一样,针对每一个用户,业务的可伸缩性也是非常重要的。显然,当用户当前使用的计算能力不足时,可以很快申请获得更多的资源(对于线下模式,可能是用户采购新的机器,然后替换或组成集群),这是用户按需使用的前提。通过实现资源虚拟化能够提供较高的可伸缩性。◎ 即时提供:这种“即时”是相比传统IT的获取时间而言的,并且由于在互联网上提供云计算服务都是以软件的形式提供计算和存储能力的,因此,云计算运营商应具有非常强大的批量提供能力。例如,以前要购买、安装、配置1000台PC服务器可能需要几周甚至更长的时间,但通过云计算模式,可能只需要几小时甚至几分钟。将硬件部署变为软件部署是实现即时提供的关键。◎ 更低的成本:这是支持互联网商业模式(即使不是免费)的关键。更低的成本来源于两个方面,一方面是硬件成本的降低及资源利用率的提高、开源软件的应用和自主开发能力的增强,另一方面是运营模式的变革、节能减排技术的引入及传统IT销售成本的降低。1.3 云计算服务

云计算的一个典型特征是IT服务化,也就是将传统的IT产品、能力通过互联网(如果是私有云就是内部网)以服务的形式交付给用户。那么,云计算到底可以提供哪些服务?可能一提到这个问题,很多人就想到了IaaS、PaaS、SaaS。没错,它们确实是云计算的3类服务(注意:不是3“个”服务),基本上对应于传统IT中的“硬件”、“平台”及“(应用)软件”。而更多的基于云计算提供的互联网应用,我们也可以将其划归至SaaS(如传统桌面软件,既包括Office,也包括播放器、下载软件等各类第三方软件)。

1.IaaS(Infrastructure as a Service,基础设施即服务)

传统IT的基础设施主要包括服务器、存储、网络等,因此IaaS主要指基于传统IT基础设施提供的服务,包括计算服务、存储服务和网络服务。计算服务既包括弹性虚拟机服务(代表传统的服务器),如Amazon的EC2;也包括分布式计算能力服务(代表传统的并行计算集群),如Amazon的Hadoop MapReduce服务。存储服务既包括文件系统/对象存储能力,如Google Storage和Amazon的S3;也包括数据库存储能力,如Amazon的SDB。提供存储的技术可以是传统的共享式存储系统,也可以是分布式存储系统。网络服务则包含在计算和存储服务中。

2.PaaS(Platform as a Service,平台即服务)

传统的IT平台主要是操作系统和开发平台。操作系统本质上也是一种开发平台,主要面向操作系统厂商内部的开发人员,而程序开发平台则主要面向外部的第三方开发人员。云计算的PaaS中的“平台”和“服务”指的是开放给第三方的应用开发与运行托管平台,如Google的App Engine和微软的Azure Plateform。

3.SaaS(Software as a Service,软件即服务)

传统的软件既有面向个人的桌面软件,也有面向企业的服务器软件。在云计算的SaaS服务中主要包括典型的办公软件服务和管理软件服务,如Google的Google Apps(包括Google Docs、Google Calendar等)、Salesforce的CRM服务、Zoho的Office软件服务及NetSuite的管理软件服务(CRM/ERP/电子商务平台)。

在很多实现方案中,PaaS基于IaaS,也就是说,PaaS不仅是一个开发应用的平台,也包括托管应用运行的基础设施,例如第三方基于Google的App Engine开发的程序实际上要运行于Google的基础设施中(包括服务器实例、DataStore(BigTable)等),而基于PaaS开发的应用程序中有很大一部分属于SaaS(其中一部分是比较典型的互联网应用,例如博客、普通网站等)。当然,IaaS、PaaS和SaaS有一个共同点,就是它们都是基于传统的服务器、存储系统开发的,虽然有些提供商可能会对服务器、存储系统进行一些优化和定制开发工作,但并没有改变其基本架构,而IaaS、PaaS和SaaS都是在这些基础硬件之上通过特定的软件技术(例如虚拟化、分布式、多租户技术)来重新组织和架构,形成新的资源形态和视图,再按照不同层次的服务形式提供给用户,如图1-1所示。图1-1 Iaas、PaaS和SaaS1.4 云计算的类型

云计算一开始主要以基于互联网向企业外部用户提供服务为主,也就是以公有云为主。随着云计算技术和市场的发展,目前,私有云和混合云也成为云计算的类型之一。

1.公有云

公有云指的是面向公众提供的云服务,大部分互联网公司提供的云服务都属于公有云,例如Amazon的AWS、Google Apps/App Engine等,其主要特征包括基于互联网获取和使用服务、关注盈利模式、关注安全性与可靠性、具有强大的可扩展性和较好的规模共享经济性等。

2.私有云

由于公有云的一些局限性,例如数据存储在提供商的数据中心导致的安全性问题、由于系统庞大导致的稳定性问题、由网络带来的访问性能问题及对已有系统的集成能力较差问题等,私有云(也称为内部云)目前已经成为众多拥有较大IT资源和软件系统的企业用户的选择。私有云的特征包括面向内部用户、通过内部网络获得和使用服务、可扩展性受限、一般无盈利要求、提供成本较高(规模共享较差)。因此,在现有网络条件下,私有云的使用体验较好,安全性较高。但当出现突发性需求增长时,由于私有云规模有限,将难以快速地有效扩展。

3.混合云

由于公有云和私有云各有优缺点,未来的方向应该是将公有云和私有云进行结合。例如,Amazon推出的VPC(Virtual Private Cloud)使用户可以将数据保存在企业内部并且维持原有的应用系统和应用模式,同时也可以将内部资源“云”化,当出现突发性需求时通过一定的接口使用外部公有云的资源,从而满足企业对安全性、可扩展性和经济性的要求。1.5 云计算对信息产业的影响

IaaS降低了服务器、计算和存储资源能力获取的门槛,PaaS降低了开发者部署应用的门槛,SaaS则降低了用户使用软件的门槛。PaaS和SaaS致力于颠覆传统的软件开发、使用和提供模式,而IaaS致力于改变传统的计算、存储提供模式,它们都能使未来的IT格局产生巨大的变化,改变人们获得IT资源的方式。

首先是云计算对IT硬件的影响,这种影响又分为对用户的影响和对提供者的影响。对用户的影响指用户获取硬件产品的方式发生了变化。云计算使用户不需要投入大量成本购买、部署、维护、升级硬件,而可以通过使用服务的方式来获得硬件资源能力,更加灵活,可扩展性更高,也更经济。对硬件厂商而言,则面临着“洗牌”:合并、收购将不断发生,硬件不再按通用产品销售,传统硬件市场(包括服务器、存储、小型机等)将出现萎缩。一方面,新型硬件服务提供者(例如云计算提供商)带来了新的市场,越来越多的用户选择使用服务,而不是自购硬件。另一方面,新型硬件服务提供者本身的硬件资源可能是闲置资源(例如Amazon的云计算与其庞大的电子商务业务可以共享基础设施资源),是低廉的定制化通用硬件,而不是商业化的高性能硬件(例如Google的服务器是廉价的通用服务器),因此在成本上极具优势。同时,传统硬件厂商也难以从新型硬件服务提供商处获得高利润的订单。

其次是云计算对软件产业的影响。云计算的使命就是要颠覆传统的软件工业。微软以Windows统领着传统软件,目前仍然是绝对的垄断者,同时其在数据库(SQL Server)、办公软件(Office)、互联网软件(Outlook、IE、Live Messenger)、商业服务器软件(Exchange、SharePoint、CRM)等领域也都占据领先的位置。因此可以说,云计算就是要颠覆微软统领的整个传统软件产业的商业模式。

Salesforce应该算是实质性发起这个进攻的“第一人”。虽然Salesforce只是在CRM上取得了一定的成功,但千千万万的“Salesforce”如雨后春笋般不断涌现,分别在商业管理、协同工作、办公等领域异军突起,Zoho、NetSuite都是其中的佼佼者。这样的“星星之火”显然有“燎原”的可能。当然,真正让传统软件巨头们胆寒的还是Google的加入。作为互联网的霸主,Google的实力无人敢忽略。Google先后推出了Gmail、Google Docs、Google Calendar等大受欢迎的基于互联网的日常办公应用。以Google、Salesforce为领头羊的SaaS厂商已经吹响了全面抢占应用软件市场的号角,微软正在面临着前所未有的挑战。当然,微软最近两年也奋起反击,其传统的利益和生态链不可能轻易被打破,SaaS厂商成功的难度之大可想而知。

不过,Google、Salesforce要想真正在市场上替代微软,还有很长的路要走,形成新的生态链至少还需要5年以上的时间。Google、Salesforce不约而同地选择构建PaaS平台就是基于对新型互联网软件应用生态系统进行培育的目的。微软的Windows之所以独霸天下,与Windows上能够运行成千上万的软件有关,这导致人们转变平台的代价越来越大。Windows 的成功反过来也保证了Office的成功,Windows和Office相当于PaaS和SaaS的关系。因此,推出PaaS的目的之一就是让更多的SaaS应用依赖于PaaS平台,只要在某个PaaS平台上的SaaS软件足够多,能够更便捷、更经济地满足用户的大部分需求,它就会被更多的用户使用,也会吸引更多的开发者加入,从而成为主流的PaaS平台,其实质就是创造新的生态系统、颠覆传统的生态系统。

另外,随着云计算的发展,定制化的开源Linux、Apache成为主要的服务器操作系统和中间件的选择,NoSQL(如BigTable、Cassandra、Dynamo等)、DFS(分布式存储)风起云涌,因此,传统的数据库、服务器操作系统和中间件市场也受到了极大的冲击。

最后,云计算对信息服务产业也会产生巨大的影响。传统的企业IT市场需要规划、咨询、集成服务,而进入云计算时代后,将会有越来越多的用户不再需要传统的信息服务(但传统业务和云业务的协同、集成可能会带来新的需求)。

总的来说,云计算将对信息产业产生革命性的冲击和影响,产业链、生态链会发生巨大的变化,产业格局将重新洗牌,新的参与者、新的巨头将会出现,更多的用户(特别是中小型企业、中小开发者和个人)可以从中获利,整个社会的信息化程度将得到极大的提升,同时也会带来极大的社会效益(绿色、环保、节能等)和企业效益(节省成本,专注于业务创新)。Chapter 2 云计算的整体架构云计算之所以以“云”命名,是因为它确实具有自然界中云的特征。从局部看,它呼风唤雨(按需分配)、聚散无形(动态扩放);从全局看,它广阔无边(海量资源)、运行有常(自主管理)。为了帮助读者清晰、深入地理解云计算的这些特征,本章首先将云计算系统与人们熟知的PC系统进行类比,提出云计算系统的层次化架构,然后针对云计算系统架构的各个层次对云计算的服务类型及关键技术进行介绍和剖析。2.1 云计算的系统架构

了解系统架构是对云计算进行深入研究的必要前提。但是云计算系统架构具有一定的复杂性,主要体现在系统对软/硬件资源的应用、管理、交付等方面的处理具有多种方式,因此针对不同的场景,其架构存在着可变性。

从本质上看,云计算系统和传统PC系统之间存在着可类比性,因此借鉴传统PC系统的层次化架构将有助于对云计算的系统架构进行剖析。2.1.1 传统的PC系统架构

出于技术实现和产业化生产的考虑,当前的PC系统具有清晰的层次化架构。

如图2-1所示,传统的PC系统架构通常由硬件资源、操作系统和软件3个层次组成。硬件资源层包括执行计算任务所需的处理器、内存、存储、网络等硬件资源。操作系统层包括用于进行软/硬件资源管理的操作系统软件。软件层可以被更详细地划分为系统软件层和和应用软件层:系统软件层包括如应用中间件、数据库软件、语言虚拟机等用于构建应用程序运行环境的软件及用于支持应用程序运行的库函数等软件资源,应用软件层指那些能够直接被用户运行或使用的软件。图2-1 传统的PC系统架构

在PC系统架构的各个层次中,操作系统层是整个架构的核心,其主要功能包括硬件资源管理、软件任务管理、文件系统管理等。

操作系统硬件资源管理的目标是对硬件资源进行操作并使之透明地被用户使用。硬件资源包括处理器、内存、I/O设备(例如类似磁盘的块设备、类似网卡的字符设备及其他常用外设)等。其中,对处理器的使用与控制主要通过对处理器上的任务进行合理调度来完成,对I/O设备的使用与控制主要通过硬件中断机制完成。在目前的操作系统中,特别值得关注的是操作系统对内存资源的管理,因为在PC系统中具有高速读/写和访问能力的内存资源比较少,所以操作系统会将在物理上互相隔离的内存资源虚拟成地址连续的内存空间来满足应用程序的需求。

操作系统软件任务管理的目标是使软件任务能够在执行过程中获得最优的资源份额。目前的主流操作系统普遍支持应用程序的进程/线程执行模型,因此,操作系统的软件任务管理就是要控制进程/线程的生命周期状态和资源分配情况,其中最重要的是要解决进程/线程的调度问题,即哪个任务要以什么样的顺序被执行、执行时间是多长等。另外,随着底层硬件资源提供了对多核处理器的支持,在多个进程/线程同时执行的环境中如何确保系统的一致性,也是操作系统软件任务管理中需要解决的关键问题。

操作系统的文件系统管理的目标是屏蔽底层的存储资源细节,使用户能够方便地以文件形式访问存储资源。其实,文件系统就是一种存储资源管理机制,它对底层硬件存储资源进行了高层抽象,将其以文件的形式提供给用户使用。用户在利用文件系统对文件进行操作时,只需要通过文件名称、文件元数据(例如文件修改时间、文件长度等)等逻辑信息即可完成对存储资源的利用和管理,无须考虑底层硬件的实现。2.1.2 云计算的系统架构

虽然业界对云计算系统的表述有多种不同的观点,但是从本质看,“云”可以被视作一台能力超强的大型计算机。这台依托在网络之上的计算机,拥有海量的硬件资源,具有强大的资源管理能力和应用承载能力,能够高效地运行应用软件。因此,云计算系统和传统的PC系统具有可类比性,如图2-2所示。图2-2 云计算系统和传统PC系统架构对比

通过借鉴传统的PC系统架构特征并进行相关功能的类比,就可以建立云计算系统的层次化架构。

图2-2中的两个架构的最底层都是用于支撑上层软件执行的硬件资源层。但与传统PC系统不同的是,云计算系统在这一层中除了具有传统的物理硬件资源外,还具有另外一类特别重要的虚拟化资源。这些基础资源以“池”的方式存在,这意味着它们是“取之不尽,用之不竭”的,能够实现资源的按需配给。传统PC系统的硬件资源组织形态是彼此隔离、相对独立的,每台PC都具有独享的、通过总线在系统内部互连的处理器、内存、磁盘等资源。而云计算系统的目标则是资源规模最大化。它通过网络连接了大量的计算资源和存储资源,进而对它们进行统一的管理。相比物理硬件资源,虚拟化资源在管理上更具有便利性和灵活性,在构建云计算资源池时担当了非常重要的角色。

无论是传统的PC系统还是云计算系统,在硬件资源层之上都需要一个承上启下的层次来提供对底层硬件资源的管理和对上层应用软件执行的支持,这就是操作系统层。和传统的操作系统一样,云操作系统的主要功能包括云基础资源组织与调度、云软件任务管理与控制、云文件系统管理等。

相比传统的操作系统,为满足对系统中的“池”化资源进行统一管理的需求,云操作系统对下层的云基础资源的管理更具复杂性。海量的资源(包括物理硬件资源和虚拟化资源)是云计算系统的优势。特别是虚拟化资源,因为它屏蔽了底层硬件的实现细节,所以更便于管理。这些资源在被使用时可以具有多种灵活的组织方式,总的说来可以分为两类:一类是虚拟机,即将相关的计算资源和存储资源按照传统PC系统的硬件资源层的构成方式组建成一个相对封闭的虚拟机硬件环境;另一类是分布式集群,它在多台物理机或者虚拟机的基础上,进一步利用网络资源将这些资源互连,构成分布式集群,然后通过部署相关管理软件对集群进行统一管理。这两类不同的资源组织方式具有不同的粒度和不同的资源呈现方式,能够实现对硬件资源的有效管理,并为上层云软件的运行提供相应的支持。

云操作系统对软件任务的管理和控制受底层基础资源组织形式的影响。对于虚拟机而言,它的硬件环境在使用上与传统PC系统的硬件环境没有任何差异,通过安装传统的操作系统就可以支持上层传统软件的运行并对其进行管控;对于分布式集群而言,为了提高效率,其上的软件往往是分布式地运行在集群中的不同节点上的,并能通过网络进行通信,因此管控软件运行的复杂度更高。云操作系统对分布式软件的管控除了包括传统的软件任务生命周期管理外,还需要额外关注软件在分布式集群内的调度、通信、同步等问题,而云操作系统在解决这些问题时采用的方法会直接影响分布式集群上软件模型的设计与实现。

为了方便用户对存储资源进行访问和操作,与传统操作系统类似,文件系统也是云操作系统中不可或缺的重要组成部分。同样,根据底层云基础资源在组织形式上的差异,云操作系统的文件系统也有不同的类型。在虚拟机环境中,每台虚拟机的文件系统可以是传统PC操作系统中的文件系统,它在操作系统的控制下管理和应用本台虚拟机所属的磁盘资源;而在分布式集群中,则需要使用分布式文件系统对集群中所有的底层存储资源进行抽象,进而形成统一的文件资源视图供用户使用。无论是哪种形式的文件系统,都是一种对存储资源的管理机制,同时,还要为上层软件提供与文件访问、编辑相关的应用程序接口。

在如图2-2所示的架构中,云操作系统之上是云软件层。与传统的PC系统类似,云软件层也可以被更细地划分为云系统软件和云应用软件。

云系统软件层与传统操作系统中的系统软件层类似,都是由直接支持上层云应用软件执行的功能软件组成的。根据云操作系统层对基础资源进行管理时采用的不同的资源组织方式,云系统软件层的实现也有差异:对虚拟机而言,它提供的硬件环境和操作系统等软/硬件支持与传统PC系统相同,因此部署在其中的系统软件可以包括传统PC系统中的各类系统软件资源,例如应用服务器、数据库等;对分布式集群而言,它所呈现的是由多台传统PC连接而成的分布式集群,因此部署在其上的系统软件主要是用于支持分布式应用软件运行的分布式系统软件,例如分布式数据库等。分布式系统软件强调的是可扩放性,能够根据上层应用的规模进行动态的调整,依赖于底层云基础资源和云操作系统的支持。

云应用软件层也与传统操作系统中的应用软件层类似,它们的上面都运行着用户所需的应用软件。但是,传统PC系统中的应用软件往往只是利用本机资源,或者通过网络,在一个有限的范围内获取一些执行所需的数据。而在云计算系统中,随着硬件部署、资源组织、执行环境及用户需求的变化,应用软件的设计与实现都与传统PC系统有所差异。特别是用户需求的改变,对云计算系统中运行的应用软件产生了深刻的影响。

在参考传统PC系统架构的基础上建立云计算系统的层次化架构是行之有效的方法。根据图2-2的类比,可以发现,两个架构的相应层次在功能上具有相似性,同时,云计算系统具有很多自己的特点。层次化的架构可以帮助读者对云计算系统产生更全面、更清晰的认识,特别是有助于读者理解本书后续对云计算系统的服务模式和关键技术体系的更深入的剖析。2.2 云计算的分层体系

云计算是大量传统技术和新兴技术的融合与发展,同时又是软/硬件资源提供模式的创新。基于云计算的层次化系统架构,可以对规模庞大、功能繁复的云计算系统(特别是云计算服务体系和关键技术体系)进行剖析,如图2-3所示。图2-3 云计算的分层体系

云计算系统的构成包括物理基础设施、云计算服务及其实现和云计算运营3个重要组成部分,对各个部分的简述如下。◎ 物理基础设施:包括数据中心物理基础设施(例如服务器、存储、网络、电源、冷却、安保)及相关的管理技术,是承载云计算系统的基础,其中绿色节能技术是当前关注的热点。◎ 云计算服务及其实现:是云计算的核心,包括IaaS、PaaS、SaaS等各类服务模式及其关键支撑技术。◎ 云计算运营:包括与云计算服务运营相关的各项关键技术,例如云计算服务接入的认证、监控、统计、分析,云计算系统、用户数据和应用服务的安全性保证,以及云计算服务的计费、支付等。

本书将重点对云计算服务及其关键实现技术进行介绍和分析,基于云计算系统架构全面、深入地阐释各层次对云计算服务的支撑情况及面向云计算服务的关键技术体系。

与传统的PC系统主要面向的是应用程序层的开发者与使用者不同,云计算系统可以在从硬件资源到应用程序的各个层次上为用户提供服务。当前被业界普遍认同的云计算服务分为三类:基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS),这些服务能够对应到云计算系统的层次化架构中:IaaS服务主要在云基础资源层和云操作系统层(特别是虚拟资源管理部分)展开;PaaS服务主要在云系统软件层展开,同时,它需要依托云操作系统管理下的云基础资源;SaaS服务主要在云应用软件层展开。这些不同类型的服务各自具有不同的服务内容和服务交付方式,因此,在该架构的每个层次上都有相应的技术体系为在本层上开展的服务提供支持。

需要注意的是,为了更有效地实施云计算服务交付,实际的应用场景在实现时对相关层次技术的使用并没有非常严格的限定,它们之间往往存在着渗透和重叠,例如IaaS服务和PaaS都需要云操作系统的资源管理功能的有效支持。2.2.1 IaaS服务及其实现体系

IaaS服务是将云中的硬件资源(包括物理硬件资源和虚拟化资源)提供给用户的服务,支撑该服务的技术体系主要包括虚拟化技术和相关的资源动态管理与调度技术。

1.IaaS服务的典型应用场景

Amazon的EC2服务是一种典型的IaaS服务。在该服务中,服务提供商按照用户的需求为其提供虚拟服务器;用户可以通过网络访问虚拟服务器,并像使用物理服务器一样在其上安装和部署自己所需的软件。

为了有效地交付IaaS服务,服务提供商首先需要搭建和部署拥有海量资源(特别是便于管理的虚拟化资源)的资源池供用户随时使用。当获知用户需求后,服务提供商从资源池中选取用户所需的处理器、内存、磁盘、网络等资源,并将这些资源组织成虚拟机提供给用户。对应于云计算系统的层次化架构,IaaS服务的提供需要依赖资源池层和云操作系统资源管理层的关键技术。在资源池层,服务提供商通过使用虚拟化技术,将各种物理资源抽象为能够被上层使用的虚拟化资源,以屏蔽底层硬件差异的影响,并提高资源的利用率;在资源管理层,服务提供商利用资源管理软件根据用户的需求对基础资源层的各类资源进行有效的组织,以构成用户所需的服务器硬件平台,其中涉及基础资源的调度、整合等。

在使用IaaS服务时,用户看到的就是一台能够通过网络访问的服务器。在这台服务器上,用户可以根据自己的实际需要安装软件,不需要关心该服务器底层硬件的实现细节(例如资源的类型、分布位置等),也无须控制底层的硬件资源。但是,用户需要负责对操作系统、系统软件和应用软件等进行部署和管理。

需要指出的是,在实际的IaaS服务交付中,为了方便用户的使用,服务提供商往往会在操作系统层和系统软件层为用户提供增值服务,例如在为用户提供虚拟服务器的同时为其安装好操作系统和相关的中间件、数据库等系统软件。

2.IaaS服务的支撑服务体系

如图2-3所示,服务提供商以虚拟服务器的方式向用户交付IaaS服务,它的技术实现本质是在云操作系统层将下层的云基础资源以虚拟机的方式进行组织,其中的关键技术包括服务器虚拟化及相关的资源管理技术。

服务器虚拟化的目的是改善资源的利用率。目前,单台服务器的能力往往超过了单个用户/业务的需求,造成了大量的资源浪费和能量损耗。服务器虚拟化能够将一台物理服务器虚拟成多台虚拟服务器,供多个用户同时使用,并通过对虚拟服务器进行隔离封装来保证其安全性。服务器虚拟化的实现需要依赖处理器虚拟化、内存虚拟化和I/O设备虚拟化等更细节的硬件资源虚拟化技术,具体的内容请参见本书第3章。

存储虚拟化的目的是构建具有统一逻辑视图的存储资源池供用户按需使用。存储虚拟化将各个分散的存储系统进行整合和统一管理,并提供了方便用户调用资源的接口。另外,存储虚拟化能够为后续的系统扩容提供便利,使资源规模动态扩放时无须考虑新增物理存储资源(例如不同型号的存储设备)中可能存在的差异。存储虚拟化的实现需要针对不同的存储子系统进行特殊的考虑,具体的内容请参见本书第3章。

网络虚拟化的目的是满足在服务器虚拟化应用过程中产生的新的网络需求。服务器虚拟化使每台虚拟服务器都要拥有自己的虚拟网卡设备才能进行网络通信,运行在同一台物理服务器上的虚拟服务器的网络流量都统一经由物理网卡输入/输出。网络虚拟化能够为每台虚拟服务器提供专属的虚拟网络设备和虚拟网络通路,同时,在虚拟化层还可以利用虚拟交换机等网络虚拟化技术提供更加灵活的虚拟组网,具体的内容请参见本书第3章。

虚拟化资源管理的目的是将系统中所有的虚拟硬件资源“池”化,实现海量资源的统一管理、动态扩放,以及对用户进行按需配给。同时,虚拟化资源管理技术还需要对虚拟化资源的可用性、安全性、可靠性提供保障。

需要说明的是,虚拟化资源只是IaaS服务的重要交付方式之一,物理硬件资源的交付同样是IaaS服务的重要内容(例如用户可以直接在“云”中获得一台物理服务器并通过网络对其进行访问和使用),这也对云操作系统层的资源管理技术提出了更高要求,需要它能够同时对物理硬件资源池和虚拟化资源池进行统一的管理和调度。2.2.2 PaaS服务及其实现体系

PaaS服务是为用户提供应用软件的开发、测试、部署和运行环境的服务。这里的“环境”既包括那些用于直接承载应用软件的运行平台(例如应用服务器),又包括支撑软件运行的辅助系统软件(例如数据库)。支撑PaaS服务的技术主要是与分布式系统相关的关键技术。

1.PaaS服务的典型应用场景

Google的App Engine是一种典型的PaaS服务。在该服务中,服务提供商为用户提供了用于部署、运行应用软件的相关软件环境,用户可以通过网络将自己创建的或者从别处获取的应用软件部署到服务提供商的环境上运行。

为了有效地交付PaaS服务,服务提供商首先要为用户屏蔽底层的硬件细节,并对资源进行合理的组织,然后再在其上部署用于支撑应用软件运行的系统软件。对应于云计算系统的层次化架构,PaaS服务的提供需要以底层基础资源层为依托,更重要的是需要依赖云操作系统层和系统软件层的关键技术:首先在云操作系统层对基础资源层中的资源进行有效的组织,然后在此基础上进行系统软件的安装和部署。如第2.2.1节所述,云计算系统的资源组织方式有两种。其中的虚拟机方式,其上的执行环境与传统PC系统相同,并且通常在IaaS服务中一起提供,所以在此不做重点讨论。而分布式集群方式,则首先由云操作系统组织一批物理服务器或者虚拟服务器构成集群,然后再在集群上部署分布式软件系统作为上层软件的开发和执行环境,包括分布式集群管理、分布式程序开发环境、分布式文件系统和分布式数据库系统等。支撑PaaS服务的分布式软件系统要能高效地支持应用软件的执行,更重要的是,要能根据用户部署的应用软件的规模按需扩放。

在使用PaaS服务时,用户看到的是应用软件运行所需的完整的支撑软件环境,类似于传统PC系统的系统软件,PaaS服务提供应用中间件、数据库等功能供用户使用。为了利用这个环境,用户部署的应用软件需要使用该环境提供的接口进行编程。在应用的部署和运行过程中,除了可能要对应用的执行进行部分配置外,用户不必关心任何与操作系统和系统软件相关的问题,只需对他们部署的应用进行管理和控制。

PaaS服务消除了用户自己搭建软件开发平台和运行环境导致的成本和开销,但是应用软件的功能和性能会受到服务提供商提供的环境的约束。特别是当前各服务提供商提供的环境接口尚不统一,也影响了应用软件的跨平台移植性。

2.PaaS服务的支撑服务体系

服务提供商主要以分布式系统的方式向用户交付PaaS服务,它的技术本质是在云操作系统层以分布式集群的方式组织资源、部署相关的分布式软件系统,并将其作为系统软件,因此,支撑PaaS服务的关键技术是分布式系统技术。分布式系统技术主要包括分布式文件系统、分布式数据库、分布式计算模型、分布式同步管理等。虽然这些技术已有较长的研究历史,但是在云计算的背景下,它们在原有基础上又有了长足的发展。

分布式文件系统的目的是在分布式系统中以文件方式实现数据的共享。分布式文件系统实现了对底层存储资源的管理,屏蔽了存储过程的细节,特别是实现了位置透明性和性能透明性,使用户无须关心文件在“云”中的存储位置。与之前的分布式文件系统不同,支撑PaaS服务的文件系统需要具有更强的存储能力、更好的系统可扩放性和更高的可靠性。因此,一些满足云计算需求且具有特殊技术实现的分布式文件系统被提出,具体的内容请参见本书第4章。

分布式数据库的目的是利用分布式系统对结构化数据实现管理和共享。因为分布式文件系统更偏向于对非结构化的文件进行存储和管理,所以分布式数据库是分布式文件系统的有益补充,因为它能够便捷地实现对数据的随机访问和快速查询。与之前主流的基于数据库来管理系统的关系型数据库不同,一类具有更好的系统可扩放性和更高的操作性能的基于分布式文件系统的数据库技术被提出,具体的内容请参见本书第4章。

分布式计算模型的目的是充分利用分布式系统进行高效的计算。之前的分布式并行计算模型普遍采用将数据移动到计算节点进行处理的方法,但是在云计算系统中,分布更为广泛的计算资源和存储资源通过网络互联互通,在进行数据密集型应用时,海量数据的移动将导致巨大的性能损失,因此,一些更适合于云计算场景的分布式计算模型被提出。它们依赖于底层分布式文件系统的支持,能够通过把计算移动到存储节点的方式完成数据处理任务,具有更高的性能,具体的内容请参见本书第4章。

分布式协同管理的目的是确保系统的一致性。因为云计算系统中的所有资源都分散在网络中,一旦由于网络出现异常导致通信不同步,将会造成数据操作的不一致,进而严重影响系统的正常运行。针对支撑PaaS服务的分布式系统的松耦合特性,分布式协同管理技术也有一些特别的设计,具体的内容请参见本书第4章。

总的来说,之前的分布式系统技术在应用时非常强调过程的一致性,因为它们关注的是解决计算密集型(例如迭代计算)问题;而支撑PaaS服务的分布式系统技术在考虑了网络因素的影响后,将维护系统的高可用性作为首要的选择,同时更关注结果的一致性。2.2.3 SaaS服务及其实现体系

SaaS是通过网络将在“云”中运行的应用软件的功能交付给用户的服务,它的交付依赖于云计算架构中下层的必要支持,支撑该服务的技术主要包括用于改善服务交付体验的多租户技术和Web呈现技术等。

1.SaaS服务的典型应用场景

Salesforce是一家典型的SaaS服务提供商,在为用户提供服务的过程中提供在“云”中运行的应用软件,供用户随时接入。用户只需要通过浏览器调用相关的Web服务接口,就可以直接使用应用软件的相关功能。

为了有效地交付SaaS服务,服务提供商首先需要部署软/硬件执行环境,然后针对用户的需求,根据支撑程序执行的底层软/硬件的安装和部署情况,对软件进行设计和实现。对应于云计算系统的层次化架构,应用软件层需要依赖基础资源层、云操作系统层和云系统软件层的支持。如果提供商在云操作系统层以分布式集群的方式组织基础资源,并在系统软件层部署了分布式系统软件,那么应用软件层的软件必须进行分布式改造。服务提供商提供的应用软件运行实例能够同时被多个用户访问和使用,在接收到用户通过网络发送的服务请求后执行用户所请求的功能,并将结果返回给用户。另外,SaaS服务的另一个关键是要尽量保证用户能够获得与在本地运行应用软件一致的体验。

在使用SaaS服务时,大多数情况下用户无须对软件运行的各种细节(包括所用软件的运行软/硬件环境及软件自身)进行管理和控制,而只需要关心一些为方便用户应用而进行的应用配置,通过简单的Web访问就可以获得需要的软件执行结果。云计算系统架构从下至上所有层次的开发、部署、维护等工作都由服务提供商完成,即使系统中发生了一些变化,提供商也要为用户提供一致的访问界面,以最大限度地方便用户的使用。

2.SaaS服务的支撑服务体系

服务提供商以Web服务的方式向用户交付SaaS服务,它的技术本质是在云计算系统架构的应用软件层进行面向Web服务的软件设计和开发,其中的关键技术包括多租户技术和Web呈现技术等。

多租户技术的目的是使不同用户能够通过网络共享同一个应用软件的执行实例。多租户技术要保证不同租户数据的隔离,确保用户访问服务的安全性,还要为用户提供彼此独立的应用体验,实现一定程度的定制化。因为一个执行实例需要被多个用户共享访问,因此用于提供SaaS服务的软件在设计和实现时需要在数据库、应用服务和Web界面等方面进行优化,特别是多租户的横向扩放能力是应对海量用户压力的关键,具体的内容请参见本书第5章。

Web呈现技术的目的是使用户获得更好的应用体验,这也是衡量SaaS服务水平的重要指标。对于SaaS服务的用户而言,他们需要的是便捷的、基于Web的网络访问方式,同时,他们希望获得与在本地执行应用软件相同甚至更好的体验。因此,SaaS服务提供商需要在服务器侧利用更先进的Web呈现技术实现软件服务的功能展现,甚至可以设计必要的客户端,供用户在访问SaaS服务时使用,具体的内容请参见本书第5章。

SaaS服务位于云计算服务体系的顶层,它的有效交付离不开用于支撑IaaS服务和PaaS服务的相关层次的关键技术的支持。服务提供商需要在高效、灵活的软/硬件执行环境的基础上,根据底层软/硬件环境对软件进行设计和实现,才能为用户提供满意的SaaS服务。

云计算系统的服务类型和相关的支撑技术具有多样性和复杂性。利用云计算系统的层次化架构对它们进行全面、合理的剖析,是研究云计算的服务体系及其关键技术体系的历史、现状和未来发展的重要依据。2.2.4 云计算分层体系综述

云计算系统和传统PC系统一样,都具有四层系统架构,而且相应层次的功能具有相似性。与传统PC系统的底层硬件相比,云计算系统的底层基础资源是“池”化的物理硬件资源和虚拟化资源,具有“海量”的特征。云操作系统对下层基础资源的组织主要有虚拟机和分布式集群两种方式,并因此影响了它对上层软件的管控方式。云系统软件也因为受到云操作系统对云基础资源组织形式的影响,需要特别考虑在分布式集群上部署分布式软件系统,以保证应用程序的开发和运行。云应用软件层则在实现方式和访问模式上具有自己的特征,同时它也需要考虑底层软件环境的实现。通过对系统架构的类比分析,云计算系统中的云操作系统层与传统PC 系统中的操作系统层类似,它们都起到了承上启下的作用,是全系统的关键所在。

云计算可以在系统架构的各个层次上为用户提供相应的服务,已经获得广泛认同的IaaS、PaaS、SaaS服务体系都需要在对应的架构层次获得支持。目前,IaaS服务和SaaS服务具有比较成熟的服务模式,业界正在积极地探索PaaS服务。由云操作系统层和云系统软件层支撑的PaaS服务拥有广阔的应用前景,同时,它对上层SaaS服务的交付也有着深刻影响。

在云计算技术体系中,虚拟化及资源管理和调度技术是支撑IaaS服务的核心技术,分布式系统是支撑PaaS服务的核心技术,多租户和Web呈现是支撑SaaS服务的核心技术。相比较而言,虚拟化技术已经日趋成熟,能够有效地支持IaaS服务的交付,但是在IaaS资源的管控(特别是对物理硬件和虚拟资源的统一管理)上还存在问题。在面向PaaS服务的支撑技术中,针对云计算研发的新兴的分布式软件系统取得了较大的成功,但是还需要针对更广阔的云计算领域进行探索。在应用软件层,支撑SaaS服务的核心技术已经多有成功实践,但随着云计算系统架构中应用软件层之下各个层次的相关技术的演进,该领域可能还会出现新的技术。Chapter 3 基础设施即服务(IaaS)及其关键实现技术IaaS是为用户按需提供基础设施资源(服务器、存储和网络)的共享服务,是当前业界相对成熟的云计算服务形式。本章主要对IaaS的定义、特征进行阐述,同时对实现IaaS涉及的关键技术逐一进行分解和深入剖析,并对这些关键技术所处领域的相关知识进行介绍,描绘了IaaS技术体系的全景。最后,本章还对IaaS领域的领先者—— Amazon的代表产品EC2进行了介绍。3.1 IaaS概述

IaaS(Infrastructure as a Service,基础设施即服务)指将IT基础设施能力(如服务器、存储、计算能力等)通过互联网提供给用户使用,并根据用户对资源的实际使用量或占用量进行计费的一种服务。

通俗地说,IaaS服务看起来和普通的网站一样,也可以通过浏览器访问。但是与一般的信息类网站不一样的是,用户获得的不是信息,而是服务器、存储、计算能力等;与电子商务网站不一样的是,并不会有人将这台服务器送到用户家里(办公室),而是直接给用户一个IP地址和访问服务器的口令(或密钥),让用户通过互联网直接控制和使用这台服务器,这个过程往往只有几分钟,省去了用户采购、配置服务器,进行服务器托管、上架及分配IP地址等一系列烦琐的过程,使服务器的运维工作量大大减少——这就是一个典型的IaaS应用场景。

当然,IaaS 中提供给用户的服务器不是真正的物理服务器,而是虚拟服务器,我们称其为虚拟机。虚拟机其实是通过软件模拟出来的,但是对用户来说,它所表现出来的行为却与物理服务器一模一样,因此用户完全可以把它当作一台普通的服务器来对待。

回到上述的IaaS定义。在上述定义中有两个关键点。第一个是“I”,也就是说,IaaS提供的应该是“基础设施”,通俗地说就是传统的计算和存储设备。当然,这种设备可以是用软件虚拟出来的设备,提供商也可能将其与软件捆绑在一起提供给用户。但是,IaaS的本质是提供设备(能力)。其次是“S”,也就是说,这是一种服务。在这里,“服务”包括两个方面:从商业模式方面来说,IaaS 应该根据用户的实际使用量来收费,而不是传统的包月形式;从技术上来说,IaaS 应该向用户提供富有弹性的资源,用户需要则立即提供,用户释放则立即收回。

具体来说,IaaS应该有如下特征和优势。◎ 更低的使用门槛:用户可以以低成本租用的方式获得可用的计算资源,而不需要进行大量的硬件和软件采购。◎ 更好的可扩展性:用户可以根据需要动态增加或减少资源,而不必关心资源位于何处或者是否够用。◎ 更方便的管理:资源可直接通过互联网管理,不需要到资源所在机房实地操作,降低了管理成本。◎ 更灵活的使用:用户获得完全独立的服务器,并拥有管理员权限,因此用户可以不受限制地进行任何操作。◎ 更灵活的资费:所有的资源可以随时开始或停止使用,用户只需为自己使用的资源付费。

从IaaS的建设角度上看,构建一个面向公众用户的IaaS不仅要使用Web技术,更多的是要应用虚拟化技术,例如服务器虚拟化技术、存储虚拟化技术、网络虚拟化技术、虚拟化管理平台(即将这些技术整合在一起,并根据业务需要为用户提供服务的平台)技术。下面将着重对这些技术进行阐述。3.2 IaaS关键实现技术之服务器虚拟化

服务器虚拟化技术是指能够在一台物理服务器上运行多台虚拟服务器的技术,并且上述虚拟服务器在用户、应用软件甚至操作系统看来,几乎与物理服务器没有区别,用户可以在虚拟服务器上灵活地安装任何软件。除此以外,服务器虚拟化技术还应该确保上述多个虚拟服务器之间的数据是隔离的,虚拟服务器对资源的占用是可控的。3.2.1 服务器虚拟化概述

在服务器虚拟化技术中,被虚拟出来的服务器称为虚拟机(Virtual Machine,VM)。运行在虚拟机里的操作系统称为客户操作系统,即Guest OS。负责管理虚拟机的软件称为虚拟机管理器,缩写为VMM,也称为Hypervisor。

服务器虚拟化通常有两种架构,分别是寄生架构(Hosted)与裸金属架构(Bare-metal)。(1)寄生架构。

一般而言,在使用计算机之前,首先要安装操作系统,该操作系统称为宿主操作系统,即Host OS。如果采用虚拟机技术,则需要在操作系统之上再安装一个VMM,然后利用这个VMM创建并管理虚拟机。这种后装模式称为寄生架构,因为VMM看起来像是“寄生”在操作系统上的。例如,Oracle公司的VirtualBox就是一种寄生架构。(2)裸金属架构。

顾名思义,裸金属架构是指将VMM直接安装在物理服务器之上而无须先安装操作系统的预装模式。在安装了VMM之后,再在VMM上安装其他操作系统(如Windows、Linux等)。由于VMM“看起来”是直接安装在物理计算机上的,所以称为裸金属架构,例如KVM、Xen、VMware ESX。

目前,普遍认为裸金属架构的性能要比寄生架构高。很多资料都宣传说,裸金属架构是直接运行在物理硬件之上的,无须通过Host OS,所以性能更高。

图3-1为Xen的工作流程,其中有3个Domain。一开始,很多人会将Domain误认为是CPU的一种特殊状态,这是因为在很多文档里会用一些比较模糊的措辞,例如“此时,系统会进入Domain 0状态”,从而让人产生误解。其实,Domain在虚拟化技术里表示的不是CPU的状态,而是“域”,更通俗地说,就是一台虚拟机。图3-1 Xen的工作流程

虽然从图3-1上看,Xen是运行在硬件之上的,但实际上,Xen严重依赖于一个特殊的Domain,那就是Domain 0。其实,Xen在发布其裸金属版本的时候,里面就包含了一个裁剪过的Linux内核,它为Xen提供了除CPU调度和内存管理之外的所有功能,包括硬件驱动、I/O、网络协议、文件系统、进程通信等所有其他操作系统所做的事情。这个Linux内核就运行在Domain 0 里面。这就是为什么当启动裸金属架构版的Xen时会自动启动Domain 0。因为没有这个Linux内核,Xen将无法工作。事实上,基于裸金属架构的VMM中往往包含了一个经过修改的Host OS。

因此,裸金属架构其实并不说明VMM能够抛开Host OS在硬件之上运行。如果我们把图3-1中的Domain 0放到与Xen Hypervisor平级的位置,或者放到Xen Hypervisor下面,Domain 0就与寄生架构没有区别了,如图3-2所示。而事实上,即使是寄生架构的产品,例如VirtualBox,在Host OS里面也会有一个运行于核心的驱动程序,它可以直接与物理设备打交道。

如果仔细看图3-2,会发现Domain 1和Domain 2与Domain 0之间还有一些通信。这与传统的寄生架构一样,Guest OS有时也是需要访问Host OS的。所以,裸金属架构本身不会给Guest OS的性能带来任何提升。图3-2 寄生架构

从目前的趋势来看,虚拟化将成为操作系统本身功能的一部分。例如,KVM就是Linux标准内核的一个模块,微软的Windows 2008也自带Hyper-V。

下面将重点介绍服务器关键部件的虚拟化方法,包括CPU、内存、I/O的虚拟化。关于网卡的虚拟化方法详见第3.4节。3.2.2 CPU虚拟化

CPU虚拟化是指将单个物理CPU虚拟成多个虚拟CPU供虚拟机使用。虚拟CPU分时复用物理CPU,虚拟机管理器负责为虚拟CPU分配时间片,并同时对虚拟CPU的状态进行管理。

在x86指令集中,CPU有0~3共4个特权级(ring)。其中,第0级具有最高的特权,用于运行操作系统;第3级具有最低的特权,用于运行用户程序;第1级和第2级很少使用。在对x86服务器实施虚拟化时,VMM通常需要最高的特权级,从而占据第0级;而虚拟机中安装的Guest OS只能运行在更低的特权级中,因此它就不能执行那些只能在第0级执行的特权指令了。为了解决这一问题,在实施服务器虚拟化时,必须要对相关CPU特权指令的执行进行虚拟化处理,以消除虚拟化对Guest OS的运行造成的影响。

CPU特权指令的虚拟化有模拟执行和操作系统辅助两种方法,随着CPU硬件对虚拟化技术的支持,虚拟机中的操作系统基于硬件辅助的虚拟化技术正成为当前CPU虚拟化的主要趋势。

1.基于模拟执行的CPU虚拟化

在Guest OS的运行过程中,当它需要执行在第0级才能执行的特权指令时,会陷入运行在第0级的VMM中。VMM捕捉到这一指令后,将相应指令的执行过程用本地物理CPU指令集中的指令进行模拟,并将执行结果返回Guest OS,从而实现Guest OS在非第0级环境下对特权指令的执行。

CPU特权指令的模拟执行可以有多种方法,不同的方法具有不同的计算开销、实现性能及可移植性,典型的方法是解释执行和二进制翻译。解释执行的过程是:首先获得一条源指令,并对其所需的各个操作内容进行分析,然后执行相应的操作,待执行完成后,再取得下一条源指令,并按照前面的过程执行,这些步骤完全由软件完成。而二进制翻译则不同:它将一段源指令直接翻译成将被执行的目标指令,并将其保存,供重复使用,而不需要在指令执行过程中反复执行取指令和分析指令等过程。两种方法相比较,二进制翻译在初始时需要较高的开销用于指令翻译,但是在执行过程中的开销却得到了有效的降低。具体哪种方法更为适用,则要根据实际的指令执行情况进行选择。例如,如果程序中对同一指令段进行多次执行,那么二进制翻译将具有更高的性能。

基于模拟执行的CPU虚拟化特别适用于那些虚拟化CPU与本地物理CPU的指令集不同的应用场合。而对基于x86 CPU的服务器虚拟化来说,尽管虚拟机指令集与物理机指令集是相同的(x86指令集),但是Guest OS对特权指令的执行仍旧只能通过首先陷入VMM中,再由VMM在物理机上执行同一指令的方法来模拟。基于模拟执行的CPU虚拟化对特权指令的模拟执行需要较高的性能开销。早期的VMware采用的就是基于模拟执行的CPU虚拟化技术。

2.基于操作系统辅助的CPU虚拟化

基于操作系统辅助的CPU虚拟化不需要在程序运行过程中陷入VMM中进行相关的处理和操作,它直接对Guest OS进行修改,将其与特权指令执行相关的操作调用以Hypercall的形式改写。Hypercall类似于系统调用,但它不是针对操作系统进行操作的,而是用于直接和VMM通信,并在其管理下执行特权指令。

基于模拟执行的CPU虚拟化为Guest OS的运行提供了与物理CPU完全一致的硬件环境,是完全的虚拟化。而基于操作系统辅助的CPU虚拟化则不同,它提供了与真实的物理设备有一定差异的CPU指令集接口,然后通过改写Guest OS调用该接口,使Guest OS的相关操作都可以在底层硬件上直接实现,而无须额外的VMM模拟执行。因此,它的最大优势是能够有效地使Guest OS的运行获得与其在本地物理CPU上直接执行相接近的性能。但是,基于操作系统辅助的CPU虚拟化存在的最大问题在于它需要对Guest OS进行改动,这使它只可能对有限的开源操作系统提供支持,而无法支持更多非开源的商业操作系统(例如微软的Windows系列操作系统)。另外,即使是修改开源的Guest OS,也将是一项耗费人力、物力并且存在一定安全性和可靠性风险的事情,而且修改后的操作系统将只能与特定的VMM绑定,可移植性较差。

理论上,基于操作系统辅助的CPU虚拟化可以通过Hypercall的不同设计来实现(例如在VMM上实现Hypercall时采用相应的指令模拟执行的方法),为 Guest OS提供与底层物理CPU不一致的硬件环境,但这需要高昂的Hypercall开发代价和执行性能开销。因此,当前该类虚拟化方法还是普遍用于为Guest OS提供与底层物理CPU一致的硬件环境。早期的Xen采用的就是基于操作系统辅助的CPU虚拟化技术。

3.基于硬件辅助的CPU虚拟化

传统的x86 CPU不能有效地支持虚拟化,使相关的CPU虚拟化技术只能考虑采用软件层面的方法,从而导致了执行性能低或代码开发上的额外开销。随着硬件技术的发展,当前主流的x86 CPU开始在硬件层面上提供对虚拟化的支持,因此,基于硬件辅助的CPU虚拟化逐渐引起了人们的重视。

目前,x86 CPU的硬件辅助虚拟化技术主要包括Intel VT-x和AMD SVM,两者在实现的原理上具有相同之处。以Intel VT-x为例,它为x86 CPU增加了一个名为“VMX”的处理模式。在VMX模式下有两种状态,分别是“VMX root operation”和“VMX non-root operation”。其中,VMX root operation状态专为VMM的运行而设,它的行为和传统的不包含VT-x技术的x86 CPU相同;而VMX non-root operation状态则提供了一个在VMM控制之下的用于支撑虚拟机运行的CPU环境。无论是VMX root operation状态还是VMX non-root operation状态,都支持4个特权级,这就允许虚拟机中的Guest软件能够继续在从前的特权级上执行,同时也为VMM今后的发展提供了多个特权级的支持。在VT-x中,从VMX non-root operation状态到VMX root operation状态的转换称作“VM entry”,反之则称作“VM exit”。与VMX处理模式相对应,VT-x增加了一组专用的VMX指令。

在VT-x的应用过程中,CPU首先以正常处理模式启动,然后通过执行vmxon指令,使CPU进入VMX模式,并由VMM执行VMX root operation。这时,VMM可以为虚拟机设置环境并通过执行vmlaunch指令启动虚拟机。一旦启动虚拟机,CPU就将由虚拟机执行VMX non-root operation。在虚拟机执行过程中,如果需要进行一些与虚拟机管理相关的操作(例如资源的重新配置),那么虚拟机会将CPU的控制权让给VMM,通过执行vmcall指令使CPU重新进入VMX root operation状态。当VMM完成相关的管理操作后,会通过执行vmresume指令重新唤起虚拟机,并将CPU置于VMX non-root operation状态。因此,在一般情况下,CPU大部分时间都工作在VMX non-root operation状态下。当CPU希望退出VMX模式时,它通过执行vmxoff指令使所有的虚拟机依次关机,并返回正常模式。

基于硬件辅助的CPU虚拟化弥补了之前x86 CPU不能被有效虚拟化的缺陷。使用这类虚拟化技术,VMM位于比第0级更高的特权级中,且不会影响Guest OS对特权指令的执行。因此,它有效地避免了特权指令模拟执行产生的性能开销,也消除了操作系统虚拟化所需的对Guest OS的改写。但是,使用基于硬件辅助CPU虚拟化的主要问题在于,工作在VMX模式下的CPU在进行VMX root operation状态和VMX non-root operation状态的切换时,VM entry和VM exit过程需要消耗大量的CPU周期,成为性能的瓶颈。因此,当前的硬件虚拟化技术正在极力改善这一问题,主要是从减少每次切换的消耗周期数和切换的发生次数等方面入手。另外,不同厂商的硬件虚拟化技术尚缺乏统一的标准,这也是业界亟待解决的问题之一。

现在,主流的虚拟化产品都已经转型到基于硬件辅助的CPU虚拟化。例如,KVM在一开始就要求CPU必须支持虚拟化技术。此外,VMware、Xen、Hyper-V等都已经支持基于硬件辅助的CPU虚拟化技术了。3.2.3 内存虚拟化

内存虚拟化是指VMM通过维护物理机内存和虚拟机所见到的“物理内存”的映射关系,为虚拟机分配物理机的内存,使虚拟机看到的内存为从地址0开始的连续物理地址。

为实现内存虚拟化,内存系统中共有3种地址。◎ 机器地址(Machine Address,MA):真实硬件的机器地址,在地址总线上可以见到的地址信号。◎ 虚拟机物理地址(Guest Physical Address,GPA):经过VMM抽象后虚拟机看到的伪物理地址。◎ 虚拟地址(Virtual Address,VA):Guest OS为其应用程序提供的线性地址空间。

虚拟地址到虚拟机物理地址的映射关系记作g,由Guest OS负责维护。对于Guest OS而言,它并不知道自己所看到的物理地址其实是虚拟的物理地址。虚拟机物理地址到机器地址的映射关系记作f,由VMM的内存模块进行维护。

普通的内存管理单元(Memory Management Unit,MMU)只能完成1次虚拟地址到物理地址的映射,但获得的物理地址只是虚拟机物理地址,而不是机器地址,所以需要通过VMM来获得总线上可以使用的机器地址。但是如果每次内存访问操作都需要VMM的参与,效率将变得极低。为实现虚拟地址到机器地址的高效转换,目前普遍采用的方法是:由VMM根据映射f和g生成复合映射f·g,直接写入MMU。具体的实现方法有两种。(1)MMU半虚拟化(MMU Paravirtualization)。

这种方式主要为Xen所用,其主要原理是:当Guest OS创建新页表时,VMM从维护的空闲内存中分配页面并进行注册,以后Guest OS对该页表的写操作都会陷入VMM中进行验证和转换;VMM检查页表中的每一项,确保它们只映射属于该虚拟机的机器页面,而且不包含对页表页面的可写映射;然后,VMM会根据其维护的映射关系f将页表项中的物理地址替换为相应的机器地址;最后,再把修改过的页表载入MMU,MMU就可以根据修改过的页表直接完成从虚拟地址到机器地址的转换了。这种方式的本质是将映射关系f·g直接写入Guest OS的页表中,替换原来的映射g。(2)影子页表。

全虚拟化使用影子页表技术实现内存虚拟化。影子页表与MMU半虚拟化的不同之处在于:VMM为Guest OS的每一个页表维护一个影子页表,并将f·g映射写入影子页表中,Guest OS的页表内容保持不变。最后,VMM将影子页表写入MMU。

影子页表的维护将带来时间和空间上的较大开销。时间开销主要体现在由于Guest OS构造页表时不会主动通知VMM,VMM 必须等到Guest OS发生缺页时才通过分析缺页原因为其补全影子页表。而空间的开销主要体现在VMM需要支持多台虚拟机同时运行,每台虚拟机的Guest OS通常会为其上运行的每一个进程创建一套页表系统,因此影子页表的空间开销会随着进程数量的增多而迅速增大。

为权衡时间开销和空间开销,现在一般采用影子页表缓存(Shadow Page Table Cache)技术,即VMM在内存中维护部分最近使用过的影子页表,只有当缓存中找不到影子页表时,才构建一个新的影子页表。当前主要的全虚拟化技术都采用了影子页表缓存技术。3.2.4 I/O虚拟化

I/O虚拟化就是通过截获Guest OS对I/O设备的访问请求,用软件模拟真实的硬件,复用有限的外设资源。I/O虚拟化与CPU虚拟化是紧密相关的。例如,当CPU支持硬件辅助虚拟化技术时,往往在I/O方面也会采用Direct I/O等技术,使CPU能直接访问外设,以提高I/O性能。当前I/O虚拟化的典型方法如下。(1)全虚拟化。

VMM对网卡、磁盘等关键设备进行模拟,以组成一组统一的虚拟I/O设备。Guest OS对虚拟设备的I/O操作都会陷入VMM中,由VMM对I/O指令进行解析并映射到实际物理设备,直接控制硬件完成操作。这种方法可以获得较高的性能,而且对Guest OS是完全透明的。但VMM的设计复杂,难以应对设备的快速更新。(2)半虚拟化。

半虚拟化又叫做前端/后端模拟。这种方法在Guest OS中需要为虚拟I/O设备安装特殊的驱动程序,即前端(Front-end Driver)。VMM中提供了简化的驱动程序,即后端(Back-end Driver)。前端驱动将来自其他模块的请求通过VMM定义的系统调用与后端驱动通信,后端驱动收到处理请求后会检查请求的有效性,并将其映射到实际物理设备,最后由设备驱动程序来控制硬件完成操作,硬件设备完成操作后再将通知发回前端。这种方法简化了VMM的设计,但需要在Guest OS中安装驱动程序甚至修改代码。

基于半虚拟化的I/O虚拟化技术往往与基于操作系统的辅助CPU虚拟化技术相伴随,它们都是通过修改Guest OS来实现的。(3)软件模拟。

软件模拟即用软件模拟的方法来虚拟I/O设备,指Guest OS的I/O操作被VMM捕获并转交给Host OS的用户态进程,通过系统调用来模拟设备的行为。这种方法没有额外的硬件开销,可以重用现有驱动程序。但是完成一次操作需要涉及多个寄存器的操作,使VMM要截获每个寄存器访问并进行相应的模拟,导致多次上下文切换。而且由于要进行模拟,所以性能较低。

一般来说,如果在I/O方面采用基于软件模拟的虚拟化技术,其CPU虚拟化技术也应采用基于模拟执行的CPU虚拟化技术。(4)直接划分。

直接划分指将物理I/O设备分配给指定的虚拟机,让Guest OS可以在不经过VMM或特权域介入的情况下直接访问I/O设备。目前与此相关的技术有Intel的VT-d、AMD的IOMMU及PCI-SIG的IOV。这种方法重用已有驱动,直接访问也减少了虚拟化开销,但需要购买较多的额外硬件。该技术与基于硬件辅助的CPU虚拟化技术相对应。VMM支持基于硬件辅助的 CPU 虚拟化技术,往往会尽量采用直接划分的方式来处理I/O。3.3 IaaS关键实现技术之存储虚拟化

存储虚拟化是一种将存储系统的内部功能从应用、主机或者网络资源中抽象、隐藏或者隔离的技术,其目的是进行与应用和网络无关的存储或数据管理。虚拟化为底层存储资源的复杂功能访问提供了简单、一致的接口,使用户不必关心底层系统的复杂实现。3.3.1 存储系统概述

现代存储系统的体系结构如图3-3所示。共享存储模型主要包括3个部分,分别是用户应用、存储域和相关的服务子系统。其中,存储域是核心,包含多个层次,在运行在上层主机的用户应用与部署在底层的存储资源之间建立了普遍的联系;服务子系统是存储域的辅助子系统,包含一系列与存储相关的功能,如管理、安全、备份、可用性维护及容量规划等。图3-3 SNIA(存储工业协会)共享存储模型

存储域可以被细分为3个层次,分别是文件/记录层、块聚合层及存储设备层。其中,文件/记录层是上层应用与存储资源之间的接口,采用文件系统或者数据库等方式,能够屏蔽底层硬件信息并以文件或者结构化数据的形式为用户提供数据信息的存储访问能力。这些为上层应用提供的数据信息,无论是以数据库记录的形式还是以文件的形式出现,最终都将以连续数据字节的形式存储到磁盘上,这些连续的数据字节称为数据块(Block)。数据块的大小及如何将记录或者文件映射到数据块上的方式,将由块聚合(Block Aggregation)层或者存储设备(Storage Device)层完成。块聚合层主要用于将多个底层存储设备的存储资源块聚合为能够被统一的存储资源,其实现可以在主机系统、存储网络或者存储设备等多个位置上实施。但无论怎样,其目标都是要将数据块的物理位置与相应的逻辑描述关联起来。位于模型最下面的存储设备层,则主要对数据块存储的物理位置进行识别,并将数据块从真实的底层物理存储设备中读出或者写入。另外,存储设备层也可以直接为文件/记录层提供数据访问接口,能够独立完成逻辑描述和物理存储位置的映射,而无须经过块聚合层。

对于存储虚拟化而言,不同层次的虚拟化实现具有不同的目标:存储设备层的存储资源是最底层的物理设备,通过数据块存储地址的虚拟化,实现对存储内容的快速寻址;块聚合层的目标是将存储设备层的物理存储设备虚拟化,通过合理的组织,将其构建为能被统一访问的物理资源池;文件/记录层则进一步对物理资源进行抽象,将其虚拟化为逻辑资源,并为上层应用使用。3.3.2 存储设备层的存储虚拟化

存储设备层的存储资源指各个独立的存储设备。其中,磁盘是存储系统中最重要的存储设备,其虚拟化主要体现在数据块存储地址的虚拟化上,它是存储系统能够有效运作的重要基础。

磁盘虚拟化是一种初始的存储虚拟化类型。在存储系统的最底层,磁盘上的存储位置是由柱面(Cluster)、磁头(Head)和扇区(Section)等信息确定的,这些信息称作CHS信息。但是,因为不同容量的磁盘拥有的柱面个数不同,所以需要针对不同的硬盘设计专门的寻址方式。然而,这对于需要进行磁盘访问的操作系统和应用来说是肯定不可行的,因为这需要它们了解每种磁盘的物理特性,这在拥有大量可选硬件的前提下是不可能的事情。磁盘虚拟化技术解决了这个问题。它利用磁盘固件将磁盘的物理属性虚拟化。磁盘固件将 CHS 地址信息转换为具有连续编号的逻辑块供系统上层的操作系统、管理程序、应用程序使用,这就是逻辑块寻址。这样一来,磁盘的容量规模就可以简单地由磁盘上的逻辑块数量决定了。

磁盘虚拟化的另一个功用在于保证磁盘的零缺陷。在磁盘的生命周期中,有些存储块可能无法进行可靠的数据存储和获取坏块。一旦发现这种情况,磁盘固件会重新将这些坏块统一映射到一个空闲的磁盘块池中,使操作系统不再需要对磁盘上的坏块进行跟踪,也确保了主机看到的都是可用的零缺陷设备。

需要注意的是,在如图3-3所示的存储模型中,并没有涉及磁带等字符设备,这主要是考虑到磁带设备往往是作为备份设备存在于存储系统中的。虽然磁带设备的虚拟化也同样重要,但在本书中不做重点讨论。3.3.3 块聚合层的存储虚拟化

虽然存储设备层的磁盘虚拟化技术能够将单个物理磁盘设备虚拟成逻辑块地址供操作系统和上层应用使用,但单块磁盘设备的存储容量有限,为实现更多物理磁盘的聚合与统一访问,则需要应用块聚合层的虚拟化技术。块聚合层的目标是通过控制物理存储器并将它们聚合成一个具有足够容量、性能和可靠性的虚拟存储器,再将聚合成的虚拟存储器划分为多个小的磁盘驱动器分配给用户。用户无须知道逻辑存储单元和物理存储单元的区别,他们看到的只是能够满足他们应用需求的磁盘空间,实现了数据位置的透明化。

根据虚拟化过程中对数据管理信息和存储数据的不同访问方式,块聚合层的存储虚拟化技术可以分为带内虚拟化和带外虚拟化两种。在传统的共享存储访问中,服务器和网络存储设备之间的访问路径如图3-4所示。图3-4 服务器和网络存储设备之间的访问路径

网络存储设备包含数据管理信息(元数据)和数据本身,主机通过位于服务器和存储设备之间的存储网络路径访问元数据和数据本身。

当应用虚拟化技术时,虚拟化控制器需要同时抽象元数据视图和数据的物理位置。如果虚拟化控制器仍位于服务器和存储设备之间的传输路径上,即为带内访问。但是,虚拟化控制器可以将对元数据的访问路径和对数据的访问路径分开,实现带外访问。

如图3-5所示,从服务器的角度看,带内虚拟化变动最少,服务不需要通过存储网络去发现和连接多个存储设备,而只看到由虚拟化设备提供的巨大的单个存储资源。但是虚拟化控制器对元数据的控制是服务器与数据之间的必经通道,这使元数据部分成为提高性能和可靠性的瓶颈。带外虚拟化通过将对元数据的控制转移到传输路径之外,避免了带内虚拟化存在的问题,但要求每台服务器上必须安装虚拟化代理程序,以将I/O请求转发给带外设备来查询元数据。图3-5 带内虚拟化和带外虚拟化

结合存储网络的结构,带内虚拟化和带外虚拟化的区别体现在选择什么位置进行虚拟化管理上,可选的位置包括主机、存储网络和存储设备。

1.基于主机的存储虚拟化

基于主机的虚拟化可以通过在每台服务器上安装逻辑卷管理器(Logical Volume Manager,LVM)应用程序来实现。它隐藏了物理存储资源的复杂性,并向操作系统提供存储资源的逻辑视图。因为物理存储的抽象发生在服务器本身,因此就不存在分离的控制和数据传输路径了,也就避免了带内虚拟化带来的瓶颈和性能问题。主机可以通过多条路径到达共享存储,存储设备资源也可以任意组合。

其实,基于主机的存储虚拟化技术已经非常成熟,需要借助逻辑卷管理器进行。逻辑卷管理器已经成为操作系统的标准组成部分。这种存储方案的最大优势在于它的稳定性及对异构存储系统的开放性,因为操作系统的存在屏蔽了底层硬件的差异。但是,这种虚拟化技术的缺陷在于它是以单个服务器为中心的,这就意味着需要对每台主机单独进行手工配置和管理,导致了高昂的管理开销。

2.基于存储网络的存储虚拟化

基于存储网络的存储虚拟化将虚拟化控制器转移到了存储网络的核心部分。因为存储网络已经在所有的服务器和存储设备之间建立了连接,所以更容易透明地截获和处理存储请求,是一种带内虚拟化方法。这种方案不需要在主机上安装任何代理程序,也支持对各种物理存储资源的整合,它需要的仅仅是网络设备(例如专用的存储网络交换机)具有足够的处理能力。

基于存储网络的存储虚拟化对服务器完全透明,因此它非常适合异构的服务器环境并能最小化服务器的管理开销。同时,它对物理存储设备也完全透明,可以混合使用任何厂商的任何型号和种类的存储设备。但是,这类虚拟化方法中采用的网络设备可能成为新的瓶颈,因为原本网络中的交换任务相对简单,而一旦加入高性能的存储网络交换和复杂的虚拟化管理后,在性能保证方面将具有极高的难度。

3.基于存储设备的存储虚拟化

基于存储设备的存储虚拟化可以实现对服务器完全透明,用户无须在服务器上安装任何代理软件。同时,与网络虚拟化不同,它位于存储系统的后端而不是中间,所以避免了网络负担的增加,不会成为新的瓶颈。其实,从存储设备厂商的角度出发,存储设备是实施虚拟化技术的最佳位置,厂商可以根据自产设备的实际情况,为存储设备增加各种虚拟化能力,例如比较初级的RAID和镜像功能、比较高级的多阵列整合技术等。

因为有存储设备厂商的支持,基于存储设备的虚拟化可以做到功能全面和性能优化。但是,它的问题不在于技术,而在于市场推广。因为各个厂商针对自身设备的专有方案难以兼容,限制了其应用范围。

4.块聚合层存储虚拟化实例

在实际应用的存储系统中,直接附加存储(Database as a Service,DAS)和存储区域网络(Storage Area Network,SAN)采用的都是块聚合层的存储虚拟化技术,两者的区别在于:如果使用DAS存储系统,主机只能访问自己直接挂接的存储资源;而使用SAN存储系统,主机可以访问一个共享的存储网络中的所有存储资源。相比较而言,DAS的存储资源不具有可共享性,其使用场景(例如PC)只能被本机管理和使用,因此在规模、可扩展性等方面存在缺陷;而SAN存储系统将直接附加的连接换成更加灵活的网络互连,可以对存储进行整合、共享并将多台服务器进行集群,以获得高可用性,同时,网络的规模也具有一定的可扩放性,能够满足云计算对存储资源的需求。

DAS和SAN可以在多个不同位置采用相关的块聚合层虚拟化技术。在主机侧,DAS可以通过安装和部署LVM及软件RAID等存储资源管理软件,实现块聚合。当主机从应用程序处接收到需要写入存储介质的信息时,主机上的软件RAID会将数据分块并分散存储到主机直接挂接的多个磁盘上;而LVM则负责以卷、目录和子目录的方式为上层应用提供一致的数据视图。在存储设备侧,DAS可以通过在磁盘上安装RAID控制器等软/硬件设备实现块聚合,使存储数据的条块化处理不必在主机上完成。相比较DAS,SAN需要对更多的存储资源用于管理,因此其虚拟化技术具有更高的复杂性。例如,在存储设备层,不同厂商生产的不同型号的设备在进行虚拟化时存在着巨大差异,因此,如果SAN要在存储设备层对这些设备进行整合,就需要充分考虑设备虚拟化的兼容性和易用性。SAN在主机侧实现虚拟化的最大问题在于需要对分散安装在各台主机上的负责对存储网络进行共享访问的代理程序进行管理和维护。另外,与DAS不同的是,SAN可以在存储网络中实现虚拟化(例如在存储网络中使用SAN交换机对所有的存储请求进行处理),避免了主机侧虚拟化的管理开销,也实现了底层设备资源的透明化,但网络性能是其瓶颈。目前,市场上出现了很多SAN存储产品,但是能够用于实现异构存储整合的SAN方案并不多,典型的厂商和产品包括:在网络侧实现虚拟化的IBM的SVC,在主机侧实现虚拟化的Symantec的Veritas,在存储设备侧实现虚拟化的HDS的USP等。3.3.4 文件/记录层的存储虚拟化

文件/记录层的存储虚拟化的目标是使上层用户的应用能够更便捷地使用下层的存储资源,因此文件系统和数据库系统的虚拟化是这一层的主要技术。特别是文件系统虚拟化,能够使用户程序透明、高效地访问存储在远程的文件,在实际应用中非常重要。

最简单的文件系统虚拟化形式是网络远程文件系统,例如NFS和CIFS。在这种形式的虚拟化中,文件系统提供了专门的文件服务器用于管理网络中对文件的共享访问。这样的文件系统可以由网络中的很多主机共享;而这些主机上可能运行着不同的操作系统,它们可以使用与访问本地文件系统相同的机制对在文件系统中共享的文件进行访问。因此,一个应用或用户可以使用完全相同的接口访问文件而无须关心文件的物理位置。文件系统虚拟化隐藏了数据的位置,体现了存储虚拟化技术的“位置透明”这一重要特征。

在存储系统的实际应用中,网络附加存储(Network Attached Storage,NAS)系统采用的是文件/记录层的存储虚拟化技术。它使用部署在专用文件服务器上的文件系统管理底层的硬件存储资源,并由文件服务器通过网络协议为用户提供文件级的存储访问。和SAN类似,它能够为用户提供共享的存储资源。另外,它还能通过提供与用户本地文件处理接口一致的文件访问和操作接口支持异构用户的使用,极大地方便了用户。但是因为NAS系统需要采用网络协议进行文件传输,因此降低了传输过程中的有效载荷比和传输性能。由于NAS系统在易用的同时具有一定的价格优势,所以在业界有着广泛应用。

在对彼此独立的多个NAS系统进行整合,从而进一步虚拟出更大规模的NAS系统时,其关键在于将各个子系统中的命名空间交由文件服务器统一管理。然而,随着文件数量和来访主机并发连接数的增加,文件服务器容易成为整个系统的性能和可靠性的瓶颈。虽然当前已有多种方法可用于解决该问题(例如设立多个分布式的NAS文件服务器节点),但是因为NAS存储系统采用的是带内存储虚拟化技术,文件服务器位于数据传输路径上,使数据管理信息与数据存储访问始终不能有效分离。针对这一问题,在云计算背景下,一类不再基于专用存储设备和专用文件服务器的分布式文件系统被提出。这类系统由统一的管理节点管理和控制,以构建统一的文件名空间。同时,系统中的每个节点又具有独立的数据管理能力和数据存储能力,能够在不需要管理节点介入的情况下进行数据传输,实现了带外虚拟化,因此具有更高的传输效率和访问并发度支持,相关的内容将在第4章中进行深入阐述。3.4 IaaS关键实现技术之网络虚拟化

在面向公众服务的IaaS中,网络虚拟化是必不可少的部分。IaaS网络虚拟化技术分为两类:一类是以VPN、VLAN等为代表的传统网络虚拟化技术,主要侧重于网络侧的虚拟化,例如将多个网络虚拟成一个大的网络(如VPN),或者将一个大的网络虚拟成多个小的网络(如VLAN);另一类则是以虚拟网卡和虚拟网桥为代表的、随着云计算的兴起而发展的网络虚拟化技术,主要侧重于主机内部的网络虚拟化,例如将一块网卡虚拟成多块物理网卡。除此以外,随着云计算的兴起,网络设备厂商也推出了具备虚拟化功能的网络设备。3.4.1 网络虚拟化概述

网络虚拟化是将多个硬件或软件网络资源及相关的网络功能集成到一个可用软件中统一管控的过程,并且对于网络应用而言,该网络环境的实现方式是透明的。该网络环境称为虚拟网络,形成该虚拟网络的过程称为网络虚拟化。更具体的,如果一个网络不能通过软件被统一管理,而需要通过改变物理组网结构才能完成网络环境的改变,则不能被称作虚拟网络。

在不同的应用场景下,虚拟网络的架构是多种多样的。例如,对于一个企业内部的私有云环境来说,虚拟机的用户一般是企业内部员工,可信度较高,因此对网络安全性的要求相对较低;同时,对虚拟机的访问往往是从企业内部网络发起的,虚拟机也不需要为公网用户提供服务,因此网络架构的设计可以不考虑或较少考虑公网IP地址的管理问题。相反,如果是为公网用户提供数据中心业务,对这些问题都必须给予特别的重视。

不同的虚拟网络架构需要相应的技术作为支撑。当前,以VPN、VLAN等为代表的传统网络虚拟化技术已经非常成熟,而随着云计算的发展,很多新的问题不断涌现,对网络虚拟化提出了更大的挑战。对于IaaS服务而言,交付给用户的不再是物理机而是虚拟机。虚拟机的优势在于其更加灵活、可配置性更好,可以满足用户更加动态的需求。因此,网络虚拟化技术也必须跟随这一脚步,满足用户对更加灵活、更加动态的网络结构的需求,同时还必须保证这一灵活性的加入不会降低网络的安全性。

以一个实际应用场景为例:用户从“云”中租用了3台虚拟机,其中一台虚拟机作为前端Web服务器,另外两台虚拟机作为后端数据库服务器;前端Web服务器拥有两个IP地址,分别是用于被公网访客访问的公网IP地址和用于与后端数据库服务器通信的内网IP地址。因为虚拟机所在物理机的物理网络配置是相对固定的,所以如何根据用户需求在这3台虚拟机之间构建灵活的虚拟局域网是一个关键问题。另外,这3台虚拟机可能会和其他虚拟机共同部署在同一物理机上,如何保证数据不被窃听、不被伪造成为对网络虚拟化技术提出的新需求。

因此,在云计算环境下,网络虚拟化技术需要解决如下问题。(1)如何实现物理机内部的虚拟网络?(2)外部网络如何动态调整以适应虚拟机对网络不断变化的要求?(3)如何确保虚拟网络环境的安全性?如何对物理机内、外部的虚拟网络进行统一管理?

这些问题都是在云计算环境下产生的新问题,需要在主机网络虚拟化技术、网络交换设备虚拟化技术和IaaS服务实际运营等各个关键技术环节着手解决。3.4.2 传统的网络虚拟化技术

传统的网络虚拟化技术对于改善网络整体条件进行了诸多探索,并取得了很好的效果。虽然相关技术在云计算环境下仍将被广泛应用,但是鉴于它们已经在很多文献中被详尽论述,因此在这里主要介绍VPN和VLAN这两种典型的传统网络虚拟化技术。

1.VPN

虚拟私有网络(Virtual Private Network,简称VPN)是基于底层计算机网络之上的另一个计算机网络,其私有性表现在通过VPN传输的数据对于底层计算机网络而言是不可理解而且不可伪造的。

对于该底层计算机网络而言,VPN数据与其他网络数据没有区别。

就目前常见的应用场景而言,VPN往往是指在三层网络上建立一个虚拟且加密的二层或三层网络。例如,用户可以通过一台外网计算机与内网服务器之间的配合,建立一个虚拟子网,使该外网计算机获得内网IP地址,从而使该外网计算机获得与内网计算机一样的访问权限(如访问内网的某台文件服务器)。在大型组织中,VPN技术被广泛用于提高企业人员的办公效率并保证数据的安全性方面。

2.VLAN

虚拟局域网(Virtual Local Area Network,简称VLAN)的作用是使固定物理网络上的一组主机可以动态、可控地形成一个或者多个虚拟局域网,从而为上层应用或用户提供更灵活、更便利的组网方式。

而VLAN就是虚拟的LAN,其虚拟性主要是由交换机实现的。当主机发送一个包至交换机时,这个包里面会含有一个VLAN-ID属性,该属性向交换机表明自己属于哪个VLAN。如果该包是一个广播包,那么交换机则将这个包转发给所有属于VLAN-ID这个局域网的其他主机。不在VLAN-ID这个局域网中的其他主机,即使在物理上与交换机有相连接的链路,也不会收到这个包,就好像这两类主机处于不同的局域网一样。如果这个包不是一个广播包而只是一个点对点的数据包,那么交换机会检查这个包的目标MAC地址所对应的主机的VLAN。如果目标主机也属于VLAN-ID这个局域网就转发,否则不会转发,就好像这个局域网内没有目标主机一样,即使该主机物理上与交换机相连接。3.4.3 主机网络虚拟化技术

主机网络虚拟化是面向云计算的网络虚拟化技术的核心,它通过与传统网络虚拟化技术的配合,在实现虚拟网络的动态性、安全性等方面发挥了重要的作用。主机网络虚拟化技术主要包括虚拟网卡技术和虚拟网桥技术,它们都是针对单台主机上的相关物理网络设备的虚拟化技术,其典型的架构如图3-6所示。图3-6 典型的虚拟网络架构

每台物理机均有两块物理网卡,当前绝大多数PC服务器均满足这一标准配置。其中,一块物理网卡用于连接外网交换机,从而可以连接到互联网上;另一块物理网卡用于连接内网交换机,从而可以与其他内网服务器通信。在虚拟机内部也是如此,虚拟机会看到两块虚拟网卡,一块分配了内网IP地址,另一块分配了公网IP地址。而虚拟机对外发送的数据包的路由选择可以完全由虚拟机自身的路由配置决定。该架构可以采用传统的VLAN技术虚拟出很多虚拟网络。因此,即使是位于同一台物理机的两台虚拟机,也完全可以位于不同的VLAN中;反之,位于不同物理机的两台虚拟机,也完全可以属于同一个VLAN。

1.虚拟网卡

虚拟网卡是指虚拟机所看到的网卡,它是模拟器通过软件手段模拟出来的网卡。虚拟机中运行的操作系统(Guest OS)通过虚拟网卡与外界通信。当一个包从Guest OS发出时,Guest OS最终会调用该虚拟网卡的中断处理程序,而这个中断处理程序正是模拟器模拟出来的程序逻辑。在某些场景下(如Xen或VMware),模拟器被看作是VMM的一个模块;而在某些场景下(如KVM),模拟器是一个独立的软件。当模拟器收到一个包时,它会将这个包从虚拟机所在物理机的物理网卡发送出去,就好像是物理机自己发送的一样。

下面分别以KVM和Xen的实现原理为例,介绍数据从Guest OS发出的过程。(1)KVM的实现。

在KVM的实现中, 模拟器其实是一个叫做“QEMU”的独立软件,其层次关系如图3-7所示。图3-7 KVM的层次结构

虚拟机的物理网卡是由模拟器虚拟出来供虚拟机使用的。用户作为虚拟机的所有者,可以任意修改该网卡的各种配置,例如修改它的MAC地址等。由于该网卡的所有管理权限都在虚拟机用户手上,因此,该网卡不适合参与到整个虚拟网络的管理中。

位于最底层的是物理机的物理网卡。由于一台物理机的物理网卡是固定的,它的配置往往也是固定的,不能随意修改,所以无法灵活地改变来满足虚拟网络的灵活性。因此,该网卡也不会参与到虚拟网络的管理中。

最后,既能满足虚拟网络的灵活性,又完全由整个网络系统所控制的就只有物理机的虚拟网卡了。因为它是由软件控制的,所以比较灵活。同时,由于它不受用户控制,所以可以参与到对整个虚拟网络的控制中。在整个网络架构中,该网卡充当着虚拟机与外界之间的一道“墙”,它不仅是数据的收发通道,同时还负责数据流量控制、虚拟机的网络标识及网络安全等多种任务。可以说,它是整个网络虚拟化技术的核心组成部分之一。

当Guest OS需要对外发送一个网络包时,它将调用网络驱动程序,最终这一请求将会被“硬件”收到。如前所述,该“硬件”是虚拟硬件,是由模拟器实现的,因此,这个网络包最终由模拟器接收。当模拟器收到一个待发的包时,它可以决定是发包还是将包丢弃,这取决于模拟器的配置策略。但是模拟器对于Host OS而言是一个普通的进程,因此模拟器发包的行为与普通进程发包并没有什么区别。这样,虚拟机就将一个数据包通过模拟器发送出去了。对于物理机以外的网元设备来说,处理这个包与处理其他包没有任何区别。(2)Xen的实现。

采用半虚拟化技术的Xen在实现虚拟化I/O设备的时候,将设备驱动划分为前端和后端两部分,其中驱动前端部署在每个DomainU中,而驱动后端只部署在用于管理和控制虚拟机的Domain0中。因此,虚拟机对设备的访问流程为:首先向驱动前端发送请求,然后驱动前端将请求转发给Domain0,Domain0将从各台虚拟机处接收到的设备请求通过驱动后端发送给物理设备进行处理;相反的,从物理设备返回的处理响应(例如设备中断)首先经过驱动后端传送给Domain0,再由Domain0根据它维护的虚拟机设备请求记录将响应发送到相应虚拟机的驱动前端上,进而由相应的虚拟机进行处理。因此,Xen通过Domain0对虚拟机的设备请求进行统一的管理和调度,实现了设备虚拟化,满足了虚拟机对物理设备的共享需求。

Xen使用共享内存环实现对I/O设备的虚拟化。这个用于虚拟机间异步通信的描述符环上记录了各台虚拟机对网络设备的访问情况。另外,Xen还设立了事件通告机制,用于在虚拟机之间通告当前内存环上的请求发送和响应反馈情况,以对内存环的访问进行管理和控制。虽然在一般情况下总是由虚拟机首先向硬件设备发出请求,然后获得设备的响应,但是网卡设备不同,因为有时候网络流量有可能未经请求就会直接被发送到虚拟机,所以Xen在对网卡虚拟化的实现上分别为网络数据的发送与接收准备了相应的共享内存环。内存环上的每个元素都对应着某台虚拟机的网络设备访问描述符,这个描述符中并不直接保存I/O数据,而是只提供相关的指针指向相应虚拟机的Guest OS的I/O数据缓存,避免了对数据的反复复制。

以虚拟机向外发送数据包为例,首先,DomainU会将一个发送请求插入虚拟网卡的数据发送共享内存环中,在这个请求中包含了虚拟机要发送的数据的存储位置。然后,DomainU将该请求通告给能够直接驱动物理设备的Domain0。Domain0接收到通告后,从内存环的相应位置读取请求,并根据请求中的数据存储位置信息将数据通过物理网卡发出,再用响应信息将共享内存环上的请求覆盖,并通告DomainU其相应的发送请求已经完成。DomainU收到通告后,会自行到内存环上读取响应信息,然后将其删除。需要注意的是,Xen对网络设备虚拟化内存环上的请求处理并不是按顺序的,而是采用了异步通告的机制,根据描述符中的虚拟机标识及时地将请求的响应通知相关虚拟机。

2.虚拟网桥

在主机网络虚拟化中,仅有虚拟网卡是不够的。如何使多块虚拟网卡在同一台物理服务器中共享一块物理网卡的同时对外仍然表现为多块独立的网卡呢?这有赖于虚拟网桥。

网桥并非新的技术,其工作原理与交换机非常类似,也是构造二层网络的一种技术。甚至可以说,交换机就是一种能够连接多个端口的网桥。而虚拟网桥就是在计算机内部利用软件实现的网桥,并且在表现上与物理网桥几乎一致。因此,两者并没有本质区别,都是将多个虚拟网卡绑定到物理网卡并对虚拟网卡的流量进行管控的一种技术手段。

与交换机类似,网桥的两边分别连接着物理网卡和多块虚拟网卡。网桥内部会维护一张映射表,根据MAC地址寻找对应的虚拟链路进行数据的转发。

如图3-8所示,当数据包从虚拟机发出时,首先必须经过虚拟网卡。虚拟网卡会根据规则来决定如何处理数据包,例如放行、阻隔或者进行修改。数据包在被放行后将转发至网桥,网桥会根据这个包的类型采用相应的动作。如果是广播包,则转发给连接在网桥上的所有网络设备,即其他虚拟网卡及物理网卡;如果是点对点的包,则根据数据包中的目标MAC地址转发到对应的虚拟链路上。最后,当数据转发到物理网卡时,物理网卡再将其转发到物理机以外的真正的交换机上。图3-8 虚拟网桥的工作原理

从以上功能描述中可以看出,虚拟网桥就是VMM内部实现的一台软件交换机。例如,在KVM虚拟机中,其VMM就是Linux操作系统,虚拟网桥可以简单地通过brctl命令创建。3.4.4 网络设备虚拟化的实现

在云计算兴起的背景下,除了对主要的物理网络设备实施虚拟化,网络设备需要为适应云计算的发展而做相应的改进。

1.云计算对网络交换设备的要求

随着互联网的快速发展,尤其是Web 2.0时代用户产生内容模式的兴起,以及移动互联网的迅猛发展,用户的带宽需求、需要的数据越来越庞大,使数据的存储量越来越大,用户对互联网接入带宽的需求也越来越大,进一步带动了互联网的内容源——数据中心出口带宽的提高。同时,更加丰富的媒体内容(例如高清视频等)将随着互联网带宽的提高而更多地被使用,这间接促进了数据中心的出口带宽的增加,要求交换机的容量变得更大。

同时,云计算的兴起将使越来越多的计算和存储集中在数据中心,节点与节点之间的通信越来越多地发生在数据中心内部,导致了数据中心的横向流量剧增,进而对网络设备提出了更高的要求。因此,要求交换机能够更好地应对横向流量。

另外,互联网产业链日益完善使产业分工日趋精细,例如一些电子商务服务提供商利用第三方支付平台帮助买家完成交易。这种产业链分工的细化对数据中心服务器之间的通信质量提出了更高的要求,例如要求交换机有更大的缓存和更小的包交换延迟。

2.主流解决方案和技术进展

目前,网络设备虚拟化解决方案主要是以交换机设备厂商为主提出的,其核心在于对交换机的核心架构进行无阻塞的改造,以及在网络交换设备层面上实施虚拟化技术。(1)基于CLOS的交换架构。

交换机的传统架构是基于组合输入/输出队列(CIOQ,Combined Input-Output Queued)的Crossbar交换架构。这个架构的缺点在于端口缓存太小,以及各端口严重依赖于仲裁器的调度,因此性能上有瓶颈,规模很难扩大。此外,Crossbar架构仅支持10Gbps的接口,而目前不少IDC的出口带宽已经达到并超过100Gbps,因此Crossbar架构的交换机难以适应云IDC的要求。

而新一代基于动态路由的CLOS交换架构可以做到严格的无阻塞,并可以支持40Gbps/100Gbps的接口,其可扩展性大大加强。此外,基于动态路由的CLOS架构结合合适的业务调度机制,就可以支持完善的QoS机制,以实现可区分的服务级别。(2)网络设备的虚拟化。

网络设备的虚拟化随着IDC的发展分成了两种形式,一种是纵向分割,另一种是横向整合。虽然说“云”是统一的,但是不排除在实际运营中仍然有一部分应用游离“云”之外。将多种应用加载在同一个物理网络上,势必需要对这些业务进行隔离,使它们互不干扰,这种隔离称为纵向分割。纵向分割并不是什么新的概念,VLAN就是用于实现纵向隔离技术的。但是,最新的技术不仅是对LAN进行划分,还可以对安全设备进行虚拟化。例如,可以将一个防火墙虚拟成多个防火墙,使防火墙内的应用认为自己独占该防火墙。

网络设备再坚固也有出故障的时候,因此大多数网络设备都是有热备的。从整体上来看,网络不是一层,而是两层甚至是多层的。在物理上维护一个多层的网络设备是一件非常复杂的事情,因此“横向整合”的概念被提出。它可以将多层物理网络整合成为一层逻辑网络,降低了维护开销,如图3-9所示。图3-9 横向网络整合

同时,网络设备虚拟化技术还可以将多个网络设备虚拟成一个虚拟网络设备,管理员接入任何一个设备都可以对该虚拟设备进行管理,管理方式并非简单的一一管理,而是把虚拟网络设备看成一个网络设备的方式进行管理,管理员甚至根本不必知道他具体在管理哪台物理网络设备。因此,不论是在部署上还是在管理上,虚拟化都将大大简化相关的工作量。3.4.5 运营服务中的网络虚拟化关键技术

网络虚拟化的重要价值在于它配置的灵活性。例如,虚拟机从一台物理机迁移到另一台物理机时,它的网络配置不会发生任何变化,甚至运行在虚拟机上的操作系统都感觉不到自己已经被迁移了。为了达到灵活性的目标,统一管理是关键。图3-10是一个网络虚拟化统一管理平台的逻辑架构图。图3-10 网络虚拟化统一管理平台的逻辑架构

控制节点是整个逻辑架构中的控制者,它起着统一管理、协调和整体监控的作用。DHCP服务器和DNS服务器在控制节点的管理之下协调工作,提供对域名到IP地址之间映射关系的管理工作。

虚拟网卡是虚拟机之间的一道“墙”,资源分配、流量控制、实时迁移、状态监控等工作都是由Host OS通过软件控制虚拟网卡来完成的。当然,Host OS需要接受控制节点的管理,还需要将所管理的虚拟网卡的状态汇报给控制节点。

1.资源分配

网络虚拟化中的“资源”指的是网络资源,其中最重要的莫过于IP地址了,尤其是公网IP地址资源。因此,如何高效使用IP地址资源成为云计算数据中心业务的一个重要考虑因素。

网络资源的分配对服务器提供商具有很大的挑战性。例如,当一台虚拟机启动的时候,管理平台为这台虚拟机分配一个公网IP地址;然而当这台虚拟机关机的时候,如果IP地址仍然被它占用,就造成了浪费,因为这个IP地址本可以让其他虚拟机使用。那么,很自然的,管理员希望这个IP地址能够动态地被复用,即当一台虚拟机关机的时候,其IP地址就应该释放出来让其他虚拟机使用。

但是,这又会带来新的问题。如果上述虚拟机在关机一段时间以后重启,那么就应该给它分配一个IP地址。但由于原来的IP地址可能已经归另一台虚拟机使用了,所以不得不给这台虚拟机分配一个新的IP地址。这对虚拟机管理员来说是一件痛苦的事情,因为他不得不去域名管理系统里面修改主机名到IP地址的映射关系(即修改A记录)。

针对这一问题,可以采用动态绑定技术,在完全不需要修改域名管理系统里面的任何记录,同时还能够复用IP地址资源的情况下,满足虚拟机经常重启的需要。

该技术用公网域名(严格地说应该是主机名)替代公网IP地址作为虚拟机的对外标识。换句话说,用户(不论是管理员还是普通用户)都是通过公网主机名访问该虚拟机的。这样,无限多的公网域名可以被“创造”出来,而不受限于公网IP地址数。当虚拟机重启时,该技术能够动态地将一个公网IP地址绑定到该虚拟机的公网域名上。这样,即使虚拟机频繁地重启,用户所面对的虚拟机的公网域名也永远不会有变化。

图3-11所示的步骤如下。图3-11 资源分配解决方案

① 虚拟机发出DHCP请求,其中包含了虚拟机的MAC地址。

② DHCP服务器从MAC-HOST表中查询这个MAC地址对应的公网域名。

③ DHCP服务器获得该MAC地址对应的公网域名。

④ DHCP服务器从IP池里请求空闲的IP地址。

⑤ DHCP服务器获得空闲的IP地址。

⑥ 将上述公网域名和IP地址发布到DNS服务器中,接受外界查询。

⑦ DHCP服务器把IP地址和公网域名返回虚拟机,由虚拟机操作系统自动进行配置。

2.流量控制

网络流量控制也是云数据中心的关键技术之一,它需要确保处于同一个云数据中心的虚拟机能够获得可靠的网络带宽保证。在实际运营中,虚拟机的控制权属于租客,而每个租客都希望最大化自己的利益,这会导致对带宽资源的争夺。如果没有网络流量控制,将最终导致向用户提供的带宽承诺无法兑现。

总体上,有两种方式可以实现流量控制,分别是网络设备控制和物理主机控制,如图3-12所示。图3-12 网络流量控制

网络设备控制可以通过在交换机上对每个端口限定带宽上限等方法实现,但是因为当前交换机的命令接口没有统一标准,所以在对云计算环境下的虚拟机流量进行动态控制时会产生不兼容问题,例如难以通过将虚拟机的网络配置从一台交换机转移到另一台交换机的方法解决这一问题。可以通过软件适配的方式解决这个问题,但是这样做会增加额外的工作量。

基于物理主机的控制将流量限制工作分散到每台物理机上,并在物理机操作系统中对每台虚拟机的虚拟网卡进行流量限制。由于物理机操作系统可以统一选型部署,而且操作系统上的网络流量控制都有事实标准,因此避免了上述基于网络设备控制导致的问题。但是这种方法存在一些难度,主要体现在将控制工作分配到每台物理机上产生的非常高的复杂性。

3.实时迁移

在虚拟化技术中,虚拟机的实时迁移非常重要。但是如果没有相应地迁移网络环境,而仅仅迁移虚拟机,那么迁移效果将会受到很大影响。因为不论是物理机还是虚拟机,连接网络已经成为基本需求。特别是对云数据中心的运营而言,如果需要对一台物理机进行检修,就需要将运行在这台物理机上的所有虚拟机迁移到另一台物理机上,此时虚拟机的网络环境也需要实时迁移,否则迁移之后的网络功能会出现问题,例如虚拟机中运行的网站可能无法被访问。

为了解决这个问题,这里介绍一种在网络层面上解决实时迁移问题的方法,其逻辑架构如图3-13所示。图3-13 在网络层面解决实时迁移问题

当虚拟机被迁移时,迁移模块也会将虚拟机的网络配置进行迁移,这些网络配置包括虚拟机的MAC地址、IP地址、流量控制、安全等策略。迁移流程大体如下。

① 迁移控制模块向物理机A发出迁移虚拟机的指令。

② 迁移控制模块向物理机B发出接受虚拟机的指令。

③ 物理机A和物理机B在协调后开始迁移虚拟机,直到虚拟机完全迁至物理机B。

④ 物理机A将该虚拟机的网络配置(例如IP地址、MAC地址、流量上限、防火墙配置)发送给物理机B。

⑤ 物理机B根据收到的网络配置信息对虚拟机的虚拟网卡进行配置(例如限制该虚拟网卡的出口带宽为10Mbps,开放22、80这两个TCP端口)。

⑥ 物理机B向网络设备发送一个IP包,并且以虚拟机的IP地址和MAC地址发送。这个包不需要有什么特殊的含义,目的是让交换机在收到这个包后就会自动更新交换机内部的MAC-Link表,这样,以后再接收到发往这个虚拟机的二层包时就会转到这个物理机链路上。

上述第⑥步非常关键,如果不这样做,则会出现这样的“怪现象”:因为交换机不知道MAC地址对应的物理链路已经发生了改变,所以如果虚拟机在迁移之后本身没有向外发送任何包,那么外界访问虚拟机的包都不会转发给物理机B,而仍然转发给物理机A。如果虚拟机上正在运行一个网站程序,那么在迁移之后,用户可能会发现这个网站在一段时间内不能访问(由于TCP的Keep-Alive属性使TCP本身有心跳包,所以一段时间之后也会发包,但是这个时间比较长,可能是几分钟到2小时),即使相关虚拟机是正常工作的。

4.安全监控

安全对于云数据中心来说是一个非常重要的因素。例如,Amazon EC2提供了一个简单的防火墙配置界面,用户可以指定开放的端口和协议。该技术的关键在于虚拟网卡。虚拟机想要收到一个包,那么这个包必须经过虚拟网卡。而虚拟网卡是Host OS创建的软件网卡,Host OS完全可以通过防火墙策略对流经虚拟网卡的包进行过滤。如果该包发往虚拟机的某个未被允许的端口,Host OS将丢弃这个包,那么虚拟机将收不到这个包,也就不可能被攻击了。

所以,虚拟网卡在虚拟网络的统一管理上发挥着关键的作用,几乎所有的核心任务都离不开虚拟网卡的支持。3.5 IaaS关键实现技术之云计算管理平台

以上我们介绍了服务器、存储和网络虚拟化等IaaS服务的关键基础技术,但仅有虚拟化技术还不足以实现IaaS服务。虚拟化技术主要实现了对底层物理资源的抽象,使其成为一个个可以被灵活生成、调度、管理的基础资源单位。而要将这些资源进行有效整合,从而形成一个可统一管理、灵活分配调度、动态迁移、计费度量的基础服务设施资源池,并按需向用户提供自动化的基础设施服务,还需要构建一个IaaS管理平台。该管理平台主要分为两部分,分别是资源管理平台和业务服务管理平台,如图3-14所示。图3-14 IaaS管理平台

资源管理平台负责对物理设备和虚拟化资源进行统一的管理和调度,形成统一的资源池,实现IaaS服务的可管、可控,其核心是对每个基础资源单位(可以是物理资源,也可以是虚拟化资源)的生命周期管理能力和对资源的管理调度能力。资源的生命周期管理,就是对资源的生成、分配、扩展、迁移、回收的全流程管理,其关键技术包括虚拟机自动化部署、虚拟机弹性能力提供、资源状态监控、度量和资源的回收等。资源的管理调度能力,则指实现对资源的全局性管理,包括模板管理、接口管理、调度策略管理、资源使用量的采集和度量等。

业务服务管理平台的职责是将资源封装成各种服务,以方便易用的方式对外提供给用户,实现IaaS服务的可运营条件,主要包括业务服务管理、业务流程管理、计费管理和用户管理。其中,业务服务管理主要用于将底层资源组合打包,形成供最终用户购买的业务和服务(例如,Amazon EC2以计算资源为核心,同时包含存储、网络资源);业务流程管理用于实现对用户注册、认证、服务开通及使用、计费、结算等流程的配置与管理;计费管理根据资源监控与度量采集的历史数据统计用户对资源的使用量,并根据计费策略生成计费账单;用户管理主要负责用户身份认证、业务订购关系管理等工作。

从系统组成和功能模块来看,云计算管理平台与大多数电信管理平台类似,但由于虚拟化等技术的引入,出现了一些新的功能模块和技术实现方式,下面我们将着重对这些关键功能及实现方式进行介绍。3.5.1 自动化部署技术

自动化部署包含两部分的内容,一部分是将一台没有运行的虚拟机部署到一台物理机上并让其运行起来,另一部分是将一台正在运行的虚拟机迁移到另一台物理机上。两者都可以叫做部署,前者是初次部署,后者是迁移。

1.初次部署

虚拟化技术本质上是一种纯软件技术,虚拟机也可以被认为是一个程序。例如,KVM实际上就是一个普通的Linux程序,当用户执行它的时候,这个进程就可以看作是一台“加电”计算机,只不过是虚拟的计算机而已。因此,自动化地部署一台虚拟机,其实就是自动化地创建和管理进程。虽然Xen的实现与KVM不太一样,但是虚拟机的执行都是通过软件实现的,因此可以将虚拟机的自动化部署技术归于虚拟机软件管理技术的范畴。

虚拟化的好处在于IT资源的动态分配所带来的成本降低。为了提高物理资源的利用率,降低系统运营成本,自动化部署过程首先要合理地选择目标物理服务器。目前,各个IaaS服务提供商的选择算法都是不公开的,但是通常会考虑以下要素。◎ 尽量不启动新的物理服务器:为了降低能源开销,应该尽量选择将虚拟机部署到一台已经部署了其他虚拟机的物理服务器上,而尽可能不启动新的物理服务器。◎ 尽可能让CPU和I/O资源互补:有的虚拟机所承载的业务是CPU消耗型的,而有的虚拟机所承载的业务是I/O消耗型的,那么应该通过算法让两种不同类型的业务尽可能分配到同一台物理服务器上,以最大化地利用该物理服务器的资源,或者在物理服务器层面上进行定制,将物理服务器分为I/O消耗型、CPU消耗型及内存消耗型,然后在用户申请虚拟机的时候配置虚拟机的资源消耗类型,最后根据资源消耗类型将虚拟机分配到物理服务器上。

在实际的部署过程中,如果让用户自己安装一个操作系统是一件费时费力的工作。所以,为了简化部署过程,系统模板出现了。系统模板其实就是一个预装了操作系统的虚拟磁盘映像,用户只要在启动虚拟机时挂接这个映像,就可以使用这个操作系统。正是因为有了系统模板,操作系统的部署才会变得简单、便捷。

在进行自动化部署时,如果只是重启一台已有的虚拟机,就不存在修改配置的问题,只需要根据上述的物理服务器选择策略找到合适的物理机,然后从该物理机启动即可。但是,如果是新生成一台或多台虚拟机,且这些虚拟机都是通过相同的系统模板创建的,又应如何保证批量生成的每台虚拟机都有不同的IP地址和主机名呢?通常,系统模板内会自带一个软件,该软件的作用是在操作系统第1次启动时从服务端动态获得IP地址,同时获得一个主机名。由于每台新启动的虚拟机都会如此操作,因此,新启动的虚拟机都会获得一个主机名和IP地址。当虚拟机关机后,该IP地址会被动态释放,让其他虚拟机使用。当该虚拟机第2次启动时,该软件会获得一个新的 IP 地址,但是主机名不再变化。通过这样的方法,虚拟机的配置不会冲突,同时,有价值的资源   IP  地址也将尽可能地被复用。

2.迁移

当一台服务器需要维护时,或者由于策略的调整,服务器上的虚拟机都应该迁移到另一台物理机上时,一般来说,需要具备两个条件:虚拟机自身能够支持迁移功能,物理服务器之间有共享存储。

迁移是如何实现的呢?

正如前文所述,对VMM 来说,虚拟机实际上是一个进程。该进程由两部分构成,一部分是虚拟机操作系统,另一部分则是该虚拟操作系统所“看”到的设备。站在VMM的角度上,虚拟操作系统只是一大片内存而已。因此,迁移虚拟机实际上就是迁移虚拟机操作系统所处的整个内存,并且把整个外设全部迁移,使操作系统感觉不到外设发生了变化。这就是迁移的基本原理。

内存迁移实际上就是把虚拟机操作系统所占用的内存全部复制到目标虚拟机里。但是其中有一个难点,那就是在迁移的过程中源虚拟机一直在运行。换句话说,在内存迁移的过程中,对内存的写操作一直在进行。所以,在内存迁移的过程中,由于持续写入而变脏的数据需要再度迁移至目标服务器。但幸运的是,每一次迁移往往比上一次迁移耗费的时间少。如此重复多次之后,最后一次迁移的脏数据非常少,停顿的时间非常短,对于业务和应用来说几乎可以忽略不计,因此也就实现了内存迁移。

外设一般指存储设备和网卡。由于我们认为虚拟机都共享同一个存储设备,因此存储设备的迁移相对简单,只需让目标服务器也可以访问这个存储设备即可,数据本身不需要做实际的迁移。网络配置的迁移在第3.4节中已经介绍过了,这里不再赘述。3.5.2 弹性能力提供技术

通常,用户在构建新的应用系统时,都会按照负载的最高峰值来进行资源配置,而系统的负载在大部分时间内都处于较低的水平,导致了资源的浪费。但如果按照平均负载进行资源配置,一旦应用达到高峰负载时,将无法正常提供服务,影响应用系统的可用性及用户体验。所以,在平衡资源利用率和保障应用系统的可用性方面总是存在着矛盾。云计算以其弹性资源提供的特点吸引了大众的眼球,因为弹性的资源提供方式正好可以解决目前所面临的资源利用率与应用系统可用性之间的矛盾。

弹性能力提供通常有两种模式。(1)资源向上/下扩展(Scale Up/Down)。

资源向上扩展是指当系统资源负载较高时,通过动态增大系统的配置,包括CPU、内存、硬盘、网络带宽等,来满足应用对系统资源的需求。资源向下扩展是指当系统资源负载较低时,通过动态缩小系统的配置,包括CPU、内存、硬盘、网络带宽等,来提高系统的资源利用率。小型机通常采用这种模式进行扩展。(2)资源向外/内扩展(Scale Out/In)。

资源向外扩展是指当系统资源负载较高时,通过创建更多的虚拟服务器来共同提供服务,分担原有服务器的负载。资源向内扩展是指当由多台虚拟服务器组成的集群系统资源负载较低时,通过减少集群中虚拟服务器的数量来提升集群中每台服务器和整个集群的资源利用率。我们通常所说的云计算即采用这种模式进行扩展。

为实现弹性能力的提供,需要首先设定资源监控阈值(包括监控项目和阈值)、弹性资源提供策略(包括弹性资源提供模式、资源扩展规模等),然后对资源监控项目进行实时监测。当发现超过阈值时,系统将根据设定的弹性资源提供策略进行资源的扩展。

对于资源向外/内扩展,由于是通过创建多个虚拟机来扩展资源的,所以需要解决的问题包括:虚拟机文件的自动部署,即将原有虚拟机文件复制,生成新的虚拟机文件,并在另一台物理服务器中运行;多台虚拟机的负载均衡。负载均衡的解决有两种方式:一种是由应用自己进行负载均衡的实现,即应用中有一些节点不负责具体的请求处理,而是负责请求的调度;另一种是由管理平台来实现负载均衡,即用户在管理平台上配置好均衡的策略,管理平台根据预先配置的策略对应用进行监控,一旦某监控值超过了阈值,则自动调度另一台虚拟机加入该应用,并将一部分请求导入该虚拟机以进行分流,或者当流量低于某一阈值时自动回收一台虚拟机,减少应用对虚拟机的占用。3.5.3 资源监控

下面介绍资源监控的有关内容。

1.资源监控的概念

资源监控是实现IT设施可用性、可靠性、安全性的基本保障之一。随着虚拟化技术的快速引入,需要新工具来监控新的虚拟化层(Hypervisor)。传统资源监控的主要对象是物理设施(如服务器、存储、网络)、操作系统、应用与服务程序。由于虚拟化的引入使分配的各种资源可以动态调整,因此增加了系统监控的复杂性。虚拟化环境中资源监控的目的和复杂性主要体现在以下方面。(1)状态监控。

状态监控用于监控所有物理资源和虚拟资源的工作状态,包括物理服务器、虚拟化软件VMM、虚拟服务器、物理交换机与路由器、虚拟交换机与路由器、物理存储与虚拟存储等。(2)性能监控。

IaaS虚拟资源的性能监控分为两个部分。基本性能监控与传统非虚拟化环境中的监控一样,主要是从虚拟机操作系统和VMM的角度来监视与度量CPU、内存、存储、网络等设施的性能。与虚拟化相关的性能监控主要提供关于虚拟化技术的监控度量指标,如虚拟机部署的时间、迁移的时间、集群性能等。(3)容量监控。

由于当今各企业或机构在管理、人员构成上的变化和调整,对IT资源的需求也不断变化,这就需要IT人员持续规划IT系统的容量。容量规划使用长期的资源监控数据来判断系统资源使用率的变化规律,进而作出长期而准确的IT系统规划,因此,容量监控是一种从整体、宏观的角度长期进行的系统性能监控。容量监控的关键度量指标包括服务器、内存、网络、存储资源的平均值和峰值使用率,以及达到资源瓶颈的临界用户数量。(4)安全监控。

在IaaS环境中,除了存在传统的IT系统安全问题,虚拟化技术的引入也因为虚拟机蔓生(sprawl)现象导致了很多新的面向虚拟化层的安全威胁。◎ 传统安全监控:包括入侵检测、漏洞扫描、病毒扫描、网络风暴检测等。◎ 虚拟机蔓生活动监控:监控虚拟机的活动,如虚拟机克隆、复制、迁移、网络切换、存储切换等。◎ 合规监控:监控各种操作、配置是否符合标准及规范,强化使用正版软件,检测违背IT 管理策略的事件等。◎ 访问控制监控:监控用户访问行为和对用户访问行为进行监控。(5)使用量度量。

为了使IaaS服务具备可运营的条件,需要度量不同组织、团体、个人使用资源和服务的情况,有了这些度量信息,便可以在后付费的IaaS提供模式中为用户生成结算信息和账单。为了实现资源度量监控,需要收集以下方面的信息。◎ 服务使用时间:包括计算、存储、网络等服务的使用时间。◎ 配置信息:包括虚拟机等服务的资源配置、软件配置信息。◎ 事件信息:包括虚拟机等服务的开始、结束,以及资源分配与调整事件。

因为当前流行的虚拟化软件种类很多,所以在开发虚拟化资源池监控程序时需要一个支持主流虚拟化软件的开发库,它能够与不同的虚拟化程序交互,收集各种监控度量信息。监控系统会将收集到的信息保存在历史数据库中,为容量规划、资源度量、安全等功能提供历史数据。虽然虚拟化向系统监控提出了新的挑战,但它也为自动响应、处理系统问题提供了很多物理环境无法提供的机会。

2.资源监控的常用方法

系统资源监控主要通过度量收集到的与系统状态、性能相关的数据的方式来实现,经常采用的方法如下。◎ 日志分析:通过应用程序或者系统命令采集性能指标、事件信息、时间信息等,并将其保存到日志文件或者历史数据库中,用来分析系统或者应用的KPI(Key Performance Indicator,关键业绩指标)。例如,资源管理需要将管理与调度操作信息、配置变更信息、资源生命周期信息等保存到监控信息库中。用户如果使用Linux操作系统的计算实例,可以运行各种Linux系统监控命令(如top、iftop、vmstat、iostat、mpstat、df、free、pstree等),同时将这些命令的输出结果保存到日志文件中。很多虚拟化软件也提供了系统监控命令。例如,使用Xen虚拟化软件时,用户可以运行xentop、xenmon等命令来收集服务器的性能指标信息。◎ 包嗅探(Packet Sniffing):主要用于对网络中的数据进行拆包、检查、分析,提取相关信息,以分析网络或者相关应用程序的性能。◎ 探针采集(Instrumentation):通过在操作系统或者应用中植入并运行探针程序来采集性能数据,最常见的应用实例是Windows Management Instrumentation(WMI)和SNMP协议。大多数的操作系统都提供了一个SNMP代理运行在被监视的系统中,采集并通过SNMP协议发送系统性能数据。VMware ESX、Xen虚拟化程序支持植入SNMP探针程序,而Hyper-V支持WMI探针程序。通过这些探针程序,一方面可以收集物理服务器的性能信息,另一方面可以收集运行在物理服务器上的虚拟机信息。3.5.4 资源调度

从用户的角度出发,云计算环境中的资源应该是无限的,即每当用户提出新的计算和存储需求时,“云”都要及时地给予相应的资源支持。同时,如果用户的资源需求降低,那么“云”就应该及时对资源进行回收和清理,以满足新的资源需求。

虽然用户在其资源需求被满足时不必关心相关资源的来源,但是对云计算环境而言,必须考虑如何有效地为用户提供充足的资源及良好的用户体验,因为毕竟被虚拟成无限资源的物理硬件资源实际上是有限的。提高资源的利用率使“云”中的资源能够尽可能充分地被利用,有利于减少云环境对固定资产的投资,而这需要强大的资源调度策略作为支持。

在云计算环境中,因为各个用户和应用的需求会产生波动,所以云环境应该动态地满足用户需求,这需要云环境的资源调度策略为应用提供资源预留机制,即以用户或者应用为单位,为其设定最保守的资源供应量。这里制定的资源使用量底线是事前商定的,虽然并不一定能够完全满足用户和应用在运行时的实际需求,但是它使用户在一定程度上获得了资源供给和用户体验保证。

虽然用户的资源需求是动态可变并且事前不可明确预知的,但其中却存在着某些规律。因此,对应用的资源分配进行分析和预测也是云资源调度策略需要研究的重要方面。首先在运行时动态捕捉各个应用在不同时段的执行行为和资源需求,然后对这两方面信息进行分析,以发现它们各自内在及彼此之间可能存在的逻辑关联,进而利用发掘出的关联关系进行应用后续行为和资源需求的预测,并依据预测结果为其提前准备资源调度方案。

因为“云”是散布在互联网上的分布式计算和存储架构,因此网络因素对于云环境的资源调度非常重要。云环境的资源调度需要采用位置相关的调度策略,即在调度过程中考虑用户与资源之间的位置及分配给同一应用的资源之间的位置。这里的“位置”并不是指空间物理位置,它主要考虑用户和资源、资源和资源之间的网络情况,例如带宽等。“云”中的负载均衡也是一种重要的资源调度策略。考察系统中是否存在负载均衡可以从多个方面进行,例如处理器压力、存储压力、网络压力等,而其调度策略也可以根据应用的具体需求和系统的实际运作情况进行调整。如果系统中同时存在着处理器密集型应用和存储密集型应用,那么在进行资源调度的时候,用户可以针对底层服务器资源的配置情况作出多种选择。例如,可以将所有处理器/存储密集型应用对应部署到具有特别强大的处理器/存储能力的服务器上,还可以将这些应用通过合理配置后部署到处理器和存储能力均衡的服务器上。这样做能够提高资源利用率,同时保证用户获得良好的使用体验。

基于能耗的资源调度是云计算环境中必须考虑的问题。因为云计算环境拥有数量巨大的服务器资源,其运行、冷却、散热都会消耗大量能源,如果可以根据系统的实时运行情况,在能够满足应用的资源需求的前提下将多个分布在不同服务器上的应用整合到一台服务器上,进而将其余服务器关闭,就可以起到节省能源的作用,这对于降低云计算环境的运营成本有非常重要的意义。3.5.5 业务服务管理和计费度量管理

IaaS服务是可以向用户提供多种IT资源的组合,一些服务可再细分成多种类型和等级。用户可以根据自己的需求订购不同类型、不同等级的服务(例如Amazon的EC2服务可细分为标准型、高内存型、高CPU型、集群计算型),还可以为级别较高的客户提供高安全性的VPC(Virtual Private Cloud,虚拟私有云)服务。提供IaaS业务服务需要实现的管理功能包括服务的创建、发布、审批等。

服务在用户订购、系统审批并分配资源后生成真实的资源集合,即服务实例。云计算中的资源包括网络、存储、计算能力及应用服务,它们都以服务的形式向用户提供,用户所使用的是一个个服务产品的实例。用户获取IaaS服务需要经过注册、申请、审批、部署等流程。通常,管理用户服务实例的操作包含服务实例的申请、审批、部署、查询、配置及变更、迁移、终止、删除等。

按资源使用量付费是云计算在商业模式上的一个显著特征,它改变了传统的购买IT物理设备、建设或租用IDC、由固定人员从事设备及软件维护等复杂的工作模式。在云计算中,用户只要购买计算服务,其IT需求即可获得满足,包括IT基础设施、系统软件(如操作系统、服务器软件、数据库、监控系统)、应用软件(如办公软件、ERP、CRM)等都可以作为服务从云计算服务提供商处购买,降低了企业用户和个人用户的IT资源投资和维护成本,同时提高了IT资源的利用率。

公共云服务的运营必然涉及用户计费问题。云计算服务的计费方式与传统的水、电、煤气的计费方式类似,计算公式是:消费金额=单位价格×消费数量

通常,用户购买云计算服务时会涉及多种服务,包括计算、存储、负载均衡、监控等,每种服务都有自己的计价策略和度量方式,在结算时需要先计算每种服务的消费金额,然后将单个用户所消费的服务进行汇总,得到用户消费的账单。

按照上述计算公式,获得“单位价格”和“消费数量”就可以求出用户使用该服务的“消费金额”。“单位价格”是由云计算服务提供商的计价策略确定的。例如,EC2的计价策略是普通Linux计算实例每小时0.031美元,普通Windows计算实例每小时0.08美元。可见,每种服务的计价策略也可以再按照多种维度进行细分。同时,云计算服务提供商也会根据市场的需求和成本的变化调整计价策略。而“消费数量”则是云计算服务商在提供服务时对用户资源使用量的度量,这种资源度量可以与资源监控结合在一起。例如,EC2服务的度量指标是服务的使用时间,即用户使用某种计算实例的小时数,根据资源监控历史记录可以方便地统计出用户使用EC2服务的类型和时间。

上面介绍了云计算服务的计价策略,下面我们以典型的云计算服务产品Amazon AWS服务的Elastic Compute Cloud(EC2)为例介绍IaaS服务的计价方式。EC2资源使用量的度量和资源监控指标如表3-1所示。表3-1 EC2资源使用量的度量和资源监控指标

Amazon根据表3-1中的指标度量用户的云计算服务使用量,同时结合每项服务开通时的计价策略进行计算和汇总,最终为用户生成消费结算账单。

Amazon 同时提供EC2资源使用率监视(CloudWatch)服务,此项服务也是弹性负载均衡服务(AutoScale)的基础。CloudWatch监控的指标包括:◎ Avg CPU Utilization(度量单位:Percent);◎ Avg Disk Reads(Byte)\ Avg Disk Writes(度量单位:Byte);◎ Avg Network In (Byte)\ Avg Network Out(度量单位:Byte)。3.6 典型的IaaS提供商——Amazon

下面对典型的IaaS提供商Amazon进行介绍。3.6.1 Amazon云计算服务简介

在开展云计算服务之前,亚马逊(Amazon.com)是美国最大的基于B2C的电子商务公司。由于淡季和旺季的商品销量差距很大,为了满足旺季的销售需要,Amazon不得不购买很多服务器以应对超出平常的客户访问量。但是旺季过去之后,这些服务器就处于闲置状态而得不到充分的利用。

为了让这些服务器能够得到充分的利用,Amazon开始尝试利用虚拟化技术将这些物理服务器虚拟成多台虚拟服务器,并以在线交易的形式租给愿意花钱购买虚拟服务器的客户,这就是今天Amazon云计算服务的雏形,称为“Amazon Web Services”(AWS)。之后,Amazon对该云计算服务进行了很多改进,其产品体系也更加全面,不仅包括计算服务、存储服务、数据库服务、内容分发服务、消息服务、监控服务、网络服务等,甚至将人力服务也涵盖在云计算服务中,如图3-15所示。图3-15 Amazon云计算服务

如今,Amazon AWS已经成为IaaS服务的领头羊。接下来,我们将带领读者一同体验Amazon云计算服务的代表产品——EC2,领略IaaS服务的便捷性,并对EC2产品在一些关键环节上的优秀设计进行分析。3.6.2 弹性云计算

弹性云计算,即Elastic Computing Cloud(EC2),是Amazon云计算服务的代表之作,是世界上第一个大规模开放的、向公共用户提供虚拟机出租服务的商业化服务。任何用户只需要创建一个账号,并绑定有效的信用卡,即可获得一台完全属于自己的虚拟服务器。

要使用EC2服务,用户必须先注册成为EC2的会员。由于EC2不提供免费试用,因此用户必须先绑定有效的信用卡,然后就可以进入EC2控制台对虚拟机进行管理了,如图3-16所示。图3-16 注册成为EC2会员

EC2对虚拟机的管理是分域进行的,这里的“域”在EC2里叫做“Region”。EC2控制台只能对某一个Region进行管理,Region之间的数据是不共享的。因此在选择虚拟机时,用户首先必须选择希望将虚拟机部署在哪个Region中。图3-16中的“US East”表示美国东部地区。

当用户选择了Region之后,就可以开始创建虚拟机了。在创建虚拟机的过程中,EC2会提示用户选择希望把虚拟机部署在这个Region下面的哪个Availability Zone(AZ)中。“AZ”代表可用区,相当于一个数据中心。对同一个Region下的多个AZ是可以同时进行管理的,即它们之间的数据是共享的。如图3-17所示,美国东部地区有4个AZ。为了保证数据不遭到物理上的破坏,EC2不会透露AZ的具体位置,而仅以数字进行标识。图3-17 可用区域

然后,用户就可以开始创建虚拟机了。创建的过程很简单,按照EC2的提示一步一步进行即可。EC2会询问用户希望创建的虚拟机的配置,例如“双CPU、2GB内存、200GB硬盘”。然后,EC2会询问用户需要安装的操作系统,例如Fedora 10。据Amazon官方的资料显示,EC2采用的虚拟机管理器是Xen,并对其进行了高度的定制化开发。由于EC2采用的是真正的虚拟化技术,因此提供的是完全由用户控制的服务器——用户可以自由选择EC2预先准备好的操作系统,例如Windows或Linux;更甚者,用户可以根据EC2提供的工具自行创建一个个性化的操作系统并提交到  EC2,再通过  EC2 启动这个操作系统。这个个性化的操作系统可以是修改过的Linux操作系统(例如预装了某个由用户自行开发的内核模块),或者预装了一些软件的Windows操作系统(例如预装了Apache服务器)等。不仅如此,EC2还允许用户将自定义的操作系统公开,供其他用户使用。这种由EC2或用户自定义的操作系统称为“模板”。

云计算服务的安全性一直是广受关注的问题之一。对于这一点,Amazon在EC2产品的设计中考虑得相当周到。如前面所述,EC2提供了模板供用户选择。大多数情况下,用户会选择一款适合自己的模板进行安装。如果采用传统的密码方式登录,由于模板的密码是千篇一律的,那么很可能导致非法用户先于用户登录系统(如该非法用户已经提前获知了密码)进行某些恶意操作。为了避免这种情况的发生,EC2采取了一些手段。例如,当用户申请一台Linux虚拟机的时候,EC2会自动创建一个SSH密钥对,并将对应的私钥通过下载的方式交给用户,用户必须通过这个私钥才能访问该虚拟机。这就保证了只有用户才能访问虚拟机,实现了用户对虚拟机的安全访问和控制,大大提高了安全性。

密钥创建成功后,EC2还会提示用户配置防火墙,这也是一个人性化的设计,在为用户降低网络配置的难度方面提供了灵活的工具。具体实现时,EC2控制台为用户提供了一个简单的防火墙界面,用户只需要输入端口号、协议名称及设置是否允许通过防火墙即可,如图3-18所示。图3-18 配置防火墙

换句话说,即使虚拟机的操作系统没有预装防火墙,EC2也会提供基本的安全保证。或者,如果用户的虚拟机被非法获得了root权限,用户也可以通过Web界面快速断开网络(即阻隔所有的协议和端口),将损失降到最低。其实现方式正如第3.4.1节中所述的那样:在Xen这一层已经将非法包过滤了,虚拟机操作系统根本就得不到这些包。当然,用户也可以跳过这一步,即不进行任何访问屏蔽。最后,EC2会将用户所选配置汇总显示,让用户进行确认。一旦用户单击“Launch”按钮,EC2就开始进行虚拟机的部署了,如图3-19所示。图3-19 EC2配置信息汇总

等待大约2分钟之后,一台虚拟机就已经配置好,用户可以对其进行访问了。在使用过程中,用户还可以结合监控服务,对虚拟机的资源情况进行实时的观察。在这方面,EC2提供了直观的监控界面,用户可以通过这个基于Web的界面看到虚拟机的实时性能指标(例如CPU、网络等)。除此以外,用户还可以为某项性能指标设定阈值,一旦某项指标超过了阈值,EC2会自动为用户再分配一台虚拟机。因此,通过监控和联动操作,用户能够获得可弹性伸缩的能力。同时,EC2具有一个开放API的环境,用户可以根据这些API编写程序,对虚拟机进行监控和必要的管理。

通过EC2获得的虚拟机与传统的VPS(Virtual Private Server,虚拟主机)不同。VPS虽然看起来像是一台独立的虚拟服务器,用户也有“root”身份,但实际上用户并不是真的root。例如,用户没有对设备驱动等进行修改的权限,甚至不能自行对操作系统进行升级(升级操作需要由真正的root用户来进行)。而EC2提供的虚拟机在用户看来是一台完全独立的服务器,用户甚至感觉不出这是一台虚拟的服务器。

EC2只是Amazon云计算服务的冰山一角,但它是Amazon云计算服务平台中最具特色的一个服务,也是Amazon作为IaaS领头羊的代表性服务。目前,EC2 正处于快速的发展和变化当中,本书所描述的情况可能会随着时间的变化而变化,敬请读者和笔者一起关注Amazon云计算服务的发展。Chapter 4 平台即服务(PaaS)及其关键实现技术PaaS是在云计算基础设施上为用户提供应用软件部署和运行环境的服务,是云计算发展的重要方向。本章主要对PaaS服务的定义、特征进行阐述,就PaaS的应用托管平台进行深入剖析。因为Google是PaaS服务的倡导者和领先者,所以本章主要以其主导的一系列分布式计算技术为例,对PaaS服务的关键支撑技术进行介绍和分析。鉴于PaaS是目前云计算业界关注的重点,本章在最后对当前主流的PaaS服务提供商进行了介绍,梳理出了不同厂商的4种演进路线。4.1 PaaS概述

PaaS(Platform as a Service),平台即服务,是指在云计算基础设施上为用户提供应用软件部署和运行环境的服务。它能够为应用程序的执行弹性地提供所需的资源,并根据用户程序对实际资源的使用收取费用。

PaaS 通过互联网为用户提供的平台是一种应用开发与执行环境,根据一定规则开发出来的应用程序可以运行在这个环境之内,并且其生命周期能够被该环境所控制,而并非只是简单地调用平台提供的接口。从应用开发者的角度看,PaaS 是互联网资源的聚合和共享,开发者可以灵活、充分地利用服务提供商提供的应用能力,便捷地开发互联网应用;从服务提供商的角度看,PaaS 是提高用户黏性的重要手段,通过提供易用的开发平台和便利的运行平台,吸引更多的应用程序和用户,从而获得更大的市场份额并扩大收益。

业界最早的PaaS服务是由Salesforce在2007年推出的Force.com,它为用户提供了关系数据库、用户界面选项、企业逻辑及一个专用的集成开发环境,应用程序开发者可以在该平台提供的运行环境中对他们开发出来的应用软件进行部署和测试,然后将应用提交给Salesforce供用户使用。作为SaaS服务提供商,Salesforce推出PaaS的目的是使商业SaaS应用的开发更加便捷,进而使使用其SaaS服务的用户能够有更多的软件应用可以选择。在随后的2008年,Google推出了名为“App Engine”的PaaS系统,其目的也是提供一个部署在Google统一基础设施上的第三方应用平台,以培育Google云计算应用的开发者社区,将开发者和应用聚集到Google的云计算架构上。PaaS平台的推出对应用软件的开发和使用产生了巨大影响,可能会改变未来应用软件的产业布局,也使传统的桌面计算平台厂商对其发展路线进行了调整。微软在2008年推出Windows Azure平台,并在其上陆续发布了用于提供数据库服务、总线服务、身份认证服务等的相关组件,构建了完整的微软PaaS服务。

相比较而言,Salesforce和Google建立PaaS的目的主要是为了丰富在其平台上运行的应用软件,尽可能多地利用云计算的优势吸引用户;而微软的目的则是希望在新兴的互联网企业的逼迫下继续聚拢人气,以期仍旧能够在云计算领域保持领先地位。但是,无论怎样,PaaS提供商的核心思想仍是利用其服务平台聚集软件应用。为此,它们向外围应用设计者提供软/硬件资源服务接口,宣扬互联网的开放精神,同时又提供便捷易用的平台环境,降低了用户入门的门槛。PaaS起到了类似传统桌面计算系统中的操作系统和系统软件的作用,是一种有效地聚合产业链、提高用户黏性的手段,是云计算产业发展的制高点,具有广阔的前景。4.1.1 PaaS系统架构

具体来说,PaaS有如下特征。◎ 自动的缩放:包括应用和数据两个方面,其中应用的可扩展性指能够适应用户访问负载的变化进行自动的缩放,数据的可扩展性指能够适应应用数据量的大幅度增加。◎ 方便的管理维护:用户不需要担心平台的可靠性、性能和安全,平台的运行由服务提供商统一监控和维护,无须用户参与。◎ 按需计费:用户无须一次性购买应用平台,而是根据其实际使用的服务(例如发送了多少封电子邮件、发送了多少条IM消息)计费。◎ 黏性的平台绑定:用户程序的开发和执行需要依赖平台提供商提供的编程接口来实现应用程序与服务平台的黏性绑定。◎ 方便的应用部署:用户只需要开发应用,对应用的部署和执行过程的管理都交给平台服务提供商来进行,并且能与提供商分享收益。

如图4-1所示,典型的PaaS系统通常由基础设施、应用运行托管环境、开发者社区、应用商店和开发环境5个部分构成。其中,基础设施和应用运行托管环境是系统中直接支持应用程序执行的部分,也是PaaS系统实现的关键所在;开发者社区和应用商店则是为开发者提供的交流经验和推广应用的必要手段。此外,PaaS还需要为用户提供开发环境,供用户离线开发程序,再将其进行部署。图4-1 PaaS的组成部分(1)基础设施。

PaaS系统的基础设施部分主要有3个方面的作用:一是提供弹性资源供给,以满足应用扩展的自动配置、调度和资源分配;二是为方便企业用户,将已有服务接口开放或重新开发新的接口来为用户程序提供接口服务;三是提供包括对平台的自动化配置、对平台和应用的监控、对平台的自动化扩展及对每个应用的生命周期管理等在内的管理服务。

PaaS的基础设施采用能够支撑动态弹性扩放的易用的系统技术,因此,基于底层广泛分布的计算资源和存储资源的分布式计算技术成为PaaS基础设施的关键技术。分布式计算以中间件的形式出现在操作系统和应用软件之间,分布在多个分散的节点上,其核心技术体系主要包括用于存储和管理文件与数据的分布式文件系统和分布式数据库、用于高效执行分布式并行计算应用的程序库及编程接口、用于实现分布式数据读写一致性的分布式同步管理、用于实现自动部署和监控大规模分布式资源的分布式集群管理等。云计算的兴起,使以Google云计算技术体系为代表的新型分布式计算技术有了长足的进展。这类技术的特点在于以分布式文件系统为基础,并在其上发展其他相关分布式技术。第4.3节将对以Google分布式计算技术为代表的新兴的分布式计算技术进行详细论述。

另外,需要再说明一点:PaaS的运行和交付也可以以底层的IaaS为依托,充分利用IaaS基于虚拟化技术所形成的弹性扩放和按需供给的计算能力和存储能力,满足由于PaaS的服务规模扩放产生的动态资源需求。(2)应用运行托管环境。

PaaS系统的应用运行托管环境是应用运行支撑环境的关键部分,负责完成应用逻辑处理、用户界面呈现及应用数据的查询和处理等工作。

PaaS的应用运行托管环境的重要目标之一是保证多个应用能够可扩展地同时在一个统一的平台上运行。因此,考虑到应用开发、测试和运行过程中可能导致的软件风险,PaaS需要为每个开发者提供独立的、隔离的运行环境。

沙箱(SandBox)技术旨在创造一个运行存在潜在安全风险的应用程序的隔离环境,它作为一个虚拟的容器,可以让不受信任的程序运行而不给操作系统和其他应用程序带来威胁。另外,为了提高资源利用率,合理调配资源,为开发者提供良好的使用体验,请求调度技术成为应用运行托管环境需要考虑的问题。在提高数据读写性能方面,数据缓存是当前云计算数据管理领域普遍采用的方法,特别是在借助了分布式计算能力后,能够更有效地改善数据的访问效率。第4.2节将对与应用运行托管环境相关的关键技术进行详细的论述。(3)开发者社区和应用商店。

开发者社区和应用商店是PaaS丰富应用种类、提高用户黏性的重要渠道和方法。其中,前者为开发者提供开发工具、开发材料及交流开发经验的环境,后者为应用的最终使用者提供购买应用的渠道。

开发者社区和应用商店的设计要求是提供更好的用户访问体验,采用的主要是传统的网站开发技术,本章不再赘述。(4)开发环境。

PaaS一般默认用户的接入终端(客户端)为Web浏览器。开发者可以从开发者社区中下载和安装SDK,基于SDK开发新的应用,并且利用工具将应用上传到应用平台,开发环境与传统的用户利用单机在本地进行开发类似,主要增加了对PaaS提供的功能接口的引入支持。在第4.2.1节中将以Google为例介绍PaaS开发环境。

PaaS系统实现的关键在于如何为用户提供安全、高效的应用运行托管环境和具有高可靠性、高可扩放性的基础设施。下面以  Google  为例对   PaaS系统实现进行进一步的剖析。4.1.2 Google PaaS系统概述

Google PaaS系统的核心从结构上可以划分为应用平台和底层支撑两个层次。其中,应用平台部分主要是Google App Engine(以下简称GAE),它承担了PaaS服务中的应用运行托管环境的角色;其下面向Google互联网业务研发的一系列分布式计算技术则为应用平台提供了底层支撑服务。Google PaaS系统的架构如图4-2所示。图4-2 Google PaaS系统架构

GAE的应用平台层包括为用户应用程序提供的各种服务、数据持久化存储机制及必要的管理控制功能等。其中,Google的服务包括Memcache、Gmail等,它们都为用户程序提供了编程接口,供程序在运行过程中调用,以丰富其功能,改善其性能。应用程序对自身处理数据的存储则通过GAE提供的接口(例如基于Java的JOD/JPA接口)将数据交由DataStore组件来管理。另外,应用平台的外延还包括Google的网站和应用,例如Calendar、Gmail等,它们都提供了开放的接口供用户程序以Web方式访问和调用。

在GAE的底层——支撑层,Google文件系统对底层基础设备资源进行管理,同时向上提供文件和数据的访问及操作接口,具有海量、高可扩展性、高可靠性等特点。在GFS之上,BigTable数据库采用了NoSQL方式提供结构化的数据访问服务,能够高效支持数据的随机查询和改动。MapReduce是Google提出的新型分布式计算框架,它一改从前将数据推向计算节点的计算模式,实现了将计算拉向数据存储节点,具有很高的性能。Chubby 实现了分布式锁机制,在GFS、BigTable和MapReduce的应用中提供了一致性保证。

GAE平台层提供的DataStore组件能够直接访问底层的BigTable分布式数据库,将用户程序的数据保存在数据库中,并对数据进行增、改、删、查等操作。另外,MapReduce 作为一种能够对海量数据进行高效处理的分布式计算模型,在Google云计算体系中起到了非常重要的作用。它能够部署在GFS(将在第4.3.2节详细介绍)架构之上,对分布于各处的文件数据进行处理,还可以对BigTable数据库中的数据进行操作。Google的大量已有应用和服务都是在GFS的基础上通过MapReduce方式实现的。

对应于第4.1.1节中对PaaS服务的描述,GAE应用平台部分相当于PaaS的应用运行托管环境,而其底层支撑就相当于基础设施。Google 发布了专门的开发环境软件供用户下载,使用户可以离线进行应用程序开发,并在开发环境中提供了模拟测试环境供用户进行测试。开发完成后,用户就可以将应用发布到GAE应用平台上运行。同时,Google提供了完备的开发社区网站等供程序开发者交流、讨论。Google对外并不提供IaaS服务,其PaaS平台完全搭建在分布式架构之上。

Google为用户提供了完整的PaaS服务,是一个典型的PaaS服务提供商。接下来,本章将结合对Google PaaS系统的深入分析,对云计算PaaS应用平台的相关技术和云计算PaaS的支撑技术进行详细介绍,最后对当前主流PaaS服务提供商的演进路线进行论述。4.2 PaaS应用运行托管平台

PaaS平台的核心理念是为开发者提供一个自助  Web  应用托管开发运行平台,开发者只需要专注于应用的开发,而无须关注于应用的具体部署、配置、扩展和性能优化等复杂的环节。

PaaS平台为开发者提供支持多种编程语言和标准Web开发技术的开发环境。例如,Google App Engine支持Python和Java,Windows Azure支持 .NET、PHP、Ruby、Java、Perl等。开发者通过SDK和开发工具开发应用并上传、发布,应用最终会部署在PaaS应用运行托管环境中。

PaaS应用托管运行平台为应用提供了弹性可扩展的分布式应用运行环境和服务,使应用可以根据用户访问量和数据存储需求轻松地扩展。应用托管运行平台的核心包括应用程序执行容器、可扩展的数据存储服务、API类库服务等。其中,应用程序执行容器为在线应用提供了一个安全、可靠、稳定、高性能的应用运行框架和运行时环境;可扩展的数据存储服务为在线应用提供了基于分布式文件系统、分布式数据库技术的数据对象存储服务(通过数据库、文件等方式),实现了数据对象持久化存储和操作;API类库服务为在线应用提供了基于一种或者多种主流Web应用开发语言的类库运行时支持,例如Web应用存储、通信、缓存、管理方面的类库。

由于PaaS平台的标准不统一,目前尚不能实现基于某个PaaS平台开发环境开发的应用可以在其他PaaS平台的执行环境中运行。因此,本节将以典型的PaaS平台—— Google App Engine为例,全面、深入地对PaaS应用托管运行平台进行介绍和分析,然后对该平台的关键技术进行重点探讨。4.2.1 典型的PaaS应用运行托管平台——App Engine

2008年4月,Google正式推出App Engine,这被认为是Google云计算战略推进的一个关键举措。App Engine主要面向开发者(目前已有超过2万名开发者)。Google后续还将推出App Marketing(在线应用市场,类似在线软件的App Store),形成一个相对完整的PaaS体系(包括应用运行托管平台App Engine、应用交易平台App Marketing和开发者社区code.google.com/appengine)。

Google App Engine的主要特点如下。◎ 基于Google遍布全球的庞大的分布式基础架构,App Engine具有极高的可扩展能力及由共享带来的规模经济性。Google的分布式软件架构适用于需要海量数据存储和处理的Web应用,具有极佳的可扩展能力。Google的多个应用均基于分布式软件架构,App Engine也采用这一架构(例如基于GFS的BigTable数据存储架构)。◎ 基于Google领先的互联网服务,App Engine增强了平台的吸引力和可用性。App Engine重用了Google已有的多个应用服务的功能。例如,Images API基于 Picasa服务,Users API基于Google认证服务,E-mail API基于Gmail服务等。由于这些服务已拥有大量的用户,因此一方面能够保证App Engine的API服务的可用性,另一方面也使开发者愿意直接使用这些服务来开发新的应用。同时,由于复用这些服务能力大大加快了App Engine的功能开发和升级速度,所以大量的第三方应用使这些服务能力也会为相应的服务(例如Gmail、Picasa)带来较高的用户流量。◎ App Engine支持更多的开发语言,提升了平台的通用性,扩大了“受众”范围。App Engine刚开始只支持Python语言(在国内算是小众开发语言),但很快它就开始支持更通用的Java语言,以便熟悉Java的开发人员以最小的代价转移到App Engine上(包括代码的移植)。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载