3 min de lectura

Servidor PHP puro afirma 10x más concurrencia que php-fpm

Qbix Server dice que su diseño de fork tras precarga puede manejar 1,600 solicitudes PHP concurrentes en 8GB de RAM, frente a unas 160 con php-fpm.

Imagen: Hacker News

Qbix Server propone una idea simple pero ambiciosa: ejecutar un servidor web completo en PHP puro, sin nginx, Apache ni php-fpm. Según su README, el proyecto sirve archivos estáticos, scripts PHP, conexiones WebSocket y un panel en vivo desde un único proceso, y puede soportar muchas más solicitudes PHP concurrentes en el mismo hardware.

La afirmación central tiene que ver con el uso de memoria. El proyecto dice que un proceso típico de php-fpm consume 30–60MB porque cada proceso carga la pila completa del framework de forma independiente. En un servidor de 8GB, eso equivale a aproximadamente 160 procesos a 50MB cada uno. Qbix Server, en cambio, precarga clases y configuración y luego hace fork de procesos para que compartan esa memoria mediante copia en escritura (copy-on-write). El README afirma que cada proceso añade solo unos 5MB de memoria por solicitud, permitiendo hasta 1,600 solicitudes PHP concurrentes en la misma máquina de 8GB.

También sostiene que esto reduce la latencia de las solicitudes al eliminar el trabajo de inicialización del framework en cada petición. El proyecto estima un coste de inicialización de 10–50ms para pilas como Laravel, Symfony o Qbix bajo nginx + php-fpm, frente a 0ms una vez que los procesos se han forkeado tras la precarga. En su ejemplo, una petición que tarda 35ms con la pila tradicional cae a 5ms con Qbix Server.

Hay un compromiso. En el servido de archivos estáticos en bruto, los propios benchmarks del proyecto muestran que nginx sigue por delante. En un contenedor de un solo núcleo ejecutando PHP 8.3 en Ubuntu 24, usando un archivo estático de 13KB y caches calientes, Qbix Server alcanzó:

Recomendado

VK Dating desaparece de la App Store, pero el acceso desde iPhone sigue disponible

  • 6,376 solicitudes/s frente a 10,154 solicitudes/s para nginx a c=1
  • 7,253 solicitudes/s frente a 12,919 solicitudes/s a c=50
  • 20,369 solicitudes/s frente a 30,158 solicitudes/s en keep-alive a c=50

Eso sitúa a Qbix Server en aproximadamente el 55–73% del rendimiento estático de nginx. El README dice que hubo cero solicitudes fallidas en 50,000+ solicitudes a concurrencia 50, y que no hubo caídas.

El proyecto también se posiciona frente a FrankenPHP y Swoole. Su argumento es que esos enfoques de trabajadores persistentes pueden filtrar estado entre solicitudes, mientras que Qbix Server mantiene el modelo 'shared-nothing' de PHP forkeando desde un padre precargado. También enfatiza la simplicidad de despliegue: ejecuta php qbixserver.php --port=8080, o usa un PHAR de 196KB.

En cuanto a funciones, el servidor incluye HTTP/2 vía amphp, compresión gzip/brotli, soporte WebSocket, comprobaciones de estado, un panel de control protegido por contraseña, limitación de tasa, y soporte para cabeceras como X-Accel-Redirect y X-Cache-Tree para entrega de archivos controlada por acceso e invalidación de caché a nivel de componente.

El punto más amplio del README es sencillo: C seguirá superando a PHP en E/S sin procesar, pero si tu cuello de botella es la repetida inicialización de PHP y la memoria duplicada de los procesos, la precarga y el fork pueden importar más que las gráficas de benchmarks estáticos.

Tomas Berg

Computing Editor

Tomas lives in the terminal. He covers chips, laptops, and operating systems with a focus on performance and efficiency. He reads kernel changelogs the way other people read fiction, and he's always on the hunt for the perfect mechanical keyboard switch. If it processes data, Tomas has an opinion on it.

vía Hacker News

// Sigue leyendo