Migrar do Memorystore for Memcached para o Memorystore for Valkey

Recomendamos migrar suas cargas de trabalho do Memorystore para Memcached para o Memorystore para Valkey. O Memorystore para Memcached é um repositório de dados de chave-valor, mas o Memorystore para Valkey é um servidor de estrutura de dados com mais recursos.

O Memorystore para Valkey oferece funcionalidades semelhantes ao Memorystore para Memcached. Além disso, o Memorystore para Valkey tem os seguintes benefícios:

  • Ele oferece um armazenamento de dados na memória totalmente gerenciado e de alta performance para o Valkey, um projeto de código aberto compatível com o Redis.
  • É um serviço Valkey totalmente gerenciado para Google Cloud, que oferece suporte a instâncias com o modo de cluster ativado e desativado.
  • Os aplicativos executados no Google Cloud podem alcançar desempenho máximo aproveitando o serviço Valkey altamente escalonável, disponível e seguro sem o trabalho de gerenciar implantações complexas do Valkey.

Recursos do Memorystore for Valkey

A migração para o Memorystore para Valkey oferece acesso a recursos que não estão disponíveis no Memorystore para Memcached. Esses recursos oferecem melhor desenvolvimento, confiabilidade e desempenho de aplicativos.

A tabela a seguir lista e descreve os recursos disponíveis no Memorystore para Valkey e explica as vantagens de usar esses recursos.

Recurso Descrição Vantagens
Vários bancos de dados O Memorystore para Memcached é um único espaço de chaves simples. No entanto, por padrão, o modo Cluster Mode Disabled do Memorystore para Valkey aceita até 16 bancos de dados para uma instância. É possível configurar seu ambiente para ter até 100 bancos de dados em uma instância. Ter vários bancos de dados para uma instância evita um único ponto de falha para ela, permite fazer backup ou restaurar um único banco de dados sem afetar a disponibilidade ou a consistência de outros e permite escalonar ou migrar seus bancos de dados com mais eficiência.
Estruturas de dados avançadas Além de strings, o Memorystore para Valkey é compatível com listas, conjuntos, conjuntos classificados, hashes e bitmaps. O Memorystore para Valkey também é compatível com filtros de Bloom, pesquisa vetorial e JSON. É possível usar o Memorystore para Valkey em casos de uso complexos, como rankings, filas de tarefas e cache de objetos, sem serialização de aplicativos. Também é possível usar a pesquisa vetorial para realizar consultas semânticas com latências abaixo de um milissegundo.
Transações Você pode usar os comandos MULTI e EXEC para executar um grupo de comandos como uma unidade única e indivisível de forma atômica. Embora seja possível usar os recursos de comparação e troca (CAS, na sigla em inglês) do Memorystore para Memcached para bloqueio otimista no nível da chave, o Memorystore para Valkey permite executar um grupo de comandos de forma atômica.
Mensagens do Pub/Sub Ao usar o Pub/Sub com o Memorystore para Valkey, seus aplicativos cliente podem se inscrever em canais e receber mensagens em tempo real. Com o Memorystore para Valkey, você transforma seu cache em um broker de mensagens leve para atualizações em tempo real e comunicação entre serviços.
Scripts Lua Você pode usar Lua para executar uma lógica de aplicativo complexa de forma atômica no servidor usando o comando EVAL. O uso de scripts do lado do servidor reduz as viagens de ida e volta da rede e garante que o Memorystore para Valkey possa realizar operações complexas sem interrupções. Isso aumenta o desempenho do aplicativo.
Alta disponibilidade, replicação e suporte a fragmentos A arquitetura do Memorystore para Valkey oferece suporte e alta disponibilidade (HA). Seus aplicativos clientes podem acessar os nós do Memorystore for Valkey diretamente conectando-se a endpoints (ou fragmentos) individuais. A alta disponibilidade e a replicação aumentam a confiabilidade do sistema e minimizam interrupções durante atualizações críticas. O uso de fragmentos ajuda a distribuir a alta carga de tráfego associada aos aplicativos cliente de maneira eficaz.
Persistência

O Memorystore para Valkey é compatível com os seguintes tipos de persistência:

  • Arquivo somente de anexação (AOF): usado para durabilidade dos dados. Ele armazena dados de forma durável gravando todos os comandos de gravação em um arquivo de registro chamado arquivo AOF. Se ocorrer uma falha ou reinicialização do sistema, o servidor vai reproduzir os comandos do arquivo AOF sequencialmente para restaurar seus dados.
  • Banco de dados Redis (RDB): usado para proteção de dados. Ele protege seus dados salvando snapshots deles em armazenamento durável. Se ocorrerem falhas no nó, será possível recuperar os dados.
Ao usar a persistência AOF e RDB, é possível armazenar seus dados críticos de forma durável no Memorystore para Valkey. Você pode recuperar seus dados a qualquer momento. O Memorystore para Valkey processa o mecanismo de persistência subjacente, então há pouca necessidade de adaptação para usar a persistência.

Migre suas cargas de trabalho

Para migrar suas cargas de trabalho do Memorystore para Memcached para o Memorystore para Valkey, conclua as seguintes ações:

  1. Modifique as bibliotecas de cliente: mude as bibliotecas de cliente dos seus aplicativos de bibliotecas do Memcached para bibliotecas do Valkey.
  2. Modifique seus comandos: substitua todos os comandos da API Memcached para seus aplicativos cliente pelos comandos correspondentes da API Valkey.
  3. Implante e verifique a migração: configure a migração e confirme se é possível usá-la para migrar suas cargas de trabalho para o Memorystore para Valkey.

Modificar as bibliotecas de cliente

Nesta seção, você muda as bibliotecas de cliente dos seus aplicativos de bibliotecas do Memcached para bibliotecas do Valkey.

A tabela a seguir lista exemplos de bibliotecas de cliente do Memcached para Python, Java, Go e Node.js, além das bibliotecas correspondentes para o Valkey.

Idioma Biblioteca de cliente do Memcached Biblioteca de cliente do Valkey
Python python-memcached, pymemcache valkey-py
Java spymemcached Valkey GLIDE, valkey-java
Go gomemcache Valkey GLIDE, valkey-go
Node.js memjs Valkey GLIDE, ioredis

Modificar seus comandos

Nesta seção, você vai substituir todos os comandos da API Memcached para seus aplicativos cliente pelos comandos correspondentes da API Valkey.

Para modificar os comandos, faça o seguinte:

  1. Modifique a configuração de conexão: mude a conexão dos aplicativos cliente do servidor Memcached para o servidor Valkey.
  2. Modifique os comandos: substitua todos os comandos da API Memcached pelos comandos correspondentes da API Valkey.

Modificar a configuração da conexão

Nesta seção, você vai mudar a conexão dos aplicativos clientes do servidor Memcached para o servidor Valkey.

  1. Encontre o código usado para conectar seus aplicativos cliente ao servidor Memcached. Isso pode ser semelhante ao seguinte código:

    import memcache;
    mc = memcache.Client(['MEMCACHED_IP_ADDRESS:11211'])
    

    Substitua MEMCACHED_IP_ADDRESS pelo endereço IP da sua instância do Memorystore para Memcached.

  2. Modifique esse código para que os aplicativos cliente possam se conectar ao servidor Valkey. Isso pode ser semelhante ao seguinte código:

    import valkey;
    v = valkey.Valkey(host=VALKEY_IP_ADDRESS, port=6379, db=0)
    

    Substitua VALKEY_IP_ADDRESS pelo endereço IP da instância do Memorystore para Valkey que você cria ao implantar e verificar a migração.

Modificar os comandos

Nesta seção, substitua todos os comandos da API Memcached para seus aplicativos cliente pelos comandos correspondentes da API Valkey.

DECR

O comando DECR permite diminuir o valor armazenado em uma chave em uma quantidade.

  1. Encontre o código usado no Memcached para o comando DECR. Isso pode ser semelhante ao seguinte código:

    mc.DECR('KEY_NAME', AMOUNT)
    

    Faça as seguintes substituições:

    • KEY_NAME: o nome da chave;
    • AMOUNT: o valor pelo qual você quer diminuir o número armazenado na chave. Esse valor precisa ser um número inteiro.
  2. Modifique esse código para usá-lo com o Valkey. Suas modificações podem ser semelhantes ao seguinte código:

    v.DECR('KEY_NAME', AMOUNT)
    
EXCLUIR

O comando DELETE permite remover uma chave. Por exemplo, é possível excluir um usuário.

  1. Encontre o código usado no Memcached para o comando DELETE. Isso pode ser semelhante ao seguinte código:

    mc.DELETE('USERNAME')
    

    Substitua USERNAME pelo nome do usuário que você quer excluir.

  2. Modifique esse código para usá-lo com o Valkey. Suas modificações podem ser semelhantes ao seguinte código:

    v.DELETE('USERNAME')
    
GET

O comando GET permite recuperar um valor associado a uma chave. Por exemplo, é possível receber informações sobre um usuário.

  1. Encontre o código usado no Memcached para o comando GET. Isso pode ser semelhante ao seguinte código:

    data = mc.GET('USERNAME')
    

    Substitua USERNAME pelo nome do usuário sobre o qual você quer receber informações.

  2. Modifique esse código para usá-lo com o Valkey. Suas modificações podem ser semelhantes ao seguinte código:

    data = v.GET('USERNAME')
    
INCR

O comando INCR permite incrementar o valor armazenado em uma chave em uma quantidade.

  1. Encontre o código usado no Memcached para o comando INCR. Isso pode ser semelhante ao seguinte código:

    mc.INCR('KEY_NAME', AMOUNT)
    

    Faça as seguintes substituições:

    • KEY_NAME: o nome da chave;
    • AMOUNT: o valor pelo qual você quer incrementar o número armazenado na chave. Esse valor precisa ser um número inteiro.
  2. Modifique esse código para usá-lo com o Valkey. Suas modificações podem ser semelhantes ao seguinte código:

    v.INCR('KEY_NAME', AMOUNT)
    
MGET

O comando MGET permite recuperar valores de várias chaves em um único comando. Usar MGET melhora o desempenho do seu ambiente.

  1. Encontre o código usado no Memcached para o comando MGET. Isso pode ser semelhante ao seguinte código:

    data_map = mc.get_multi(['KEY_NAME_1', 'KEY_NAME_2'])
    

    Substitua KEY_NAME_1 e KEY_NAME_2 pelos nomes das chaves sobre as quais você quer recuperar informações.

  2. Modifique esse código para usá-lo com o Valkey. Suas modificações podem ser semelhantes ao seguinte código:

    data_list = v.MGET(['KEY_NAME_1', 'KEY_NAME_2'])
    
SET

O comando SET permite especificar um valor para uma chave. Por exemplo, é possível definir um tempo de expiração para um usuário que acessa um sistema (em segundos).

  1. Encontre o código usado no Memcached para o comando SET. Isso pode ser semelhante ao seguinte código:

    mc.SET('USERNAME', 'data', time=EXPIRATION_TIME)
    

    Faça as seguintes substituições:

    • USERNAME: o nome do usuário que está acessando o sistema
    • EXPIRATION_TIME: o número de segundos que o usuário tem até não poder mais acessar o sistema.
  2. Modifique esse código para usá-lo com o Valkey. Suas modificações podem ser semelhantes ao seguinte código:

    v.SET('USERNAME', 'data', ex=EXPIRATION_TIME)
    

Implantar e verificar a migração

Nesta seção, você configura a migração e confirma que pode usá-la para migrar suas cargas de trabalho para o Memorystore for Valkey.

Para implantar e verificar a migração, siga estas etapas:

  1. Crie uma instância do Memorystore for Valkey: verifique se a instância que você criar tem um tamanho semelhante à instância do Memorystore for Memcached. Além disso, use o Cloud Monitoring para monitorar o uso da instância do Memorystore para Valkey.
  2. Gravar nas duas instâncias: para uma migração sem tempo de inatividade, modifique seus aplicativos para gravar nas duas instâncias. Isso preenche o cache do Valkey e permite fazer comparativos de métricas de monitoramento importantes.
  3. Interrompa o tráfego para a instância do Memorystore para Memcached: mude a configuração dos aplicativos para que as operações de leitura apontem para o endereço IP e o número da porta (6379) da instância do Memorystore para Valkey.
  4. Monitore seus aplicativos: monitore as taxas de erro e as latências dos seus aplicativos.
  5. Exclua a instância do Memorystore para Memcached: pare de gravar na instância do Memorystore para Memcached e exclua a instância.

Perguntas frequentes

Esta seção contém perguntas frequentes (FAQs) sobre a migração das suas cargas de trabalho do Memorystore para Memcached para o Memorystore para Valkey.

Por que você está migrando para o Memorystore for Valkey?

O Valkey é uma ramificação de projeto de código aberto e alto desempenho da base de código do Redis. O Memorystore para Valkey oferece um serviço gerenciado compatível com o protocolo Redis. Isso garante que todas as bibliotecas de cliente e comandos do Redis funcionem perfeitamente. Migrar para o Memorystore for Valkey é funcionalmente equivalente a migrar para um servidor padrão compatível com o Redis.

É necessário reconfigurar as regras de firewall da rede?

