编辑本段简介
2008年4月7号,Google在Campfire One上介绍了一种简化创建、运行和构建伸缩性Web应用的工具——Google App Engine。简而言之,Google App Engine允许你本地使用Google基础设施构建Web应用,待其完工之后再将其部署到Google基础设施之上。
这次发布的是没有包含全部特性的预览版,提供了一个配额系统,它限制了在预览期间应用免费可用的存储、CPU和带宽。一旦预览期结束,配额仍将免费,但是开发者需要按需购买额外资源。额外资源的价格尚未公布(甚至可能尚未确定)。
预览版的配额包括:3个应用/开发者、500MB存储/应用、2000封 邮件/天(连续24小时)、10 GB入站带宽、10 GB出站带宽、200M CPU兆周、650k HTTP请求、2.5M Datastore API调用和160k URL Fetch API调用。
[1]
您可以使用 Google提供的免费域名(见扩展阅读)为您的 应用程序提供服务,也可以使用 Google Apps 从您自己的域为它提供服务。您可以与全世界的人共享您的应用程序,也可以限制为只有您组织内的成员可以访问。
您可以免费开始使用 App Engine。注册一个免费帐户即可开发和发布您的应用程序以供全世界的人共享,而且不需要承担任何费用和责任。每个免费帐户都可使用多达 500MB 的持久 存储空间,以及可支持每月约 500 万页面浏览量的足够 CPU 和宽带。
使用 Google App Engine 的试用版本期间,只可以使用免费帐户。您很快就能够购买其他的计算资源。 App Engine提供了一个web应用运行的框架,App Engine 应用程序易于运行、部属和扩展。App Engine不同于其他方案:App Engine不是 网格计算—它不能运行任意的作业。它不提供物理 主机但提供了打包代码上传的方式。用户在只需要在代码中指定了response和request,剩下的运行和部署的任务就交给了App Engine。用户不需要预留资源,例如RAM、CPU或者诸如此类。
编辑本段应用程序环境
通过 Google App Engine,即使在 重载和数据量极大的情况下,也可以轻松构建能安全运行的 应用程序。该环境包括以下特性:
动态网络服务,提供对常用 网络技术的完全支持
持久存储有查询、分类和事务
自动扩展和载荷平衡
用于对用户进行身份验证和使用 Google 帐户发送电子邮件的 API
一种功能完整的本地 开发环境,可以在您的计算机上模拟 Google App Engine
目前,Google App Engine官方正式 支持 Python 语言、 JAVA 语言和 Go语言,而对应perl的开发工作,Google的开发小组也正在进行。
虽然,Google App Engine支持的语言并不多,但是,借助强大的JAVA语言的Java Scripting Engine功能,实际上很多 脚本语言都可以在Google App Engine上运行,例如Scala、Groovy、JavaScript、PHP、JRuby等等。
编辑本段Sandbox
在安全环境中运行的 应用程序,仅提供对基础 操作系统的有限访问权限。这些限制让 App Engine 可以在多个服务器之间分发应用程序的网络请求,并可以启动和停止服务器以满足访问量需求。Sandbox 将您的应用程序隔离在它自己的安全可靠环境中,该环境与 网络服务器的硬件、操作系统和物理位置无关。
安全 Sandbox 环境的限制实例包括:
应用程序只能通过提供的网址获取和 电子邮件服务和 API 访问互联网中的其他计算机。其他计算机只能通过在标准端口上进行 HTTP(或 HTTPS)请求来连接至该应用程序。
应用程序无法向文件系统写入。应用程序只能读取通过应用程序代码上传的文件。该应用程序必须使用 App Engine 数据库存储所有在请求之间持续存在的数据。
应用程序代码仅在响应网络请求时运行,且必须在几秒钟内返回响应数据。请求处理程序不能在响应发送后产生子进程或执行代码。
编辑本段Python 运行时环境
App Engine 提供了一个使用 Python 编程语言的运行时环境。将来的版本将考虑使用其他 编程语言和运行时环境配置。
Python 运行时环境使用 Python 2.5.2 版。
该环境包括 Python 标准库。当然,您无法调用违反了 Sandbox 限制的库方法,例如尝试打开 套接字或向文件写入。方便起见,其主要功能不受该运行时环境支持的标准库中的多个模块已被禁用,而导入这些模块的代码将发生错误。
应用程序代码只能以 Python 编写。具有用 C 编写的扩展的代码不受支持。
Python 环境为数据库、Google 帐户、网址获取和 电子邮件服务提供了丰富的 Python API。App Engine 还提供了一个称为 webapp 的简单 Python 网络应用程序框架,从而可以轻松开始构建应用程序。
方便起见,App Engine 还包括 Django 网络应用程序框架 0.96.1 版。请注意,App Engine 数据库不是某些 Django 组件所需的关系数据库。某些组件(例如 Django 模板引擎)按照文档化的程序工作,而其他组件则需要做更多工作。有关将 Django 与 App Engine 一起使用的提示,请参阅文章部分。
只要这些库是完全使用 Python 实现并且不需要任何不受支持的标准库模块,您就可以使用您的应用程序上传其他第三方库。
有关 Python 运行时环境的详细信息,请参阅 Python 运行时环境。
编辑本段数据库
App Engine 提供了一个强大的分布式数据存储服务,其中包含查询引擎和事务功能。就像 分布式网络服务器随访问量增加一样,该 分布式数据库也会随数据而增加。
该 App Engine 数据库与传统关系数据库不同。 数据对象(或“实体”)有一类和一组属性。查询可以检索按属性值过滤和分类的给定种类的实体。属性值可以是受支持的属性值类型中的任何一种。
数据库的 Python API 包括一个可以定义数据库实体结构的 数据建模界面。数据模型可以指示属性值必须位于给定范围内,如果未给定任何范围,还可以提供默认值。您的 应用程序可以根据需要向数据提供或多或少的结构。
数据库使用乐观锁定进行 并发控制。如果有其他进程尝试更新某实体,而同时该实体位于以固定次数进行重新尝试的 事务中,此时该实体将更新。应用程序可以在一个事务中执行多项数据库操作(全部成功或者全部失败),从而确保数据的完整性。
数据库通过其分布式网络使用“实体组”实现事务。一个事务操作一个组内的实体。同一组的实体存储在一起,以高效执行事务。应用程序可以在实体创建时将实体分配到组。
有关数据库的详细信息,请参阅数据库 API 参考。
编辑本段Google 帐户
App Engine 包括用于与 Google 帐户集成的服务 API。 应用程序使用户可以通过 Google 帐户登录,并可以访问与该帐户关联的 电子邮件地址和可显示的名称。使用 Google 帐户使用户可以更快地开始使用您的应用程序,因为用户可以不需要创建新帐户了。Google 帐户还省去只为您的应用程序执行 用户帐户系统的麻烦。
如果您的应用程序正在 Google Apps 下运行,则它可以与您组织的成员和 Google Apps 帐户成员使用相同的功能。
用户 API 还可告知应用程序当前用户是否是应用程序的注册 管理员。这样便可以轻松实现您站点上仅用于管理的区域。
有关与 Google 帐户集成的详细信息,请参阅用户 API 参考。
编辑本段App Engine 服务
App Engine 提供了多种服务,从而使您可以在管理 应用程序的同时执行常规操作。提供了以下 API 以访问这些服务:
网址获取
应用程序可以使用 App Engine 的网址获取服务访问互联网上的资源,例如 网络服务或其他数据。网址获取服务使用用于为许多其他 Google 产品检索网页的高速 Google 基础架构来检索 网络资源。有关网址获取服务的详细信息,请参阅网址获取 API 参考。
邮件
应用程序可以使用 App Engine 的邮件服务发送电子邮件。邮件服务使用 Google 基础架构发送电子邮件。有关邮件服务的详细信息,请参阅邮件 API 参考。
Memcache
Memcache 服务为您的应用程序提供了高性能的内存键值缓存,您可通过应用程序的多个实例访问该缓存。Memcache 对于那些不需要数据库的永久性功能和 事务功能的数据很有用,例如临时数据或从数据库复制到 缓存以进行高速访问的数据。有关 Memcache 服务的详细信息,请参阅 Memcache API 参考。
图片操作
图片服务使您的应用程序可以对图片进行操作。使用该 API,您可以对 JPEG 和 PNG 格式的图片进行大小调整、剪切、旋转和翻转。有关图片操作服务的详细信息,请参阅图片 API 参考。
编辑本段开发工作流程
App Engine 软件开发套件 (SDK) 包括可以在您的本地计算机上模拟所有 App Engine 服务的 网络服务器 应用程序。该 SDK 包括 App Engine 中的所有 API 和库。该网络服务器还可以模拟安全 Sandbox 环境,包括检查是否存在禁用模块的导入以及对不允许访问的 系统资源的尝试访问。
Python SDK 完全使用 Python 实现,可以在装有 Python 2.5 的任何平台上运行,包括 Windows、Mac OS X 和 Linux。您可以在 Python 网站上获得适用于您的系统的 Python。该 SDK 以 Zip 文件提供,安装程序可用于 Windows 和 Mac OS X。
您可以在此处下载该 SDK。
该 SDK 还包括可将您的应用程序上传到 App Engine 的工具。创建了您应用程序的代码、静态文件和配置文件后,即可运行该工具上传数据。该工具会提示您提供 Google 帐户 电子邮件地址和密码。
构建已在 App Engine 上运行的应用程序的新主要发行版时,可以将新发行版作为新版本上传。在您改为使用新版本之前,旧版本可以继续为用户提供服务。可以在仍运行旧版本的同时在 App Engine 上测试新版本。
管理控制台是基于网络的界面,用于管理在 App Engine 上运行的应用程序。您可以使用它创建新应用程序、配置域名、更改您的应用程序当前的版本、检查访问权限和 错误日志以及浏览应用程序数据库。
编辑本段限额和限制
创建 App Engine 应用程序不仅简单,而且是免费的!您可以创建帐户,然后发布一个应用程序,用户无需承担任何费用和责任即可立即使用该应用程序。通过免费帐户获得的应用程序可使用多达 500MB 的 存储空间和多达每月 500 万的页面浏览量。
此试用时间内,仅提供免费帐户。您很快就能够以有竞争力的市场价格购买其他的计算资源。试用期过后,免费帐户可继续使用。
此试用期间,最多可注册 3 个应用程序。
应用程序资源限制(“限额”)会不断刷新。如果您的应用程序达到基于时间的限额(例如宽带),则该限额将以给定限制的比率立即开始刷新。固定限额(例如 存储使用量)仅在降低使用量时才会减小。
有些功能会施加与限额无关的限制,以保护系统的稳定性。例如,当调用某应用程序以为网络请求提供服务时,该应用程序必须在几秒钟内发出响应。如果该应用程序花费的时间过长,则进程将被终止并且服务器将向用户返回错误代码。响应超时是动态的,如果请求处理程序经常达到其超时,则可以缩短请求超时以节省资源。
服务限制的另一实例是查询返回的结果数。一个查询最多可返回 1,000 条结果。要返回更多结果的查询只能返回该最大值。在这种情况下,执行这种查询的请求不可能在超时前返回请求,但限制仍存在以节省数据库上的资源。
试图破坏或滥用限额(例如同时在多个帐户上操作应用程序)违反服务条款,并可能导致应用程序被禁用或帐户关闭。
编辑本段Datastore的设计
首先,在编程方面,Datastore是基于"Entity(实体)"这个概念,而且Entity和"对象"这个概念比较类似,同时Entity可以包括多个Property(属性),Property的类别有整数,浮点和字符串等,比如,可以设计一个名为"Person"的Entity,它包含名为"Name"的字符串Property和名为"Age"的整数Property。由于Datastore是"Schema-less"的,所以数据的Schema都由应用维护,而且能非常方便地对一个Entity所包含的属性进行增删和修改。在存储方面,一个Entity的实例可以被认为是一个普通的"Row(行)",而包含所有这种Entity的实例的Table被称为Kind,比如,所有通过"Person"这个Entity生成实例,比如小吴,小朱和小华等,它们都会存放在同一个名为"Person"的Kind中。在结构方面,虽然也能通过特定的方式在Datastore中实现关系型结构,但是Datastore在设计上是为层次(Hierarchical)性结构"度身定做"的,有Root Entity和Child Entity之分,比如,可以把"Person"作为Root Entity(父实体),"Address"作为"Person"的Child Entity,两者合在一起可以称为一个"Entity Group"。这样做的好处是能将这两个实体集中一个BigTable本地分区中,而且能对这两个实体进行本地事务。
[2]
下表为Datastore和传统的关系型数据库之间的比较:
|
Datastore |
关系型数据库 |
SQL支持 |
只支持一些基本的查询 |
全部支持 |
主要结构 |
层次(Hierarchical) |
关系 |
Index |
部分可自动创建 |
手动创建 |
事务 |
只支持在一个Entity Group内执行 |
支持 |
平均执行速度(ms) |
低于200 |
低于100 |
扩展型 |
非常好 |
很困难,而且需要进行大量的修改 |
表1. Datastore和关系型数据库之间的比较
总体而言,Datastore在设计理念上和传统的关系型数据库有很大的不同,所以其在反应速度和写数据方面不是最优的,但是现在Web应用以读为主,而且需要能通过简单的扩展就能支持其海量的数据,而这两点却是Datastore所擅长,所以Datastore非常适合支撑Web应用。
编辑本段技术:开发环境和API
尽管Google说‘未来将支持更多的语言’,但是目前技术栈是基于Python的,它是Google认同的语言之一。出于安 全和伸缩性的目的,Google提供了一个运行在安全沙箱中的Python运行时环境,它提供对底层操作系统有限制的访问。该环境包括标准库,并可通过模 块进行扩展,编写模块的语言目前不支持C语言。
该环境包括Python标准库。当然,调用那些违反沙箱限制的库方法(如打开socket或写文件)将不会成功。为了方便起见,几个核心特性不被支持的标准库中的模块被禁用了。那些引入它们的代码会出错。
应用代码只能用Python书写。不支持使用C来编写扩展。
其他安全限制包括:出站通信(outbound communication)只能通过所提供的邮件和URL fetch API进行,通过HTTP和HTTPS作为传输的入站通信(inbound communication)使用标准端口,禁止文件系统写操作和禁止子进程或代码在请求/响应循环外执行(例如后台操作和批操作)。
此外,Google提供了访问一个Datastore、Google用户帐号、URL fetch和邮件服务的API。App Engine还包括一个简化的Web应用框架和Django 0.96.1,尽管App Engine Datastore不是关系型的,而且也不能使用全部的Django API。
Datastore API背后由Google的BigTable支持,但是它与一个简单的对象持久化API(或一个对象关系映射框架,即使Google强调这个Datastore不是关系型的)有很多相同之处。
[1]
编辑本段Google App Engine应用
1、Google App Engine空间
Google App Engine也就是GAE,是Google推出的一款网络运用程序,也是个免费虚拟主机空间,其实这比一般虚拟主机强悍的多,你可以利用Google App Engine工具来开发网站或制作网络应用程序,Google会在自己的庞大服务器集群上为你提供空间、带宽、资源等。
Google App Engine对全球开发者免费开放使用,你可以充分利用Google的提供的免费空间、免费数据库、免费二级域名等来展示你开发的应用程序,提供给全球的用户下载和使用。
只要你有一个Google账号就可以在Google App Engine上注册和开通一个免费账号,免费账号允许你创建10个应用,每一个应用提供1GB的容量,月流量是60GB(传出带宽是1GB/天,传入带宽1GB/天)。
[3]
2、Google App Engine应用GoAgent
GoAgent是 一个使用Python和Google Appengine SDK编写的软件。部署和使用方法非常简单,不需要安装Python或者Google Appenginge SDK ,几分钟即可搞定。GoAgent是一个基于GAE的利器,速度方面,是相当的给力,打开youtube、facebook、Twitter等国外网站基本上是秒开。
[4]
编辑本段Google App Engine验证码
Google App Engine应用需要验证手机,这一验证主要是为了防止Google App Engine应用被滥用。在使用Google App Engine应用时,部分移动或者联通的手机无法接受到验证码短信(SMS),又无法更换手机申请,那么我们怎么处理呢?还好,谷歌的服务总是从顾客的角度出发的,如果你收不到验证码短信(SMS),那么可以填写申请表单来实现。
[5]