NGINX + uWSGI + Flacon. Certaines requests sont très lentes

Nous utilisons une application de flask assez large et nous constatons que, au hasard, nous finirons par une requête très lente (parfois une minute ou plus)

Je présume que le problème est lié aux modules de chargement par défaut et les requests lentes sont quand un nouveau travailleur doit démarrer ou recharger. (nous avons eu à l'origine ce problème avec Apache + mod_wsgi, mais avons décidé d'essayer uWSGI au lieu de prévoir des travailleurs). Cependant, même avec le rechargement, il n'est pas cohérent. Souvent, je peux me recharger et les requests sont un peu plus lentes mais pas significativement.

Je sais que le chargement par défaut est une chose dans Django, mais comme je le comprend du Doccs Flask ne le fait pas, sauf s'il est configuré. Je ne doute pas pourquoi les requests continueraient d'être très lentes.

Pour append au mystère, je l'exécute sur EC2 derrière un équilibreur de charge (juste avec l'instance unique). Je semble avoir plus de problèmes lors de la connection via l'équilibreur de charge que je le fais lors de la connection directe mais encore son random. La plupart des requêtes via l'équilibreur de charge n'ajoute pas plus d'environ 10 ms.

Voici les différentes configurations:

nginx:

server { listn 80; server_name dev.mysite.net root /var/www/mysite; location / { include uwsgi_params; uwsgi_pass unix:/var/run/uwsgi/mysite.sock; } } 

uWSGI (géré par l'empereur)

 [uwsgi] base = /usr app = my_app.py pythonpath = /usr/lib/python2.7 pythonpath = /usr/lib/python2.7/site-packages pythonpath = /usr/lib/python2.7/dist-packages pythonpath = /var/www/mysite socket = /var/run/uwsgi/%n.sock module = %(app) callable = app logto = /var/log/uwsgi/%n.log workers=10 enable-threads = 1 

EDIT: Une chose que j'ai traversé était que les réglages de temporisation persistants pourraient causer des problèmes et cela semble que le time d'attente attendait quelques secondes de plus que le timeout d'attente. Cela semble avoir aidé, mais pas réglé entièrement, en particulier sur les requests via l'équilibreur de charge.

Ce problème est apparu:

Le problème était les zones de disponibilité dans le ELB. Je pensais que je devais avoir une zone de disponibilité définie de la même façon que l'endroit où se trouve mon instance, puis au less une zone publique (la zone dans laquelle l'instance est située est privée).

Apparemment, où l'instance n'a pas d'importance, les zones de disponibilité doivent être toutes publiques. La création d'un sous-réseau public dans la même zone de disponibilité l'a rendu magique, bien que l'instance elle-même soit sur un sous-réseau privé.