标签: google-app-engine

Google App Engine的优点和缺点

[2009年8月21日更新名单]

帮助我编制在Google App Engine上构建应用程序的所有优点和缺点的列表

优点:

  1. 无需购买服务器或服务器空间(无需维护).
  2. 使解决扩展问题变得更容易.
  3. 释放一定水平的消耗资源.

缺点:

  1. 锁定在Google App Engine中?
  2. 开发人员对App Engine上的文件系统具有只读访问权限.
  3. App Engine只能执行从HTTP请求调用的代码(计划的后台任务除外).
  4. 用户可以上传任意Python模块,但前提是它们是纯Python; 不支持C和Pyrex模块.
  5. App Engine将实体返回的最大行数限制为每个数据存储区调用1000行.(更新 - App Engine现在支持用于访问更大查询的游标)
  6. Java应用程序只能使用JRE标准版中的类的子集(JRE Class White List).
  7. Java应用程序无法创建新线程.

已知的问题!!:http://code.google.com/p/googleappengine/issues/list

硬限制

每个开发人员的 应用程序 -
每个请求10 次 -
每个应用程序30秒文件 - 3,000个
HTTP响应大小 - 10 MB
数据存储区项目大小 - 1 MB
应用程序代码大小 - 150 MB
更新 Blob存储现在允许存储高达50MB的文件

Pro还是Con?
App Engine的基础架构消除了构建应用程序以扩展到数百万次点击的许多系统管理和开发挑战.Google会根据需要将代码部署到群集,监控,故障转移和启动应用程序实例.

虽然其他服务允许用户安装和配置几乎任何*NIX兼容软件,但App Engine要求开发人员使用Python或Java作为编程语言和一组有限的API.当前的API允许从BigTable非关系数据库存储和检索数据; 发出HTTP请求; 发送电子邮件; 操纵图像; 和缓存.大多数现有Web应用程序无法在未经修改的情况下在App Engine上运行,因为它们需要关系数据库.

google-app-engine

68
推荐指数
4
解决办法
3万
查看次数

有没有办法在本地网络中访问GAE dev app服务器?

如果我通过http:// localhost:8080从运行服务器的同一台Win 7 PC 访问我的网站,那么它运行良好.

