In modo semplificato la mia applicazione Java può essere descritta come segue:Come rendere la mia applicazione Java scalabile e tollerante ai guasti?
Si tratta di un'applicazione Web in esecuzione su un server Tomcat con un'interfaccia SOAP. L'applicazione utilizza JPA/Hibernate per archiviare i dati in un database MySQL. I dati memorizzati sono costituiti da un elenco di utenti, un elenco di host e un elenco di URI che puntano a file enormi (10 GB) nel filesystem. L'intero sistema è costituito da un server centrale, su cui è in esecuzione la mia applicazione e un gruppo di host worker. Un utente può connettersi all'interfaccia SOAP e chiedere al sistema di copiare i file che appartengono a lui in uno specifico host di lavoro, dove può quindi analizzare i dati in qualche modo (non possiamo usare NFS, abbiamo bisogno di copiare i dati nel archiviazione locale del disco di un host worker). Il database quindi memorizza per ciascun utente su cui il lavoratore ospita i suoi file sono memorizzati.
Al momento il sistema è in esecuzione con un server centrale con l'applicazione Tomcat e il database MySQL e 10 host worker e circa 30 utenti con 100 file (in media 10 GB) di dimensioni memorizzati distribuiti sugli host worker.
Ma in futuro devo ridimensionare il sistema di un fattore di 100-1000. Quindi dovrei avere a che fare con 10000 utenti, 100000 file e 10000 host. E il sistema dovrebbe anche diventare a prova di errore, quindi non ho un singolo server centrale (che è il singolo punto di errore nel sistema ora), ma forse diversi. Inoltre, se uno degli host worker non funziona, il sistema dovrebbe essere avvisato, quindi non tenta di copiare i file su quel server.
La mia domanda è ora: quali tecnologie Java posso utilizzare per rendere la mia applicazione scalabile e tollerante ai guasti? Che tipo di architettura consiglieresti? Dovrei avere ancora un enorme database che memorizza tutte le informazioni su tutti i file, gli host e gli utenti nel sistema in un unico posto, o dovrei distribuire meglio il mio database su diversi host e sincronizzarli in qualche modo?