17 de enero de 2012

Windows Azure Caching Service: Como funcionan en conjunto el cache distribuido y el cache local

La versión en inglés de este post puede ser encontrada en http://blogs.southworks.net/jrowies/2012/01/17/windows-azure-caching-service-how-distributed-and-local-caches-work-together/

Introducción

La intención de este post es mostrar cómo el cache distribuido y el cache local de Windows Azure Caching Service funcionan en conjunto. Vamos a cubrir las implicancias de habilitar el cache local, la interacción entre el cache local y el distribuido, y cómo prevenir errores inesperados que puedan ser causados por ser el cache local un cache que guarda su estado en memoria.

Para una descripción completa acerca de qué es Windows Azure Caching Service y cómo puede ser configurado, por favor leer:
Introducing the Windows Azure Caching Service
Azure AppFabric Caching Service
Building Windows Azure Applications with the Caching Service

Implicancias de habilitar el cache local

Cuando un cliente habilita el cache local, se crea un cache que guarda su estado en el mismo espacio de memoria donde el cliente está ejecutándose. Esto mejora drásticamente el rendimiento al guardar y recuperar objetos del cache, pero esta mejora no viene sin un costo asociado. Al habilitar el cache local en cada cliente, habrá más réplicas de los mismos datos, ya que habrá copias en la fuente de datos original (por ej. base de datos SQL), en el cache distribuido (en la nube) y también en el cache local de cada cliente. Manejar la replicación de datos no es algo trivial, así que decidir sobre habilitar caching local o no, dependerá del escenario en el que nos encontremos.

Interacción entre el cache distribuido y el local

Algo importante a saber es cómo los caches local y distribuido interactúan entre sí. Debajo pueden encontrar diagramas mostrando cómo dos clientes (azul y verde) realizan acciones contra los caches, y las consecuencias que cada acción tiene sobre los datos de los mismos.

El cliente azul guarda la clave “A” en el cache:


El cliente verde recupera la clave “A” desde el cache


El cliente azul recupera la clave “A” desde el cache


El cliente azul actualiza el valor de la clave “A”


El cliente azul elimina del cache la clave “A”


El cliente verde recupera la clave “A” desde el cache


NOTA: para los casos de uso mostrados en los diagramas, estamos asumiendo que los objetos guardados en los caches no van a expirar antes que los clientes traten de recuperarlos.

Un cache que guarda su estado en memoria

Dado que el cache local reside en memoria, hay que tener en cuenta que cada cambio a un objeto luego de que el mismo fue guardado en el cache, modificará también el objeto cacheado (ya que ambos objetos son el mismo). Claramente, esto no es así con el cache distribuido, ya que una representación serializada del objeto es guardada en ese caso.

Guardando un nuevo objeto Movie en el cache:


Cambiar las propiedades del mismo objeto Movie modificará el objeto guardado en el cache local también:


Eso es todo, espero que sea de utilidad!

No hay comentarios:

Publicar un comentario