Escalando PHP de una sencilla forma

Antes de desarrollar nuestro proyecto web es importante saber o calcular que tanto trafico tendrá para de esta manera planear nuestra arquitectura y claro dejando un hueco para la escalabilidad. Aun que existen diversas herramientas tanto para el código como para el hardware a veces no nos es posible implantarlas ya sea por limitaciones de nuestro servidor, arquitectura u otras circunstancias.

 

 

Pues bien el día de hoy les daré una orientación de como podemos escalar nuestra aplicación de manera sencilla, y sin agregar algún software adicional y claro mucho menos hardware, lo que haremos será implantan un sistema de cacheo.

La idea

Cada vez que recibamos una solicitud nuestra aplicación comprobara si esta se encuentra en cache de ser así, simplemente la leerá  y la servirá evitando que se ejecute nuestro script (ejecutar consultas, construir el HTML, etc). en caso de no no encontrarse cacheada simplemente seguirá el flujo normal que será ejecutar dicho script.

para evitar que nuestra web se convierta una pagina estática, estableceremos un tiempo para actualizar la cache de una pagina.

en este ejemplo la cache se actualizara cada hora.

$timeout = 3600; // 1 Hora
$file = '/tmp/cache/' . md5($_SERVER['REQUEST_URI']);

if (file_exists($file) && (filemtime($file) + $timeout) > time()) {
    // Output the existing file to the user
    readfile($file);
    exit();
} else {
    // Setup saving and let the page execute:
    ob_start();
    register_shutdown_function(function () use ($file) {
        $content = ob_get_flush();
        file_put_contents($file, $content);
    });
}

 

Es importante tener en cuenta que el script anterior se basa en peticiones. por lo que si manejamos resultados en base a la sesión de usuario entonces deberemos registrar esta en la cache.

Para comprender mas el script puedes visitar la documentación de register_shutdown_function.

Un inconveniente de esta técnica de cacheo seria el espacio utilizado en disco, por lo que podremos implementar un script para que se encargue de la limpieza (recomendable ejecutar en las horas donde el trafico es menor).

 

En kumbiaPHP

KumbiaPHP implementa el sistema de cacheo para los partials, de no especificar el segundo parámetro nuestra vista no será cacheada.

View::partial('menu',1000);

El valor mínimo de tiempo en cache es de 1000 (un segundo).

En la invocación del partial. anterior  se manda llamar al menú el cual se genera desde la base de datos, como no es muy común que cambien las opciones entonces no es conveniente hacer las consultas a la BD por cada petición así que mejor lo cacheamos. si vas al directorio temp/cache encontraras que este contiene el código HTML del menú.

basándonos en esta misma lógica es como funcionara el script, pero con la diferencia que esta cachea por petición.

 

Documentación del partial.

/**
	 * Renderiza una vista parcial
	 *
	 * @param string $partial vista a renderizar
	 * @param string $time tiempo de cache
	 * @param array $params
	 * @return string
	 * @throw KumbiaException
	 */
	public static function partial($partial, $__time=FALSE, $params=array())
	{
...
}

Leave a Reply

Your email address will not be published. Required fields are marked *