Alternative PHP Cache

Alternative PHP Code es un módulo de PHP que almacena la salida del compilador de bytecode de PHP en memoria compartida, de forma que reduce el tiempo de análisis y acceso a disco de cargas posteriores.

Este módulo convierte a PHP en algo similar a lo que hacen los intérpretes de otros lenguajes como Python por ejemplo. Python guarda este bytecode en archivos con la extensión pyc para luego reutilizarlo, en lugar de analizar y compilar cada archivo de código fuente cada vez.

Los tiempos de carga de aplicaciones como Drupal se mejoran considerablemente, algo que ya se puede notar ahora mismo en la página web del centro.

Para probarlo, hemos utilizado ab, una herramienta de benchmarking incluída con el paquete apache2-utils.

grafica_php-apc_1

Esta prueba muestra el tiempo medio de la petición del documento principal de tres páginas interiores diferentes del CiTIUS desde la red interna del centro. Se han hecho un total de 100 peticiones por prueba.

El tiempo de carga incluye todo el intervalo de tiempo desde que se solicita el documento hasta que se recibe completo. En los tres casos se aprecia una mejora notable usando PHP con el módulo de APC, con tiempos que en ningún caso alcanzan los 60ms, comparado con PHP sin el módulo, con tiempos que no bajan nunca de los 120ms.

grafica_php-apc_2

Haciendo la misma prueba desde un servidor localizado en otro país, estas diferencias no son tan notables porque APC solo influye en el tiempo en que PHP tarda en compilar el documento, y en este caso aparecen otros tiempos más constantes entre ambas pruebas, causados por la conexión en si. Con todo ello, se aprecian claramente las mejoras de velocidad, que rondan el 30%.

Un pensamiento en “Alternative PHP Cache

  1. Álvaro Acción

    Son ganancias muy interesantes. En mi caso hice algo parecido con una web que gestiono de una asociación, aunque utilizando Zend OPCache, que parece ser que es la versión recomendada a partir de PHP 5.5 junto con memcache. Se trata de una web joomla, que se encuentra detrás de un CDN gratuito que se encarga de cachear el contenido estático, funcionando bajo Nginx con PHP-FPM modificados un poco para arañar milisegundos. Serían pues de 3 niveles de caché, empezando por OPCache para los opcodes, luego memcache para consultas y módulos/vistas de joomla y para terminar, Cloudflare con el contenido estático. Las pruebas que realicé dieron tiempos cercanos a los 30ms de tiempo de carga, con 1000 peticiones y 50 usuarios. Cerca del 70% de reducción de tiempo original. De todas formas la principal limitación está en que todos los servicios (nginx, php-fpm, memcached y mysql) se encuentran en una misma máquina debido a restricciones en el presupuesto, cuando para obtener todo el potencial deberían de estar en máquinas separadas (por lo menos 2) para no crear cuellos de botella.

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *