TYPO3
PHP, GNU/Linux, web, Redes, Sistemas
TYPO3 Performance
Recursos sobre TYPO3 en español para sacarle el maximo partido
El efecto "dog-pile" en las caches (como en memcached)
Cuando estamos usando memcached en nuestra aplicación la carga de los servidores de base de datos se reduce bastante, especialmente con queries pesadas. Todavía existe un problema con el uso de cahes cuando expira uno de los valores de la cache y estamos sufriendo un momento de gran tráfico. Si esto ocurre es posible que tengamos demasiados hilos intentando actualizar el valor caducado de la cache.
El efecto "dog-pile" sucede cuando tardas mas tiempo en generar los datos para actualizar la cache que la velocidad de responder a peticiones por segundo. Es decir, si los datos tardan 5 segundos en generarse (para actualizar la cache) y estas sirviendo páginas a un ritmo de 10 páginas por segundo, entonces cuando la cache expira se lanzaran 50 hilos para actualizar los datos de la cache antes de que el primero termine. Los otros 49 hilos innecesarios que estan ahí para actualizar el mismo dato hacen que ese aumento de carga vuelva a cada hilo mas lento, de forma que se crea un circulo vicioso que puede ser fatal para nuestro web.
Un solución para evitar el efecto dogpile (que ya esta implementada en la extension t3p_scalable para TYPO3 y disponible en el TER) es marcar los datos de la cache como caducados y lanzar un hilo (o el menor numero posible) para actualizar los datos y dejar que los otros hilos sigan sirviendo los datos caducados hasta que el hilo de actualizacion termine. Esto que parece facil por escrito se puede conseguir empleando un sistema de dos entradas por clave en la cache con distinta caducidad. Cuando la clave con menor caducidad expira se vuelve a insertar con un valor cualquiera (operacion que se supone inmediata) y se actualizan los datos de la cache.