PHP-FPM, quando la velocità conta!

0
648

Come ben sapete, la missione di Host è quella di garantire la presenza online delle imprese supportando il lavoro quotidiano delle Web Agency (che sviluppano siti web per i loro Clienti). L’offerta di hosting che presentiamo ai nostri Clienti e Partner è pensata per configurarsi sulle reali esigenze del progetto da sviluppare, cresce quando è necessario e, ogni anno, si arricchisce di nuove funzionalità e innovazioni tecnologiche.

Oggi introduciamo una novità all’interno dei nostri profili di hosting: il PHP-FPM. Ma, facciamo un piccolissimo passo indietro per spiegarvi come abbiamo gestito, fino a ieri, tutte le richieste php fatte dagli utenti ai vostri siti ospitati su Host.

La maggior parte degli amministratori di siti (chi li sviluppa e chi li gestisce) sa che PHP, il linguaggio di scripting tra i più utilizzati al mondo, può essere incorporato in HTML e funziona con i principali web server. Tuttavia, l’aspetto meno conosciuto è la modalità con cui può essere eseguito il PHP sul web server, e questo può avvenire in diversi modi.

Facciamo ancora una piccola parentesi per spiegarvi come è composta la nostra piattaforma. Se utilizzassimo l’acronimo LAMP, in quanti sanno di cosa stiamo parlando? Per quelli che non lo sanno, ecco una brevissima definizione:

“LAMP è un acronimo che indica una piattaforma software per lo sviluppo di applicazioni web che prende il nome dalle iniziali dei componenti software con cui è realizzata:

Linux (il sistema operativo)
Apache (il server web)
MySQL o MariaDB (il database management system)
PHP (il linguaggio di programmazione)

La piattaforma LAMP è una delle più utilizzate a livello mondiale. Ognuna delle applicazioni dalle quali è composta è predisposta per l’eccellente funzionamento in concomitanza con le altre.” [Wikipedia]

Fino a ieri, appunto, la modalità con cui eseguivamo le richieste e i processi php sulla nostra piattaforma LAMP era PHP FastCGI. Vediamo insieme, rapidamente, il suo funzionamento. Si tratta di un protocollo generico per l’interfacciamento con un server web. Nello specifico è una variante della precedente Common Gateway Interface (CGI) che ha come obiettivo quello di ridurre il sovraccarico associato all’interfacciamento tra web server e programmi CGI, consentendo ad un server di gestire più richieste contemporaneamente.

Con FastCGI è possibile configurare più versioni di PHP, particolarmente utile quando si hanno vecchi siti web creati, ad esempio, in PHP 5.1 che non sono compatibili con l’ultima versione. Infine, con FastCGI è possibile supportare diversi utenti ognuno con le proprie istanze di PHP. Questa funzione è particolarmente importante per migliorare la sicurezza in un ambiente condiviso, in cui è possibile avere utenti diversi che gestiscono ciascuno i propri siti web.

Come funziona FastCGI?

Grazie al protocollo PHP FastCGI il webserver genera un unico processo in fase di inizializzazione che, al termine della fase di start-up, si mette in attesa. Ogni volta che arriva una nuova richiesta in ingresso, il webserver apre una connessione con il processo fast-cgi (in attesa) che a sua volta genera l’output sulla connessione con il client, trasferitagli dal server. Il vantaggio principale di questo protocollo è la creazione dei processi solo in fase di inizializzazione, ottimizzando così il numero dei processi php.

Cosa cambia con l’introduzione di PHP-FPM?

PHP-FPM è una modalità più recente di utilizzare PHP con un server web, ed è un’alternativa al precedente PHP FastCGI con l’implementazione di alcune funzionalità aggiuntive molto utili soprattutto ai siti che gestiscono, ogni giorno, sempre più traffico (dai siti vetrina agli e-commerce). Per queste tipologie di siti web è necessario quindi avere a disposizione strumenti sempre più performanti, proprio come il PHP-FPM.

Il funzionamento è molto simile al PHP FastCGI e si basa sempre sull’esecuzione ottimizzata dei processi php che vengono creati solo in fase di inizializzazione e rimangono in attesa di una nuova richiesta. La grossa differenza sta nel fatto che è lo stesso PHP-FPM (FastCGI Process Manager) ad eseguire il processo e non più il web server.

Il “Process Manager”, come suggerisce il nome stesso, è uno script che gestisce direttamente i processi PHP. Attende e riceve istruzioni dal server web ed esegue gli script PHP richiesti e consente ad un sito web di gestire carichi intensi. Il PHP-FPM mantiene dei “pool” per rispondere alle richieste PHP e i processi che si generano sono direttamente “figli” (CHILD) del Process Manager e possono quindi essere gestiti separatamente dal web server.

Questa modalità garantisce una maggiore robustezza del servizio, poiché operazioni come i cambi di configurazione o il restart dei processi, impattano i singoli pool FPM e non più l’intero web server.

Vediamo adesso alcune delle caratteristiche tecniche di PHP-FPM:
  • Demonizzazione dei processi PHP (file PID, file log, setsid(), setuid(), setgid(), chroot();
  • Possibilità di riavviare i processi PHP senza causare alcuna interruzione delle richieste in fase di processamento, potrete quindi cambiare qualsiasi parametro nel file di configurazione o addirittura aggiornare PHP senza neanche 1 secondo di downtime!;
  • Possibilità di non processare le richieste provenienti da un determinato IP;
  • Possibilità di avviare i CHILD sotto differenti UID/GID/CHROOT e con differenti impostazioni di PHP (php.ini) il tutto senza bisogno di safe mode;
  • Possibilità di loggare tramite stdout e stderr;
  • In caso di corruzione della memoria RAM condivisa utilizzata da un OPCode Cache, PHP-FPM può effettuare un riavvio di emergenza di tutti i CHILD PHP;
  • Forza l’arresto dell’esecuzione di uno script nel caso in cui set_time_limit() avesse dei problemi.

Infine, per poter garantire sicurezza e velocità ai vostri siti web ospitati sulla piattaforma di Host, abbiamo deciso di implementare il PHP-FPM solo ed esclusivamente a partire dalla versione di php 7. Dopo diversi test di implementazione, abbiamo infatti preferito rendere disponibile questa novità a chi ha aggiornato la propria versione di php alla più recente proprio perché la combinazione di php 7 (e successive versioni) e php-fpm garantiscono maggiori performance a livello di sicurezza e di velocità di risposta.

Ricordiamo infatti che uno dei modi per garantire la massima sicurezza ai vostri siti web e alle vostre applicazioni e mantenerle costantemente aggiornate.

In questo modo potete garantirvi un aumento delle performance, della sicurezza e, di conseguenza, avere un sito di successo per il vostro business online.

PHP-FPM in numeri: qualche dato sulla velocità

Come abbiamo ampliamente spiegato, PHP-FPM velocizza le performance di un ambiente PHP. Ma di che tipo di incremento stiamo parlando? Vediamo insieme il risultato di qualche test per capire meglio di quanto aumenta realmente la velocità di risposta dei siti web con l’implementazione del PHP-FPM.

Il test è stato eseguito mettendo a confronto le performance del PHP FastCGI (con versione di PHP 5.6) vs PHP-FPM (con versione di PHP 7.2) per il caricamento delle homepage di un sito in WordPress, uno in Joomla! e uno in Prestashop.

PHP FastCGI vs PHP-FPM

 

LASCIA UN COMMENTO

Please enter your comment!
Per favore inserisci il tuo nome qui