gpt4 book ai didi

amazon-web-services - 如何使用 lambda 函数(不通过计划事件)处理 SQS 队列?

转载 作者:行者123 更新时间:2023-12-03 05:43:38 27 4
gpt4 key购买 nike

这是我正在尝试实现的简化方案:

http requests --> (Gateway API + lambda A) --> SQS --> (lambda B ?????) --> DynamoDB

所以它应该如图所示工作:来自许多 http 请求的数据(例如每秒最多 500 个)由我的 lambda 函数 A 放入 SQS 队列。然后另一个函数 B 处理该队列:读取最多 10 个项目(定期)并使用 BatchWriteItem 将它们写入 DynamoDB。

问题是我不知道如何触发第二个 lambda 函数。它应该频繁地调用,每秒多次(或至少每秒一次),因为我需要队列中的所有数据尽快进入 DynamoDB(这就是为什么通过计划事件调用 lambda 函数 B,如 here 所描述的那样)一个选项)

<小时/>

为什么我不想直接写入 DynamoDB,而不使用 SQS?

如果我完全避免使用 SQS,那就太棒了。我尝试使用 SQS 解决的问题是 DynamoDB 限制。甚至不是限制本身,而是使用 AWS SDK 将数据写入 DynamoDB 时的处理方式:当一条一条写入记录并对其进行限制时,AWS SDK 会默默地重试写入,从而导致从 http 客户端的角度来看,请求处理时间增加 View 。

所以我想暂时将数据存储在队列中,将响应“200 OK”发送回客户端,然后由单独的函数处理队列,使用一个 DynamoDB 的 BatchWriteItem 调用写入多条记录(其中返回未处理的项目,而不是在限制的情况下自动重试)。 我什至宁愿丢失一些记录,而不是增加 DynamoDB 中接收记录和存储记录之间的延迟

UPD:如果有人感兴趣,我已经找到了如何使 aws-sdk 在出现限制时跳过自动重试:有一个特殊参数 maxRetries 。无论如何,将按照下面的建议使用 Kinesis

最佳答案

[这并没有直接回答您的明确问题,因此根据我的经验,它将被否决:)但是,我会回答您试图解决的基本问题。]

我们接收大量传入请求并将其提供给 AWS Lambda 函数以按节奏写入 DynamoDB 的方式是用 Amazon Kinesis 流替换拟议架构中的 SQS。

Kinesis 流可以驱动 AWS Lambda 函数。

Kinesis 流保证任何给定键的已传递消息的排序(对于有序数据库操作很有用)。

Kinesis 流可让您指定可以并行运行的 AWS Lambda 函数数量(每个分区一个),这可以与您的 DynamoDB 写入容量相协调。

Kinesis 流可以在一次 AWS Lambda 函数调用中传递多条可用消息,从而实现进一步优化。

注意:实际上是 AWS Lambda 服务从 Amazon Kinesis 流读取然后调用该函数,而不是 Kinesis 流直接调用 AWS Lambda;但有时更容易想象为 Kinesis 驱动它。用户得到的结果几乎是相同的。

关于amazon-web-services - 如何使用 lambda 函数(不通过计划事件)处理 SQS 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678691/

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