1

ActivityOptions 中有四个不同的超时选项,其中两个是强制性的,没有任何默认值:ScheduleToStartTimeoutStartToCloseTimeout.

为这些超时选择值时应考虑哪些因素?

4

1 回答 1

2

正如问题中提到的,ActivityOptions 中有四种不同的超时选项,它们之间的区别对于 Cadence 新用户来说可能不是很清楚。让我们首先简要解释一下它们是什么:

  • ScheduleToStartTimeout:此配置指定 Activity 被工作流调度和被 Activity Worker 拾取以开始执行它之间的最大持续时间。换句话说,它配置了任务在队列中花费的时间。
  • StartToCloseTimeout:此选项指定活动工作者从获取任务到向 Cadence 服务器报告任务完成所用的最长时间。
  • ScheduleToCloseTimeout:此配置指定活动的端到端超时持续时间,从工作流安排它到活动工作人员完成。
  • HeartbeatTimeout:如果您的活动是心跳活动,则此配置基本上指定了 Cadence 服务器在假设活动工作者失败之前等待心跳的最大持续时间。

如何选择合适的超时值

StartToCloseTimeout当您知道它的作用时,选择它是相当简单的。本质上,您应该使此时间足够长,以便活动可以在正常情况下完成。因此,您应该考虑所有可能影响活动工作者所花费时间的因素以及您的下游延迟(即服务、网络等)。另一方面,您的目标应该是使该值尽可能小,以使您的端到端系统更具响应性。如果你不能让这个超时时间少于几分钟(最好是 1 分钟或更短),你应该考虑使用HeartbeatTimeout配置并在你的活动中实现心跳。

ScheduleToCloseTimeout也很容易理解,但更常见的是在这里选择一个不太理想的值导致的问题。因此,重要的是要确保有一刻特别注意此配置。

基本上,您应该考虑可以在活动任务队列中创建积压的所有内容。导致积压的一些常见事件是:

  • 由于部署、维护或网络相关问题导致工作池吞吐量降低。
  • 下游延迟峰值会增加完成每个活动任务所需的时间,从而降低工作池的吞吐量。
  • 安排活动的工作流实例数量显着增加;特别是如果上游服务之一也是异步队列/流处理器,它可以创建自己的积压并突然开始以非常大的容量处理它。

理想情况下,在任务队列中等待时,任何活动都不应超时,尤其是当队列已备份并且活动被配置为重试时。因为重试会将更多活动任务添加到队列中,从而使从积压中恢复变得更加困难,或者使情况变得更糟。另一方面,在许多用例中,业务需求确实限制了系统处理活动所花费的总时间。因此,ScheduleToCloseTimeout只要业务需求允许,瞄准高价值通常不是一个坏主意。根据您的用例,将您的活动保留在队列中超过几分钟可能没有意义,或者在超时前将其保留几天可能完全没问题。

于 2020-04-19T07:47:38.697 回答