什么是GAE?
Google App Engine (GAE)可让您在 Google 的基础架构上运行您的网络应用程序。App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展。使用 Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务。
您可以使用 Google 企业应用套件通过自己的域名(例如 http://www.example.com/)提供应用程序。或者,您可以使用 appspot.com 域上的免费域名来为您的应用程序提供服务。您可以与全世界的人共享您的应用程序,也可以限制为只有贵组织的成员可以访问。
Google App Engine 支持以几种编程语言编写的应用程序。通过 App Engine 的 Java 运行时环境,您可以使用标准 Java 技术(包括 JVM、Java servlet 和 Java 编程语言,或使用基于 JVM 的解释器或解译器的任何其他语言,例如 JavaScript 或 Ruby)构建应用程序。App Engine 还提供一个专用的 Python 运行时环境,该环境包括一个快速 Python 解释器和 Python 标准库。Java 和 Python 运行时环境构建为确保应用程序快速、安全运行,并不受系统上的其他应用程序的干扰。
在 App Engine 中,您只需为您使用的资源付费。没有设置成本,也没有重复的费用。您的应用程序使用的资源,如存储空间和带宽以千兆字节衡量,并以有竞争力的费率收费。您可以控制您的应用程序可以消费的最大资源量,使其一直保持在预算范围内。
可以免费开始使用 App Engine。所有应用程序都可以使用多达 500 MB 的存储空间,以及可支持每月约 500 万页面浏览量的足够的 CPU 和带宽,完全免费。为您的应用程序启用付费后,您的免费配额将提高,您只需为使用的超过免费水平的资源付费。
应用程序环境
通过 Google App Engine,即使在负载很重和数据量极大的情况下,也可以轻松构建能安全运行的应用程序。App Engine 包括以下功能:
◆动态网络服务,提供对常用网络技术的完全支持
◆持久存储空间,支持查询、分类和事务
◆自动扩展和负载平衡
◆用于对用户进行身份验证和使用 Google 帐户发送电子邮件的 API
◆一种功能完整的本地开发环境,可以在您的计算机上模拟 Google App Engine
◆用于在指定时间和定期触发事件的计划任务
您的应用程序可在以下两个运行时环境之一中运行:Java 环境和 Python 环境。各环境均为网络应用程序开发提供标准协议和常用技术。
沙盒
应用程序在安全环境中运行,该安全环境仅提供对基础操作系统的有限访问权限。这些限制让 App Engine 可以在多个服务器之间分发应用程序的网络请求,并可以启动和停止服务器以满足访问量需求。沙盒将您的应用程序隔离在它自己的安全可靠环境中,该环境与网络服务器的硬件、操作系统和物理位置无关。
安全沙盒环境的限制示例包括:
◆应用程序只能通过提供的网址抓取以及电子邮件服务访问互联网中的其他计算机。其他计算机只能通过在标准端口上进行 HTTP(或 HTTPS)请求来连接至该应用程序。
◆应用程序无法向文件系统写入。应用程序只能读取通过应用程序代码上传的文件。该应用程序必须使用 App Engine 数据存储区、memcache 或其他服务存储所有在请求之间持续存在的数据。
◆应用程序代码仅在响应网络请求或 cron job 时运行,且任何情况下必须在 30 秒钟内返回响应数据。请求处理程序不能在响应发送后生成子进程或执行代码。
Java 运行时环境
您可以使用常用 Java 网络开发工具和 API 标准开发在 Java 运行时环境中运行的应用程序。您的应用程序使用 Java Servlet 标准和环境交互,并可以使用常用网络应用程序技术,例如 JavaServer 页面 (JSP)。
Java 运行时环境使用 Java 6。App Engine Java SDK 支持使用 Java 5 或 6 开发应用程序。
该环境包括 Java SE 运行时环境 (JRE) 6 平台和库。沙盒环境的限制在 JVM 中实现。只要应用程序不超过沙盒的限制,就可以使用任何 JVM 字节码或库功能。例如,尝试打开套接字或向文件写入的字节码将引发运行时异常。
您的应用程序使用 Java 标准 API 来访问大多数 App Engine 服务。对于 App Engine 数据存储区,Java SDK 包括 Java 数据对象 (JDO) 和 Java 持久性 API (JPA) 接口的实现。应用程序可使用 JavaMail API 通过 App Engine 邮件服务发送电子邮件。java.net HTTP API 访问 App Engine 网址抓取服务。App Engine 还包括低级 API 以使用其服务实现额外适配器或直接从应用程序使用。请参阅有关数据存储区、memcache、网址抓取、邮件、图像和 Google 帐户 API 的文档。
通常,Java 开发人员使用 Java 编程语言和 API 来实现 JVM 的网络应用程序。通过使用 JVM 兼容的解译器或解释器,您还可以使用其他语言来开发网络应用程序,例如 JavaScript、Ruby 或 Scala。
Python 运行时环境
通过 App Engine 的 Python 运行时环境,您可以使用 Python 编程语言实现应用程序,并在优化的 Python 解释器上运行。App Engine 包括针对 Python 网络应用程序开发的丰富的 API 和工具,包括功能丰富的数据建模 API、易于使用的网络应用程序框架和用于管理和访问您的应用程序的数据的工具。您还可以利用针对 Python 网络应用程序开发的多种成熟的库和框架,例如 Django。
Python 运行时环境使用 Python 2.5.2 版。将在未来版本中考虑对于 Python 3 的额外支持。
Python 环境包括 Python 标准库。当然,不是该库的所有功能都可以在沙盒环境中运行。例如,对尝试打开套接字或向文件写入的方法的调用将引发异常。为方便起见,主要功能不受该运行时环境支持的标准库中的多个模块已被禁用,而导入这些模块的代码将引发错误。
为 Python 环境编写的应用程序代码只能以 Python 编写。用 C 语言编写的扩展不受支持。
Python 环境为数据存储区、Google 帐户、网址抓取和电子邮件服务提供了丰富的 Python API。App Engine 还提供了一个称为 webapp 的简单 Python 网络应用程序框架,从而可以轻松开始构建应用程序。
只要其他第三方库是使用纯 Python 实现的并且不需要任何不受支持的标准库模块,您就可以使用您的应用程序上传这些库。
数据存储区
App Engine 提供了一个强大的分布式数据存储服务,其中包含查询引擎和事务功能。就像分布式网络服务器随访问量增加一样,该分布式数据存储区也会随数据而增加。
该 App Engine 数据存储区与传统关系数据库不同。数据对象(或“实体”)有一类和一组属性。查询可以检索按属性值过滤和分类的指定种类的实体。属性值可以是受支持的属性值类型中的任何一种。
数据存储区实体是“无架构”的。数据实体的结构由应用程序代码提供和执行。Java JDO/JPA 接口和 Python 数据存储区接口包括用于在您的应用程序内应用和执行结构的功能。您的应用程序还可以直接访问数据存储区以根据需要应用或多或少的结构。
数据存储区高度一致并使用乐观并发控制。如果有其他进程尝试更新某实体,而同时该实体位于以固定次数进行重新尝试的事务中,此时该实体将更新。应用程序可以在一个事务中执行多项数据存储区操作(全部成功或者全部失败,从而确保数据的完整性)。
数据存储区通过其分布式网络使用“实体组”实现事务。一个事务操作一个组内的实体。同一组的实体存储在一起,以高效执行事务。应用程序可以在实体创建时将实体分配到组。
Google 帐户
App Engine 支持将应用程序与用于用户验证的 Google 帐户集成。应用程序使用户可以通过 Google 帐户登录,并可以访问与该帐户关联的电子邮件地址和可显示的名称。使用 Google 帐户使用户可以更快地开始使用您的应用程序,因为用户可以不需要创建新帐户了。Google 帐户还省去只为您的应用程序实现用户帐户系统的麻烦。
如果您的应用程序正在 Google 企业应用套件下运行,则它可以与您组织的成员和 Google 企业应用套件帐户成员使用相同的功能。
用户 API 还可告知应用程序当前用户是否是应用程序的注册管理员。这样便可以轻松实现您站点上仅管理员可访问的区域。
什么是GAE:App Engine 服务
App Engine 提供了多种服务,从而可让您在管理应用程序的同时执行常规操作。提供了以下 API 以访问这些服务:
网址抓取
应用程序可以使用 App Engine 的网址抓取服务访问互联网上的资源,例如网络服务或其他数据。网址抓取服务使用检索许多其他 Google 产品的网页的高速 Google 基础架构来检索网络资源。
邮件
应用程序可以使用 App Engine 的邮件服务发送电子邮件。邮件服务使用 Google 基础架构发送电子邮件。
Memcache
Memcache 服务为您的应用程序提供了高性能的内存键值缓存,您可通过应用程序的多个实例访问该缓存。Memcache 对于那些不需要数据存储区的持久性存储和事务功能的数据(例如临时数据或从数据存储区复制到缓存以进行高速访问的数据)很有用。
图像操作
图像服务使您的应用程序可以对图像进行操作。使用该 API,您可以对 JPEG 和 PNG 格式的图像进行缩放、裁剪、旋转和翻转。
计划任务
Cron 服务允许您将任务计划为按指定间隔运行。有关此服务的详细信息,请参阅 Python 或 Java cron 文档。
开发工作流
分别针对 Java 和 Python 的 App Engine 软件开发工具包 (SDK) 包括可以在您的本地计算机上模拟所有 App Engine 服务的网络服务器应用程序。每一 SDK 均包括 App Engine 中的所有 API 和库。该网络服务器还可以模拟安全沙盒环境,包括检查是否尝试访问在 App Engine 运行时环境下不允许的系统资源。
SDK 还包括可将您的应用程序上传到 App Engine 的工具。创建了您的应用程序的代码、静态文件和配置文件后,即可运行该工具上传数据。该工具会提示您提供 Google 帐户电子邮件地址和密码。
构建已在 App Engine 上运行的应用程序的新主要发行版时,可以将新发行版作为新版本上传。在您改为使用新版本之前,旧版本可以继续为用户提供服务。可以在旧版本仍运行的同时在 App Engine 上测试新版本。
Java SDK 在具有 Java 5 或 Java 6 的任何平台上运行。SDK 以 Zip 文件提供。如果您使用 Eclipse 开发环境,您可以使用 Eclipse Google 插件来创建、测试和上传 App Engine 应用程序。SDK 还包括用于运行开发服务器和上传应用程序的命令行工具。
Python SDK 通过纯 Python 实现,可以在装有 Python 2.5 的任何平台(包括 Windows、Mac OS X 和 Linux)上运行。该 SDK 以 Zip 文件形式提供,对于 Windows 和 Mac OS X 还提供安装程序。
管理控制台是基于网络的接口,用于管理在 App Engine 上运行的应用程序。您可以使用它创建新应用程序、配置域名、更改您的应用程序当前的版本、检查访问权限和错误日志以及浏览应用程序数据存储区。