Ich habe eine Node.js-App mit einer kleinen Gruppe von Benutzern, die derzeit mit einem einzigen Web-Prozess aufgebaut ist. Ich denke darüber nach, einen After-Save-Trigger hinzuzufügen, der aufgerufen wird, wenn ein Datensatz zu einer meiner Tabellen hinzugefügt wird. Wenn der Trigger nach dem Speichern ausgeführt wird, möchte ich eine große Anzahl von IO-Operationen für externe APIs durchführen. Die Anzahl der IO-Operationen hängt von der Anzahl der Elemente in einer Array-Spalte im Datensatz ab. Daher könnte ich eine große Anzahl von asynchronen Operationen ausführen, nachdem jeder Datensatz in dieser bestimmten Tabelle gespeichert wurde.Wann muss ich Worker-Prozesse in Heroku verwenden?
Ich dachte daran, diese Arbeit in einen Hintergrundjob zu verschieben, wie in Worker Dynos, Background Jobs and Queueing vorgeschlagen. Der Artikel gibt als Faustregel an, dass Aufgaben, die länger als 500 ms dauern, in den Hintergrundjob verschoben werden. Aber nachdem ich das Beispiel mit RabbitMQ (Asynchronous Web-Worker Model Using RabbitMQ in Node) durchgearbeitet habe, bin ich nicht überzeugt, dass es sich lohnt, alles einzurichten.
meine Fragen sind also:
- Für eine Anwendung mit einer begrenzten Menge an gleichzeitigen Benutzern, ist es in Ordnung, eine lange Lauffunktion in einem Web-Prozess zu verlassen?
- Wenn ich schließlich beschließe, diese Arbeit an einen Hintergrundjob zu senden, scheint es nicht so schwer zu sein, meinen After-Save-Trigger zu ändern. Fehle ich etwas?
- Gibt es eine Möglichkeit, dies einfacher zu tun als eine Nachrichtenwarteschlange zu implementieren?
Wie lange läuft? Herokus Router wird eine Anfrage beenden, die mehr als 30 Sekunden dauert. https://devcenter.heroku.com/articles/request-timeout – ceejayoz
Nein, es würde definitiv nicht so lange dauern. Ich denke, es wären weniger als 10 Sekunden. – toddg
Dann, solange die Benutzer, denen die lange Anfrage entgegenkommt, nichts dagegen haben, ist es gut, das später zu veröffentlichen. – ceejayoz