AWS ElastiCache / SimpleQueue vs DynamoDB

13

Ich frage mich, welche Gründe für die Verwendung von ElastiCache / SimpleQueue sprechen, anstatt nur "Cache" - und "Queue" -Tabellen in DynamoDB zu haben.

Es scheint, dass die Netzwerklatenz für die Cache- / Warteschlangendienste einen Großteil der Leistungssteigerungen ausmachen würde und dass EC2 Dynamo als Cache- / Warteschlangendienst behandeln würde, der die gleiche Latenz und den gleichen Durchsatz bietet (da Dynamo eine feste niedrige Latenz unter allen zulässt) Belastung).

Geht es hauptsächlich um den Preis von Dynamo im Vergleich zu anderen Diensten unter Last?

Hat jemand irgendwelche groben Latenzzahlen, die Dynamo mit ElastiCache / SQS vergleichen?

Gibt es noch weitere wichtige Überlegungen, die die zusätzliche Komplexität rechtfertigen?

Vielen Dank.

Scott Klarenbach
quelle

Antworten:

9

Wir verwenden DynamoDB und ElastiCache Redis aus verschiedenen Gründen.

DynamoDB:

  • Hat eine Abfragesprache, die komplexere Dinge ausführen kann (größer als, zwischen usw.)
  • Ist über eine externe, mit dem Internet verbundene API erreichbar (verschiedene Regionen sind ohne Änderungen oder eigene Infrastruktur erreichbar)
  • Berechtigungen basierend auf Tabellen oder sogar Zeilen sind möglich
  • Skaliert in Bezug auf die Datengröße bis unendlich
  • Sie zahlen pro Anfrage -> Niedrige Anfragenummern bedeuten geringere Rechnung, hohe Anfragenummern bedeuten höhere Rechnung
  • Lese- und Schreibvorgänge unterscheiden sich in den Kosten
  • Daten werden von AWS in mehreren Einrichtungen redundant gespeichert
  • DynamoDB ist sofort hochverfügbar
  • Die automatische Skalierung ist im Dienst selbst verfügbar

ElastiCache Redis:

  • Einfache Abfragesprache - keine komplexen Funktionen
  • Ist (out-of-the-box) aus anderen Regionen nicht erreichbar.
  • Sie sind immer auf die Größe des Arbeitsspeichers (oder die Summe aller Primärinstanzen in einem Cluster) beschränkt.
  • Sharding über mehrere Instanzen ist nur in Ihrer Anwendung möglich - Redis macht hier nichts (Redis-Cluster hilft hier, aber die Sharding-Logik befindet sich immer noch in dem Treiber / SDK, den Sie in Ihrer Anwendung verwenden) - Scale-In und Scale-In. im Moment ist ein Ausfall ohne Ausfallzeiten nicht möglich
  • Sie zahlen pro Instanz, unabhängig von der Auslastung oder der Anzahl der Anforderungen.
  • Wenn Sie Redundanz der Daten wünschen, müssen Sie die Replikation einrichten (nicht möglich zwischen verschiedenen Regionen)
  • Für eine hohe Verfügbarkeit müssen Sie Replikate verwenden
  • Keine automatische Skalierung verfügbar (siehe den obigen Teil zu keiner Skalierung)

Daher ist unser Setup die meiste Zeit: Einfache Caches mit einem hohen Anforderungsvolumen in Redis, die von DynamoDB als permanenter und langlebiger Speicher unterstützt werden. Hiermit begrenzen wir die Kosten, da wir einen impliziten Rabatt für unsere Lesevorgänge durch das Pay-per-Instance-Modell von Redis erhalten, aber auch die Redundanz von DynamoDB nutzen und sogar die Abfragesprache DynamoDB für komplexere Dinge verwenden können ( wenn wir es brauchen).

Ich hoffe, das hilft!

Update: Mit der Ankündigung von Amazon DynamoDB Accelerator ( https://aws.amazon.com/de/dynamodb/dax/ ) stellen wir auf DAX um, da es (am Ende) genau das ist, was wir mit dem gemacht haben Kombination von DynamoDB und Redis. DAX wird vollständig von AWS verwaltet und bietet uns die Möglichkeit, in unserer Anwendung immer die DynamoDB-Sprache zu verwenden, aber auch die Vorteile eines Write-Through-Caches wie Redis zu nutzen.

Osterjour
quelle
Sehr hilfreich, danke. Was ich nicht verstehe, ist, wie Sie mit Dynamodb Backup Redis: Ist dies eine Funktion von AWS? oder wann und wie erstellen sie das backup? Vielen Dank, wenn Sie das klären können!
Badera
Mein "Backed by" ist nicht auf herkömmliche Weise als Backup gedacht. Wir schreiben die ganze Zeit an DynamoDB und verwenden Redis, um zuerst zu lesen. Selbst wenn Redis Daten verliert, haben wir diese in DynamoDB verfügbar. Mit der Verwendung von DAX ( aws.amazon.com/de/dynamodb/dax ) wurde dieser Anwendungsfall jetzt viel einfacher!
Osterjour
7

Der Hauptgrund, warum wir Elasticache anstelle von DynamoDB verwenden, ist die Geschwindigkeit - für kleine Objekte erhalten Sie eine Roundtrip-Latenz von weniger als 1 ms. Die Box ist sehr nah an Ihrem EC2-Computer und der Speicher ist viel schneller als die Festplatte, sogar die SSD.

Aufgrund der unterschiedlichen Preismodelle könnte sich auch ein Kostenvorteil ergeben, obwohl ich dort nicht so ausführlich darauf eingegangen bin.

Maximilian
quelle
Ist es immer noch relevant? Hat DAX das nicht geändert?
Dmigo
1
DAX wird einen Großteil der Latenzprobleme lösen, ja. Ich bin mir nicht sicher, was die genauen Geschwindigkeitsunterschiede angeht - bei kleinen Objekten trägt das Netzwerk wesentlich zur Latenz bei.
Maximilian
1

Redis / Memcached sind speicherinterne Speicher und sollten für Daten vom Typ Cache / Queue im Allgemeinen schneller als DynamoDB sein. Sie haben auch nützliche Zusatzgegenstände wie ablaufende Schlüssel, Pub / Sub in Redis usw., die Dynamo möglicherweise nicht hat.

ceejayoz
quelle
1
Vielen Dank. Mir ist klar, dass sich der Cache im Speicher befindet, aber ich habe gelesen, dass man mit einer Umlaufzeit von mindestens ~ 10 ms rechnen kann, um den Cache zu erreichen und zurückzukehren, wodurch die Leistungseigenschaften mit denen von Dynamo identisch sind. Ich denke, Sie haben Recht, dass Sie bestimmte Funktionen in memcached nicht in dynamo verwenden möchten. Für mich ist der Hauptvorteil eines RAM-Caches jedoch die um Größenordnungen höhere Leistung gegenüber einem dauerhaften Speicher, was hier offensichtlich nicht zutrifft.
Scott Klarenbach