Database MySQL, 10 trucchi per migliorarne le performance e la stabilità

 sveliamo dei semplici segreti che molti amministratori di database MySQL usano per migliorare le performance delle proprie basi dati.

wordpress_mysql_backup

Il database è la memoria del nostro sito internet o applicativo e ci permette di offrire contenuti dinamici in tempo reale ai nostri utenti.
Ottimizzare il database del proprio sito internet è un’operazione estremamente complessa e condizionata da tante variabili.

Se gestiamo applicazioni o siti che devono supportare numerosi accessi simultanei oppure gestiamo una base di dati che nel tempo ha assunto una elevata complessità (nell’ordine di qualche centinaia di migliaia di righe) è possibile avere un degrado nelle prestazioni, che di solito può essere risolto generalmente ottimizzando il DB.

Quelli che seguiranno sono 10 trucchi che aiutano a migliorare ed ottimizzare le performance di un DB MySQL e/o Percona Server basato su motore InnoDB (praticamente tutti quelli dei maggiori CMS, come WordPress, Moodle, Prestashop, Magento, Joomla, ecc.).

Parametri MySQL da modificare/configurare per un database performante

1.      Configurare il parametro innodb_buffer_pool_size

Il parametro più importante da modificare immediatamente è innodb_buffer_pool_size ed è quello che indica quanta memoria può essere usata per memorizzare in RAM i dati (e quindi evitare accessi al disco continui). Che valore dare dunque al buffer?

Mettiamo che abbiamo un server su cui risiede sia il webserver che Mysql, con 8 giga di ram: dedichiamo a innodb_buffer_pool_size 4GB

Per essere più chiaro e meno ripetitivo faccio una tabella

TIPOLOGIA DI SERVER RAM A DISPOSIZIONE RAM DA DEDICARE
Webserver+mysql 8GB RAM 4GB RAM
Webserver+mysql 16GB RAM 10GB RAM
DBserver dedicato 6GB RAM 5GB RAM
DBserver dedicato 12GB RAM 10GB RAM
DBserver dedicato 24GB RAM 20GB RAM

2.      Configurare il parametro innodb_log_file_size

Questa proprietà definisce la grandezza massima del file di log per tabelle InnoDB. Pur essendo vero che maggiore è la dimensione, migliori sono le prestazioni, è anche vero che bisogna fare i conti con le dimensioni del server. A seconda di tale considerazione si consiglia un tuning di questa variabile tra i 512 e i 4GB.

3.      Configurare il parametro max_connections

Un numero massimo di connessioni disponibili inferiori al numero di connessioni correnti impedirà agli utenti di accedere al database, rendere il vostro sito inaccessibile e / o lenta. Un numero molto elevato di connessioni disponibili per un numero molto basso di connessioni effettive farà server MySQL richiedono più RAM rispetto effettivamente necessario. Il problema di valori troppo alti (oltre i 1000) è il possibile crash del server che si trova a dover gestire contemporaneamente oltre 1000 transazioni attive.

4.      Configurare il parametro innodb_file_per_table

Questa impostazione serve per indicare a MySQL se si vuole conservare i dati e gli indici in un unico tablespace (impostazione su OFF) o in un file IBD separato per ogni tabella (impostazione su ON). Il consiglio è di impostare il parametro su ON (valore di default per MySQL 5.6) soprattutto se si effettuano operazioni di cancellazione e ricostruzione tabelle od operazioni di compressione, che permettono di recuperare spazio. Evitare però di usare l’impostazione su ON qualora si abbia a che fare con un database dal numero di tabelle davvero elevato (oltre 10 mila).

5.      Configurare il parametro innodb_flush_log_at_trx_commit

Se sembra che InnoDB sia più lento di MyISAM è possibile che questo valore sia stato configurato male. Il default (1) significa che ad ogni commit di una transizione (o statement fuori dalla stessa) necessita di fare flush del log su disco, un’operazione piuttosto costosa se molto frequente. Settare il valore a 2 significa fare il flush del log solo tramite cache del sistema operativo. Il valore 0 è più veloce, ma è rischioso perchè si possono perdere dati durante le transizioni nel caso di un crash di MySQL Server. Anche il valore 2 è rischioso se il sistema operativo va in crash.

6.      Configurare il parametro innodb_flush_metod

Sui sistemi Linux e simili (FreeBSD, Solaris…) c’è inoltre il problema di evitare il doppio buffering e per farlo occorre settare la variabile innodb_flush_method a O_DIRECT. Fatelo se vi accorgete che il vostro sistema swappa più del previsto quando il db è sotto stress.

7.      Configurare il parametro innodb_log_buffer_size

Il default per questa variabile è 1MB e per sistemi con poche transazioni ed un traffico medio potrebbe bastare. Non va settato un valore troppo alto perchè è il buffer è flushato ogni secondo ed esagerare significherebbe sprecare memoria. Solitamente sono più che sufficienti 8-16 MB.

8.      Configurare il parametro query_cache_size

