面向虚拟基础设施的云服务,第 2 部分: Platform as a Service (PaaS) 和 AppScale

这个系列将探索云服务的主要类型以及可用来构建 Web 级系统的相关软件。在本文中,了解 AppScale 和 Platform-as-a-Service (PaaS) 云计算。探究虚拟基础设施的特性和架构。在本地资源或虚拟化了的云基础设施上(比如 Amazon EC2 或 Eucalyptus 上)测试 Google App Engine 应用程序是个很不错的做法。

Prabhakar Chaganti, CTO, Ylastic, LLC

Prabhakar Chaganti 是 Ylastic 的 CTO,这家创业公司正在构建一个对用户的整个 AWS 云计算环境(EC2、S3、SQS 和 SimpleDB)进行体系结构设计、管理和监视的统一界面。他是 Xen VirtualizationGWT Java AJAX Programming 两本书的作者。他还在 VMware Global Virtual Appliance Challenge 上获得了社区评选的最具创意 Virtual Appliance 奖。他目前正在撰写有关 Amazon SimpleDB 的书籍。



2010 年 2 月 22 日

简介

在这个 “面向虚拟基础设施的云服务” 系列中,了解三种主要的云服务类型:Software as a Service (SaaS)、Platform as a Service (PaaS) 和 Infrastructure as a Service (IaaS)。

面向虚拟基础设施的云服务,第 1 部分:Infrastructure-as-a-Service (IaaS) 和 Eucalyptus 探讨了 IaaS 如何能提供一组构建块或服务,比如虚拟服务器、数据存储和数据库。使用这些服务,您就能够创建一个平台来部署和运行应用程序。此外,您还了解了 Eucalyptus 这种可用来实现具有集群或工作站群的云计算的开源软件基础设施。

在本文中,了解 PaaS 平台。并获得对 Google App Engine 以及 AppScale 基础设施的介绍。探索如何使用 AppScale 在虚拟化了的基础设施(比如 Amazon EC2 和 Eucalyptus)或使用您自己的集群运行 Google App Engine 应用程序。


Platform as a Service (PaaS)

PaaS 是一种云服务,能提供由提供者托管于硬件基础设施上的软件和产品开发工具。术语 PaaS 常常用于基于云的平台,您可以利用这些平台构建和运行定制应用程序。PaaS 应用程序提供了构建和部署 Web 应用程序所需的全部东西,此外还提供了可从 Internet 上的任何地方访问到的服务。终端用户无需下载、安装或维护此系统。

PaaS 提供了一套基本的服务,包括虚拟服务器、存储和数据库。您可以使用这些服务借助 PaaS 平台所提供的工具或 API 来在该平台之上构建一个应用程序。如下所示是一些最常用的 PaaS 平台。

Google App Engine
让您能够在 Google 的基础设施上运行 Web 应用程序。可以使用 Python 或 Java™ 技术来创建您的 Web 应用程序。
Microsoft® Windows® Azure
一个基于 Windows 的环境,可用来创建云应用程序和服务。您可以使用 Microsoft Visual Studio® 以便在 Azure 平台上开发和部署应用程序。在 Community Technology Preview (CTP) 内可以找到 Azure,它可以供用户在 2010 年 1 月间免费评估使用。
Force.com
是 Salesforce.com 的一个最新创意。它提供一个可用来快速构建可伸缩应用程序的开发平台。为了在这个平台上构建、版本化和部署 Force.com 组件和应用程序,可以使用一个基于 Eclipse 的 IDE。
Morph
提供了一个完整的环境,称为 Morph Application Platform (MAP),可用来将多个 Web 应用程序托管在它们的云计算基础设施之上。
Bungee Connect
一个完整的应用程序开发和部署平台,可用来为云构建 Web 应用程序。

参见 参考资料,获得这三个平台的链接。

图 1. 常见的 PaaS 平台
常见的 PaaS 平台

PaaS 平台一般会通过一个对 Google App Engine 或 Microsoft Azureplat 这类基础设施的接口来提供可伸缩的抽象。可使用 PaaS 提供者提供的应用程序 SDK(Software Development Kit)来创建和调试应用程序。


Google App Engine

