Estamos usando o DynamoDB e o ElastiCache Redis por diferentes motivos.
DynamoDB:
- Tem uma linguagem de consulta capaz de fazer coisas mais complexas (maior que, entre etc.)
- É alcançável por meio de uma API externa da Internet (regiões diferentes são alcançáveis sem alterações ou infraestrutura própria)
- Permissões com base em tabelas ou mesmo linhas são possíveis
- Escalas em termos de tamanho de dados até o infinito
- Você paga por solicitação -> números baixos de solicitação significa fatura menor, números altos de solicitação significa fatura mais alta
- Lê e grava são diferentes nos custos
- Os dados são salvos como redundantes pela AWS em vários recursos
- O DynamoDB é altamente disponível imediatamente
- O escalonamento automático está disponível no próprio serviço
ElastiCache Redis:
- Linguagem de consulta simples - sem recursos complexos
- Não está pronto para uso (acessível) de outras regiões.
- Você está sempre limitado à quantidade de memória (ou à soma de todas as instâncias primárias em um cluster)
- O sharding em várias instâncias só é possível no seu aplicativo - o Redis não faz nada aqui (o cluster Redis ajuda aqui, mas a lógica do sharding ainda está dentro do driver / sdk que você está usando no seu aplicativo) - scale-in and scale- não é possível sem tempo de inatividade no momento
- Você paga por instância, independentemente da carga ou do número de solicitações.
- Se você deseja redundância dos dados, precisa configurar a replicação (não é possível entre diferentes regiões)
- Você precisa usar réplicas para alta disponibilidade
- Nenhum dimensionamento automático disponível (consulte a parte sobre o dimensionamento acima)
Portanto, nossa configuração na maioria das vezes é: Caches simples com alto volume de solicitações no Redis, suportadas pelo DynamoDB como armazenamento permanente e durável. Com isso, limitamos os custos à medida que obtemos um desconto implícito para nossas leituras pelo modelo de pagamento por instância do Redis, mas também obtemos o benefício da redundância do DynamoDB e até podemos usar a linguagem de consulta do DynamoDB para coisas mais complexas ( se precisarmos).
Espero que ajude!
Atualização: com o anúncio do Amazon DynamoDB Accelerator ( https://aws.amazon.com/de/dynamodb/dax/ ), passamos a usar o DAX como ele é (no final) exatamente o que estávamos fazendo com o combinação de DynamoDB e Redis. Como o DAX é totalmente gerenciado pela AWS e nos dá a chance de sempre usar a linguagem DynamoDB em nosso aplicativo, mas também obter os benefícios de um cache de gravação como o Redis.
A principal razão pela qual usamos o Elasticache em vez do DynamoDB é a velocidade - você obtém uma latência de ida e volta abaixo de 1ms para objetos pequenos. A caixa está muito perto da sua máquina EC2 e a memória é muito mais rápida que o disco, mesmo o SSD.
Também poderia haver uma vantagem de custo, considerando os diferentes modelos de preços, embora eu não tenha entrado em muitos detalhes por lá.
fonte
Redis / memcached são armazenamentos na memória e geralmente devem ser mais rápidos que o DynamoDB para dados do tipo cache / fila. Eles também têm itens adicionais úteis, como chaves expiradas, Pub / Sub em Redis, etc. que o Dynamo pode não ter.
fonte