GoogleAppEngine上的Django:性能指南

时间:2012-03-30 11:01:11

标签: python django google-app-engine python-2.7 google-cloud-sql

几周前我问this question。今天我实际编写并发布了一个标准的Django应用程序,即由Google CloudSQL启用的全功能关系数据库支持(以及因此功能齐全的Django管理员)。唯一一次我不得不偏离做标准的Django方式是发送电子邮件(必须以GAE的方式做)。我的设置为GAE 1.6.4Python2.7Django 1.3,使用app.yaml中的以下内容:

libraries:
- name: django
  version: "1.3"

但是,我确实需要您建议明确可操作的步骤,以改善此Django应用程序冷却时的初始请求的响应时间。我在GAE上有一个简单的webapp2网站,点击数据库,当时,响应时间为1.56s。 Django,当 cold 时,用2个查询(每个包含少于300行的表的两个count(*)查询)命中数据库,响应时间为10.73s!不鼓励主页;)

我想到的是删除我不需要的middleware类以及其他特定于Django的优化。然而,从GAE的角度来看改善事物的技巧也非常有用。

N.B。我不希望这成为关于在GAE上使用Django的优点的讨论。我可以提一下,我个人的Django专业知识以及由此产生的开发效率,在采用Django而不是其他框架时确实很重要。此外,使用CloudSQL,很容易远离GAE(希望不是!),因为Django代码可以在其他任何地方使用很少(或没有)修改。有关此类主题的相关讨论可以在herehere找到。

2 个答案:

答案 0 :(得分:2)

当没有实例运行时,例如在版本升级之后或当没有15分钟的请求时,则请求将触发加载大约需要10秒的实例。所以你所看到的是正常的。

因此,如果您的应用闲置时间超过15分钟,您会看到此行为。一种解决方法是每隔10分钟对您的实例执行cron个作业(虽然我认为谷歌不喜欢这样)。

<强>更新

您可以通过启用结算然后在GAE管理员的“应用设置”下设置minimum空闲实例设置为1.注意:min设置在免费应用上不可用,只有{{ 1}}。

答案 1 :(得分:2)

我没有完整的答案,但我正在做出贡献,因为我也希望找到解决方案。我目前正在使用正在运行的cron作业(我实际上需要cron作业,所以它不仅仅是为了保持我的应用程序活着)。

我已经在其中一个GAE / Python / Django相关邮件列表中看到过,与webapp相比,加载所有Django文件所需的时间非常重要,因此删除了不使用的django组件从部署中也应该改善您的启动时间。通过删除contrib文件夹的某些部分,我已经能够剃掉大约3秒钟。我在app.yaml中排除了它们。

我的启动时间仍然是6秒左右(完整的应用程序,Django-nonrel,HRD)。当我的应用程序更简单时,它曾经更像是4。

我怀疑Django在启动时验证了所有模型,并且处理时间很长。如果你有时间尝试使用绝对0型号的应用程序,我会很好奇它是否会产生任何影响。

我也很好奇你的两个初步查询是否会产生重大影响。