根据您的需要选择最佳 PaaS 云

从多种平台中选择一个合适云平台的入门指南

平台即服务 (PaaS) 通常被认为是三种主要的云计算服务交付模型之一。它简化了云应用程序开发,实现了简单、灵活的资源分配以及各种工具和服务。然而,这个术语掩饰了云平台的广泛的多样性。本文作者将介绍一些领先的云计算平台,并提供关于这些云计算平台可以处理的用例指导。

John Rhoton, 云计算专家

/developerworks/i/p-jrhoton.jpgJohn Rhoton 是一名技术策略家,专门为跨国企业客户提供有关公共云、私有云和混合云计算的咨询。他定期在行业活动中发表有关新兴技术的演讲,这些技术包括移动、社交网络和虚拟化,John Rhoton 还是六本书的作者,其中包括 Cloud Computing Explained(2009)和 Cloud Computing Architected(2011)。



2012 年 12 月 10 日

平台即服务 (PaaS) 通常被认为是三种主要的云计算服务交付模型之一,另外两种是基础架构即服务和软件即服务。它加速了云应用程序开发,提供了托管基础架构、简单而又灵活的资源分配以及丰富的工具和服务,通过这些帮助实现高效的代码和运行时性能。

然而,这个术语却掩饰了云平台的广泛的多样性。粗看起来,Windows® Azure™ 和 Google App Engine 或 Force.com 之间似乎没什么共通性。Amazon Web Services™ (AWS™) 采用一种完全不同的方法逐渐从 IaaS 迁移到 PaaS。而私有平台,比如 VMware® 提供的平台,则满足了另外一些需求。本文将介绍一些领先的云计算平台,并提供关于这些云计算平台可以处理的用例的指导。

历史

PaaS 是融合了两种趋势而形成的:

  • IaaS 并不是最理想的云计算平台。
  • web 应用程序的发展演变。

基础架构服务为希望扩展或将其应用程序迁移到云环境中的客户提供了许多优势;然而,基础架构服务通常运行在为桌面或传统的客户机-服务器环境而设计的平台上。它们目前可能已经实现了虚拟化,但并未针对云而进行优化。

第二个值得注意的趋势是 Web 托管站点的不断演变。GeoCities 等在 20 世纪 90 年代中期就提供了 HTML 托管服务;然而,Web 托管服务的数量曾以惊人的速度在增长,这些服务支持各种活跃的服务器端组件,其中包括 Microsoft® ASP.NET 和 Java™ 技术,以及 PHP、Python 和 Ruby on Rails 脚本等。与基础架构服务相比,这些平台减少了每个应用程序的存储需求并简化了部署。


考虑事项

在选择 PaaS 云时,云应用程序开发人员、云迁移专家或正在实现云的管理员有哪些基本选择?

  • 开放云、专有云或混合云(以及混合方式)……了解每种类别的一些概念即可。
  • 托管结构和限制:支持哪些内容,不支持哪些内容,等等。
  • 资源分配方式:自动化程度,易于开发 (ease to tap),解除资源分配是否和分配一样简单,等等。
  • 数据存储功能和方法:持久性自动存储还是根据请求执行存储,等等
  • 支持的开发工具和管理工具
  • 性能和事务类型及数量。
  • 各种云组件的安全性:如何实现安全性?

Google App Engine

Google App Engine 是目前已知的最好的平台之一。除了提供基本的运行时环境之外,它还消除了在构建可扩展至数百万用户的应用程序过程中可能遇到的系统管理和开发挑战。它提供了一些工具,可将代码部署到集群,并提供了诸如监视、故障转移、自动扩展和负载平衡等功能。

Google App Engine 最初仅支持基于 Python 的运行时环境,之后又增加了对 Java Virtual Machines (JVM) 的支持,因此,它不仅能够支持使用 Java 编写的应用程序,而且还能够支持使用其他 JVM 语言编写的应用程序,比如 Groovy、JRuby、Jython、Scala 或 Clojure。软件开发工具箱包括了完整的本地开发环境,可以在开发人员的台式机上模拟 Google App Engine。

