2013-05-08 61 views
8

我试图在Amazon负载平衡器后面使用Flask应用程序,并且瓶颈线程保持超时。看来负载均衡器正在发送一个Connection: keep-alive标题,这导致Flask进程永远不会返回(或需要很长时间)。在前面有炮弹的过程中,死亡和新的开始。我们也尝试使用uWSGI,并直接暴露Flask应用程序(无包装)。所有导致Flask进程没有响应。瓶装应用超时与亚马逊负载平衡器

我在Flask文档中看不到任何内容,它会忽略此标题。我很遗憾我还能用Flask来解决这个问题。

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

回答

8

我现在使用的解决方案是使用gunicorn作为烧瓶应用程序的包装。对于worker_class我使用eventlet与几名工人。这种组合看起来很稳定且响应速Gunicorn也被配置为HTTPS。

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

+0

你是否设法弄清楚为什么? – dnozay 2013-07-17 16:24:33

+0

我不能确定,但​​它似乎是Flask如何处理HTTP 1.1请求的缺陷。 – 2013-07-18 08:07:18

+0

您是否在GitHub上提交过有关此问题? – 2013-07-18 10:10:09

0

最简单的方法是强制所有连接,以确保您使用的是HTTP/1.0而不是将标头Connection: Keep-Alive添加到响应中。

请检出werkzeug.http.remove_hop_by_hop_headers()

+0

你如何以及在哪里改变了这一切?我不熟悉这些设置。谢谢 – Joe 2017-05-25 00:55:24

0

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

1

您是否记得设置session.permanent = Trueapp.permanent_session_lifetime

+0

会话未被使用。 – 2013-07-16 12:18:53

+0

你准确的改变了这个地方?我不熟悉这些设置。谢谢 – Joe 2017-05-25 00:55:01