Contenedor Memcached para Caché en rol de Azure

Importante

Microsoft recomienda todos los nuevos desarrollos que usen Azure Redis Cache. Para obtener documentación actual e instrucciones sobre cómo elegir una oferta de Azure Cache, consulte ¿Qué oferta de Azure Cache es adecuada para mí?

Información general de Memcache

Memcache es una solución distribuida de almacenamiento en caché basado en memoria para acelerar las aplicaciones web de gran escala mediante el alivio de presión de la base de datos. Memcache se usa principalmente en los mayores sitios web de Internet y se ha fusionado con otras tecnologías de formas innovadoras.

Azure admite el protocolo Memcache para permitir que los clientes que tengan implementaciones existentes de Memcache migren fácilmente a Azure. Si una aplicación ya usa Memcache, no es necesario reemplazar este código con código nuevo.

Ejecutar Caching de Azure con Memcache es una mejor opción que, por ejemplo, ejecutar simplemente Memcache en un rol de trabajo. Esto se debe a que Caching de Azure ofrece características de valor añadido, como un cierre estable, alta disponibilidad, almacenamiento en caché local (en correcciones de compatibilidad o shim del cliente), notificaciones (en correcciones de compatibilidad o shim del cliente), coherencia de datos, y facilidad de aumento y reducción verticales transparentes para los clientes, por nombrar algunas. Por ejemplo, el esquema de hash del servidor y la administración de particiones en Caching de Azure con Memcache ayudan al equilibrio de la carga y a mantener la coherencia de los datos.

Compatibilidad con el protocolo Memcache

Caching de Azure admite el protocolo de conexión Memcache. Hay dos versiones del protocolo, una versión binaria y una versión de texto.

Caching de Azure es compatible con este protocolo y con su propio protocolo de conexión. Un cliente Memcache debería ser compatible con Azure. Caching de Azure admite casi todas las API compatibles con otras implementaciones de Memcache.

Por lo tanto, si un usuario transfiere una aplicación de Memcache a Azure y apunta la aplicación a la implementación Memcache de Azure, debería continuar funcionando tal cual, sin modificaciones adicionales en la aplicación.

Memcache admite dos experiencias de desarrollador distintas: el uso de una "puerta de enlace de servidor" y el uso de una "corrección de compatibilidad de cliente".

Puerta de enlace de servidor de Memcache

Desde la perspectiva de la instrumentación, la implementación y la comprensión conceptual, una puerta de enlace de servidor es sencilla, pero también se deben tener en cuenta ciertas advertencias que se indican más adelante.

Al usar la puerta de enlace de servidor, el clúster de caché del servidor escucha en un socket de Memcache. En otras palabras, abre un socket y escucha los paquetes en el protocolo Memcache. No hay una capa de conversión (se explica más adelante).

Para activar esta característica, en el clúster de caché, abra un extremo interno adicional, asígnele un nombre y configúrelo como el puerto Memcache. Todo el tráfico vinculado a este puerto se recibirá a través del protocolo Memcache.

Sin embargo, la puerta de enlace de servidor reduce el rendimiento en escenarios que dependen enormemente del rendimiento en comparación con el uso del escenario de correcciones de compatibilidad de cliente (shim). Esto se debe a que las implementaciones de Memcache implementan las operaciones de hash de manera diferente a como lo hacen las implementaciones de Caching de Azure. Las implementaciones de Memcache posponen el esquema de hash al cliente de caché. En Azure, el servidor de caché genera el hash. El comportamiento de la memoria caché de Azure deja que el servidor de caché especifique el comportamiento del hash. Esto permite al servidor equilibrar la carga, la inflación y la deflación, garantiza que no se produzca una pérdida de datos, etc.

Si Azure almacena un elemento en caché, se genera un hash basado en la clave del elemento. Azure usa el hash para determinar qué servidor del clúster de caché contendrá el elemento en caché. Como consecuencia, la puerta de enlace de servidor de Azure debe volver a generar el hash de la clave y enrutar el elemento al servidor de destino del clúster de caché. Esta operación implica un salto de red adicional que reduce el rendimiento.

Correcciones de compatibilidad (shim) de cliente Memcache

La corrección de compatibilidad de cliente Memcache se instala en el cliente que accede a la caché. En general, se trata del rol de Azure que tiene la aplicación misma. La corrección de compatibilidad de cliente admite la memoria caché local.