Utile per applicazioni con molti dati in lettura. Valori compresi tra i 256 e i 2048 MB sono i migliori, a seconda della potenza della vostra macchina.
Al momento in cui scrivo le considerazioni valgono per MySQL Server 5.5 (io le ho provate su MySQL Server 5.6) e sono comunque suggerimenti da utilizzare con criterio e in base alle possibilità della propria macchina.

9.      Configurare il parametro log_bin

Attivare il logging binario è necessario sia per far funzionare il server come replica di un database server master, sia se sul server (in configurazione singola) si vuole abilitare il sistema di backup automatico. Logga le istruzioni che scrivono dati in formato binario. L’argomento opzionale deve essere il nome del log. Se non è specificato, verrà usato datadir/’log-basename’-bin o ‘datadir’/mysql-bin (il secondo solo se --log-basename non è specificato). Si raccomanda caldamente di usare --log-basename o specificare un nome file per essere sicuri che la replica non si arresti nel caso in cui il nome host del server cambi.

10.  Configurare il parametro skip_name_resolve

MySQL, per i client che si collegano da remoto, mantiene una cache dove memorizza numero IP, nome host ed altre informazioni. Per far ciò il server tenta una risoluzione DNS IP->host name.
Se i DNS interni alla LAN non forniscono un reverse DNS lookup (PTR records) allora è probabile sperimentare un rallentamento nelle connessioni. Infatti MySQL tenterà ogni volta di reinserire nella cache il nome host, processo inevitabilmente destinato a fallire con un timeout.
Per disabilitare il DNS host name lookup è sufficiente far partire MySQL con l’opzione –skip-name-resolve. Basta modificare il file di configurazione my.cnf o my.ini

Miglioriamo le performance di MySQL Server ottimizzando e riparando le tabelle.

MySQL non ha purtroppo  la sana abitudine di ottimizzare le tabelle qualora ve ne sia bisogno.

Per ottimizzazione delle tabelle si intende la riduzione dei byte in eccesso che si vengono a verificare quando un campo di un qualsiasi record viene modificato oppure quando un record viene cancellato.

Ad esempio, se un campo contiene del testo d occupa 100 byte e poi il campo viene modificato ed occuperà 90 byte, c’è il rischio di trovarsi con 10 byte in eccesso.

Stesso discorso quando un record viene cancellato: se la tabella occupa 1000 byte e viene cancellato un record che ne occupa 150, ci troveremo con una tabella di 850 byte col rischio di averne 150 in eccesso.

MySQL mette a disposizione l’istruzione OPTIMIZE TABLE il cui compito è quello, appunto di ottimizzare la tabella e compattare i dati.

Per far ciò basta usare lo strumento Mysqlcheck, in questo modo:

mysqlcheck u root p autorepair c o nomedatabase

Ottimizzazione WordPress. Come ottimizzare e velocizzare un blog WordPress con una consulenza sistemistica dedicata. Linux Server Hosting per WordPress.

speed-up-wordpress-siteAbbiamo scritto parecchio in questi ultimi due anni che ci ha visto fornire consulenze ad-hoc (a clienti importanti) sull’importanza di avere un blog WordPress veloce e performante e su come raggiungere lo scopo.
Abbiamo scritto dell’importanza di un’installazione Server adeguata ed ottimizzata, dell’importanza di sostituire software come Apache, MySQL, con i più performanti NGINX e Percona Server.
Abbiamo scritto dell’importanza di scegliere un partner adeguato alle esigenze di hosting, relativamente al traffico generato, ai picchi di banda, in rapporto al budget disponibile.
Abbiamo scritto di come sia intelligente utilizzare CDN come Incapsula per migliorare la velocità nella distribuzione di contenuti statici (come le immagini), di come risparmare banda e di come risparmiare connessioni in ingresso che possano gravare in modo negativo sul server e sulle prestazioni.
Abbiamo scritto dell’importanza dei metodi di caching, sia a livello DB (MySQL o Percona Server che sia), sia a livello di CMS, sfruttando ottimi plugin come W3 Total Cache in accoppiata con software di sistema come Memcache o Redis.
Abbiamo scritto sulla possibilità di cachare le pagine statiche tramite un reverse proxy come Varnish.
Altri hanno scritto per noi di come sia importante un caricamento immediato delle pagine web, e di come un solo secondo di ritardo provochi :

  • 11% in meno di pagine visitate;
  • 16% di riduzione nella customer satisfaction;
  • 7% in meno di conversione della visita in acquisto;
  • Il cliente online tipico attende al massimo 2 secondi.

fino ad arrivare all’abbandono del sito dopo aver atteso 5 secondi.

http://www.businesscommunity.it/m/_Marzo2013/fare/Il_successo_delle_vendite_online_si_misura_in_secondi.php

Tutto questo per dire che un Blog WordPress, può e deve usufruire di tutte queste tecnologie disponibili per due scopi essenziali : essere rapido e scattante, reggere migliaia di utenti al secondo.
Il costo è alla portata di tutti, sul lungo termine si arriva spesso al risparmio, in alcuni casi addirittura DECIMANDO il costo di affitto infrastruttura.

