Som artiklen på højt niveau om baggrundsjob og kø antyder, skal dine webdynoer kommunikere med dine arbejderdynoer via en mellemmekanisme (ofte en kø).
For at opnå, hvad det lyder som, du håber at gøre, følg denne generelle tilgang:
- Webanmodning modtages af webdynoen
- Web-dyno tilføjer et job til køen
- Arbejdsdyno modtager job uden for køen
- Worker-dyno udfører job og skriver trinvise fremskridt til en delt komponent
- Browser-side polling anmoder om status for job fra web-dyno
- Web-dyno-forespørgsler delt komponent til fremdrift af baggrundsjob og sender tilstand tilbage til browser
- Worker-dyno afslutter udførelsen af jobbet og markerer det som komplet i delt komponent
- Browser-side polling anmoder om status for job fra web-dyno
- Web-dyno-forespørgsler delt komponent til fremdrift af baggrundsjob og sender fuldført tilstand tilbage til browseren
Hvad angår den faktiske implementering, er jeg ikke så bekendt med de bedste biblioteker i Node.js, men de komponenter, der limer denne proces sammen, er tilgængelige på Heroku som tilføjelser.
Kø:AMQP er en velunderstøttet køprotokol, og CloudAMQP-tilføjelsen kan fungere som beskedkøen mellem din web- og arbejdsdyno.
Delt tilstand:Du kan bruge en af Postgres-tilføjelserne til at dele tilstanden for et job, der behandles, eller noget mere effektivt, såsom Memcache eller Redis.
Så for at opsummere skal du bruge en mellemliggende tilføjelseskomponent til at kommunikere mellem dynos på Heroku. Selvom denne tilgang involverer lidt mere teknik, er resultatet en korrekt afkoblet og skalerbar arkitektur.