Configuración de su cliente de ElastiCache para un equilibrio de carga eficaz - Amazon ElastiCache

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración de su cliente de ElastiCache para un equilibrio de carga eficaz

nota

Esta sección se aplica a clústeres de Memcached multinodo y de autodiseño.

Para utilizar varios nodos de Memcached de ElastiCache de forma eficaz, debe poder repartir sus claves de caché entre los nodos. Una manera sencilla de equilibrar la carga de un clúster con n nodos es calcular el hash de la clave del objeto y aplicar la función mod al resultado mediante n - hash(key) mod n. El valor resultante (de 0 a n-1) es el número del nodo en el que deberá colocar el objeto.

Este enfoque es sencillo y funciona bien siempre que el número de nodos (n) sea constante. Sin embargo, siempre que agregue o elimine un nodo del clúster, el número de claves que deben moverse será (n (1)/n (donde n es el nuevo número de nodos). Por lo tanto, este enfoque da como resultado el traslado de un gran número de claves, lo que se traduce en un gran número de pérdidas iniciales de caché, especialmente cuando el número de nodos es elevado. En el mejor de los casos, al escalar de 1 a 2 resultados de nodos, se obtienen (2-1)/2 (50 %) de claves para trasladar. Al escalar de 9 a 10 nodos, se obtienen (10-1)/10 (90 %) de claves para trasladar. Si va a ampliar debido a un pico de tráfico, no deseará tener muchas pérdidas de caché. Un gran número de pérdidas de caché devuelve coincidencias con la base de datos, que ya está sobrecargada por el pico de tráfico.

La solución a este dilema es un uso consistente de la función hash. Una utilización consistente de hash emplea un algoritmo según el cual, siempre que se agregue o elimine un nodo de un clúster, el número de claves que deba moverse será aproximadamente 1/n (donde n es el número de nodos nuevo). En el peor de los casos, al escalar de 1 a 2 resultados de nodos, se obtienen 1/2 (50 por ciento) de claves para trasladar. Al escalar de 9 a 10 nodos, se obtienen 1/10 (10 por ciento) de claves para trasladar.

Como usuario, deberá controlar qué algoritmo de hash se usa para los clústeres de varios nodos. Recomendamos configurar sus clientes para que utilicen hash de forma consistente. Afortunadamente, hay muchas bibliotecas de cliente de Memcached en la mayoría de los idiomas comunes que implementan hash de forma consistente. Consulte la documentación de la biblioteca que va a utilizar para ver si admite el uso consistente de hash y saber cómo implementarlo.

Si trabaja en Java, PHP o .NET, recomendamos utilizar una de las bibliotecas de cliente de Amazon ElastiCache.

Uso consistente de hash con Java

El cliente de Java de Memcached de ElastiCache se basa en el cliente de Java spymemcached de código abierto, que tiene capacidades de utilización consistente de hash integradas. La biblioteca incluye una clase KetamaConnectionFactory que implementa hash de forma consistente. De forma predeterminada, el uso consistente de hash está desactivado en spymemcached.

Para obtener más información, consulte la documentación de KetamaConnectionFactory en KetamaConnectionFactory.

Uso consistente de hash con PHP

El cliente de PHP de Memcached de ElastiCache es un encapsulador en torno a la biblioteca integrada de PHP de Memcached. De forma predeterminada, el uso consistente de hash está desactivado en la biblioteca PHP de Memcached.

Utilice el siguiente código para habilitar el uso consistente de hash.

$m = new Memcached(); $m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);

Además del código anterior, recomendamos habilitar también memcached.sess_consistent_hash en su archivo php.ini.

Para obtener más información, consulte la documentación de configuración de tiempo de ejecución para PHP de Memcached en http://php.net/manual/en/memcached.configuration.php. Tenga en cuenta específicamente el parámetro memcached.sess_consistent_hash.

Uso consistente de hash con .NET

El cliente de .NET de Memcached de ElastiCache es un encapsulador en torno a Enyim Memcached. De forma predeterminada, el uso consistente de hash está habilitado en el cliente Enyim Memcached.

Para obtener más información, consulte la documentación de memcached/locator en https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration#user-content-memcachedlocator.