Nel frattempo, si sono rivolti a noi per velocizzare il loro sito, clienti come :

e molti altri blog famosi basati su WordPress, coperti da clausola di riservatezza.

Va necessariamente detto, che di norma uno sviluppatore non ha conoscenze specifiche nell’implementare una corretta configurazione e dimensionamento dell’hardware e del software che saranno alla base dell’ottimizzazione del sito in WordPress, per cui se volete realmente fare la differenza, chiedeteci pure una consulenza sistemistica gratuita.

Grazie a competenze specifiche di networking e di sistemistica su Gnu/Linux, nonchè una conoscenza approfondita dei principali fornitori di connettività italiani ed europei, analizzeremo le problematiche attuali, e svilupperemo una strategia ad-hoc da proporvi al fine di garantirvi i migliori risultati al costo più basso, proponendo al contempo un’assistenza continuativa nel tempo grazie a piani di assistenza managed su server VPS, Cloud, o Server Dedicati.

Il vostro blog wordpress vi ringrazierà, ed anche i vostri utenti.

Anche Mammeacrobate.com ci sceglie per l’hosting ottimizzato del blog WordPress.

mammeacrobate

E’ in produzione dallo scorso Sabato mattina, il frutto del lavoro avvenuto nella nottata del Venerdì (per minimizzare il disservizio negli orari con pochi utenti online), che ci ha visto chiamati in causa come consulenti per un portale orientato al tema maternità, che ha numeri considerevoli : 12 mila FAN Facebook, e ben 18 autori.

Dopo aver lamentato problemi di velocità nella navigazione, abbiamo deciso di adottare l’ormai consueta “ricetta” al fine di ottimizzare la navigazione del blog WordPress e velocizzare il caricamento dei contenuti.

Dopo aver ottimizzato i valori di sistema del sistema operativo, abbiamo sostituito la vecchia architettura basata su Apache, PHP 5.3, MySQL 5.1 con la più performante configurazione basata su NGINX con PHP 5.6 in PHP-FPM con Zend OpCache abilitato e Percona Server 5.6

Un tuning ad-hoc del caching di Percona Server al fine di minimizzare l’accesso al DB per le query in sola lettura di tipo SELECT, e l’installazione e configurazione di un plugin per il caching in RAM (tramite memcache), come W3TC ci ha permesso di minimizzare i tempi destinati alla creazione delle pagine dinamiche PHP.

Una successiva implementazione di una pseudo CND su dominio di terzo livello img.mammeacrobate.com, tramite Incapsula, ci ha permesso di assegnare il compito di distribuzione di contenuti statici (tutti gli upload, ed in particolar modo le immagini) ai server della CDN Incapsula, guadagnando in velocità potendo minimizzare le connessioni in ingresso verso il server di Mammeacrobate.com e dunque risparmiare picchi di banda e traffico.

Un’altro sito che si unisce all’ormai folta schiera di blog wordpress ad alto traffico trattati con successo negli ultimi 2 anni.

Se cercate un hosting WordPress ottimizzato per il vostro blog, contattateci pure, sapremo sicuramente proporvi una soluzione ai vostri problemi.

Anche Martina Gold sceglie DREAMSNET.IT per l’ottimizzazione WordPress del suo nuovo sito.

Martina_Gold_03-MediumE’ a causa del rifacimento del nuovo sito Web basato sul CMS WordPress, che anche Martina Gold, nota attrice emergente del mondo dell’hard ci ha chiesto consulenza tramite il proprio staff tecnico, per la risoluzione di problematiche bloccanti dovute al sovraccarico del server su cui era hostato il nuovo sito web.

Al momento della richiesta, il sito risultava praticamente non navigabile a causa di un carico del server su Aruba che arrivava ad oltre 200 volte la soglia massima, con un load average di oltre il 270%.

Dopo un’accurata analisi preliminare abbiamo deciso di intervenire ed accettare la sfida, mettendo in atto tutta una serie di accorgimenti al fine di normalizzare i picchi di carico problematici e rendere l’esperienza di navigazione, fluida, veloce, piacevole.

Tra gli obiettivi preposti nell’ottimizzazione, quello di contenere i costi, rimanendo in linea con i costi di infrastruttura hardware (server) attuali.

Abbiamo pertanto scelto di migrare l’attuale configurazione basata su Server Dedicato Basic 2.2 di Aruba con le seguenti caratteristiche :

Server Basic 2.2
Hardware Assemblato
1x Processore Intel Atom Dual (2x core 1.60 GHz) o superiore
4x GB RAM
1x Hard Disk 500GB SATA 3,5″

25 € / Mese + IVA

su un server VPS Cloud 3 di OVH con le seguenti caratteristiche offerte allo stesso costo :

Cloud VPS 3
6 vCores
8 GB RAM
100 GB Hard Disk RAID10

29.99 € / Mese + IVA

garantendo con questa soluzione una business continuity eccellente derivata da una tecnologia di virtualizzazione Cloud basata su Hypervisor VMWare ESXi.

