缩短在Python 3.7标准环境中运行Django的Google App Engine的冷启动时间

时间:2019-07-16 09:28:39

标签: python django python-3.x google-app-engine gunicorn

我正在Python 3.7标准环境下的Google App Engine上运行基于Django的网络应用程序。使用该应用时,请求通常需要500毫秒左右,这完全可以接受。但是,当一段时间(几分钟)没有访问该应用程序时,日志将显示Google App Engine实例已关闭,下一个请求需要再次加载gillicorn并花费大约20秒的时间。

我显然不能让用户在页面加载前等待20秒。在我的本地设置上进行测试时,服务器需要几秒钟来加载环境变量,然后调试服务器几乎立即就会加载。

我不认为我的代码有问题,因为一旦发生了“冷启动”,一切都将快速运行,因此,这并不意味着请求正在等待数据库读取或类似的操作。

在Google App Engine上可以使用哪些选项来优化Django冷启动?

到目前为止,我已经将实例类增加到F4,并根据this guide指定了负责贩毒的工人人数。从理论上讲,我可以使用F4_1G,但这是可用的实例最多的实例,它似乎无法解决冷启动问题。

我能想到的唯一会减慢实例启动速度的事情是,在我的app.yaml中,我设置了32个环境变量(主要是API凭据)。这可能是启动时间长的主要原因吗?如果是这样,是否有一种安全的替代方法,可以在不使用环境变量的情况下向Django提供API凭据?

谢谢

1 个答案:

答案 0 :(得分:2)

比较GAE与本地计算机上的性能并没有多大关系,请参阅Why does Google Cloud SQL (using JDBC) take longer to insert records from Google App Engine than from my personal computer?

您在本地看到的那几秒钟并不仅花费在加载局部变量上(如果您不相信,您实际上可以测量它并在日志消息中显示它),其中大部分花费在导入所有必需的库和设置上django框架(可能还有其他一些应用程序),您需要对其进行概要分析以弄清楚发生了什么,并如果 /可以做些什么来显着改善它。

最小化冷启动时间影响的典型方法是: