使用社会网络可以更轻松地获取并聚合数据,从而创建富有革新精神的新 Web 应用程序。但是,仍然必须处理创建可伸缩 Web 应用程序的所有常见问题。现在,使用 Google App Engine (GAE) 也可以简化工作。使用 GAE,可以不必考虑管理应用服务器池的所有事务,而是集中精力创建优秀的 mashup。本文是共分三部分的系列文章 “ 使用 Eclipse 在 Google App Engine 上创建 mashup” 的第二部分,在本文中,将利用并增强在第 1 部分中构建的应用程序。我们将通过 GAE 的更多数据建模功能来提高性能。然后使用 GAE 的 Memcache 服务进一步提高性能。
在本系列中,将了解如何开始使用 Google App Engine (GAE)。在 第 1 部分 中,了解了如何设置开发环境,以便可以开始创建运行在 GAE 上的应用程序。了解如何使用 Eclipse 简化应用程序的开发和调试。本文是第 2 部分,将使用 Eclipse 构建 Ajax mashup 并将其部署到 GAE 中。最后,在第 3 部分中,将通过为应用程序创建 RESTful Web 服务返回到生态系统,这样其他人就可以使用它创建自己的 mashup。
GAE 是创建 Web 应用程序的平台。使用它的最重要的先决条件是具备 Python 知识,因为要在 GAE 中使用 Python 作为编程语言(目前为 Python V2.5.2)。对于本系列,具备一些典型的 Web 开发技能将会有帮助(例如,HTML、JavaScript 和 CSS 知识)。要针对 GAE 进行开发,需要下载三个软件包。
-
Eclipse Classic
- 我使用的是 Eclipse Classic V3.3.2。更新的版本也可以使用。
-
Google App Engine SDK
- 阅读 GAE 站点中的官方文档并查找下载 SDK 的链接。
-
PyDev
- 使用更新站点 http://pydev.sourceforge.net/updates/ 从 Eclipse 内下载 PyDev,它可以将 Eclipse 转换为 Python IDE。
如何安装后两个软件包已经在 第 1 部分 中讨论过。如果您刚开始使用 Eclipse,请参阅 参考资料 了解入门知识。
![]() ![]() |
![]()
|
在 第 1 部分 中,我们构建了一个小型应用程序,用来聚集内容提要并通过 GAE 处理它们。我们可以在此基础上继续开发并将该应用程序部署到 GAE 中,但是在这之前,让我们对它实现一些增强功能。第一组增强与性能有关。第 1 部分的版本将在每次请求页面时从订阅的服务中提取数据。这可能需要花费很长时间,尤其是如果任何一项服务响应较慢或一个用户订阅了多项服务。这是常见问 题,但是对于运行在 GAE 上的程序来说,这个问题尤为严重。要让 GAE 具有可伸缩性,就需要减少长时间运行的请求。如果处理时间过长,则会终止该请求并向用户发送一条错误消息。这并不是我们想要的结果,因此将更多地使用 GAE 的数据建模和 Bigtable 特性来提高性能。Bigtable 是用于管理结构化数据的分布式存储系统(有关更多信息,请参阅 参考资料)。还将使用它的 Memcache API 来做出更多改进。
我们将在本文中实现的另一组增强将处理用户体验。通过向应用程序添加 Ajax 元素改进用户界面。不仅将使用 Ajax,还将绑定一些数据建模及缓存增强以进一步提高应用程序的性能。实现了这些增强后,我们就可以将应用程序部署到 GAE 中。首先来看一看数据建模增强。
在 第 1 部分 中,我们使用了一个数据模型:Account。它使用了 GAE 的 Expando 属性特性来存储服务的 URL。为了提高性能,需要存储提要中的实际数据。访问 Bigtable 绝不会像访问传统的关系数据库(或者至少是负载较轻的关系数据库)一样快,但是应当比从数据源中提取提要快得多。不过,如果只依赖 Bigtable,则永远得不到新功能。因此,需要跟踪何时提取实时数据并将其插入 Bigtable 中,因此如果数据过时,那么我们可以返回到数据源。
在创建新数据模型之前,还有一件事需要考虑。不同的用户可以拥有相同的提要。提要与帐户之间存在多对多关系。了解这些之后,让我们看一看新模型。清单 1 中显示了修改后的 Account 模型。
清单 1. Account 模型
class Account(db.Model): |
这里的主要更改是从模型中移除了服务信息。如何确定服务的 URL?该信息已被移到独立的模型级数据结构(目录)中,如下所示:
本文转自IBM Developerworks中国