J’ai lu que Licorne est rapide pour servir du contenu statique, ralentir les utilisateurs, faire des redirections.
Pourquoi vaut-il mieux nginx + unicorn vs unicorn en cours d’exécution, et mettre à l’échelle le nombre de travailleurs licornes si nécessaire?
Avez-vous des chiffres indiquant combien de temps nginx est rapide sur chacune de ces choses (redirection, proxy, diffusion de contenu statique)?
Comme le prétend Heroku DevCenter , les employés de Licorne sont vulnérables aux clients lents .
Chaque agent ne peut traiter qu’une seule demande et, si le client n’est pas prêt à accepter la réponse complète (également appelée “client lent”), l’agent Unicorn est bloqué pour envoyer la réponse et ne peut pas gérer la réponse suivante . Étant donné que chaque agent Unicorn utilise une quantité importante de mémoire vive ( encore une fois, voir Heroku , il prétend gérer 2 à 4 processus à 512 Mio RAM), vous ne pouvez pas compter sur le nombre d’employés, car application inutilisable en prétendant avoir des connexions lentes.
Lorsque derrière nginx , Unicorn est capable de transférer la réponse entière dans le tampon de nginx et de passer immédiatement à la requête suivante.
Cela dit, nginx avec un seul travailleur Unicorn est beaucoup plus fiable qu’un groupe de travailleurs Unicorn exposés directement.
NB: pour les anciens utilisateurs de Rubis: si vous utilisez un ensemble de travailleurs Unicorn, envisagez de migrer au moins vers Ruby 2.0 pour réduire la consommation de RAM en partageant des données communes entre les processus fourchus ( ref ).