• User Newbie

    Problema (lato codice?) accessi simultanei

    Ciao a tutti, ho realizzato un sito web calcistico dove vengono inseriti tutti i risultati del calcio dilettantistico della regione, con migliaia di accessi simultanei tutti concentrati in circa 3-4 ore, durante le partite e dopo.

    Sono circa 3 weekend che provo soluzioni diverse di hosting. All'inizio con hosting condiviso professionale e via via aumentando le risorse. Per farla breve il fine settimana scorso tenevo il sito su un cloud con disco ssd, 2gb ram e 35 connections e, anche se andava molto meglio rispetto alle volte precedenti, ad un certo punto l'hosting non ce la faceva a rispondere a tutte le richieste e a volte mostrava la pagina con numero massimo di richieste raggiunto (che non è il massimo).

    Il CMS che utilizzo è joomla e dall'inizio l'ho ottimizzato sempre di più le query, togliendo quelle inutili, togliendo tutto quello che non serve, sfruttando la cache del del server, comprimendo i css, js, e l'html, ma ancora non ci siamo.

    L'ordine dei visitatori è di circa 1.500 / 2.000 simultanei.

    Cosa potrei fare di più? grazie :arrabbiato:


  • Super User

    Io cercherei un hosting con un ottimo servizio clienti per il supporto tecnico e chiederei a loro quale soluzione possono offrirti.

    Comunque dovrebbe essere un problema di traffico, se ad esempio hai un sito su un hosting da 10gb di spazio ma il tuo sito pesa 10MB e ogni utente che si collega al tuo sito "legge" tutto il sito hai che 1 utente utilizza 10MB di traffico, quindi 2000 utenti utilizzano quasi 20GB di traffico (2.000 utenti x 10MB = 20.000MB = 19.53GB). Purtroppo molti hosting pubblicizzano i loro hosting dicendo "TRAFFICO ILLIMITATO" ma è ovvio che, sopratutto a certi prezzi, non può essere ILLIMITATO (dato che i computer/server, per quanto potenti, non sono illimitati).
    Sopratutto tu hai il problema che hai molto traffico contemporaneamente...


  • Super User

    Ciao,

    1500 utenti simultanei non sono "bazzecole", bisogna capire quanta CPU il tuo sito necessita per "servire" le richieste e capire se ti occorre un hosting o un VPS o addirittura un server dedicato.

    Ciao


  • User Newbie

    Grazie delle risposte, analizzando l'utilizzo risorse in cpanel praticamente il collo di bottiglia sta nelle connections simultanee. Rispetto ad utilizzo CPU, banda e RAM è tutto sotto crontrollo.
    Praticamente vedo che in certi momenti ci sono 55-60 connections, ma ne vengono soddisfatte solamente 35, che è il limite appunto dell'hosting cloud in questione.
    Ora, come dicevo, ho snellito le query ulteriormente, visto che utilizzavo un componente per la gestione dei risultati calcistici per joomla che ne aveva veramente troppe ed in generale ogni pagina si attesta su 15mb di ram e 20-25 query al massimo.
    Dopodichè utilizzo il componente jotcache per joomla cosicchè le pagine vengano cachate (con scadenza 5 minuti, visto che i risultati si aggiornano molto spesso) e quindi le query suddette e l'utilizzo di memoria non si applicano ad ogni utente ma molto meno.

    Aggiungo un'ultima cosa. Prima tale sito era realizzato in asp con db mssql, realizzato circa 10 anni fa e quindi molto più snello rispetto ai cms (comodi ma più pesanti) di ora, e girava senza problemi fino allo scorso su un hosting aruba condiviso: questa è la notizia più eclatante visto che ora con una spesa di circa 700 € l'anno non ce la fa a girare, mentre prima con 30 € l'anno funzionava. E' chiaro che è questione di codice.

    che ne pensate?


  • User Newbie

    Ha, dimenticavo, il sito in questione è questo tribunastadio.it


  • Super User

    @promoforweb said:

    in certi momenti ci sono 55-60 connections, ma ne vengono soddisfatte solamente 35, che è il limite appunto dell'hosting cloud in questione.

    Credo che come prima cosa dovresti concentrarti su questo e passare ad un hosting che ti permette di avere più connections.


  • Moderatore

    Ciao, probabilmente c'è un discorso da fare relativamente all'hardware ( ma il cloud è stato creato apposta per sostenere questo tipo di spike nel traffico ), ma fossi in te valuterei meticolosamente il versante software.

    Joomla è pesantuccio e non so quanto sia scalabile. Ma soprattutto concentrati sul dbms in uso. Ad esempio Postgresql fa il locking a livello di riga, Mysql ( e credo anche Mariadb ) a livello di tabella. Ciò crea delle contese evitabili e riduce enormemente il numero di crash.

    Lo faccio presente perchè mi è capitato in passato e i problemi erano tutti riconducibili al dbms.


  • Super User

    @paolino said:

    Ciao, probabilmente c'è un discorso da fare relativamente all'hardware ( ma il cloud è stato creato apposta per sostenere questo tipo di spike nel traffico ), ma fossi in te valuterei meticolosamente il versante software.

    Joomla è pesantuccio e non so quanto sia scalabile. Ma soprattutto concentrati sul dbms in uso. Ad esempio Postgresql fa il locking a livello di riga, Mysql ( e credo anche Mariadb ) a livello di tabella. Ciò crea delle contese evitabili e riduce enormemente il numero di crash.

    Lo faccio presente perchè mi è capitato in passato e i problemi erano tutti riconducibili al dbms.

    Domanda senza polemica: ma se "ci sono 55-60 connections, ma ne vengono soddisfatte solamente 35" cosa c'entra quanto è pesante Joomla?


  • User Newbie

    @LorenzoRoma said:

    Domanda senza polemica: ma se "ci sono 55-60 connections, ma ne vengono soddisfatte solamente 35" cosa c'entra quanto è pesante Joomla?

    Perdona l'ignoranza, ma le connections derivano da richieste di query e di script php o mi sbaglio?

    L'idea che mi sono fatto è che accedendo moltissimi utenti allo stesso momento creano molte richieste a livello di query ed esecuzione di script php, se l'hosting ne concede al massimo 35 per volta quelle 20-25 in più non le soddisfa.


  • Moderatore

    @LorenzoRoma said:

    Domanda senza polemica: ma se "ci sono 55-60 connections, ma ne vengono soddisfatte solamente 35" cosa c'entra quanto è pesante Joomla?

    C'entra l'architettura del CMS e la sua scalabilità. Se ( ad esempio ) crei un CMS che serializza tutti gli accessi ( non è così, è compito principalmente del web server, ma è utile per nell'esempio ), allora potrai avere 55-60 persone che cercano di connettersi ma molte andranno probabilmente in timeout.

    Per questo ti ho consigliato di dare uno sguardo al software, soprattutto al DBMS ( il CMS passa decisamente in secondo piano ). Un DBMS come MySQL difficilmente riuscirà a reggere il tipo di workload che gli stai propinando.


  • Super User

    Si tratta di un timeout del PHP, con relativa latenza nella risposta da parte di MySQL...


  • User Newbie

    Quindi, potrei ipotizzare che il timeout derivi dall'attesa di troppe query, comunque domani e dopodomani ci sono i match e lo metterò alla prova. Vi farò sapere.

    Grazie a tutti per ora!!


  • Super User

    @paolino said:

    C'entra l'architettura del CMS e la sua scalabilità. Se ( ad esempio ) crei un CMS che serializza tutti gli accessi ( non è così, è compito principalmente del web server, ma è utile per nell'esempio ), allora potrai avere 55-60 persone che cercano di connettersi ma molte andranno probabilmente in timeout.

    Per questo ti ho consigliato di dare uno sguardo al software, soprattutto al DBMS ( il CMS passa decisamente in secondo piano ). Un DBMS come MySQL difficilmente riuscirà a reggere il tipo di workload che gli stai propinando.

    Posso azzardare un paragone da ignorante?
    E' come se in una macchina devono entrare 10 persone, ma se la macchina è da 5 posti... 10 persone non entreranno mai. (-> 55-60 connections su un massimo di 35)

    Oppure stai dicendo che non dovrebbero essere 55-60 accessi contemporaneamente perchè se velocizzi il sito invece di fare 55-60 accessi contemporaneamente (ad esempio nell'arco di 1 minuto) puoi fare 20 accessi ogni 10 secondi e quindi non arrivi mai al massimo che è di 35?


  • User Newbie

    Si, più il secondo paragone. Anche perchè non sono accessi, ma processi contemporanei. Però se il processo è complicato (ad es. query pesanti) ci mette di più a terminare e non lascia il posto agli altri.

    ciao


  • Super User

    Scusa se ti giro al volo una domanda, che webserver stai utilizzando?
    Il server è gestito da te o è gestito da chi te lo fornisce?

    1500/2000 connessioni simultanee non possono mandar giù un intero sistema, quello che azzardo è di aver ben inteso che si tratta di una errata configurazione dei servizi lato server e non di joomla!
    La richiesta di socket deve trovare risposta in una frazione infinitesimale di secondo su sistemi configurati a regola d'arte :vai:


  • User Newbie

    Potete vedere nel link uno screenshot dell'utilizzo delle risorse. Da come si evince è tutto ok su ram, cpu e I/O, ma non nei processi di immissione.

    tribunastadio.it/images/grafici2.jpg


  • Super User

    Ti ho girato una domanda in precedenza...


  • User Attivo

    @promoforweb said:

    Potete vedere nel link uno screenshot dell'utilizzo delle risorse. Da come si evince è tutto ok su ram, cpu e I/O, ma non nei processi di immissione.

    tribunastadio.it/images/grafici2.jpg
    Infatti, ti confermo che raggiungi il numero massimo di processi consentiti.
    Dovresti chiedere un upgrade su questo fronte, anche se mi sembra un limite veramente basso per un cloud. Non so quanto paghi ma un cloud con le caratteristiche che hai descritto non dovrebbe avere problemi a gestire il doppio o anche il triplo di quei numeri.


  • User Newbie

    La soluzione che ho acquistato è la seguente
    keliweb.it/cloud-hosting/offerte-cloudhosting.php?product=h4

    Ma anche oggi ho avuto gli stessi problemi. Credo di dover passare ad un server dedicato. Che ne pensate?


  • User Attivo

    Non mi sembra che ci sia la necessità di passare ad un server dedicato, visti i dati che hai postato (che quasi non richiedono neanche un cloud).

    Il limite del tuo attuale piano è dato da quei 100 processi, dovresti semplicemente chiedere loro (anche a pagamento) di aumentare questo limite. In questo modo risolveresti di sicuro. Anche perchè il lato positivo del cloud è che è espandibile e scalabile in qualsiasi direzione, qualsiasi cosa ti serva, si può sempre aggiungere (salvo scelte commerciali).