我们正在使用 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 客户端的后端日志中生成一些内容)或者此时工作人员已经从列表中删除并导致超时?
任何帮助都将受到欢迎!谢谢!