【发布时间】:2016-12-07 17:02:05
【问题描述】:
我有一个场景,我有一个 DynamoDB 表,其中包含 AWS Lambda 函数的触发器(流)。
我想将 DynamoDB 用作事件存储并使用 Lambda 函数来维护数据的投影/聚合视图/读取视图。
我需要确保当我在 DynamoDB 中保存 CreateEntity 事件时,然后可能在我保存 UpdateEntity 之后,Lambda 函数将在 UpdateEntity 事件之前处理 CreateEntity 事件。
我的理解是 Lambda 触发器的并行性取决于 DynamoDB 流所包含的 Shard 数量。因此,如果 Lambda 函数使用的 DynamoDB 流有 2 个分片,并且一个事件在 Shard1 上进行,另一个事件在 Shard2 上进行,那么它们可以由 Lambda 函数的两个实例并行处理。
因此,如果 CreateEntity 事件在 Shard1 上,UpdateEntity 在 Shard2 上,那么如果 Shard1 或 Lambda 函数实例由于某种原因很慢,则可能首先处理 Shard2 中的 UpdateEntity 事件。这意味着它不能被添加到投影中,因为没有先创建实体。
我的理解正确吗?
有没有办法确保事件仅由 Lambda 函数的一个实例处理,以便我可以确保消息处理的顺序?
或者我必须使用 Lambda 以外的其他东西吗?例如,使用我自己的应用程序将 DynamoDB 流式传输到 Kinesis,我可以确保只有一个应用程序实例正在运行并确保以这种方式排序。
【问题讨论】:
标签: amazon-web-services amazon-dynamodb aws-lambda