Redis
 sql >> Database >  >> NoSQL >> Redis

Come comunicare i dinamici Web e Worker con Node.js su Heroku?

Come suggerisce l'articolo di alto livello sui lavori in background e l'accodamento, i tuoi banco prova web dovranno comunicare con i tuoi banco prova di lavoro tramite un meccanismo intermedio (spesso una coda).

Per realizzare ciò che sembra sperare di fare, segui questo approccio generale:

  • La richiesta web viene ricevuta dal banco prova web
  • Web dyno aggiunge un lavoro alla coda
  • Worker dyno riceve il lavoro dalla coda
  • Worker dyno esegue il lavoro, scrivendo l'avanzamento incrementale su un componente condiviso
  • Il polling lato browser richiede lo stato del lavoro dal web dyno
    • Web dyno interroga il componente condiviso per l'avanzamento del lavoro in background e invia lo stato al browser
  • Worker dyno completa l'esecuzione del lavoro e lo contrassegna come completo nel componente condiviso
  • Il polling lato browser richiede lo stato del lavoro dal web dyno
    • Web dyno interroga il componente condiviso per l'avanzamento del lavoro in background e invia lo stato completato al browser

Per quanto riguarda l'effettiva implementazione, non ho molta familiarità con le migliori librerie in Node.js, ma i componenti che uniscono questo processo sono disponibili su Heroku come componenti aggiuntivi.

Coda:AMQP è un protocollo di coda ben supportato e il componente aggiuntivo CloudAMQP può fungere da coda di messaggi tra il tuo web e il banco di prova di lavoro.

Stato condiviso:puoi utilizzare uno dei componenti aggiuntivi di Postgres per condividere lo stato di un lavoro in elaborazione o qualcosa di più performante come Memcache o Redis.

Quindi, per riassumere, devi utilizzare un componente aggiuntivo intermedio per comunicare tra i dino su Heroku. Sebbene questo approccio richieda un po' più di progettazione, il risultato è un'architettura adeguatamente disaccoppiata e scalabile.