Risoluzione dei problemi di latenza in Amazon DynamoDB - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risoluzione dei problemi di latenza in Amazon DynamoDB

Se il tuo carico di lavoro sembra avere una latenza elevata, puoi analizzare la CloudWatch SuccessfulRequestLatency metrica e controllare la latenza media per vedere se è correlata a DynamoDB. Una certa variabilità nel valore di SuccessfulRequestLatency restituito è normale e i picchi occasionali (in particolare nelle statistiche Maximum) non devono essere motivo di preoccupazione. Tuttavia, se le statistiche Average mostrano un forte aumento persistente, è necessario controllare il Pannello di controllo per lo stato dei servizi AWS e il Personal Health Dashboard per ulteriori informazioni. Alcune possibili cause includono la dimensione dell'elemento nella tabella (un elemento da 1 kb e un elemento da 400 kb avranno una latenza diversa) o la dimensione della query (10 elementi rispetto a 100 elementi).

Se necessario, considera la possibilità di aprire una richiesta di supporto con AWS Support e continua a valutare le opzioni di fallback disponibili per la tua applicazione (ad esempio l'evacuazione di una regione se disponi di un'architettura a più regioni) in base ai tuoi runbook. È necessario registrare gli ID delle richieste per le richieste lente a cui fornire questi ID AWS Support quando si apre una richiesta di supporto.

Il parametro SuccessfulRequestLatency misura solo la latenza interna al servizio DynamoDB, l'attività lato client e i tempi di accesso alla rete non sono inclusi. Per avere altri dettagli sulla latenza complessiva delle chiamate dal client al servizio DynamoDB, puoi abilitare la registrazione dei parametri di latenza nel tuo SDK AWS.

Nota

Per la maggior parte delle operazioni singleton (operazioni che si applicano a un singolo elemento specificando completamente il valore della chiave primaria), DynamoDB fornisce un valore di Average SuccessfulRequestLatency pari a pochissimi millisecondi. Questo valore non include il sovraccarico di trasporto per il codice chiamante che accede all'endpoint DynamoDB. Per le operazioni sui dati con più elementi, la latenza varia in base a fattori quali la dimensione del set di risultati, la complessità delle strutture di dati restituite e le eventuali espressioni di condizione e di filtro applicate. Per operazioni con più elementi ripetute sullo stesso set di dati con gli stessi parametri, DynamoDB fornisce un'elevata coerenza per Average SuccessfulRequestLatency.

Prendi in considerazione una o più delle seguenti strategie per ridurre la latenza:

  • Regola il timeout della richiesta e il comportamento dei nuovi tentativi: il percorso dal client a DynamoDB attraversa molti componenti, ognuno dei quali è progettato sulla base della ridondanza. Pensa all'ambito della resilienza della rete, ai timeout dei pacchetti TCP e all'architettura distribuita di DynamoDB. I comportamenti degli SDK predefiniti sono progettati per trovare il giusto equilibrio per la maggior parte delle applicazioni. Se la priorità è la massima latenza possibile, è consigliabile modificare il timeout predefinito della richiesta e riprovare le impostazioni dell'SDK in modo da tenere traccia della latenza tipica di una richiesta completata misurata dal client. Una richiesta che impiega molto più tempo del normale ha meno probabilità di essere completata. Se anticipi l'errore (fail fast) e crei una nuova richiesta, è probabile che questa prenda un percorso diverso e possa essere velocemente completata. Tieni presente che possono esserci degli svantaggi nell'essere troppo aggressivi in queste impostazioni. Un'utile discussione su questo argomento è disponibile in Ottimizzazione delle impostazioni delle richieste HTTP di AWS SDK per Java per le applicazioni Amazon DynamoDB sensibili alla latenza.

  • Riduci la distanza tra il client e l'endpoint DynamoDB: se hai utenti distribuiti a livello globale, prendi in considerazione l'utilizzo di Tabelle globali: replica in più regioni con DynamoDB. Con le tabelle globali puoi specificare le regioni AWS in cui vuoi sia disponibile la tabella. La lettura dei dati da una replica di tabelle globali locali può ridurre significativamente la latenza per gli utenti. Inoltre, considera l'utilizzo di un endpoint gateway DynamoDB per mantenere il traffico dei client all'interno del tuo VPC.

  • Usa la memorizzazione nella cache: se il traffico è costituito in gran parte da operazioni di lettura, prendi in considerazione l'utilizzo di un servizio di memorizzazione nella cache, ad esempio Accelerazione in memoria con DynamoDB Accelerator (DAX). DAX è un sistema di cache in memoria completamente gestito e ad elevata disponibilità per DynamoDB che migliora fino a 10 volte le prestazioni anche in presenza di milioni di richieste al secondo, consentendo di ottenere risposte in microsecondi invece che in millisecondi.

  • Riutilizza le connessioni: le richieste DynamoDB vengono effettuate tramite una sessione autenticata che per impostazione predefinita è HTTPS. L'avvio della connessione richiede tempo, quindi la latenza della prima richiesta è superiore al normale. Le richieste su una connessione già inizializzata forniscono una bassa latenza costante di DynamoDB. Per questo motivo, puoi effettuare una richiesta GetItem "keep-alive" ogni 30 secondi quando non vengono effettuate altre richieste, per evitare la latenza necessaria per stabilire una nuova connessione.

  • Usa letture a coerenza finale: se la tua applicazione non richiede un'elevata consistenza di lettura, puoi utilizzare le letture a coerenza finale. Le letture a coerenza finale sono meno costose e hanno anche meno probabilità di subire aumenti transitori della latenza. Per ulteriori informazioni, consulta Consistenza di lettura.