2013-06-07 8 views
41

Nella risposta a "How is Amazon DynamoDB throughput calculated and limited?" è stato suggerito che la richiesta delle manette DynamoDB ogni volta che si supera il throughput previsto al secondo. Tuttavia, questo contraddice la mia esperienza.Quando viene richiesta la richiesta di accelerazione DynamoDB?

Ho una tabella in cui inserisco più righe, spesso il numero di righe che supera la capacità di scrittura fornita. Questo succede a brevi raffiche. A un certo punto ho anche ottenuto una media di 5 minuti rispetto alla capacità approvata. OTOH, la media di 15 minuti è inferiore alla capacità. Non ho nessuna richiesta limitata in quel periodo.

5 minuti picchi medi a 8,053 con capacità provisioning di 6: picchi 5 minutes average

15 minuti in media ben al di sotto della capacità provisioning:

enter image description here

Così, quando fa le richieste DynamoDB della valvola a farfalla? Che tipo di media prende in considerazione? Quanto può essere superiore alla capacità approvata prima che venga soffocata?

risposta

54

DynamoDB è progettato per garantire che la capacità fornita sia disponibile su base al secondo. Se fornisci una tabella per dieci letture da 1kB al secondo, DynamoDB ti darà abbastanza capacità per gestire tale velocità. Inoltre, DynamoDB ti consente talvolta di ottenere scatti limitati al di sopra del throughput fornito per un breve periodo di tempo. Questo ha lo scopo di assorbire variazioni naturali nei carichi di lavoro dei clienti. Questo bursting non è garantito e non è sempre disponibile (e la natura dello scoppio disponibile può cambiare nel tempo). Come è attualmente descritto nella documentazione delle migliori pratiche, per ottenere le migliori prestazioni è necessario disporre di un carico di lavoro distribuito uniformemente che non superi la capacità fornita e distribuisca il carico in modo uniforme sullo spazio delle chiavi. Tuttavia, se la realtà del comportamento di produzione per l'applicazione si discosta da un carico di lavoro uniformemente distribuito, DynamoDB può assorbire alcune delle raffiche.

Per quanto riguarda il provisioning della tabella, dipende molto dal carico di lavoro. Potresti iniziare con il provisioning a qualcosa come l'80% dei picchi e quindi regolare la capacità del tuo tavolo in base al numero di throttle che ricevi (che puoi vedere nei grafici di CloudWatch) e alla tolleranza dell'applicazione per la latenza indotta dai tentativi. Tieni presente che DynamoDB non consente burst illimitati oltre la capacità fornita. Potresti essere in grado di assorbire brevi raffiche ma non puoi sostenere una velocità di trasmissione superiore al livello di capacità fornito per un periodo di tempo prolungato. L'orientamento generale che possiamo dare è quello di fornire qualcosa vicino ai tuoi picchi e quindi comporre il basso mentre stai guardando le mance.

This answer was posted in AWS forums

Disclaimer: io lavoro per la squadra di Amazon, DynamoDB.

+2

Con picchi dell'80% ci si riferisce ai picchi sul grafico * 5 minuti medio *? In altre parole, diciamo che ho una situazione in cui ho un lotto di 60 articoli ogni 10 secondi. Secondo al secondo base sarebbe 60, al minuto o più è 6. Quanto è alto il picco? – vartec

+0

"Quindi quanto è alto il picco?" Non penso di poterti dire questo, scusa. Tutti i nostri calcoli/contabilità vengono eseguiti al secondo. Per lo scoppio del traffico consideriamo un periodo di tempo più lungo per analizzare il modello di traffico. Infine, come indica il post, la migliore linea di condotta è un po 'di tentativi ed errori, dal momento che conosci il tuo schema di utilizzo e quale tolleranza hai per i tentativi/limitazioni. –

+1

Nel mio test di sviluppo ho eseguito il provisioning di una tabella con 1 unità di scrittura e posso costantemente inviare 10 scritture al secondo senza essere strozzato, quindi ciò che dice @vartec è coerente con la mia esperienza, per quanto bizzarra possa essere o non esserlo. –

11

C'è un hint in the DynamoDB documentation che spiega come funziona scoppio:

Quando non si utilizza pienamente il throughput di una partizione, DynamoDB conserva una parte della vostra capacità inutilizzata per successive esplosioni di utilizzo di throughput. DynamoDB attualmente conserva fino a cinque minuti (300 secondi) di capacità di lettura e scrittura non utilizzate.

ma si dice anche che non si può fare affidamento su questo comportamento:

Tuttavia, non progettare l'applicazione in modo che dipende dalla capacità di raffica di essere disponibili in qualsiasi momento: DynamoDB può e fa uso di scoppio capacità di manutenzione in background e altre attività senza preavviso.

Almeno questo spiegherebbe perché è stato possibile avere una media di 5 minuti sopra la capacità fornita. Con la spiegazione di cui sopra, sarebbe anche possibile avere medie di 15 minuti (o tempi più lunghi) per essere sopra la capacità fornita, se si ha un picco all'inizio dell'intervallo e meno utilizzo entro i 300 secondi prima dell'inizio di l'intervallo.

Problemi correlati