Ich war neugierig, was der Unterschied zwischen Web- und Worker-Dynos bei Heroku ist. Sie geben auf ihrer Preisseite eine Erklärung mit einem Satz, aber das hat mich nur verwirrt. Woher weiß ich, wie viele ich jeweils auswählen soll? Gibt es ein Verhältnis, das ich anstreben sollte? Ich bin ziemlich neu in diesem Bereich. Kann jemand eine ausführliche Erklärung geben oder auf irgendeine Weise berechnen, wie viele und welche Dynos ich benötigen würde?
Außerdem bin ich verwirrt darüber, was sie mit der Anzahl der Stunden für jeden Prüfstand bedeuten.
Ich bin auch auf diesen Artikel gestoßen. Als eine ihrer vorgeschlagenen Lösungen sagten sie, die Anzahl der Dynos zu erhöhen. Auf welche Art von Prüfstand beziehen sie sich hier?
quelle
heroku logs -p router --tail
log-runtime-metrics
. Führen Sie dazu den folgenden Befehl aus :heroku labs:enable log-runtime-metrics
. Lesen Sie hier mehr: devcenter.heroku.com/articles/log-runtime-metricsDynos sind im Grunde Prozesse, die auf Ihrer Instanz ausgeführt werden. Mit dem neuen Cedar-Stack können sie so eingerichtet werden, dass sie einen beliebigen Shell-Befehl ausführen. Für Webanwendungen haben Sie im Allgemeinen einen Prozess namens "Web", der für die Beantwortung von HTTP-Anfragen von Benutzern verantwortlich ist. Alle anderen Prozesse wurden früher als "Arbeiter" bezeichnet. Diese werden kontinuierlich im Hintergrund ausgeführt, z. B. für Cron, Verarbeitungswarteschlangen und umfangreiche Berechnungen, bei denen Sie Ihre Webprozesse nicht binden möchten. Sie können auch jeden Prozesstyp skalieren, sodass mehrere Prozesse jedes Typs für zusätzliche Parallelität gestartet werden. Die Menge, die Sie verwenden, hängt wirklich von den Anforderungen Ihrer Anwendung und der empfangenen Last ab. Sie können Tools wie das New Relic-Plugin verwenden, um diese Dinge zu überwachen.
quelle
Eine Reihe von Personen hat erwähnt, dass kein Verhältnis bekannt ist und dass das Verhältnis von Web-Workern zu Hintergrund-Workern, das Sie möchten, davon abhängt, wie Sie Ihre Anwendung entworfen haben - das ist richtig. Ich dachte jedoch, es könnte nützlich sein, hinzuzufügen, dass Sie als allgemeine Faustregel möchten, dass Ihre Web-Worker - und damit die Controller-Aktionen, die sie ausführen - blitzschnell und sehr leicht sind, um die Latenz in den Antwortzeiten von Browser-Aktionen zu verringern. Wenn es eine Browseraktion gibt, für deren Bereitstellung mehr als beispielsweise eine halbe Sekunde Echtzeit erforderlich ist, möchten Sie wahrscheinlich eine Art System entwickeln, das den Großteil dieser Aktion in eine Warteschlange stellt.
Sie würden dann einen oder mehrere Offline-Worker-Dynos entwerfen, die diese Warteschlange bedienen. Sie können viel länger dauern, da für ihre Ausgabe keine HTTP-Antworten anstehen. Möglicherweise wird auf der Seite, die Sie von der ersten Browseranforderung gerendert haben, die die Aktion ausgelöst hat, Javascript bereitgestellt, das einen Thread startet, der überprüft, ob die Anforderung alle 5 Sekunden abgeschlossen wurde, oder etwas in dieser Richtung.
Ich kann Ihnen immer noch kein Verhältnis geben, mit dem Sie aus dem gleichen Grund arbeiten können, den andere angegeben haben, aber hoffentlich hilft Ihnen dies bei der Entscheidung, wie Sie Ihre App entwerfen. (Ich sollte auch erwähnen, dass dies nur ein Design von vielen gültigen ist.)
quelle
https://stackoverflow.com/a/19965981/1233555 - Heroku hat ein zufälliges Routing durchgeführt, sodass bei einigen Dynos Warteschlangen gestapelt werden können (während sie eine lange Anfrage bedienen), während andere Dynos frei sind. Vermeiden Sie dies, indem Sie sicherstellen, dass alle Anforderungen in Ihren Webdynos sehr schnell bearbeitet werden. Dadurch wird die Anzahl der benötigten Web-Dynos reduziert, während mehr Worker-Dynos erforderlich sind.
Sie müssen sich auch darum kümmern, dass Ihre Web-App Parallelität unterstützt, was nur einige Rails-Konfigurationen tun - versuchen Sie es mit Unicorn oder sorgfältig geschriebenem Code (für E / A, die die EventMachine nicht blockiert) mit Thin.
Sie müssen wahrscheinlich versuchen, anstatt zu berechnen, um zu sehen, wie viele Dynos jeder Art Sie benötigen. Stellen Sie sicher, dass ihr neues Relikt die Dyno-Warteschlange meldet - siehe den obigen Link.
quelle
Die kurze Antwort lautet, dass Sie so viele benötigen, wie Sie benötigen, um Ihre Warteschlangen niedrig zu halten.
Wie John beschreibt, benötigen Sie mehr Dynos, wenn Sie eine Warteschlange in Ihren Protokollen sehen. Wenn Ihre Hintergrundwarteschlangen zu lang werden (wie Sie diese Informationen erhalten, hängt davon ab, was Sie implementiert haben), benötigen Sie mehr Mitarbeiter.
Es gibt kein Verhältnis, da es sehr stark von Ihrem Anwendungsdesign und Ihrer Verwendung abhängt.
quelle
heroku logs -f
Befehlszeile verwenden.