AWS ElastiCache/SimpleQueue 与 DynamoDB

AWS ElastiCache/SimpleQueue 与 DynamoDB

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

似乎缓存/队列服务的网络延迟会抵消很多性能提升,而让 EC2 将 Dynamo 作为其缓存/队列服务将提供相同的延迟和吞吐量(因为 Dynamo 在任何负载下都允许固定的低延迟)。

这主要是否与 Dynamo 与其他负载服务的价格有关?

有人能提供 Dynamo 与 ElastiCache/SQS 的粗略延迟数字比较吗?

我是否忽略了其他更重要的考虑因素,从而导致额外的复杂性?

谢谢。

答案1

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

DynamoDB:

  • 具有能够执行更复杂的事情(大于、之间等)的查询语言。
  • 可通过外部面向互联网的 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 等直写缓存中获益。

答案2

我们使用 Elasticache 而不是 DynamoDB 的主要原因是速度 - 对于小对象,往返延迟低于 1ms。该盒子非常靠近您的 EC2 机器,内存比磁盘甚至 SSD 快得多。

由于定价模型不同,也可能存在成本优势,尽管我没有详细讨论这一点。

答案3

Redis/memcached 是内存存储,对于缓存/队列类型的数据,通常应该比 DynamoDB 更快。它们还具有 Dynamo 可能没有的便捷附加功能,例如过期密钥、Redis 中的 Pub/Sub 等。

相关内容