Nous utilisons DynamoDB et ElastiCache Redis pour différentes raisons.
DynamoDB:
- Possède un langage de requête capable de faire des choses plus complexes (supérieures à, entre etc.)
- Est accessible via une API externe accessible sur Internet (différentes régions sont accessibles sans aucun changement ni propre infrastructure)
- Les autorisations basées sur des tables ou même des lignes sont possibles
- Échelles en termes de taille des données à l'infini
- Vous payez par demande -> un nombre de demandes faible signifie une facture plus petite, un nombre de demandes élevé signifie une facture plus élevée
- Les lectures et les écritures ont des coûts différents
- Les données sont sauvegardées redondantes par AWS dans plusieurs installations
- DynamoDB est hautement disponible prêt à l'emploi
- La mise à l'échelle automatique est disponible dans le service lui-même
ElastiCache Redis:
- Langage de requête simple - pas de fonctionnalités complexes
- N'est pas (prêt à l'emploi) accessible depuis d'autres régions.
- Vous êtes toujours limité à la quantité de mémoire (ou à la somme de toutes les instances principales d'un cluster)
- Le partage sur plusieurs instances n'est possible que dans votre application - Redis ne fait rien ici (le cluster Redis aide ici mais la logique de partage est toujours à l'intérieur du pilote / sdk que vous utilisez dans votre application) - scale-in et scale- la sortie n'est pas possible sans temps d'arrêt pour le moment
- Vous payez par instance, quelle que soit la charge ou le nombre de demandes.
- Si vous souhaitez une redondance des données, vous devez configurer la réplication (impossible entre les différentes régions)
- Vous devez utiliser des répliques pour une haute disponibilité
- Pas de mise à l'échelle automatique disponible (voir la partie sur aucune mise à l'échelle du tout ci-dessus)
Notre configuration est donc la plupart du temps: des caches simples avec un volume élevé de demandes dans Redis, soutenu par DynamoDB comme stockage permanent et durable. Avec cela, nous limitons les coûts car nous obtenons une remise implicite pour nos lectures par le modèle de paiement à l'instance de Redis, mais bénéficions également de la redondance de DynamoDB et sommes même en mesure d'utiliser le langage de requête DynamoDB pour des choses plus complexes ( si nous en avons besoin).
J'espère que cela pourra aider!
Mise à jour: Avec l'annonce d'Amazon DynamoDB Accelerator ( https://aws.amazon.com/de/dynamodb/dax/ ), nous passons à l'utilisation de DAX car c'est (à la fin) exactement ce que nous faisions avec le combinaison de DynamoDB et Redis. Comme DAX est entièrement géré par AWS et nous donne la possibilité de toujours utiliser le langage DynamoDB dans notre application, mais aussi de bénéficier des avantages d'un cache d'écriture comme Redis.
La raison principale pour laquelle nous utilisons Elasticache plutôt que DynamoDB est la vitesse - vous obtenez une latence aller-retour inférieure à 1 ms pour les petits objets. La boîte est vraiment proche de votre machine EC2, et la mémoire est beaucoup plus rapide que le disque, même le SSD.
Il pourrait également y avoir un avantage en termes de coûts compte tenu des différents modèles de tarification, même si je ne suis pas entré dans les détails.
la source
Redis / memcached sont des magasins en mémoire et devraient généralement être plus rapides que DynamoDB pour les données de type cache / file d'attente. Ils ont également des éléments supplémentaires pratiques comme les clés expirantes, Pub / Sub dans Redis, etc. que Dynamo peut ne pas avoir.
la source