Practicas de diseño de Caching distribuido en Azure
Para las aplicaciones distribuidas de gran escala, el acceso a datos de aplicaciones stateful 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 los contextos necesarios. Los servicios distribuidos de almacenamiento en caché, como Caching de Azure y memcached, han evolucionado en respuesta a esta necesidad. Las aplicaciones deben utilizar una plataforma de memoria caché distribuida.
Tener en cuenta las siguientes directrices para el diseño de Caching distribuido:
1. Utilice una plataforma de almacenamiento en memoria caché distribuida como Worker Role dentro del servicio hospedado en Azure. Esta gran proximidad a los clientes de la memoria caché reduce las barreras de latencia y rendimiento producidas por el recorrido del equilibrador de carga.
2. 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 almacén duradero en el enfoque de lectura completa o de cache-aside.
3. Los objetos de la memoria caché tienen un período de vida que afecta al tiempo que están activos en la memoria caché distribuida. 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 (aciertos de caché) y la presión en la memoria y la obsolescencia de los datos.
4. Las memorias caché muestran una semántica de clave-byte>[]; tenga en cuenta el potencial de que las operaciones de escritura superpuestas creen datos inconsistentes en la memoria caché. Las memorias caché distribuidas no proporcionan normalmente una API para las actualizaciones atómicas en los datos almacenados, ya que no son conscientes de la estructura de los datos almacenados.
5. Para las aplicaciones que requieren una coherencia estricta de las operaciones de escritura simultáneas, use una distribución de plataforma de almacenamiento en 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. Nota: esto tendrá un efecto negativo en el rendimiento.
6. 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.
7. Para usar la serialización personalizada correctamente, diseñe objetos de transferencia de datos (DTO) para la serialización en memoria caché, use la anotación adecuada para la serialización, impida las dependencias cíclicas y utilice pruebas unitarias para el seguimiento de la serialización eficaz.
Recomendación:
En mi experiencia en manejo y administración de cache, en encontrado el servicio de Azure Redis Cache como una herramienta poderosa que te ayuda enormemente a administrar el cache de tu aplicación de manera sencilla y totalmente escalable.
Características de Azure Redis Cache:
- Redis es un avanzado storage de pares clave-valor, donde las claves pueden contener estructuras de datos tales como cadenas, objetos hash, listas, conjuntos (Sets) y conjuntos ordenados (Ordered Sets). Redis admite un conjunto de operaciones atómicas con estos tipos de datos.
- Redis también admite la replicación maestro-subordinado de configuración trivial, con una primera sincronización sin bloqueo muy rápida y reconexión automática en caso de desconexión de red (netsplit).
- Otras características son las transacciones, publicación/suscripción, scripting Lua, claves con un período de vida limitado y opciones de configuración que hacen que Redis se comporte como una memoria caché.
- Puede usar Redis desde la mayoría de los lenguajes de programación actuales.
- Azure Redis Cache usa la autenticación de Redis y también admite las conexiones SSL con Redis.
Comparto en enlace con toda la información de Redis: https://azure.microsoft.com/es-mx/services/cache/
Ejemplo de uso de Redis:
Vemos en la siguiente arquitectura un cluster de servidores de Redis dentro de una subnet, habilitando el acceso a cache a aplicaciones dentro de una Virtual Network y la comunicación se resuelve dentro de los mismos segmentos de la red.
Diseño común de aplicaciones con cache habilitando alta disponibilidad al utilizar un Worker role para operaciones de escritura en BD y lectura desde cache:
Diseño de aplicaciones distribuidas usando cache bajo Azure Traffic Manager:
Azure nos ofrece varias opciones para crear y administrar cache distribuido para nuestras aplicaciones, esta comunicación se puede establecer de manera eficiente y segura a través de los servicios de Azure.
Para crear servicios de cache, les dijo los siguientes enlaces donde explica paso a paso como lograr crear y comunicar nuestras aplicaciones con cache de Azure:
UPDATE:
Saludos!
Comments
Post a Comment