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:
|
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 a quelle 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 per l'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 ti consente di decrementare il valore archiviato in una chiave di un importo.
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.
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. 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. 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. 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 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).
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
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:
- 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.
- 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.
- 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é 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:
- 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 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).