Apache et PHP sont dans un bateau

Une des notions fondamentales qu’un développeur PHP doit comprendre c’est la manière de mettre PHP et Apache sur le même bateau.

  1. Monoprocessus avec mod PHP et mpm_prefork

2. Multiprocessus avec PHP-FPM (FastCGI Process Manager) et mpm_worker ou mpm_event

Comprendre comment PHP est « interprété » est nous le pensons primordial pour monter en compétences.

 

Ainsi, pour faire fonctionner Apache et PHP, on a besoin d'un SAPI.

 C’est une interface de programmation d’application serveurs, module Apache disponible sous forme de librairie dynamique appelée dynamic shared object, DSO.

Il est compréhensible par Apache et c’est lui qui fait l’interface entre PHP et Apache.

 

Heureusement, Apache et PHP sont des programmes C, ce qui a facilité la vie aux développeurs qui ont conçu ces SAPI.

 

Le module Prefork avec Mod_PHP est celui qui est le plus souvent utilisé et qui est activé par défaut sur la LAMP stack.

C’est un choix qui a été fait pour éviter tous les problèmes liés aux librairies PHP développées par des tierces qui ne sont pas thread-Safe.

 

 

Mod PHP, module Prefork, multiprocessus, 1 requête = 1 processus

 

Avec son module Prefork, un processus principal va lancer plusieurs enfants qui vont se mettre en attente des connexions avec un traitement progressifs des requêtes.

Le processus Apache embarque PHP et interprète les fichiers PHP.

Quand une requête entre sur le serveur, un premier processus parent écoute sur le port 80/443, puis dispatche le traitement des requêtes aux processus fils créés grâce à fork (méthode en langage C  sous unix permettant de créer de nouveaux processus).

 

Par exemple pour 250 connexions entrantes :

Nombre de connexions entrantes

Nombre de processus / connexion

Nombre total de processus

250

1

251

 

Avantages

Inconvénients

Facile à installer

 

 Support de la montée en charge

 

 

 Mod_PHP gère les requêtes concernant les assets, si pas configuration dans le vhost

 

Php-Fast Process Manager, Module multiprocessus- multithreads module Worker

 

 Ce module est une évolution PHP FastCGI, les processus PHP et ceux d'Apache sont séparés.

Apache ne gère que l'affichage du résultat. Le processus PHP est un daemon.

Le module mod_fastcgid nécessite l’installation du module MPM_Worker.

 

Les requêtes web d'Apache sont redirigées aux processus CGI (Common Gateway Interface), gérés par fastCGI via le module mod_fastcgid à travers un socket unix.

Les requêtes sont traitées par des threads eux même regroupés dans des processus.

 

Par exemple pour 250 connexions entrantes :

Nombre de connexions entrantes

Nombre de threads / processus

Nombre total de processus

Nombre total de threads

250

25

11

250

Avantages

Inconvénients

Facile à installer

 

Plus difficile à mettre en place, demandant des connaissances plus poussées d'Apache et de sa configuration

 

Gestion plus fine des processus avec « Graceful » (redémarrage en douceur)

 

Problèmes liés aux librairies PHP non-thread Safe

Création dynamique des processus

 

Restriction basée dur l'adresse IP à l’origine des requêtes

 

Statistiques

 

Possibilité de crée de nouveaux processus sous différentes uid/gid, avec chroot des environnements PHP dédiés par projet

 

Augmentation considérable des performances pour la scalabilité

 

 

 

En 2012, avec la sortie de la version 2.4, Apache a publié une version améliorée de son module mpm_worker nommée « mpm_event ».

 

La différence est que le module mpm_event est plus orientée "connexion". Les threads desservent plus d'une connexion client et peuvent faire plusieurs taches indépendamment du temps que dure cette connexion.

 

Ainsi, avec la directive KeepAlive qui est mieux gérée, les threads n’attendent plus la fin de la connexion pour desservir une autre connexion, le thread traite désormais une « requête » et non plus une connexion. Ce qui permet d’encore plus pousser les performances et de se rapprocher d’un traitement concurrentiel des requêtes.

Restez informés sur notre actualité

Inscrivez-vous à notre newsletter pour recevoir les dernières évolutions de notre produit