Bueno la cuestion es esta, tanto memcache como redis almacenan en memoria ram, con lo que se logra acelerar ciertos procesos de manera facil, y se logra liberar operaciones de io a disco rigido y bases de datos persistente.
Haciendo pruebas memcached es muchisimo mas rapido que redis en operaciones simples, que es basicamente lo hace la cache, envia un key y espera un contentenido, el fuerte en redis es el tema de las operaciones atomicas y otros features copados que tiene. Si memcached es mucho mas rápido, por que planteo esta duda? Actualmente en un proyecto con un trafico muy alto, y en buen crecimiento donde se necesita escalar de menera rápida, la cache pasa de ser una ayuda a una salvadora, actualmente la cache se hace sobre disco rígido en cada servidor backend, cada servidor maneja su propia cache y hay un memcache en la granja que solo se encarga de mantener compartida la data de sesiones entre los backs. Como necesitamos mas velocidad de cache, pensamos usar memcache, por el trafico interno de la red de la granja, estamos "desconectando" servidores entre si, por ejemplo erradicamos NFS, la idea es que cada backend tenga su propio servidor memcached y siga manejando la cache de forma local, la onda seri algo aisi: [image: convensional.png] Actualmente este es el modelo, solo que la cache que es a disco se reemplzaria por memcache, cada server es dueño de su propia cache y asi se evita carga a la red y se hacelera la lectura. Ahora supongamos que querria unir la cache y que sea compartida en todos los servidores, opcionalmente el modelo podria ser algo asi: [image: mc-red.png] Donde los backs leen y escriben en un unico servidor de cache, evitando la regeneración innecesaria de cache ya creada, pero esto consume red y aunque poco, puede generar retrasos entre la peticion y la entrega de la data, aparte al nivel escalabilidad, se tendria que calcular un server de cache cada x de backend. El tema es. ¿alguna forma de compartir la cache para evitar regerarla sin cargar la red ni separarla del server que la va a usar? Si tenemos en cuenta que en lo que es cache la lectura contra la escritura deberia andar masomenos de 1/100 y mas también, podemos decir que la verdadera carga de la cache es la lectura, asi que como solucion puede andar la replicación, esto retrasaria la escritura sin desacelerar la lectura, pero como la cache es un contenido generado de un resultado que tiene que ser entregado, tenemos la ventaja de que la generación de cache puede ser asíncrona a la devolución del resultado, osea yo puedo devolver el resutado al cliente, y luego guardarla sin generar tiempos de retraso, en todo caso, el tiempo puede ser irrelevante contra la promesa de que evitamos crear ese mismo resultado n veces. Asi que un modelo ideal podria ser asi: [image: cache-replicada.png] De este modo la escritura seria por red, a un servidor maestro, y este replicaria en todos los esclavos, que estarian en los backends, a la hora de leer, lo haran de forma local y con la ventaja de tener contenido resuelto por otro backend. Y a nivel escalabilidad se reducin enormemente la cantidad de servidores de cache (o maestros en esta caso, por cada x backends, ya que la mayor carga que es la lectura se la come cada uno). El problema es que Memcache no soporta la replicación, si hay un fork y un parche que lo hacen, pero en el caso del parche por ejemplo, hay que compilar con la opcion de que no use threads, lo que vuelve al servidor mas pesado, y del form que creo que es membase, no tengo referencia de que aya funcionado bien en produccion. Hay un servicio ya probado y que soporta replicación, que es redis, es un poco mas lento que memcached, pero puede soportar este esquema. Alguno ya andubo por estos pagos como para ahorrarme tropiesos? o en todo caso cual les parece que sea la mejor solución? -- El Tio ~ Programador, hacker y filósofo web: http://blog.exodica.com.ar Linked'in: http://www.linkedin.com/in/ogentilezza Twitter: @exos <http://twitter.com/exos>, Indeti.ca: @exos<http://identi.ca/exos> Tels: [+54 11] 638-LINUX (54689) - [+54 9 11] 6799-4797
<<cache-replicada.png>>
<<convensional.png>>
<<mc-red.png>>
Lanux - Grupo de usuarios de GNU/Linux de Lanus Visitanos en: http://www.lanux.org.ar Reglas de etiqueta para el posteo de mensajes a la lista: http://www.lanux.org.ar/?page_id=35 Articulos y noticias por rss: http://www.lanux.org.ar/?feed=rss2 Lanux por irc: irc.freenode.net -> #lanux. _______________________________________________ General mailing list [email protected] http://listas.lanux.org.ar/cgi-bin/mailman/listinfo/general
