Comparaison des gestionnaires PHP : CGI, FPM et LSAPI dans l'hébergement

Comparaison des gestionnaires PHP montre clairement comment CGI, PHP-FPM et LSAPI contrôlent l'exécution des scripts PHP et influencent ainsi la latence, l'isolation et les besoins en RAM dans l'hébergement. J'explique les différences de manière pratique, je les classe en fonction des charges de travail et je donne des recommandations pour le choix et la configuration dans l'exploitation quotidienne.

Points centraux

  • PerformanceLSAPI est en tête pour les temps de latence, PHP-FPM fournit des temps de réponse très constants.
  • SécuritéCGI sépare strictement, PHP-FPM isole avec des pools, LSAPI encapsule par utilisateur.
  • Ressources: LSAPI économise de la RAM, PHP-FPM reste efficace, CGI génère des overheads.
  • Compatibilité: PHP-FPM s'adapte à Apache/Nginx, LSAPI brille avec LiteSpeed.
  • Cabinet médicalPour les CMS et les boutiques, je mise généralement sur PHP-FPM ; beaucoup de trafic profite souvent de LSAPI.
Comparaison des gestionnaires PHP modernes dans l'hébergement - CGI, FPM et LSAPI dans le centre de données

Les bases des gestionnaires PHP

Un gestionnaire PHP relie le serveur web au Interprète PHP. CGI démarre un nouveau processus pour chaque requête et obtient ainsi une séparation très propre entre les comptes. Cette séparation prend du temps, car chaque requête charge à nouveau les extensions et la configuration. PHP-FPM garde les travailleurs persistants et répartit les requêtes sur des pools, ce qui réduit les coûts de démarrage et maintient la latence à un niveau bas. LSAPI s'intègre profondément dans LiteSpeed et utilise des processus très légers et durables pour haute efficacité.

Mod_php intègre PHP directement dans le serveur web, mais l'isolation est faible. Je préfère les gestionnaires modernes, car ils permettent d'isoler les sources d'erreur et de maintenir la stabilité de la plateforme sous charge. Ceux qui hébergent beaucoup d'utilisateurs sur un système profitent clairement d'un système séparé. Contexte de l'utilisateur. C'est précisément là que les pools FPM et LSAPI font valoir leurs atouts. CGI reste une option sûre mais lente pour les très petits sites et les scénarios de contrôle spéciaux.

Tableau comparatif : points forts et scénarios d'utilisation

Le tableau suivant résume les caractéristiques principales et les attribue à des charges de travail typiques. Je l'utilise comme aide à la décision rapide pour hébergement php-avec CMS, boutiques ou API. Notez que les performances réelles dépendent également de la mise en cache, du stockage et du profil du réseau. Néanmoins, cet aperçu constitue une base de départ solide pour une première sélection. Ensuite, j'affine la configuration à l'aide de profils de charge concrets et de Valeurs mesurées.

manipulateur Performance Sécurité Consommation de RAM Évolutivité Convient pour
CGI Faible Très élevé Haute Faible Tests, pages statiques ou rarement consultées
PHP-FPM Très élevé Haute Faible Haute Hébergement mutualisé, CMS, APIs
LSAPI Le plus haut niveau Moyen à élevé (par utilisateur) Très faible Très élevé High-Traffic, E-Commerce, Concurrency

CGI marque des points avec Séparation, mais souffre des coûts de démarrage des processus. PHP-FPM offre le meilleur rapport latence/débit/isolation sur les systèmes avec Apache ou Nginx. LSAPI fournit sur les piles LiteSpeed des latences de queue très faibles avec une concurrence élevée. Ceux qui n'utilisent pas de serveur LiteSpeed obtiennent le soutien le plus large avec FPM. Pour les très petits sites, je m'en tiens à des configurations simples ; pour les projets de plus en plus importants, je passe à des configurations plus complexes. FPM ou LSAPI.

Performance sous charge : latence et débit

Parmi la concurrence croissante, on compte surtout les latences P95/P99 et les Stabilité du débit. LSAPI supporte les charges les plus élevées avec des temps de réponse étonnamment réguliers. PHP-FPM suit de près et réagit très bien au réglage du pool, par exemple avec un nombre de processus dynamique. CGI perd sensiblement de la vitesse dès qu'il y a beaucoup de requêtes courtes. Pour des mesures plus approfondies, je vous renvoie à mon article sur le sujet. Comparaison des performances, Il s'agit d'un logiciel qui couvre les charges de travail typiques des CMS et des boutiques.

