Amazon web services 高度并发的AWS Express Step函数

Amazon web services 高度并发的AWS Express Step函数,amazon-web-services,aws-lambda,state-machine,amazon-kinesis,aws-step-functions,Amazon Web Services,Aws Lambda,State Machine,Amazon Kinesis,Aws Step Functions,我有一个系统,它从kinisis流接收记录,Lambda正在消耗流并为每个碎片调用一个函数,该函数获取一批记录并调用异步快速步骤函数来处理每个记录。步骤功能包含依赖第三方的任务。我设置了此任务的超时时间,但这仍然会导致大量并发步骤函数开始执行,因为步骤函数没有足够快地完成,这会导致Lambda执行的限制 为了缓解这个问题,我正在考虑为并发Express函数执行实现一个“信号量”。我发现,类似的方法没有太多,但检查一次有多少活动执行的方法只适用于标准步进函数。如果它能与Express一起工作,我可

我有一个系统,它从
kinisis
流接收记录,
Lambda
正在消耗流并为每个碎片调用一个函数,该函数获取一批记录并调用
异步快速步骤函数来处理每个记录。
步骤功能
包含依赖第三方的任务。我设置了此任务的超时时间,但这仍然会导致大量并发步骤函数开始执行,因为步骤函数没有足够快地完成,这会导致Lambda执行的限制

为了缓解这个问题,我正在考虑为并发Express函数执行实现一个“信号量”。我发现,类似的方法没有太多,但检查一次有多少活动执行的方法只适用于
标准步进函数
。如果它能与Express一起工作,我可以想象,如果超过任意
步进函数执行限制,我可能会在接收
Kinesis记录的函数中抛出错误,导致
Kinesis+Lambda
重试,直到容量可用。但由于我使用的是Express workflow,所以打电话并不是一个真正的选项


有没有一种解决方案可以限制并行
异步快速步进函数执行的次数
或者你看到了我如何实现“信号量”方法吗?

你有没有考虑过在每个lambda调用步进函数上触发,并使用
映射
状态来执行每个批的多个记录?
map
状态允许您限制并发执行的数量。这不会解决step函数的多次执行问题,如果您超出express函数的五分钟限制,可能会导致超时问题

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


也许解决方案是在下游进行调整以减少并发性?如果一次调用其他lambda的次数过多,那么可以将sq放在它们前面,并在那里启用批处理和管理节流。一般来说,您应该在高并发性是一个问题的地方使用类似SQS的东西来触发lambda,而在向它提供信息的地方则不太需要。换句话说,如果您当前的step函数能够处理高并发性,那么您应该让它们处理,并且任何因此而产生的问题都应该在此时进行管理。

感谢您花时间回答。我认为,每次调用并使用map调用step函数,而不必担心超时,仍然会产生相同的效果,因为可能会调用太多的step函数。我可以看出,它可以通过限制map中的并发性来缓解这个问题,但担心这会妨碍有容量的较小批处理的执行。我进一步研究了节流,它们是由于执行突发限制造成的。重试是毫无疑问的,因为它会影响系统的其余部分,所以必须避免节流。你对动情和SM之间的流量控制有什么建议吗?