Sto lavorando ad un'applicazione web, che storicamente è stata costruita su uno stack PHP/MySQL.L'utilizzo di server Web di stato ha senso?
Una delle operazioni chiave dell'applicazione doveva eseguire alcuni calcoli pesanti che richiedevano l'iterazione su ogni riga di un'intera tabella DB. Inutile dire che questo è stato un serio collo di bottiglia. Quindi è stata presa una decisione per riscrivere l'intero processo in Java.
Questo ci ha dato due vantaggi. Uno era che Java, come linguaggio, era molto più veloce di un processo PHP. Il secondo era che potevamo mantenere l'intero set di dati nella memoria del server delle applicazioni Java. Così ora possiamo fare le operazioni pesanti di calcolo in memoria, e tutto accade molto più velocemente.
Questo ha funzionato per un po ', fino a quando non ci siamo resi conto che abbiamo bisogno di ridimensionare, quindi ora abbiamo bisogno di più server web.
Il problema è che, con la progettazione attuale, tutti devono mantenere lo stesso identico stato. Tutti interrogano il DB, elaborano i dati e li mantengono in memoria. Ma cosa succede quando è necessario modificare questi dati? In che modo tutti i server mantengono la coerenza?
Questa architettura mi sembra imperfetta. Il beneficio delle prestazioni dal tenere tutti i dati in memoria è ovvio, ma questo ostacola seriamente la scalabilità.
Quali sono le opzioni da qui? Passare a una memoria, valore-chiave, archivio dati? Dovremmo rinunciare completamente allo stato di attesa all'interno dei server web?
+1 per il grano della verità. – duffymo