专栏首页用户6517667的专栏DevOps工具介绍连载(20)——Google App Engine

DevOps工具介绍连载(20)——Google App Engine

详细介绍

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提供的可扩展系统上构建网络应用程序。每个Google App Engine应用程序都可使用多达500MB的持久存储空间以及可支持每月500万综合浏览量的足够带宽和CPU。目前每个用户可以免费创建十个应用。

Google App Engine可让您在Google的基础架构上运行您的网络应用程序。App Engine应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展。使用Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务。 [2]

应用程序环境

通过 Google App Engine,即使在重载和数据量极大的情况下,也可以轻松构建能安全运行的应用程序。该环境包括以下特性:

动态网络服务,提供对常用网络技术的完全支持

持久存储有查询、分类和事务

自动扩展和载荷平衡

用于对用户进行身份验证和使用 Google 帐户发送电子邮件的 API

一种功能完整的本地开发环境,可以在您的计算机上模拟 Google App Engine

当前,Google App Engine官方正式 支持 Python 语言、 JAVA 语言、Go语言和PHP语言,而对应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 数据库存储所有在请求之间持续存在的数据。

应用程序代码仅在响应网络请求时运行,且必须在几秒钟内返回响应数据。请求处理程序不能在响应发送后产生子进程或执行代码。

运行时环境

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 提供了一个强大的分布式数据存储服务,其中包含查询引擎和事务功能。就像分布式网络服务器随访问量增加一样,该分布式数据库也会随数据而增加。

数据库的 Python API 包括一个可以定义数据库实体结构的数据建模界面。数据模型可以指示属性值必须位于给定范围内,如果未给定任何范围,还可以提供默认值。您的应用程序可以根据需要向数据提供或多或少的结构。

数据库使用乐观锁定进行并发控制。如果有其他进程尝试更新某实体,而同时该实体位于以固定次数进行重新尝试的事务中,此时该实体将更新。应用程序可以在一个事务中执行多项数据库操作(全部成功或者全部失败),从而确保数据的完整性。

数据库通过其分布式网络使用“实体组”实现事务。一个事务操作一个组内的实体。同一组的实体存储在一起,以高效执行事务。应用程序可以在实体创建时将实体分配到组。

有关数据库的详细信息,请参阅数据库 API 参考。

Google 帐户

App Engine 包括用于与 Google 帐户集成的服务 API。应用程序使用户可以通过 Google 帐户登录,并可以访问与该帐户关联的电子邮件地址和可显示的名称。使用 Google 帐户使用户可以更快地开始使用您的应用程序,因为用户可以不需要创建新帐户了。Google 帐户还省去只为您的应用程序执行用户帐户系统的麻烦。

如果您的应用程序正在 Google Apps 下运行,则它可以与您组织的成员和 Google Apps 帐户成员使用相同的功能。

用户 API 还可告知应用程序当前用户是否是应用程序的注册管理员。这样便可以轻松实现您站点上仅用于管理的区域。

有关与 Google 帐户集成的详细信息,请参阅用户 API 参考。

服务

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 还包括可将您的应用程序上传到 App Engine 的工具。创建了您应用程序的代码、静态文件和配置文件后,即可运行该工具上传数据。该工具会提示您提供 Google 帐户电子邮件地址和密码。

构建已在 App Engine 上运行的应用程序的新主要发行版时,可以将新发行版作为新版本上传。在您改为使用新版本之前,旧版本可以继续为用户提供服务。可以在仍运行旧版本的同时在 App Engine 上测试新版本。

管理控制台是基于网络的界面,用于管理在 App Engine 上运行的应用程序。您可以使用它创建新应用程序、配置域名、更改您的应用程序当前的版本、检查访问权限和错误日志以及浏览应用程序数据库。

限额和限制

创建 App Engine应用程序不仅简单,而且是免费的!您可以创建帐户,然后发布一个应用程序,用户无需承担任何费用和责任即可立即使用该应用程序。通过免费帐户获得的应用程序可使用多达 500MB 的存储空间和多达每月 500 万的页面浏览量。

此试用时间内,仅提供免费帐户。您很快就能够以有竞争力的市场价格购买其他的计算资源。试用期过后,免费帐户可继续使用。

此试用期间,最多可注册 3 个应用程序。

应用程序资源限制(“限额”)会不断刷新。如果您的应用程序达到基于时间的限额(例如宽带),则该限额将以给定限制的比率立即开始刷新。固定限额(例如存储使用量)仅在降低使用量时才会减小。

有些功能会施加与限额无关的限制,以保护系统的稳定性。例如,当调用某应用程序以为网络请求提供服务时,该应用程序必须在几秒钟内发出响应。如果该应用程序花费的时间过长,则进程将被终止并且服务器将向用户返回错误代码。响应超时是动态的,如果请求处理程序经常达到其超时,则可以缩短请求超时以节省资源。

