Come posso risolvere i problemi di latenza elevata in ElastiCache per Redis?

7 minuti di lettura
0

Desidero risolvere i problemi di latenza elevata in Amazon ElastiCache per Redis.

Breve descrizione

Le seguenti sono le cause più comuni dei problemi di latenza elevata in ElastiCache per Redis:

  • Comandi lenti
  • Aumento dell'attività di swap causata dall'elevato utilizzo della memoria
  • Problemi di rete
  • Problemi di latenza lato client
  • Sincronizzazione di Redis
  • Eventi del cluster ElastiCache

Risoluzione

Risolvi i problemi di latenza elevata dovuti alle seguenti cause:

Comandi lenti

Redis è a thread singolo. Quando una richiesta è lenta da soddisfare, gli altri client devono attendere. Questo rallentamento comporta un aumento del tempo totale di evasione delle richieste. Per monitorare la latenza media per diverse classi di comandi, utilizza le metriche per Redis di Amazon CloudWatch. Inoltre, le operazioni Redis comuni vengono calcolate con una latenza di microsecondi. Le metriche di CloudWatch vengono campionate ogni minuto e le metriche di latenza vengono mostrate come un aggregato di più comandi. Un singolo comando può causare risultati imprevisti, ad esempio timeout, senza che nei grafici delle metriche appaiano modifiche significative. Per recuperare un elenco di comandi il cui completamento richiede molto tempo, usa SLOWLOG GET. Inoltre, esegui il comando slowlog get 128 in redis-cli. Per ulteriori informazioni, consulta SLOWLOG GET sul sito Web di Redis. Inoltre, consulta Come posso attivare il registro Redis Slow in un cluster di cache ElastiCache per Redis?

Se si verifica un aumento della metrica EngineCPUUtilization, consulta Perché riscontro un utilizzo elevato o crescente della CPU nel cluster ElastiCache per Redis?

Di seguito sono riportati alcuni esempi di comandi complessi:

  • KEYS in ambienti di produzione su set di dati di grandi dimensioni. KEYS esplora l'intero spazio delle chiavi e cerca i modelli specificati. Per ulteriori informazioni, consulta KEYS sul sito Web Redis.
  • Script Lua che richiedono molto tempo per essere eseguiti. Per ulteriori informazioni, consulta Scripting with Lua sul sito Web Redis.

Aumento dell'attività di swap causata dall'elevato utilizzo della memoria

Redis scambia le pagine di memoria quando si verifica un aumento della pressione della memoria sul cluster. Ciò potrebbe causare un aumento della latenza e dei timeout a causa delle pagine di memoria trasferite da e verso l'area di scambio. Quanto segue indica una maggiore attività di swap nelle metriche di CloudWatch:

  • Aumento di SwapUsage
  • Valore FreeableMemory molto basso
  • Valori elevati delle metriche BytesUsedForCache e DatabaseMemoryUsagePercentage

Per risolvere i problemi relativi all'aumento dell'attività di swap, consulta le seguenti risorse:

Problemi di rete

Per risolvere i problemi di latenza elevata causati da problemi di rete, consulta i seguenti scenari:

Latenza di rete tra il client e il cluster ElastiCache
Per isolare la latenza di rete tra i nodi client e cluster, consulta Come posso risolvere i problemi relativi alle prestazioni di rete tra le istanze EC2 Linux o Windows in un VPC e un host on-premise tramite il gateway Internet?

Il cluster raggiunge i limiti della rete
Un nodo ElastiCache condivide gli stessi limiti di rete delle relative istanze Amazon Elastic Compute Cloud (Amazon EC2). Ad esempio, il tipo di nodo cache.m6g.large ha gli stessi limiti di rete dell'istanza Amazon EC2 m6g.large. Per informazioni sulla risoluzione dei problemi relativi ai limiti di rete del nodo ElastiCache, consulta Network-related limits. Inoltre, è consigliabile monitorare le prestazioni di rete dell'istanza Amazon EC2 e verificare la capacità di larghezza di banda, le prestazioni dei pacchetti per secondo (PPS) e le connessioni tracciate.

Latenza dell’handshake TCP/SSL

