南京邮电大学
毕 业 设 计(论 文)
题 目
基于Google云计算平台的应用程序的研究
专 业
教育技术学
学生姓名
张耀武
班级学号
B070701 B07070118
指导教师
秦军
指导单位
教育科学与技术学院
日期:2011年 3 月 10 日至 2011 年 6 月 13 日
毕业设计(论文)原创性声明
本人郑重声明:所提交的毕业设计(论文),是本人在导师指导下,独立进行研究工作所取得的成果。除文中已注明引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写过的作品成果。对本研究做出过重要贡献的个人和集体,均已在文中以明确方式标明并表示了谢意。
论文作者签名:张耀武
日期:2011年 6 月 7 日
摘 要
随着IT技术的发展,继1980年代大型计算机到客户端-服务器的大转变之后,出现了一种全新的技术——云计算。云计算(Cloud Computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。用户不需要了解“云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制就可以使用云计算的应用。云计算描述了一种基于互联网的全新的IT技术、使用方式和交付模式,通常涉及通过互联网来提供的动态易扩展而且经常是虚拟化的资源。
本文详细介绍了云计算的基本概念以及在国内外的发展现状,尤其是国内外几大IT巨头的不同云计算平台的特点,着重介绍了Google云计算平台的特性,以及Google App Engine应用程序的开发过程和在GAE服务器上的实现。
关键字:云计算;SaaS;PaaS;IaaS;GAE
ABSTRACT
With the development of IT technology, a new technology cloud computing emerged after the major change, the transition from mainframe computer to the client–server, that happened in 1980's. Cloud computing is an Internet-based formula. By this way, shared resources and information of hardware and software are available to computers and other equipment on demand. Users do not need to know the details of the infrastructure of the cloud and possess the necessary professional knowledge of the cloud. They can use cloud computing applications without any direct control. Cloud computing describes a new kind of IT technology, usage mode and delivery model based on internet. Cloud computing usually involves resources, often virtual resources, which are provided dynamically and expanded easily through the network.
This paper describes the basic concept of cloud computing and the development in foreign and domestic in detail, especially the different characteristics of the cloud computing platforms among several IT giants in foreign and domestic. And this paper highlights the characteristics of cloud computing platform of Google, the development process of Google App Engine applications and the realization in the GAE servers.
Keywords: Cloud Computing; SaaS;PaaS;IaaS;GAE
目 录
第一章 绪论. 1
1.1课题研究背景意义. 1
1.2研究对象及目标. 1
1.2.1研究的对象以及需要解决的问题. 1
1.2.2研究的目标. 2
1.3 本章小结. 2
第二章 云计算简介. 3
2.1云计算的基本概念. 3
2.1.1 什么是云计算. 3
2.1.2 云的类型. 4
2.2 云计算的起源及发展现状. 5
2.2.1云计算的起源. 5
2.2.2云计算的体系结构及发展现状. 6
2.3 本章小结. 9
第三章 不同云计算平台的简介. 10
3.1 IBM“蓝云”平台. 10
3.2 Amazon的弹性云计算. 11
3.3 微软的Windows Azure Platform 12
3.4 华为的SingleCloud 14
3.5中国移动的Big Cloud计划. 16
3.6 本章小结. 17
第四章 Google云计算平台的结构及应用. 18
4.1 Google的云计算概论. 18
4.2 Google的云计算基础架构. 18
4.3 Google的云应用. 20
4.4 本章小结. 22
第五章 Google App Engine应用程序的开发. 23
5.1 Google App Engine简介. 23
5.2 Google App Engine架构与设计理念. 24
5.3 Google App Engine应用程序的开发流程. 25
5.4 一个简单App Engine for Java应用程序示例. 25
5.5 本章小结. 30
第六章 应用举例---B3log 31
第七章 总结. 34
7.1 云计算的意义. 34
7.2 应用综合评价. 34
7.3 未来发展趋势. 35
结束语. 37
致 谢. 38
参考文献. 39
附录A 40
第一章 绪论 1.1课题研究背景意义
对于云计算,业内的专家们有如下定义: 云计算(Cloud Computing)是分布式计算(Distributed Computing)、并行计算(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。其基本原理是,通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,从而使企业数据中心的运行将与互联网更加相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统。
云计算被业界喻为下一个经济增长点,引领云计算潮流的主要有以下几个IT 巨头:Amazon、Google、Microsoft,他们分别推出了自己的云计算实现方案:Amazon Web Services、Google App Engine、Windows Azure。
云计算的研究意义在于,把一堆廉价PC捆绑在一起,统一管理,使用起来如同一台超级大型机(Mainframe)一样。与大型机相比,云计算平台不仅价格便宜,稳定性不差,而且便于不断扩张其计算能力和存储空间。
云计算的社会意义在于让社会普遍获得超大规模的数据处理和存储能力。而过去,只有少数机构拥有这些能力。譬如,客户可以无限量地在网上存放文章,照片和视频等等。一个普通动画工作室,可以制作好莱坞水准的动画片。云计算进一步降低了传统行业使用IT技术的门槛,有利于改进其生产和经营方式。譬如,小摊贩可以在Amazon平台上开设网络商店。对于那些已经拥有IT技术的企业来说,可以把数据存储以及程序运行外包给云计算平台,以便降低企业的IT开支。对于应用开发商来说,传统的终端产品,将向“前店后厂”的模式演化,形成有纵深的产品。
综上所述,研究云计算,深入了解基于云计算的应用程序不管是对于IT厂商还是普通用户都有着重要的意义。
1.2研究对象及目标 1.2.1研究的对象以及需要解决的问题本次毕业设计的研究对象是云计算以及基于云计算的各种应用,特别是基于Google云计算平台的应用程序的特点、开发过程等。需要集中解决的问题有:
(1) 了解云计算的基本概念、体系结构和在国内外的发展现状、发展前景;
(2) 了解不同云计算平台的特性以及应用方式,掌握基于Google云计算平台的应用程序的开发过程;
(3) 理解并掌握Google App Engine应用程序设计与开发的一般流程、方法,开发1到2个基于Google云计算平台的应用程序,并发布到Google云计算平台上;
1.2.2研究的目标根据本毕业设计的任务,本次设计的最终研究成果由两部分构成:本篇论文和另外的应用程序。其中,本论文将系统的介绍云计算,尤其是基于Google云计算平台的应用程序开发的特点和一般流程。而应用程序则是基于Google云计算平台开发的,首先根据Google云平台的特点,设计应用程序要实现的功能和程序的结构。其次,从编程语言Java入手,编写相应的应用程序。第三,在本地计算机通过Google测试平台进行测试,当测试通过后最终将应用程序部署到Google App Engine平台上。
1.3 本章小结本章从云计算的背景开始,讨论了本文研究的对象及目标。云计算不仅仅是网格计算和分布式计算的发展,而是业界的一个全新的概念,其必将在业界带来巨大的商业效应和社会效应,目前国内外已经对此有了一个比较深刻的认识,一些IT巨头已经将此商业化,并且在很多领域有了突破性的进展,实现了巨大的收益。所以对于云计算进行深入研究有着重大的意义。
第二章 云计算简介
云计算(Cloud Computing)是一种新兴的商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和各种软件服务。
2.1云计算的基本概念云计算是一种将各种IT资源(计算,存储,网络等)整合到一起,并能根据用户的需求来动态合理再分配资源的一种IT技术。
2.1.1 什么是云计算业内的专家们对云计算有如下定义: 云计算(Cloud Computing) 是分布式处理(Distributed Computing)、并行处理(Parallel Computing) 和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。其基本原理是,通过使计算分布在大量的分布式计算机上, 而非本地计算机或远程服务器中,企业数据中心的运行将更与互联网相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统。
这样的定义描述了云计算的一些基本特性,但却没有清晰到能辨别云计算产品的一个标准,因此云计算的概念就被滥用了, 有些人将软件即服务(SaaS)、企业网格、平台即服务(PaaS)等概念等同于云计算。导致这些混淆的一个原因是,这些概念都同样需要公共的基础架构技术,都需要可扩展的计算和存储。我认为云计算应该是硬件和软件的组合,应该是虚拟化(Virtualization)、效用计算(Utility Computing) 、IaaS (基础设施即服务)、PaaS (平台即服务)、SaaS(软件即服务)等概念混合演进并跃升的结果,如果单抽取出这其中的一项,是不能称作为云计算的,如图1-1 所示。
图1-1 云计算概念模型
综上所述,云计算在许多方面只是互联网的一个比喻词,亦即计算和数据资源日益迁移到 Web 上的比喻词。不过,区别也是存在的:云计算代表网络计算价值的一个新的临界点。它提供更高的效率、巨大的可扩展性和更快、更容易的软件开发。其中心内容为新的编程模型、新的 IT 基础设施以及实现新的商业模式。
2.1.2 云的类型当前,几乎所有的知名IT提供商、互联网提供商,甚至电信运营商都在向云计算进军,都在提供相关的云服务。但归纳起来,当前云提供者可以分为三大类,即SaaS提供商、PaaS提供商和IaaS提供商。
1、SaaS(软件即服务)
SaaS(软件即服务),是指用户获取软件服务的一种新形式。它不需要用户将软件产品安装在自己的电脑或服务器上,而是按某种服务水平协议(SLA)直接通过网络向专门的提供商获取自己所需要的、带有相应软件功能的服务。本质上而言,软件即服务就是软件服务提供商为满足用户某种特定需求而提供其消费的软件的计算能力。
当前,SaaS有各种典型的应用,如在线邮件服务、网络会议、网络传真、在线杀毒等各种工具型服务,还有在线CRM、在线HR、在线进销存、在线项目管理等各种管理型服务。
SaaS是未来软件业的发展趋势,目前已吸引了众多厂商的参与。不仅微软、Salesforce等各大软件巨头都推出了自己的SaaS应用,用友、金蝶等国内软件巨头也推出了自己的SaaS应用。
2、PaaS(平台即服务)
PaaS(平台即服务),是指将一个完整的计算机平台,包括应用设计、应用开发、应用测试和应用托管,都作为一种服务提供给客户。在这种服务模式中,客户不需要购买硬件和软件,只需要利用PaaS平台,就能够创建、测试和部署应用和服务,与基于数据中心的平台进行软件开发相比,费用要低得多,这是PaaS的最大价值所在。
目前PaaS的典型实例有,微软的Windows Azure平台、Facebook的开发平台等。
PaaS自身不仅拥有很好的市场应用前景,而且能够推进SaaS,并与其共同发展。对于想进入SaaS领域的提供商而言,PaaS关键是降低了他们开发和提供SaaS服务的门槛,而对于已经在提供SaaS服务的提供商而言,PaaS可以帮助部分提供商进行产品多元化和产品定制化服务,让更多的ISV成为其平台的客户,从而开发出基于平台的多种SaaS应用,使其成为多元化软件服务供货商。同时,PaaS降低了SaaS应用开发的门槛,提高了开发的效率。
3、IaaS(基础设施即服务)
IaaS(基础设施即服务),是指企业或个人可以使用云计算技术来远程访问计算资源,这包括计算、存储以及应用虚拟化技术所提供的相关功能。无论是最终用户、SaaS提供商还是PaaS提供商都可以从基础设施服务中获得应用所需的计算能力,但却无需对支持这一计算能力的基础IT软硬件付出相应的原始投资成本。
目前有微软、Amazon和其它一些提供存储服务和虚拟服务器的提供商可以提供这种基于硬件基础的IaaS服务,他们通过云计算的相关技术,把内存、I/O设备、存储和计算能力集中起来成为一个虚拟的资源池,从而为最终用户和SaaS、PaaS提供商提供服务。
2.2 云计算的起源及发展现状云计算只是一种把 IT 资源当作服务来提供的手段。几乎所有 IT 资源都可以作为云服务来提供:应用程序、计算能力、存储容量、联网、编程工具,以至于通信服务和协作工具。
2.2.1云计算的起源云计算最早为 Google、Amazon 等其他扩建基础设施的大型互联网服务提供商所采用。于是产生一种架构:大规模扩展、水平分布的系统资源,抽象为虚拟 IT 服务,并作为持续配置、合用的资源进行管理。这种架构模式被 George Gilder 在其 2006 年 10 月在Wired 杂志上发表的文章 (标题为 “信息工厂” (The Information Factories) ) 中进行了详细介绍。Gilder 所描写的服务器庄园在架构上与网格计算 (Grid Computing) 相似,但其中网格用于松散结合的技术计算应用程序,而这种新的云模式则应用于互联网服务。
云和网格都被设计为可非常高效地进行水平扩展。二者都能经受得起个别元素或节点的失败。二者都按使用情况收费。然而网格通常处理批作业,并且有明确的起点和终点,而云服务却可以持续运行。此外,云扩大了可用资源的类型 (文件存储、数据库和 Web 服务),并且将适应范围延伸至 Web 和企业应用程序。
与此同时,实用计算 (Utility Computing) 的概念成为 IT 设计和运营的一个焦点。就像Nick Carr 在其《大转换》(The Big Switch) 一书中所指出的那样,计算服务基础设施开始与作为公用设施的电的发展相似。
就最终用户而言,云计算意味着没有硬件购置成本、没有需要管理的软件许可证或升级、不需要雇佣新的员工或咨询人员、不需要租赁设施、没有任何种类的基建投资,而且还没有隐性成本。只是一种用仪表测量出来的、根据使用情况支付的订购费或固定的订购费。只是用您所需的量,而且只按使用量付费。
云计算实际上把实用模式 (Utility Model) 推到了新的水平。它是一种新颖和演升的实用计算形式,其中许多不同类型的资源 (硬件、软件、存储、通信等) 可即时合并和再合并成为客户所要求的特定能力或服务。从用于 HPC 项目的 CPU 周期到用于企业级备份的存储容量,再到用于软件开发的完整 IDE,云计算都可以实时提供几乎任何 IT能力。
在许多情况下,各种各样的机构和个人都喜欢作为一种服务来购买 “计算”,而且那些已经在建超级分布式数据中心的公司毫无例外地会选择作为一种服务来提供这种基础设施。
2.2.2云计算的体系结构及发展现状1、云计算的体系结构
云计算的基本原理是通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将更与互联网相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统。
“云”是一个由并行的网格所组成的巨大的服务网络,它通过虚拟化技术来扩展云端的计算能力,以使得各个设备发挥最大的效能。数据的处理及存储均通过“云”端的服务器集群来完成,这些集群由大量普通的工业标准服务器组成,并由一个大型的数据处理中心负责管理,数据中心按客户的需要分配计算资源,达到与超级计算机同样的效果。图2-1展示了云计算体系结构的模型,并在文中对相应的实体给出具体描述。
图2-1 云计算体系结构模型
(1)User Interaction Interface:用户交互界面,通过终端设备向服务云提出请求。
(2)Services Catalog:一个用户能够请求的所有服务目录,可根据自身的需求选择相应的服务。
(3)System Management:系统管理,用户管理计算机资源是否可用。
(4)Provisioning Tool:服务提供工具,用于处理终端请求的服务,需要部署服务配置。
(5)Monitoring and Metering:监控和测度,对用户服务进行跟踪和测量,并提交给中心服务器分析和统计。
(6)Servers:服务云,由系统管理和维护,可能是虚拟服务或者真实的。
2、云计算体系结构的特点:
(1)通过Internet接入
(2)不需要自身具有IT技术来实施
(3)第三方提供
(4)资源共享
(5)无多余功能开发
(6)无多余费用
(7)系统延续性好
在云计算体系结构模型中,前端的用户交互界面(User Interaction Interface)允许用户通过服务目录(Services Catalog)来选择所需的服务,当服务请求发送并验证通过后,由系统管理(System Management)来找到正确的资源,接着呼叫服务提供工具(Provisioning Too1)来挖掘服务云中的资源。服务提供工具需要配置正确的服务栈或Web应用。
云计算同时描述了一种平台以及构建在该平台上的一类应用,图2-2展示了用户获取“云端”资源的基本过程:“云”端为用户提供扩展的、通过互联网即可访问的、运行于大规模服务器集群的各类Web应用和服务,系统根据需要动态地提供、配置、再配置和解除提供服务器,用户只需基于实际使用的资源来支付相关的服务费用。
图2-2 用户获取云资源过程
3、发展现状
企业和研究机构肯最终会把高级别的计算任务交给全球运行的服务器网络,也就是云。以下领先者在这一领域占据着主导位置:
(1)Google:业界唯一以硬件起家的搜索公司,每年在数据中心的投入超过20亿美元,是云计算领域的领跑者和推动者。
(2)Yahoo:规模和资金比Google稍逊一筹,雅虎开发的软件与云计算兼容行不够好,但是作为Hadoop的首要资助方,在技术上有超越Google的势头。
(3)IBM:商业数据计算的龙头和传统超级计算机的领导者。与Google合作后在云计算领域有所突破。IBM为越南政府开发了飞行员‘云’系统试点,并在无锡成立了数据中心。
(4)Microsoft:微软现在只能与自身开发的软件结合,这可能成为它的软肋。但是在‘云’科学基础理论中扮演重要的角色。正在伊利诺伊州和西伯利亚建立大型数据中心。
(5)Amazon:亚马逊是第一个将云计算作为服务出售的公司,规模小于其他竞争者,但是在该领域的专业性为这家零售商在下一代网络服务方面从零售到传媒业的转型助了一臂之力。
4、国内主要云计算公司
国内提供IaaS服务的企业主要包括硬件厂商、系统软件厂商以及系统集成商、解决方案提供商,而其服务形态又集中于两类:云存储和服务器虚拟化。国内典型企业是:浪潮信息、华为、方正科技、中兴通讯等服务器厂商和华胜天成、东软集团、宝信等系统集成商。
国内提供PaaS服务的厂商有新浪和八百客等。新浪发布了SAE (Sina App Engine)产品,八百客推出的800 APP PaaS,提供了创建商业应用软件完整的功能套件。
主流SaaS服务提供厂商:中企开源、伟库网(用友旗下)、八百客、百会创造者(数字星空旗下)、爱普信科技(留学生创办)等。
云计算未来主要有两个发展方向:一个是构建与应用程序紧密结合的大规模底层基础设施,使得应用能够扩展到很大的规模;另一个是通过构建新型的云计算应用程序,在网络上提供更加丰富的用户体验。第一个发展趋势能够从现有的云计算研究状况中体现出来。而在云计算应用的构造上,很多新型的社会服务型网络,如facebook等,已经体现了这个发展趋势,而在研究上则开始注重如何通过云计算基础平台将多个业务融合起来。
2.3 本章小结本章首先介绍了云计算的基本概念,云计算的起源以及发展现状。云计算作为一个全新的IT概念,它和以往的分布式计算、并行计算和网格计算有着比较大的区别,它是在这三个概念上的发展,或者说是这些计算机科学概念的商业实现。本章主要介绍了目前云计算的三种应用方式主要有:PaaS(平台即服务)、IaaS(基础设施即服务)、SaaS(软件即服务)。
第三章 不同云计算平台的简介 3.1 IBM“蓝云”平台
IBM的“蓝云”计算平台是一套软、硬件平台,将Internet上使用的技术扩展到企业平台上,使得数据中心使用类似于互联网的计算环境。“蓝云”大量使用了IBM先进的大规模计算技术,结合了IBM自身的软、硬件系统以及服务技术,支持开放标准与开放源代码软件。“蓝云”基于IBM Almaden研究中心的云基础架构,采用了Xen和PowerVM虚拟化软件,Linux操作系统映像以及Hadoop软件(Google File System以及MapReduce的开源实现)。IBM已经正式推出了基于x86芯片服务器系统的“蓝云”产品。
“蓝云”计算平台由一个数据中心、IBM Tivoli部署管理软件(Tivoli provisioning manager)、IBM Tivoli监控软件(IBM Tivoli monitoring)、IBM WebSphere应用服务器、IBM DB2数据库以及一些开源信息处理软件和开源虚拟化软件共同组成。“蓝云”的硬件平台环境与一般的x86服务器集群类似,使用刀片的方式增加了计算密度。“蓝云”软件平台的特点主要体现在虚拟机以及对于大规模数据处理软件Apache Hadoop的使用上。(Hadoop是开源版本的Google File System软件和MapReduce编程规范)
1、“蓝云”计算平台中的虚拟化技术
“蓝云”软件的一个重要特点是虚拟化技术的使用。虚拟化的方式在“蓝云”中有两个级别,一个是在硬件级别上实现虚拟化,另一个是通过开源软件实现虚拟化。硬件级别的虚拟化可以使用IBM p系列的服务器,获得硬件的逻辑分区LPAR(logic partition)。逻辑分区的CPU资源能够通过IBM Enterprise Workload Manager来管理。通过这样的方式加上在实际使用过程中的资源分配策略,能够使相应的资源合理地分配到各个逻辑分区。p系列系统的逻辑分区最小粒度是1/10颗中央处理器(CPU)。Xen则是软件级别上的虚拟化,能够在Linux基础上运行另外一个操作系统。
虚拟机是一类特殊的软件,能够完全模拟硬件的执行,运行不经修改的完整的操作系统,保留了一整套运行环境语义。通过虚拟机的方式,在云计算平台上获得如下一些优点:(1) 云计算的管理平台能够动态地将计算平台定位到所需要的物理节点上,而无须停止运行在虚拟机平台上的应用程序,进程迁移方法更加灵活; (2) 降低集群电能消耗,将多个负载不是很重的虚拟机计算节点合并到同一个物理节点上,从而能够关闭空闲的物理节点,达到节约电能的目的;(3) 通过虚拟机在不同物理节点上的动态迁移,迁移了整体的虚拟运行环境,能够获得与应用无关的负载平衡性能;(4) 在部署上也更加灵活,即可以将虚拟机直接部署到物理计算平台上,而虚拟机本身就包括了相应的操作系统以及相应的应用软件,直接将大量的虚拟机映像复制到对应的物理节点即可。
2、 “蓝云”计算平台中的存储体系结构
“蓝云”计算平台中的存储体系结构对于云计算来说也是非常重要的,无论是操作系统、服务程序还是用户的应用程序的数据都保存在存储体系中。“蓝云”存储体系结构包含类似于Google File System的集群文件系统以及基于块设备方式的存储区域网络SAN。
在设计云计算平台的存储体系结构时,不仅仅是需要考虑存储容量的问题。实际上,随着硬盘容量的不断扩充以及硬盘价格的不断下降,可以通过组合多个磁盘获得很大的磁盘容量。相对于磁盘的容量,在云计算平台的存储中,磁盘数据的读写速度是一个更重要的问题,因此需要对多个磁盘进行同时读写。这种方式要求将数据分配到多个节点的多个磁盘当中。为达到这一目的,存储技术有两个选择,一个是使用类似于Google File System的集群文件系统,另一个是基于块设备的存储区域网络SAN系统。
在蓝云计算平台上,SAN系统与分布式文件系统(例如Google File System)并不是相互对立的系统,SAN提供的是块设备接口,需要在此基础上构建文件系统,才能被上层应用程序所使用。而Google File System正好是一个分布式的文件系统,能够建立在SAN之上。两者都能提供可靠性、可扩展性,至于如何使用还需要由建立在云计算平台上的应用程序来决定,这也体现了计算平台与上层应用相互协作的关系。
3.2 Amazon的弹性云计算Amazon是世界上最大的在线零售商,每天负担着大量的网络交易,同时Amazon也为独立软件开发人员以及开发商提供云计算服务平台。Amazon将他们的云计算平台称为弹性计算云(elastic compute cloud,简称EC2),是最早提供远程云计算平台服务的公司。Amazon将自己的弹性计算云建立在公司内部的大规模集群计算的平台上,而用户可以通过弹性计算云的网络界面去操作在云计算平台上运行的各个实例(instance)。用户使用实例的付费方式由用户的使用状况决定,即用户只需为自己所使用的计算平台实例付费,运行结束后计费也随之结束。这里所说的实例即是由用户控制的完整的虚拟机运行实例。通过这种方式,用户不必自己去建立云计算平台,节省了设备与维护费用。
Amazon的弹性计算云由名为Amazon网络服务(Amazon Web services)的现有平台发展而来。2006年3月,Amazon发布了简单存储服务(simple storage service,简称S3),用户使用SOAP协议存放和获取自己的数据对象。在2007年7月,Amazon公司推出了简单队列服务(simple queue service,简称SQS),这项服务能够使得托管虚拟主机之间发送的消息,支持分布式程序之间的数据传递,无须考虑消息丢失的问题。Amazon又继续提供了EBS(elastic block storage)服务,为用户提供块级别的存储接口。在提供这些基础设施的同时,Amazon公司开发了弹性计算云EC2系统,开放给外部开发人员使用。
弹性计算云用户使用客户端通过SOAP over HTTPS协议与Amazon弹性计算云内部的实例进行交互。这样,弹性计算云平台为用户或者开发人员提供了一个虚拟的集群环境,在用户具有充分灵活性的同时,也减轻了云计算平台拥有者(Amazon公司)的管理负担。弹性计算云中的每一个实例代表一个运行中的虚拟机。用户对自己的虚拟机具有完整的访问权限,包括针对此虚拟机操作系统的管理员权限。虚拟机的收费也是根据虚拟机的能力进行费用计算的,实际上,用户租用的是虚拟的计算能力。
可以看出,Amazon通过提供弹性计算云,满足了小规模软件开发人员对集群系统的需求,减小了维护负担。其收费方式相对简单明了:用户使用多少资源,只需为这一部分资源付费即可。
3.3 微软的Windows Azure Platform微软紧跟云计算步伐,于2008年10月推出了Windows Azure操作系统。Azure(译为“蓝天”)是继Windows取代DOS之后,微软的又一次颠覆性转型——通过在互联网架构上打造新云计算平台,让Windows真正由PC延伸到“蓝天”上。微软拥有全世界数以亿计的Windows用户桌面和浏览器,现在它将它们连接到“蓝天”上。Azure的底层是微软全球基础服务系统,由遍布全球的第四代数据中心构成。
微软的云计算战略包括三大部分,目的是为自己的客户和合作伙伴提供三种不同的云计算运营模式:
1、微软运营:微软自己构建及运营公共云的应用和服务,同时向个人消费者和企业客户提供云服务。例如,微软向最终使用者提供的Online Services和Windows Live等服务。
2、伙伴运营:ISV/SI等各种合作伙伴可基于Windows Azure Platform开发ERP、CRM等各种云计算应用,并在Windows Azure Platform上为最终使用者提供服务。另外一个选择是,微软运营在自己的云计算平台中的Business Productivity Online Suite (BPOS)产品也可交由合作伙伴进行托管运营。BPOS主要包括Exchange Online, SharePoint Online, Office Communications Online和LiveMeeting Online等服务。
3、客户自建:客户可以选择微软的云计算解决方案构建自己的云计算平台。微软可以为用户提供包括产品、技术、平台和运维管理在内的全面支持。
Windows Azure Platform 是一个运行在微软数据中心的云计算平台。它包括一个云计算操作系统和一个为开发者提供的服务集合。开发人员创建的应用既可以直接在该平台中运行,也可以使用该云计算平台提供的服务。相比较而言,Windows Azure Platform延续了微软传统软件平台的特点,能够为客户提供熟悉的开发体验,用户已有的许多应用程序都可以相对平滑地迁移到该平台上运行。另外Windows Azure Platform还可以按照云计算的方式按需扩展,在商业开发时可以节省开发部署的时间和费用。
Windows Azure platform包括Windows Azure、SQL Azure和Windows Azure platform AppFabric。Windows Azure可看成一个云计算服务的操作系统;SQL Azure是云中的数据库;AppFabric是一个基于Web的开发服务,它可以把现有应用和服务与云平台的连接和互操作变得更为简单。AppFabric让开发人员可以把精力放在他们的应用逻辑上而不是在部署和管理云服务的基础架构上。
Windows Azure是一个云服务的操作系统,它提供了一个可扩展的开发环境、托管服务环境和服务管理环境,这其中包括提供基于虚拟机的计算服务和基于Blobs、Tables、Queues、Drives等的存储服务。Windows Azure为开发者提供了托管的、可扩展的、按需应用的计算和存储资源,还为开发者提供了云平台管理和动态分配资源的控制手段。Windows Azure是一个开放的平台,支持微软和非微软的语言和环境。开发人员在构建Windows Azure应用程序和服务时,不仅可以使用熟悉的Microsoft Visual Studio,Eclipse等开发工具,同时Windows Azure还支持各种流行的标准与协议,包括SOAP、REST、XML、和HTTPS等。
Windows Azure主要包括三个部分,一是运营应用的计算服务;二是数据存储服务;三是基于云平台进行管理和动态分配资源的控制器(Fabric Controller)。
3.4 华为的SingleCloud华为公司过去二十几年一直在电信这个领域进行耕耘,随着信息化深入的发展,业务从语音时代向数据时代转变,ICT的融合在加深,因此华为公司整体的战略上也在进一步的调整,从单纯的CT产业向ICT整个产业扩展。可以把它简单概括成云计算、网络和终端,即聚焦ICT产业,提供“云管端”整体方案是华为的核心战略。
华为云平台的解决方案,概括成一个词,就是SingleCLOUD。Single不是说只有华为一家,而是从业务和终端的角度来阐述华为公司的云计算理念。这个理念是什么呢?今天的业务都是每一个应用软件装在一个硬件设备或一个服务器上,这样的话,所有的硬件资源并不能形成共享,那会导致服务器、存储的利用率会在20%以下,大量的资源被浪费。因此华为希望做统一的平台,把软件与某一个具体的服务器分离,实现应用之间资源的共享,可以概括成“软件与硬件的解耦”。这样,所有的软件共享所有的硬件资源,这才是真正的云计算,而不是把现有的产品进行简单的包装。
从终端这个角度来讲,云计算有各种各样的终端,同样的业务如何适配到不同的终端上。例如前几年讨论得很热烈的在手机上看电视,但是如果要看一个足球赛的话,手机这个小屏幕可能连足球都找不到。如何能够把图像最重要的部分,就是那个足球,显示到屏幕上,而不是把一个视频同比例放大缩小,这就需要做到实时动态视频的转码,而不是一个静态的转码。基于这样一个理念,华为公司的云计算分成两大块,第一块就是面向云计算优化的硬件设备,包括计算、存储、网络、安全以及工程、供电、散热等等;第二块就是云计算的平台软件,我们把它叫做云操作系统,类似于过去的操作系统,但它的核心要解决虚拟化、分布式的文件、分布式的存储,因为只有存储的分布式,才能做到业务计算的分布式和并行。
1、华为SingleCLOUD的关键特性
(1)分布式的软件。软件是云计算的调度中心、核心,或者是一个灵魂。每一个服务器上都装了操作系统、文件系统、数据库系统、中间件、应用,但这些软件之间没有什么关系,导致了它不能协同。云计算的核心就是要把每一个服务器上的软件协同起来,即分布式的文件系统、分布式的数据库系统以及分布式的Web框架系统。通过全分布式的结构,能够实现从几千台服务器到上百万台服务器之间的扩展,从而构建出海量的计算能力,同时也构建出来海量的存储能力。同时,分布式的软件使得系统的可扩展性、可靠性大大提高,单个节点的故障并不影响系统的可靠性,系统的可靠性会大大提升。
(2)网络化。前面谈到的分布式会带来一个问题:若A服务器要使用B服务器的内存硬盘,会遇到什么问题?过去的网络都是用于服务器和客户端的响应,网络是层层收敛上去的,而云计算使得服务器之间可以通信,数据中心的网络变成了服务器内部的总线。这需要多大的带宽呢?这个流量相当于原有的服务器响应客户端流量的40倍。也就是说,今天的数据中心如果需要1个T的话,未来可能需要40个T。事实上需要多少呢?一个大容量的数据中心,三年以后如果一个服务器的需求是10G接口,那么一万台服务器就需要100T的容量。这仅仅是一万台服务器,而电信运营商、大的互联网服务商、政府大的部门,其服务器的数量都有几十万台。因此,网络是做好云计算的核心技术,是云计算的基础。
(3)智能管控。这是云计算的一个最关键的特性。过去的软件维护、升级、资源的分配都是人工规划的,但是如果有几十万台服务器的时候,人工维护这些东西是不现实的。这就相当于IP技术和过去的TDM技术的区别。在IP时代,以骨干路由器为例,IP路由表是以百万为单位的,靠人力是没法配的,所以要实现智能化的IP路由协议。云计算同样存在这个问题。资源共享了以后,不能靠人工去调整,这就是云计算最核心的智能管控。智能管控核心的算法是来自于古雅典的民主制,将民主选举的算法用到了整个云计算的调度当中来,实现资源动态调度和自动管理。
(4)节能环保。在今天能源危机的背景下,这个行业浪费了大量资源,节能需要考虑的因素非常多。第一个因素,就是散热要精准、热量分布要均匀。第二,要根据负载进行动态的控制能源,而不是简单的一成不变。第三,在设计上能不能把散热系统和业务系统直接集成在一起,实现模块化的设计,而不需要专门的空调等等。这种方案对于一个中等规模或者中小规模的企业是非常有用的,不需要建一个非常大的很高档的专业机房。第四,要想进行控制,就要检测数据中的温度、湿度等情况。一般是在数据中心里布一些温度、湿度的采集点,但这是远远不够的,因为它不连续。在这种情况下,华为的解决方案是做了一个机器人,通过机器人每天自动采集各个点的温度,然后反馈给智能控制系统,通过精确制冷,实现节能减排。华为的实践经验表明,采用这种方式能耗可以降低百分之几十。
综上所述,未来华为的云计算在平台领域有四个关键的特性:分布式的软件系统,构建出百万级服务器的扩展能力和百万T字节的存储能力;支撑分布式需要构建出百T的网络;资源调度自动化;自动化的节能减排。
3.5中国移动的Big Cloud计划中国移动从2007年就开始进行云计算的研究和开发,是国内最早介入云计算研发和实践的企业之一。为了打造中国移动云计算基础设施,中国移动提出了“大云(Big Cloud)”计划,进行关键技术的研究及原型系统开发,目标是满足公司IT支撑系统高性能、低成本、可扩展、高性能的IT计算和存储的需要和满足提供互联网业务和服务的需要而提出的。2008年底,中国移动建设了256台服务器的“大云”试验平台,结合现网数据挖掘、用户行为分析等需求进行了应用试点,在提高效率、降低成本、节能减排等方面取得了极为显著的效果。
中国移动部署了具有256个HP PC Server、1024个CPU核、峰值运算速度2.5万亿次/秒、2T内存、256TB硬盘的规模的云计算实验室。根据数据情况,面向一个省公司的全网数据,中国移动选择了16个节点的Big Cloud与小型机系统进行对比。试验结果表明,并行数据处理性能增加约12~60倍,并行数据挖掘算法性能增加约10~50倍,同时,Big Cloud的并行数据处理具有优秀的扩展能力。具体应用评估中,在与省公司选择了几个典型的电信BI应用主题进行了整个应用流程的评估,包括客户细分模型新业务关联模型、用户兴趣偏好分析等,分别采用了聚类、关联规则及分类算法,整个应用性能与小型机相比,提高了3~7倍,而Big Cloud的成本只有小型机成本的1/6。
运营商搭建云计算平台的收益尤为明显,中国移动定制化的硬件保证更为合理的计算成本,降低了采购和运维的开销,各种虚拟化技术在安全性、资源利用率、可靠性、管理方面更为优化,有力于更多通用的、面向特定应用的平台层解决方案的出现,并在安全性、开放性、开发简便性等方面获得改进。
3.6 本章小结本章主要对不同的云计算平台进行了简单的介绍。介绍了不同平台各自的特点以及它们各自发展方向。
第四章 Google云计算平台的结构及应用
Google是最早提出云计算概念的厂商,Google在云计算领域的每一步举措都对云计算的发展有着举足轻重的作用。
4.1 Google的云计算概论Google的云计算技术是针对Google特定的网络应用程序而定制的。针对内部网络数据规模超大的特点,Google提出了一整套基于分布式并行集群方式的基础架构,利用软件的能力来处理集群中经常发生的节点失效问题。
Google使用的云计算基础架构模式包括四个相互独立又紧密结合在一起的系统:建立在集群之上的文件系统Google File System、针对Google应用程序的特点提出的Map/Reduce编程模式 、模型简化的大规模分布式数据库BigTable、分布式的锁机制Chubby。
4.2 Google的云计算基础架构1、Google File System文件系统(GFS)
GFS的设计受到性能、可伸缩性、可靠性以及可用性以外的影响,除此之外还受到Google应用负载和技术环境的影响。体现在4个方面:(1)充分考虑到大量节点的失效问题,需要通过软件将容错以及自动恢复功能集成在系统中;(2)构造特殊的文件系统参数,文件通常大小以G字节计,并包含大量小文件;(3)充分考虑应用的特性,增加文件追加操作,优化顺序读写速度;(4) 文件系统的某些具体操作不再透明,需要应用程序的协助完成。
图4-1 Google File System的系统架构
图4-1给出了Google File System的系统架构.如图4所示,一个GFS集群包含一个主服务器和多个块服务器,被多个客户端访问.大文件被分割成固定尺寸的块,块服务器把块作为Linux文件保存在本地硬盘上,并根据指定的块句柄和字节范围来读写块数据。为了保证可靠性,每个块被缺省保存3个备份。主服务器管理文件系统所有的元数据,包括名字空间、访问控制、文件到块的映射、块物理位置等相关信息。通过服务器端和客户端的联合设计,GFS对应用支持达到性能与可用性最优。GFS是为Google应用程序本身而设计的,在内部部署了许多GFS集群。有的集群拥有超过1 000个存储节点,超过300T的硬盘空间,被不同机器上的数百个客户端连续不断地频繁访问着。
2、MapReduce分布式编程环境
Google构造MapReduce编程规范来简化分布式系统的编程。应用程序编写人员只需将精力放在应用程序本身,而关于集群的处理问题,包括可靠性和可扩展性,则交由平台来处理。MapReduce通过“Map(映射)”和“Reduce(化简)”这样两个简单的概念来构成运算基本单元,用户只需提供自己的Map函数以及Reduce函数即可并行处理海量数据。
3、分布式的大规模数据库管理系统BigTable
由于一部分Google应用程序需要处理大量的格式化以及半格式化数据, Google构建了弱一致性要求的大规模数据库系统BigTable。BigTable的应用包括Search History,Maps,Orkut,RSS阅读器等。
图4-2给出了在BigTable模型中给出的数据模型。数据模型包括行列以及相应的时间戳,所有的数据都存放在表格单元中。BigTable的内容按照行来划分,将多个行组成一个小表,保存到某一个服务器节点中。这个小表就被称为Tablet。图4-3是整个BigTable的存储服务体系结构。
图4-2Google BigTable的数据模型
图4-3 BigTable系统的组织结构
与前述的系统类似,BigTable也是客户端和服务器端的联合设计,使得性能能够最大程度地符合应用的需求。BigTable系统依赖于集群系统的底层结构,一个是分布式的集群任务调度器,一个是前述的Google文件系统,还有一个分布式的锁服务Chubby。Chubby是一个非常棒的粗粒度锁,BigTable使用Chubby来保存根数据表格的指针,即用户可以首先从Chubby锁服务器中获得根表的位置,进而对数据进行访问。BigTable使用一台服务器作为主服务器,用来保存和操作元数据。主服务器除了管理元数据之外,还负责对tablet服务器(即一般意义上的数据服务器)进行远程管理与负载调配。客户端通过编程接口与主服务器进行元数据通信,与tablet服务器进行数据通信。
以上是Google内部云计算基础平台的3个主要部分。Google还构建其他云计算组件,包括一个领域描述语言以及分布式锁服务机制等。Sawzall是一种建立在MapReduce基础上的领域语言,专门用于大规模的信息处理。Chubby是前述的一个高可用、分布式数据锁服务。当有机器失效时,Chubby使用Paxos算法来保证备份的一致性。Chubby的小型分布式文件系统的每一个单元都可以用来提供锁服务。
4.3 Google的云应用Google的每一项服务几乎都使用到了云技术,其中最典型的应用主要有
以下几个:
(1)Google Search Engine(Google搜索引擎);
(2)Google Analytics(Google网站分析);
(3)Goole Maps and Google Earth(Google地图和Goolge地球);
(4)Personalized Search(个性化搜索);
(5)Google Apps(Goolge企业应用套件);
(6)Google App Engine(Google应用程序引擎)。
下面简要介绍Google Search Engine和Google Analytics。
1、Google Search Engine
Google搜索引擎是一个最典型的云计算的应用,Google搜索引擎最初架构如图4-4所示:
图4-4 Google搜索引擎架构
图4-4中同一个功能模块如果出现多次,如crawlers,则表示该模块存在多个并行的实例。多个并行实例既可以理解为一台机器中的多个进程或线程,也可以理解成在多台PC机上执行的进程。以crawlers为例,在Google原型系统设计之初,可能就是同一台机器上多个线程,而在2000年以后可能就是多台PC机上都在运行crawlers程序。如果在多台PC机上运行crawlers程序,那
么Google搜索引擎就变成了分布式的了。其实为Google搜索引擎提供硬件支持的不是传统的大型机和服务器,而是技术含量低、廉价的集群技术。至2003年4月,Google集群已集成15,000台PC机,成为当时世界上最大的PC机集群系统。
2、Google Analytics
Google Analytics是一个帮助站长分析网站流量的工具,它提供汇总统计,如每天有多少独立ip用户访问,和提供网站跟踪报告,如有多少比例的用户在访问了特定网页后购买产品等功能。
云计算技术在Google分析中的应用是非常普遍的,如因为Google分析要记录大量数据,所以需要数据库的支持,Google分析采用了分布式数据库Bigtable;Google分析主要使用了两张Bigtable表:
(1)The raw click table(大约200TB),为每个终端用户的状态维护一行数据;
(2)The summary table(大约20TB),包含为每个站点事先定义的多种统计数据。
当用户访问网页时,网页中实现加入的javascript代码就会把该用户的相关信息提交给Google服务器,然后这些信息被存入The raw click table;并定时对The raw click table进行统计分析,得到的结果再存入The summary table。
4.4 本章小结本章主要介绍Google 云计算平台。Google是最早提出云计算概念之一的企业,是走在云计算的前沿,也是云技术最成熟的企业之一,它提供的服务主要是PaaS(平台即服务),Google的云平台是Google App Engine,世界上任何一位用户都可以在此平台上开发属于自己的应用,而且有很大的免费额度,下一章将详细介绍基于Google云计算平台的应用程序的开发方法。
第五章 Google App Engine应用程序的开发 5.1 Google App Engine简介
Google App Engine(GAE) 是Google提供给开发者的网络应用程序解决方案。使用GAE,开发者可以利用自己熟悉的语言(目前支持Python和Java)开发网络应用程序。
Google App Engine 可以在 Google 的基础架构上运行网络应用程序。App Engine 应用程序易于构建和维护,并可根据访问量和数据存储需要的增长轻松扩展。使用 Google App Engine,将不再需要维护服务器:只需上传应用程序,它便可立即为用户提供服务。
开发者可以使用Google 企业应用套件通过自己的域名(例如http://www.example.com/)提供应用程序。或者可以使用appspot.com域上的免费域名来为您的应用程序提供服务。开发者可以与全世界的人共享自己的应用程序,也可以限制为只有指定的成员可以访问。
Google App Engine支持以几种编程语言编写的应用程序。通过 App Engine 的 Java 运行时环境,您可以使用标准 Java 技术(包括 JVM、Java servlet 和 Java 编程语言,或使用基于 JVM 的解释器或解译器的任何其他语言,例如 JavaScript 或 Ruby)构建应用程序。App Engine 还提供一个专用的 Python 运行时环境,该环境包括一个快速 Python 解释器和 Python 标准库。Java 和 Python 运行时环境构建为确保应用程序快速、安全运行,并不受系统上的其他应用程序的干扰。
在App Engine中,开发者只需为使用的资源付费。没有设置成本,也没有重复的费用。应用程序使用的资源,如存储空间和带宽以千兆字节衡量,并以有竞争力的费率收费。开发者可以控制应用程序可以消费的最大资源量,使其一直保持在预算范围内。
可以免费开始使用 App Engine。所有应用程序都可以使用多达 500 MB 的存储空间,以及可支持每月约 500 万页面浏览量的足够的 CPU 和带宽,完全免费。而当应用程序启用付费后,免费配额将提高,开发者只需为使用的超过免费水平的资源付费。
使用GAE开发的应用程序易于构建和维护,并可根据访问量和数据存储需要的增长轻松扩展。GAE的主要功能如下:
1、动态网络服务,提供对常用网络技术的完全支持;
2、持久存储空间,支持查询、分类和事务;
3、自动扩展和负载平衡;
4、用于对用户进行身份验证和使用Google 帐户发送电子邮件的API;
5、一种功能完整的本地开发环境,可以在本地计算机上模拟GAE;
6、用于在指定时间和定期触发事件的计划任务。
5.2 Google App Engine架构与设计理念1、架构
(1)前端
Google App Engine架构前端包括Front End 和Static Files,它们完成负载均衡、静态文件传输、html文件的生成、转发请求给应用服务器等功能。
1)应用服务器(App Server)
应用服务器能同时运行多个应用环境(Python/Java)。
2)服务器群(Service Group)
包括Datastore、Memcache、ImageUser、URLFetch和Email等。
3)应用管理节点(App Master)
它主要负责应用的启停和计费。
(2)设计理念
1)重用现在的技术
Datastore是基于Google的bigtable技术;
Images服务是基于picasa服务;
user服务是利用Google Accounts;
2)利用Protocol Buffers的RPC技术
应用服务器和许多服务器相连,相互间需要通信,若采用Web Service等基于XML的方案,则效率不高。Google采用Protocol Buffer解决这个问题,Protocol Buffer是一种可扩展的序列化结构化数据的方式,语言中立,平台中立并被用于通信协议,数据存储等许多方面,并且其速度有可能是XML的10倍。
3)Shared Nothing 的架构
Shared nothing架构是一种分布式架构,在这个架构中的每一个节点( node)都是独立、自给的,而且整个系统中没有单点竞争。在GAE中的每一层都尽量做到了Shared noting,因此GAE伸缩性强。
4)分布式的数据库
其Datastore的实现就是利用Google的BigTable分布式数据库,这使得访问数据非常快。但由于Bigtable不支持sql,所以这也有很多争议。
5.3 Google App Engine应用程序的开发流程1、准备工作
(1)注册App Engine帐号
访问http://appengine.google.com,按照提示完成注册,需要注意的是 GAE的手机注册提醒已经对中国用户开放,国内用户也可以非常方便的完成GAE的注册。
(2)安装Eclipse,App Engine SDK和Google for Eclipse Pulgin
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。通过安装Google插件,可以非常方便的开发GAE应用程序。
(3)掌握Java的基本语法
GAE目前支持两种开发语言,本次毕设采用Java语言开发。
2、应用开发
3、发布你的App Engine网站
(1)注册域名
(2)申请Google Apps
(3)设置ghs.google.com
(4)域名绑定到Google
(5)提交你的网站到AppEngine Gallery
5.4 一个简单App Engine for Java应用程序本文使用Eclipse for Java 3.6开发,通过安装Google插件的Eclipse完成了从应用程序的创建、编译、本地测试、网上部署的所有功能。App Engine for Java 为 GWT 应用程序提供了更多的代码工件。实现的应用程序是一个在 GWT 执行的 GUI,它可以与一个问候(greeting)服务应用程序通信。
首先,使用 App Engine for Java 项目创建向导创建一个简单的 GWT 应用程序,如图5-1所示
图5-1使用 App Engine for Java 项目创建向导创建一个简单的 GWT 应用程序
App Engine for Java 为 GWT 应用程序提供了更多的代码工件。示例应用程序是一个在 GWT 执行的 GUI,它可以与一个问候(greeting)服务应用程序通信。如图5-2所示
图5-2 GWT应用程序提供的代码工件
为 GWT 应用程序提供的一个额外 JAR 对于基于 servlet 的应用程序并不是必须的,这个 JAR 文件就是 gwt-servlet.jar。
其他工件包括:
1、src/gaej/example:SimpleGWTApp.gwt.xml:GWT 模块描述符
2、src/gaej.example.server:GreetingServiceImpl.java:问候服务的实现
3、src/gaej.example.client:GreetingService.java:问候服务的同步 API
4、src/gaej.example.client:GreetingServiceAsync.java:问候服务的异步 API
5、src/gaej.example.client:SimpleGWTApp.java:构建启动 GUI 的主要入口点
6、war/WEB-INF:web.xml:配置 GreetingServiceImpl 的部署描述符
7、war:SimpleGWTApp.html:显示 GWT GUI 的 HTML 页面
8、war:SimpleGWTApp.css:GWT GUI 的样式表
下面进行编译、本地测试。单击工具栏中的红色工具箱,然后单击 Compile 按钮完成编译,编译成功将会出现以下提示信息:
Compiling module gaej.example.SimpleGWTApp
Compiling 6 permutations
Compiling permutation 0...
Compiling permutation 1...
Compiling permutation 2...
Compiling permutation 3...
Compiling permutation 4...
Compiling permutation 5...
Compile of permutations succeeded
Linking into C:\Users\Administrator\workspace\SimpleGWTApp\war\simplegwtapp
Link succeeded
Compilation succeeded -- 64.272s
接着运行项目,右键单击项目选择 Run As—> Web Application 菜单项,运行成功将会得到一个本地网址作为测试用:
http://localhost:8888/
在浏览器中输入该网址,就能运行这个项目,将会得到如图5-3、图5-4所示结果
图5-3 运行过程
图5-4 运行结果
经过本地测试正确后,将应用部署到Google平台,使用 Google App Engine 的重点就是可以将应用程序部署到 Google 提供的可靠基础设施中,使它更易于扩展。App Engine for Java 的免费版提供了提供了足够的 CPU、带宽和存储来为 500 万个页面访问次数提供服务。首先,需要创建一个新的 App Engine for Java 应用程序,并设置应用ID,如图5-5所示。
设置好应用程序 ID 后,可以从 Eclipse中部署您的应用程序。首先,单击看上去类似 Google App Engine 徽标的工具栏按钮(显示机翼和尾翼的喷气式发动机),完成所有设置后即可开始部署,部署成功后之前设置的ID对应的网址即可实现我的应用,并且全球用户都可以访问它:http://shiyan2zhang.appspot.com
图5-5 部署应用设置
5.5 本章小结
本章介绍了Google云计算平台Google App Engine的特征以及设计理念,详细介绍了基于Google云计算平台的应用程序的开发方法,实现了使用Eclipse3.6并结合Google为Eclipse开发的插件GWT开发,包括了应用程序开发的初始化设置、程序代码的调试和编译、GAE帐号的创建、应用程序的本地测试、服务器部署等一个GAE应用程序开发的所有过程。
第六章 应用举例---B3log
B3log Solo 是一个基于 Google App Engine Java 版的博客程序。这是一个开源项目,本章利用Google App Engine SDK for Java 开发了Google App Engine应用程序。
下面介绍实现的过程、本地测试、网上部署。
1、在本地建立Java环境,下载安装Java,并配置路径。成功标志:在CMD里面输入 java -version 显示java版本信息则成功,如图6-1所示
图6-1 Java安装成功标志
2、下载 Google App Engine SDK for Java,解压在F盘根目录下面:F:\appengine-java-sdk-1.4.3
3、 下载B3log开源程序,解压到F盘根目录:F:\b3log-solo-0.2.6,如图6-2所示
图6-2 下载安装组件
4、本地测试,在cmd中运行dev_appserver.cmd F:\b3log-solo-0.2.6命令,如图6-3所示
图6-3 本地测试结果
在浏览器中访问:http://localhost:8080,即可本地测试效果。如图6-4所示
图6-4 本地测试结果
5、本地测试成功以后,就可以在GAE服务器上部署应用了。首先在Google注册App帐号,这在前一章已经详细的介绍过。因为B3log是一个完全开源项目,需要修改程序ID,打开F:\b3log-solo-0.2.6/WEB-INF/appengine-web.xml 将 solo-demo 中solo-demo更改为在Google设置的ID:zhangyw1988。接着需要在cmd中运行appcfg.cmd update F:\b3log-solo-0.2.6指令,并输入在GAE的帐号、密码(输密码时不会有显示)即可完成部署。如图6-5所示
图6-5完成GAE应用程序部署
6、完成部署后即可开始体验GAE应用程序的魅力,开始精彩的B3log之旅。我的GAE应用地址为:http://zhangyw1988.appspot.com/
第七章 总结
本文旨在通过对云计算相关知识的学习,以Google云计算平台为重点,详细介绍了不同云计算平台的特点,以及云计算在国内外的发展现状。最后开发了两个基于Google云计算平台的应用程序。
7.1 云计算的意义云计算被业界喻为下一个经济增长点,云计算的研究意义在于,把一堆廉价PC捆绑在一起,统一管理,使用起来如同一台超级大型机一样。与大型机相比,云计算平台不仅价格便宜,稳定性不差,而且便于不断扩张其计算能力和存储空间。云计算的社会意义在于,让社会普遍获得超大规模的数据处理和存储能力。在过去,只有少数机构拥有这些能力。譬如,客户可以无限量地在网上存放文章,照片和视频等等。一个普通动画工作室,可以制作好莱坞水准的动画片。云计算进一步降低了传统行业使用IT技术的门槛,有利于改进其生产和经营方式。譬如,小摊贩可以在Amazon平台上开设网络商店,任何一位用户可以没有自己的服务器等软硬件设施就可以在Google云计算平台上搭建属于自己的应用。对于那些已经拥有IT技术的企业来说,或许把数据存储和程序运行外包给云计算平台,以便降低企业的IT开支。对于应用开发商来说,传统的终端产品,将向“前店后厂”的模式演化,形成有纵深的产品。
随着云技术的进一步发展,不论是企业用户还是个人用户必将从中受益颇丰,而云技术提供商也将从中获得巨大的经济效益,这对于IT技术的发展、社会资源成本消耗的降低,将有重大的现实意义。
7.2 应用综合评价本次毕业设计共完成两件应用:
第一个应用一个简单的App Engine for Java/GWT 应用程序使用Eclipse 3.6结合Google为Eclipse开发的插件开发,与第二个应用相比,Eclipse图形化的操作界面从应用的初始化设计到最后的网上部署,任何一个环节都要的方便,所实现的功能是使用浏览器打开所设网址时,要求录入个人用户名,系统将反馈用户正在使用的计算机的信息,如浏览器版本等。
第二个应用开源项目B3log则是只使用Google在命令提示符下提供的命令,包括本地测试和网上部署,这更有利于对基于Google云计算平台的应用程序的开发的理解。该项目基于Google云计算平台的应用程序的经典作品,应用的实现形式是产生按照个人设计意愿的全球唯一地址的个人博客,与传统的博客相比,因为底层的架构都是自己设计的,可以完全按照自己的爱好去设置网页的形式,灵活性比较大,而且应用是架构在IT巨头Google的服务器上的,相对比较稳定,内容不受国内相关法律规定限制。
因为时间有限,这两个应用还可以有很多可以改进的地方,比如第一个应用还可以实现更多的功能,第二个应用是个开源项目,自己改动的地方还不是很多,而且也没有做过多的美化工作,以后如果有时间,我将继续完善这两个应用。
7.3 未来发展趋势经过3到4年的发展,云计算的概念已经不在陌生,关于云计算以后的发展趋势主要有以下五个方向。
1、私有云将成大型企业首选
因为大型企业要求有较高的数据安全性,所以他们更倾向于选择私有云方案。未来几年,公有云受安全、性能等多种因素的制约,在大型企业中的市场占有率不会超越私有云。并且私有云系统的部署量还将持续增加,私有云在IT消费市场所占的比例会持续增加。
2、开放数据中心更容易实现云计算
英特尔10月在北京牵头成立了开放数据中心联盟,意在实现:“互通”的云,能够允许企业能在私有云和公有云之间共享数据。一个“自动化”的云计算网络,能自动地帮助不同的应用和资源安全运行,从而显著提高数据中心的能耗表现。一个PC 和设备感知的“客户端自适应”的云,能自动决定哪种应用、命令和处理应该在云上,抑或是在您的笔记本、智能手机以及其余设备上进行,从而能充分利用某个用户和设备的独特性能以全面优化在线体验。
3、混合云架构将成为企业IT趋势
私有云只为企业内部服务,而公有云则是可以为所有人提供服务的云计算系统。混合云将公有云和私有云有机地融合在一起,为企业提供更加灵活的云计算解决方案。
而混合云是一种更具优势的基础架构,它将系统的内部能力与外部服务资源灵活地结合在一起,并保了证低成本。在未来几年,随着服务提供商的增加与客户认知度的增强,混合云将成业企业IT架构的主导。
4、越来越多的应用迁移到云中
将应用迁移到云中,是原本就赋予云计算的意义,也是最主流的云计算应用方式之一。现在SaaS模式已经取得了初步成功,为云计算产业开辟了一条非常好的道路。
SaaS模式给传统软件产业带来了巨大的冲击。出于成本和运维等方面原因,越来越多的企业选择SaaS方式使用软件。在新的市场环境下,软件厂商也纷纷出台云战略。微软就是典型代表,它的传统桌面软件正不断向云软件迁移。但是也并不是所有的软件都适合于SaaS模式,一些攸关企业核心业务或者安全的软件目前还正在接受考验。
5、云计算概念逐渐平民化
几年前,由于一些大企业对于云计算概念的渲染,导致很多中小企业对于云计算的态度一直停留在“仰望”的阶段。
而经过一段时间的酝酿,一种比较适合中小企业的云计算模式出现了——PaaS(平台即服务),它是将 基础设施平台作为一种服务呈现给用户的商业模式。这是一种比较低成本的方案,对那些资金有限,并且IT资源有限,急需扩展IT基础支撑的企业有着巨大的吸 引力。从目前的市场发展势态来看,也许在不久的将来PaaS将取代SaaS,成为中小企业最主要的云计算应用。
结束语
通过本次毕业设计,对云计算概念的介绍和基于Google云计算平台的应用程序的开发,以及论文的撰写,让本人受益匪浅。
从理论方面来看,经过本次毕业设计,我对以前不太了解云计算的概念有了深一步的理解,并且认识到了不同云计算平台的区别,增长了自己的学识。
从实践方面来看,我掌握了以前从没接触过的GAE应用程序的开发的基本方法。最终作品的两个应用程序我使用了两种不同的方法,通过这次毕业设计我掌握了学习一门新技术的技巧,只有掌握了基本的概念,并且积极吸取网络上别人的成功经验和失败教训,才能更快的掌握一门新技术。
从态度方面来看,在毕业设计过程中,遇到不理解的地方,就虚心地接受导师、学长以及同学们的指导,对待任何遇到的问题都认真对待,一丝不苟地处理,并且要勇于尝试和探索新的东西,不照搬前人的研究成果,最后才能取得成功。
当然由于本人的能力和水平有限,应用和论文可能存在诸多不妥之处,如第一个应用实现的功能过于简单,第二个应用并没做过多的美化工作,论文的结构还存在不合理的地方等,还望各位专家学者给予批评指正。我会不断学习新的理论知识和实践技能,面对以后的种种挑战。
致 谢
感谢我的导师秦军教授,她严谨细致、一丝不苟的态度一直是我工作、学习中的榜样;她平时给我讲课时循循善诱的教导和不拘一格的作风给予我无尽的启迪。
感谢邓谦学长,在毕设过程中碰到的一个个难题,都离不开他的细心指导。他开朗的个性和幽默的风格,不仅和我一起解决了一个个难题,在毕设思路上更给予了我很大的帮助。
感谢我的家人,在家里创作阶段,离不开他们提供的安静的氛围,还有更多精神上的支持。
感谢我的室友们,从遥远的家来到这个陌生的城市里,是你们和我共同维系着彼此之间兄弟般的感情,维系着寝室那份家的融洽。四年了,仿佛就在昨天。毕业在即,也祝福我的室友们在以后的路上一帆风顺,前途一片光明。
感谢南京邮电大学,感谢传媒与艺术学院、教育科学与技术学院,我工作学习四年的地方,这里是一片净土,毕业在即,即将走上工作岗位,我将永远怀念这里!
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!
参考文献
[1] Barroso LA, Dean J, Holzle U. Web search for aplanet: The Google cluster architecture [J]. IEEE Micro, 2003, 23(2): 22-28.
[2] CHANG F, DEAN J, GHEMAWAT S, et al. BigTable: A distributed storage system for structured data [J]. ACM Transactions on Computer Systems, 2008, 26(2): 1-26.
[3] MICHAEL MILLER. 云计算[M]. 北京: 机械工业出版社, 2009.
[4] 王鹏. 走进云计算[M]. 北京: 人民邮电出版社, 2009.
[5] 张为民,唐剑峰,罗治国,钱岭. 云计算:深刻改变未来[M].北京:科学出版社,2009.
[6] 陈康, 郑纬民. 云计算: 系统实例与研究现状[J]. 软件学报, 2009, 20(5): 1337-1348.
[7] 刘鹏. 云计算[M]. 北京: 电子工业出版社, 2010.
[8] 陈全, 邓倩妮. 云计算及其关键技术[J]. 计算机应用, 2009, 29(9): 2562-2567.
[9] Google API大全编委会. Google API大全—编程•开发•实例[M]. 北京: 电子工业出版社, 2009.
[10] 孙健, 贾晓菁. Google云计算平台的技术架构及对其成本的影响研究[J]. 电信科学,2010, 26(1): 38-44.
[11] Anthony T.Velte,Toby J.Velte,Robert Elsenpeter.云计算实践指南[J].北京:机械工业出版社,2010.
[12] John W. Rittinghouse.云计算:实现、管理与安全[J].北京:机械工业社.2010.
[13] Jeffrey Dean,Sanjay Ghemawat. MapReduce: Simplified Data Processing on Large Clusters[J]. Sixth Symposition on Operating System Design and Implementation,SanFrancisco,CA,December,2004.
[14] George Reese. 云计算应用架构[J].北京:电子工业出版社.2010.
[15]杨志文. 云计算技术指南:应用、平台与架构[M].北京:化学工业出版社.2010.
[16]Amazon. Amazon elastic compute cloud (Amazon EC2). 2009.
http://aws.amazon.com/ec2/
[17] IBM. IBM virtualization. 2009. http://www.ibm.com/virtualization
[18] Sims K. IBM introduces ready-to-use cloud computing collaboration services get clients started with cloud computing. 2007. http://www-03.ibm.com/press/us/en/pressrelease/22613.wss
[19] Ghemawat S, Gobioff H, Leung ST. The Google file system. In: Proc. of the 19th ACM Symp. on Operating Systems Principles. New York: ACM Press, 2003.29−43.
附录A
应用一部分源代码
App Engine for Java 为 GWT 应用程序提供了很多的代码工件。应用一程序是一个在 GWT 执行的 GUI,它可以与一个问候(greeting)服务应用程序通信。
为 GWT 应用程序提供的一个额外 JAR 对于基于 servlet 的应用程序并不是必须的,这个 JAR 文件就是 gwt-servlet.jar。
其他工件包括:
1、src/gaej/example:SimpleGWTApp.gwt.xml:GWT 模块描述符
xml version="1.0" encoding="UTF-8"?>
2、src/gaej.example.server:GreetingServiceImpl.java:问候服务的实现
package gaej.example.server;
import gaej.example.client.GreetingService;
import gaej.example.shared.FieldVerifier;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/** * The server side implementation of the RPC service. */
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {
public String greetServer(String input) throws IllegalArgumentException {
// Verify that the input is valid.
if (!FieldVerifier.isValidName(input)) {
// If the input is not valid, throw an IllegalArgumentException back to
// the client.
throw new IllegalArgumentException(
"Name must be at least 4 characters long");
}
String serverInfo = getServletContext().getServerInfo();
String userAgent = getThreadLocalRequest().getHeader("User-Agent");
// Escape data from the client to avoid cross-site script vulnerabilities.
input = escapeHtml(input);
userAgent = escapeHtml(userAgent);
return "Hello, " + input + "!
I am running " + serverInfo
+ ".
It looks like you are using:
" + userAgent;
}
/**
* Escape an html string. Escaping data received from the client helps to
* prevent cross-site script vulnerabilities.
* @param html the html string to escape
* @return the escaped string */
private String escapeHtml(String html) {
if (html == null) {
return null;
}
return html.replaceAll("&", "&").replaceAll("<", "<")
.replaceAll(">", ">");
}
}
3、src/gaej.example.client:GreetingService.java:问候服务的同步 API
package gaej.example.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
/* * * The client side stub for the RPC service. */
@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
String greetServer(String name) throws IllegalArgumentException;
}
4、src/gaej.example.client:GreetingServiceAsync.java:问候服务的异步 API
package gaej.example.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
* The async counterpart of GreetingService.
*/
public interface GreetingServiceAsync {
void greetServer(String input, AsyncCallback callback)
throws IllegalArgumentException;
}
5、src/gaej.example.client:SimpleGWTApp.java:构建启动 GUI 的主要入口点
package gaej.example.client;
import gaej.example.shared.FieldVerifier;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
* Entry point classes define onModuleLoad().
*/
public class SimpleGWTApp implements EntryPoint {
/**
* The message displayed to the user when the server cannot be reached or
* returns an error.
*/
private static final String SERVER_ERROR = "An error occurred while "
+ "attempting to contact the server. Please check your network "
+ "connection and try again.";
/**
* Create a remote service proxy to talk to the server-side Greeting service.
*/
private final GreetingServiceAsync greetingService = GWT
.create(GreetingService.class);
/**
* This is the entry point method.
*/
public void onModuleLoad() {
final Button sendButton = new Button("Send");
final TextBox nameField = new TextBox();
nameField.setText("GWT User");
final Label errorLabel = new Label();
// We can add style names to widgets
sendButton.addStyleName("sendButton");
// Add the nameField and sendButton to the RootPanel
// Use RootPanel.get() to get the entire body element
RootPanel.get("nameFieldContainer").add(nameField);
RootPanel.get("sendButtonContainer").add(sendButton);
RootPanel.get("errorLabelContainer").add(errorLabel);
// Focus the cursor on the name field when the app loads
nameField.setFocus(true);
nameField.selectAll();
// Create the popup dialog box
final DialogBox dialogBox = new DialogBox();
dialogBox.setText("Remote Procedure Call");
dialogBox.setAnimationEnabled(true);
final Button closeButton = new Button("Close");
// We can set the id of a widget by accessing its Element
closeButton.getElement().setId("closeButton");
final Label textToServerLabel = new Label();
final HTML serverResponseLabel = new HTML();
VerticalPanel dialogVPanel = new VerticalPanel();
dialogVPanel.addStyleName("dialogVPanel");
dialogVPanel.add(new HTML("Sending name to the server:"));
dialogVPanel.add(textToServerLabel);
dialogVPanel.add(new HTML("
Server replies:"));
dialogVPanel.add(serverResponseLabel);
dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
dialogVPanel.add(closeButton);
dialogBox.setWidget(dialogVPanel);
// Add a handler to close the DialogBox
closeButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
dialogBox.hide();
sendButton.setEnabled(true);
sendButton.setFocus(true);
}
});
// Create a handler for the sendButton and nameField
class MyHandler implements ClickHandler, KeyUpHandler {
/**
* Fired when the user clicks on the sendButton.
*/
public void onClick(ClickEvent event) {
sendNameToServer();
}
/**
* Fired when the user types in the nameField.
*/
public void onKeyUp(KeyUpEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
sendNameToServer();
}
}
/**
* Send the name from the nameField to the server and wait for
a response. */
private void sendNameToServer() {
// First, we validate the input.
errorLabel.setText("");
String textToServer = nameField.getText();
if (!FieldVerifier.isValidName(textToServer)) {
errorLabel.setText("Please enter at least four
characters");
return;
}
// Then, we send the input to the server.
sendButton.setEnabled(false);
textToServerLabel.setText(textToServer);
serverResponseLabel.setText("");
greetingService.greetServer(textToServer,
new AsyncCallback ()
{ public void onFailure(Throwable caught) {
// Show the RPC error message to the user
dialogBox.setText("Remote Procedure Call - Failure");
serverResponseLabel
.addStyleName("serverResponseLabelError");
serverResponseLabel.setHTML(SERVER_ERROR);
dialogBox.center();
closeButton.setFocus(true);
}
public void onSuccess(String result) {
dialogBox.setText("Remote Procedure Call");
serverResponseLabel .removeStyleName("serverResponseLabelError");
serverResponseLabel.setHTML(result);
dialogBox.center();
closeButton.setFocus(true);
}
}
}
}
// Add a handler to send the name to the server
MyHandler handler = new MyHandler();
sendButton.addClickHandler(handler);
nameField.addKeyUpHandler(handler);
}
}
6、war/WEB-INF:web.xml:配置 GreetingServiceImpl 的部署描述符
xml version="1.0" encoding="UTF-8"?>
app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
app>
greetServlet
gaej.example.server.GreetingServiceImpl
greetServlet
/ simplegwtapp/greet
SimpleGWTApp.html
app>
7、war:SimpleGWTApp.html:显示 GWT GUI 的 HTML 页面
doctype html>
http- equiv="content-type" content="text/ html; charset=UTF-8">
css" rel=" stylesheet" href="SimpleGWTApp.css">
Web Application Starter Project
< type="text/javascript" language="javascript" src="simplegwtapp/simplegwtapp.nocache.js">
没有评论:
发表评论