服务限制的另一实例是查询返回的结果数。一个查询最多可返回 1,000 条结果。要返回更多结果的查询只能返回该最大值。在这种情况下,执行这种查询的请求不可能在超时前返回请求,但限制仍存在以节省数据库上的资源。

试图破坏或滥用限额(例如同时在多个帐户上操作应用程序)违反服务条款,并可能导致应用程序被禁用或帐户关闭。

设计

首先,在编程方面,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本地分区中,而且能对这两个实体进行本地事务。 [3]

下表为Datastore和传统的关系型数据库之间的比较:

Datastore

关系型数据库

SQL支持

只支持一些基本的查询

全部支持

主要结构

层次(Hierarchical)

关系

Index

部分可自动创建

手动创建

事务

只支持在一个Entity Group内执行

支持

平均执行速度(ms)

低于200

低于100

扩展型

非常好

很困难,而且需要进行大量的修改

表1. Datastore和关系型数据库之间的比较

总体而言,Datastore在设计理念上和传统的关系型数据库有很大的不同,所以其在反应速度和写数据方面不是最优的,但是如今Web应用以读为主,而且需要能通过简单的扩展就能支持其海量的数据,而这两点却是Datastore所擅长,所以Datastore非常适合支撑Web应用。

技术

尽管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]

应用

1、Google App Engine空间

Google App Engine也就是GAE,是Google推出的一款网络运用程序,也是个免费虚拟主机空间,其实这比一般虚拟主机强悍的多,你可以利用Google App Engine工具来开发网站或制作网络应用程序,Google会在自己的庞大服务器集群上为你提供空间、带宽、资源等。

Google App Engine对全球开发者免费开放使用,你可以充分利用Google的提供的免费空间、免费数据库、免费二级域名等来展示你开发的应用程序,提供给全球的用户下载和使用。

只要你有一个Google账号就可以在Google App Engine上注册和开通一个免费账号,免费账号允许你创建25个应用 [1] ,每一个应用提供1GB的容量,月流量是60GB(传出带宽是1GB/天,传入带宽1GB/天)。 [4]

验证码

Google App Engine应用需要验证手机,这一验证主要是为了防止Google App Engine应用被滥用。在使用Google App Engine应用时,部分移动或者联通的手机无法接受到验证码短信(SMS),又无法更换手机申请,那么我们怎么处理呢?还好,谷歌的服务总是从顾客的角度出发的,如果你收不到验证码短信(SMS),那么可以填写申请表单来实现。 [5]

最新报道

谷歌2008年推出App Engine帮助外部开发人员在谷歌数据中心和服务器网络上开发和运行程序,从而正式进军公共云计算领域,与在该行业占据领先地位的亚马逊展开竞争。

云计算提供商通常互相竞争,希望尽可能多的客户使用自己的数据中心。但在周二,谷歌宣布与初创企业AppScale合作,允许App Engine上的应用程序不经修改即可在其他云服务器或公司自有数据中心和服务器上运行。

