Esegui la migrazione da Memorystore for Memcached a Memorystore for Valkey

Ti consigliamo di eseguire la migrazione dei workload Memorystore for Memcached a Memorystore for Valkey. Memorystore for Memcached è un datastore coppia chiave-valore, mentre Memorystore for Valkey è un server di strutture di dati più ricco di funzionalità.

Memorystore for Valkey offre funzionalità simili a Memorystore for Memcached. Inoltre, Memorystore for Valkey offre i seguenti vantaggi:

  • Offre un datastore in memoria completamente gestito e ad alte prestazioni per Valkey, un progetto open source compatibile con Redis.
  • È un servizio Valkey completamente gestito per Google Cloud, che supporta istanze con modalità cluster abilitata e disabilitata.
  • Le applicazioni in esecuzione su Google Cloud possono raggiungere prestazioni elevate utilizzando il servizio Valkey, estremamente sicuro, disponibile e scalabile, senza il carico di dover gestire complessi deployment Valkey.

Funzionalità di Memorystore for Valkey

La migrazione a Memorystore for Valkey ti consente di accedere a funzionalità non disponibili in Memorystore for Memcached. Queste funzionalità ti offrono migliore sviluppo, affidabilità e prestazioni delle applicazioni.

La tabella seguente elenca e descrive le funzionalità disponibili in Memorystore for Valkey e spiega i vantaggi dell'utilizzo di queste funzionalità.

Funzionalità Descrizione Vantaggi
Più database Memorystore for Memcached è uno spazio delle chiavi singolo e piatto. Tuttavia, per impostazione predefinita, la modalità Cluster Mode Disabled di Memorystore for Valkey supporta fino a 16 database per un'istanza. Puoi configurare l'ambiente in modo da avere fino a 100 database per un'istanza. Avere più database per un'istanza impedisce un singolo punto di errore per l'istanza, consente di eseguire il backup o il ripristino di un singolo database senza influire sulla disponibilità o sulla coerenza di altri database e consente di scalare o migrare i database in modo più efficiente.
Strutture di dati avanzate Oltre alle stringhe, Memorystore per Valkey supporta elenchi, set, set ordinati, hash e bitmap. Memorystore per Valkey supporta anche i filtri Bloom, la ricerca vettoriale e JSON. Puoi utilizzare Memorystore for Valkey per casi d'uso complessi come classifiche, code di attività e memorizzazione nella cache degli oggetti, senza serializzazione dell'applicazione. Puoi anche utilizzare la ricerca vettoriale per eseguire query semantiche con latenze inferiori al millisecondo.
Transazioni Puoi utilizzare i comandi MULTI e EXEC per eseguire un gruppo di comandi come un'unica unità indivisibile in modo atomico. Sebbene tu possa utilizzare le funzionalità di confronto e scambio (CAS) di Memorystore for Memcached per il blocco ottimistico a livello di chiave, Memorystore for Valkey ti consente di eseguire un gruppo di comandi in modo atomico.
Messaggistica Pub/Sub Utilizzando Pub/Sub con Memorystore for Valkey, le tue applicazioni client possono iscriversi a canali e ricevere messaggi in tempo reale. Memorystore for Valkey ti consente di trasformare la cache in un broker di messaggi leggero per aggiornamenti in tempo reale e comunicazione tra servizi.
Script Lua Puoi utilizzare Lua per eseguire in modo atomico una logica dell'applicazione complessa sul server utilizzando il comando EVAL. L'utilizzo di script lato server riduce i round trip di rete e garantisce che Memorystore for Valkey possa eseguire operazioni complesse senza interruzioni. Ciò migliora le prestazioni dell'applicazione.
Supporto di alta disponibilità, replica e partizionamento L'architettura di Memorystore for Valkey supporta e fornisce alta affidabilità (HA). Le applicazioni client possono accedere ai nodi Memorystore for Valkey direttamente connettendosi a singoli endpoint (o shard). L'alta disponibilità e la replica migliorano l'affidabilità del sistema e riducono al minimo le interruzioni durante gli aggiornamenti critici. L'utilizzo di shard ti consente di distribuire in modo efficace il carico elevato di traffico associato alle tue applicazioni client.
Persistenza

