Ogni volta che mi viene chiesto come ridimensionare un'applicazione, inevitabilmente tendo verso un modello di accodamento: suddividere le responsabilità dell'applicazione in singoli servizi e aggiungere code tra questi servizi. Ciò significa che puoi attivare più o meno istanze di un dato servizio come richiesto e semplicemente tirare dalla coda per ottenere lavoro.
Ottieni abbastanza di questi servizi con ruoli diversi e quasi inevitabilmente c'è la creazione di un livello di orchestrazione - qualcosa che capisca il flusso necessario di un oggetto di lavoro attraverso le code e lo gestisca da capo a fondo.
Quali sono alcuni degli approcci alternativi per ridimensionare le applicazioni che non utilizzano le code e finiscono con un livello di orchestrazione?
Aggiornamento basato sui commenti
Come sottolineato da @tofro, probabilmente parlerò di elasticità invece di scalabilità link .
Ecco un esempio. Diciamo che ho un servizio che fa codifica video. Un utente carica un file, seleziona uno o più formati di codifica diversi (quicktime, divx), il file viene codificato nei formati e l'utente può scaricare i file di output risultanti.
Un modo per rendere questo elastico utilizzando le code sarebbe avere diversi servizi, QuickTimeEncoder e DivXEncoder, con le code QTEQueue e DivXQueue e mettere i lavori nelle code come richiesto. È possibile aggiungere più istanze degli encoder nel corso del tempo al variare della richiesta.