AWS ElastiCache / SimpleQueue vs DynamoDB

10

Eu estou pensando sobre a razão de usar o ElastiCache / SimpleQueue vs apenas ter tabelas "Cache" e "Fila" dentro do DynamoDB, respectivamente.

Parece que a latência de rede para os serviços Cache / Queue superaria muitos dos ganhos de desempenho, e que ter o EC2 tratando o Dynamo como serviço de cache / fila ofereceria a mesma latência e taxa de transferência (já que o Dynamo permite um baixo fixo latência sob qualquer carga).

É principalmente sobre o preço do dínamo versus outros serviços sob carga?

Alguém tem números aproximados de latência comparando o Dynamo com o ElastiCache / SQS?

Existem outras considerações mais importantes que estão faltando e que justificam a complexidade adicional?

Obrigado.

    
por Scott 02.04.2015 / 18:55

3 respostas

8

Estamos usando o DynamoDB e o ElastiCache Redis por diferentes motivos.

DynamoDB:

  • Possui uma linguagem de consulta que é capaz de fazer coisas mais complexas (maior que, entre, etc.)
  • É acessível por meio de uma API externa voltada para a Internet (diferentes regiões podem ser acessadas sem qualquer alteração ou infraestrutura própria)
  • Permissões com base em tabelas ou até linhas são possíveis
  • Escala em termos de tamanho de dados ao infinito
  • Você paga por solicitação - > números de pedidos baixos significam fatura menor, números de solicitações altas significam fatura maior
  • As leituras e gravações são diferentes nos custos
  • Os dados são salvos como redundantes pela AWS em várias instalações
  • O DynamoDB é altamente disponível e pronto para uso
  • O escalonamento automático está disponível no próprio serviço

ElastiCache Redis:

  • Linguagem de consulta simples - sem recursos complexos
  • É (fora da caixa) não acessível de outras regiões.
  • Você está sempre limitado à quantidade de memória (ou a soma de todas as instâncias primárias em um cluster)
  • A exclusão de várias instâncias só é possível em seu aplicativo - o Redis não faz nada aqui (o cluster Redis ajuda aqui, mas a lógica de fragmentação ainda está dentro do driver / sdk que você está usando em seu aplicativo) e scale-out 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, é necessário configurar a replicação (não é possível entre diferentes regiões)
  • Você precisa usar réplicas para alta disponibilidade
  • Não há escalonamento automático disponível (veja a parte sobre sem escala acima)

Portanto, nossa configuração na maior parte do tempo é: caches simples com alto volume de solicitações no Redis com suporte do DynamoDB como armazenamento permanente e de longa duração. Com isso, limitamos os custos, pois obtemos um desconto implícito para nossas leituras pelo modelo pay-per-instance do Redis, mas também obtemos o benefício da redundância do DynamoDB e podemos até usar a linguagem de consulta do DynamoDB para coisas mais complexas ( se precisarmos disso.

Espero que ajude!

Atualização: com o anúncio do Acelerador do Amazon DynamoDB ( link ), estamos mudando para usar o DAX como é (no final) exatamente o que estávamos fazendo com a combinação do DynamoDB e do Redis. Como o DAX é totalmente gerenciado pela AWS e nos dá a chance de sempre usar a linguagem do DynamoDB em nosso aplicativo, mas também obtém os benefícios de um cache write-through como o Redis.

    
por 01.05.2016 / 17:28
5

A principal razão pela qual usamos o Elasticache em vez do DynamoDB é a velocidade - você obtém latência de ida e volta de 1 ms para pequenos objetos. A caixa é muito próxima da sua máquina EC2, e a memória é muito mais rápida do que o disco, até 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 tantos detalhes lá.

    
por 09.07.2015 / 15:17
1

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 que expiram, Pub / Sub em Redis, etc. que o Dynamo pode não ter.

    
por 02.04.2015 / 19:00