Je combine systématiquement FPM ou LSAPI avec OPcache, afin que le bytecode ne soit pas constamment recréé. De plus, les caches proxy inversés réduisent le nombre de hits PHP pour les contenus récurrents. Pour les tâches nécessitant une grande puissance de calcul, il est intéressant d'utiliser une file d'attente des tâches afin que les requêtes frontales restent rapides. Pour absorber les pics sporadiques, on utilise un burst scaling de courte durée via des FPM workers supplémentaires. Les temps de latence restent ainsi dans des limites acceptables et la vitesse de traitement est réduite. Temps de réponse cohérent.

Sécurité et isolation dans l'hébergement mutualisé

Dans les environnements multi-utilisateurs, ce qui compte Isolation au moins autant que la vitesse. CGI obtient une séparation très propre grâce à des processus per-request, mais avec beaucoup d'overhead. PHP-FPM isole par pool et permet des limites strictes pour la mémoire, le temps d'exécution et le nombre de processus. LSAPI associe également les processus à des comptes, mais est lié en détail à la pile LiteSpeed. Pour connaître les risques, il est préférable de lire mon article sur Risque de pool pour FPM et impose des limites claires.

Je crée un compte séparé pour chaque compte. piscine avec son propre UID/GID et des droits restrictifs. Je limite ainsi le rayon d'action des attaques possibles et j'empêche les scripts défectueux de voir des données étrangères. Cela comprend des limites pour la mémoire, des requêtes maximales par travailleur et des délais d'attente. Des mises à jour régulières et des droits de fichiers sécurisés complètent le concept. Je minimise ou protège les scripts admin ouverts sur le réseau avec Auth.

Consommation de ressources et gestion de la RAM

La RAM détermine souvent Coûts et la densité par serveur. LSAPI marque des points dans ce domaine avec une empreinte très faible par processus et des changements de contexte économiques. PHP-FPM reste également efficace si je crée des pools de manière dynamique et si je dimensionne proprement les limites. CGI gaspille de la mémoire par le rechargement fréquent d'extensions et ne convient donc guère aux projets dynamiques. Celui qui héberge de nombreux comptes gagne nettement plus de réserves par nœud avec FPM ou LSAPI et maintient la Coût total planifiable.

Je mesure régulièrement les pics de RAM et j'observe leur répartition au cours de la journée. Les pics indiquent un nombre de travailleurs trop faible ou des stratégies de mise en cache défavorables. Je réduis les besoins avec un pool sizing plus fin et un OPcache tuning ciblé. Cela réduit les risques d'échange et prévient les pics de latence imprévisibles. Sur les hôtes surchargés, je déplace certains Sites sur ses propres nœuds, avant que la performance globale n'en souffre.

Compatibilité avec Apache, Nginx et LiteSpeed

Le choix du serveur web oriente la décision lors du manipulateur. PHP-FPM fonctionne parfaitement derrière Nginx et se connecte proprement à Apache via un proxy. Dans les environnements Apache, je conseille d'utiliser mpm_event, Keep-Alive-Tuning et une configuration proxy stable. LSAPI déploie tout son potentiel avec LiteSpeed et lit efficacement les fichiers .htaccess. Pour ceux qui utilisent déjà LiteSpeed, LSAPI permet souvent d'obtenir le dernier morceau. Performance dehors.

Pour les contenus statiques, je me sers de Nginx ou de LiteSpeed directement à partir du cache du serveur web. PHP ne traite que ce qui doit rester dynamique. Cette séparation permet de réduire la charge sur le gestionnaire et d'économiser du temps CPU. L'effet secondaire est l'augmentation de la constance du TTFB lors des appels de pages récurrents. Ainsi, les frontaux restent réactifs, même lorsque back-ends sont sous pression.

Meilleures pratiques pour les pools PHP-FPM

Je commence par un conservateur Disposition de la piscine par site et mesurer les pics réels. Ensuite, j'adapte pm, pm.max_children, pm.start_servers et pm.max_requests. Des pools trop petits font attendre les requêtes, des pools trop grands mangent de la RAM et génèrent des changements de contexte. Pour WordPress, WooCommerce ou TYPO3, je choisis en général dynamic ou ondemand et régule étroitement les limites. J'ai donné des détails sur pm.max_children dans mon guide pm.max_children résumés.