I client utilizzano una connessione TCP per connettersi ai cluster Redis. La creazione delle connessioni TCP può richiedere alcuni millisecondi. Questo ritardo potrebbe comportare un sovraccarico aggiuntivo per le operazioni Redis dell'applicazione. Inoltre, il nodo ElastiCache riceve una pressione aggiuntiva sulla CPU. Assicurati di controllare il volume delle nuove connessioni, soprattutto quando il cluster utilizza la funzionalità di crittografia in transito (TLS) di ElastiCache. Un volume elevato di connessioni aperte (NewConnections) e chiuse potrebbe influire sulle prestazioni del nodo. Per un numero elevato di connessioni, utilizza il pooling delle connessioni per memorizzare in un pool nella cache le connessioni TCP stabilite. Per implementare il pooling delle connessioni, utilizza la libreria client Redis (se supportata) o crea manualmente il pool di connessioni. È inoltre possibile utilizzare comandi aggregati come MSET/MGET o pipeline Redis come tecnica di ottimizzazione. Per ulteriori informazioni, consulta Redis pipelining sul sito Web di Redis.

Esiste un elevato numero di connessioni sul nodo ElastiCache

È consigliabile monitorare le metriche CurrConnections e NewConnections di CloudWatch. Queste metriche indicano il numero di connessioni TCP accettate da Redis. Un numero elevato di connessioni TCP potrebbe portare all'esaurimento del limite di 65.000 maxclients. Questo limite è il numero massimo di connessioni simultanee per nodo. Per ulteriori informazioni, consulta Maximum concurrent connected clients sul sito Web Redis. Quando si raggiunge il limite di 65.000, viene visualizzato l'errore ERR max number of clients reached. Se vengono aggiunte più connessioni oltre il limite del server Linux o il numero massimo di connessioni tracciate, si verificano dei timeout di connessione. Per ulteriori informazioni su come prevenire un numero elevato di connessioni, consulta Best practices with Redis clients.

Problemi di latenza lato client

Per determinare se le risorse lato client causano problemi di latenza, controlla l'utilizzo della memoria, della CPU e della rete sul lato client. Assicurati che queste risorse non siano vicine ai loro limiti. Se l'applicazione viene eseguita su un'istanza Amazon EC2, utilizza le metriche di CloudWatch per identificare i problemi. Inoltre, utilizza uno strumento di monitoraggio all'interno dell'istanza Amazon EC2, ad esempio atop o l’agente CloudWatch.

Se i valori di configurazione del timeout impostati per l'applicazione sono troppo piccoli, potrebbero verificarsi errori di timeout non necessari. Per risolvere questi errori, configura il timeout lato client per concedere al server il tempo sufficiente per elaborare le richieste e generare risposte. Per ulteriori informazioni, consulta Best practices with Redis clients. Inoltre, gli errori di timeout mostrano informazioni aggiuntive. Assicurati di esaminare i dettagli dell'errore di timeout per isolare la causa della latenza. Controlla i seguenti modelli per determinare se la latenza è causata dal lato client, dal nodo ElastiCache o dalla rete:

  • Controlla se i timeout si verificano frequentemente o in un momento specifico della giornata.
  • Verifica se i timeout si verificano su un client specifico o su più client.
  • Controlla se i timeout si verificano in uno specifico nodo Redis o in più nodi.
  • Verifica se i timeout si verificano in un cluster specifico o in più cluster.

Sincronizzazione di Redis

La sincronizzazione di Redis viene avviata in occasione di eventi di backup, sostituzione dei nodi e scalabilità. Si tratta di un carico di lavoro ad alta intensità di calcolo che può causare latenze. Per verificare se la sincronizzazione è in corso, utilizza la metrica SaveInProgress di CloudWatch. Per ulteriori informazioni, consulta How synchronization and backup are implemented.

Eventi del cluster ElastiCache

Per verificare il periodo di tempo in cui si è verificata la latenza, visualizza la sezione Eventi nella console ElastiCache. Verifica le attività in background, come la sostituzione dei nodi o gli eventi di failover, che potrebbero essere causati dalla manutenzione e dagli aggiornamenti dei servizi gestiti da ElastiCache. Inoltre, verifica la presenza di guasti hardware imprevisti. Le notifiche di eventi pianificati vengono ricevute tramite Dashboard AWS Health e tramite e-mail.

Esempio di registro eventi:

Finished recovery for cache nodes 0001Recovering cache nodes 0001
Failover from master node <cluster_node> to replica node <cluster_node> completed

Informazioni correlate

Monitoring best practices with Amazon ElastiCache for Redis using Amazon CloudWatch

Additional troubleshooting stepshttps://kcs.support.aws.dev/article/elasticache-redis-correct-high-latency/2

AWS UFFICIALE
AWS UFFICIALEAggiornata 9 mesi fa