gpt4 book ai didi

aws-lambda - 如何扩展 DynamoDB 记录处理?

转载 作者:行者123 更新时间:2023-12-04 15:29:27 25 4
gpt4 key购买 nike

我正在使用 DynamoDB 和 Lambda 构建基于 Web 的 CRON 服务。虽然我目前没有遇到以下问题,但我很好奇如果它出现我该如何解决。

架构是这样工作的:

  1. Lambda A - 查询当前分钟应发生的所有任务
  2. Lambda A - 对于每个任务,在文档上增加一个计数器
  3. Lambda B - 监听每个文档的流事件并运行实际的 CRON 任务

据我所知,Lambda B 应该是可扩展的——AWS 应该根据需要运行尽可能多的实例来处理所有流事件(我认为)。

但对于 Lambda A,假设我每分钟有 10 亿个文档需要处理。

当我查询每分钟的任务时,Lambda 将需要发出多个请求才能获取和更新所有文档。

我如何构建系统才能在 < 60 秒内处理完所有文档?

最佳答案

你是对的,Lambda A 必须进行无法扩展的怪物扫描/查询。

构建它以使其工作的一种方法是对您的 cron 项目进行分区,以便您可以并行调用多个 lambda(即扇出工作)而不是仅调用一个(lambda A),以便每个处理一个分区(或一组分区)而不是整个事物。

如何实现这一点取决于当前主键的外观以及您希望查询这些项目的其他方式。这是一种解决方案:

cronID | rangeKey               | jobInfo | counter
1001 | 72_2020-05-05T13:58:00 | foo | 4
1002 | 99_2020-05-05T14:05:00 | bar | 42
1003 | 01_2020-05-05T14:05:00 | baz | 0
1004 | 13_2020-05-05T14:10:00 | blah | 2
1005 | 42_2020-05-05T13:25:00 | 42 | 99

我为 rangeKey 添加了一个随机前缀 (00-99),因此您可以让不同的 lambda 表达式基于该前缀并行查询不同的项目集。

在此示例中,您可以每分钟调用 100 个 lambda(“Lambda A”类型),每个处理一个前缀集。或者你可以说 5 个 lambda,每个处理 20 个前缀的范围。您甚至可以根据负载动态上下调整 lambda 调用的数量,而无需更新表中数据的前缀。

由于这些 lambda 基本相同,您只需调用 lambda A 所需的次数,为每个 lambda A 注入(inject)适当的前缀作为配置。

编辑

关于您评论中的 1MB 页面限制,如果您的查询受到限制,您将得到一个 LastEvaluatedKey 返回。您的 lambda 可以循环执行查询,将 LastEvaluatedKey 值作为 ExclusiveStartKey 传回,直到您获得所有结果页面。

您仍然需要注意运行时间(并捕获错误以重试,因为这不是原子的)但是如果您足够广泛地展开您的 lambda 将处理运行时间。

关于aws-lambda - 如何扩展 DynamoDB 记录处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61525342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com