Tecnologia (cellulari, computer...)
Ottimizzazione del sito terminata
Scritto da Davide - Pubblicato 21/10/2005 13:57
I lavori di ottimizzazione di Motoclub-Tingavert.it per ridurre il carico al server sono terminati, con qualche bug qua e là che è stato segnalato prontamente dagli utenti. Ecco la descrizione del problema e dei (piccoli) cambiamenti rilevabili dal lato utente.

Il Problema...

Tutto ebbe inizio il pomeriggio 29 di settembre 2005, giorno nel quale il servizio assistenza della società di hosting che ospita il Motoclub-Tingavert.it ci sospese per diversi minuti l'account in quanto utilizzavamo troppe risorse del server e ne provocavamo il blocco (notare che da qualche giorno ero soddisfatto perché finalmente avevo terminato alcuni lavori lunghi, impegnativi e importanti di programmazione e organizzazione del sito e mi stavo preparando psicologicamente a fare altri lavoretti in sospeso da diverse settimane...). Avevamo quindi iniziato a discutere del problema in questo topic.

Il nostro sito è stato realizzato inizialmente con un programma di CMS (Content Management System = Sistema di Gestione dei Contenuti) che si chiama PHP-Nuke, sistema molto bello e personalizzabile che però ha il difetto di effettuare molte chiamate al database (in gergo tecnico query), cioè in definitiva di utilizzare molte risorse del server. Questo problema si riscontra quando il numero di utenti diventa elevato ed è quindi il nostro caso.

Inoltre, con la creazione dei subforums, il codice per la visualizzazione di alcune pagine era diventato leggermente più oneroso per il server.

