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.
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.
quelle
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.
quelle