AWS Step Function 中的负载控制函数
Load Control Function in AWS Step Function
AWS Step Function 状态机的核心是 Lambda 函数,它对 S3 存储桶进行大量写入。当状态机出现使用高峰时,由于 S3 阻止进一步的请求 (com.amazonaws.services.s3.model.AmazonS3Exception: Please reduce your request rate.
),函数开始失败。这显然会导致状态机整体执行失败,整个系统需要几分钟才能完全恢复。
我查看了 AWS Lambda Function Scaling Documentation 并发现,当我们减少 保留并发 标志时,函数将开始 return 429
状态代码,一旦它不能处理新事件。
所以我的加载控制函数执行的思路可以总结如下:
- 将预留并发设置为某个较低的值。
- 捕获步进函数中的
429
错误和 retrying with a backoff rate。
我希望得到你们的反馈,关于以下方面:
一个。我的方法是否有意义,或者我是否遗漏了一些明显更好的方法?我首先想到的是研究使用 AWS SQS 或某些执行范围 locking/semaphore 来管理负载,但并没有真正看到更多。
b.是否有其他方法可以从 S3 端解决该问题?
这种方法对我很有效:
States:
MyFunction:
Type: Task
End: true
Resource: "..."
Retry:
- ErrorEquals:
- TooManyRequestsException
IntervalSeconds: 30
MaxAttemtps: 5
BackoffRate: 2
AWS Step Function 状态机的核心是 Lambda 函数,它对 S3 存储桶进行大量写入。当状态机出现使用高峰时,由于 S3 阻止进一步的请求 (com.amazonaws.services.s3.model.AmazonS3Exception: Please reduce your request rate.
),函数开始失败。这显然会导致状态机整体执行失败,整个系统需要几分钟才能完全恢复。
我查看了 AWS Lambda Function Scaling Documentation 并发现,当我们减少 保留并发 标志时,函数将开始 return 429
状态代码,一旦它不能处理新事件。
所以我的加载控制函数执行的思路可以总结如下:
- 将预留并发设置为某个较低的值。
- 捕获步进函数中的
429
错误和 retrying with a backoff rate。
我希望得到你们的反馈,关于以下方面:
一个。我的方法是否有意义,或者我是否遗漏了一些明显更好的方法?我首先想到的是研究使用 AWS SQS 或某些执行范围 locking/semaphore 来管理负载,但并没有真正看到更多。 b.是否有其他方法可以从 S3 端解决该问题?
这种方法对我很有效:
States:
MyFunction:
Type: Task
End: true
Resource: "..."
Retry:
- ErrorEquals:
- TooManyRequestsException
IntervalSeconds: 30
MaxAttemtps: 5
BackoffRate: 2