Google App Engine

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

Google App Engine
开发者Google
首次发布2008年4月7日,​16年前​(2008-04-07
当前版本1.9.51(2017年3月29日 (2017-03-29)
编程语言PythonJavaGoPHP, Node.js
操作系统linux (glibc)、Windows
平台little-endian 32bits
类型Web应用框架云计算
许可协议专有软件LGPL
网站cloud.google.com/appengine/

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

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

支持的编程语言和框架

当前,Google App Engine支持的编程语言PythonJavaPHPGo(通过扩展,可以支持其他JVM语言,诸如GroovyJRubyScalaClojure)。支持DjangoWebObPyYAML的有限版本。Google说它准备在未来支持更多的语言,Google App Engine也将会独立于某种语言。任何支持WSGI的使用CGI的Python框架可以使用。框架可以与开发出的应用程式一同上传,也可以上传使用Python编写的第三方库。[3][4]

与其他应用程式托管的区别

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

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

有些应用程式托管服务让用户安装、配置几乎所有*NIX兼容的软件,而App Engine则要求开发者使用PythonJava语言来编程,而且只能使用一套限定的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语句[5]。欲建立一对多和多对多的关系,可使用ReferenceProperty()[6]。采用这种无共享的方式,即使磁碟坏了,系统也不致瘫痪[7]

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

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

这个Datastore的API是不关联的,有别于一般关系数据库——比如IBM DB2Microsoft SQL ServerMySQLOracle数据库、或者PostgreSQL

限制

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

可移植性

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

从App Engine下载数据

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

限额

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

硬性限制

项目 限制
每次请求的时间 普通请求60秒,任务请求10分钟,后台请求无限
每个应用程式的文件 1000个
HTTP响应的大小 32 MB
Datastore单项大小 1 MB
应用程式代码大小 150 MB

免费的配额

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

项目 配额
每天的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终于了解到它需要霸占网络平台这个地位。我们可以期待,开发及落实易于扩展的网络应用程式会变得越来越容易,而应用程式也会越来越具创意。”[17]

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

中华人民共和国封锁

由于Google App Engine允许用户托管网络应用程式,且伺服器不在中华人民共和国境内,故有部分用户利用其搭建代理(如GoAgent)用于突破防火长城审查[18],故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地址屏蔽三重封锁,无法从中华人民共和国正常访问[19],但也仍有一些软件或用户通过修改本机Hosts等方法绕过封锁以使用GAE。

参考文献

  1. ^ Python Runtime Environment. Google Developers. 11 December 2014 [2009-07-15]. (原始内容存档于2012-03-12). 
  2. ^ Quotas. Google Developers. 12 January 2015 [2009-07-15]. (原始内容存档于2012-03-14). 
  3. ^ What Is Google App Engine?. Google Developers. 9 December 2014 [2009-07-15]. (原始内容存档于2011-03-23). 
  4. ^ webapp Overview. Google Developers. 22 September 2014 [2009-07-15]. (原始内容存档于2012-03-15). 
  5. ^ Campfire One: Introducing Google App Engine (pt. 3). YouTube. 7 April 2008 [2009-07-15]. (原始内容存档于2017-07-31). 
  6. ^ Modeling Entity Relationships. Google Developers. 22 September 2014 [2009-07-15]. (原始内容存档于2012-02-25). 
  7. ^ Google Architecture - High Scalability -. highscalability.com. [2009-07-15]. (原始内容存档于2021-01-09). 
  8. ^ The JRE Class White List. Google Developers. 22 September 2014 [2009-07-15]. (原始内容存档于2012-02-19). 
  9. ^ Analysis: Google App Engine alluring, will be hard to escape. Ars Technica. [2009-07-15]. (原始内容存档于2011-07-16). 
  10. ^ Backup/Restore, Copy, and Delete Data. Google Developers. 27 January 2015 [2009-07-15]. (原始内容存档于2012-03-12). 
  11. ^ aral/gaebar. GitHub. [2009-07-15]. (原始内容存档于2017-07-29). 
  12. ^ approcket - Live synchronization between AppEngine and MySQL - Google Project Hosting. google.com. [2009-07-15]. (原始内容存档于2016-01-23). 
  13. ^ gawsh - Google Apps Web Service Helpers - Google Project Hosting. google.com. [2009-07-15]. (原始内容存档于2016-01-23). 
  14. ^ Understanding Application Quotas with Google App Engine. [2008-09-10]. (原始内容存档于2008-12-18). 
  15. ^ Google, Inc., Upcoming Changes to the Free Quotas页面存档备份,存于互联网档案馆)——于2009年2月26日覆阅过
  16. ^ Google, Inc., [1]页面存档备份,存于互联网档案馆) 于2009年6月17日覆阅过
  17. ^ Google Finally Realizes It Needs To Be The Web Platform. 2008-04-07 [2008-04-12]. (原始内容存档于2018-03-13). 
  18. ^ GAppProxy. [2011-02-09]. (原始内容存档于2016-01-17). GTAP. [2011-02-09]. (原始内容存档于2016-01-12). 
  19. ^ Test Result for appspot.com. Greatfire.org. [2021-04-17]. (原始内容存档于2021-04-17). 

外部链接