Domanda

Stavo pensando di usare Amazon DynamoDB nella mia applicazione e ho una domanda riguardo al suo Contatori atomici affidabilità.

Sto costruendo un'applicazione distribuita che deve in concomitanza, e costantemente, incremento/decremento un contatore memorizzato nell'attributo di una dinamo. Mi chiedevo quanto sia affidabile il contatore atomico della dinamo in un ambiente simultaneo pesante, in cui il livello di concorrenza è estremamente elevato (diciamo, ad esempio, un tasso medio di 20k colpi simultanei - per ottenere l'idea, che sarebbero quasi 52 miliardi di incrementi /decrementi al mese).

Il contatore dovrebbe essere super affidabile e mai perdere un successo. Qualcuno ha testato DynamoDB in tali ambienti critici?

Grazie

È stato utile?

Soluzione

DynamoDB ottiene le sue proprietà di ridimensionamento dividendo i tasti su più server. Questo è simile a come altri database distribuiti come Cassandra e HBase Scale. Mentre è possibile aumentare il throughput su DynamoDB che sposta i tuoi dati su più server e ora ogni server è in grado di gestire connessioni concomitanti totali / numero di server. Guarda Alle loro FAQ Per una spiegazione su come ottenere il throughput massimo:

D: Sarò sempre in grado di raggiungere il mio livello di throughput provviso?

Amazon DynamoDB assume un modello di accesso relativamente casuale su tutte le chiavi primarie. Dovresti impostare il tuo modello di dati in modo che le tue richieste derivino in una distribuzione abbastanza uniforme del traffico tra le chiavi primarie. Se si dispone di un modello di accesso molto irregolare o distorto, potresti non essere in grado di raggiungere il tuo livello di rendimento provviso.

Quando si memorizza i dati, Amazon DynamoDB divide una tabella in più partizioni e distribuisce i dati in base all'elemento chiave hash della chiave primaria. Il throughput provviso associato a una tabella è anche diviso tra le partizioni; Il throughput di ogni partizione è gestito in modo indipendente in base alla quota assegnata ad essa. Non esiste una condivisione del throughput provviso tra le partizioni. Di conseguenza, una tabella di Amazon DynamoDB è in grado di soddisfare i livelli di throughput provviso se il carico di lavoro è diffuso in modo abbastanza uniforme attraverso i valori della chiave hash. La distribuzione delle richieste tra i valori chiave hash distribuisce le richieste tra le partizioni, il che aiuta a raggiungere il livello di throughput approfondito.

Se si dispone di un modello di carico di lavoro irregolare attraverso le chiavi primarie e non sei in grado di raggiungere il livello di throughput provviso, potresti essere in grado di soddisfare le esigenze del throughput aumentando ulteriormente il livello di throughput provviso, il che darà più throughput a ciascuna partizione. Tuttavia, si consiglia di considerare di modificare il modello di richiesta o il modello di dati al fine di ottenere un modello di accesso relativamente casuale tra le chiavi primarie.

Ciò significa che avere una chiave che viene incrementata direttamente non si ridimensionerà poiché quella chiave deve vivere su un server. Esistono altri modi per gestire questo problema, ad esempio nell'aggregazione della memoria con un incremento a filo su DynamoDB (anche se questo può avere problemi di affidabilità) o un contatore frammento in cui gli incrementi sono distribuiti su più chiavi e leggi indietro tirando tutte le chiavi nel frammento contatore (http://whynosql.com/scaling-distribued-counters/).

Altri suggerimenti

Oltre alla risposta di GigQ sulla scalabilità, gli incrementi atomici di DynamoDBS non sono idempotenti e quindi non sono affidabili: se la connessione diminuisce dopo aver emesso un UpdateItem ADD Richiedi, non hai modo di sapere se l'aggiunta è stata impegnata o no, quindi non sai se dovresti riprovare o meno.

Gli aggiornamenti condizionali DynamoDB risolvono questo, a costo di rendere il sistema ancora meno scalabile, perché è necessario riprovare ogni volta che due modifiche all'attributo vengono tentate simultaneamente, anche in assenza di un errore.

Se hai intenzione di scrivere una singola chiave DB DB, ne soffrirai partizione calda problema. Il problema della partizione calda inizia a circa 300 TPS per indice. Quindi, se hai 5 indici nella tabella, è possibile vedere un problema di partizione calda intorno a 300/5 ~ 60 TPS.

Altrimenti, Dynamo DB è scalabile a circa 10-40K TPS, a seconda del caso d'uso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top