Como sugere o artigo de alto nível sobre trabalhos em segundo plano e enfileiramento, seus dinamômetros da Web precisarão se comunicar com seus dinamômetros de trabalho por meio de um mecanismo intermediário (geralmente uma fila).
Para realizar o que parece que você espera fazer, siga esta abordagem geral:
- A solicitação da Web é recebida pelo dinamômetro da Web
- O Web dyno adiciona um trabalho à fila
- Dyno do trabalhador recebe o trabalho fora da fila
- O Worker dyno executa o trabalho, gravando o progresso incremental em um componente compartilhado
- A pesquisa do lado do navegador solicita o status do job do dyno da Web
- O Web dyno consulta o componente compartilhado para o progresso do trabalho em segundo plano e envia o estado de volta ao navegador
- O Worker dyno conclui a execução do job e o marca como concluído no componente compartilhado
- A pesquisa do lado do navegador solicita o status do job do dyno da Web
- O Web dyno consulta o componente compartilhado para o progresso do trabalho em segundo plano e envia o estado concluído de volta ao navegador
No que diz respeito à implementação real, não estou muito familiarizado com as melhores bibliotecas do Node.js, mas os componentes que unem esse processo estão disponíveis no Heroku como complementos.
Fila:AMQP é um protocolo de fila bem suportado e o complemento CloudAMQP pode servir como a fila de mensagens entre seus dynos da Web e do trabalhador.
Estado compartilhado:você pode usar um dos complementos do Postgres para compartilhar o estado de um trabalho que está sendo processado ou algo com melhor desempenho, como Memcache ou Redis.
Portanto, para resumir, você deve usar um componente complementar intermediário para se comunicar entre os dynos no Heroku. Embora essa abordagem envolva um pouco mais de engenharia, o resultado é uma arquitetura adequadamente desacoplada e escalável.