11 de julio de 2011

Optimización centrada en el caché

La página de noticias que lanzamos a principios de año tiene 25mil visitantes diarios y sigue creciendo poco a poco. Resulta que algunas de las peticiones que esa página hace a la base de datos son muy pesadas, y no sólo son para pedir datos, sino que también actualiza algunos campos. Así que en algunos horarios pico el servidor de base de datos (que de por sí es de uso rudo y con grandes capacidades) se satura, ya sea porque todas las conexiones que permite están siendo ocupadas, como porque las peticiones son demasiado grandes o elaboradas, lo que genera un cuello de botella y el nuestra flamante página de noticias se cae. Situación que dura unos segundos porque acá tomamos acciones manuales correctivas de inmediato, pero que a pesar de su cortísima duración es inaceptable desde el punto de vista de la empresa. Con lo que la segunda mitad de la semana pasada tuve de tarea investigar y resolver el problema.

Las posibles soluciones que descubrí fueron cuatro:

  1. Optimizar las peticiones a la base de datos, es decir pedir lo estrictamente necesario, ni una columna de más, ni un registro de más, nada, sólo los campos que van a desplegarse.
  2. Implementar un sistema de caché (nada que ver con la distinción o elegancia de la que habla la RAE), es decir un mecanismo que guarde en un archivo los datos que de otro modo serían solicitados a la base de datos cada que se pida un contenido dinámico. Y que dicho archivo se actualice por poner un ejemplo cada 10 minutos, de modo que en lugar de que se hagan mil peticiones a la base de datos durante esos 10 minutos sólo se haga una, se guarde esa info, y las restantes 999 peticiones se le hagan a l mentado archivo
  3. Optimizar la estructura de la base de datos, es decir, quitar de la tabla que está dando problemas los campos que se actualizan dinámicamente, y ponerlos en otra tabla. Esto con el fin de que las solicitudes que reciba esa tabla sólo sean de lectura, y que en otra tabla diferente se registren las visitas, y demás datos que nos pide la dirección.
  4. Obtener un servidor de base de datos más grande, con más capacidad, de magnitudes tales que siempre nos quede grande

Así que la semana anterior primero revisé nuestras peticiones a la base de datos, y según mi análisis ya estaba tan optimizado que muy poco habríamos podido hacer en ese punto. Luego implementé el sistema de caché, y para el viernes quedó funcionando bastante bien, lo cual me hizo sentir ligeramente orgulloso de mis habilidades, hoy se suponía que optimizaría la base de datos, pero me dijeron los dires que mejor nos esperemos a ver qué sucede con el cache, pues podría resultar innecesario, de momento, y hasta riesgoso, moverle a la base de datos. En cuanto a conseguir un mayor sever, los recursos son limitados y no creo que suceda de momento.

No hay comentarios.: