Aws lambda 如何扩展DynamoDB记录处理?

Aws lambda 如何扩展DynamoDB记录处理?,aws-lambda,amazon-dynamodb,scaling,Aws Lambda,Amazon Dynamodb,Scaling,我正在使用DynamoDB和Lambda构建一个基于web的CRON服务。虽然我目前没有以下问题,但我很好奇,如果出现问题,我该如何解决 该体系结构的工作原理如下: Lambda-查询应在当前分钟内发生的所有任务 Lambda-对于每个任务,在文档上增加一个计数器 Lambda B-侦听每个文档的流事件并运行实际的CRON任务 据我所知,Lambda B应该是可伸缩的——AWS应该根据需要运行尽可能多的实例来处理所有流事件(我认为) 但是对于Lambda,假设我每分钟需要处理10亿个文档 当我查

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

该体系结构的工作原理如下:

  • Lambda-查询应在当前分钟内发生的所有任务
  • Lambda-对于每个任务,在文档上增加一个计数器
  • Lambda B-侦听每个文档的流事件并运行实际的CRON任务
  • 据我所知,Lambda B应该是可伸缩的——AWS应该根据需要运行尽可能多的实例来处理所有流事件(我认为)

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

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


    我如何设计系统,使所有文档在<60秒内得到处理?

    我不确定您的项目,但看起来您所要求的内容已经在中,请阅读此处:

    在Amazon DynamoDB中创建新的配置表时,必须 指定其配置的吞吐量容量。这是所需的数量 表可以支持的读写活动。DynamoDB使用这个 保留足够的系统资源以满足您的需求的信息 吞吐量要求

    您可以创建一个表,这样您就不会 管理服务器、存储或吞吐量的任何容量设置。 DynamoDB可以在您的工作负载上升或下降时立即适应您的工作负载 到以前达到的任何流量级别。如果工作负载的流量级别 达到一个新的高峰,DynamoDB能够快速适应工作负载。 更多信息

    您可以选择允许管理表的 吞吐量。但是,您仍然必须提供初始设置 用于创建表时的读写容量。自动发电机 缩放使用这些初始设置作为起点,然后 动态调整它们以响应应用程序的 要求

    随着应用程序数据和访问需求的更改,您可能会 需要调整表的吞吐量设置。如果你正在使用 DynamoDB自动缩放,吞吐量设置自动 根据实际工作量进行调整。您也可以使用 UpdateTable操作以手动调整表的吞吐量 容量。如果需要批量加载数据,您可能会决定这样做 从现有的数据存储到新的DynamoDB表中。你可以 创建具有较大写入吞吐量设置的表,然后减少 大容量数据加载完成后,将执行此设置

    您可以根据容量单位指定吞吐量要求 应用程序每秒需要读取或写入的数据量。你 如果需要,您可以稍后修改这些设置,或者启用DynamoDB auto 缩放以自动修改它们


    我希望这能帮助你消除疑虑。

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

    一种设计方法是对cron项进行分区,这样就可以并行调用多个lambda(即展开工作),而不是只调用一个lambda(lambda),这样每个lambda处理一个分区(或一组分区),而不是整个事情

    如何实现这一点取决于当前主键的外观以及查询这些项的其他方式。这里有一个解决方案:

    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),因此可以让不同的lambdas根据该前缀并行查询不同的项目集

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

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

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


    您仍然需要注意运行时间(并捕获错误以重试,因为这不是原子性的),但如果您将lambda扇得足够大,则如上所述扇动lambda将处理运行时间。

    Hi marclar,当您说查询应在当前分钟内发生的所有任务时?您正在dynamoDB中查询一个时间=当前分钟的表?确切地说,@wpp-我不认为配置的吞吐量是我想要的。当我执行的查询有99999999个结果,并且每个结果“页面”的最大大小为1MB时,我如何确保生成足够的lambda来处理这些记录?