当前位置: 首页 > 知识库问答 >
问题:

优步Cadence任务列表管理

翟卓君
2023-03-14

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

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

有多个域,对于所有域,单个BEhtml" target="_blank">服务器注册为工作机。

日志中可见的是,有时在查询期间,节奏似乎对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-lists/mytasklist/pollers)。正因为如此,几乎整个环境都死了,因为这个决定没有什么可以进展的。唯一的选择是重新启动后端服务,并让它重新注册为辅助角色。

在这一点上,调查陷入僵局,所以一些帮助将不胜感激。

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

任何帮助都将非常受欢迎!谢谢!

共有1个答案

松国兴
2023-03-14

有人知道一个工人或任务列表是如何失去决策处理能力的吗

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

据我所知,当失去粘性时,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客户端也有一个错误,用户代码崩溃不应该导致决策工作器崩溃)。然后在您的工作器池的所有实例上进行查询任务循环,最终使您的所有决策工作器崩溃。

 类似资料:
  • 我想实现一个延迟任务,发现了一个cadence cron例子,如何用cadence实现一个延迟任务?

  • 我在找一个微服务协调器,遇到了优步卡登斯。我已经阅读了文档,并在开发设置中使用了它。 我对生产场景有几个问题: > 是否建议为工作流及其使用的不同活动设置一个专用的任务列表?或者,我们应该为所有人使用一个任务列表?这个决定会影响可扩展性或性能吗? 当我们添加新的工作线程计算机时,在同一台计算机中为不同的活动/工作流运行所有工作线程是否是一种常见的做法?例: 或者我们应该在专用机器中运行每个活动/工

  • 每个新创建的任务都是 org.gradle.api.DefaultTask 类型, org.gradle.api.Task 的标准实现,DefaultTask 所有的域都是私有的,意味着他们只能通过 setter 和 getter 方法来访问,庆幸的是Groovy提供了一些语法糖来允许你通过名字来使用域。 管理项目的版本 许多公司或者开源组织有他们自己的发布版本的措施,一般用主版本号和次版本号来表

  • 用 ceph-deploy 建立一个集群后,你可以把客户端管理密钥和 Ceph 配置文件发给其他管理员,以便让他用 ceph 命令管理集群。 创建一管理主机 要允许一主机以管理员权限执行 Ceph 命令,用 admin 命令: ceph-deploy admin {host-name [host-name]...} 分发配置文件 要把改过的配置文件分发给集群内各主机,可用 config push

  • 在San CLI中主要通过san serve和san build命令进行生产和开发环境的打包,San的脚手架工程内置了四个命令,包括启动本地服务、生产环境打包、打包分析、现代模式打包等,脚手架工程的package.json内可执行的命令有: npm run start // 打包+启动本地服务 npm run build // 打包发布 npm run analyzer // 打包分析 npm r

  • 任务管理(又称 构建)工具 任务管理/构建 工具: Gulp Grunt Tasking/build and more tools: Brunch Mimosa