Google App Engine 应用极慢
我在Google App Engine上创建了一个“你好,世界”的网站。这个网站使用的是Django 1.1,没有做任何修改。
虽然这个网页非常简单,但加载起来却很慢,常常会超时。
有什么建议可以解决这个问题吗?
注意:第一次访问后,它的响应速度就快了。
8 个回答
总结一下到目前为止的讨论内容:
- 冷启动的时间很长。
- 谷歌不鼓励用户频繁访问应用来保持其活跃,但大家不知道有什么其他办法。
- 有一个关于为Java的热实例付费的问题被提出来了,具体可以查看这个链接。
- 关于Python也有一个问题被提出来,具体可以查看这个链接。其中提到,.py文件没有预编译。
- 有些应用受到的影响特别大(找不到Google Groups的引用或相关问题)。
- 在2009年3月关于Python的讨论中提到,启动时间少于1秒(!)。
我发现关于Python这个问题的讨论比较少。
现在谷歌新增了一个支付选项“始终在线”,每天收费0.30美元。
使用这个功能后,你的应用就不需要再冷启动了。
始终在线
虽然预热请求可以帮助你的应用平稳扩展,但如果你的应用流量非常少,这个功能就没什么用处。对于那些流量低但优先级高的应用,你可以通过App Engine的“始终在线”功能来保留实例。
“始终在线”是一个高级功能,它会保留你应用的三个实例,即使应用没有流量,这些实例也不会关闭。这样可以减少小流量或流量不稳定的应用在加载请求时受到的影响。此外,如果某个“始终在线”的实例意外停止,App Engine会自动用一个预热请求重启这个实例。因此,使用“始终在线”的应用在预热请求期间应该尽量多做一些初始化工作。
即使启用了“始终在线”,如果流量突然增加,你的应用仍然可能会遇到加载请求。
要启用“始终在线”,请在你应用的管理控制台中进入账单设置页面,然后勾选“始终在线”选项。
http://code.google.com/intl/de-DE/appengine/docs/adminconsole/instances.html
这个建议听起来很糟糕,但我还是想说一下:
你可以做一个小程序,或者直接用 wget
配合 cron
定时访问你的应用,比如每隔5分钟访问一次。这样可以防止谷歌把你的应用放入休眠状态。
我之所以说这个建议糟糕,是因为这样做浪费资源,而且有点滥用谷歌的免费服务。我希望你只在短期的测试或启动阶段才这么做。