La corrección de compatibilidad es una capa de transición. Convierte las llamadas al cliente Memcache en la API de Caching de Azure. La corrección de compatibilidad tiene dos partes: un controlador de protocolo Memcache y un cliente de Caching de Azure. La corrección de compatibilidad (la capa de conversión) se instala en el cliente mismo, desde donde se hagan las llamadas Get y Put a la API de Caching de Azure.

Cuando el cliente Memcache se apunta a un localhost, como el servidor Memcache, la instancia local de la corrección de compatibilidad controlará las operaciones Put inicialmente, en lugar de hacerlo el servidor de caché de Azure. Luego la corrección de compatibilidad determinará el servidor de destino adecuado del clúster de caché y redirigirá la operación Put a Azure.

Esto evita el salto de red adicional presente en el escenario de la puerta de enlace de servidor. La desventaja es que debe obtener esta corrección de compatibilidad y colocarla en su aplicación.

Uso de la puerta de enlace de servidor frente a la corrección de compatibilidad de cliente

Hay dos topologías de almacenamiento en caché: almacenamiento en caché ubicado conjuntamente y un rol de caché dedicado.

Si el clúster de caché se implementa en un rol de trabajo de caché dedicado, use la corrección de compatibilidad de Memcache del cliente de caché. Esto le ofrece un mejor rendimiento y evita el código de detección automática.

Si usa un almacenamiento en caché colocalizado y el cliente de caché se hospeda en el mismo rol, use la puerta de enlace de servidor de Memcache. Usar la corrección de compatibilidad de cliente implica una capa adicional de procesamiento y redirección, y esto no es necesario al acceder a la memoria caché desde el mismo rol. La redirección adicional agregará una sobrecarga innecesaria.

No hay un modelo de programación para usar la puerta de enlace de servidor ni la corrección de compatibilidad de cliente. Todo esto es necesario si cambian las opciones de configuración. La corrección de compatibilidad de cliente también requerirá instalación.

El uso de una puerta de enlace de servidor o de una corrección de compatibilidad de cliente es más una operación de implementación que una operación de modelo de programación. Como programador, deberá llamar a las mismas API Get o Put, solo que la aplicación se conecta de un modo algo diferente. En lugar de apuntar al servidor de almacenamiento en caché original, ahora apuntará a la puerta de enlace de servidor o a la corrección de compatibilidad de cliente.

Finalmente, tanto la puerta de enlace de servidor como la corrección de compatibilidad de cliente son independientes de la biblioteca de clientes Memcache que se usa, ya que las implementaciones de Memcache estándar usan el mismo protocolo. El servidor de caché tiene en cuenta los paquetes de datos que cumplen con el protocolo Memcache estándar y no las propias implementaciones de cliente Memcache.

Procedimiento para implementar la puerta de enlace de servidor para aplicaciones de Azure

  1. En el rol que hospedará el servidor de caché, vaya a las propiedades del rol y a la pestaña Caching.

  2. Active la casilla "Habilitar almacenamiento en caché".  Esto agregará puntos de conexión de entrada en csdef, el elemento importModule y otras configuraciones de csdef/cscfg. A continuación, la experiencia de implementación radica en agregar manualmente un extremo de entrada llamado “memcache_default” en la pestaña Extremos.

  3. Ahora el cliente estará configurado para apuntar a este clúster. Si usa una puerta de enlace de servidor con almacenamiento en caché colocalizado o la corrección de compatibilidad de cliente con un almacenamiento en caché dedicado, simplemente apunte la aplicación a “localhost_thisrolename”, no hay necesidad de una detección automática.

Procedimiento para implementar la corrección de compatibilidad de cliente para aplicaciones de Azure

  1. En el rol que tiene el cliente Memcache, haga clic con el botón secundario en el nombre de rol y seleccione “Agregar referencia de paquetes de biblioteca” para abrir la ventana NuGet.

  2. Busque “Corrección de compatibilidad de Memcache para Caching de Azure”. Instale el paquete NuGet

  3. El paquete creará la tarea de arranque, agregará un extremo interno para memcache_default y lo asignará a 11211, y agregará las secciones dataCacheClients apropiadas a App.config y web.config. Esto se puede cambiar en la pestaña de extremos internos.

  4. Indique el nombre del rol en el elemento autoDiscovery de App.config o Web.config.

  5. Ahora el cliente estará configurado para “apuntar” a la corrección de compatibilidad. Edite la configuración del cliente Memcache y establezca el servidor en “localhost”. También debe definir los números de puerto correctos.