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 ElastiCache cliente para un equilibrio de carga eficiente (Memcached)
nota
Esta sección se aplica a clústeres de Memcached multinodo y de autodiseño.
Para utilizar de forma eficaz varios nodos de ElastiCache Memcached, debe poder distribuir las 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 JavaPHP, o. NET, le recomendamos que utilice una de las bibliotecas ElastiCache cliente de Amazon.
Uso consistente de hash con Java
El cliente Java de ElastiCache Memcached se basa en el cliente Java spymemcached de código abierto, que incorpora funciones de hash consistentes. La biblioteca incluye una clase que implementa un hash coherente. KetamaConnectionFactory De forma predeterminada, el uso consistente de hash está desactivado en spymemcached.
Para obtener más información, consulte la KetamaConnectionFactory documentación en KetamaConnectionFactory
Uso de hash coherente PHP con Memcached
El PHP cliente ElastiCache Memcached es un contenedor de la biblioteca Memcached integrada. PHP De forma predeterminada, la biblioteca Memcached desactiva el hash coherente. PHP
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 en tiempo de ejecución de Memcached en http://php.net/manual/en/memcached.configuration.php. PHPmemcached.sess_consistent_hash
.
Uso de hash coherente. NETcon Memcached
El ElastiCache Memcached. NETel cliente es un envoltorio alrededor de Enyim Memcached. De forma predeterminada, el uso consistente de hash está habilitado en el cliente Enyim Memcached.