Jak naznačuje článek na vysoké úrovni o úlohách na pozadí a řazení do front, váš webový dynos bude muset komunikovat s vaším pracovním dynos prostřednictvím zprostředkujícího mechanismu (často fronty).
Chcete-li dosáhnout toho, co zní, jako byste doufali, postupujte podle tohoto obecného přístupu:
- Webový požadavek přijímá webový dyno
- Web dyno přidá úlohu do fronty
- Worker dyno obdrží úlohu mimo frontu
- Worker dyno provede úlohu a zapíše přírůstkový postup do sdílené komponenty
- Dotazování na straně prohlížeče požaduje stav úlohy z webového dyno
- Web dyno se dotazuje sdílené komponenty na průběh úlohy na pozadí a odešle stav zpět do prohlížeče
- Worker dyno dokončí provádění úlohy a označí ji jako dokončenou ve sdílené komponentě
- Dotazování na straně prohlížeče požaduje stav úlohy z webového dyno
- Web dyno se dotazuje na sdílenou komponentu pro průběh úlohy na pozadí a odešle dokončený stav zpět do prohlížeče
Pokud jde o skutečnou implementaci, nejsem příliš obeznámen s nejlepšími knihovnami v Node.js, ale komponenty, které spojují tento proces dohromady, jsou k dispozici na Heroku jako doplňky.
Fronta:AMQP je dobře podporovaný protokol fronty a doplněk CloudAMQP může sloužit jako fronta zpráv mezi vaším webem a pracovním dynos.
Sdílený stav:Ke sdílení stavu zpracovávané úlohy nebo něčeho výkonnějšího, jako je Memcache nebo Redis, můžete použít jeden z doplňků Postgres.
Abychom to shrnuli, musíte použít přechodnou doplňkovou komponentu pro komunikaci mezi dynos na Heroku. I když tento přístup vyžaduje trochu více inženýrství, výsledkem je správně oddělená a škálovatelná architektura.