我有这个设置
ApiGateway - > Lambda1 - > DynamoDB - > Lambda2 - > SNS - > SQS
以下是我要做的事情:
基本上,如果我向Api网关发出http请求,我希望在SQS中看到一条消息。实际上,对于单个请求,一切都按预期工作。
我做了这个测试:
测试的第二步在110秒内完成。我的DynamoDB配置为每秒100次写入,这110秒非常有意义。 110秒后,我在DynamoDB表中看到了这10000条记录
问题是消息需要花费太多时间才能在SQS中结束。我检查了Lambda2的日志,我发现它在测试完成后仍然会被触发30分钟。同样在Lambda2的日志中,我看到了这种模式。
Start Request
Message published to SNS...
Message published to SNS...
[98 more "Message published to SNS..."]
End Request
日志包括重复这些行。 100行“消息发布”是有意义的,因为DynamoDBStream配置为批量大小为100.对Lambda2的每个请求需要50-60秒,这意味着所有消息最终需要约90分钟才能在SQS中结束。
困扰我的是,每个“开始请求”都在“结束请求”之后。所以,根本原因似乎DynamoDBStream并没有并行触发Lambda2。
问题
为什么DynamoDBStream不会并行触发lambda函数?我错过了配置吗?
解决方案
在接受答案的建议后,评论是我的解决方案。
通过这些优化,我可以在发送所有http请求后10-15秒内看到SQS中的所有10000条消息。
结论:)
为了找到最佳(廉价和可接受的延迟)解决方案,我们需要使用不同的批量大小,线程数,分配的内存等进行多次测试。
答案 0 :(得分:2)
目前无法触发DynamoDBStream并行触发。它只是一个顺序交付和批量配置。
也没有部分交付。如果批量交付给lambda,则需要批量完成所有元素。否则它将在以后交付相同的批次或更多记录。
此外,您需要为下一批次成功完成lambda,如果出错,它将重复调用lambda,直到成功传递或流中数据的生命周期。