谷歌的这一举措使得开发人员有可能通过App Engine开发应用程序,然后拿到其他云服务提供商那里运行。不过谷歌云平台全球解决方案主管Miles Ward称,上述举措将帮助公司吸引更多云客户,尤其是碍于所谓“云割据”规定、无法按惯常方式在某些国家提供应用程序和网页服务的情况下。 [6]

  • 参考资料

  • 1.< data-linktype="2" name="refIndex_1_1524918" style="color: rgb(102, 102, 102);width: 15px;height: 14px;overflow: hidden;background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaOhMOX9hYnHm1InFHyLTB8EvBjQ8hGQBBCO4WbHNxUSOtoLribTmAJmcuLPXvo0DJE8FTj8CcGxsVQ/640?wx_fmt=gif") 0px -14px no-repeat;display: inline-block;margin-right: 4px;float: left;margin-top: 3px;font-size: 16px;" title="向上跳转"> Google App Engine .开源社区网[引用日期2012-08-17]
  • 2.< data-linktype="2" name="refIndex_2_1524918" style="color: rgb(102, 102, 102);width: 15px;height: 14px;overflow: hidden;background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaOhMOX9hYnHm1InFHyLTB8EvBjQ8hGQBBCO4WbHNxUSOtoLribTmAJmcuLPXvo0DJE8FTj8CcGxsVQ/640?wx_fmt=gif") 0px -14px no-repeat;display: inline-block;margin-right: 4px;float: left;margin-top: 3px;font-size: 16px;" title="向上跳转"> Google App Engine SDK 1.3.4 for Java .TechTarget[引用日期2015-09-04]
  • 3.< data-linktype="2" name="refIndex_3_1524918" style="color: rgb(102, 102, 102);width: 15px;height: 14px;overflow: hidden;background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaOhMOX9hYnHm1InFHyLTB8EvBjQ8hGQBBCO4WbHNxUSOtoLribTmAJmcuLPXvo0DJE8FTj8CcGxsVQ/640?wx_fmt=gif") 0px -14px no-repeat;display: inline-block;margin-right: 4px;float: left;margin-top: 3px;font-size: 16px;" title="向上跳转"> Google App Engine技术架构之Datastore的设计
  • 4.< data-linktype="2" name="refIndex_4_1524918" style="color: rgb(102, 102, 102);width: 15px;height: 14px;overflow: hidden;background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaOhMOX9hYnHm1InFHyLTB8EvBjQ8hGQBBCO4WbHNxUSOtoLribTmAJmcuLPXvo0DJE8FTj8CcGxsVQ/640?wx_fmt=gif") 0px -14px no-repeat;display: inline-block;margin-right: 4px;float: left;margin-top: 3px;font-size: 16px;" title="向上跳转"> 谷歌10G高速免费空间Google App Engine安装博客、绑定域名图文教程 .七零八落
  • 5.< data-linktype="2" name="refIndex_5_1524918" style="color: rgb(102, 102, 102);width: 15px;height: 14px;overflow: hidden;background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaOhMOX9hYnHm1InFHyLTB8EvBjQ8hGQBBCO4WbHNxUSOtoLribTmAJmcuLPXvo0DJE8FTj8CcGxsVQ/640?wx_fmt=gif") 0px -14px no-repeat;display: inline-block;margin-right: 4px;float: left;margin-top: 3px;font-size: 16px;" title="向上跳转"> Google App Engine不能收到验证码短信(SMS)的解决方法 .七零八落
  • 6.< data-linktype="2" name="refIndex_6_1524918" style="color: rgb(102, 102, 102);width: 15px;height: 14px;overflow: hidden;background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaOhMOX9hYnHm1InFHyLTB8EvBjQ8hGQBBCO4WbHNxUSOtoLribTmAJmcuLPXvo0DJE8FTj8CcGxsVQ/640?wx_fmt=gif") 0px -14px no-repeat;display: inline-block;margin-right: 4px;float: left;margin-top: 3px;font-size: 16px;" title="向上跳转"> 谷歌将开放谷歌应用引擎App Engine .凤凰科技[引用日期2015-05-09]

本文分享自微信公众号 - 软件测试培训(iTestTrain),作者:软件测试培训

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于性能测试工具kylinTOP构建虚拟用户自身请求的并发模型

    在对于WEB系统进行性能测试时,第一时间想到的是测试出WEB系统能够承受的最大并发虚拟用户(VU)用户数,因为系统的最大VU并发数可以直接反应系统的承载能力。但...

    小老鼠
  • APP测试类型—App自动化测试与框架实战(2)

      以下内容没有覆盖到功能测试的所有方面,读者都很熟悉的常规内容就不再讲述了。在App功能测试中,有一些传统软件测试里不太常见的关注点,以下权当抛砖引玉,启发一...

    小老鼠
  • 软件性能测试(连载11)

    索引节点(inode)是持久化存储到磁盘中的,而目录项(dentry)是由内核维护(目录项缓存)的。

    小老鼠
  • 混合云的重要性及如何开始使用混合云

    导语 混合云可以让您在本地运行您的基础设施,可以按租赁、配置和扩展要求获得一些云功能,然后在准备就绪后可以将应用程序迁移到公共云(也可能是私有云)。实际上,出于...

    静一
  • 在苹果应用商店的17个应用程序中发现iOS Clicker Trojan

    Wandera Threat Labs研究人员发现有十多个iOS应用程序感染了Clicker Trojan(点击木马)恶意代码并在苹果的应用商店传播。其使用和安...

    FB客服
  • 【学习笔记】MySQL的常用操作命令整理

    缘由:初次接触命令行操作MySQL数据库,使用还不熟练,故整理之,方便日后查阅。 备注: 用户登录MySQL后,对数据库操作的命令基本都以”;” 或 “g”结尾...

    小莹莹
  • IIS7的应用程序池

    最近将原来的系统迁移到IIS7.5上了,发现AspNetUpload只能运行在"程序程序池"的"经典"模式之下,采用"集成"模式后,AspnetUpload....

    菩提树下的杨过
  • 互联网从业者必须知道的36个安全技术术语

    想要了解更多关于网络安全领域的信息?作者在本篇文章里面已经创建了一份需要知道的术语表,以帮助读者了解网络安全领域的相关内容。以下为译文。 软件开发中的安全主题常...

    CSDN技术头条
  • 移动应用开发的五个致命的神话

    虽然手机应用程序开发不再是新的,仍然有许多误解应用发展。一些信仰只不过是被误导的,别人是错了。 当企业和企业家把时间和金钱浪费在没有人使用的应用程序,通常因为他...

    用户1289394
  • 渐进式Web应用程序的深入概述

    如果您是Web开发人员,您可能已经了解渐进式Web应用程序(PWA)或已经实现了自己的应用程序。 如果您不熟悉,本文将深入概述渐进式Web应用程序的实现原理,以...

    葡萄城控件

扫码关注云+社区

领取腾讯云代金券