Sto provando a progettare un'app Web con capacità di scalabilità, ma non riesco a spiegarmi alcuni concetti. Voglio progettarlo correttamente ma non sono un programmatore esperto, ho più esperienza di ingegneria di sistema.
L'architettura di base ha questo aspetto:
Server Web - > Server di elaborazione file - > NoSQL DB - > Cerca server
Quindi lo scenario principale è il seguente:
- L'utente carica un file tramite il sito
- Il file viene inviato per l'elaborazione su un server (script python)
- I risultati dell'elaborazione vengono inviati al DB NoSQL
- Risultati elaborati dal server di ricerca e restituiti all'utente
Possiamo scalare i frontend in web tramite il bilanciamento del carico. Qualcosa come nginx + apache.
Il ridimensionamento del database si sta prendendo cura di Cassandra o MongoDB. Il ridimensionamento della ricerca si sta prendendo cura di elasticsearch o sphinx clustering.
Ora voglio essere in grado di aggiungere più server di elaborazione file nel caso in cui il file caricato sia troppo grande. Quindi ho bisogno di dividere in qualche modo il file in blocchi e processarlo simultaneamente su più nodi più se il nodo si interrompe mentre funziona non dovrebbe influenzare nulla e i dati devono essere salvati. Quindi ho bisogno di qualcos'altro che assegnerà compiti ai miei server di elaborazione file, bilanciamento del carico e controllo dell'esecuzione delle attività.
Come progettare applicazioni personalizzate per quel tipo di cose? Dovrei usare la coda dei messaggi?