【问题标题】:Uber Cadence task list managementUber Cadence 任务列表管理
【发布时间】:2021-04-22 04:27:36
【问题描述】:

我们正在使用 Uber Cadence,并且我们会定期在生产环境中遇到问题。 设置如下:

  • 一个带有 Cadence 客户端 2.7.5 的 Java 14 BE
  • 带有 Postgres DB 的 Cadence 服务版本 0.14.1

有多个域,对于所有域,单个 BE 服务器注册为工作器。

日志中可见的是,有时在查询期间,节奏似乎失去了对 BE 服务的粘性:

"msg":"query direct through matching failed on sticky, clearing sticky before attempting on non-sticky","service":"cadence-history","shard-id":1,"address":"10.1.1.111:7934"
"msg":"query directly though matching on non-sticky failed","service":"cadence-history","shard-id":1,"address":"10.1.1.111:7934"..."error":"code:deadline-exceeded message:timeout"
"msg":"query directly though matching on non-sticky failed","service":"cadence-history","shard-id":1,"address":"10.1.1.111:7934"..."error":"code:deadline-exceeded message:timeout"
"msg":"query directly though matching on non-sticky failed","service":"cadence-history","shard-id":1,"address":"10.1.1.111:7934"..."error":"code:deadline-exceeded message:timeout"
"msg":"query directly though matching on non-sticky failed","service":"cadence-history","shard-id":1,"address":"10.1.1.111:7934"..."error":"code:deadline-exceeded message:timeout"
...

与此同时,在后端什么都看不到。但是,在此期间,如果我检查 cadence Web 客户端上的轮询器,我会看到任务列表在那里,但它不再被视为决策处理程序(http://localhost:8088/domains/mydomain/task-列表/mytasklist/pollers)。正因为如此,几乎整个环境都死了,因为没有什么可以随着决定而进步。唯一的选择是重新启动后端服务并让它重新注册为工作人员。

此时调查陷入僵局,希望能提供一些帮助。

  • 有谁知道工作人员或任务列表如何失去其作为决策处理者的能力?它是由节奏管理的,比如基于工人产生多少错误?我找不到任何关于此的信息。
  • 据我了解,当粘性丢失时,cadence 将检查是否有另一个工作人员重播工作流并继续它(在我的情况下,这将是同一个工作人员,因为只有一个工作人员)。是否可能无法重播流程(尽管我认为它会在 cadence 客户端的后端日志中生成一些内容)或者此时工作人员已经从列表中删除并导致超时?

我们非常欢迎任何帮助!谢谢!

【问题讨论】:

    标签: cadence-workflow uber-cadence


    【解决方案1】:

    有谁知道工作人员或任务列表如何失去其作为决策处理者的能力

    当工作人员停止轮询决策任务时,就会发生这种情况。例如,如果您将工作人员配置为仅对活动任务进行轮询,那么它将显示为这样。因此,如果工作人员出于某种原因停止轮询决策任务,显然也会发生这种情况。

    据我了解,当失去粘性时,cadence 将检查是否有其他工作人员重播工作流程并继续

    可以,只要有另一个工作人员轮询决策任务。请注意,查询任务被视为决策任务类型。 (这是一个错误的设计,我们正在努力将其分开)。

    从您的日志中:

    "msg":"query directly though matching on non-sticky failed","service":"cadence-history","shard-id":1,"address":"10.1.1.111:7934"..."error":"code:deadline-exceeded message:timeout"
    

    这意味着 Cadence 将 Query 任务分派给工作人员,工作人员接受了,但在超时内没有回复。

    您的查询处理程序逻辑中很有可能存在一些错误。该错误导致决策工作者崩溃(这意味着 Cadence Java 客户端也有一个错误,用户代码崩溃不应该使工作者崩溃)。然后对工作池的所有实例进行查询任务循环,最终使所有决策工作人员崩溃。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多