OVH Community, your new community space.

Ottimizzazione forum vbullettin con 1000 utenti


sirhaplo
27.09.2012, 11.05
Appunto tutte le mod_* di apache erano le cose ci hanno fatto passare da lighttpd ad apache.
Poi in effetti non le abbiamo mai usato, a parte le classiche che cmq hanno un'alernativa.

Quindi per ora direi che sono soddisfatto.
Nginx non lo conosco per nulla e spero nel tempo di configurarlo a dovere.
Per il momento : velocità aumentata, carico server diminuito, funzioni del sito invariate. Quindi direi : yeah

raffo
26.09.2012, 21.45
hai fatto benissimo!
pero nginx non ha mod_security e altre mods molto utili per la scurezza e la personalizzazione del webserver. In compenso Nginx è molto veloce nel gestire le richieste e gode di un buon gestore cache, spero lo starai usando nel modo opportuno.

sirhaplo
26.09.2012, 20.26
Ciao a tutti.
Vi volevo aggiornare sulla situazione.

Dopo aver settato per bene apache siamo arrivati ad avere 750 worker in uso in contemporanea.
Peccato che il nostro quad core non ce la facesse a reggere quel carico.

Cosi ho provato varnish. Prima di tutto ho dovuto aggiornare da ubuntu 10.04 al 12.04 per delle dipendenze dell'ultima versione di varnish.
Ma è giusto, era un lavoro che dovevo fare.
Poi però mi sono trovato spiazzato nelle varie guide. E' veramente molto complicato, a quanto pare c'è una configurazione di varnish strettamente legata al tipo di sito che si ha e poi c'è una configurazione del sito stesso per lavorare in coppia con varnish.
I tutorial che ho letto erano un pò vecchi e con errori, quindi ho chiuso il capitolo varnish senza vedere i risultati.

Cosi ho preso il coraggio a 2 mani e ho smontato tutto quello che avevo fatto su apache, e sono passato a nginx.
Invece della configurazione mista apache + nginx, mi sono limitato solo a nginx.
Per php ho utilizzato php5-fpm, un gestore di fastcgi che gira come demone e serve tutte le richieste che gli arrivano sulla porta 9000.
Dalla configurazione di apache2 ho mantenuto memchached ( che mi alleggerisce mysql)
In più ho aggiunto php-apc, che dovrebbe precompilare i file php in bytecode.

Il risultato finale è :
Nginx
Php5-fpm
Php5-apc
memchached

E tutto gira velocissimo...

Tutto seguendo questo semplice post : http://askubuntu.com/questions/9357/...esql/9407#9407
Lasciando perdere la parte postgres

In futuro proverò di nuovo con varnish.

Grazie a tutti.

raffo
18.09.2012, 12.10
Citazione Originariamente Scritto da sirhaplo
Qui mi cogli impreparato. Intendi nginx SOLO su ip pubblico che rigira sul locale le chiamate php ad apche che gira SOLO sul 127.0.0.1 ?
Esatto, cosi è più "ordinato" anche se poi basta scrivere delle regole iptables per non far accedere da esterno su apache in porta 81.

sirhaplo
18.09.2012, 11.34
Citazione Originariamente Scritto da raffo
Ti consiglio di mettere apache su localhost (127.0.0.1) e nginx su ip failover. configure rpaf per far riconoscere ad apache gli ip dei client che reindirizza nginx e non avrai problemi di cookie.

Lighttpd è molto più leggero di apache, se lo configuri bene va tranquillo.
Qui mi cogli impreparato. Intendi nginx SOLO su ip pubblico che rigira sul locale le chiamate php ad apche che gira SOLO sul 127.0.0.1 ?

raffo
14.09.2012, 17.33
Forse fatstcgi dava problemi probabilmente per via dei limiti un po rigidi e quindi al raggiungimento di questi, riportava errore 503.

MnEm0nIc
14.09.2012, 14.17
Citazione Originariamente Scritto da sirhaplo
Fastcgi mi ha dato un pò di problemi al livello di cpu.
strano, di solito si usa fastcgi proprio perche' si ha la possibilita' di ottimizzare meglio l'utilizzo delle risorse...

per il resto potresti dividere frontend suddividendo il carico su piu' macchine relativamente poco potenti (anche 2gb di ram ognuna) e lasciare mysql sulla macchina attuale, cercando di ottimizzarne al massimo la configurazione.

raffo
14.09.2012, 12.12
Fastcgi mi ha dato un pò di problemi al livello di cpu. E comunque questo discorso frontend / backend lo si fa mettendoli su porte diverse, giusto ? E qui mi nascono i problemi di cookie / ajax etc.
Ti consiglio di mettere apache su localhost (127.0.0.1) e nginx su ip failover. configure rpaf per far riconoscere ad apache gli ip dei client che reindirizza nginx e non avrai problemi di cookie.

Lighttpd è molto più leggero di apache, se lo configuri bene va tranquillo.

sirhaplo
14.09.2012, 10.18
Citazione Originariamente Scritto da raffo
io userei Nginx in frontend configurando bene la cache su determinate zone con un tempo di refresh basso, limitando richeste e connessioni per ogni IP, limitare richieste pericolose (quindi accettare solo metodi http GET, HEAD e POST), limitare l'accesso solo a richieste con un user agent e i files statici servirli automaticamente con nginx.

per quanto riguarda il backend lascerei apache con itk invece di prefork o worker.
userei fastcgi e vbulletin lo ottimizzerei con vbseo e memcached.
Fastcgi mi ha dato un pò di problemi al livello di cpu. E comunque questo discorso frontend / backend lo si fa mettendoli su porte diverse, giusto ? E qui mi nascono i problemi di cookie / ajax etc.

Invece, se vuoi provare qualcosa di molto semplice ma allo stesso modo efficace ti consiglio Lighttpd che è un intermezzo tra nginx e apache, la versione che si trova nei repository è stabile e funzionante ma le nuove funzioni della versione 1.5 che è ancora in beta sono molto interessanti, comunque vale la pena provarlo come prima opzione.
Ne vengo da Lighttpd. Sono passato ad apache per vedere se era più ottimizzabile.

Poi andrebbe ottimizzato sopratutto mysql usando la cache in ram perchè il tempo di eseguzione di una richiesta http in un forum sta al 80% nella velocità del database.
Un'altra soluzione è quella di prendere un server con dischi SSD e configurare li il server mysql
Questo penso sarà il prossimo passo. Il DB è già su SSD, cosi come tutti i php. Mentre le immagini sono su un disco classico.

Un'altra soluzione interessante sarebbe quella di distribuire il carico su più server, qui puoi usare il miniCloud di ovh creando una directory condivisa in NFS tra server centrale e VM cloud e configurare fastcgi nella VM, in questo modo puoi far processare php alle VM che si collegano al server centrale per leggere i files php e sono totalmente indipendenti da incidenti, significa che se si spengono o vanno in overload non si perdono dati salvati perchè è tutto centralizzato nel server principale e l'ip della VM (che cambia ogni volta si accende o spegne) non viene mostrato pubblicamente e quindi all'utente sarà tutto trasparente, l'unica cosa che cambia è che alcune richieste (o una % o un tipo di richieste oppure solo quelle di una determinata patch quindi categoria del forum o chat (quest'ultima pesa molto) o altro, potrai scegliere quale cluster (ovvero coppia di VM cloud) far usare per alleviare il carico del server centrale che puoi usare come frontend e come server file e mysql.
Per ora è presto. Abbiamo appena preso questo server singolo, anche per una questione di costi

Grazie per le dritte.
Vedrò di lavorare un pò su nginx e mysql

raffo
12.09.2012, 17.48
io userei Nginx in frontend configurando bene la cache su determinate zone con un tempo di refresh basso, limitando richeste e connessioni per ogni IP, limitare richieste pericolose (quindi accettare solo metodi http GET, HEAD e POST), limitare l'accesso solo a richieste con un user agent e i files statici servirli automaticamente con nginx.

per quanto riguarda il backend lascerei apache con itk invece di prefork o worker.
userei fastcgi e vbulletin lo ottimizzerei con vbseo e memcached.

Invece, se vuoi provare qualcosa di molto semplice ma allo stesso modo efficace ti consiglio Lighttpd che è un intermezzo tra nginx e apache, la versione che si trova nei repository è stabile e funzionante ma le nuove funzioni della versione 1.5 che è ancora in beta sono molto interessanti, comunque vale la pena provarlo come prima opzione.

Poi andrebbe ottimizzato sopratutto mysql usando la cache in ram perchè il tempo di eseguzione di una richiesta http in un forum sta al 80% nella velocità del database.

Un'altra soluzione interessante sarebbe quella di distribuire il carico su più server, qui puoi usare il miniCloud di ovh creando una directory condivisa in NFS tra server centrale e VM cloud e configurare fastcgi nella VM, in questo modo puoi far processare php alle VM che si collegano al server centrale per leggere i files php e sono totalmente indipendenti da incidenti, significa che se si spengono o vanno in overload non si perdono dati salvati perchè è tutto centralizzato nel server principale e l'ip della VM (che cambia ogni volta si accende o spegne) non viene mostrato pubblicamente e quindi all'utente sarà tutto trasparente, l'unica cosa che cambia è che alcune richieste (o una % o un tipo di richieste oppure solo quelle di una determinata patch quindi categoria del forum o chat (quest'ultima pesa molto) o altro, potrai scegliere quale cluster (ovvero coppia di VM cloud) far usare per alleviare il carico del server centrale che puoi usare come frontend e come server file e mysql.

Un'altra soluzione è quella di prendere un server con dischi SSD e configurare li il server mysql

Insomma, ci si puo sbizzarrire infinitamente, basta pensare come si vuole organizzare il carico pensando a future integrazioni e quindi predisponendo la configurazioni a futuri cambiamenti, nel caso il forum diventa molto imponente o nel caso si pensa al risparmio.. tutto cambia.

MnEm0nIc
12.09.2012, 09.49
non conosco bene vbulletin a livello sistemistico, quindi i miei consigli sono generali:
  • potresti passare da apache + mod_php a nginx + php-fastcgi perche':
    solitamente con php in fastcgi si riescono a fare ottimizzazioni migliori delle risorse
    nginx serve piu' velocemente file statici ed a parita' di richieste consuma meno RAM
  • potresti utilizzare Varnish "davanti" al webserver in modo da sfruttare le cache, facendo attenzione a come fare le regole per evitare di trovarti con roba vecchia in home page
  • potresti far servire i contenuti statici da una CDN come cloudflare, iniziando dal pacchetto gratuito

da una rapidissima ricerca ho trovato dei link che potrebbero esserti utili:
https://www.vbulletin.com/forum/entr...itespeed-Cache
http://www.vbulletin.com/forum/entry...vanced-Caching
https://www.vbulletin.com/forum/show...h-cache-server

ciao

sirhaplo
12.09.2012, 08.27
Ciao a tutti,
scrivo questo post dopo essere riuscito a sistemare un problema grazie all'aiuto del forum.

Riassumendo il discorso dell'altro post :
Ho un forum vBullettin con picchi di 1200 utenti contemporanei (492° nella lista italiana di Alexa).
Il forum è un contenitore di immagini. In ogni post vengono allegate decine di immagini e poi la gente commenta.
Per fare un esempio la home, in cui si riepilogano le ultime foto, fa 233 rischieste a risorse varie (senza contare la cache del browser)

La struttura per il momento è il classico LAMP. Con eAccelerator per php e memcache per alleggerire mysql.
La mia folle idea che però si è un pò arenata era quella di abbinare due server web su :80 e :81. Sulla :80 mettere ngnix e per i file php rigirare la rchiesta ala :81 dietro cui sta apache con il mod_php5.
L'idea è quella che nel 98% dei casi i contenuti sono statici e quindi ngnix li gestisce in maniera più leggera e veloce di apache, che invece si occuperebbe solo dei contenuti dinamici.
Questo crea un grosso problema al forum però. I due server a livello di browser vengono visti effettivamente come due host differenti e quindi AJAX, cookie e autenticazioni varie falliscono.
Avete esperienza in merito ?

Poi sempre nel post precedente, mi hanno parlato di cloudflare. Ma non lo conosco.
Considerate anche che il server fa un traffico di 5Tb al mese.

Grazie mille
Daniele