由于 Uber Cadence 中的连续轮询,工作流工作人员的扩展限制?

Scaling limitation of workflow workers due to continuous polling in Uber Cadece?

我正在评估实施业务编排的节奏。我知道工作人员不断轮询任务列表以执行任务。我在这里担心的是它会导致任何规模问题吗? worker 总是很忙,不断地轮询一些数据库,同时它还需要执行业务逻辑,所以它是否有可能耗尽资源然后崩溃或放弃要执行的任务?

当我们有数百万个工作流时,这种轮询机制如何扩展?当我们在任务列表中有数百万个任务时,会不会导致执行工作流代码的延迟?

Cadence 和 Temporal use long polling 通过 gRPC 来监听任务队列。因此,如果队列中没有消息,轮询请求每分钟一次 return。这样工作人员就不会因为轮询而消耗过多的资源。此外,由于匹配服务实施的各种优化,大多数轮询调用永远不会导致对数据库的调用。

打开的工作流的数量根本不会影响轮询性能,因为这些工作流中的许多可以被动地等待外部事件的计时器。工作流每秒执行的操作数定义了有多少任务必须交付给工作人员。如果集群和工作人员配置正确,那么即使是高速率的任务也不会导致任何问题。

除了 Maxim 的回答之外的一些建议 -- Cadence/Temporal 只要您设置正确,就不会出现缩放问题。

当您的任务列表(任务队列)中有数百万个任务,并且需要 运行 数千个工作人员来处理这些任务时,请确保配置具有更多分区的可扩展任务列表。

本质上,默认情况下一个任务列表只使用一个分区,映射到一个db分区(如果使用Cassandra或多个SQL或其他NoSQL),并由一个匹配的主机拥有.因此它的可扩展性不足以服务于数以千计的工作主机和数以百万计的任务。因此,您需要通过添加更多分区来扩展任务列表。否则匹配的主机会运行太热,数据库分区会是热分区(并且有高延迟)。

查看有关如何启用可扩展任务列表功能的文档:https://cadenceworkflow.io/docs/operation-guide/maintain/#scale-up-a-tasklist-using-scalable-tasklist-feature