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:
|
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:
- Modifica le librerie client: cambia le librerie client per le tue applicazioni dalle librerie Memcached alle librerie Valkey.
- Modifica i comandi: sostituisci tutti i comandi per l'API Memcached per le tue applicazioni client con i comandi corrispondenti per l'API Valkey.
- 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:
- Modifica la configurazione della connessione: cambia la connessione delle applicazioni client dal server Memcached al server Valkey.
- 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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
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:
- 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.
- 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.
- 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.
- Monitora le tue applicazioni: monitora i tassi di errore e le latenze delle tue applicazioni.
- 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:
- Serializza i flag nel nome della chiave di un oggetto stringa.
- Serializza i flag nel valore di un oggetto stringa.
- 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).