Cosa devo considerare quando si prende un'applicazione (web) da pochi utenti a centinaia o migliaia? Fondamentalmente, cosa dovrei considerare quando penso di intensificare?
Cosa devo considerare quando si prende un'applicazione (web) da pochi utenti a centinaia o migliaia? Fondamentalmente, cosa dovrei considerare quando penso di intensificare?
In generale, quando parliamo di scalabilità, si tratta di passare da poche migliaia a pochi milioni o miliardi di richieste. In tal caso, la scalabilità richiede un'applicazione per lavorare su diversi server, che presenta alcuni problemi molto specifici che la scalabilità tende a risolvere.
Nel tuo caso, d'altra parte, sembra che tu debba solo far fronte all'aumento degli utenti, senza essere costretti a utilizzare diversi server invece di uno (a meno che il server corrente sia piuttosto lento, nel qual caso l'aggiornamento deve essere considerato, o il sito web ha un impatto sulle risorse del server, nel qual caso i colli di bottiglia devono essere trovati e rimossi).
Ci sono diversi punti da considerare nel tuo caso:
Usi abbastanza cache? Non dimenticare che la cache può essere implementata su più livelli, da risultati del database di cache per evitare di ripetere sempre le stesse query, cache di output per evitare di utilizzare più CPU di necessario, per memorizzazione nella cache del client , per ridurre il numero di richieste (ad esempio evitando che il client richieda lo stesso file CSS ancora e ancora ogni volta solo per ricevere ancora e ancora la risposta 304).
Usi SQL profiler? In caso contrario, è consigliabile iniziare a utilizzarne uno per assicurarsi che siano presenti nessuna query ripetitiva e per trovare quali query devono essere ottimizzate .
Usi un profiler? Il profiling dell'applicazione può mostrare dove usa troppa memoria o troppa CPU. Lavorare su quei colli di bottiglia può ridurre notevolmente il carico .
Qual è la parte più debole del tuo server? Se vedi che la RAM viene utilizzata fino al 20% mentre la CPU è utilizzata fino al 95-99% tutto il tempo, probabilmente dovresti aggiornare la CPU, ma non è necessario acquistare più RAM.
Usi il tuo server in tutta la sua estensione? Se vedi che la RAM viene utilizzata fino al 20%, perché non implementa più cache [/ strong] e usala fino al 75-85%? Se l'applicazione impiega molto tempo a interrogare i dati dal disco rigido, perché non acquistare un secondo disco rigido e utilizzarlo in RAID1 (se nel tuo caso, dato l'hardware e l'utilizzo del disco, RAID1 può fornire un accesso più rapido)?
Come viene utilizzato il server al di fuori dell'applicazione Web? In altre parole, ci sono altri processi che possono usare le risorse, e se sì, ne hai bisogno e sai cosa stanno facendo? Si applica anche ai processi pianificati. Esecuzione di un backup a 3 A.M. quando ci sono al massimo due-tre utenti sul tuo sito web va bene. Esecuzione dello stesso backup a 6 P.M. quando osservi un picco di visite sul tuo sito web non è chiaramente una buona idea .
Puoi ridurre il carico del tuo database se denormalizzi, ma dovresti eseguirne il benchmark.
Per Java è possibile ridurre lo stacksize utilizzando i parametri della JVM, perché l'amout della memoria disponibile può essere un collo di bottiglia se si hanno molti utenti concorrenti. Può anche essere interessante passare a un server basato su eventi, ad es. Netty se il server utilizza molta memoria per i servlet. Play Framework è un interessante framework web Java per Netty.
Quando usi PHP devi usare APC o Memcached per accelerare.
Dovresti anche considerare l'utilizzo di Varnish per la memorizzazione nella cache delle tue richieste.
La parte più importante della tua infrastruttura da considerare durante il ridimensionamento (ammesso che tu abbia uno stack software funzionante) è il layout fisico. Cioè hai più server web, seduto dietro load balancer? Hai server di applicazioni e db in cluster? Sei seduto su una rete dedicata isolata da dev e qa? Queste sono alcune delle cose su cui concentrarsi.
Leggi altre domande sui tag web-applications scalability