AWS ElastiCache/SimpleQueue 与 DynamoDB

Sco*_*ach 17 amazon-web-services amazon-elasticache amazon-dynamodb

我想知道使用 ElastiCache/SimpleQueue 与分别在 DynamoDB 中使用“缓存”和“队列”表的理由。

似乎缓存/队列服务的网络延迟会胜过很多性能提升,并且让 EC2 将 Dynamo 视为缓存/队列服务将提供相同的延迟和吞吐量(因为 Dynamo 在任何情况下都允许固定的低延迟)加载)。

主要是关于发电机与其他负载服务的价格吗?

有没有人将 Dynamo 与 ElastiCache/SQS 进行比较时有任何粗略的延迟数字?

我是否遗漏了其他更重要的考虑因素来证明额外的复杂性?

谢谢。

Ost*_*our 12

我们出于不同的原因使用 DynamoDB 和 ElastiCache Redis。

动态数据库:

  • 有一种查询语言可以做更复杂的事情(大于、之间等)
  • 可通过面向 Internet 的外部 API 访问(无需任何更改或拥有自己的基础设施即可访问不同的区域)
  • 基于表甚至行的权限是可能的
  • 根据数据大小扩展到无穷大
  • 您按请求付费 -> 请求数少意味着账单更小,请求数高意味着账单更高
  • 读取和写入的成本不同
  • AWS 在多个设施中冗余保存数据
  • DynamoDB 开箱即用,高度可用
  • 自动缩放在服务本身中可用

ElastiCache Redis:

  • 简单的查询语言 - 没有复杂的功能
  • 无法从其他区域访问(开箱即用)。
  • 您始终受限于内存量(或集群中所有主实例的总和)
  • 只有在您的应用程序中才能在多个实例上进行分片 - Redis 在这里不做任何事情(Redis 集群在这里有帮助,但分片逻辑仍然在您在应用程序中使用的驱动程序/sdk 中) - 缩减和扩展 -目前没有停机是不可能的
  • 无论负载或请求数量如何,您都需要按实例付费。
  • 如果您想要冗余数据,您需要设置复制(不同区域之间不可能)
  • 您需要使用副本来实现高可用性
  • 没有可用的自动缩放(请参阅上面关于完全没有缩放的部分)

所以我们大部分时间的设置是: Redis 中具有大量请求的简单缓存,由 DynamoDB 作为永久且持久的存储支持。有了这个,我们限制了成本,因为我们通过 Redis 的按实例付费模型获得了读取的隐式折扣,但也获得了 DynamoDB 冗余的好处,甚至能够使用 DynamoDB 查询语言处理更复杂的内容(如果我们需要它)。

希望有帮助!

更新:随着 Amazon DynamoDB Accelerator ( https://aws.amazon.com/de/dynamodb/dax/ )的发布,我们将改用 DAX,因为它(最终)正是我们使用DynamoDB 和 Redis 的组合。由于 DAX 完全由 AWS 管理,让我们有机会始终在我们的应用程序中使用 DynamoDB 语言,但也可以从 Redis 等直写缓存中获益。


小智 7

我们使用 Elasticache 而不是 DynamoDB 的主要原因是速度 - 小对象的往返延迟低于 1 毫秒。这个盒子真的很靠近你的 EC2 机器,内存比磁盘快得多,甚至比 SSD 还要快。

考虑到不同的定价模型,也可能具有成本优势,尽管我没有详细介绍。


cee*_*yoz 1

Redis/memcached 是内存存储,对于缓存/队列类型数据来说通常比​​ DynamoDB 更快。他们还有一些方便的附加项目,例如过期密钥、Redis 中的 Pub/Sub 等,而 Dynamo 可能没有。

  • 谢谢。我意识到缓存位于内存中,但我读到,预计至少需要约 10 毫秒的往返时间才能命中缓存并返回,这使得性能特征与 Dynamo 相同。我想你是对的,你可能想要 memcached 中的特定功能在 dynamo 中不可用。但对我来说,RAM 缓存的主要优点是性能比持久存储提高了几个数量级,但这似乎并不适用于此。 (2认同)