【问题标题】:Cadence configuration for worker threads and workflow工作线程和工作流的节奏配置
【发布时间】:2020-09-18 11:04:16
【问题描述】:

工作人员和工作流之间的比例是多少以及如何管理 线程,以便工作人员和工作流数量之间不应该中断 如果我启动更多数量的工作流,则会引发以下错误

没有足够的线程来执行工作流。如果此消息始终出现,则应减少 WorkerOptions.maxConcurrentWorklfowExecutionSize 或 WorkerOptions.maxWorkflowThreads 增加。

处于阻塞状态的工作流在内存中保持活动状态?? 处于等待状态的工作流不断检查条件??更多处于等待状态的工作流将保持工作人员被占用?? 在下面的示例中,线程正在等待信号, 工作流的数量扩展到一百万/天,timetocloseWorkflow = 2 天。 触发信号的平均时间是相应工作流程启动后 1 天

public class TestWorkflowImpl implements TestWorkflow {

 private static final Logger logger = LoggerFactory.getLogger(TestWorkflow.class);
 private int counter = 0;

 private final CounterPrintActivity cpa = Workflow.newActivityStub(CounterPrintActivity.class);

 @Override
 @WorkflowMethod
 public String startWorkflow() {
 Workflow.await(() ->counter >= 1000);
 return "Complete";
 }

 @Override
 public int getCurrentStatus() {
 return counter;
 }

 @Override
 public void setCount(int setNum) {
 logger.info("In signal");
 counter = counter+setNum;
 }

--

【问题讨论】:

    标签: cadence-workflow temporal-workflow


    【解决方案1】:

    工人和工作流之间的比例是多少,以及如何管理线程,以便工人和工作流数量之间不应该出现中断如果我启动更多数量的工作流,则会引发以下错误

    没有这样的比率,因为被阻止的工作流根本不消耗工作器内存(在它们被推出缓存之后)。因此,如果这些工作流没有取得任何进展,可能会有数十亿个被阻止的工作流和一个工作人员。

    没有足够的线程来执行工作流。如果此消息始终出现,则应减少 WorkerOptions.maxConcurrentWorklfowExecutionSize 或增加 WorkerOptions.maxWorkflowThreads。

    maxWorkflowThreads 定义所有当前正在执行和缓存的工作流可以使用多少线程。

    maxConcurrentWorklfowExecutionSize 定义了可以并行执行多少工作流任务。

    “没有足够的线程来执行工作流”异常表示没有足够的线程来执行当前正在运行的工作流任务。例如,如果每个工作流使用两个线程并且maxConcurrentWorklfowExecutionSize 为 100,则maxWorkflowThreads 应至少为 200。使用此类设置 0 工作流将被缓存,因为所有线程都将被当前执行的工作流任务消耗。所以一般来说,保持maxWorkflowThreadsmaxConcurrentWorklfowExecutionSize 更高以支持缓存更好。

    处于阻塞状态的工作流在内存中保持活动状态??

    它保持缓存状态,直到另一个工作流需要取得进展并将缓存的工作流踢出。之后,被阻塞的工作流在接收到一些新事件(如计时器、信号或活动完成)时被加载到工作程序内存中。

    处于等待状态的工作流不断检查条件??更多处于等待状态的工作流将保持工作人员被占用??

    它仅在处理某些新事件时检查。当什么都没有发生时,检查不会被执行。

    在下面的示例中,线程正在等待信号,工作流的数量被缩放到一百万/天,timetocloseWorkflow = 2 天。触发信号的平均时间是相应工作流程启动后的 1 天

    假设工作人员可以跟上工作流任务的处理速度,这种情况应该可以正常工作。

    【讨论】:

    • setMaxConcurrentActivityExecutionSize 是否是活动工作者的全局“节流”?
    • 每个工人。无法在全局范围内限制活动的并发执行。
    猜你喜欢
    • 2020-07-24
    • 2020-10-06
    • 2022-09-29
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多