Google App Engine 是一个基于云的平台,能让您在 Google 自己的基础设施上运行您的应用程序。运行在 App Engine 上的应用程序可以是用 Python 或 Java 编程语言编写的。这种运行基于 Java Virtual Machine (JVM) 的应用程序的能力开启了无限的可能性。您可以用除 Java 之外的任何能在 JVM 内运行的其他语言来创建应用程序,比如:

  • JRuby
  • Scala
  • Clojure
  • Groovy
  • Jython
  • Beanshell

您还可以在流量增长时,轻松地伸缩您的应用程序。对于 App Engine 开发人员而言,有两种不同的价位可以选择。

免费帐号
可用来创建最多消耗 500 MB 存储空间且月浏览量最多为 500 万页的应用程序。
付费帐号
适用于消耗的资源多于免费版本的那些应用程序。您可以根据自己的需要分配预算。您总是可以控制应用程序消耗资源的最大量并相应设置资源消耗的限值。

App Engine 为专有的 Google 实现提供了良好定义的 API 的可伸缩抽象。这些抽象可供基于 Python 或 Java 的程序通过 API/SDK 使用。

服务提供者
DatastoreGoogle 的 BigTable,一种高性能的专有数据库系统,可用来以半结构化的形式存储大量数据。
缓存Memcache,一种高性能的分布式内存对象缓存系统。
身份验证用来进行身份认证和用户管理的 Google 帐户
邮件用来发送电子邮件的 Google Mail (Gmail)
图 2. Google App Engine 服务实现
Google AppEngine 服务实现

App Engine 环境还对应用程序施加了额外的限制,如下所示:

  • 只允许使用通过 Python 或 Java 技术提供的标准库的一个子集。
  • 对 CPU 请求、内存、文件大小等必须定额。
  • 对应用程序所做的任何请求都必须在 30 秒内返回。
  • 您不具备对文件系统的任何访问且只能读取作为应用程序一部分上传的静态文件。
  • 不能在 App Engine 环境大量生成线程或进程。
  • 在 App Engine 内使用的存储后端是 BigTable,一种模式较少的关键值数据存储。
  • App Engine 只能执行从一个 HTTP 请求触发的那些代码。

这些限制可能会也可能不会约束到您的应用程序。App Engine 是构建可伸缩 Web 应用程序的一种很好的方式,并且 AppScale 还提供了一种框架来模拟 Google App Engine 环境。AppScale 让您可以在本地以及在基于云的基础设施上(比如 Amazon EC2 和 Eucalyptus)透明地执行和调试 App Engine 应用程序。


AppScale

AppScale(参见 参考资料)是 Google App Engine API 的一种开源实现,来自于位于圣塔巴巴拉的加州大学的 RACELab。它是一种云计算平台,可简化 Google App Engine 应用程序在 IaaS 云(比如 Amazon 的 Elastic Compute Cloud (EC2) 或 Eucalyptus,这已经在 面向虚拟基础设施的云服务,第 1 部分:Infrastructure-as-a-Service (IaaS) 和 Eucalyptus 讨论过)上的执行。更多信息,请参见 参考资料

AppScale 带来了 App Engine 的强大功能,并能让您用自己的集群运行 App Engine 应用程序。它也可以在 IaaS 平台上透明运行。据 RACELab 团队介绍,

“我们为 AppScale 确定的目标是提供一个 Platform-As-A-Service (PaaS) 云基础设施以使用户不仅可以在其 GAE 应用程序部署到 Google 专有资源上之前先部署、测试、调试、考量和监视这些应用程序,还可以便利 PaaS 实现的调查和扩展:服务、运行时、与低层云构造的互操作等。”

图 3 显示了用 AppScale 进行的服务实现。

图 3. AppScale 服务实现
AppScale 服务实现

AppScale 的架构

AppScale 环境包含四个主要组件。AppScale 通过构建和扩展来自 Google App Engine 的 SDK 并实现由此 SDK 公开的开放 API 补充了 Google App Engine 所提供的功能。AppScale 内的多个组件可自动化系统的部署、管理、伸缩以及系统容错以便执行 App Engine 应用程序。

无需对应用程序进行更改,即可在 AppScale 内部署和运行 Google App Engine 应用程序。AppScale 并不意味着要代替或与 Google 的 App Engine 竞争。它只是用来进行云基础设施试验的一个框架,并不会向上伸展为 Google 自以为豪的基础设施。

图 4 中所示的这四个 AppScale 组件是:

AppServer
用来执行 App Engine 应用程序的一个主要组件。它是为了本地执行 App Engine 应用程序而对 Google App Engine SDK 的一个扩展。每个 AppServer 一次只可执行一个应用程序。为了托管多个应用程序,可以添加多个 AppServer。
AppLoadBalancer
此组件负责分发来自用户的初始请求。在用户成功登录后,负载均衡器就会将请求路由给适当的 AppServer 以便为该应用程序实际处理请求。此后,负载均衡器就不再参与,用户被路由到适当的 AppServer。从这种意义上讲,它与传统的负载均衡器有些许不同。负载均衡器是一个 Ruby on Rails 应用程序,负载均衡功能也是通过使用称为 nginx 的开源 Web 代理提供的。
Database Master
对数据仓库的主要接口。它提供了对 MySQL、Cassandra、Voldemort、MongoDB、HBase 和 HyperTable 各种可用数据仓库实现的访问。对其他的数据库(包括 CouchDB)的支持也将很快就可实现。
Database slaves
一个或多个数据库 slave 提供了分布式的、可伸缩的容错数据管理能力。

这些组件可以使用 AppController 与其他组件通信,AppController 控制在部署环境内的所有 AppScale 实例的设置、初始化和拆除。AppController 还负责 App Engine 应用程序的部署和身份验证。

图 4. AppScale 组件
图 4 显示了 AppScale 组件

App Engine 应用程序的用户使用 SSL 与 AppServers 交互。对 AppScale 环境的第一个登录请求总是会先到达负载均衡器,在成功登录后负载均衡器将请求路由到适当的应用程序。

创建可由用户访问的应用程序的开发人员使用 AppScale Tools 工具集与 AppScale 进行交互。借助此工具集就可以设置一个 AppScale 实例并将 App Engine 应用程序部署到 AppScale。它在概念上类似于 Amazon EC2 工具。此工具集中的一些脚本总结如下。

脚本动作
appscale-run-instances部署 AppScale 实例与一个 App Engine 应用程序
appscale-upload-app 将一个 App Engine 应用程序上传到一个运行中的 AppScale 实例
appscale-describe-instances从 AppController 和 AppServers 检索资源使用情况的统计数据,比如 CPU 和内存的使用情况。
appscale-reset-pwd为根用户/开发人员重置开发人员密码
appscale-terminate-instances清除并销毁所有的 AppScale 实例
图 5. AppScale 架构
AppScale 架构

AppScale 使用了节点的概念。一个节点 指的是 AppScale 图像实例的一个实例。一个 AppScale 部署至少包含一个节点,更多的时候是包含几个节点。一个节点则包含用来与其他节点通信的 AppController 以及一个或多个 AppScale 组件。实现 AppLoadBalancer 的节点被称为头节点。在一个 AppScale 部署中,只能有一个头节点实例。

头节点上的 AppController 是主要控制器并负有一些额外的责任:

  • 监视 AppScale 部署是否有故障节点。
  • 根据系统需要和开发人员的要求增加和收缩 AppScale 部署。
  • 从其他节点周期地收集应用程序信息。
  • 负责在需要的时候重启故障组件和重新生成节点。

图 6 给出了一个例子。

图 6. AppScale 节点
图 6 显示了 AppScale 节点

AppScale 图像实例又称 guest virtual machine (GVM)。它能在开源 IaaS 云 Eucalyptus(如在 面向虚拟基础设施的云服务,第 1 部分:Infrastructure-as-a-Service (IaaS) 和 Eucalyptus 中讨论的)之上执行,也可以在 Amazon Web Services EC2 环境中执行。通过最新的 Ubuntu 发布版,它还可被用在非虚拟的系统上。在 Eucalyptus 的情况下,可以使用 Xen、KVM 或 VMware 作为底层的虚拟层。图 7 显示了部署于 Eucalyptus 上的 AppScale。

图 7. 部署于 Eucalyptus 上的 AppScale
部署于 Eucalyptus 上的 AppScale

如下所示,Amazon EC2 使用 Xen 作为其底层的虚拟框架。

图 8. 部署于 EC2 上的 AppScale
部署于 EC2 上的 AppScale

AppScale 自带容错功能。它能承受 AppServer、Database Slave、AppLoadBalancer 和 AppController 组件内的故障。

AppScale 团队现在正在研究各种故障场景以及它们对系统的影响。他们亦在寻找如何为已部署的 AppScale 环境内的这些错误实现容错方式。

