python - 关于Google App Engine可用性的反馈

标签 python google-app-engine google-apps

我们在谷歌App Engine上建立了一个应用程序,这是第一个应用程序的目标用户是谷歌应用程序的用户,所以没有问题,它是托管在谷歌基础设施。
我们非常喜欢它,我们想用它来为另一个应用程序进行调查,然而,下一个项目是一个客户,他们并不真正对它所坐的技术感兴趣,他们只是想让它工作,并一直工作。
在这种情况下,考虑到我们已经涵盖了技术的适用性和能力方面,有没有担心这些东西仍然是相对较新的,我们可能没有像传统托管那样“控制”得那么多?

最佳答案

你是对的:与传统的托管相比,你没有那么多的控制权。然而,希望收益超过负数。App Engine是非常可伸缩的——它运行在运行谷歌本身的同一硬件上。您多久访问一次http://google.com页面或搜索结果失败?
虽然你让谷歌运行你的代码,但代码仍然是你的,你可以做你想做的。有了像django-nonrel这样的新项目,你可以直接在app engine上创建和运行本地django应用程序,如果它不能满足你的需求,那么将该应用程序带到托管django应用程序的isp就相当容易了(而且有很多这样的应用程序)。下面是关于这个项目的更多信息。
您不必担心硬件、操作系统、机器映像、数据库、Web服务器、前端负载平衡器、CDNS/EDGE缓存、软件/包升级、许可费等。所有这些都与Web或其他应用程序相切,您或将创建这些应用程序来解决特定问题。不管你喜欢与否,所有这些额外的基础设施都是必需的;但是对于app engine,你只需要考虑你的应用/解决方案,而不需要考虑这些额外的东西。
显然,你失去的另一件事是一些执行环境。为了确保您与云邻居(资源占用、安全问题等)玩得很好,必须在沙箱中执行,这意味着应用程序不能创建本地文件、打开网络套接字等。然而,AppEngine提供了一套丰富的API和产品特性,以便您至少可以创建有意义的应用程序:
可伸缩的分布式对象数据存储(见下文)
内存缓存
乌尔费奇
图像服务(调整大小、裁剪等)
用于后台处理的用户服务/认证任务队列
Django Web模板
大文件的blobstore
拒绝服务黑名单
跨民族任务
数据存储游标
发送(和/或接收)电子邮件
通过xmpp发送(和/或接收)聊天/即时消息/即时消息
您还拥有一个完整的仪表板管理控制台,可用于监视应用程序的使用情况、帐单设置和历史记录、配额使用情况的完整转储,甚至可以查看或下载的应用程序日志。
要解决@anurag的“主要痛点”:
自由配额是相当慷慨的…足以为每月浏览量达5毫米的网站提供动力。此外,如果你相信谷歌会给他们你的信用卡,他们将提高免费配额水平甚至更高。查看their quota page并参考“免费默认配额”和“启用计费的默认配额”列中的数字…以下是一些示例:a)请求的:1.3mm默认值,43mm w/billing enabled(wbe),b)数据存储api调用:10mm默认值,140mm wbe,c)url获取:657k默认值,46mm wbe
请求最多1b.30s:这对您来说更安全,因为您的应用程序现在与其他应用程序一起在操场上。谷歌必须确保所有的云邻居都能友好相处,而不是占用CPU。不过,app engine团队正在研究一种允许长时间运行后台任务的方法…目前还没有时间表,但it is on the public roadmap
1c.在app engine上编写聊天服务器不仅是可能的,而且非常简单。这里有一个使用App Engine的AA>创建的——它非常愚蠢,只是向发送者回传它们发送给我们的信息(请注意你一定已经邀请了用户聊天):

from google.appengine.api import xmpp
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class XMPPHandler(webapp.RequestHandler):
    def post(self):
        msg = xmpp.Message(self.request.POST)
        msg.reply("I got your msg: '%s'" % msg.body)

application = webapp.WSGIApplication([
    ('/_ah/xmpp/message/chat/', XMPPHandler),
], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

1d.XMPP API上的另一个项目是未来的“浏览器推送(comet)通信的[支持]”,所以这也即将到来。
2a.“不是SQL”是谷歌应用引擎最大的优势之一!关系数据库不可扩展,必须在某个点上进行分片,以防止rdbms崩溃。然而,这是真的,因为它不是传统的港口稍有困难!基于the public roadmap,您可以将app engine数据存储看作一个可伸缩的分布式对象数据库。App Engine允许你使用AA>模型,或者如果你坚持,他们也提供一个Google Bigtable
2b.有了新的前卫项目,比如query the datastore using a Query object,如果你创建了一个django应用程序并使用它的orm,你可以使用一个纯django应用程序并直接在app引擎上运行它。同样,您可以将它从app engine中移除,直接转移到托管django应用程序的更传统的isp供应商。查询保持完全相同,并且不必关心它是否执行SQL。
3A长时间运行的过程已经在上面的1B中解决了。谷歌意识到了这一需求,并正在努力解决这一问题。
3b.SQL-like GqlQuery interface支持10万次呼叫,但这一数字已升至1毫米wbe…这是每天都要做的。
3c.谷歌强烈鼓励将任务分成多个子任务。低延迟的应用程序被认为不会“霸占系统”,并且比那些速度慢、从云邻居那里消耗更多资源的应用程序得到更好的处理。

关于python - 关于Google App Engine可用性的反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2682062/

相关文章:

python - 根据另一个数组的元素从numpy数组中删除元素

python - 在 python、bash 或 perl 中,如何人为地增加内存

javascript - Google 脚本 - 将 Gmail 中的数据获取到表格中

google-apps-script - Google Apps 脚本 - 使用另一个单元格的十六进制值更改单元格的背景颜色

python - Tesseract 选项和图像预处理

Python从HDFS读取文件作为流

java - appEngine云端点单参数问题

python - 迭代数据库结果时如何在应用程序引擎(python)中收集内存垃圾

android - 如何在不使用 Glass 的情况下在移动设备中执行 Google Glass

php - 更新/删除 Google 应用条目 - 未找到 ETag