web-dev-qa-db-fra.com

Heroku: web dyno vs dyno travailleur? De combien / de quel ratio ai-je besoin?

J'étais curieux de savoir quelle est la différence entre les dynos web et travailleurs sur Heroku. Ils donnent une explication d'une phrase sur leur page de prix, mais cela m'a laissé perplexe. Comment savoir combien choisir chacun? Y a-t-il un ratio que je devrais viser? Je suis assez nouveau dans ce domaine, alors quelqu'un peut-il donner une explication approfondie, ou peut-être une façon de calculer le nombre et le type de dynos dont j'ai besoin?

De plus, je suis confus quant à ce qu'ils entendent par le nombre d'heures pour chaque dyno.

http://www.heroku.com/pricing

Je suis également tombé sur cet article. Comme une de leurs solutions suggérées, ils ont dit d'augmenter la quantité de dynos. À quel type de dyno font-ils référence ici?

http://devcenter.heroku.com/articles/backlog-too-deep

81
varatis

Votre meilleure indication si vous avez besoin de plus de dynos (aka processus sur Cedar) est vos journaux Heroku. Assurez-vous de mettre à niveau vers la journalisation étendue (c'est gratuit) afin de pouvoir suivre votre journal.

Vous recherchez les entrées heroku.router et la valeur qui vous intéresse le plus est la valeur de la file d'attente - si elle est constamment supérieure à 0, c'est un bon signe que vous devez ajouter plus de dynos. Essentiellement, cela signifie qu'il y a plus de demandes que ce que votre processus peut gérer, de sorte qu'elles sont mises en file d'attente. S'ils sont mis en file d'attente trop longtemps sans renvoyer de données, ils seront expirés.

Il n'y a pas de ratio idéal, je le crains, vous pourriez avoir une application qui effectue 100 requêtes par seconde nécessitant de nombreux processus Web, mais qui ne fait tout simplement pas appel à des travailleurs. Vous n'avez besoin de processus de travail que si vous effectuez un traitement en arrière-plan, comme l'envoi d'e-mails, etc., etc.

ps Backlog trop profond serait un processus web Dyno qui en serait la cause.

MISE À JOUR: Le 26 mars 2013, Heroku a supprimé la file d'attente et les champs d'attente de la déconnexion.

les champs de file d'attente et d'attente ont été supprimés des messages du journal du routeur. De plus, le routeur Heroku ne définit plus les en-têtes HTTP X-Heroku-Dynos-In-Use, X-Heroku-Queue-Depth et X-Heroku-Queue-Wait-Time pour les demandes entrantes.

57
John Beynon

Les dynos sont essentiellement des processus qui s'exécutent sur votre instance. Avec la nouvelle pile Cedar, ils peuvent être configurés pour exécuter n'importe quelle commande Shell arbitraire. Pour les applications Web, vous disposez généralement d'un processus appelé "Web" qui est chargé de répondre aux demandes HTTP des utilisateurs. Tous les autres processus sont ce que l'on appelait auparavant les "travailleurs". Ceux-ci s'exécutent en continu en arrière-plan pour des choses comme cron, les files d'attente de traitement et tout calcul lourd que vous ne voulez pas bloquer vos processus Web. Vous pouvez également mettre à l'échelle chaque type de processus, afin que plusieurs processus de chaque type soient démarrés pour une concurrence supplémentaire. La quantité de chacun que vous utilisez dépend vraiment des besoins de votre application et de la charge qu'elle reçoit. Vous pouvez utiliser des outils comme le plugin New Relic pour surveiller ces choses. Jetez un œil aux articles sur le modèle de processus et le Procfile dans le centre de développement de Heroku pour plus de détails.

15
Jimmy Cuadra

Un certain nombre de personnes ont mentionné qu'il n'y a pas de ratio connu et que le ratio de travailleurs Web aux travailleurs "d'arrière-plan" que vous souhaitez dépend de la façon dont vous avez conçu votre application - c'est exact. Cependant, j'ai pensé qu'il pourrait être utile d'ajouter qu'en règle générale, vous voulez que vos employés Web - et donc les actions du contrôleur qu'ils servent - soient rapides comme l'éclair et très légers, pour réduire la latence dans les temps de réponse des actions du navigateur. S'il y a une action du navigateur qui nécessiterait plus de, disons, environ une demi-seconde de temps réel pour être servie, alors vous voudrez probablement concevoir une sorte de système qui pousse la majeure partie de cette action dans une file d'attente.

Vous devez ensuite concevoir un ou plusieurs dyno de travail hors ligne qui desservent cette file d'attente. Ils peuvent prendre beaucoup plus de temps car aucune réponse HTTP n'est en attente sur leur sortie. Peut-être que la page que vous avez rendue à partir de la demande initiale du navigateur qui a poussé l'action servira du Javascript qui démarre un thread qui vérifie si la demande s'est terminée toutes les 5 secondes, ou quelque chose dans ce sens.

Je ne peux toujours pas vous donner un ratio avec lequel travailler pour la même raison que d'autres, mais j'espère que cela vous aidera à décider comment architecturer votre application. (Je dois également mentionner qu'il ne s'agit que d'un modèle parmi de nombreux modèles valides.)

9
eblume

https://stackoverflow.com/a/19965981/1233555 - Heroku a opté pour un routage aléatoire, donc certains dynos peuvent avoir des files d'attente s'empilant (alors qu'ils servent une longue demande) tandis que d'autres dynos sont gratuits. Évitez cela en vous assurant que toutes les demandes sont traitées très rapidement dans vos dynos Web. Cela réduira le nombre de dynos Web dont vous avez besoin, tout en nécessitant plus de dynos de travailleurs.

Vous devez également vous soucier de votre application Web prenant en charge la concurrence, que seules quelques Rails configs font - essayez Unicorn, ou du code soigneusement écrit (pour les E/S qui ne bloquent pas EventMachine) avec Mince.

Vous devrez probablement essayer, plutôt que de calculer, pour voir combien de dynos de chaque type vous avez besoin. Assurez-vous que leur nouvelle relique signale la file d'attente dyno - voir le lien ci-dessus.

3
ChrisPhoenix

La réponse courte est que vous avez besoin d'autant de fichiers que nécessaire pour limiter vos files d'attente.

Comme John le décrit, si vous commencez à voir une file d'attente dans vos journaux, vous avez besoin de plus de dynos. Si vous commencez à voir vos files d'attente d'arrière-plan devenir trop longues (la façon dont vous obtenez ces informations dépend de ce que vous avez mis en œuvre), alors vous avez besoin de plus de travailleurs.

Il n'y a pas de ratio car cela dépend beaucoup de la conception et de l'utilisation de votre application.

1
Neil Middleton