Práticas recomendadas

Nesta página, explicamos as práticas recomendadas a serem seguidas ao usar o Memorystore para Memcache.

Arquitetar seu aplicativo para lidar com ausências no cache

Você deve seguir as práticas recomendadas de design de cache projetando seu cache para lidar com falhas de cache e indisponibilidade do serviço. Consulte o Contrato de nível de serviço para informações sobre o compromisso do Memorystore para Memcache com tempo de atividade.

Projete o aplicativo para que as falhas de cache e a inatividade temporária do serviço não interrompam a recuperação de dados do banco de dados subjacente compatível com a instância do Memcache.

Além disso, se você tiver indisponibilidade do keyspace, aguarde e tente novamente usando espera exponencial. Defina um limite de tempo para o qual sua estratégia de tentativas será encerrada.

Como se conectar a nós do Memcached

Ao consultar nós do Memcached com comandos como set, get e delete, conecte-se diretamente aos endereços IP dos nós. É possível executar esses comandos no endpoint de descoberta automática. No entanto, isso não é recomendado porque reduz o desempenho do aplicativo.

Recomendamos que você use o serviço de descoberta automática do Memorystore para Memcache. Esse serviço automatiza o gerenciamento de endereços IP do cluster ao adicionar ou remover nós do cluster. Para instruções sobre como configurar a descoberta automática para seu cluster, consulte Como usar o serviço de descoberta automática.

Como configurar o parâmetro max-item-size corretamente

Nesta seção, explicamos como configurar melhor o parâmetro max-item-size. Para etapas sobre como ajustar esse parâmetro de configuração, consulte Como configurar instâncias do Memcache. Para a lista completa dos parâmetros de configuração do Memcache disponíveis, consulte Configurações do Memcache.

Valores compatíveis e valores padrão

Para o Memcache de código aberto, o valor mínimo para max-item-size é 1KiB, o valor máximo é 1 GiB e o valor padrão é 1 MiB. Para o Memorystore para Memcache, o valor mínimo é 512 KiB, o valor máximo é 128 MiB e o valor padrão é 1 MiB. Além disso, qualquer valor para o qual você definir essa configuração precisa ser divisível por 512 KiB.

Como armazenar em cache uma entrada maior que o max-item-size configurado

Quando você tenta armazenar em cache uma entrada maior que o max-item-size configurado, o Memcache falha a operação e retorna falso. Se possível, crie uma lógica no seu aplicativo para mostrar esse erro do cliente Memcache OSS para que seja possível depurá-lo. A tentativa de armazenar em cache uma entrada maior que o max-item-size configurado pode causar alta latência para a instância.

Como definir max-item-size para o valor máximo

É possível resolver alguns problemas com o parâmetro max-item-size definindo-o como o valor máximo. No entanto, isso não é uma prática recomendada, por isso não é recomendável usar essa estratégia na produção. O gerenciamento de memória do Memcache é baseado em slabs e armazenar itens maiores que o slab resulta em alocação ineficiente da memória.

Como evitar max-item-size problemas de configuração

Primeiro, descubra qual é o tamanho máximo de item necessário para seu cache. Defina max-item-size para ser um pouco maior do que o maior tamanho de item, como uma margem de segurança.

Observe que o tamanho dos valores gravados no cache pode mudar no seu aplicativo ao longo do tempo. Além disso, o cluster pode ser configurado incorretamente, por exemplo, ao migrar de um ambiente para outro. Uma medida adicional a ser tomada é validar o tamanho máximo do item no aplicativo. Assim, a solicitação será rejeitada se o aplicativo tentar armazenar em cache itens maiores do que a configuração configurada.

Como equilibrar um cluster do Memcache desequilibrado

Como são os clusters desequilibrados e riscos associados

Em raras circunstâncias, quando você cria um nó de instância do Memcache, ele pode ser distribuído de maneira desigual pelas zonas em uma região. Isso ocorre quando uma zona não está disponível no mesmo momento em que você provisiona o cluster.

Um cluster desequilibrado aumenta o potencial da perda de dados porque os nós não estão distribuídos de maneira tão uniforme quanto poderia ser. O cluster não se reequilibra automaticamente quando a zona em que ela estava inativa fica on-line.

Como reequilibrar o cluster

É possível reequilibrar o cluster aumentando temporariamente o número de nós e depois reduzindo o número de nós para o número original de nós. Essa ação de escalonamento vertical e horizontal permite que o sistema Memorystore para Memcache redistribua os nós uniformemente entre as zonas disponíveis.

O sucesso desse método para reequilíbrio do cluster depende da disponibilidade das zonas em questão. No momento, o Google Cloud não lista as zonas disponíveis/indisponíveis, então só é possível dizer se a zona está on-line se os nós estiverem equilibrados corretamente durante a operação de escalonamento.

Práticas recomendadas do Cloud Monitoring

Para rastrear o desempenho do cache ao longo do tempo, use o Cloud Monitoring para monitorar algumas métricas essenciais do Memorystore para Memcache:

  • Uso da memória (memcache.googleapis.com/node/cache_memory)
  • Porcentagem de uso da CPU (memcache.googleapis.com/node/cpu/utilization)

Monitorar essas duas métricas ao longo do tempo ajuda a determinar a eficiência do cluster em uso e a possibilidade de aumentar ou diminuir o tamanho dele.

Por exemplo, se as métricas indicarem que o uso de memória e de CPU cresceu ao longo do tempo para mais de 80%, é possível que a tendência continue. Como resultado, é possível aumentar o tamanho da instância antecipadamente para que o cache tenha espaço para armazenar novos valores conforme os requisitos de recursos do aplicativo aumentam.

É recomendável definir um alerta para quando o uso de memória e de CPU atingirem 80%.

Como alternativa, o rastreamento dessas métricas ao longo do tempo pode indicar que você não está usando todos os recursos do espaço e da CPU atuais. Nesse caso, seria mais econômico reduzir o tamanho do cluster.

A seguir