Zoals het artikel op hoog niveau over achtergrondtaken en wachtrijen suggereert, zullen uw webdyno's moeten communiceren met uw werkdyno's via een tussenliggend mechanisme (vaak een wachtrij).
Om te bereiken wat u hoopt te doen, volgt u deze algemene aanpak:
- Webverzoek is ontvangen door de webdyno
- Web dyno voegt een taak toe aan de wachtrij
- Werkgeverstestbank ontvangt taak uit de wachtrij
- Werktestbank voert taak uit en schrijft incrementele voortgang naar een gedeeld onderdeel
- Browser-side polling vraagt status van taak op van de web dyno
- Web dyno vraagt gedeelde component om voortgang van achtergrondtaak en stuurt status terug naar browser
- Werktestbank voltooit de uitvoering van de taak en markeert deze als voltooid in gedeelde component
- Browser-side polling vraagt status van taak op van de web dyno
- Web dyno vraagt gedeelde component om voortgang van achtergrondtaak en stuurt voltooide status terug naar browser
Wat de daadwerkelijke implementatie betreft, ben ik niet zo bekend met de beste bibliotheken in Node.js, maar de componenten die dit proces aan elkaar lijmen, zijn beschikbaar op Heroku als add-ons.
Wachtrij:AMQP is een goed ondersteund wachtrijprotocol en de CloudAMQP-add-on kan dienen als de berichtenwachtrij tussen uw web- en werkdyno's.
Gedeelde status:u kunt een van de Postgres-add-ons gebruiken om de status te delen van een taak die wordt verwerkt of iets dat beter presteert, zoals Memcache of Redis.
Dus, om samen te vatten, je moet een tussenliggende add-on-component gebruiken om te communiceren tussen dyno's op Heroku. Hoewel deze aanpak wat meer engineering vereist, is het resultaat een goed ontkoppelde en schaalbare architectuur.