Memorystore for Valkey supporta i seguenti tipi di persistenza:

  • File di tipo Append-only file (AOF): utilizzato per la durabilità dei dati. Memorizza i dati in modo duraturo registrando ogni comando di scrittura in un file di log chiamato file AOF. Se si verifica un errore o un riavvio del sistema, il server riproduce i comandi del file AOF in sequenza per ripristinare i dati.
  • Redis Database (RDB): utilizzato per la protezione dei dati. Protegge i tuoi dati salvando snapshot dei dati in uno spazio di archiviazione durevole. Se si verificano errori del nodo, puoi recuperare i dati.
Utilizzando la persistenza AOF e RDB, puoi archiviare i tuoi dati critici in Memorystore for Valkey in modo duraturo. Puoi recuperare i tuoi dati in qualsiasi momento. Memorystore for Valkey gestisce il meccanismo di persistenza sottostante, quindi l'utilizzo della persistenza è semplice.

Migrazione dei carichi di lavoro

Per eseguire la migrazione dei workload Memorystore for Memcached a Memorystore for Valkey, devi completare le seguenti azioni:

  1. Modifica le librerie client: cambia le librerie client per le tue applicazioni dalle librerie Memcached alle librerie Valkey.
  2. Modifica i comandi: sostituisci tutti i comandi per l'API Memcached per le tue applicazioni client con i comandi corrispondenti per l'API Valkey.
  3. Esegui il deployment e verifica la migrazione: configura la migrazione e verifica di poterla utilizzare per eseguire la migrazione dei tuoi workload a Memorystore for Valkey.

Modificare le librerie client

In questa sezione, modifichi le librerie client per le tue applicazioni passando dalle librerie Memcached a quelle Valkey.

La tabella seguente elenca esempi di librerie client Memcached per Python, Java, Go e Node.js e le librerie corrispondenti per Valkey.

Lingua Libreria client Memcached Libreria client 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

Modificare i comandi

In questa sezione, sostituisci tutti i comandi dell'API Memcached per le tue applicazioni client con i comandi corrispondenti dell'API Valkey.

Per modificare i comandi, devi completare le seguenti azioni:

  1. Modifica la configurazione della connessione: cambia la connessione delle applicazioni client dal server Memcached al server Valkey.
  2. Modifica i comandi: sostituisci tutti i comandi dell'API Memcached con i comandi corrispondenti per l'API Valkey.

Modificare la configurazione della connessione

In questa sezione, modifichi la connessione delle applicazioni client dal server Memcached al server Valkey.

  1. Trova il codice che utilizzi per connettere le applicazioni client al server Memcached. Potrebbe essere simile al seguente codice:

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

    Sostituisci MEMCACHED_IP_ADDRESS con l'indirizzo IP dell'istanza Memorystore for Memcached.

  2. Modifica questo codice in modo che le tue applicazioni client possano connettersi al server Valkey. Potrebbe essere simile al seguente codice:

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

    Sostituisci VALKEY_IP_ADDRESS con l'indirizzo IP dell'istanza Memorystore for Valkey che crei quando esegui il deployment e verifichi la migrazione.

Modificare i comandi

In questa sezione, sostituisci tutti i comandi dell'API Memcached per le tue applicazioni client con i comandi corrispondenti per l'API Valkey.

DECR

Il comando DECR consente di decrementare il valore archiviato in una chiave di un importo.

  1. Trova il codice che utilizzi in Memcached per il comando DECR. Questo potrebbe essere simile al seguente codice:

    mc.DECR('KEY_NAME', AMOUNT)
    

    Effettua le seguenti sostituzioni:

    • KEY_NAME: il nome della chiave.
    • AMOUNT: il valore di cui vuoi decrementare il numero memorizzato nella chiave. Questo valore deve essere un numero intero.
  2. Modifica questo codice in modo da poterlo utilizzare con Valkey. Le modifiche potrebbero essere simili al seguente codice:

    v.DECR('KEY_NAME', AMOUNT)
    
ELIMINA

Il comando DELETE ti consente di rimuovere una chiave. Ad esempio, puoi eliminare un utente.

  1. Trova il codice che utilizzi in Memcached per il comando DELETE. Potrebbe essere simile al seguente codice:

    mc.DELETE('USERNAME')
    

    Sostituisci USERNAME con il nome dell'utente che vuoi eliminare.

  2. Modifica questo codice in modo da poterlo utilizzare con Valkey. Le modifiche potrebbero essere simili al seguente codice:

    v.DELETE('USERNAME')
    
GET

