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:
- Esporta durante un periodo di bassa velocità di scrittura.
- Se esporti durante un periodo di alta velocità di scrittura, riduci temporaneamente
maxmemoryconfig al 50% della capacità dell'istanza per fornire un overhead sufficiente per il successo dell' operazione.
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:
- Ridurre la configurazione maxmemory all'80% della capacità dell'istanza per la durata dell'operazione. In questo modo si fornisce un overhead sufficiente per il successo dell'operazione.
- Monitorare la metrica Rapporto di utilizzo della memoria utilizzata del sistema, e assicurarsi che sia inferiore all'80% prima di eseguire una di queste operazioni.
- Eseguire queste operazioni durante i periodi di traffico ridotto dell'istanza (ad esempio di notte, durante il fine settimana e così via).
- Avere una logica di nuovi tentativi con backoff esponenziale prima di eseguire queste operazioni.
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:
- Upgrade della versione
- Scale up/down
- Importazione
- Failover manuale
- Manutenzione del sistema
- Rotazione dell'autorità di certificazione per le istanze Redis con crittografia in transito abilitata
- Failover di emergenza
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:
- Imposta un periodo di manutenzione durante il quale possono verificarsi gli aggiornamenti di manutenzione.
- Pianifica i periodi di manutenzione per i momenti di traffico ridotto dell'istanza e overhead di memoria sufficiente. Per maggiori informazioni, consulta Impatti degli aggiornamenti di manutenzione.
- Attiva le notifiche dei periodi di manutenzione per ricevere avvisi sulla manutenzione imminente.
- Avere una logica di nuovi tentativi con backoff esponenziale in atto.
- Per le istanze di livello standard, puoi simulare un evento di manutenzione utilizzando il failover manuale per vedere in che modo il failover causato dalla manutenzione influisce sulla tua applicazione.
- Per le istanze di livello base, puoi simulare l'impatto di un aggiornamento di manutenzione eseguendo temporaneamente lo scale up dell'istanza a una dimensione maggiore. Dopo aver osservato l'impatto, puoi eseguire lo scale down alla dimensione originale.
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:
- Impostazione di un avviso di Cloud Monitoring per la memoria utilizzata
- Impostazione di un avviso di Cloud Monitoring per il rapporto di utilizzo della memoria di sistema
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 intervaleTCP keepalive probesin 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 parametroTCP keepalive timesu 30 secondi,TCP keepalive intervalsu 10 secondi eTCP keepalive probessu 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.