小编che*_*090的帖子

Google Cloud Run with Gunicorn/flask - 间歇性出现 504

我使用 Gunicorn 和工作类型 gthread 在 Cloud Run 上运行 Flask 应用程序。在低级别上,此 API 仅从数据存储区和 Pubsub 写入/检索条目,因此所有操作都很轻。流量为每天 20,000 个请求,最大 QPS 20 个请求,平均 QPS 2

每隔几天/几周,一部分流量 (25%-50%) 就会收到 504 响应,并显示以下错误:

由于已达到最大请求超时时间,请求已终止。要更改此限制,请参阅https://cloud.google.com/run/docs/configuring/request-timeout

几个小时后,问题自行解决(重新部署应用程序或启动新的 CR 实例即可立即解决问题)。这些 504 请求似乎根本没有到达应用程序。此错误似乎与 stderr、stdout 中的任何错误或 QPS 的增加无关。我已经设置了一些高级日志记录和云分析器,但我没有得到任何有用的信息。该应用程序在具有gunicorn同步工作器的App Engine上运行得非常好。唯一的区别是gunicorn 设置。同步工作线程在 CR 上运行速度非常慢,所以我使用了 gthread。

有什么想法下一步该去哪里吗?

Dockerfile

ENTRYPOINT ["gunicorn"]
CMD ["-b", ":8080", "--worker-class", "gthread", "--workers", "5", "--threads", "2", "api.app:app" ]
Run Code Online (Sandbox Code Playgroud)

应用程序.py

def run(**kwargs):
    app.run(port=8080, debug=False)


app = connexion.App(__name__, specification_dir='./swagger/')
app.app.json_encoder = encoder.JSONEncoder
app.add_api('swagger.yaml', resolver=connexion.resolver.RestyResolver('api'))
app.app.config.from_object(Config)

if __name__ == '__main__':
    run()
Run Code Online (Sandbox Code Playgroud)

gcloud部署命令:

gcloud run …
Run Code Online (Sandbox Code Playgroud)

python gunicorn google-cloud-platform google-cloud-run

7
推荐指数
0
解决办法
1759
查看次数