Présentation
Qbix Server est un serveur web écrit entièrement en PHP, distribué sous forme d’un seul fichier source ou d’un binaire autonome. Il ne nécessite aucune extension, aucun conteneur Docker et aucune configuration d’adaptateur. Le projet se positionne comme une alternative à la pile traditionnelle nginx + php‑fpm et aux serveurs basés sur Swoole ou RoadRunner.
Architecture et fonctionnement
Le serveur charge l’ensemble du framework (WordPress, Laravel, Symfony, Drupal, etc.) dans un processus parent, puis crée des travailleurs via pcntl_fork(). Le noyau utilise le mécanisme copy‑on‑write (COW) : les pages mémoire du parent sont partagées tant qu’elles ne sont pas modifiées. Chaque travailleur occupe environ 120 KB de RAM, contre 42 MB par processus php‑fpm. Ainsi, 200 MB de mémoire permettent de lancer 400 travailleurs, alors que php‑fpm ne pourrait en exécuter que quatre.
Les travailleurs sont persistants et traitent des milliers de requêtes sans redémarrage. Entre deux requêtes, un instantané basé sur la réflexion restaure les propriétés statiques en 0,03 ms. Vingt‑huit fonctions PHP (par ex. header(), session_start(), ini_set()) sont interceptées au moment de l’inclusion et nettoyées à la fin de chaque requête, garantissant un état « shared‑nothing » même avec du code non modifié.
git clone https://github.com/Qbix/webserver
cd webserver
php qbixserver.phpBenchmarks et performances
Les tests fournis comparent Qbix Server à php‑fpm, Swoole et FrankenPHP sur deux charges : CPU‑bound (similaire à WordPress) et I/O‑bound avec des requêtes de base de données de 50 ms et 200 ms.
- CPU‑bound : php‑fpm (4 travailleurs) ≈ 350 req/s, Swoole (4) ≈ 400 req/s, Qbix (100) ≈ 2 294 req/s (≈ 6,6 ×).
- I/O‑bound 50 ms : php‑fpm (4) ≈ 78 req/s, Swoole (4) ≈ 300 req/s (≈ 4 ×), Qbix (100) ≈ 1 060 req/s (≈ 14 ×).
- I/O‑bound 200 ms : php‑fpm (4) ≈ 20 req/s, Swoole (4) ≈ 200‑500 req/s (≈ 10‑25 ×), Qbix (200) ≈ 488 req/s (≈ 24 ×).
Ces résultats reposent sur le principe que le blocage d’I/O devient négligeable dès que le nombre de travailleurs dépasse largement le nombre de requêtes simultanées. Le COW réduit le coût mémoire de chaque travailleur, permettant d’atteindre des milliers de travailleurs sur une machine de 4 GB.
Compatibilité et limites
Qbix Server prétend supporter WordPress, Laravel, Symfony et Drupal sans modification du code source. Il lit les fichiers .htaccess, gère les en‑têtes de réponse avancés (X‑Cache‑Tree, X‑Accel‑Redirect, ETag) et propose un tableau de bord intégré accessible via /Q/dashboard. Des fonctionnalités supplémentaires incluent WebSocket avec protocole Socket.IO, isolation micro‑service via sandbox, réplication de cluster SQLite, génération automatique de documentation OpenAPI 3.1 et prise en charge TLS, cron et journalisation.
Le serveur reste limité aux environnements où pcntl_fork() est disponible (Linux, BSD). Les performances dépendent fortement de la capacité du système à gérer un grand nombre de processus légers ; sur des OS ou des configurations de conteneurs qui restreignent le nombre de processus, le gain de débit peut diminuer. De plus, aucune mesure de sécurité kernel‑level (par ex. SELinux, AppArmor) n’est intégrée, ce qui peut imposer des contrôles supplémentaires en production.