Google App Engine

Google App Engine是一个开发、托管网络应用程序的平台，使用Google管理的数据中心。它在2008年4月发布了第一个beta版本。

Google App Engine使用了云计算技术。它跨越多个服务器和数据中心来虚拟化应用程序。

Google App Engine在用户使用一定的资源时是免费的。支付额外的费用可以获得应用程序所需的更多的存储空间、带宽或是CPU负载。

## 支持的编程语言和框架

当前，Google App Engine支持的编程语言是Python、Java、PHP和Go（通过扩展，可以支持其他JVM语言，诸如Groovy、JRuby、Scala和Clojure）。支持Django、WebOb、PyYAML的有限版本。Google说它准备在未来支持更多的语言，Google App Engine也将会独立于某种语言。任何支持WSGI的使用CGI的Python框架可以使用。框架可以与开发出的应用程序一同上传，也可以上传使用Python编写的第三方库。

## 与其他应用程序托管的区别

与其他可扩展的托管服务（例如Amazon EC2）比较，App Engine提供了更多基础服务来方便编写可扩展的应用程序，但仅限于App Engine设计框架以内的应用程序。

App Engine的基础服务省却了许多系统管理的操作，以便将规模扩大到数以百万计的访问。Google负责处理一组代码，可以监测、容错，在必要的时候还会开发一些应用实例。

有些应用程序托管服务让用户安装、配置几乎所有*NIX兼容的软件，而App Engine则要求开发者使用Python或Java语言来编程，而且只能使用一套限定的API。当前的API允许程序于一个BigTable非关系数据库上存储和检索数据、提出HTTP请求、发送E-mail、处理图像、还有缓存。大多数现存的Web应用程序，若未经修改，均不能直接在App Engine上运行，因为它们需要使用关系数据库。

带宽和CPU的使用、送达请求的数量、并发请求的数量、以及调用各种API的次数，皆设有每天和每分钟的限额。个别的请求，如果需时超过30秒或返回超过10MB的数据，都会被终止。

## SQL与GQL的区别

Google App Engine的Datastore使用一个与SQL类似的语言，叫做“GQL”。在GQL中，SELECT语句仅可以用于一个表。因为要跨越不只一台机器， GQL不支持效率很低的JOIN语句。欲建立一对多和多对多的关系，可使用ReferenceProperty。采用这种无共享的方式，即使磁盘坏了，系统也不致瘫痪。

在GQL中，SELECT语句中的WHERE从句只容许对仅仅一列进行>、>=、<或<=比较。所以，仅仅可以构造简单的WHERE从句。在数据建模时，要从关系数据库转换到Datastore，开发者需要转变观念。

App Engine限制每次Datastore请求最多返回1000行数据。大多数Web应用程序，都不会受此影响，因为它们通常并不会在一张页面上列出超过1000条记录（可以用分页和缓存机制），只要按顺序返回结果就可以了。若有应用程序需要在一次操作中返回更多的记录，则需自行使用客户端软件或者Ajax页面，按查询顺序提取更多条记录。

这个Datastore的API是不关联的，有别于一般关系数据库——比如IBM DB2、Microsoft SQL Server、MySQL、Oracle数据库、或者PostgreSQL。

## 限制

- 在App Engine的档案系统中，开发者只有读取的权限。
- App Engine仅可在回应HTTP请求时执行代码（计划的后台任务、任务队列和XMPP服务则不在此限）。
- 用户可以上传任意的Python模块，但必须是纯Python模块，不得包含C扩展程序或其他需要编译的代码。
- App Engine限制每次Datastore请求最多返回1000行数据。
- Java应用程序只能使用JRE基本版本类库中的一个子集（JRE类白名单）。
- Java应用程序不能创建新的线程。

## 可移植性

开发者担心App Engine应用程序不能移植到其他平台上，因而被困在单一种技术(Vendor lock-in)之内。

## 从App Engine下载数据

App Engine自SDK1.2.2版开始，已容许以批量的方式下载数据。此外，用户也可使用开源项目gaebar、approcket 和gawsh 来下载、备份在App Engine上的数据。

## 限额

免费帐户使用App Engine时，受配额限制。应用程序作者可以视乎需要，付钱购买更多配额。

### 硬性限制

项目｜限制

每次请求的时间｜普通请求60秒，任务请求10分钟，后台请求无限

每个应用程序的文件｜1000个

HTTP响应的大小｜32 MB

Datastore单项大小｜1 MB

应用程序代码大小｜150 MB

### 免费的配额

供免费使用的配额曾于2009年5月25日、2009年6月22日以及2011年5月三度下调。

项目｜配额

每天的Email数量｜100封

每天的输入数据｜无限

每天的输出数据｜1 GB

每天可使用CPU｜28小时

每天调用Datastore API次数｜50000次*

数据存储｜1 GB

每天调用URLFetch API次数｜657000次*

## 竞争对手

Google App Engine与Amazon Web Services（一个应用程序服务系统，支持在Amazon的服务器上托管文件、执行代码）直接竞争。不少科技分析师早在多年前已预计过，Google会加入这场竞赛。其中，Techdirt的出版人Mike Masnick写到，“Google终于了解到它需要霸占网络平台这个地位。我们可以期待，开发及落实易于扩展的网络应用程式会变得越来越容易，而应用程式也会越来越具创意。”

此外，红帽公司的 openshift、微软的Azure服务平台以及 Koding 也是Google App Engine的竞争对手。

## 中华人民共和国封锁

由于Google App Engine允许用户托管网络应用程序，且服务器不在中华人民共和国境内，故有部分用户利用其搭建代理（如GoAgent）用于突破防火长城的审查，故Google App Engine的域名 *.appspot.com 的SSL加密连接长期遭到防火长城的封锁。

- 2010年12月20日，Google App Engine的域名 appspot.com 遭到防火长城的关键词过滤封锁。由于先前Google App Engine的SSL连接已经被封，故中华人民共和国境内的用户无法正常连接与使用。此次Google App Engine被封锁适逢2010年诺贝尔和平奖颁奖典礼。appspot.com非加密连接于2010年12月23日解封。
- 2011年3月两会召开前夕，appspot.com 再次遭到防火长城的关键词过滤封锁及域名污染，同时部分服务器的IP地址亦遭到彻底屏蔽，甚至两会结束后至今亦没有解封。
- 至今appspot.com仍遭到DNS投毒污染、URL域名关键词过滤和服务器IP地址屏蔽三重封锁，无法从中华人民共和国正常访问，但也仍有一些软件或用户通过修改本机Hosts等方法绕过封锁以使用GAE。

## 外部链接

- Official marketing page
- https://cloud.google.com/appengine/docs
- Official Google Cloud Platform Blog
- Release notes
- Google App Engine - Run your web applications on Google's infrastructure - a technical talk by Google engineer Guido van Rossum at Stanford University. ( online video archive)
- Benefits of adopting Google App Engine
- Using an external database with Google App Engine
- Java Frameworks and libraries supported
- Web2py book -- online documentation -- Google App Engine deployment recipe
- Google Cloud SQL Sample Projects
- Google Cloud supports node.js
- Appmd: Python development sample project. App Engine/django/Google Closure/Endpoints/Material design
- https://tw.cocloud.com/zh-tw/blog/google-compute-engine
- https://tw.cocloud.com/zh-tw/blog/google-kubernetes-Engine
- https://tw.cocloud.com/zh-tw/blog/gcp-teaching-encyclopedia

## 基本资料

- 开发者：Google
- 发行日期：2008年4月7日
- 软件版本周期：1.9.51
- 编程语言：Python、Java、Go、PHP, Node.js
- 操作系统：linux (glibc)、Windows
- 平台：little-endian 32bits
- 类型：Web应用框架、云端运算
- 许可协议：专有软件、LGPL