Je fixe des limites comme memory_limit et max_execution_time par pool. J'évite ainsi que des scripts individuels ne bloquent des ressources ou ne débordent. request_terminate_timeout protège contre les processus suspendus qui s'empilent sinon. max_input_vars et upload_max_filesize, je les sécurise de manière judicieuse, en fonction du projet. Ainsi, les pools restent contrôlable et l'hôte stable.

Mise en cache et OPcache en pratique

Pour moi, OPcache fait partie de chaque Installation de PHP. Je l'active, je contrôle la taille et j'observe le taux de réussite. Pour de nombreux déploiements, j'active file_cache_only et tune revalidate_freq pour que les déploiements soient rapides. En outre, j'utilise des caches proxy inversés et des plugins de cache de page dans les CMS pour réduire le taux d'occurrence de PHP. Moins il y a de requêtes en PHP, mieux c'est. tout.

Ceux qui font un usage intensif des sessions côté serveur profitent souvent de Redis. Je régule les TTL et gère strictement les limites de mémoire. Pour le cache de pages complètes, je réfléchis à des clés de cache et à des stratégies d'invalidation afin que les boutiques puissent livrer correctement après des changements de prix ou de stock. Un plan de cache clair permet d'économiser du CPU, de la RAM et du temps. L'interaction entre OPcache, proxy cache et Cache des applications décide au final de la vitesse perçue.

Matrice de décision : Quel gestionnaire correspond à quel projet ?

Les petits sites à faible trafic fonctionnent en toute sécurité avec PHP-FPM et des limites conservatrices. Les environnements de test purs ou les exigences de conformité spécifiques peuvent rendre CGI utile, malgré une perte de vitesse. Les boutiques à fort trafic et les API fortement concurrentielles profitent souvent de LSAPI sur LiteSpeed. Ceux qui ont besoin d'une compatibilité et d'une flexibilité maximales se tournent de manière fiable vers FPM. Pour hosting php avec WordPress ou WooCommerce, je préfère FPM en tant qu'outil polyvalent. Allrounder avant.

Je ne prends jamais de décision uniquement sur la base d'un benchmark. Au lieu de cela, je mesure le mélange réel de hits statiques, de pages dynamiques et d'appels API. La durée moyenne des scripts et le pourcentage d'occurrences en cache influencent également le choix. En outre, je tiens compte des habitudes des administrateurs, comme les déploiements fréquents ou les processus de construction. La meilleure solution reste celle qui fonctionne dans des conditions réelles. Conditions fonctionne de manière stable et rapide.

Coûts, licence et exploitation - qu'est-ce qui est rentable ?

Sur des vues de coûts purs, cela a un effet FPM attractif, car il ne nécessite pas de licences supplémentaires. LSAPI peut réduire les coûts d'exploitation par site grâce à une meilleure densité et à des latences plus faibles, mais nécessite des licences LiteSpeed en euros. Si les clients payants sont nombreux, cela est souvent rentable, mais généralement pas pour les projets de loisir. CGI entraîne des coûts indirects en raison d'une utilisation inefficace des ressources et de temps de réponse plus longs. C'est pourquoi je calcule l'ensemble de l'exploitation et économise là où cela est possible. Qualité ne sont pas menacés.

Il reste important de pouvoir planifier. Un hôte qui est trop surréservé fait des économies à court terme, mais il le paie par des pannes et des utilisateurs insatisfaits. Les outils modernes d'observabilité aident à détecter rapidement les goulots d'étranglement. En ajoutant régulièrement des capacités, les latences restent stables et le support est moins sollicité. Au final, la solution gagnante est celle qui préserve les ressources et Temps de fonctionnement reste élevé.

Versions multi-PHP, déploiements et temps de descente zéro

Au quotidien, je pratique souvent plusieurs Versions de PHP en parallèle. Avec FPM, cela se fait proprement via des pools séparés et des sockets propres à chaque version. Je peux ainsi migrer les sites progressivement sans perturber l'ensemble du système. Je planifie des mises à jour par roulement : d'abord le staging, puis un petit groupe de production, enfin le reste. Graceful Reloads (FPM : reload au lieu de restart) évitent les ruptures brutales et maintiennent les connexions ouvertes. Pour LSAPI, j'utilise des mécanismes analogues dans la pile LiteSpeed afin de préchauffer les travailleurs et de minimiser l'effet de démarrage à froid.

Pour les déploiements à temps de descente zéro, je veille à des stratégies de release atomiques avec des symlinks et des Validation de l'OPcache. Après la commutation, je vide les caches de manière sélective sans tout jeter. Ainsi, les temps de latence restent stables et les nouveaux déploiements se font rapidement à chaud. Important : les permissions de fichiers et les propriétaires doivent être corrects, sans quoi les workers FPM ou LSAPI bloquent les nouvelles versions.

