Como sugiere el artículo de alto nivel sobre trabajos en segundo plano y colas, sus dynos web deberán comunicarse con sus dynos de trabajo a través de un mecanismo intermedio (a menudo una cola).
Para lograr lo que parece que espera hacer, siga este enfoque general:
- La solicitud web es recibida por el dinamómetro web
- Web Dyno agrega un trabajo a la cola
- El dinamómetro del trabajador recibe un trabajo de la cola
- Worker dyno ejecuta el trabajo, escribiendo el progreso incremental en un componente compartido
- El sondeo del lado del navegador solicita el estado del trabajo desde el dinamómetro web
- Web Dyno consulta el componente compartido para conocer el progreso del trabajo en segundo plano y envía el estado al navegador
- Worker dyno completa la ejecución del trabajo y lo marca como completo en el componente compartido
- El sondeo del lado del navegador solicita el estado del trabajo desde el dinamómetro web
- Web Dyno consulta el componente compartido para conocer el progreso del trabajo en segundo plano y envía el estado completado al navegador
En cuanto a la implementación real, no estoy muy familiarizado con las mejores bibliotecas de Node.js, pero los componentes que unen este proceso están disponibles en Heroku como complementos.
Cola:AMQP es un protocolo de cola bien soportado y el complemento CloudAMQP puede servir como la cola de mensajes entre su web y los dynos de trabajo.
Estado compartido:puede usar uno de los complementos de Postgres para compartir el estado de un trabajo que se está procesando o algo más eficaz, como Memcache o Redis.
Entonces, para resumir, debe usar un componente complementario intermedio para comunicarse entre dynos en Heroku. Si bien este enfoque implica un poco más de ingeniería, el resultado es una arquitectura escalable y desacoplada correctamente.