AWS Step Functions 中的超时和心跳有什么区别?

Llo*_*kas 1 amazon-web-services aws-step-functions

我在 AWS Step Functions 中使用回调模式,并且正在研究 AWS Step Functions 中关键“超时”和“心跳”之间的区别。

CDK代码:

  queue: sqsStack.queue,
  heartbeat: Duration.minutes(15),
  timeout: Duration.minutes(25),
Run Code Online (Sandbox Code Playgroud)

有什么区别,有哪些最佳实践?

小智 7

超时(TimeoutSeconds 或 TimeoutSecondsPath)告诉 Step Functions 等待任务完成的最长时间。如果您的任务确实超过了此时间,它将失败并出现States.Timeout 错误。您可以使用任务定义中的“捕获”或“重试”来处理此问题。最佳实践是设置此值以避免工作流执行卡住(即,如果负责完成这些的组件失败)。但您应该避免设置太短,并考虑在您不希望工作流执行本身失败的故障情况下预计运行多长时间。

心跳是可选的,但如果可以的话,这是实施的最佳实践。这要求您在处理任务的组件中实现检测信号,并在执行任务时定期使用SendTaskHeartbeat API 操作响应 Step Functions 。执行此操作时,您可以设置比任务超时短的检测信号超时(HearbeatSeconds 或 HearbeatSecondsPath),如果在超过此持续时间的时间内未收到 SendTaskHearbeat,Step Functions 将使任务失败并出现 States.HeartbeatTimeout 错误。这使您可以区分任务何时需要很长时间才能完成,因为负责的组件仍在处理该任务(即定期接收到心跳),以及何时负责的组件发生故障(即未收到心跳)。使用心跳时,您可以更安全地设置更长的任务超时,并避免责任组件无提示失败时执行延迟。