Sockets vs. TCP : des choix architecturaux lourds de conséquences

La connexion du gestionnaire se fait soit par Socle Unix ou via TCP. Les sockets permettent d'économiser des frais généraux et fournissent généralement des temps de latence légèrement meilleurs sur un hôte. TCP est intéressant si le serveur web et le gestionnaire sont séparés ou si je veux répartir des pools sur plusieurs nœuds. mettre à l'échelle souhaite. Pour TCP, je définis proprement les délais d'attente, le keep alive et le backlog afin d'éviter les erreurs 502/504 lors des pics de charge. Dans les configurations Apache, je tiens compte du nombre de proxy-workers actifs, dans Nginx des limites pour les connexions ouvertes. Avec LSAPI, LiteSpeed se charge de beaucoup de choses en interne, mais je vérifie régulièrement le backlog et les files d'attente sous charge.

J'observe la longueur de la file d'attente sur l'état du FPM, la charge des worker et la saturation du CPU. Une file d'attente élevée avec une faible charge indique souvent des goulots d'étranglement dans le frontend (par ex. trop peu de worker Nginx) ou des Freins d'E/S de l'ordinateur. Ce n'est que lorsque je connais le goulot d'étranglement que j'augmente les processus enfants ou que j'adapte les paramètres réseau.

Surveillance, métriques et dépannage

Pour l'observation, je mise sur Surveillance holistique: logs du serveur web, état du FPM, métriques du système (CPU, RAM, I/O), logs des applications et contrôles synthétiques. Le rapport FPM est particulièrement précieux.Slowlog, pour détecter les valeurs aberrantes. Je corrèle les latences P95/P99 avec les pics de l'unité centrale, le taux de réussite de la mémoire cache, le nombre de processus en cours et les latences de la base de données. Si la latence P99 augmente, je vérifie d'abord les files d'attente et les délais d'attente entre le proxy et le gestionnaire.

En cas d'incident, je travaille de l'extérieur vers l'intérieur : 1) codes d'erreur HTTP et heure, 2) erreurs de proxy/serveur web, 3) files d'attente des gestionnaires et états des travailleurs, 4) logs d'application, 5) systèmes backend (DB, cache, système de fichiers). Les causes fréquentes de 502/504 sont des délais d'attente trop stricts, des flux montants bloquants ou des épuisé Capacités du pool. Contre-mesure simple : des délais réalistes, des limites claires et un système d'alerte qui avant de l'épuisement.

Systèmes de fichiers, realpath et détails de l'OPcache

Les accès aux fichiers ont un impact sur la latence plus important que beaucoup ne le pensent. Je fais attention à la rapidité Chemins de stockage pour le code et les modèles. Sur les systèmes de fichiers en réseau (par ex. NFS), les paramètres realpath et OPcache sont critiques. Une taille realpath_cache_size suffisamment grande et un ttl approprié empêchent les résolutions de chemin permanentes. Dans l'OPcache, je dimensionne memory_consumption, interned_strings_buffer et le nombre de Tables de hachage Je règle validate_timestamps et revalidate_freq en fonction du flux de travail de déploiement, afin que les modifications prennent effet rapidement, mais ne déclenchent pas de vérifications toutes les secondes.

Pour les grandes bases de code, il vaut la peine Preloading pour les classes et fonctions centrales. Ainsi, les workers FPM ou LSAPI économisent du temps CPU dans le hot path. Je ne teste le JIT que là où il y a de véritables bottlenecks CPU (beaucoup de logique numérique). Pour les CMS classiques, JIT apporte rarement des avantages ; une configuration OPcache propre et un chemin d'E/S rapide sont plus importants.

Connexion à la base de données et au cache : éviter la latence

De nombreux problèmes de performance ne proviennent pas du gestionnaire, mais de Bases de données et les caches. Je surveille les temps d'exécution des requêtes, les pools de connexions et les verrous. Les connexions persistantes peuvent aider, mais elles lier de RAM dans les travailleurs. C'est pourquoi je dimensionne pm.max_children en fonction des limites de connexion de la base de données et je contrôle les délais d'attente. Pour les accès Redis/Memcached, une faible latence du réseau et des délais d'attente sont également essentiels. J'utilise le traçage dans l'application pour détecter et réduire les requêtes N+1, ce qui réduit la charge sur les gestionnaires et le backend.

