现实中的开放源码云计算,第2部分:针对云进行开发
概述:本文使用一个看似简单的应用程序和为人熟知的开源技术来阐释相关概念和探究云计算的实力。
您可能对这样的说法 —— “一次编程,处处可用” —— 早有耳闻。但是如果想要为运行在某个云中的应用程序编程,恐怕真的需要知道其中的究竟。在 “现实中的开放源码云计算” 系列的第 2 部分中,了解如何使用 PHP 编写一个运行在 Aptana 云计算平台上的应用程序。探索云应用程序和传统的 N 层应用程序之间的关键设计差异。
关于本系列
在这个分三部分的 “现实中的开放源码云计算” 系列中,学习如何判断云计算是否对您有帮助以及如何制定云计算战略。在第 1 部分中,了解云计算的益处、云的类型和可供选择的云计算平台。第 3 部分所涵盖的是部署在云上的应用程序生命周期的其他部分。
本文中,我们将学习用 PHP 编写一个简单的、在 Aptana 云计算平台上运行的应用程序。另外还将探讨云应用程序与传统 N-层应用程序的设计差异。
云计算架构
要想使软件稳定运行、执行良好且能进行伸缩以满足所有的功能需求,至关重要的一点是针对软件的运行环境来量身打造软件。这时要考虑您的软件所运行的环境是您自己的还是别人的。正如您在 现实中的开放源码云计算,第 1 部分:并不是所有云都相同 看到的,不是所有的云都相同。不同类型的云计算需要不同的设计。需要把基础云计算平台与专用云计算平台区分开来。
针对专用平台的架构
就架构而言,高度专用的平台最为复杂。当设计运行在这些云上的应用程序时,需要考虑很多问题。当然,它们带来的独特益处足以弥补这些限制。Google App Engine 是一个很好的例子。
当针对 Google App Engine 创建一个应用程序时,仅需创建应用程序源代码以及需要用到的静态资源(比如图片)。您无法控制应用服务器或数据访问。对此,有一个很好的解释:App Engine 提供高度可伸缩的解决方案。不过,您需要理解 App Engine 所提供的基础架构。Google 提供了一个 API(Google Query Language)用来访问 App Engine 数据存储。这非常类似 SQL,这样一来,您就能轻松地开始使用数据存储了。这个数据存储不是一个关系数据库,倒更像是一个简单的文件系统。
对数据库的简单访问要比对数据库的查询(通过主键找到一个单一对象)慢一些。关系查询(例如表连接)是允许的,但要通过多个连续查询才能实现。这要比关系数据库上的连接慢得多,因此很难创建一个让数据存储超负荷的查询。
为了充分利用数据存储,我们通常建议对数据进行反常规处理,比如允许相关数据存储在一起并被一起检索。例如,看这样一个例子:我们需要存储用户信息,其中每个用户都可能具有多个电话号码。这是一个典型的一对多的关系,并且通常情况下,在数据库中,都会相应地建立一个用户表及一个电话号码表,其中的电话号码表包括一个指向用户表的外键。您完全可以按同样的方法用 Google 的数据存储建模,但将电话号码封装为用户的一部分(作为一个电话号码的列表或数组),效率会更高。对数据存储的单一查询就可以返回您所需要的任何东西。
Google App Engine 并不是使用这个模型的惟一云计算平台。Amazon 的平台 SimpleDB 也以同样的方式工作。您可以在 EC2 上运行 MySQL、Postgres 或任何其他数据库,但 SimpleDB 最简单易用,并可提供某些可伸缩性方面的优势(当不允许连接时,水平伸缩会更容易)。Ning 是另一个专用平台,也提供类似的访问模式。 通过使用专用平台,您能够获益良多,但当设计一个运行于这些专用平台之上的应用程序时,需要牢记它们各自的特点。因此,使用一个基础云计算平台往往更简单些。
针对基础平台的架构
基础平台,例如 Amazon EC2 或 Joyent Accelerator,允许在其云上运行任何软件。它对架构的限制较少。如果要针对基础平台进行架构设计,可以像处理属于您自已的平台一样任意处理这个平台。若应用程序需要运行于自已的数据中心或从本地供应商租来的服务器上,该如何设计这个应用程序呢?倘若想在云计算平台上运行这个应用程序,可能根本不需要对设计做大量更改。
在基础平台上运行 Web 应用程序,与在像 Google App Engine 那样的专用平台上运行 Web 应用程序非常类似,但不同的是,可以随意使用所需要的任何应用服务器或数据库。当然,它的缺点就是您需要建立、安装、配置并管理所有这些基础架构。在这方面,云平台帮不上什么忙。
这里也有一些中间地带。Aptana Cloud 平台提供了很多的灵活性,因为它要位于 Joyent Accelerator 之上。Aptana 提供了几个可供选择的开源基础架构,您可以在其上构建应用程序,这就大大减少了工作量。它还有一些很好的工具,可用来简化部署过程。成功的关键就是选用了开源技术。
充分利用开源技术
有了基础平台,还需要着手选择应用服务器、数据库等。如何选择呢?如果要构建自已的数据中心,可能就想要使用开源技术。这同样适用于云平台。您可以选择一个 Linux® 或 UNIX® 操作系统、一个具有恰当的编程语言模块的 Apache Web 服务器以及一个 MySQL 或 Postgres 数据库。这些都是一些极为常用的选择,甚至可以找到一些预先配置好的选项。一个更容易的选择是使用 Aptana Cloud。Aptana Cloud
Aptana Cloud 将开源技术布置在 Joyent Accelerator 平台之上。由于 Joyent 在 OpenSolaris 操作系统上使用了 Xen 虚拟技术,所以 Joyent 与 Aptana 所使用的开源技术相结合,就产生了一个真正的纯开源的平台。Aptana 使用 Apache Web 服务器、Postfix 邮件服务器及 MySQL 数据库。它提供了针对 PHP 及 Jaxer 的 Apache 插件,这是一个开源容器,可用于使用服务器端 JavaScript。在撰写本文时,Aptana 还在 Aptana Cloud 上提供了面向 Ruby on Rails 的私有 beta 版本。
使用 Aptana Cloud 十分简单。Aptana 的平台被集成进了它的旗舰产品 Aptana Studio IDE 中。只需下载这个 Studio 并用它创建应用程序,然后将应用程序部署到 Aptana Cloud。如果更愿意使用自已喜欢的工具构建应用程序,也是可以的。只要将它导入到 Aptana Studio 并用 Studio 将应用程序部署到云即可。下面,我们将着重看看如何构建应用程序并将其部署到 Aptana Cloud。构建一个应用程序
本文中的示例应用程序在 Aptana Cloud 上使用了 PHP。要使用 Aptana Studio 开发应用程序,所要做的就是安装 PHP 插件,如下所示。
图 1. 为 Aptana Studio 安装 PHP 插件
安装完插件后,就可以开始编写 PHP 了。由于它是一个完整的 IDE,因此可以运行这个 PHP 应用程序,对它进行调试等。它还提供了一个用来与数据库进行交互的接口。 我们将为这个示例应用程序创建一个定制博客。这种类型的应用程序适合用于简单的平台,例如 Aptana Cloud。开始时,可以用少量的资源以较低的开销先启动这个应用程序。随着应用程序受欢迎程度的增加,再给它增加资源(垂直伸缩)。但是,即使是一个很小的应用程序也有可能出现使用 “暴增” 的情况(它将自动地增加 CPU 的使用来进行处理)。如果需要维持大量的用户,就需要用多个服务器来进行水平伸缩,还有可能需要直接使用 Joyent Accelerator 来处理定制架构。
因示例应用程序是一个博客,我们可以走个捷径。这个应用程序是在 WordPress 博客软件基础上开发的。它是一个纯 PHP 应用程序,使用了一个 MySQL 数据库,这使得它很适合 Aptana Cloud。由于它是开源的,因此只需下载代码、定制它并将它部署到服务器。在这个示例中,服务器实际上是 Aptana Cloud。
对于任何一个 WordPress 应用程序,我们的首要工作之一就是通过编辑 wp-config.php 脚本对它进行配置,以便设置数据库访问和 cookie 安全性。清单 1 给出了一个典型的示例文件。
清单 1. 配置 WordPress
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define(’DB_NAME’, ’wordpress’);
/** MySQL database username */
define(’DB_USER’, ’wpadmin’);
/** MySQL database password */
define(’DB_PASSWORD’, ’your_password_here’);
/** MySQL hostname */
define(’DB_HOST’, ’localhost’);
/** Database Charset to use in creating database tables. */
define(’DB_CHARSET’, ’utf8’);
/** The Database Collate type. Don’t change this if in doubt. */
define(’DB_COLLATE’, ’’);
/** More stuff omitted. */
?> 上述代码中有几点需要引起我们的注意。如果是在本地工作站上做开发,那么 MySQL 数据库很可能也在相同的这个机器上。这就需要将 DB_HOST 设为本地主机。这种设置与在 Aptana Cloud 上使用的设置相同。数据库将运行于与应用服务器相同的一个机器上。在将它部署到 Aptana Cloud 时,不必更改运行在工作站上的代码。
WordPress 之所以受欢迎的原因之一就是它是可扩展的。它有很多可用的插件。假如,您的公司不仅仅需要一个可用来与客户进行交互的博客,还希望在有新博文发布时能通过 Twitter 告知客户。此时,您就可以使用 WordPress 的 Twitter Tools 插件。它很简单,是一个 PHP 脚本,您可以下载并复制到 wp-content/plugins 子目录下。如果这还不能很好地满足您的要求,您可以修改代码或编写您自已的 PHP。
此外,通过创建一个新的主题(一组 PHP 脚本、CSS 文件和图像)并将代码放入 wp-content/themes 子目录,还可以定制 WordPress 的观感。定制完代码后,就可以开始将它部署到 Aptana Cloud 了。
部署到 Aptana Cloud
Aptana 的一大优点就是它的部署。只需选择 Aptana > Cloud > Deploy project 即可完成部署,如下所示。
图 2. 部署到 Aptana Cloud
在首次将一个项目部署到 Aptana Cloud 时,系统会提示您输入一些基础的注册信息。您有 3 周的时间可以免费部署到 Aptana Cloud,所以不必一开始就输入付款信息。输入完基础信息后,Aptana 将会在云上设置虚拟服务器。
图 3. 供应 Aptana Cloud
在供应和设置好站点后,就可以着手部署代码了。您可能不想简单地将代码从工作站复制到云,而是想通过源代码控制管理软件来进行部署。Aptana 又一次为您提供了所需工具并充分利用了开源技术。Aptana 使用 Subversion 并在云上建立一个源代码控制存储库。部署代码,实际上是将它添加到了 Subversion。
图 4. 部署代码 — 添加到 Subversion
一旦 Aptana 将代码添加到 Subversion 并完成部署,您就可以用它的 Smart Sync 来更新您对应用程序所做的任何增量修改。Aptana 还提供了一个用户界面,用来向此应用程序添加团队成员以便他人也可以从 Subversion 获取代码并进行协作。如果多人同时处理一个应用程序,那么它很可能会变得不太稳定。幸运的是,除了生产站点,Aptana 还在云上创建了一个准备站点。在提交给生产站点前,可以在准备站点中对更改进行测试。
部署数据
源代码控制管理非常适合于将代码部署到云,但数据又如何部署呢?对于 WordPress,一般先是要在本地安装,这会导致 WordPress 把配置数据插入到它的数据库中。随着插件、主题和其他配置的逐渐添加,会有更多的数据被写入数据库。这对于数据驱动应用程序非常典型。配置或种子(seed)数据是必要的。所幸,用 Aptana 进行部署很容易。只需用 mysqldump 命令提取数据库的转储。Aptana 有一些管理数据库的工具,其中包括流行的 phpMyAdmin 开源应用程序。可以从 Aptana 访问它,如下所示。
图 5. 从 Aptana Studio 访问 phpMyAdmin
通过 phpMyAdmin 应用程序,可以上传所创建的文件。
图 6. 上传 MySQL 转储
现在可以将您在本地创建的所有数据移到云中的数据库了。这个过程主要对应用程序的初始设置有用。也可以在本地生成 SQL 脚本,然后在准备和生产数据库上运行这些脚本,正如在自已的硬件上运行应用程序一样。
结束语
在本文中,您了解了 Aptana 是如何简化基于 PHP 与 MySQL 的应用程序开发的,也学会了如何将应用程序部署到云。这个 “真实的开放源码云计算” 系列文章的下一篇将会探究部署在云上的应用程序的生命周期的其他内容。
针对云设计并开发应用程序可能需要一些技巧,这主要取决于所使用的云计算平台的类型。不过,对于很多类型的应用程序,用标准的开源技术可以大大减化您的工作。这种方法在 Aptana Cloud 上得到了很好的体现。
评论
查看更多