Un numero maggiore di core e circa il doppio di memoria RAM, ci ha permesso di mettere a puntino un tuning meticoloso dei vari servizi che siamo andati ad installare.

Una sostituzione del vecchio Apache e PHP 5.3, con un performante NGINX con PHP in Fast Process Manager (PHP-FPM) 5.6 che integra Zend Opcache.
Una sostituzione del vecchio MySQL 5.1 con il perfomante Percona Server 5.6 (replace drop in di MySQL – www.percona.com) ed un tuning ad hoc per il caching delle query in RAM.
Una configurazione adeguata ai valori del kernel e ai limiti del sistema.

L’implementazione di un sistema di Caching ad hoc dei contenuti di WordPress, tramite l’installazione di W3 Total Cache, un famoso plugin adibito a questo scopo.
L’installazione di una CDN come Incapsula che ha permesso di velocizzare la navigazione ed il caricamento dei contenuti tramite il delivery dei contenuti funzionando in reverse proxy.

Ad ora, non ci sono problemi di sorta, e l’intero sistema viaggia normalmente con un carico medio di 0.7, fino a rari picchi massimi di 3.

Un significativo aumento della qualità, che si traduce in una reale possibilità di crescita del business dovuto ad una navigazione ed user experience eccellente e all’eliminazione dei fastidiosi blocchi del server che rendeva impossibile la messa in produzione del nuovo sito WordPress

Un nuovo blog ad alto traffico che si va a sommare all’elenco dei numerosi casi di successo conseguiti nell’ottimizzazione di server e blog wordpress.

Hai un sito lento e ti chiedi cosa si possa fare per migliorare ? Contattaci.

Come migliorare le perfomance di un blog WordPress, grazie ad una consulenza sistemistica e ad uno stack Percona Server, PHP-FPM, NGINX, Redis, Memcache e Varnish.

In relazione all’articolo precedente sull’ottimizzazione performance di un server adibito all’hosting di un blog WordPress ad alto traffico come curiosone.tv (potete leggerlo qui), è stato deciso di fare un video dimostrativo al fine fare una comparazione prima / dopo, l’ottimizzazione, utilizzando i dati provenienti da htop, netstat, ed utilizzando il tool Apache Benchmark per effettuare uno stress testing su componenti software (plugin), alla base di un carico a livello di CPU ingestibile, dando un’esperienza di navigazione lenta e snervante, nonchè frequenti crash, e un backend letteralmente ingestibile se non in tempi biblici.

Il tutto è stato realizzato con software open source e “ricette sperimentate sul campo già altre volte”, tra i quali Percona Server, PHP-FPM, Zend Opcache, NGINX, REDIS, Memcache, Varnish, e l’ausilio di una CDN come Incapsula (Già più volte menzionata in questo blog).

La dimostrazione pratica di quanto un’assistenza sistemistica managed a livello server, possa fare la vera differenza in termini di qualità del servizio offerto, garantendo un notevole risparmio sui costi dell’infrastruttura, e garantendo un velocissimo ritorno dell’investimento iniziale, grazie alla qualità della navigazione che l’utente dispone e dei relativi modelli di business basati su interazioni con il visitatore come Advertising e campagne Pay per click di circuiti come Google Adsense.

Investire una cifra modesta per fare l’analisi della situazione iniziare ed effettuare un tuning ad-hoc è il primo passo da seguire, consultandosi con sistemisti Linux di comprovata esperienza.

Gestire un rapporto continuativo di supervisione e gestione server managed è il passo successivo per continuare a garantirsi i benefici ottenuti con una configurazione ad-hoc che deve comunque essere monitorata e supervisionata.

 

Anche curiosone.tv preferisce l’assistenza server managed Dreamsnet.it.

curiosone-tv

E’ con questo annuncio che Curiosone.tv avvisava i lettori di una problematica tecnica che rendeva inaccessibile il loro visitatissimo sito.

Ciò che sembrava dunque un’operazione di routine era qualcosa di molto più serio. Cpanel infatti (il pannello di controllo del server su cui gira Curiosone.tv), aveva crashato inspiegabilmente, e al riavvio del servizio non voleva saperne di ripartire.

Dunque, contatti online da un loro responsabile ci accordiamo sul da farsi per far ripartire i servizi e valutare delle ottimizzazioni.

Dopo un paio d’ore di test e reinstallazione del pannello, onde che brancolare nel buio è stata presa una scelta drastica : backup Web e DB, switch DNS, formattazione della macchina, reinstallazione sistema operativo (Linux CentOS 6.6), reinstallazione e configurazione servizi, ripristino backup.

Nel fare ciò è stato deciso di unire l’utile al più utile, ovvero reinstallare tutti i servizi sostituendoli con tecnologie più performanti, adatti a siti Web con picchi di visite di oltre 30 mila.

Dunque abbiamo utilizzato questa configurazione :

Rimpiazzo del Webserver Apache con Nginx
Rimpiazzo del vecchio MySQL 5.1 col nuovo Percona Server 5.6
Sostituzione del PHP 5.3 con PHP 5.6 con Zend OpCache abilitato e in modalità PHP-FPM
Sostituzione di plugin di caching di WordPress con W3 Total Cache
Caching DB a livello Memcache

Valutando con l’azienda se installare un Varnish per un caching aggressivo lavorando in reverse proxy con il webserver NGINX, per ora abbiamo ripristinato in una nottata una situazione molto critica, dando inopinabile valore aggiunto in termini di efficienza e performance.

Oltreuomo.com ci sceglie come fornitori hosting ad alte prestazioni. Un tuning da oltre 2000 utenti al secondo.

oltreuomoIl famoso blog satirico oltreuomo.com ha deciso di affidarci l’hosting e la parte sistemistica per gestire il picco di utenti che inizia a diventare molto importante e ingestibile con una struttura condivisa come Godaddy.
Abbiamo pertanto illustrato il nostro modus operandi e illustrato i benefici di un tuning ad-hoc e relative ottimizzazioni ai servizi erogati.

Abbiamo installato il sistema operativo, fatto un tuning delle variabili di sistema, settato i vari limiti a livello di sistema operativo.

Abbiamo poi installato e configurato MySQL, PHP-FPM, Zend Opcache, Memcached, Redis.io, NGINX.

Abbiamo separato la parte dei contenuti statici (upload) in un vhost secondario di terzo livello : img.oltreuomo.com.

Abbiamo messo avanti a ognuno dei due host una CDN per limitare le connessioni in ingresso e il consumo di banda.

  • Incapsula per servire img.oltreuomo.com
  • Cloudflare per servire www.oltreuomo.com

A livello WordPress, abbiamo installato il plugin w3 Total cache e configurato in modo di cachare oggetti e query direttamente a livello memcached.
Ulteriormente abbiamo sostituito la index con uno script per funzionare come cacher su Redis per abbassare notevolmente il tempo di load delle pagine da mezzo secondo circa a 0,006 secondi o anche meno con oltre 2000 visitatori connessi.

redis

Il risultato ottenuto è quello di avere un sito WordPress velocissimo, ottimizzato per gestire un alto numero di visitatori simultanei.

Lo screenshot di Google Analytics unito al report di htop vale più di mille parole:

oltreuomo_tuning_wordpress

Qualora vogliate ottimizzare spingere WordPress, Magento o altri siti ai massimi livelli, contattateci pure per una consulenza sistemistica dedicata.

 

Servire oltre 5000 visitatori al secondo ad un blog WordPress, tramite ottimizzazione server. Un esempio reale con Redis, NGINX, Varnish, Memcached, CDN.

Cosa succede quando un sito di Quiz diventa popolare ? Succede che bisogna gestire oltre 5000 visitatori al secondo per un totale di 50 mila connessioni al secondo. Come gestire soluzioni del genere ad alto traffico ? Alla base di tutto : WordPress con caching misto su memcached e Redis Server, PHP-FPM, Nginx con frontend Varnish dietro Cloudflare e Incapsula.

speed-up-wordpress-siteQuesto articolo ha lo scopo di illustrare le potenzialità di un tuning ad-hoc di un server Linux al fine di servire oltre 5000 visitatori al secondo ad un blog WordPress.

Tutto quello che leggerete di seguito è frutto di un caso reale a cui abbiamo lavorato per garantire l’erogazione del servizio di hosting in modo ottimale, nel frattempo che i programmatori riscrivessero l’applicazione in un modo più performante, ovvero senza l’utilizzo di WordPress che per l’utilizzo e la tipologia di sito è sicuramente una scelta criticabile e sostituibile con del puro HTML e Javascript.

Alla fine dell’articolo un video,  per chiunque preferisca vedere dal vivo alcuni passaggi importanti che sono solamente citati nell’articolo.

Introduzione alla vicenda

Il tutto nasce dalla richiesta di aiuto dello sviluppatore/sistemista di Quizdee.com noto sito di quiz online che mi riassume con un’immagine la situazione che avevano raggiunto : a 800 utenti al secondo il server si bloccava allocando tutta la potenza di calcolo delle 4 CPU istanziate su Amazon EC2.

server-load-carico-linuxSin da subito veder girare httpd , sinonimo di Apache fa capire che c’è molto da fare. Un successivo sguardo alla configurazione di MySQL, ci mostra eloquentemente che non è stato fatto nulla di specifico nell’ottimizzazione ma che tutto gira come fornito dall’installazione.

Guardando l’applicativo non si può far altro che criticare la scelta “veloce” (ma funzionale) di usare WordPress per lo sviluppo di un sito Web che avrebbe potuto essere sviluppato su DBMS di tipo NOSQL come MongoDB o Redis, o meglio ancora eliminando completamente il lato server side, escludendo dunque PHP e MySQL per un corretto funzionamento.

