Esegui la migrazione da Memorystore for Memcached a Memorystore for Valkey

Ti consigliamo di eseguire la migrazione dei carichi di lavoro Memorystore for Memcached a Memorystore for Valkey. Memorystore for Memcached è un datastore 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à offrono sviluppo, affidabilità e prestazioni migliori 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à Modalità cluster disabilitata di Memorystore for Valkey supporta fino a 16 database per un'istanza. Puoi configurare il tuo 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 degli altri database e consente di scalare o migrare i database in modo più efficiente.
Strutture di dati avanzate Oltre alle stringhe, Memorystore for Valkey supporta elenchi, set, set ordinati, hash e bitmap. Memorystore for Valkey supporta anche filtri Bloom, 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 per 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 applicativa complessa sul server utilizzando il comando EVAL. L'utilizzo di script lato server riduce i round trip di rete e garantisce che Memorystore per Valkey possa eseguire operazioni complesse senza interruzioni. In questo modo, le prestazioni dell'applicazione migliorano.
Supporto di alta disponibilità, replica e shard L'architettura di Memorystore for Valkey supporta e fornisce l'alta disponibilità (HA). Le applicazioni client possono accedere ai nodi Memorystore for Valkey direttamente connettendosi a singoli endpoint (o shard). La funzionalità HA 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. Archivia 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 a quelle 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 per l'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 ti consente di decrementare il valore archiviato in una chiave di un importo.

  1. Trova il codice che utilizzi in Memcached per il comando DECR. 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. 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. 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. 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 ti 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. 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 carichi di lavoro a Memorystore for Valkey.

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

  1. Crea un'istanza di 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. In questo modo 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é eseguire 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 VPC (Virtual Private Cloud) 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 delle applicazioni 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 disponibilità e vengono visualizzate come singoli endpoint per le tue applicazioni. In questo modo, la logica lato client delle tue applicazioni viene semplificata.

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 la dimensione 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 carichi di lavoro di piccole dimensioni. Questo tipo di nodo offre prestazioni variabili e non dispone di uno SLA, il che lo rende inadatto ai carichi di lavoro 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 di vCPU più elevato (ad esempio, highmem-xlarge). Se la tua istanza esegue attività meno impegnative, seleziona un tipo di nodo con un numero di vCPU inferiore (ad esempio, highmem-medium).