Best practice per Memorystore for Redis

Questa pagina fornisce indicazioni sull'utilizzo ottimale di Memorystore for Redis. Questa pagina indica anche i potenziali problemi da evitare.

Per un elenco di scenari di risoluzione dei problemi, consulta Risoluzione dei problemi.

Esportazione RDB

Quando esporti un backup RDB, segui queste indicazioni:

Operazioni ad alta intensità di risorse

Per le istanze Redis di livello standard, le seguenti operazioni utilizzano memoria aggiuntiva per la durata dell'operazione:

L'upgrade della versione, lo scaling e il failover manuale utilizzano memoria aggiuntiva (per le istanze di livello standard) a causa della replica. Queste operazioni seguono il processo di replica descritto in Comportamento dell'upgrade dell'istanza di livello standard.

Le operazioni di importazione ed esportazione richiedono memoria aggiuntiva a causa del processo Redis con fork e della gestione dei dati copy-on-write associati a queste operazioni.

Per mitigare gli inconvenienti delle operazioni ad alta intensità di risorse, devi:

Operazioni e scenari che richiedono un nuovo tentativo di connessione

Le seguenti operazioni e scenari interrompono la connessione di rete tra la rete e l'istanza Redis:

Queste operazioni modificano l'istanza, richiedendo un'interruzione temporanea della connessione. Devi avere una logica di nuovi tentativi con backoff esponenziale in modo che l'applicazione si riconnetta automaticamente e continui a funzionare normalmente.

Manutenzione di routine

Le istanze Memorystore for Redis vengono sottoposte a manutenzione periodicamente. Per maggiori dettagli, consulta la policy di manutenzione di Memorystore for Redis.

Implementa le seguenti best practice per prepararti alla manutenzione di routine:

Gestione della memoria

La gestione della memoria può essere difficile a causa della frammentazione della memoria ben nota che si verifica con Redis open source. Ti consigliamo di ridurre la configurazione maxmemory per l'istanza per avere un overhead in caso di elevata pressione della memoria.

Il modo migliore per monitorare la pressione della memoria sull'istanza Memorystore è utilizzare la metrica Rapporto di utilizzo della memoria di sistema. Per una guida dettagliata su come gestire la memoria per Memorystore for Redis, consulta Best practice per la gestione della memoria.

Gestione delle connessioni inattive

Nel tempo, potresti notare un aumento del numero di connessioni all'istanza Memorystore se le connessioni non vengono terminate correttamente. Questo può avere implicazioni negative sulle prestazioni, soprattutto se utilizzi la crittografia in transito, che impone limiti massimi di connessioni in base al livello di capacità. Per mitigare questo problema, ti consigliamo di utilizzare il timeout parametro di configurazione Redis che consente di impostare il numero di secondi prima che le connessioni client inattive vengano terminate automaticamente.

Nomi delle risorse di Access Transparency

I dati sensibili non devono essere archiviati nei nomi delle risorse di Memorystore for Redis. Per nomi delle risorse si intendono i nomi delle istanze Memorystore for Redis e i metadati delle istanze, come i tag. Non è garantito che i dati archiviati nei nomi delle risorse siano protetti da Google Cloud Access Transparency, e potrebbero essere in conflitto con i requisiti di conformità di Access Transparency della tua organizzazione.

Connettore di accesso VPC serverless richiesto per alcuni ambienti serverless

Alcuni ambienti serverless richiedono un connettore di accesso VPC serverless per connettersi a Memorystore for Redis. Configura il connettore di accesso VPC serverless per il tuo progetto se vuoi connetterti utilizzando uno di questi ambienti.

Networking

Ti consigliamo di utilizzare la modalità di connessione accesso privato ai servizi . Memorystore for Redis utilizza due modalità di connessione: accesso privato ai servizi e peering diretto. La modalità di connessione Accesso privato ai servizi semplifica la gestione degli intervalli IP e ti consente di utilizzare VPC condiviso, se vuoi.

Una volta creata un'istanza, la modalità di connessione non può essere modificata.

Per maggiori dettagli, consulta Networking.

Monitoraggio e avvisi

Ti consigliamo di utilizzare il monitoraggio e gli avvisi perché forniscono segnali chiave sulla memoria utilizzata dell'istanza Redis. Ti forniscono anche informazioni sull'efficienza con cui l'istanza Redis risponde alle richieste di cache in entrata.

Devi configurare i seguenti avvisi predefiniti:

Best practice per l'utilizzo della CPU

L'utilizzo improprio di comandi Redis costosi comporta latenza elevata, mancata risposta o problemi di connettività. Le istanze di livello Standard forniscono alta affidabilità durante ripristino di emergenza e si basano sulla replica asincrona tra i nodi principali e di replica. Se uno dei nodi ha un'elaborazione di comandi costosa che blocca il thread principale di Redis, la replica potrebbe essere interessata. Se il problema persiste e si verifica un'interruzione della località, i dati più recenti scritti nella località dell'interruzione potrebbero non essere disponibili nell'altra località.

Ti consigliamo di utilizzare Cloud Monitoring per impostare avvisi per la metrica Secondi CPU del thread principale (redis.googleapis.com/stats/cpu_utilization_main_thread) per assicurarti che l'utilizzo della CPU non superi 0,8 secondi per il nodo principale o 0,5 secondi per ogni nodo di replica, quando la replica è designata come replica di lettura.

Se l'istanza Redis supera i valori consigliati, ti consigliamo di eseguire lo scale up dell'istanza a un livello di capacità superiore o di seguire le istruzioni per la risoluzione dei problemi per evitare operazioni ad alta intensità di CPU.

Se l'istanza presenta un utilizzo elevato della CPU o le risorse dell'istanza si esauriscono (ad esempio, a causa di un numero eccessivo di connessioni), l'istanza potrebbe non funzionare correttamente e le metriche esterne potrebbero mancare.

Comandi ad alta intensità di risorse

Ti consigliamo vivamente di evitare di utilizzare i comandi Redis ad alta intensità di risorse. L'utilizzo di questi comandi potrebbe causare i seguenti problemi di prestazioni:

  • Latenza elevata e timeout del client
  • Pressione della memoria causata da comandi che aumentano la memoria utilizzata
  • Perdita di dati durante la replica e la sincronizzazione dei nodi perché il thread principale di Redis è bloccato
  • Controlli di integrità, osservabilità e replica insufficienti

La tabella seguente elenca esempi di comandi Redis ad alta intensità di risorse e fornisce alternative efficienti in termini di risorse.

Category Resource-intensive command Resource-efficient alternative
Run for the entire keyspace KEYS SCAN
Run for a variable-length keyset LRANGE Limit the size of the range that you use for a query.
ZRANGE Limit the size of the range that you use for a query.
HGETALL HSCAN
SMEMBERS SSCAN
Block the running of a script EVAL Ensure that your script doesn't run indefinitely.
EVALSHA Ensure that your script doesn't run indefinitely.
Remove files and links DEL UNLINK
Publish and subscribe PUBLISH SPUBLISH
SUBSCRIBE SSUBSCRIBE

Best practice per i client Redis

Questa sezione fornisce indicazioni sull'utilizzo ottimale del client Redis.

Rilevare e gestire le connessioni che non rispondono

Ti consigliamo vivamente di configurare l'applicazione client in modo che rilevi le connessioni che non rispondono a Memorystore for Redis. Quando viene rilevata una connessione che non risponde, il client deve reimpostarla. Per creare un'applicazione resiliente, ti consigliamo le seguenti configurazioni client:

  • Configura i parametri di keep-alive TCP: imposta i parametri TCP keepalive time, TCP keepalive interval e TCP keepalive probes in modo che i client rilevino e abbandonino in modo proattivo le connessioni che non rispondono, anche quando le connessioni sono inattive. Ad esempio, se imposti il parametro TCP keepalive time su 30 secondi, TCP keepalive interval su 10 secondi e TCP keepalive probes su 3, i client reimpostano le connessioni inattive che non rispondono entro un minuto.
  • Configura i timeout utente TCP: imposta questo timeout nei client per reimpostare le connessioni con richieste in sospeso e interrompere la risposta. Ad esempio, se imposti il timeout su 15 secondi, i client reimpostano le connessioni che non rispondono con richieste in sospeso dopo 15 secondi.