Cosas web, algunas úles, algunas buenas.
Fushioko, tiendas de productos de Asia

viernes, octubre 05, 2007

Sobre caché y otras historias

He estado leyendo un artículo de Ricardo Galli sobre Twitter, escalabilidad y otras cosas varias, y espero que no moleste lo que voy a decir, lo único que me ha interesado son los comentarios.

En estos, Galli, demimismo, rvr y álvaro han mantenido un intercambio de ideas sobre si es mejor PHP o RoR, que si el caché por aquí o las bases de datos master-slave por allá y más cosas.

Yo no soy un experto en esas cosas y menos aún me las daría de tal, pero me entran algunas dudas sobre algunas cosas que comentan.

Galli dice que menéame solo usa un servidor y que no necesita caché... eehhhh... oyee... pues quizás sea cierto. Espero que lo de un único servidor se refiera para web, porque no creo que sea uno para la web y la BD todo junto. Yo no he visto el código de menéame, pero un amiguete que sí que le ha dado por eso (creo que por penitencia de algo), me comentó que es un poco caótico, y caos suele ser poco amigo del señor rendimiento, pero bueno, no dudemos del código.

Lo que más me impresiona es que dice que antes de usar caché pues le mete servidores de no sé qué y mil líos de BD (ahora no me acuerdo y paso de leerme otra vez todo eso para buscarlo). A mí el comentario me parece impresionante, es como decir que si te va mal con tu mujer, pues te buscas una amante para que los ratos malos los pases con ella. No, tío, vete a un terapeuta y que arregle tu matrimonio... Pues lo mismo, en vez de meterle una máquina más, mejora el código, que seguro que el código se puede optimizar y añádele caché para que no tire tanto del PHP, RoR o lo que sea que uses para programar. Por cierto, a la BD ni se te ocurra meterle índices o mejorar las queries, total, le metes una bd master-slave, master-master, active-active o un taller ilegal con esclavos que busquen los datos y los envíen a pelo.

Otra cosa que me ha dejado un poco mosca es el afán de algunos por relacionar código óptimo con pocas líneas de código. El número de líneas de código no tiene mucho que ver con lo bueno que sea el código, sobre todo porque seguro que en esas 10 líneas de código llaman a alguna función suya que puede estar fatalmente implementada (no digo que lo esté, sino que se puede dar el caso). Me acuerdo una vez que salió la noticia de que alguien había sido capaz de crackear un DVD con 7 líneas de código, el tema es que jamás comentaron que el desarrollador tenía rota la tecla INTRO.

Siguiendo con la conversación, otra cosa que no entiendo es el tema del uso de frameworks. Usar un framework no tiene nada malo, lo malo es usar un framework poco óptimo. Está claro que o el framework es muy bueno, o si quiere hacer muchas cosas puede que la aplicación no sea todo lo óptima del mundo. Pero seamos sinceros, todos usamos un "framework", ya sea nuestra capa de BD o la que nos ofrece CodeIgniter (me gusta este framework), pero al final todos usamos librerías para hacer cosas. El que se desarrolle desde cero no implica nada de nada, a no ser que el que lo haya desarrollado sea un buen programador.

Después de leer este post me he puesto a leer una presentación sobre la arquitectura de la coctelera que es bastante interesante, pero hay una cosa que no comprendo, dicen: "si el usuario está loggeado: el lighttpd sirve la página estática, y con Ajax rellenamos el contenido no cacheable (petición mucho más ligera que un dispatch sirviendo una página entera, aunque sea de caché)". Mi duda es la siguiente, si una página que es dinámica tiene varias zonas que se cargan con Ajax, eso implica que se realizarán varias peticiones http y que se harán varias consultas a BD. ¿De verdad esto es más optimo que tener una página dividida en parte cacheable y parte dinámica y que se junten los dos tipos de contenido en una página?, pues no tengo ni idea, pero a primera vista a mi me parece más óptimo usar caché para partes cacheables y añadirle la parte dinámica, además de poder optimizar las consultas a BD si se hace en una única ejecución.

Etiquetas: