Ich versuche, eine Flask-Anwendung hinter einem Amazon Load Balancer zu verwenden, und die Flask-Threads halten das Timing aus. Es scheint, dass der Load Balancer einen Connection: keep-alive
Header sendet und dies verursacht, dass der Flask-Prozess nie zurückkehrt (oder eine lange Zeit braucht). Mit dem Gunicorn werden die Prozesse beendet und neue gestartet. Wir haben auch versucht, uWSGI zu verwenden und die Flask App einfach direkt zu exponieren (kein Wrapper). Alle führen dazu, dass der Flask-Prozess nicht reagiert.
Ich sehe in den Flask-Dokumenten nichts, was diesen Header ignorieren würde. Ich weiß nicht, was ich noch mit Flask machen kann, um das Problem zu lösen.
Locken und direkte Verbindungen zur Maschine funktionieren gut, nur diejenigen über den Load Balancer verursachen das Problem. Der Load Balancer selbst scheint nichts falsch zu machen und wir verwenden ihn erfolgreich mit mehreren anderen Stacks.
Die Lösung, die ich jetzt habe, benutzt Gunicorn als Wrapper um die Flaschenapplikation. Für worker_class
verwende ich eventlet
mit mehreren Arbeitern. Diese Kombination scheint stabil und ansprechend zu sein. Gunicorn ist auch für HTTPS konfiguriert.
Ich nehme an, dass es ein Fehler in Flask ist, der das Problem verursacht, und dies ist eine effektive Problemumgehung.
Haben Sie daran gedacht, session.permanent = True
und app.permanent_session_lifetime
zu setzen?
Benötigen Sie einen HTTP Load Balancer? Die Verwendung eines Layer 4 Balancers könnte genauso gut Ihr Problem lösen, da es nicht mit höheren Protokollebenen interferiert.