AppScale 为创建一个能推进实用计算模型的完整的端到端开源云堆栈提供了可能性。Tim O’Reilly 还为之取了一个名字 LEAP(意思是 Linux、 Eucalyptus、AppScale 和 Python)。此外,还有一些其他的项目也在试图提供类似的解决方案。其中最有希望的当属 TyphoonAE(参见 参考资料),它是一个开源项目,旨在执行基于 Python 的 Google App Engine 应用程序,后者具有可移植的数据存储、消息传递和缓存模块。在我写作本文之时,TyphoonAE 还只有测试版,不过此项目开发得相当迅速。


AppScale 的益处

AppScale 是本地测试和调试 Google App Engine 应用程序的一种极好的方式。AppScale 和 Eucalyptus 二者合起来提供了一个很好的用来探索和研究云计算的平台。

开源
AppScale 的创建就是为了用来研究云计算平台。它的源代码免费可用,这就便于人们做深入探究或是根据自己的需要创建此平台的扩展。平台的开发进展得非常迅速。特性和改进不断被添加进来。
非常适于试验
AppScale 是一个极好的试验云构造和理念的平台。它方便您尝试运行基于云的应用程序的各种新方法。此平台还很容易使用和扩展。
私有云
AppScale 以及 Eucalyptus 都可作为私有云安装于防火墙之后的数据中心,运行在您自己的基础设施之上。让您尽享对安全性和环境的完全控制。
App Engine 兼容性
一旦测试完成,您所创建的这个运行在 AppScale 框架上的 App Engine 应用程序可以很容易地被部署到实际的 Google App Engine 环境。

结束语

在本文中,您了解了 Platform as a Service (PaaS) 云计算如何能提供一组基本服务,包括虚拟服务器、存储和数据库。您可以使用这些服务以及 PaaS 平台提供的工具或 API 来在 PaaS 平台上构建一个应用程序。您还探索了如何使用 AppScale 在虚拟基础设施上或 Infrastructure as a Service (IaaS) 系统(比如 Amazon EC2 和 Eucalyptus)上执行 Google App Engine 应用程序。

参考资料

学习

  • 探索 Amazon Web Services 的奇妙世界,它为所有规模的公司提供了一个位于云内的基础设施 Web 服务。
  • 更多地了解 IaaS 平台,例如 Amazon Web Services Elastic Compute Cloud (EC2)Eucalyptus
  • 从 Twitter 上的 @eucalyptuscloud 跟随 Eucalyptus 的更新。
  • 对于 AppScale:
  • 对于 Google App Engine:
    • App Engine 的 applications gallery 展示了示例应用程序以及您能创建和部署的应用程序的类型。
    • TyphoonAE 是一个开源项目,提供了用来运行 Google App Engine (Python) 应用程序的一种特性完备而且高效的服务环境。
    • Python 和 Java for App Engine 的 Getting Started 指南提供了使用 GAE SDK 构建应用程序的详尽文档。它还对 API 进行了描述。
  • 查阅 Force.com,来自 Salesforce.com 的最新创意,它为快速构建可伸缩的应用程序提供了一个平台。
  • Morph 提供了一个称为 Morph Application Platform (MAP) 的完整环境来将多个 Web 应用程序托管在其云计算基础设施上。
  • 更多地了解 Bungee Connect,这种用来为云构建 Web 应用程序的完整的应用程序开发和部署平台。
  • 使用 Ubuntu Launchpad 跟踪 Ubuntu 发布版内对 AppScale 包的更改。
  • Memcached 是一个高性能的分布式内存对象缓存系统。
  • 收听针对软件开发人员的有趣访谈和讨论,请访问 developerWorks podcasts
  • 访问 developerWorks Open source 专区 获得丰富的 how-to 信息、工具和项目更新以及 最受欢迎的文章和教程,帮助您用开放源码技术进行开发,并将它们与 IBM 产品结合使用。
  • 查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动
  • My developerWorks 涵盖了大量主题,是一个成功社区的典范。
  • 查看免费的 developerWorks 演示中心,观看并了解 IBM 及开源技术和产品功能。

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Open source, Cloud computing
ArticleID=469039
ArticleTitle=面向虚拟基础设施的云服务,第 2 部分: Platform as a Service (PaaS) 和 AppScale
publish-date=02222010