云计算综述(共23页).docx
精选优质文档-倾情为你奉上云计算综述陈远祝目录第一章 云计算基础知识 1.1 云计算思想的产生传统模式下,企业建立一套IT系统不仅仅需要购买硬件等基础设施,还有买软件的许可证,需要专门的人员维护。当企业的规模扩大时还要继续升级各种软硬件设施以满足需要。对于企业来说,计算机等硬件和软件本身并非他们真正需要的,它们仅仅是完成工作、提供效率的工具而已。对个人来说,我们想正常使用电脑需要安装许多软件,而许多软件是收费的,对不经常使用该软件的用户来说购买是非常不划算的。可不可以有这样的服务,能够提供我们需要的所有软件供我们租用?我们可不可以像使用水和电一样使用计算机资源?这样我们只需要在用时付少量“租金”即可“租用”到这些软件服务,为我们节省许多购买软硬件的资金。这些想法最终导致了云计算的产生。云计算的最终目标是将计算、服务和应用作为一种公共设施提供给公众,使人们能够像使用水、电、煤气和电话那样使用计算机资源。云计算模式即为电厂集中供电模式。在云计算模式下,用户的计算机会变的十分简单,或许不大的内存、不需要硬盘和各种应用软件,就可以满足我们的需求,因为用户的计算机除了通过浏览器给“云”发送指令和接受数据外基本上什么都不用做便可以使用云服务提供商的计算资源、存储空间和各种应用软件。在云计算环境下,用户的使用观念也会发生彻底的变化:从“购买产品”到“购买服务”转变,因为他们直接面对的将不再是复杂的硬件和软件,而是最终的服务。用户不需要拥有看得见、摸得着的硬件设施,也不需要为机房支付设备供电、空调制冷、专人维护等等费用,并且不需要等待漫长的供货周期、项目实施等冗长的时间,只需要把钱汇给云计算服务提供商,我们将会马上得到需要的服务。1.2 云计算的概念云计算(Cloud Computing)是由分布式计算(Distributed Computing)、并行处理(Parallel Computing)、网格计算(Grid Computing)发展来的,是一种新兴的商业计算模型。目前,对于云计算的认识在不断的发展变化,云计算没仍没有普遍一致的定义。中国网格计算、云计算专家刘鹏给出如下定义 :“云计算将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和各种软件服务”。狭义的云计算指的是厂商通过分布式计算和虚拟化技术搭建数据中心或超级计算机,以免费或按需租用方式向技术开发者或者企业客户提供数据存储、分析以及科学计算等服务,比如亚马逊数据仓库出租生意。广义的云计算指厂商通过建立网络服务器集群,向各种不同类型客户提供在线软件服务、硬件租借、数据存储、计算分析等不同类型的服务。广义的云计算包括了更多的厂商和服务类型,例如国内用友、金蝶等管理软件厂商推出的在线财务软件,谷歌发布的Google应用程序套装等。 通俗的理解是,云计算的“云“就是存在于互联网上的服务器集群上的资源,它包括硬件资源(服务器、存储器、CPU等)和软件资源(如应用软件、集成开发环境等),本地计算机只需要通过互联网发送一个需求信息,远端就会有成千上万的计算机为你提供需要的资源并将结果返回到本地计算机,这样,本地计算机几乎不需要做什么,所有的处理都在云计算提供商所提供的计算机群来完成。1.3 云计算的服务模式云计算还处于萌芽阶段,有庞杂的各类厂商在开发不同的云计算服务。云计算的表现形式多种多样,简单的云计算在人们日常网络应用中随处可见,比如Google Doc, Google Apps等。目前,云计算的主要服务模式有:SaaS, PaaS和 IaaS。(1) 软件即服务(SaaS) SaaS服务提供商将应用软件统一部署在自己的服务器上,用户根据需求通过互联网向厂商订购应用软件服务,服务提供商根据客户所定软件的数量、时间的长短等因素收费,并且通过浏览器向客户提供软件的模式。这种服务模式的优势是,由服务提供商维护和管理软件、提供软件运行的硬件设施,用户只需拥有能够接入互联网的终端,即可随时随地使用软件。这种模式下,客户不再像传统模式那样花费大量资金在硬件、软件、维护人员,只需要支出一定的租赁服务费用,通过互联网就可以享受到相应的硬件、软件和维护服务,这是网络应用最具效益的营运模式。对于小型企业来说,SaaS是采用先进技术的最好途径。以企业管理软件来说,SaaS模式的云计算ERP可以让客户根据并发用户数量、所用功能多少、数据存储容量、使用时间长短等因素不同组合按需支付服务费用,既不用支付软件许可费用,也不需要支付采购服务器等硬件设备费用,也不需要支付购买操作系统、数据库等平台软件费用,也不用承担软件项目定制、开发、实施费用,也不需要承担IT维护部门开支费用,实际上云计算ERP正是继承了开源ERP免许可费用只收服务费用的最重要特征,是突出服务的ERP产品。目前S是提供这类服务最有名的公司,Google Doc, Google Apps和Zoho Office也属于这类服务。 (2)平台即服务(PaaS) 把开发环境作为一种服务来提供。这是一种分布式平台服务,厂商提供开发环境、服务器平台、硬件资源等服务给客户,用户在其平台基础上定制开发自己的应用程序并通过其服务器和互联网传递给其他客户。PaaS能够给企业或个人提供研发的中间件平台,提供应用程序开发、数据库、应用服务器、试验、托管及应用服务。Google App Engine, Salesforce的平台,八百客的800APP是PaaS的代表产品。以Google App Engine为例,它是一个由python应用服务器群、BigTable数据库及GFS组成的平台,为开发者提供一体化主机服务器及可自动升级的在线应用服务。用户编写应用程序并在Google的基础架构上运行就可以为互联网用户提供服务,Google提供应用运行及维护所需要的平台资源。 (3)基础设施服务(IaaS) IaaS即把厂商的由多台服务器组成的“云端”基础设施,作为计量服务提供给客户。它将内存、I/O设备、存储和计算能力整合成一个虚拟的资源池为整个业界提供所需要的存储资源和虚拟化服务器等服务。这是一种托管型硬件方式,用户付费使用厂商的硬件设施。例如Amazon Web服务(AWS), IBM的BlueCloud等均是将基础设施作为服务出租。IaaS的优点是用户只需低成本硬件,按需租用相应计算能力和存储能力,大大降低了用户在硬件上的开销。目前,以Google云应用最具代表性,例如Google Docs、Google Apps、Google Sites,云计算应用平台Google App Engine。无论哪种模式,都需要建立在底层云计算基础设施(资源池)的基础之上。1.4 云计算的产业现状云计算的发展一方面是市场的推动,从基础设施提供商,平台服务提供商到云计算应用提供商,众多的公司参与其中;另一方面则是各国政府的大力支持。1、各国政府积极推进云计算(1)美国2009年9月,美国联邦CIO委员会宣布了联邦政府的云计算发展计划。美国联邦云计算发展计划分为3个要点:开通联邦apps.gov官方网站,整合商业、社交媒体与云端IT服务;建立联邦云计算的示范工程,资助众多试点项目,包括中央认证、目标架构与安全、隐私以及采购相关内容;联邦大规模采购云计算服务(2)日本日本内务部和通信监管机构计划建立一个名为“Kasumigaseki Cloud”大规模的云计算基础设施,以支持所有政府运作所需的信息系统。该机场设施建设计划将在2015年完工,目标是将政府的所有IT系统到一个单一的云基础设施,从而提高运营效率和降低成本。(3)韩国韩国广播通信委员会、知识经济部、行政安全部去年公布了搞活云计算综合计划。计划在2014年之前向云计算(Cloud Computing)领域投资6146亿韩元(36亿人民币),争取使韩国云计算市场的规模扩大为目前的四倍,达到2.5万亿韩元。同时还树立了将韩国相关企业的全球市场占有率提高至10%的目标。(4)英国英国由政府CIO发布了数字英国报告,呼吁政府部门建立统一的政府云G-Cloud,从云计算的易扩展、快速提供和灵活定价的好处中受益。2、国际IT巨头引领云计算产业云计算的技术和商业前景已使资金、人才与创新更加聚集。公开宣布进入或支持云计算技术开发的业界巨头包括微软、谷歌、IBM、Amazon、Netsuite、NetApp、Adobe等,几乎涉及所有的一线IT企业。各公司依据自己传统的技术领域和市场策略都提出了自己的云计算架构,从各个方向进军云计算。企业技术特性核心技术企业服务开源程度微软整合其所用软件及数据服务大型应用软件开发技术Azure平台不开源Google储存及运算水平扩充能力MapReduce,BigTable,GFSGoogle App;Engine,应用代管服务不开源IBM整合其所有软件及硬件服务网格技术,分布式存储,动态负载虚拟资源池提供,企业云计算整合方案不开源Oracle软硬件弹性虚拟平台Orackle的数据存储技术,Sun开源技术EC2上的Oracle数据库,OracleVM,Sun xVM部分开源(Sun)Amazon弹性虚拟平台虚拟化技术XenEC2、S3,SimpleDB、SQS,开源Saleforce弹性可定制商务软件应用平台整合技术F不开源EMC信息存储系统及虚拟化技术Vmware的虚拟化技术,一流存储技术Atoms云存储系统,私有云解决方案不开源3、我国现状我国的云计算产业由于技术储备不足,相关人才不够成熟,市场也有待培育,目前还处于学术层面的研究以及试商用层面,云计算业务的大规模部署尚需时日。但政府及产业界等方面对云计算都表现出极大的热情,从不同的角度对云计算的技术研究、业务部署和产业推进给予支持。 各地政府支持云平台建设北京市计算中心与Platform软件公司共建联合实验室,推进“北京云”的建设。该公共云计算平台定位于工业计算,以IaaS和SaaS两种方式,为政府单位和广大中小企业提供最新的硬件和软件设施、虚拟原型制作、可视化技术、网络技术、数据挖掘等,增强工业企业的产品研发能力。随着黄河三角洲逐步上升为国家开发战略,山东省东营市政府与IBM一起筹建黄河三角洲云计算中心,主要建设内容包括:云计算基础资源平台、软件公共技术及 测试管理服务平台、外包人才实训平台和企业创新服务平台等,未来还可提供电子政务、数字化城市、公共医疗、企业OA服务等应用服务。广东东莞和佛山以政府为主导搭建本地化的公益性云计算平台。东莞松山湖的项目是国内首个具有自主产权的云计算平台,有意向使用该平台的企业就有三千多家,该平台建成后预计年产出将达到18亿元至30亿元。江苏省无锡市联手IBM创建了世界第一个商业云计算中心,在无锡云计算中心二期建设规划中,IBM将帮助无锡加强云计算中心基础设施建设,重点搭建商务云平台、开发云平台和政务云平台三大云计算服务平台。 企业“试水”云计算市场世纪互联是中国最早的ISP/IDC服务商之一,是目前中国规模最大的电信中立互联网基础设施服务提供商。CloudEx是世纪互联于2009年年初推出的中国首家商用云计算服务平台。目前其云计算产品线有三个:为客户提供计算能力租用服务的CloudEx弹性计算服务;为客户提供按需租用存储的CloudEx云存储服务;实现了终端融合和固移融合的CloudEx云备份服务。阿里集团拥有庞大的服务器资源、庞大的用户群和充裕的资金,阿里提出的商业云,将其所占领的庞大的商务资源融合进了云中。阿里的电子商务云计算中心与其他云计算中心的最大区别是它不仅为用户提供存储、网络,以及计算资源租用服务,还提供适合国内用户的各种电子商务服务。阿里下一步的计划是继续开放更多的核心数据和业务接口给第三方调用,同时将国内一些优秀提供商的服务能力整合到云计算平台。金蝶中间件公司推出了Apusic云计算平台,为大型企业和政府部门提供专用云的解决方案,通过云计算中间件平台,为云计算提供落地的务实价值。金蝶已经成为国际云计算标准化组织the Open Group的白金会员和董事会成员。在电信运营商方面,中国移动率先迈出了向云计算发展的一步,推出了名为“BigCloud大云”平台,BigCloud是基于开源技术建造的实验性云计算平台,这一平台带有明显的试水作用,未来中国移动在云计算方面向哪个方向推进目前还不明确。1.5 云计算技术发展面临的主要障碍前三个是关于采用云计算的技术障碍,接下来的五个是对一旦采用后的云计算增长而言的技术障碍,最后两个是对采用云计算而言的政策与商业上的障碍。第一个障碍:服务可用性(Availability of a Service ) 组织担心效用计算服务是否足够可用,这部分引起了对云计算的担忧。谷歌查询能有效的接入因特网:如果某人去谷歌作查询而且不可得,他们会认为英特网断掉了。用户对新的服务期望相似的可用性,这很难做到。 我们相信之于“非常高可用性的”的唯一可行解决方案是:多个云计算供应商。高可用性计算社区坚信“不存在单独资源失效”,不过由单一公司进行的一个云计算服务的管理实际上就是“一单点失效”。即便公司在不通地理域上分布有多个数据中心,使用了不同的网络供应商,它仍需要公共软件基础架构以及账户系统。除非对这种情形有一个商业上可持续的策略的话,大型客户对迁移到云中会不大情愿。我们认为对独立软件栈而言最好的机会是:由不同的公司去供应。 另一个可用性障碍就是分布式服务拒绝攻击。这种攻击使用了大型的所谓“僵尸网络”。效用技术给SaaS供应商提供了一个机会通过“快速扩大”去因应DDOS攻击。所谓“僵尸网络攻击”持久维持是很困难的,那是因为攻击持续的时间越长,要识别出并对它反击就越是容易,且攻击用的bots不能立即对同一个供应商的其它攻击作重复使用。当有了弹性后,云计算就把这种攻击目标从SaaS供应商转嫁到效用计算供应商头上去了,云计算供应商可以更好的消化它,且很可能让已存在的对DDOS之防护成为核心竞争力。第二个障碍:数据锁定(Data Lock-In) 软件栈已经发展出了介于平台之间的互操作性,不过对云计算本身而言,APIs仍旧本质上是专有的。因此,客户不容易 “从一站点到另一站点”进行数据以及程序采集。关注到从云里面采集数据的困难性,这阻碍了某些组织采用云计算。 很明显的解决方案就是把 APIs作标准化,从而一个SaaS 开发者可以把数据与服务部署到诸云计算供应商里头去,从而单一公司的失效不会连累到把客户的所有数据都给毁了。明显的担忧是这将导致云计算价格的所谓“恶性竞争”(由于APIs标准化使得更换公司更容易)。无需担忧的原因首先是,一项服务的质量是和价格相关的,所以客户不可能转到最低费用的服务上去。有些Internet服务供应商更可靠,并对提升可用性提供了额外的服务。其次,除了缓解了数据锁定的关注外,APIs 的标准化使得新的“相同的软件体系架构同时可用于私有云与公有云”的使用模型成为可能,有利于所谓的“涌计算”。第三个障碍:数据机密性与可审核性(Data Confidentiality and Auditability) 当前的云所提供的从本质上讲是公共(而非私有)网络,其暴露的系统更容易遭到攻击。 我们相信在构建云计算环境中没有什么本质上的障碍 ,就像绝大部分的内部IT环境一样的安全,而且这些困难中有许多可以立即克服,只要很好的理解了类似“加密存储,虚拟局域网,和网络中间件(比如防火墙、数据包过滤器)”这样的技术。类似的,可审核性可以被作为虚拟化的客户OS(或虚拟化应用环境)可抵达之上的附加层,提供了比那些内建于应用本身更安全的工具,并把软件责任相关的机密性与可审核性中心化到单一逻辑层次中。 许多国家都有“需要SaaS 供应商把客户数据与有版权的资料保持在该国范围内”的法律。云计算供“SaaS 用户以及其供应商”以放置其存储的极大自由。比方说,亚马逊提供了S3服务,物理地点是在美国和欧洲,允许供应商如其所好的进行放置。第四个障碍:数据传输瓶颈 (Data Transfer Bottlenecks) 应用将会继续变得更关注数据。如果我们假设应用(数据)会被从云中取出一部分的话,会使得数据传输的成本立即成为一个重要的议题。 一个克服高成本传输的机会是所谓“运送磁盘”。Jim Gray发现传送大量数据的最便宜的方式就是“把磁盘带走”,或者就是通过通宵递送服务 “把整个计算机带走”。 另一个克服因特网高成本传输的机会就是找出“把数据保持在云里是有吸引力的”理由,无论出于什么原因,一旦数据待在云里头了,这就不会再是一个瓶颈,并且会使得“购买云计算”的新服务成为可能。 第三个克服高成本传输的方法是试图更快的降低WAN带宽的开销。一个评估显示WAN 带宽的三分之二的开销是花在了高端路由器上,同时,只有三分之一是花在了光纤成本上了。研究者正在开发来自自带中心控制商业组件的简单路由,作为对高端分布式路由的低成本替代。 云内部(Intra-Cloud)的网络技术也可能会是一个性能瓶颈。今天的数据中心里,典型的在一个机架中的20-80处理节点是通过机架顶上的交换机到一个二级(汇聚)交互机实现互联的。通过连接到存储区域网络的路由,以及广域连接(如Internet或Inter-DataCenter WANs),可以在较低层次上进行全面部署。这种连接将导致内部节点处理模式的一个执行瓶颈: “突发的包(packets)在内部互联网络上的传输”(如shuffle step)。带宽的匮乏是只有少数科学家使用云计算的一个原因。第五个障碍:性能不可预测(Performance Unpredictability) 我们的经验是在云计算中,多个虚机很好的共享了CPU以及主存,但是 I/O共享仍旧是一个问题。 性能不可预测带来的一个机会是提升架构和操作系统,使虚机中断和I/O通道能有效化。类似PCIexpress 这样的技术很难虚拟化,但是对云确实至关重要。一个有希望的理由是:IBM 大型机和操作系统在1980年代就大体上克服了这些问题,所以我们有足以效仿的榜样。 另一个可能的原因是闪存会降低I/O冲突。所谓“闪存”是一个半导体,或者当类似硬件磁盘关机时能保存信息的存储器,不过由于它没有移动的部分,所以用于获取就快的多(微妙级和毫秒级的差别),而且能量也使用的更少。闪存可以支持远较磁盘可以支持为多的“每秒每吉比特的存储的I/Os”,所以有随机I/O工作负载冲突的虚机,可以在同一台物理计算机上更好的共存而没有和我们所见的磁盘干扰。第六个障碍:可扩展存储(Scalable Storage) 三个属性的组合让云计算变得有吸引力:短语使用(short-term usage ),没有预先开销(up-front cost),以及没有无限的随需容量(Infinite capacity on-demand)。 可扩展存储障碍所面临的机会目前还是一个开放性的研究问题:生成一个“不仅会符合需求,而且会运用云在随需自动扩张缩减方面的优势来合并那些需求”的 存储系统。同时符合程序员“扩展性,数据持久性以及高可用性”的资源管理方面的期望。第七个障碍:大规模分布式系统的故障(Bugs in Large-Scale Distributed Systems) 云计算的一个挑战是从这些非常大尺度的分布式系统上移除错误。一个常见的情况是这些故障在更小的配置下不能被重复,从而调试也必需在DataCenter的规模上发生。 大规模分布系统的故障这个障碍的一个机会就是依赖云计算中的虚机。许多传统的SaaS 供应商在不使用虚机情况下开发出了他们自己的架构,因为他们觉得负担不起虚机的性能损失。由于虚机在效用计算中所起的作用,那种级别的虚拟化可能使得它可能捕获一种若无虚机就不可能捕获的有用信息。第八个障碍:快速的扩展(Scaling Quickly) 即付即用(Pay-as-you-go)必然应用到存储以及网络带宽中,这两者都对使用的比特进行计数。计算基于虚拟化级别就有一点不同了。谷歌的AppEngine 自动扩展以对“负载的增加与减少”进行反应,且用户是通过使用的周期来收费的。AWS 是通过你占用的实例数的时间收费的,即便你的机器是空闲的。 这样,快速扩展障碍的一个机会就是:快速的扩缩以对负载进行反应以便省钱,但不会和服务级别协议相冲突。实际上,RAD实验室的一个关注点就是:允许动态扩展的“作为诊断与预测工具”的统计机器学习,对性能和调正问题的自动反馈,以及这些系统的许多方面的普通自动管理。 另一个扩展的原因是像节约物力一样节约财力。由于一空闲的计算机使用了相当一繁忙计算机大约三分之二的能源,对资源的仔细规划可以减少数据中心对环境的影响。云计算供应商已对其资源消耗做了小心翼翼的有关低日常开销和其它方面的规划。通过利用每小时与每字节成本,效用计算鼓励程序员关注效率。第九个障碍:荣誉命运共享(Reputation Fate Sharing) 荣誉还不能很好的虚拟化。一个客户的不良行为会影响整个云的荣誉。 另一个法律议题是法律责任的转移,云计算供应商希望法律责任仍旧保存在客户那里而不是转到供应商的头上(即发送垃圾邮件的公司应该负法律责任,而不是亚马逊)。第十项困难:软件证书(Software Licensing) 目前的软件证书常常对软件运行于其上的那些计算机作了约束。用户对软件付费,然后对每年维护费再收费。因此,许多云计算供应商最初都部分的把开源软件作为其靠山,因为对商业软件的证书模式并不能很好的匹配于效用计算。 首要的机会是可以使开源仍旧流行或简单的使商业软件公司变更它们的证书结构以更好的适用云计算。比如,Microsoft 和Amazon 现在对处于 EC2上的Windows Server 和Windows SQL Server提供现收现付软件证书。一个运行于Microsoft Windows上的EC2实例成本是$0.15 每小时,取代传统的开源版本其每小时是$0.10。 第二章 云计算关键技术及主流应用平台2.1 云计算的关键技术云计算是分布式处理、并行计算和网格计算等概念的发展和商业实现,其技术实质是计算、存储、服务器、应用软件等IT软硬件资源的虚拟化,云计算在虚拟化、数据存储、数据管理、编程模式等方面具有自身独特的技术。云计算的关键技术包括以下几个方向:1、虚拟机技术虚拟机,即服务器虚拟化是云计算底层架构的重要基石。在服务器虚拟化中,虚拟化软件需要实现对硬件的抽象,资源的分配、调度和管理,虚拟机与宿主操作系统及多个虚拟机间的隔离等功能,目前典型的实现(基本成为事实标准)有Citrix Xen、VMware ESX Server 和Microsoft Hype-V等。2、数据存储技术云计算系统需要同时满足大量用户的需求,并行地为大量用户提供服务。因此,云计算的数据存储技术必须具有分布式、高吞吐率和高传输率的特点。目前数据存储技术主要有Google的GFS(Google File System,非开源)以及HDFS(Hadoop Distributed File System,开源),目前这两种技术已经成为事实标准。3、数据管理技术云计算的特点是对海量的数据存储、读取后进行大量的分析,如何提高数据的更新速率以及进一步提高随机读速率是未来的数据管理技术必须解决的问题。云计算的数据管理技术最著名的是谷歌的BigTable数据管理技术,同时Hadoop开发团队正在开发类似BigTable的开源数据管理模块。4、分布式编程与计算为了使用户能更轻松的享受云计算带来的服务,让用户能利用该编程模型编写简单的程序来实现特定的目的,云计算上的编程模型必须十分简单。必须保证后台复杂的并行执行和任务调度向用户和编程人员透明。当前各IT厂商提出的“云”计划的编程工具均基于Map-Reduce的编程模型。5、虚拟资源的管理与调度云计算区别于单机虚拟化技术的重要特征是通过整合物理资源形成资源池,并通过资源管理层(管理中间件)实现对资源池中虚拟资源的调度。云计算的资源管理需要负责资源管理、任务管理、用户管理和安全管理等工作,实现节点故障的屏蔽,资源状况监视,用户任务调度,用户身份管理等多重功能。6、云计算的业务接口为了方便用户业务由传统IT系统向云计算环境的迁移,云计算应对用户提供统一的业务接口。业务接口的统一不仅方便用户业务向云端的迁移,也会使用户业务在云与云之间的迁移更加容易。在云计算时代,SOA架构和以Web Service为特征的业务模式仍是业务发展的主要路线。7、云计算相关的安全技术云计算模式带来一系列的安全问题,包括用户隐私的保护、用户数据的备份、云计算基础设施的防护等,这些问题都需要更强的技术手段,乃至法律手段去解决。2.2主流的云计算平台1、Google的云计算平台Google最早提出了“云计算”的概念。Google的硬件条件优势,大型的数据中心、搜索引擎的支柱应用,促进Google云计算迅速发展。Google的云计算主要由MapReduce、Google文件系统(GFS)、BigTable组成。它们是Google内部云计算基础平台的3个主要部分。Google 还构建其他云计算组件,包括一个领域描述语言以及分布式锁服务机制等。Sawzall是一种建立在MapReduce基础上的领域语言,专门用于大规模的信息处理。Chubby是一个高可用、分布式数据锁服务,当有机器失效时,Chubby使用Paxos算法来保证备份。Google的云计算平台将在之后章节着重介绍。2、IBM 的“蓝云”计划“蓝云”解决方案是由IBM云计算中心开发的企业级云计算解决方案。该解决方案可以对企业现有的基础架构进行整合,通过虚拟化技术和自动化技术,构建企业自己拥有的云计算中心,实现企业硬件资源和软件资源的统一管理、统一分配、统一部署、统一监控和统一备份,打破应用对资源的独占,从而帮助企业实现云计算理念。IBM 的“蓝云”计算平台是一套软、硬件平台,将Internet上使用的技术扩展到企业平台上,使得数据中心使用类似于互联网的计算环境。“蓝云”大量使用了IBM先进的大规模计算技术,结合了IBM自身的软、硬件系统以及服务技术,支持开放标准与开放源代码软件。“蓝云”基于IBM Almaden研究中心的云基础架构,采用了Xen和PowerVM虚拟化软件,Linux操作系统映像以及Hadoop软件(Google File System以及MapReduce的开源实现)。IBM已经正式推出了基于x86芯片服务器系统的“蓝云”产品。 “蓝云”平台的一个重要特点是虚拟化技术的使用。虚拟化的方式在“蓝云”中有两个级别,一个是在硬件级别上实现虚拟化,另一个是通过开源软件实现虚拟化。硬件级别的虚拟化可以使用IBM p系列的服务器,获得硬件的逻辑分区LPAR(logic partition)。逻辑分区的CPU资源能够通过IBM Enterprise Workload Manager来管理。通过这样的方式加上在实际使用过程中的资源分配策略,能够使相应的资源合理地分配到各个逻辑分区。p系列系统的逻辑分区最小粒度是1/10颗CPU。Xen则是软件级别上的虚拟化,能够在Linux基础上运行另外一个操作系统。 3、微软的云计算平台微软推出了名为“Azure Services Platform”的云计算平台,我们可以把Windows Azure理解云计算中心的操作系统。它提供了一个可扩展的开发、托管服务和服务管理环境。Windows Azure主要包括三个部分,一是运营应用的计算服务;二是数据存储服务;三是基于云平台进行管理和动态分配资源的控制器。Windows Azure提供了一个可扩展的开发、托管服务和服务管理环境,这其中包括提供基于虚拟机的计算服务和基于Blobs、Tables、Queues、Drives等的存储服务。Windows Azure是一个开放的平台,支持微软和非微软的语言和环境。开发人员在构建Windows Azure应用程序和服务时,不仅可以使用熟悉的Microsoft Visual Studio,Eclipse等开发工具,同时Windows Azure还支持各种流行的标准与协议,包括SOAP、REST、XML、和HTTPS等。4、Amazon的弹性计算云平台EC 2(elastic compute cloud)Amazon是互联网上最大的在线零售商,为了应付交易高峰,不得不购买了大量的服务器。而在大多数时间,大部分服务器闲置,造成了很大的浪费,为了合理利用空闲服务器,Amazon建立了自己的云计算平台弹性计算云EC2,并且是第一家将基础设施作为服务出售的公司。Amazon将自己的弹性计算云建立在公司内部的大规模集群计算的平台上,而用户可以通过弹性计算云的网络界面去操作在云计算平台上运行的各个实例。第三章 MapReduce3.1 MapReduce基本原理介绍在过去的数年里,Google的许多员工已经实现了数以百计的为专门目的而写的计算,用来处理大量的原始数据。比如爬虫文档、Web请求日志等等。为了计算各种类型的派生数据,比如倒排索引,Web文档的图结构的各种表示,每个主机上爬行的页面数量的概要,每天被请求数量最多的集合,等等。很多这样的计算在概念上很容易理解。然而,输入的数据量很大,并且只有计算被分布在成百上千的机器上才能在可以接受的时间内完成。怎样并行计算,分发数据,处理错误,所有这些问题综合在一起,使得原本很简介的计算,因为要大量的复杂代码来处理这些问题,而变得让人难以处理。作为对这个复杂性的回应,Google公司的Jeffery Dean设计一个新的抽象模型, 使我们只要执行的简单计算,而隐藏并行化、容错、数据分布、负载均衡的那些杂乱细节则放在一个库里,不必关心它们。此类抽象模型的灵感来自Lisp和许多其他函数语言的map和reduce的原始表示。事实上许多计算都包含这样的操作: 在我们输入数据的逻辑记录上应用map操作,来计算出一个中间key/value对集; 在所有具有相同key的value上应用reduce操作,来适当地合并派生的数据。功能模型的使用,再结合用户指定的map和reduce操作,让我们可以非常容易的实现大规模并行化计算, 同时使用重启作为初级机制可以很容易地实现容错。这个工作的主要贡献是通过简单有力的接口来实现自动的并行化和大规模分布式计算, 结合这个接口的实现在大量普通的PC机上实现高性能计算。计算利用一个输入key/value对集,来产生一个输出key/value对集。MapReduce 库的用户用两个函数表达这个计算:map和reduce。用户自定义的map函数,接受一个输入对,然后产生一个中间key/value对集。MapReduce 库把所有具有相同中间key I的中间value聚合在一起,然后把它们传递给reduce函数。用户自定义的reduce函数,接受一个中间key I和相关的一个value集。它合并这些value,形成一个比较小的value集。一般的,每次reduce调用只产生0或1个输出value。通过一个迭代器把中间value提供给用户自定义的reduce函数。这样可以使我们根据内存来控制value列表的大小。3.1.1 计算单词数WordCount考虑这个问题:计算在一个大的文档集合中每个词出现的次数。用户将写和下面类似的伪代码:map(String key,String value):/key:文档的名字 value:文档的内容for each word w in value:EmitIntermediate(w,"1");reduce(String key,Iterator values):/key:一个词/values:一个计数列表int result=0;for each v in values:result+=ParseInt(v);Emit(AsString(resut);map函数产生每个词和这个词的出现次数(在这个简单的例子里就是1)。reduce函数把产生的每一个特定的词的计数加在一起。另外,用户用输入输出文件的名字和可选的调节参数来填充一个mapreduce规范对象。用户然后调用MapReduce函数,并把规范对象传递给它。用户的代码和MapReduce库链接在一起。3.1.2类型即使前面的伪代码写成了字符串输入和输出的term格式,但是概念上用户写的map和reduce函数有关联的类型:map(k1,v1) ->list(k2,v2)reduce(k2,list(v2) ->list(v2)3.1.3 其它实例这里有一些让人感兴趣的简单程序,可以容易的用MapReduce计算来表示。分布式的Grep(UNIX工具程序,可做文件内的字符串查找): 如果输入行匹配给定的样式,map函数就输出这一行。reduce函数就是把中间数据复制到输出。计算URL访问频率:map函数处理web页面请求的记录,输出(URL,1)。reduce函数把相同URL的value都加起来,产生一个(URL,记录总数)的对。倒转网络链接图:map函数为每个链接输出(目标,源)对,一个URL叫做目标,包含这个URL的页面叫做源。reduce函数根据给定的相关目标URLs连接所有的源URLs形成一个列表,产生(目标,源列表)对。每个主机的术语向量:一个术语向量用一个(词,频率)列表来概述出现在一个文档或一个文档集中的最重要的一些词。map函数为每一个输入文档产生一个(主机名,术语向量)对(主机名来自文档的URL)。reduce函数接收给定主机的所有文档的术语向量。它把这些术语向量加在一起,丢弃低频的术语,然后产生一个最终的(主机名,术语向量)对。倒排索引:map函数分析每个文档,然后产生一个(词,文档号)对的序列。reduce函数接受一个给定词的所有对,排序相应的文档IDs,并且产生一个(词,文档ID列表)对。所有的输出对集形成一个简单的倒排索引。它可以简单的增加跟踪词位置的计算。分布式排序:map函数从每个记录提取key,并且产生一个(key,record)对。reduce函数不改变任何的对。3.2 MapReduce实现3.2.1 执行方式Map调用通过把输入数据自动分割成M片被分布到多台机器上,输入的片能够在不同的机器上被并行处理。Reduce调用则通过分割函数分割中间key,从而形成R片(例如,hash(key) mod R),它们也会被分布到多台机器上。分割数量R和分割函数由用户来指定。图3显示了Google实现的MapReduce操作的全部流程。当用户的程序调用MapReduce函数的时候,将发生下面一系列动作(下面的数字和图3中的数字标签相对应):1. 在用户程序里的MapReduce库首先分割输入文件成