DynamoDB 流是否适合此用例?

Is DynamoDB streams the right option for this use case?

我有一个 DynamoDB table,其中包含将被许多应用程序读取的键值对。在启动时,每个应用程序将读取整个 table 并将其缓存在内存中。

我要解决的问题是,如果 DynamoDB table 中的一个或多个项目已被修改,让应用程序更新它们的缓存。

DynamoDB 流最初似乎是解决问题的正确方法。我已经按照 AWS 的建议使用 Kinesis Client Library (KCL) 实施了消费者。然而,在实现它的过程中,我遇到了一些让我相信我走错了路的问题。具体来说:

我也使用低级别 API 实现了它。当只有一个分片时,这很好用。然而,我的实现不像 KCL 那样处理重新分片,因此它太脆弱了。对于我要解决的简单问题,必须实施重新分片处理似乎是错误的。

我开始考虑其他解决方案,例如:

到目前为止我考虑过的所有解决方案都有相当大的缺点。我错过了什么?

这取决于您的 KCL 如何推送到依赖的应用程序,但是 我相信SQS路径是正确的选择。

  • 您可以添加无限数量的消费者而不会受到限制。
  • 当您添加另一个依赖应用程序时,不需要更改您的 KCL 即可推送到它,新应用程序将简单地监视 SQS 队列。
  • 您可以在问题发生时监控队列。
  • 需要设置更多移动部件,但是一旦 Streams -> SNS -> SQS 管道就位,它基本上是防弹的。

只是我的 2¢。

如今,带有订阅功能的 AWS AppSync GraphQL API 可能是支持此类应用程序的最简单方法,移动部件数量最少。

每当您的某个应用程序启动时,它会使用 Amplify framework or AppSync SDK 连接到您的 AppSync GraphQL API 并订阅其感兴趣的更新。然后每当应用程序更新 table 通过您的 GraphQL API,您的所有其他应用程序将收到更改通知,以及相关的更改数据。

A​​ppSync 开箱即用地与 DynamoDB 很好地集成,允许您生成带有适当索引的 DynamoDB tables 和 GraphQL,或者如果您愿意,可以从现有的 DynamoDB tables 生成 GraphQL。 Amplify 甚至可以帮助您在更高级别自动生成 AppSync GraphQL API,并使用其 GraphQL transformers 关联 DynamoDB tables、索引、实体关系等类似 elasticsearch 搜索功能。 =13=]