Google App Engine 对编程语言有一些限制。例如,Python 模块必须是纯 Python 模块,因为 C 和 Pyrex 模块不受支持。同样,Java 应用程序只能使用 Java Runtime Environment (JRE) Standard Edition 类的一个子集(JRE Class White List;请参阅 参考资料);它们无法创建新的线程。

清单 1 展示了 Google App Engine 中的一个简单的 “Hello World” 应用程序。

清单 1. Google App Engine “Hello World”
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, World!')
application = webapp.WSGIApplication(
                                     [('/', MainPage)])
def main():
  run_wsgi_app(application)
if __name__ == "__main__":
  main()

不同应用程序使用的实际代码是明显不同的。如清单 1 中的 Python 例子所示,如果应用程序逻辑很少的话,那么命令会非常简单。需要导入 SDK 中包含的一些模块并定义一个请求处理程序 MainPage,它处理所有到根 URL 的 HTTP GET 请求。该方法可以使用 self.response 对象编写 HTTP 响应。run_wsgi_app() 函数获取一个 WSGIApplication 实例并在 Google App Engine 的 Common Gateway Interface (CGI) 环境中运行它。如果您的需求不多的话,那么使用这些代码内容就足够用了。

Google App Engine 数据存储使用乐观并发控制 (optimistic concurrency control) 支持查询、排序和事务。这是一种高度一致的分布树数据库,它基于低级的 BigTable 数据存储系统并增加了一些额外的功能。Google App Engine 的查询语言(称为 GQL)在 SELECT 语句中类似于结构化查询语言 (SQL),但是有一些明确的限制。例如,GQL 不支持 JOIN 语句,因此只能接受单一的表查询。

尽管该环境存在一些限制,它还是提供了丰富的应用程序编程接口 (API)。除了前面提到的数据存储功能外,它还提供了一组库函数:

  • 身份验证。 应用程序可以与 Google 帐户交互,从而实现用户身份验证。它可以指引用户登录 Google 帐户并访问电子邮件地址,并在用户完成身份验证后显示用户名。OpenID 用户还可以在任何 OpenID 供应商处创建一个身份,并使用该身份对 Google App Engine 应用程序进行身份验证。
  • Memcached。 Memcached 服务为应用程序提供了一个内存键值对缓存,可供多个应用程序实例访问。不对临时数据使用持久性和事务性特性将会很有用,比如在本地缓存数据存储,以实现高速访问。
  • 调度任务。cron 服务允许用户调度按固定时间间隔运行的任务,例如,每天或每小时运行一次。应用程序甚至可以执行添加到队列本身的任务。例如,它可以在处理请求时提交后台任务。

Windows Azure

Windows Azure 是 Microsoft 的 PaaS 产品。它在概念上类似于 Google App Engine,允许在 Microsoft 数据中心内托管并运行基于 Microsoft 技术的应用程序。它的 Fabric Controller 会自动管理资源、平衡负载和复制,以获得灵活性,并管理应用程序生命周期。

Windows Azure 平台在专用操作系统上被构建为托管在 Microsoft 数据中心内的分布式服务。它是分为三个部分来实现的:计算、存储和一个用于管理 fabric 的平台。计算实例是作为一种角色类型向用户公开的,指定了针对典型应用调整的配置。Web 角色实例通常与用户交互并托管主机 Web 站点和其他前端代码。而 worker 角色实例执行与 Google App Engine cron 类似的后台任务。

尽管 Web 和 worker 是最常见的角色类型,但 Windows Azure 仍然针对特定需求提供了额外的模板。例如,CGI Web 角色支持 FastCGI 协议,因此能够支持其他编程语言,包括 PHP、Ruby、Python 和 Java。Windows Communications Foundation (WCF) 是一个简化 WCF 服务支持的 Web 角色。Windows Azure 现在还提供了一个基础架构服务(通过 VM 形式),可以接受 Windows Server® 2008 R2 VM 映像的上传。

