Configurando seu ElastiCache cliente para balanceamento de carga eficiente (Memcached) - Amazon ElastiCache

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurando seu ElastiCache cliente para balanceamento de carga eficiente (Memcached)

nota

Esta seção se aplica a clusters do Memcached multinó autoprojetado.

Para usar com eficiência vários nós do ElastiCache Memcached, você precisa ser capaz de distribuir suas chaves de cache pelos nós. Uma maneira simples de balancear a carga de um cluster com n nós é calcular o hash da chave do objeto e modificar o resultado por n - hash(key) mod n. O valor resultante (de 0 a n-1) é o número do nó em que você coloca o objeto.

Essa abordagem é simples e funcionará bem desde que o número de nós (n) seja constante. No entanto, sempre que você adiciona ou remove um nó do cluster, o número de chaves que precisam ser movidas é (n - 1) / n (em que n é o novo número de nós). Assim, essa abordagem resulta em um grande número de chaves movidas, o que se converte em um grande número de perdas no cache inicial, especialmente porque o número de nós fica grande. A escala de 1 para 2 nós resulta na movimentação de (2-1)/2 (50%) das chaves, o melhor caso. A escala de 9 a 10 nós resulta na movimentação de (10-1)/10 (90%) das chaves. Se você estiver aumentado a escala devido a um pico no tráfego, não convém ter um grande número de perdas no cache. Um grande número de perdas no cache resulta em acertos no banco de dados, que já está sobrecarregado devido ao pico no tráfego.

A solução para esse dilema é o hashing consistente. O hashing consistente usa um algoritmo, de modo que, sempre que um nó é adicionado ou removido a/de um cluster, o número de chaves que devem ser movidas é de aproximadamente 1/n (onde n é o novo número de nós). A escala de 1 para 2 nós resulta na movimentação de 1/2 (50%) das chaves, o pior caso. Escalar de 9 a 10 nós resulta na movimentação de 1/10 (10%) das chaves.

Como usuário, você controla qual algoritmo de hashing é usado para clusters de vários nós. Recomendamos configurar os clientes para usar o hashing consistente. Felizmente, existem muitas bibliotecas de cliente Memcached na maioria das linguagens populares que implementam o hashing consistente. Verifique a documentação da biblioteca que você está usando para ver se ela oferece suporte para hashing consistente e como implementá-lo.

Se você estiver trabalhando em Java,PHP, ou. NET, recomendamos que você use uma das bibliotecas de ElastiCache clientes da Amazon.

Hash consistente usando o Java

O cliente Java ElastiCache Memcached é baseado no cliente Java spymemcached de código aberto, que tem recursos de hashing consistentes incorporados. A biblioteca inclui uma KetamaConnectionFactory classe que implementa um hashing consistente. Por padrão, o hashing consistente está desativado em spymemcached.

Para obter mais informações, consulte a KetamaConnectionFactory documentação em KetamaConnectionFactory.

Uso consistente de hashing PHP com Memcached

O PHP cliente ElastiCache Memcached é um invólucro da biblioteca integrada do Memcached. PHP Por padrão, o hashing consistente é desativado pela biblioteca MemcachedPHP.

Use o código a seguir para ativar o hashing consistente.

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

Além do código anterior, recomendamos que você também ative memcached.sess_consistent_hash no seu arquivo php.ini.

Para obter mais informações, consulte a documentação de configuração em tempo de execução do Memcached em http://php.net/manual/en/memcached.configuration.phpPHP. Observe especificamente o parâmetro memcached.sess_consistent_hash.

Uso consistente de hashing. NETcom Memcached

O ElastiCache Memcached. NETclient é um invólucro em torno do Enyim Memcached. Por padrão, o hashing consistente é ativado pelo cliente Enyim Memcached.

Para obter mais informações, consulte a memcached/locator documentação em https://github.com/enyim/EnyimMemcached/wiki/ -Configuration# MemcachedClient. user-content-memcachedlocator