本文作者将介绍一些领先的云计算平台,并提供关于这些云计算平台可以处理的用例指导。
平台即服务 (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 类的一个子集;它们无法创建新的线程。
清单 1 展示了 Google App Engine 中的一个简单的 “Hello World” 应用程序。
清单 1. Google App Engine “Hello World”
from google.appengine.ext import webappfrom google.appengine.ext.webapp.util import run_wsgi_appclass Main
Page(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 服务允许用户调度按固定时间间隔运行的任务,例如,每天或每小时运行一次。应用程序甚至可以执行添加到队列本身的任务。例如,它可以在处理请求时提交后台任务。