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 -&gt; #lanux.
_______________________________________________
General mailing list
[email protected]
http://listas.lanux.org.ar/cgi-bin/mailman/listinfo/general

Responder a