Ovviamente riscrivere tutto da 0, avrebbe comportato tempistiche non gestibili in qualche giorno, per cui nel frattempo il compito era “tamponare” con soluzioni di emergenza in grado di reggere almeno 10 volte tanto gli 800 utenti iniziali, limite in cui il server linux iniziava letteralmente a morire sotto i click dei visitatori.

Cambio Hoster e cambio Server Dedicato.

Date le grosse risorse in termini di CPU abbiamo deciso di passare da un 4 core di Amazon EC2 a un server dedicato da Hetzner in Germania.

La scelta è ricaduta su un server di fascia alta :

Intel® Xeon® E5-1650 v2
Hexacore Ivy Bridge-E
6 core fisici e 12 logici.
128 GB di RAM ECC
2 Hard Disk SATA SSD a stato solido.
Connettività 1 Gbit/s
al modico costo di 139€ al mese IVA Inclusa.

Installazione e configurazione sistema operativo Linux CentOS 6

Abbiamo scelto di installare la famosa distribuzione CentOS, già precedentemente installata anche su Amazon EC2, e di procedere alla configurazione base, eliminando tutti i servizi non necessari e installando tutti i software voluti per una successiva configurazione. Abbiamo installato dunque :

  • MySQL Server
    DBMS relazionale, necessario al funzionamento di WordPress
  • NGINX
    nginx [engine x] e’ un server HTTP e reverse proxy, nonche’ un server mail proxy, scritto da Igor Sysoev. Per molto tempo e’ stato usato principalmente per alcuni siti russi ad alto carico, ad esempio YandexMail.RuVKontakte e Rambler; in base ai dati di Netcraft, nell’ottobre 2013 nginx e’ il server HTTP o reverse proxy del 15.08% dei siti a maggiore carico.
  • PHP-FPM in versione 5.5
    è un frontend FastCGI per PHP che migliora le funzionalità di php-cgi.
  • Zend OpCache
    l’integrazione di Zend Optimizer+quale opcode cache; si tratta di un componente concepito per incrementare il livello di prestazioni nell’esecuzione delle applicazioni PHP senza alterarne i comportamenti.
  • Memcached
    è un sistema cache in RAM a oggetti distribuiti per migliorare la velocità .
    Memcached diminuisce il tempo di caricamento delle pagine dei siti web dinamici basati su database mettendo in cache i dati richiesti e riducendo il carico sui server database
  • Redis
    un key-value store open source residente in memoria con persistenza facoltativa.
  • Varnish
    un acceleratore HTTP potente e open source, che è in grado di servire contenuti in cache in modo veloce

Per ogni software abbiamo proceduto ad effettuare un tuning ed una configurazione affichè tutto si integrasse perfettamente.

Obiettivi da raggiungere prefissati nella configurazione

Tra gli obiettivi da raggiungere che ci siamo prefissati, quello di minimizzare lo spawning di processi php-fpm e query MySQL. Sono loro a divorare i 12 processori logici, saturando tutte le risorse e accodando sempre più richieste fino ad una situazione di stallo.

Per far questo (non potendo nell’immediato riscrivere il tutto in un semplice HTML statico), dobbiamo cachare nel modo più corretto e veloce possibile quanto più si riesca a cachare in modo di restituire l’output html dalla RAM, piuttosto che generarne nuovamente da PHP e MySQL.

Oltretutto bisogna anche limitare il traffico dati delle immagini, che seppur poche in termini di quantità e di pesantezza riescono a generare circa 250 gigabyte al giorno di traffico.

Per i problemi di traffico abbiamo deciso di adottare 2 CDN (Content delivery network) che tramite una configurazione di reverse proxy possano cachare le nostre immagini sui loro server e fornirle al nostro posto risparmiandoci prezioso traffico dati.

La prima CloudFlare, si occupa di cachare i contenuti del sito www.quizdee.com, la seconda Incapsula, si occupa di cachare le immagini del dominio di terzo livello creato appositamente img.quizdee.com

La struttura finale ideale è simile alla seguente:

img_imperva_cloud_waf_diagram

 Cenni sulla configurazione dei vari componenti

In breve abbiamo configurato tutti i vari software precedentemente elencati per fornire un caching rapido e veloce dei contenuti. MySQL è stato impostato per cachare qualora richiesto moltissime query fino ad oltre 32 gigabyte di RAM.Valore sicuramente ben più elevato delle centinaia di megabyte in effettivo uso.

WordPress è stato configurato con il plugin W3 Total Cache (W3TC) al fine di cachare contenuti statici direttamente su memcached. Inoltre è stato abbinato anche a Redis, al fine di cachare post direttamente in RAM e diminuire i tempi di risposta fino a 100 volte tanto.

PHP-FPM è stato settato e configurato per gestire un massimo di 1000 connessioni contemporanee, numero in cui al di sopra saremmo andati incontro a sensibili problemi di carico.

NGINX è stato configurato ad hoc ottimizzandone alcuni parametri sui timeout e sul numero di thread gestibili.

Varnish è stato configurato come reverse Proxy su NGINX che a sua volta gestisce due virtual host www.quizdee.com e img.quizdee.com

 

Installazione e configurazione delle due CDN. Cloudflare ed Incapsula

Creati account gratuiti sulle due CDN, abbiamo impostato i DNS del dominio come consigliato dal pannello di controllo delle due CDN.

Cloudflare fornisce i contenuti di www.quizdee.com e Incapsula quelle di img.quizdee.com. Dopo alcuni minuti le richieste diminuivano sensibilmente e anche il load.

Questo è stato un passaggio se non vitale, comunque significativo considerando che in 4 giorni ci ha risparmiato di solo traffico immagini ben 740 GB, con oltre 27 milioni di hits, con picchi di banda di oltre 150 Mbit/s.

banda-risparmiata-incapsula
Risultati Ottenuti

I Risultati ottenuti sono stati quelli di riuscire ad erogare un servizio ad oltre 5000 utenti al secondo, avendo toccato anche dei picchi di oltre 8000, con il vantaggio di  dare un’esperienza di usabilità reattiva e veloce, dunque maggiori risultati in termini di soddisfazione e relativi introiti.
Il costo è rimasto molto contenuto senza scalare su più macchine con load balancer che avrebbe significato una spesa fino a 10 volte tanto, tra noleggio dell’hardware e relativa configurazione più gestione managed dei server Linux.

Le statistiche di Google Analytics parlano chiaro : quasi 5000 utenti con appena 10 di carico sulla CPU.

5000
Conclusioni

La potenza è nulla senza controllo. Ancora una volta, la dimostrazione pratica che buone capacità sistemistiche possano dare risultati eccellenti con costi veramente ridotti. Se hai un sito Web con molto traffico e vuoi ottimizzare le risorse con una configurazione su misura in base alle tue esigenze, contattaci pure.

Nginx sorpassa Apache: è l’opzione preferita nella top1000 Alexa.

nginxSecondo quanto riportato da un recente sondaggio della compagnia  W3Techs, nella top 1000 dei più importanti siti (stilata da Alexa) della rete il web server Nginx avrebbe effettuato un inatteso sorpasso ai danni dello “storico” leader Apache.  I numeri sembrano lasciare pochi dubbi, Nginx si posiziona al primo posto con il 38.8%, segue Apache con il 33.7% e chiude il podio IIS (Internet Information Server) di Microsoft con un modesto 9.2%

Nella classifica generale Apache torna invece a primeggiare ottenendo un 60.5% a fronte del 20.7% raggiunto dal principale competitor. In ogni caso dal lontano 2002,  anno del rilascio ufficiale,  il web server open source ideato da Igor Sysoev ha ottenuto positivi risultati guadagnando terreno nei confronti dell’indiscusso leader del mercato. Tra i principali utilizzatori Nginx figurano giganti della rete come  Facebook, Dropbox e WordPress.

L’ascesa di Nginx e le nuove sfide per la sicurezza

Tra i motivi del successo, ottenuto naturalmente a spese del primo della classe Apache, vi è una miglior gestione di elevati volumi di traffico e un più semplice livello di scalabilità rispetto alla concorrenza. Un altro fattore che ha contribuito alla diffusione nel settore è probabilmente l’introduzione di Nginx come componente standard delle principali distribuzioni Linux (Red Hat e Ubuntu Server).

Un precedente sorpasso si ebbe nel 2012 ai danni dell’ex numero due, ovvero IIS di Microsoft. Nello stesso anno il crescente successo convinse la compagnia a rilasciare una versione commerciale del proprio web server open source, Nginx Plus. Ed è proprio in merito a questo punto che potrebbe sorgerequalche interrogativo in merito alla ricerca effettuata da W3Techs: non è chiaro infatti se nel rapporto siano stati inseriti gli utilizzatori della versione freeware o a pagamento, oppure entrambi.

La consacrazione al rango di web server di primaria importanza comporta tuttavia maggiori rischi di sicurezza e Nginx non fa eccezione: nel corso dello scorso mese, ad esempio, hanno fatto “capolino” versioni Nginx del malware Linux/Cdorked, programmato in origine per colpire esclusivamente Apache, che sono riuscite ad “infettare” una cinquantina dei principali siti inseriti nella top 100.000 Alexa.

L’importanza del sistemista linux. Quando un sistemista può fare la differenza sulla velocità e la raggiungibilità di un sito web.

problem-solving-linuxQuello che andrò a narrare nelle prossime righe è una vicenda attuale riguardante un noto marchio marchigiano.
Dovendo mettere in luce alcuni aspetti negativi riguardanti alcune aziende, e avendo lavorato conto terzi, per tutelare la privacy non andrò a fare nomi, ma mi limiterò a descrivere l’accaduto.

Il noto marchio marchigian, ha un blog WordPress, in hosting dal vecchio fornitore (agenzia web specializzata in ecommerce), che fornisce il servizio di hosting Linux.

Il blog WordPress in Hosting è stato sviluppato non da questa agenzia, ma da un’altra agenzia Web, specializzata in ecommerce Magento, di cui sono sistemista sui loro server Cloud.

Il noto marchio marchigian avendo pagato fino a nuovo anno l’hosting presso il vecchio fornitore, decide di utilizzare fino alla scadenza i loro servizi e dunque la nuova agenzia si trova a dover hostare il blog da loro creato sullo spazio hosting del vecchio fornitore.

Già dalla scorsa settimana si lamentava una lentezza eccessiva e tempi di risposta altrettanto elevati, e pur convivendo con questo disagio apparantemente immotivato mai si sarebbero aspettati di vedere il blog letteralmente irraggiungibile, fino ad essere “tirato giù” dall’amministratore del server in quanto secondo lui comprometteva la stabilità dell’intero server.

Dopo vari test condotti in maniera “oscura” e non trasparente da parte dello staff del vecchio forniore, veniva fornita una spiegazione piuttosto “fantasiosa” lamentando un attacco DDOS proveniente da siti come msnbot e IP stranieri.

L’amministratore di sistema allega degli screenshot con il comando top (per mostrarci il carico della CPU) e netstat -na per mostrarci le connessioni di rete instaurate dal loro server, liquidando il tutto con poche e precise parole a riguardo, ipotizzando un attacco DDOS all’avviare del vhost nella configurazione di Apache.

A prima vista sembra assurdo vedere un load così elevato per un semplice e banale blog WordPress (che a detta di chi lo gestisce non riceve più di 80 mila visite mensili).

Sopratutto considerando che con una configurazione simile normalmente seguiamo un cliente (www.tuttoandroid.net) che genera qualche milione di visite al mese, con oltre 2000 utenti in media collegati contemporaneamente.

Qualcosa non va e questo è certo.

Non va ad esempio che giri Apache in un sistema che lamenta lentezza, piuttosto che NGINX.

Non va il fatto che il vhost giri senza separazione privilegi in mod_php piuttosto che in FastCGI o in PHP-FPM.

Non va che un sistemista che ignori alcuni concetti sopra esposti, e getti la spugna semplicemente tirando giù il sito web,  possa lamentare improbabili attacchi DDOS tramite msnbot, laddove magari non si è preoccupato minimamente di fare un tuning efficace al DBMS MySQL, al Webserver, e ad altre componenti di sistema.

A rincarare la dose, arriva la comunicazione del titolare del vecchio fornitore che dopo aver dato disponibilità a impostare i record DNS verso il nuovo server, invita cordialmente a aggiornare la versione di WordPress, nonchè manlevarsi da ipotetiche proprie responsabilità di problematiche sistemistiche, farm, o sistema operativo.

Decidiamo pertanto di testare sui nostri sistemi il tutto, configurandolo in virtual hosting su server Linux, separando i privilegi e girando in PHP-FPM avendo cura di aver abilitato Zend OpCache e un tuning a livello webserver NGINX e MySQL Server decisamente ad-hoc al fine di sfruttare al meglio le risorse di sistema disponibili, massimizzando le prestazioni e riducendo i costi in nuovo (ed inutile) hardware.

Va precisato oltretutto che le risorse di sistema in termini di potenza di calcolo e RAM, sono pressochè identiche a quelle scelte dal vecchio fornitore, sebbene il nuovo fornitore avesse scelto un’istanza su Aruba Cloud, piuttosto che una VPS su OVH come preferito  vecchio fornitore.

Il sistema ha reagito in maniera molto positiva, eliminando di fatto tutti i colli di bottiglia e servendo i contenuti in tempi variabili tra 1 e 3 secondi, senza alcun rallentamento e ripristinando la business continuity di un’azienda molto importante a livello mondiale che si trovava ormai da quasi due giorni tagliata fuori dalla rete Internet.

Conclusioni

Avremo sicuramente spazio e modo di dare giudizi alla condotta del vecchio fornitore, non tanto su quello che è stato fatto in fase di messa in opera del sito web, ma quanto non sia stato fatto una volta lamentati problemi seri alla stabilità del server, rimpallando responsabilità ai creatori del sito in una sorta di scaricabarile dimostrando senza ombra di dubbio l’impossibilità di fare di meglio al fine di risolvere la problematica in modo elegante.

La dimostrazione pratica di quanti “esperti” che alla prima problematica  al di fuori degli “standard” non hanno conoscenze a sufficienza per rimboccarsi le maniche e fare un’analisi del problema per poi risolverlo.

La prova tangibile di quante aziende di prestigio con fatturati di milioni di euro l’anno e centinaia di dipendenti non sappia scegliere un partner affidabile sotto il punto di vista sistemistico.

La dimostrazione reale che ancora una volta di fronte a problemi di natura sistemistica, siamo in grado di approcciare all’arte del problem solving garantendo professionalità e competenza in ambito di sistemistica avanzata su Linux.

La consapevolezza che un sistema Linux configurato ad hoc possa fare una differenza notevole in termini di prestazioni, potendo così risparmiare notevoli cifre che sarebbero altrimenti state investite inutilmente in hardware, non avendo avuto la brillante idea di rivolgersi a dei seri professionisti e specialisti nella configurazione di server linux.