Questo è un mio articolo già pubblicato su Wazi
PHP è un linguaggio ampiamente utilizzato, offre scripting di scopo generale ed è adatto per lo sviluppo web. Può essere integrato nell’HTML, ed è compatibile con tutti i principali sistemi operativi come Linux, molte varianti di Unix, Microsoft Windows, Mac OS X, RISC OS e altro ancora.
Funziona con la maggior parte dei server web più importanti ed è il motore di scripting di molti software popolari come Wordpess, Drupal, phpBB, mediaWiki, Joomla e Moodle solo per citarne alcuni.
Una cosa che non tutti sanno è che si hanno diverse scelte per eseguire PHP sul server, l’opzione più comune è quella usato nello stack LAMP (Linux + Apache + MySQL + PHP): mod_php , questo è il modo più comune per far funzionare php con il vostro server web, ma non è l’unico e per qualcuno è il peggiore in termini di prestazioni, le altre opzioni disponibili sono PHP-FPM (FastCGI Process Manager) e PHP FastCGI , un altro modo di eseguire uno script PHP da un server web potrebbe essere usare il metodo con CGI tradizionale , ma per le sue scarse prestazioni in termini di performance questo metodo non è più usato
In questo articolo vi mostrerò i pro ed i contro di questi metodi diversi di usare PHP con il vostro server web e, come prima cosa vi do un suggerimento generale per accelerare le prestazioni del PHP.
Acceleratori PHP
Gli acceleratori PHP chiamati anche op-code cache aumenterano le prestazioni delle applicazioni PHP, mettendo in cache la parte compilato degli script php.
Un acceleratore PHP in genere riduce il carico del server e aumenta la velocità dei vostri script PHP da 1 a 10 volte a seconda del numero di pagine differenti e script php che vengono utilizzati e memorizzati nella cache.
Il mio suggerimento è quello di utilizzare APC, questo è un op-code cache mantenuto dagli sviluppatori di PHP ed è previsto che sia integrato in PHP dalla versione 5.4, quindi questo lo rende uno dei migliori sistemi di cache integrata per PHP.
Questa è la sintesi di come un programma PHP viene eseguito dal motore Zend, questi sono i passaggi per andare dallo script PHP al codice realmente utilizzato dal motore, questo è comunemente noto come “opcodes”, che rappresenta la funzione del codice.
- Il primo passo è la lettura del codice PHP dal filesystem e metterlo in memoria.
- Lexing : Il codice PHP viene internamente convertito in tokens o lexicons.
- Parsing : Durante questa fase, i token vengono elaborati per ottenere espressioni significative.
- Compiling : Le espressioni derivate vengono compilate in opcodes.
- Executing : Gli opcodes vengono eseguiti per ottenere il risultato finale.
L’obiettivo di APC è saltare i passaggi da 1 a 4, la memorizzazione nella cache in un segmento di memoria condivisa degli opcodes generati e, quindi la copia nel processo di esecuzione in modo che Zend possa effettivamente eseguire gli opcodes.
APC è anche molto facile da installare e configurare, e quindi, in generale, il mio suggerimento è quello di utilizzarlo ogni volta che si dispone di un’installazione di PHP.
Ma ora diamo uno sguardo a come è possibile eseguire PHP sul vostro server web.
Apache + Mod_PHP
Apache rimane il server web più diffuso al mondo e il modo più facile per usarlo con PHP è quello di installare il pacchetto mod_php.
Questo pacchetto è di solito presente nel repository di qualsiasi distribuzione Linux come Centos , Debian o Red Hat e quindi l’installazione e la gestione di esso è molto semplice e questo è il motivo principale del successo di questo metodo di esecuzione del PHP.
Con mod_php l’interprete PHP è “embedded” all’interno del processo di Apache: non c’è un processo PHP esterno chiamato da Apache, il che significa che Apache e PHP sono in grado di comunicare meglio, la configurazione di questo modulo è molto semplice e di solito è incorporata nelal configurazione principale di Apache, il problema che si può vedere con questo è che il mod_php viene caricato da ogni singolo child Apache e così il processo diventato più grande (in termini di memoria) viene utilizzato anche per servire risorse statiche, come i file di immagini, css e javascript.
Un altro “problema” di questo metodo è che funziona solo su Apache, di solito questo non è un problema, in quanto Apache è il server web più completo che si possa trovare, ma siti web che girano su VPS di piccole dimensioni o grandi siti web che devono servire milioni di pagine al giorno potrebbero cercare una soluzione diversa da questo server Web in grado di scalare verso l’alto o verso il basso meglio di Apache, e quindi devono scegliere anche un modo diverso per eseguire PHP.
mod_php:
Pro:
- Facile da installare ed aggiornare.
- Facile da configurare con Apache.
Contro:
- Funziona solo con Apache.
- Rende ogni singolo processo di Apache più grande (in termini di memoria).
- A bisogno di un restart di apache per leggere gli aggiornamenti al file php.ini.
FastCGI PHP
FastCGI è un protocollo generico per interfacciare programmi interattivi con un server web. FastCGI è una variante del precedente Common Gateway Interface (CGI); l’obiettivo principale di FastCGI è quello di ridurre l’overhead associato con l’interfaccia del server Web e dei programmi CGI, e consente a un server web di gestire più richieste di pagine in parallelo.
FastCGI può essere utilizzato con molti server web, c’è un mod_fcgid per Apache per una facile integrazione, ma può essere utilizzato anche con altri server web popolari come: Lighttpd, Nginx, Cherokee o IIS.
Con FastCGI è possibile impostare più versioni di PHP, questo è particolarmente utile quando si dispone di vecchio sito fatto per PHP 5.1, e che non è compatibile con l’ultima versione di PHP, con FastCGI si può servire con un vecchio PHP questa sito, mentre si utilizza la versione più recente per tutti gli altri, questo non è possibile con mod_php.
Si può utilizzare FastCGI anche con suexec per assegnare utenti diversi alle proprie istanze di PHP. Si riduce l’occupazione di memoria del server web, ma si ha ancora la velocità e la potenza di tutto il linguaggio PHP.
FastCGI:
Pro:
- Compatibile con molti web server.
- Utilizzo di memoria di dimensioni più piccole di mod_php.
- Più opzioni di configurazione : PHP multipli o suexec
Contro:
- Richiede più configurazione di mod_php.
- Meno conosciuto dai tecnici.
PHP-FPM
Questo è la variante più recente per utilizzare PHP con un server web, nata solo a metà del 2009, gli sviluppatori hanno cambiato il formato del PHP-FPM per essere più modulare, ed ora non è più una patch che deve essere applicata a PHP, PHP-FPM (FastCGI Process Manager) è un’alternativa PHP all’implementazione FastCGI con alcune funzionalità aggiuntive che possono essere molto utili sia per siti su piccole VPS che per soluzione su molti grossi server.
Esso ha molti punti in comune con FastCGI e quindi questa soluzione può essere utilizzata con qualsiasi webserver che è compatibile con FastCGI, una combinazione comune nel web è Nginx + PHP-FPM, alcune caratteristiche di questa soluzione sono:
- Gestione dei processi. Possibilità di arrestare e avviare i processi PHP senza perdere qualsiasi richiesta. In questo modo è possibile fare l’aggiornamento della configurazione e dei binari senza perdere nessuna richiesta.
- Avvio dei processi con diversi uid/gid/chroot ambiente ed opzioni di php.ini diverse.
- Possibilità di riavviare in emergenza tutti i processi in caso di distruzione accidentale della cache condivisa della memoria degli opcodes, se si utilizza un acceleratore
PHP-FPM:
Pro:
- Compatibile con molti web server.
- Utilizzo di memoria di dimensioni più piccole di mod_php.
- Più opzioni di configurazione di FastCGI
Contro:
- Richiede più configurazione di mod_php.
- Meno conosciuto dai tecnici.
- Per alcune persone questo progetto è ancora “troppo giovane” e pensano non sia abbastanza stabile
Conclusioni
Non posso dire quale è il metodo giusto per voi o la vostra azienda per utilizzare PHP, io sto usando mod_php per la sua stabilità e il fatto che è così ben conosciuto in grandi progetti e PHP-FPM su VPS di piccole dimensioni dove è importante il risparmio della memoria, mantenendo prestazioni elevate. La cosa importante da tenere a mente è che ci sono diverse soluzioni disponibili e sapere tutto su di loro è fondamentale al momento di pianificare il progetto.
Riferimenti:
Tutto quello che c’è da sapere su APC
Popular Posts:
- None Found
PHP-FPM wipes the floor with the listed methods but it’s hard to use in shared environments. For that, use apache2 with mpm-itk core or suphp, but for a normal, everyday webserver PHP-FPM + nginx does a way faster work while eats predictable amount of memory. Not necessary lower,but predictable, and that’s key agrument point.