使用亚马逊负载均衡器进行烧瓶应用超时

时间:2013-05-08 15:09:41

标签: python flask gunicorn werkzeug

我正在尝试在Amazon Load Balancer后面使用Flask应用程序,并且Flask线程会保持超时。似乎负载均衡器正在发送Connection: keep-alive标头,这导致Flask进程永远不会返回(或需要很长时间)。在前面有枪炮,过程被杀死,新的过程开始。我们还尝试使用uWSGI并简单地直接暴露Flask应用程序(没有包装器)。所有这些都导致Flask进程无法响应。

我在Flask文档中看不到任何会使它忽略此标题的内容。我不知道我还能用Flask做些什么来解决这个问题。

卷曲和与机器的直接连接工作正常,只有那些通过负载平衡器导致问题。负载均衡器本身似乎没有做错任何事情,我们成功地将其与其他几个堆栈一起使用。

4 个答案:

答案 0 :(得分:8)

我现在的解决方案是使用gunicorn作为烧瓶应用的包装。对于worker_class我使用eventlet和几个工作人员。这种组合似乎稳定且反应灵敏。 Gunicorn也配置了HTTPS。

我认为Flask中存在导致问题的缺陷,这是一种有效的解决方法。

答案 1 :(得分:1)

您还记得设置session.permanent = Trueapp.permanent_session_lifetime吗?

答案 2 :(得分:0)

最简单的方法是强制所有连接,以确保您使用的是HTTP/1.0,而不是在回复中添加标题Connection: Keep-Alive

请结帐werkzeug.http.remove_hop_by_hop_headers()

答案 3 :(得分:0)

您需要HTTP负载均衡器吗?使用第4层平衡器也可以解决您的问题,因为它不会干扰更高的协议级别。