Etiquetas

,

Para las aplicaciones distribuidas de gran escala, el acceso a datos de stateful applications es crítico. El rendimiento global de la aplicación y la latencia están limitados normalmente por la rapidez con la que se pueden recuperar, compartir y actualizar los datos y el contexto necesarios.

Los servicios distribuidos de almacenamiento en memoria caché, como Caching de Azure y memcached, han evolucionado en respuesta a esta necesidad.

Varios de los sistemas que generalmente implementamos deben utilizar una plataforma de memoria caché distribuida para asegurar su correcto funcionamiento.

En términos generales las siguientes consideraciones le ayudarán en la toma de decisiones:

  • Utilice una plataforma de almacenamiento de memoria caché distribuida dentro de los roles del servicio hospedado. La proximidad entre el cache y el cliente que debe consumirla (en este caso los servicios del mismo rol) reduce las barreras de latencia y rendimiento.

 

  • Use la plataforma de almacenamiento en memoria caché distribuida como repositorio principal para tener acceso a los datos y objetos comunes de la aplicación (por ejemplo, el perfil de usuario y el estado de la sesión), respaldado por la Base de datos SQL u otro sistema de almacenamiento persistente en el enfoque.

 

  • Los objetos en caché tienen un período de tiempo que determina el periodo en el cual esos datos permanecen vivos y accesibles dentro de ese medio. Las aplicaciones establecen explícitamente el período de vida en los objetos almacenados en memoria caché o configuran un período de vida predeterminado para el contenedor de la memoria caché. Equilibre la opción de período de vida entre la disponibilidad, la demanda en la memoria y la obsolescencia de los datos.

 

  • Las memorias caché poseen una semántica de clave-object []; tenga en cuenta que las operaciones de escritura se pueden superponer creando datos inconsistentes en la memoria caché. Las memorias caché distribuidas no proporcionan normalmente una API para las actualizaciones atómicas de los datos almacenados, ya que no son conscientes de la estructura de los datos almacenados. Para las aplicaciones que requieren una coherencia estricta de las operaciones de escritura simultáneas, use una plataforma de caché que proporcione un mecanismo de bloqueo para actualizar las entidades. En el caso del almacenamiento en memoria caché de Azure, esto se puede implementar mediante GetAndLock o PutAndUnlock. Esta práctica por otro lado tendrá un efecto negativo en el rendimiento.

 

  • El rendimiento de la memoria caché está limitado en la capa de aplicación por el tiempo necesario para serializar y deserializar objetos. Para optimizar este proceso, utilice un serializador binario relativamente simétrico (que requiera el mismo tiempo para codificar y descodificar datos) y muy eficaz, por ejemplo, protobuf.

 

  • Para usar una serialización personalizada correctamente, diseñe objetos de transferencia de datos (DTO) para almacenarlos en caché. Utilice una anotación adecuada para la serialización, impida las dependencias cíclicas y utilice pruebas unitarias para asegurar el correcto funcionamiento en forma constante. Frecuentemente los objetos del modelo pueden variar, y dependiendo de nuestro proceso de serialización puede ser necesario implementar cambios en el mismo.