如果我尝试从另一台PC访问(使用我的内部PC的IP http://192.168.1.98:8080),那么它不起作用.而且,即使在同一台机器上也无法通过此ip访问它.我究竟做错了什么?

(我试图在我的Win 7 PC上禁用防火墙 - 它没有帮助)

google-app-engine local-network

65
推荐指数
4
解决办法
2万
查看次数

解析yaml文件时出错:此处不允许映射值

我想将应用上传到Google App Engine:

我明白了

Error parsing yaml file:
mapping values are not allowed here
  in "/home/antonio/Desktop/ATI/climate-change/app.yaml", line 2, column 8 
Run Code Online (Sandbox Code Playgroud)

跑步时

./appcfg.py update /home/antonio/Desktop/ATI/climate-change
Run Code Online (Sandbox Code Playgroud)

使用此app.yaml文件:

application:climate-change
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: helloworld.app
Run Code Online (Sandbox Code Playgroud)

第2行,第8列对应于版本行.这有什么不对?顺便说一句,我在这里使用的是Ubuntu 12.04.

google-app-engine

65
推荐指数
6
解决办法
13万
查看次数

Google App Engine Flexible env的定价,500美元的课程

我在App Engine灵活的env教程上关注了Nodejs:http://psoud.google.com/nodejs/getting-started/hello-world

成功部署并测试了本教程之后,我将代码更改为稍微进行了实验并成功部署了它......然后让它继续运行,因为这是一个测试环境(不是公共的).

一个月后,我收到谷歌超过370美元的账单!

在交易细节中,我看到以下内容:

2017年10月1日 - 31日App Engine Flex实例RAM:5948.774吉比特小时([MYPROJECT])$ 42.24

2017年10月1日 - 31日App Engine Flex实例核心时间:5948.774小时([MYPROJECT])$ 312.91

这个具有近0个请求的测试环境如何需要大约6,000小时的资源?在最糟糕的情况下,我会假设720小时全天运行一个月@ 0.05美元/小时将花费我~40美元. https://cloud.google.com/appengine/pricing

有人可以帮助阐明这一点吗?我无法找出为什么需要这么多资源?

谢谢您的帮助!

对于更多数据,这是过去一个月的流量(基本为0): 交通数据

和实例数据实例数据

更新:请注意,我确实对package.json进行了一次修改:我将nodemon添加为依赖项,并将其添加为"nmp start"脚本的一部分.虽然我怀疑这解释了6000小时的资源:

  "scripts": {
    "deploy": "gcloud app deploy",
    "start": "nodemon app.js",
    "dev": "nodemon app js",
    "lint": "samples lint",
    "pretest": "npm run lint",
    "system-test": "samples test app",
    "test": "npm run system-test",
    "e2e-test": "samples test deploy"
  },
Run Code Online (Sandbox Code Playgroud)

App.yaml(默认 - 教程没有变化)

runtime: nodejs
env: flex
Run Code Online (Sandbox Code Playgroud)

google-app-engine node.js google-cloud-platform

65
推荐指数
5
解决办法
1万
查看次数

使用Google App Engine时无效和/或缺少SSL证书

更新:请,如果有人可以提供帮助:谷歌正在等待他们的错误跟踪工具上的输入和此问题的示例.如果您有针对此问题的可重现步骤,请分享:https://code.google.com/p/googleappengine/issues/detail?id = 10937

我正在尝试使用Google App Engine后端从StackExchange API获取数据.您可能知道,StackExchange的某些API是特定于站点的,要求开发人员针对用户注册的每个站点运行查询.

所以,这是我从这些网站获取时间线数据的后端代码.该feed_info_site变量保存StackExchange站点名称(如'security','serverfault'等).

    data = json.loads(urllib.urlopen("%sme/timeline?%s" % 
        (self.API_BASE_URL, urllib.urlencode({"pagesize": 100, 
        "fromdate": se_since_timestamp, "filter": "!9WWBR
        (nmw", "site": feed_info_site, "access_token": 
    decrypt(self.API_ACCESS_TOKEN_SECRET, self.access_token), "key": 
self.API_APP_KEY}))).read())
for item in data['items']:
    ... # code for parsing timeline items
Run Code Online (Sandbox Code Playgroud)

在除Stack Overflow之外的所有站点上运行此查询时,一切正常.有点奇怪的是,当feed_info_site变量设置为时'stackoverflow',我从Google App Engine收到以下错误:

    HTTPException: Invalid and/or missing SSL certificate for URL: 
https://api.stackexchange.com/2.2/me/timeline?
filter=%219WWBR%28nmw&access_token=
    <ACCESS_TOKEN_REMOVED>&fromdate=1&pagesize=100&key=
<API_KEY_REMOVED>&site=stackoverflow
Run Code Online (Sandbox Code Playgroud)

当然,如果我在Safari中运行相同的查询,我会得到我期望从API获得的JSON结果.所以问题实际上在于Google的URLfetch服务.我在Stack Overflow上发现了几个与类似的HTTPS/SSL异常相关的主题,但没有接受的答案解决了我的问题.我试过删除cacerts.txt文件.我也试过打电话validate_certificate=False,没有成功.

我认为问题与HTTPS/SSL并不严格相关.如果是这样,您如何解释更改单个API参数会导致请求失败?

ssl google-app-engine urlfetch

64
推荐指数
1
解决办法
3046
查看次数

谁在那里使用web2py?

有谁在那里*使用web2py

特别:

  • 在生产?
  • 用什么数据库?
  • 使用Google Application Engine?

    • 通过"在那里"我的意思是在stackoverflow.

google-app-engine web2py

63
推荐指数
12
解决办法
3万
查看次数

如何使用Google App Engine管理第三方Python库?(virtualenv?pip?)

使用Google App Engine管理第三方Python库的最佳策略是什么?

说我想使用Flask,一个webapp框架.博客条目说这样做,这似乎不对:

$ cd /tmp/
$ wget http://pypi.python.org/packages/source/F/Flask/Flask-0.6.1.tar.gz
$ tar zxf Flask-0.6.1.tar.gz
$ cp -r Flask-0.6.1/flask ~/path/to/project/
(... repeat for other packages ...)
Run Code Online (Sandbox Code Playgroud)

必须有更好的方法来管理第三方代码,特别是如果我想跟踪版本,测试升级或两个库共享一个子目录.我知道,Python可以从zipfiles导入模块和PIP可以用美妙的需求文件工作,我已经看到了PIP具有zip与GAE使用命令.

(注:有类似的问题了一把- 1,2,3,4,5 -但他们的情况下,具体的,真的不回答我的问题.)

python deployment google-app-engine egg pip

62
推荐指数
4
解决办法
2万
查看次数

从数据存储区查询大量ndb实体的最佳实践

我在App Engine数据存储区遇到了一个有趣的限制.我正在创建一个处理程序来帮助我们分析一个生产服务器上的一些使用数据.为了执行分析,我需要查询和汇总从数据存储中提取的10,000多个实体.计算并不难,它只是通过使用样本的特定过滤器的项目的直方图.我遇到的问题是,在达到查询截止日期之前,我无法快速从数据存储区中获取数据以进行任何处理.

我已经尝试了所有我能想到的将查询分块到并行RPC调用以提高性能,但根据appstats我似乎无法让查询实际并行执行.无论我尝试什么方法(见下文),似乎RPC总是回到顺序下一个查询的瀑布.

注意:查询和分析代码确实有效,它只是运行缓慢,因为我无法从数据存储中快速获取数据.

背景

我没有可以分享的实时版本,但这里是我正在谈论的系统部分的基本模型:

class Session(ndb.Model):
   """ A tracked user session. (customer account (company), version, OS, etc) """
   data = ndb.JsonProperty(required = False, indexed = False)

class Sample(ndb.Model):
   name      = ndb.StringProperty  (required = True,  indexed = True)
   session   = ndb.KeyProperty     (required = True,  kind = Session)
   timestamp = ndb.DateTimeProperty(required = True,  indexed = True)
   tags      = ndb.StringProperty  (repeated = True,  indexed = True)
Run Code Online (Sandbox Code Playgroud)

您可以将样本视为用户使用给定名称功能的时间.(例如:'systemA.feature_x').标签基于客户详细信息,系统信息和功能.例如:['winxp','2.5.1','systemA','feature_x','premium_account']).因此,标签形成一组非规范化的标记,可用于查找感兴趣的样本.

我试图做的分析包括获取一个日期范围,并询问每个客户帐户(公司,而不是每个用户)每天(或每小时)使用的功能集(可能是所有功能)的特征次数.

因此处理程序的输入类似于:

  • 开始日期
  • 结束日期
  • 标签(S)

输出将是:

[{
   'company_account': <string>,
   'counts': [
      {'timeperiod': <iso8601 date>, …
Run Code Online (Sandbox Code Playgroud)

google-app-engine app-engine-ndb google-cloud-datastore

62
推荐指数
1
解决办法
2万
查看次数

Spring - POST后重定向(即使有验证错误)

我试图弄清楚如何"保留"BindingResult,以便它可以通过Spring <form:errors>标签用于后续的GET .我想这样做的原因是因为Google App Engine的SSL限制.我有一个通过HTTP显示的表单,帖子是一个HTTPS URL.如果我只转发而不是重定向,那么用户将看到https://whatever.appspot.com/my/form URL.我试图避免这种情况.任何想法如何处理这个?

以下是我想做的事情,但我在使用时只看到验证错误return "create".

@RequestMapping(value = "/submit", method = RequestMethod.POST)
public final String submit(
    @ModelAttribute("register") @Valid final Register register,
    final BindingResult binding) {

    if (binding.hasErrors()) {
        return "redirect:/register/create";
    }

    return "redirect:/register/success";
}
Run Code Online (Sandbox Code Playgroud)

java validation google-app-engine spring spring-mvc

61
推荐指数
3
解决办法
7万
查看次数

为什么我的java编译器级别与我安装的项目方面不匹配?

我在Eclipse 3.7中创建了一个名为Guestbook的简单Java Google AppEngine应用程序,并尝试运行它.但是,我遇到了一个缺少快速修复的错误:

Description Resource    Path    Location    Type
Java compiler level does not match the version of the installed Java project facet.
Guestbook       Unknown Faceted Project Problem (Java Version Mismatch)
Run Code Online (Sandbox Code Playgroud)

我尝试导航到Project | 用于更改项目方面的属性.但是,我找不到处理"facet"的设置.

在此输入图像描述

"安装Java项目方面"意味着什么,我该如何解决这个问题?

java eclipse google-app-engine

61
推荐指数
3
解决办法
10万
查看次数