In aggiunta, sul server che ospita il nostro dominio era presente un altro sito che quando raggiungeva circa i 22 utenti online effettuava talmente tante chiamate al database che ne provocava il crash e conseguente blocco del server (come è avvenuto l'ultima volta mercoledì di questa settimana)

Infine, in quel pomeriggio era anche in corso un'operazione di backup del nostro database (il database è il contenitore di tutti i dati aggiornabili del sito, cioè i messaggi del forum, gli articoli del sito, i dati degli utenti eccetera) e questo sommato a quanto descritto in precedenza ci elencava come possibili responsabili o corresponsabili del blocco del server. Il backup del database fu tolto immediatamente e ora viene effettuato soltanto di notte, a orari programmati, e non più al pomeriggio.

Personalmente credo che il blocco vero e proprio del server non fosse dovuto a noi ma comunque l'utilizzo che facevamo del database era eccessivo e quindi era necessario correre ai ripari, non tanto per il problema attuale che si sarebbe potuto risolvere prendendo un server dedicato (cioè tutto per noi) o un VPS (server dedicato virtuale) ma perché non saremmo potuti crescere ancora più di tanto perché con un tot di visitatori in più la CPU sarebbe stato il "collo di bottiglia".



...la soluzione...

La soluzione che si prospettava era... di esaminare riga per riga e riprogrammare gran parte del codice del sito in modo che durante l'esecuzione dei programmi le chiamate al database fossero il minor numero possibile, strada che sinceramente prima di pensarci non sapevo nemmeno dove ci avrebbe portato.

Tanto per capire, nel momento in cui un utente richiedeva una pagina del forum (o del sito), il programma PHP-Nuke, oltre alle chiamate indispensabili, eseguiva anche le seguenti chiamate al database per:

  • rilevare i dati di configurazione del sito (e-mail amministratore, tema di default ecc.)
  • scrivere il titolo della pagina
  • calcolare il numero di utenti online
  • visualizzare i blocchi di navigazione attivati dall'amministratore del sito
  • visualizzare gli ultimi 6 titoli di messaggi del forum, sul box a sinistra
  • visualizzare il numero di utenti in chat (quando c'era)
  • rilevare i moderatori dei vari forum
  • incrementare il contatore delle visualizzazioni del forum
  • incrementare il contatore delle pagine
  • ... e tante, ma tante, altre chiamate.

L'ottimizzazione è quindi consistita in una prima fase molto semplice di eliminazione di alcune cose che anche se erano utili non erano indispensabili (contatore delle pagine - cambio della chat - numero di visualizzazioni delle letture dei topic ecc.) e in una seconda fase di staticizzazione dei contenuti. Cioè, dato che la configurazione del forum è sempre la stessa finché non viene variata dall'amministratore, che bisogno c'è di caricarla ogni volta dal database? Ora viene quindi generato un file sul quale sono contenuti tutti i dati statici del sito e, quando li vario, con un pulsante rigenero il file.
La terza fase riguarda la generazione dei contenuti semistatici, cioè quei contenuti che variano continuamente ma se vengono salvati ogni tot minuti in un file e visualizzati "vecchi" di questi tot minuti non succede nulla (ad esempio, il numero di utenti online, il numero totale di msg del forum).

Perciò, la parte più consistente di modifica del codice del sito ha riguardato l'eliminazione delle query (cioè delle chiamate al database) inutili portando i contenuti generati in un file statico e in un file semistatico, quest'ultimo con aggiornamento che attualmente avviene una volta al minuto.



Cosa è cambiato in sostanza per l'utente?

Tutte le query il cui risultato è stato riportato nel file statico sono assolutamente trasparenti per l'utente che quindi all'esterno non vede nessuna variazione rispetto a prima.

Quello che invece si può notare è che:

  • la chat è stata spostata su IRC, il canale è #tingavert
  • il numero di consultazioni nei topic è scomparso
  • il nome dei moderatori dei forum viene riportato ma è assente il link
  • sono state tolte le statistiche delle pagine viste del sito
  • quando si scrive un messaggio nel forum, il codice dello smilie viene immediatamente convertito nel codice HTML dell'immagine
  • gli utenti bannati possono ora accedere in visualizzazione del forum ma compare il messaggio di ban quando cercano di postare un nuovo messaggio oppure di inviare un MP (prima l'utente bannato non poteva nemmeno visualizzare il forum): credo che questo tipo di funzionamento sia più giusto come è ora e non come era prima.
  • il numero di utenti online viene aggiornato una volta al minuto
  • il numero di messaggi totali de forum visualizzato in basso, nell'indice del forum, viene aggiornato una volta al minuto
  • i titoli degli ultimi 6 messaggi dei forum nel box a sinistra di qualsiasi pagina vengono aggiornati una volta al minuto

Credo che si potrà concordare che le variazioni non sono state stravolgenti per l'utente mentre sono state stravolgenti per la quantità di utilizzo della CPU.


Conclusioni

Oggi 21 ottobre il lavoro è stato ultimato, credo che tutto ciò che si poteva ottimizzare sia stato ottimizzato e se rimane qualcosa non è certo quello che causerà o risolverà un eventuale problema di eccessivo carico del server, almeno dal punto di vista della CPU. Inoltre, l'altro sito che ultimamente ne causava frequentemente il blocco, sta cambiando server quindi i presupposti ci sono tutti per tornare a godere stabilità e velocità di navigazione; questa almeno è la mia speranza.

La velocità di esecuzione dello script (che non coincide con la velocità di visualizzazione della pagina in quanto questa può anche dipendere dalla rete) è consultabile guardando il tempo di "Generazione pagina" che si trova in fondo ad ogni pagina; attualmente, a server scarico, per generare la home page bastano 2 centesimi di secondo, quello dovrebbe essere il tempo che la CPU ci dedica quando richiediamo la home page; le altre pagine impiegano un po' di più e comunque stiamo intorno ai 9 centesimi per la visualizzazione dei topic del forum, sempre in condizioni di server scarico; credo che siano tempi bassi che confermino i buoni risultati.

E' stato un lavoro veramente lungo e altrettanto impegnativo dal punto di vista cerebrale ;-) , alla fine sono contento di averlo fatto perché mi ha permesso di esaminare in dettaglio e comprendere bene il funzionamento di quasi tutto il codice del sito, ciò mi sarà d'aiuto quando ci saranno da fare aggiunte di nuove funzioni o modifiche.
Un grande ringraziamento agli utenti che ogni volta mi hanno segnalato i vari bug, cioè gli errori che inevitabilmente si commettono in corso d'opera e che causano malfunzionamenti nella visualizzazione di qualche pagina o in qualche funzione; il topic nel quale si possono segnalare le anomalie è il seguente: Modifica codice del sito - Segnalate eventuali anomalie!

Ora abbiamo un sito veloce e snello... talmente veloce e snello che siamo sicuri che sia adatto a dei motociclisti mangiatori e delle motocicliste mangiatrici del nostro calibro?

Saluti!
Davide

 

Commenti degli Utenti (totali: 4)
Login/Crea Account



I commenti sono di proprietà dell'inserzionista. Noi non siamo responsabili per il loro contenuto.

Commenti NON Abilitati per gli utenti non registrati
Commento di: Simon il 21-10-2005 14:33
grande Davide, grazie per tutto quello che fai per darci un Super Forum ;-)
Commento di: Davide il 21-10-2005 14:38
;-) Dovere!
Commento di: vetro il 21-10-2005 15:31
Grandissimo!
Commento di: MjM il 22-10-2005 08:56
davide4president