Wie der High-Level-Artikel über Hintergrundjobs und Warteschlangen andeutet, müssen Ihre Web-Dynos mit Ihren Worker-Dynos über einen Zwischenmechanismus (häufig eine Warteschlange) kommunizieren.
Um das zu erreichen, wonach Sie sich erhoffen, folgen Sie diesem allgemeinen Ansatz:
- Web-Anfrage wird vom Web-Dyno empfangen
- Web Dyno fügt der Warteschlange einen Job hinzu
- Worker dyno erhält Job aus der Warteschlange
- Worker dyno führt Job aus und schreibt inkrementellen Fortschritt in eine gemeinsam genutzte Komponente
- Browserseitiges Polling fordert den Jobstatus vom Web-Dyno an
- Web-Dyno fragt gemeinsam genutzte Komponenten nach dem Fortschritt des Hintergrundjobs ab und sendet den Status an den Browser zurück
- Worker dyno schließt die Ausführung des Jobs ab und markiert ihn in der gemeinsam genutzten Komponente als abgeschlossen
- Browserseitiges Polling fordert den Jobstatus vom Web-Dyno an
- Web-Dyno fragt gemeinsam genutzte Komponenten nach dem Fortschritt des Hintergrundjobs ab und sendet den abgeschlossenen Status zurück an den Browser
Was die tatsächliche Implementierung angeht, bin ich mit den besten Bibliotheken in Node.js nicht allzu vertraut, aber die Komponenten, die diesen Prozess zusammenhalten, sind auf Heroku als Add-Ons verfügbar.
Warteschlange:AMQP ist ein gut unterstütztes Warteschlangenprotokoll und das CloudAMQP-Add-on kann als Nachrichtenwarteschlange zwischen Ihren Web- und Worker-Dynos dienen.
Gemeinsamer Status:Sie können eines der Postgres-Add-Ons verwenden, um den Status eines verarbeiteten Jobs oder etwas Leistungsstärkeres wie Memcache oder Redis zu teilen.
Zusammenfassend müssen Sie also eine zwischengeschaltete Add-On-Komponente verwenden, um zwischen Dynos auf Heroku zu kommunizieren. Obwohl dieser Ansatz etwas mehr Technik erfordert, ist das Ergebnis eine ordnungsgemäß entkoppelte und skalierbare Architektur.