【发布时间】:2020-08-20 21:58:36
【问题描述】:
我正在 Google Cloud Run 上使用 Gunicorn 部署 Flask API。我遇到的问题是我的应用程序必须加载两个大型 Pandas 数据帧(这是不可协商的),这需要几秒钟。我遇到的问题是,只要$PORT 正在侦听,Cloud Run 就会开始向容器发送流量,这意味着前几个请求会排队,直到 Flask 准备好。我尝试使用 Docker 的运行状况检查来确保容器状态在 Flask 准备就绪之前不正常,但 Cloud Run 忽略了这一点。
问题
如何延迟 Gunicorn 与监听端口的绑定?
我尝试使用app factory pattern 以及更常见的方式运行 Gunicorn,但没有任何效果。我目前正在延迟加载数据帧,这有帮助,但我能做的最好的事情是 2 秒。希望答案不会与优化我的应用程序的加载有关,而是如何防止 Cloud Run 在我准备好之前将流量传送到容器。
编辑
使用 --preload 标志似乎可以解决问题,只是 Cloud Run 仍然在容器准备好之前将流量驱动到容器。
【问题讨论】:
-
如果不是延迟绑定,而是让应用程序中的流量,并且,当数据帧加载时,它返回一个 5xx 错误,所以客户端必须重试?如果不是,请求队列有什么问题?
-
Heroku 也存在这个问题。
标签: docker flask gunicorn serverless google-cloud-run