Il comando GET consente di recuperare un valore associato a una chiave. Ad esempio, puoi ottenere informazioni su un utente.

  1. Trova il codice che utilizzi in Memcached per il comando GET. Questo potrebbe essere simile al seguente codice:

    data = mc.GET('USERNAME')
    

    Sostituisci USERNAME con il nome dell'utente su cui vuoi ottenere informazioni.

  2. Modifica questo codice in modo da poterlo utilizzare con Valkey. Le modifiche potrebbero essere simili al seguente codice:

    data = v.GET('USERNAME')
    
INCR

Il comando INCR consente di incrementare il valore memorizzato in una chiave di un importo.

  1. Trova il codice che utilizzi in Memcached per il comando INCR. Questo potrebbe essere simile al seguente codice:

    mc.INCR('KEY_NAME', AMOUNT)
    

    Effettua le seguenti sostituzioni:

    • KEY_NAME: il nome della chiave.
    • AMOUNT: il valore di cui vuoi incrementare il numero memorizzato nella chiave. Questo valore deve essere un numero intero.
  2. Modifica questo codice in modo da poterlo utilizzare con Valkey. Le modifiche potrebbero essere simili al seguente codice:

    v.INCR('KEY_NAME', AMOUNT)
    
MGET

Il comando MGET consente di recuperare i valori per più chiavi in un unico comando. L'utilizzo di MGET migliora il rendimento del tuo ambiente.

  1. Trova il codice che utilizzi in Memcached per il comando MGET. Questo potrebbe essere simile al seguente codice:

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

    Sostituisci KEY_NAME_1 e KEY_NAME_2 con i nomi delle chiavi per cui vuoi recuperare informazioni.

  2. Modifica questo codice in modo da poterlo utilizzare con Valkey. Le modifiche potrebbero essere simili al seguente codice:

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

Il comando SET consente di specificare un valore per una chiave. Ad esempio, puoi impostare un tempo di scadenza per un utente che accede a un sistema (in secondi).

  1. Trova il codice che utilizzi in Memcached per il comando SET. Questo potrebbe essere simile al seguente codice:

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

    Effettua le seguenti sostituzioni:

    • USERNAME: il nome dell'utente che accede al sistema
    • EXPIRATION_TIME: il numero di secondi che l'utente ha a disposizione prima di non poter più accedere al sistema
  2. Modifica questo codice in modo da poterlo utilizzare con Valkey. Le modifiche potrebbero essere simili al seguente codice:

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

Esegui il deployment e verifica la migrazione

In questa sezione configurerai la migrazione e confermerai di poterla utilizzare per migrare i tuoi workload a Memorystore for Valkey.

Per eseguire il deployment e verificare la migrazione, completa i seguenti passaggi:

  1. Crea un'istanza Memorystore for Valkey: assicurati che l'istanza che crei abbia una dimensione simile a quella dell'istanza Memorystore for Memcached. Inoltre, utilizza Cloud Monitoring per monitorare l'utilizzo dell'istanza Memorystore for Valkey.
  2. Scrivi su entrambe le istanze: per una migrazione senza tempi di inattività, modifica le tue applicazioni in modo che scrivano su entrambe le istanze. Viene compilata la cache Valkey e puoi confrontare le metriche di monitoraggio chiave.
  3. Interrompi il traffico verso l'istanza Memorystore for Memcached: modifica la configurazione delle tue applicazioni in modo che le operazioni di lettura puntino all'indirizzo IP e al numero di porta (6379) dell'istanza Memorystore for Valkey.
  4. Monitora le tue applicazioni: monitora i tassi di errore e le latenze delle tue applicazioni.
  5. Elimina l'istanza Memorystore for Memcached: interrompi la scrittura nell'istanza Memorystore for Memcached, quindi elimina l'istanza.

Domande frequenti

Questa sezione contiene le domande frequenti sulla migrazione dei workload Memorystore for Memcached a Memorystore for Valkey.

Perché esegui la migrazione a Memorystore for Valkey?

Valkey è un progetto open source ad alte prestazioni derivato dal codice base di Redis. Memorystore for Valkey fornisce un servizio gestito compatibile con il protocollo Redis. In questo modo, tutte le librerie client e i comandi Redis esistenti funzionano perfettamente. La migrazione a Memorystore for Valkey è funzionalmente equivalente alla migrazione a un server standard compatibile con Redis.

Devi riconfigurare le regole firewall di rete?

Le istanze Memorystore for Memcached in genere utilizzano la porta 11211, mentre le istanze Memorystore for Valkey utilizzano la porta 6379. Devi assicurarti che le regole firewall Virtual Private Cloud (VPC) consentano il traffico in uscita dalle tue applicazioni alle istanze Memorystore for Valkey sulla porta corretta.

