バックグラウンドジョブとキューイングに関する高レベルの記事が示唆しているように、Webダイノは中間メカニズム(多くの場合キュー)を介してワーカーダイノと通信する必要があります。
あなたがやりたいと思っていることを達成するために、この一般的なアプローチに従ってください:
- WebリクエストはWebdynoによって受信されます
- Webdynoはキューにジョブを追加します
- ワーカーdynoがキューからジョブを受け取ります
- ワーカーdynoはジョブを実行し、共有コンポーネントに増分進行状況を書き込みます
- ブラウザ側のポーリングは、Webdynoからジョブのステータスを要求します
- Web dynoは、共有コンポーネントにバックグラウンドジョブの進行状況を照会し、状態をブラウザに送り返します
- ワーカーdynoはジョブの実行を完了し、共有コンポーネントで完了としてマークします
- ブラウザ側のポーリングは、Webdynoからジョブのステータスを要求します
- Web dynoは、共有コンポーネントにバックグラウンドジョブの進行状況を照会し、完了した状態をブラウザーに送り返します
実際の実装に関しては、Node.jsの最高のライブラリについてはあまり詳しくありませんが、このプロセスを結合するコンポーネントは、Herokuでアドオンとして利用できます。
キュー:AMQPは十分にサポートされているキュープロトコルであり、CloudAMQPアドオンはWebとワーカーダイノ間のメッセージキューとして機能できます。
共有状態:Postgresアドオンの1つを使用して、処理中のジョブの状態、またはMemcacheやRedisなどのよりパフォーマンスの高いものを共有できます。
したがって、要約すると、Heroku上のdyno間で通信するには、中間アドオンコンポーネントを使用する必要があります。このアプローチにはもう少しエンジニアリングが必要ですが、その結果、適切に分離されたスケーラブルなアーキテクチャになります。