【问题标题】:How to limit number of concurrent workflows running?如何限制运行的并发工作流数量?
【发布时间】:2022-12-11 12:47:58
【问题描述】:

标题几乎就是问题所在。有没有办法限制在任何给定时间运行的并发工作流的数量?

一些背景: 一旦将消息发送到pubsub 主题,我将使用eventarc 来分派工作流。该工作流将用于启动一些长时间运行的操作 (LRO),但出于我不会深入探讨的原因,我不希望在给定时间运行超过 3 个此工作流的实例。

有什么办法可以做到这一点? - 主要来自某种类型的配置,而不是使用另一种计算资源。

【问题讨论】:

  • 您想对所有消息做什么?如果已经有 3 个实例在运行,你需要缓冲它们吗?
  • 因为我会使用 pubsub,所以它们只会保留在消息队列中——未被确认。根据我在 eventarc 上阅读的内容,一旦工作流启动,消息就会自动得到确认,所以我想要一些机制/配置来防止在并发实例数达到阈值时分派工作流。

标签: google-cloud-platform google-workflows event-arc


【解决方案1】:

没有配置来限制正在运行的进程,这些进程专门针对由启用并发执行的工作流执行的会话。 现有进程限制适用于所有会话,不区分非并发或并发启用的工作流。

同步使用户能够限制工作流中某些工作流或模板的并行执行,而不必限制其他工作流。

用户可以在 ConfigMap 中创建多个同步配置,这些配置可以从工作流或工作流内的模板中引用。或者,用户可以配置互斥锁以防止使用相同互斥锁并发执行模板或工作流。

有关详细信息,请参阅此link

【讨论】:

  • 好像我必须使用另一个工具 - 这个解决方案对我来说不是很好。谢谢你的回答。
【解决方案2】:

总结您的要求:

  1. 使用 Pub/Sub 消息触发工作流执行
  2. 同时执行最多 3 个工作流执行
  3. 排队等待发布/订阅消息
  4. (未指定)您需要按发送顺序处理消息吗?

    没有开箱即用的功能可以实现这一点。为了好玩,下面是一个不需要辅助计算的解决方案(因此仍然是完全托管的)。

    完成这项工作的关键可能是为每条消息开始新的执行,但如果需要则等待该执行。 Workflows 不提供全局并发构造,因此您需要使用一些外部存储,例如 Firestore。像这样的算法可以工作:

    1. 创建回调
    2. 将回调推入 FIFO 队列
    3. 以原子方式递增计数器(返回新值)
    4. 如果返回值<=3,弹出最后一个回调并调用
    5. 等待回调
    6. -- 这里的主要工作流程 --
    7. 自动递减计数器
    8. 如果返回值<3,弹出最后一个回调并调用

      为了使事情更清晰,您可以将上述步骤放在触发的工作流中,并将主要逻辑放在根据需要调用的单独工作流中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 2015-12-06
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多