改善 Google App Engine 运行 Django 在 Python 3.7 标准环境上的冷启动时间

Improving cold start up times on Google App Engine running Django on Python 3.7 Standard environment

我是 运行 Google App Engine 上 Python 3.7 标准环境下的基于 Django 的 Web 应用程序。使用该应用程序时,请求通常需要 500 毫秒左右,这是完全可以接受的。然而,当应用程序有一段时间(几分钟)未被访问时,日志显示 Google App Engine 实例已关闭,下一个请求需要 gunicorn 重新加载,大约需要 20 秒。

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

我认为我的代码没有问题,因为一旦 "cold start" 发生,一切都很快 运行,所以请求不会等待数据库读取或类似的东西。

有哪些选项可以优化 Google App Engine 上的 django 冷启动?

至此,我已经将实例class增加到F4,并根据this guide指定了gunicorn worker的个数。理论上我可以去 F4_1G,但那是最高可用实例,它似乎没有解决冷启动问题。

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

谢谢

比较 GAE 与本地机器上的性能并不相关,请参阅 Why does Google Cloud SQL (using JDBC) take longer to insert records from Google App Engine than from my personal computer?

你在本地看到的那些秒数不仅仅用于加载局部变量(如果你不相信,你可以实际测量它并在日志消息中显示),大部分时间用于导入所有需要的库并设置 django 框架(也许还有其他适用于您的应用程序的框架),您需要对其进行分析以弄清楚到底发生了什么以及 if/可以做些什么来显着改进它。

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