Cadence如何清理任务列表记录



是否每个注册的任务列表(例如数据库记录)都有成本?

如果我使用动态任务列表是可以的吗?例如,per instanceID,这样任务列表就不会相互影响。

每个takslist的成本不到1KB,但累积起来可能是一个很大的数字。所以清理是很重要的。

依赖于Cadence集群的后端数据库。

在SQL中,如果常规任务列表中不再有任务,或者其中的所有任务都已过期,则仍然会删除常规任务列表。工作流粘性任务只有10秒的超时时间,所以它们通常很容易删除。只有当有无限超时的任务留在那里时,常规任务列表才永远不会被删除。活动任务通常有几分钟到几小时的超时,但常规的工作流决策任务由于协议设计而有无限的超时(这样工作流工作者可以关机一个月,仍然可以回来拿起工作流任务),但如果任务耗尽,任务列表将被删除。查看任务列表扫描工作流程的SQL: https://github.com/uber/cadence/blob/master/service/worker/scanner/tasklist/handler.go#L43

Cassandra在这种情况下更糟。它只对粘性任务列表应用TTL,不删除常规任务列表。设计认为Cassandra可以很容易地扩展,所以他们不用担心任务列表的空间存储。

参见Cassandra为病态任务列表应用TTL: https://github.com/uber/cadence/blob/9a46d9d483cfdb8fd5ca77d1f448d79d78b0e791/common/persistence/nosql/nosqlTaskStore.go#L172

最新更新