In che modo Valkey gestisce la serializzazione di oggetti complessi?

Poiché Memcached non conosce la struttura di oggetti complessi, come gli oggetti Python o Java, tratta tutti gli oggetti come blob opachi.

Di conseguenza, prima che i dati raggiungano la rete, la serializzazione avviene interamente sul lato delle applicazioni client. Il server vede solo array di byte. Ad esempio, per leggere una singola proprietà come l'indirizzo email di un utente, devi recuperare l'intero oggetto serializzato, deserializzarlo nelle tue applicazioni e quindi leggere il campo associato alla proprietà.

Valkey può archiviare i blob e comprendere la struttura degli oggetti complessi. Puoi anche utilizzare Valkey per espandere i campi di un oggetto in una tabella hash Valkey. Puoi utilizzare questa tabella per recuperare direttamente i valori nidificati in profondità.

L'esempio seguente utilizza una tabella hash Valkey per recuperare l'indirizzo email di un utente:

# 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"

In che modo i protocolli di comunicazione differiscono tra Memcached e Valkey?

Memcached utilizza un protocollo ASCII e un protocollo binario facoltativo. Valkey utilizza il protocollo di serializzazione Redis (RESP).

Sebbene si tratti di protocolli diversi, le moderne librerie dell'applicazione client Valkey gestiscono automaticamente il protocollo RESP. In questo modo, la differenza tra i protocolli è trasparente per il codice dell'applicazione.

Dopo la migrazione a Memorystore for Valkey, come viene mappato il campo flags?

Memorystore for Memcached supporta il campo flags. Questo campo contiene un intero senza segno a 32 bit che le librerie dell'applicazione client utilizzano per archiviare i metadati sui valori archiviati.

Memorystore for Valkey non supporta questo campo. Per mappare il campo flags a Memorystore for Valkey, completa i seguenti passaggi:

  1. Serializza i flag nel nome della chiave di un oggetto stringa.
  2. Serializza i flag nel valore di un oggetto stringa.
  3. Utilizza un oggetto hash con un campo designato per i flag.

Memorystore for Valkey offre prestazioni migliori?

Nella maggior parte degli scenari, le prestazioni sono migliori in Memorystore for Valkey. Ciò è dovuto alle strutture di dati avanzate, alle connessioni persistenti, al supporto del pipelining e alla maggiore efficienza per le operazioni con più chiavi di Valkey. Tuttavia, devi modificare le librerie client e i comandi in modo corretto.

Se le tue istanze Memorystore for Memcached utilizzano più nodi, cosa fai in Memorystore for Valkey?

Quando esegui il deployment e la verifica della migrazione, crea istanze con la modalità cluster abilitata in Memorystore for Valkey. Queste istanze gestiscono internamente lo sharding e l'alta affidabilità e vengono visualizzate come singoli endpoint per le tue applicazioni. Ciò semplifica la logica lato client delle tue applicazioni.

Se le tue istanze Memorystore for Memcached utilizzano più nodi, quale tipo di nodo consigliamo per le tue istanze Memorystore for Valkey?

Per ogni istanza Memorystore for Memcached, per determinare le dimensioni del nodo, controlla il valore associato alla proprietà Memoria per nodo. Quindi, per determinare il tipo di nodo per le istanze Memorystore for Valkey corrispondenti, utilizza la seguente tabella:

Dimensioni del nodo Memorystore for Memcached Tipo di nodo Memorystore for Valkey Capacità totale dei nodi Numero di vCPU
< 1 GB shared-core-nano 1,4 GB 0,5 (condiviso)
1 GB - 5 GB standard-small 6,5 GB 2
6 GB - 12 GB highmem-medium 13 GB 2
13 GB - 50 GB highmem-xlarge 58,0 GB 8

Il tipo di nodo shared-core-nano è per workload di piccole dimensioni. Questo tipo di nodo offre prestazioni variabili e non ha uno SLA, il che lo rende inadatto ai workload di produzione.

Più CPU virtuali (vCPU) selezioni per l'istanza Memorystore for Valkey, migliori saranno le prestazioni. Se la tua istanza esegue carichi di lavoro che richiedono molte risorse, seleziona un tipo di nodo con un numero maggiore di vCPU (ad esempio, highmem-xlarge). Se la tua istanza esegue attività meno impegnative, seleziona un tipo di nodo con un numero inferiore di vCPU (ad esempio, highmem-medium).