【问题标题】:High Throughput and Windows Workflow Foundation高吞吐量和 Windows Workflow Foundation
【发布时间】:2009-01-23 09:50:36
【问题描述】:

WWF 能否处理在任何时候并行处理数十条记录的高吞吐量场景?

我们希望构建一个每小时处理几千条记录的工作流程。每条记录最多需要一分钟的时间来处理,因为它会调用外部 Web 服务。

我们正在测试 Windows Workflow Foundation 以执行此操作。但是我们的演示程序显示,当我们使用并行活动在一个工作流实例中一次处理多条记录时,每条记录的处理似乎是按顺序而不是并行运行的。

我们应该使用多个工作流实例还是并行活动?

是否有任何已知的高性能 WWF 处理模式?

【问题讨论】:

    标签: workflow workflow-foundation


    【解决方案1】:

    您绝对应该为每条记录使用新的工作流程。每个工作流只有一个线程在其中运行,因此即使使用 ParallelActivity,它们仍将按顺序处理。

    我不确定 Windows Workflow 的性能,但从我在 Tech-Ed 上听到的关于 .NET 4 的消息来看,它的 Workflow 组件将比 .NET 3.0 和 3.5 中的组件快得多。所以如果你真的需要很多性能,也许你应该考虑等待 .NET 4.0。

    另一种选择是考虑 BizTalk。但它相当昂贵。

    【讨论】:

      【解决方案2】:

      我认为常见的模式是每条记录使用一个工作流实例。工作流运行时并行运行多个实例。

      一个工作流实例一次运行一个线程。并行活动在这个单一线程上按顺序调用每个活动的 Execute 方法。但是,如果活动是异步的并且大部分时间都在等待外部进程完成其工作,那么您仍然可以从并行活动中获得性能改进。例如。如果 Activity 调用外部 Web 方法,然后等待回复 - 它从 Execute 方法返回并且在等待回复时不占用该线程,因此 Parallel 组中的另一个 Activity 可以开始其工作(例如,也调用 Web服务)。

      【讨论】:

      • 正如您所说,解决方案似乎是为每条记录使用正在运行的工作流实例。我们正在负载下测试这种方法,看看是否对我们可行。我还应该注意,我们需要 24 x 7 连续处理,因此我们需要不断创建或重用实例。
      • 您从测试中得出什么结论?