【问题标题】:Approach to crashed workers in amazon swf亚马逊瑞士法郎中坠毁工人的方法
【发布时间】:2016-05-02 13:17:13
【问题描述】:
我们目前正在 Amazon SWF 中实施一个工作流,我们从我们的 Web 应用程序提交作业/工作流执行。使用 Ruby Flow 框架设置一切都相当快速和轻松。只要决策者/活动工作者不崩溃,我们似乎就能优雅地处理大多数问题/异常。
我的问题是,对于决策者进程在工作流执行中途崩溃的情况,常见做法是什么?如果任务以这种方式失败,是否可以推送 SNS 通知(我没有看到任何示例)或向另一个进程指示发生意外失败/崩溃的东西?
【问题讨论】:
标签:
amazon-web-services
amazon-s3
amazon-swf
aws-ruby-flow
【解决方案1】:
有各种类型的“决定者”失败。
工作流工作器在处理决策时崩溃。决策任务在指定超时后自动重新安排。确保工作流类型defaultTaskStartToCloseTimeout 没有设置得太高。如果此崩溃与代码正确性无关,则会处理重新安排的任务,并且工作流执行会继续正常进行。
工作流工作器不会崩溃,但工作流执行本身会失败。在这种情况下,您可以使用ListClosedWorkflowExecutions 来计算此类失败的工作流。
工作流工作者不会崩溃,但决策任务无法完成,因为 RespondDecisionTaskCompleted 由于 Flow 框架中的错误而失败。从 SWF 的角度来看,任务永远不会完成,它在某个时间点被标记为超时并重新安排。由于错误仍然存在,因此新任务永远不会再次完成并重新安排,依此类推。遇到此类问题的工作流执行具有由重复的“已安排决策任务、决策任务超时”事件组成的尾部历史记录。如果您的工作流有一个已知的执行时间限制,那么捕获此问题的最佳方法是设置合理的 executionStartToCloseTimeout 并查找超时的工作流执行。如果决策任务超时设置得太低,此类工作流也可能在执行超时之前达到历史记录大小的限制。
【解决方案2】:
所有 swf 指标都不会发布到 Cloud Watch。因此,所有已完成和失败的工作流程都会将指标发送到 cloudwatch,您可以在其中创建警报,以便在任何工作流程失败时向您发送通知。