As instâncias do Memorystore para Memcached geralmente usam a porta 11211, enquanto as instâncias do Memorystore para Valkey usam a porta 6379. Verifique se as regras de firewall da nuvem privada virtual (VPC) permitem o tráfego de saída dos aplicativos para as instâncias do Memorystore para Valkey na porta correta.

Como o Valkey processa a serialização de objetos complexos?

Como o Memcached não conhece a estrutura de objetos complexos, como objetos Python ou Java, ele trata todos os objetos como blobs opacos.

Como resultado, antes que qualquer dado chegue à rede, a serialização acontece totalmente no lado dos aplicativos cliente. O servidor só vê matrizes de bytes. Por exemplo, para ler uma única propriedade, como o endereço de e-mail de um usuário, é necessário recuperar todo o objeto serializado, desserializar nos aplicativos e ler o campo associado à propriedade.

O Valkey pode armazenar blobs e entender a estrutura de objetos complexos. Você também pode usar o Valkey para expandir os campos de um objeto em uma tabela hash do Valkey. Você pode usar essa tabela para recuperar valores aninhados diretamente.

O exemplo a seguir usa uma tabela hash do Valkey para recuperar o endereço de e-mail de um usuário:

# valkey-py
client.hset("user:101", mapping={
    "name": "username",
    "email": "username@example.com",
    "login_count": 10
})
client.hget("user:101", "email") # -> b"username@example.com"

Como os protocolos de comunicação são diferentes entre Memcached e Valkey?

O Memcached usa um protocolo ASCII e um protocolo binário opcional. O Valkey usa o protocolo de serialização do Redis (RESP, na sigla em inglês).

Embora sejam protocolos diferentes, as bibliotecas de aplicativos cliente modernas do Valkey processam o protocolo RESP automaticamente. Isso torna a diferença entre os protocolos transparente para o código do aplicativo.

Depois de migrar para o Memorystore for Valkey, como você mapeia o campo flags?

O Memorystore para Memcached é compatível com o campo flags. Esse campo contém um inteiro sem sinal de 32 bits que as bibliotecas de aplicativos cliente usam para armazenar metadados sobre valores armazenados.

O Memorystore para Valkey não é compatível com esse campo. Para mapear o campo flags para o Memorystore para Valkey, siga estas etapas:

  1. Serializa as flags no nome da chave de um objeto de string.
  2. Serializar as flags no valor de um objeto de string.
  3. Use um objeto hash com um campo designado para flags.

O Memorystore para Valkey oferece melhor desempenho?

Na maioria dos cenários, o desempenho é melhor no Memorystore para Valkey. Isso se deve às estruturas de dados avançadas, às conexões persistentes, ao suporte de pipeline e à eficiência aprimorada para operações de várias chaves do Valkey. No entanto, é necessário modificar as bibliotecas de cliente e os comandos corretamente.

Se as instâncias do Memorystore for Memcached usam vários nós, o que você faz no Memorystore for Valkey?

Ao implantar e verificar sua migração, crie instâncias com o modo de cluster ativado no Memorystore for Valkey. Essas instâncias processam o fragmentação e a alta disponibilidade internamente e aparecem como endpoints únicos para seus aplicativos. Isso simplifica a lógica do lado do cliente dos seus aplicativos.

Se as instâncias do Memorystore for Memcached usarem vários nós, qual tipo de nó será recomendado para as instâncias do Memorystore for Valkey?

Para determinar o tamanho do nó de cada uma das suas instâncias do Memorystore para Memcached, verifique o valor associado à propriedade Memória por nó. Em seguida, para determinar o tipo de nó das instâncias correspondentes do Memorystore for Valkey, use a tabela a seguir:

Tamanho do nó do Memorystore para Memcached Tipo de nó do Memorystore for Valkey Capacidade total do nó Contagem de vCPU
< 1 GB shared-core-nano 1,4 GB 0.5 (compartilhada)
1 GB a 5 GB standard-small 6,5 GB 2
6 GB a 12 GB highmem-medium 13,0 GB 2
13 GB a 50 GB highmem-xlarge 58,0 GB 8

O tipo de nó shared-core-nano é para cargas de trabalho pequenas. Esse tipo de nó oferece performance variável e não tem um SLA, o que o torna inadequado para cargas de trabalho de produção.

Quanto mais CPUs virtuais (vCPUs) você selecionar para sua instância do Memorystore para Valkey, melhor será a performance. Se a instância executar cargas de trabalho que exigem muitos recursos, selecione um tipo de nó com um vCPU maior (por exemplo, highmem-xlarge). Se a instância executar tarefas menos exigentes, selecione um tipo de nó com um vCPU menor (por exemplo, highmem-medium).