uber-cadence 框架是否对在工作流程的生命周期内接收到的信号数量实施限制?

Does uber-cadence framework enforce limits on the number of signals received over the lifecycle of a workflow?

来自 Uber 的 Cadence 文档,它说单个工作流不能期望 运行 在工作流的生命周期内有超过 10 万个活动。 https://cadenceworkflow.io/docs/concepts/workflows/#child-workflow

A single workflow has a limited size. For example, it cannot execute 100k activities. Child workflows can be used to partition the problem into smaller chunks. One parent with 1000 children each executing 1000 activities is 1 million executed activities.

我想知道由于接收到许多信号,Cadence 是否对状态变化的数量施加了一些类似的限制?

在我的用例中,我有一个很长的 运行ning(数月到数年)工作流,每个工作流都会跟踪用户的 activity 游戏系统。每个用户工作流将接收的信号总数每隔几天就会超过 100k,这会导致超过 100k 的工作流状态更改。

问题是每个信号不一定会调用我的业务逻辑中的 activity 个调用,因此每个工作流调用的活动总数可以保持在较低水平。 (例如,当接收到的信号超过 100k 时,总共调用了 100 activity 个)

  1. 在这种情况下,Cadence 工作流是否会抛出任何错误,因为工作流的内部历史太长而无法跟踪收到的 100k+ 信号,尽管根据文档中的指南只有数百个活动调用?

我不清楚 cadence 文档对 100k activities 限制的引用是否仅适用于 activity 调用总数或所有状态更改总数(活动、信号、查询等)。

Does uber-cadence framework enforce limits on the number of signals received over the lifecycle of a workflow?

是的。默认为 10K。见 MaximumSignalsPerExecution https://pkg.go.dev/github.com/uber/cadence@v0.23.1/common/dynamicconfig#Key

更准确地说,这个 10K 信号限制是从这个提交的 0.16 版本开始的:https://github.com/uber/cadence/commit/0993f6ebb0ceda610f9e47fe8569db50485b0e18

0.16以下版本无限制

当向工作流发送超过限制数量的信号时,Cadence 将拒绝信号请求。

Total number of signals that each user workflow will receive can go over 100k every few days, which leads to more than 100k workflow state changes.In this scenario, will cadence workflow throw any error because internal history of the workflow is too long to keep track of 100k+ signals received, despite having only hundreds of activities calls per guidelines in the doc?

Cadence 默认要求历史小于 200K

参见 https://pkg.go.dev/github.com/uber/cadence@v0.23.1/common/dynamicconfig#Key

中的 HistoryCountLimitError

当历史增长超过此限制时,Cadence 将立即终止工作流。但是,您可以调整配置,然后重新设置工作流程。