En cas de forte concurrence, il est souvent judicieux de le faire, écrivant de découpler les processus (files d'attente, tâches asynchrones) et de mettre en cache les accès en lecture. Ainsi, les requêtes frontales restent courtes et la variabilité des temps de réponse diminue.

Conteneurs, chroot et aspects du système d'exploitation

Ceux qui utilisent FPM ou LSAPI dans glanage gagne en flexibilité au niveau des versions et des limites. Il est important d'avoir des ulimits correctes, un ordonnanceur de processus efficace et des quotas CPU/mémoire adaptés. Des quotas trop élevés génèrent des bégaiements dans les temps de latence de P99. Dans les configurations classiques, chroot/jail ou une isolation des utilisateurs via des espaces de noms aide à séparer strictement les accès aux fichiers. Je garde les images légères afin de réduire les temps de démarrage à froid (par exemple après un rollout) et je préchauffe les pools avant que le trafic ne bascule.

Rotation du logo et Pression de retour-Les stratégies d'enregistrement sont obligatoires : les disques pleins ou les enregistreurs de logs bloquants ont un impact direct sur les temps de réponse. De même, je calibre les stratégies Swappiness, HugePages (le cas échéant) et NUMA sur des hôtes avec de nombreux cœurs, afin que les travailleurs ne soient pas ralentis par des accès mémoire à travers les nœuds.

Unités LSAPI et FPM en service

LSAPI bénéficie de processus stables et durables et d'un dispatch de requêtes efficace. Je régule le nombre maximal de requêtes par travailleur afin de limiter les effets de fuite de mémoire et j'observe les redémarrages en direct. Avec FPM, je choisis ondemand pour les sites dont le trafic est irrégulier, dynamique pour une charge constante. Je définis pm.max_requests de manière à ce que les fuites sporadiques ou la fragmentation ne jouent aucun rôle. Je définis request_slowlog_timeout de manière suffisamment étroite pour détecter rapidement les vrais accrocs, mais pas au point que les opérations d'administration complexes déclenchent une alarme sans arrêt.

Dans les deux mondes, je vérifie les Voies de signalisation pour les relances et définir des chemins d'escalade si les travailleurs ne redémarrent pas proprement. Cela permet d'éviter qu'un déploiement en milieu de journée ne vienne perturber la plateforme.

Liste de contrôle : Sélection et réglage dans la pratique

  • Définir l'objectif : un maximum de Compatibilité (FPM) vs. latence minimale de la queue (LSAPI) vs. séparation très dure (CGI).
  • Clarifier le rôle du serveur : Configuration d'un seul hôte (socket Unix) ou niveaux séparés (TCP) - Définir les timeouts/backlog de manière appropriée.
  • Pools par compte/site : UID/GID propre, limites étroites pour la mémoire, les requêtes et le temps ; activer le slowlog.
  • OPcache : taille suffisante, taux de réussite élevé, stratégie de revalidation adaptée au déploiement ; préchargement si nécessaire.
  • Stockage : chemin rapide pour le code/cache, dimensionner le cache realpath, tenir compte des particularités NFS.
  • DB/Cache : connexions et timeouts cohérents avec pm.max_children ; éliminer les requêtes N+1.
  • Couche de mise en cache : combiner le proxy inverse, le cache des pages et le cache des applications ; invalider au lieu de vider aveuglément.
  • Observability : P95/P99, longueur de la file d'attente, états des travailleurs, taux d'appel de l'OPcache, E/S et latences du backend en vue.
  • les déploiements : Graceful reloads, warmup, déploiements atomiques, validation sélective de la mémoire cache.
  • Planification des capacités : réserves de bursts, pas de surréservation ; évaluer de manière réaliste les coûts/bénéfices des licences LSAPI.

En bref : mon classement

Pour les environnements d'hébergement mixtes, il fournit PHP-FPM le meilleur équilibre entre performance, isolation et compatibilité. Sur les piles LiteSpeed, LSAPI apporte des avantages mesurables en termes de latences de queue et de consommation de RAM. CGI convient pour une séparation stricte dans les cas de niche, mais perd du terrain dans les projets dynamiques. Je mise d'abord sur FPM avec des limites de pool claires, un OPcache activé et une configuration de serveur web propre. Ceux qui s'attendent à une concurrence particulièrement forte testent LSAPI sur LiteSpeed et prennent ensuite une décision. Coût-bénéfice-décision.

Derniers articles