Windows Azure 存储提供了可托管三种数据的服务:

  • Blobs。 Blobs 是非结构化数据流(或至少是模糊数据);数据可以是一张图片、一个文件或任何应用程序需要的东西。
  • 表。表用于存储结构化数据。它们通常保存一些相同类型的行(称为实体),这些行是根据一些列(称为属性)来定义的。尽管在概念上有一些相似,但 Windows Azure 存储表和关系表仍然存在一些显著的差异。Windows Azure 不会强制要求使用模式,也不会支持使用 SQL 作为查询语言。
  • 队列。队列为应用程序执行异步通信和协调提供了一种机制。

Windows Azure 术语中的 “fabric” 一词指的是运行 Windows Azure 操作系统的一组机器,它们被共同管理,通常位于同一个区域。Fabric Controller 是一个代码层,指配了所有用户实例(Web 和 worker 角色)并执行任何必要的更新。它还监视应用程序,根据需要重新指配和分配资源,确保所有服务都能正常运行。


Force.com

Salesforce.com 也交付一种称为 Force.com 的 PaaS。它与 Google 和 Microsoft 的产品不同。它也基于自身技术提供了托管服务,并提供了冗余、安全和可扩展等常见特性。但是 Force.com 更加侧重于数据处理而不是代码处理。

外部编程访问

Force.com 将所有特定于用户的配置(表、报告、工作流、用户特权、定制和业务逻辑)公开为元数据,通过编程方式访问它们。它提供了一个 Web 服务 API (SOAP),允许从任何环境访问所有 Force.com 应用程序数据。该平台还提供了开发人员工具箱,适用于 Microsoft .NET、Java、Facebook、Google、AWS 以及 ERP 的预打包连接器(SAP R/3 和 Oracle Financials)、桌面软件(Microsoft Office、IBM® Lotus Notes®)和中间件(Tibco、Pervasive、IBM Cast Iron®)。除了常规数据访问外,Force.com 还使用了一个外部搜索引擎,提供完整的索引并允许搜索非结构化数据。

Apex

Force.com 应用程序是使用 Visualforce 和 Apex 构建的,Visualforce 框架用于创建图形用户界面,而 Apex 是一种专门的编程语言,使用的语法类似于 Java,但是行为更加类似于数据库存储流程(参见清单 2)。

清单 2. Apex 帐户更新
// This class updates the Hello field on account records that are
// passed to it.
public class MyHelloWorld {
   public static void addHelloWorld(Account[] accs){
      for (Account a:accs){
        if (a.Hello__c != 'World') {
           a.Hello__c = 'World';
        }
      }
   }
}

Force.com 有三种程序逻辑:

  • 声明式逻辑(审计日志、工作流和批准)
  • 基于公式的逻辑(数据验证和工作流规则)
  • 过程式(procedural)逻辑(Apex 触发器和类;清单 3)
清单 3. Apex 触发器
trigger helloWorldAccountTrigger on Account (before insert) {
   Account[] accs = Trigger.new;
   MyHelloWorld.addHelloWorld(accs);
}

Apex 可以作为独立脚本根据需要运行,也可以作为触发器在出现数据事件时运行,如清单 3 所示。该语言允许开发人员向事件添加业务逻辑,如单击按钮或者更新记录和 Visualforce 页面。工作流逻辑可以触发任务,发送电子消息,更新数据库,通过将出局 SOAP 消息发送到任何 Internet 目的地与外部应用程序进行交互。


Amazon Web Services

Amazon 是基础架构服务的市场领导者和事实标准。AWS 与更典型的平台服务之间的主要区别在于 Amazon 没有建立特定的运行时环境。您可以使用其中一种 Amazon 预构建机器映像,但是并不局限于这些机器,您可以在 Amazon 环境中运行几乎任何平台。

这样做的必然结果是:尽管 Amazon 提供了一种管理和分布 VM 的方法,它并没有直接提供特定的功能来管理应用程序。

图 1 提供了一个 Amazon Elastic Compute Cluster (Amazon EC2™) 界面的示例。

图 1. Amazon EC2
显示 Amazon EC2 界面

AWS 的核心组件是 Amazon EC2 及其附加的存储服务。Amazon EC2 为用户提供了一个模板选择,可以在共享的虚拟化环境中实例化该模板(如图 1 所示)。每个 VM 都是在 Amazon Machine Image (AMI) 中调用的。Amazon AMI 没有任何持久性存储,但是可以在实例保持活跃的情况下将它们用于日志、结果和中间数据。由于本地安装的 AMI 磁盘在实例化期间丢失,Amazon 还提供了两个永久性存储功能:Amazon Simple Storage Service (Amazon S3) 实现了关键值存储,而 Amazon Elastic Block Store (Amazon EBS) 提供了文件系统的基础。

还可以将更多结构化数据存储到 Amazon SimpleDB 中。将它们用于通用查询或 Amazon Relational Database Service (Amazon RDS),这是一个 Web 服务,可以在云中设置、运行和扩展关系数据库。

除了计算和存储外,Amazon 还提供了一套增值服务,包括内容交付、队列通知、负载平衡、自动扩展、指配和监视。

Amazon 在提供完整 PaaS 支持方面最大的一个举措就是发布了 AWS Elastic Beanstalk,该服务面向 Java 开发人员并基于 Apache Tomcat 软件栈构建。用户可以使用 AWS Management Console、AWS Toolkit for Eclipse、Web 服务 API 或命令行工具将任何标准的 Java Web 应用程序归档文件上传到 AWS Elastic Beanstalk。


VMware

在私有数据中心托管应用程序为您提供了最大程度的控制能力和灵活性。在选择的硬件上使用所需的任何 Web 框架安装好 Apache 或 Microsoft Internet Information Services (IIS) 之后,您就可以上传已经在自己的环境中开发出来的应用程序。您可以选择自己的编程语言,而且可以自由地实现任何必要接口,以便连接到遗留或合作伙伴系统。您只需要安装 PHP、Python/Django、Ruby/Rails 或一组完整的 Java 工具接口。最大的缺陷是您不能自动获得任何云计算有关的。您可以在内部重现这些优势,但是这样做要求投入大量工作并进行一定程度的投资,而这可能只适合大型企业。

对于那些决定实施私有云的人们,要获得性能、利用率和自动化方面的优势,可能需要用到一些工具、产品和服务。VMware 的强大的虚拟化技术组合可以帮助满足这些需求。

VMware 的面向云的活动大部分是在其 VMware vCloud 计划中开展的。vCloud 代表一些支持技术,包括 VMware vSphere、vCloud API 和 vCloud 服务供应商生态系统。vSphere 平台是 VMware 的旗舰产品,它是一个虚拟化框架,能够管理大型基础架构池,包括来自内部和外部网络的软件和硬件。vCloud API 是一个具态传输接口(Representational State Transfer interface 和 RESTful),用于在云中提供和消费虚拟资源。它支持在私有、公共和混合云中部署和管理虚拟化工作负载。此 API 支持虚拟设备 (vApps)、网络和 “虚拟数据中心” 的上传、下载、实例化、部署和操作。vCloud API 的两个主要组件是 User API(侧重于 vApp 指配)和 Admin API(用于平台/租户管理)。

vCloud 服务供应商生态系统是一个常见的云计算服务集合,面向企业和服务供应商,支持任意应用程序或操作系统,能够选择应用程序所在的位置(本地或异地)。它由 Terremark 和 Hosting.com 之类的服务供应商交付,包括一些可用作虚拟设备的应用程序。

除了面向基础架构的产品之外,VMware vFabric 还提供一个私有平台服务,它将 Spring Java 开发框架与一些集成服务结合在一起,这些服务包括应用服务器、数据管理、云就绪的消息传递、负载平衡和性能管理。


