FastPHP y métodos para escalar aplicaciones PHP

Autor: Armonth | El jueves 07 de diciembre del 2006 @ 21:33.

Justin Silverton de "When Pinguins Attack" (blog desaparecido) publicó en agosto de este año un artículo sobre FastPHP y otros métodos para mejorar la escalabilidad de aplicaciones hechas en PHP. Como el artículo me ha gustado y creo que merece la pena pues le he dedicado un rato para traducirlo y publicarlo:

1) Cache de código objeto

Cada vez que una petición llega a nuestro servidor a por un script en php, éste tiene llamar al compilador y ejecutar el código objeto resultante. Si este está cacheado, el primer paso no es utilizado y al final obtenemos un script más rápido.

Hay muchos paquetes para cachear código objeto disponibles en Internet (algunos gratuitos, algunos comerciales), por ejemplo:

  1. Ioncube.
  2. Zend Encoder.
  3. Turck MMCache.

2) Sistemas de plantillas

Los sistemas basados en plantillas proporcionan una manera diferente de cachear. Cachear el contenido. Los sistemas de plantillas funcionan bien en situaciones donde hay información estática en una o varias de tus páginas y no es necesario recargar. Estos sistemas además proporcionan una separación entre código y HTML, solamente mejorara un poco pero hará más fácil añadir futuras mejoras. Muchos sistemas de plantillas para PHP están disponibles de forma gratuita:

  1. Smarty Templates.
  2. Pear Templates
  3. PHP savant

3) Sistemas distribuidos de cache de código objeto

De estos sistemas el más abiertamente usado es Memcached.

Estos sistemas hacen tu sitio mucho más rápido cacheando la mayoría de datos de tu base de datos dentro de un gran almacén de memoria. Un interesante extracto del sitio:

"Danga Interactive developed memcached to enhance the speed of LiveJournal.com, a site which was already doing 20 million+ dynamic page views per day for 1 million users with a bunch of webservers and a bunch of database servers. memcached dropped the database load to almost nothing, yielding faster page load times for users, better resource utilization, and faster access to the databases on a memcache miss."

4) Variables de PHP a configurar

variables_order = 'GPC'
register_argc_argv = 'Off'
register_globals = 'Off'
always_populate_raw_post_data = 'Off'
magic_quotes_gpc = 'Off'

Además, desactivar register_globals es una buena medida para añadir seguridad a tu servidor.

Desactivar el registro de errores: es una buena idea mantener activado el registro de errores mientras desarrollas tus scripts pero es algo bien sabido que reduce el rendimiento.

Usar la dirección IP para acceder a tu base de datos: aunque no siempre es posible, obtendrás un ligero aumento de velocidad al acceder a tu base de datos mediante IP en lugar de mediante hostname.

5) Salida comprimida

La mayoría de los navegadores de estos días soportan la compresión GZIP. La compresión Gzip puede reducir el tamaño de los ficheros enviados en un 80%, a cambio eso sí de una penalización: el consumo de CPU aumentará en torno al 10%.

El beneficio de usar compresión no es solamente el hecho de que el ancho de banda disminuirá si no que tus páginas cargaran más rápidamente.

Para activarlo en PHP añade (si no lo están) o cambia el valor de las siguientes líneas:

zlib.output_compression = On
zlib.output_compression_level = X

Donde X es un nivel de compresión distinto de 1 a 9. Prueba distintos valores para ver cual funciona mejor en tu sistema.

Si estas usando Apache debes activar el módulo mod_gzip. Es altamente configurable y tiene la habilidad de modificar la salida basandose en el MIME, los ficheros o los parametros del navegador.

6) Otras cosas que pueden ayudar

Cuando uses una base de datos, saca solamente los datos que que vayas a usar. Puede sonar a una perogrullada pero alguna vez he trabajado en proyectos donde el programador original ha usado SELECT * FROM tabla cuando tranquilamente podría haber usado SELECT CampoNecesario FROM tabla.

Usa índices en las tablas de la base de datos siempre que sea necesario. Trucos especificos del lenguaje: he encontrado un interesante artículo que habla de otros trucos interesantes que puedes usar.

Comentarios