微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

高并发 AWS Express Step Functions

如何解决高并发 AWS Express Step Functions

我有一个系统从 Kinesis 流接收记录,Lambda 正在消耗流并为每个分片调用一个函数,这个函数需要一批记录并调用一个 Async Express Step Function 到处理每条记录。 Step Function 包含依赖于第三方的 Task。我为这个任务设置了超时,但这仍然会导致大量并发 step 函数开始执行,当任务花费更长的时间时,因为 step 函数没有足够快地完成,导致进一步限制 Lambda 执行。

为了缓解这个问题,我正在考虑为并发 Express 函数执行实现“信号量”。就类似方法而言,并没有太多,我发现 this article 但检查一次有多少活动执行的方法仅适用于 Standard Step Function。如果它适用于 Express,我可以想象如果超出任意 Kinesis record 执行限制,我可以在接收 Step Function函数中抛出错误,导致 Kinesis+Lambda 重试,直到容量可用。但是当我使用 Express 工作流程时,调用 ListExecutions 并不是一个真正的选择。

是否有限制并行 Async Express Step Function 执行次数解决方案,或者您是否看到我可以替代地实施“信号量”方法

解决方法

您是否考虑过在每次 lambda 调用时触发 step 函数并使用 map 状态来处理每批多条记录? map 状态允许您限制并发执行的数量。这并不能解决 step 函数的多次执行问题,如果您正在推动快速函数的五分钟限制的边界,则可能会导致超时问题。

我认为,如果您发现需要跨分区限制某些东西,那么您将进入一个复杂解决方案的世界。可以想象一个跟踪并发执行和处理超时的两阶段提交系统,但这些解决方案通常比它们的价值更复杂。

也许解决方案是在下游进行调整以减少那里的并发?如果您最终一次调用其他 lambdas 太多次,您可以将 SQS 放在它们前面并启用批处理并在那里管理节流。一般来说,您应该使用 SQS 之类的东西在高并发性成为问题的地方触发 lambda,而在出现问题的地方则更少。换句话说,如果您当前的 step 函数可以处理高并发,您应该让它们,并且任何由此产生的问题都应该在那时进行管理。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。