IBM SmartCloud Application Services

对于那些希望利用公共云的优点,同时要求在安全性、定制和内部应用程序集成方面满足企业级标准的用户,IBM 还提供了 IaaS(IBM SmartCloud Enterprise)和 PaaS(IBM SmartCloud Application Services)。这两者关系密切,因为 IBM SmartCloud Application Services 自动将虚拟资源部署到 IBM SmartCloud Enterprise。它们共同交付安全的、协作式的、基于云的环境,支持并加快完整的应用程序生命周期 —— 开发、部署和交付。图 2 提供了 IBM SmartCloud Application Services 界面的一个示例。.

Figure 2. IBM SmartCloud Application Services
图片显示了 Amazon EC2 界面

IBM SmartCloud Application Workload Services 包含最初在 IBM Workload Deployer 中引入的高级模式技术。这种高级模式技术提供了可轻松创建、部署和管理专业技术模式的能力。专业技术模式根据多年的经验嵌入了最佳的实现、配置、管理和监视实践,可以实现特定的软件解决方案。这些模式由 IBM 和独立软件供应商通过一个在线目录提供。专业技术模式已进行了简化,可以快速创造价值,同时确保获得一致、可预测的结果。用户还可以使用 IBM SmartCloud Application Workload Services 附带的集成工具创建定制的专业技术模式,并在整个组织中共享这些模式。

这种高级的模式技术也包含在 IBM 的新的 PureSystems 系列中:

  • IBM PureApplication™ System:专门针对事务 Web 和数据库应用程序及其工作负载感知特性而设计并优化的平台系统。
  • IBM PureFlex™ System:包含用于管理存储、网络、RAS、安装和安全任务的模式的平台。

标准化和可移植性

上述的每一个平台都各有优缺点。开发人员面对的最大挑战是这些平台都各不相同。在一个平台上开发的应用程序很难在另一个平台上正常运行。

为了保障用户投资并降低供应商绑定风险,要求对平台进行整合的呼声日益强烈,许多标准组织都从各自的角度实现云计算。最著名的计划集中在 IaaS 上,但也逐渐增加了 PaaS 功能。从较高的层面上看,它们采用了两种不同的方法:

  • Eucalyptus 和 CloudStack 提供了与 AWS 的兼容,因此使用 Amazon 为混合云提供了便利。选择 Amazon 的好处是它的接口比较受认可,而 AWS 提供了巨大的容量,能够满足突然增加的资源需求。然而,Amazon 拥有 API,并且可以选择采用任何方向开发它们,这意味着它们并不是完全开放的。
  • OpenStack 是一些开源技术项目的集合,它们由广泛的行业领先者联盟(包括 IBM)共同赞助。它提供了一个操作平台,可以以较大的规模对云进行组织。它与管理程序是中立的,并且包含了在标准硬件上指配 VM 的软件。除了计算池外,它提供了一个分布式对象存储、一个调度程序、网络控制器和身份验证管理器。

结束语

随着这些标准计划的不断成熟,您可以预见的是:某个行业标准平台将会日渐具体化并超越本文所述的众多特性。在此过程中,您需要尝试使用各种不同的平台和软件栈。

由于每个平台都有各自的优缺点,用户需要进一步查看自己在编程语言和开发工具方面的需求,以及在连接、可扩展性和安全方面对基础架构的依赖性。好消息是您有许多选择,这增加了找到适合自己的平台的几率。但坏消息是用户必须做出选择,这并不是一件容易的事。

参考资料

学习

获得产品和技术

  • 以最适合您的方式 评估 IBM 产品:下载产品试用版、在线试用产品、在云环境中使用产品,或在 SOA 沙盒 中学习如何高效地实现面向服务的架构。

讨论

  • 加入 developerWorks 社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

条评论

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=Cloud computing
ArticleID=851064
ArticleTitle=根据您的需要选择最佳 PaaS 云
publish-date=12102012