前几天我们遇到了一些关于节奏设置的问题。我们的一个机器实例开始将CPU使用率提高到90%,并且所有入站工作流执行都停留在“预定”状态。在检查日志之后,我们注意到匹配的服务抛出了以下错误:
{
"level": "error",
"ts": "2021-03-20T14:41:55.130Z",
"msg": "Operation failed with internal error.",
"service": "cadence-matching",
"error": "InternalServiceError{Message: UpdateTaskList operation failed. Error: gocql: no hosts available in the pool}",
"metric-scope": 34,
"logging-call-at": "persistenceMetricClients.go:872",
"stacktrace": "github.com/uber/cadence/common/log/loggerimpl.(*loggerImpl).Error\n\t/cadence/common/log/loggerimpl/logger.go:134\ngithub.com/uber/cadence/common/persistence.(*taskPersistenceClient).updateErrorMetric\n\t/cadence/common/persistence/persistenceMetricClients.go:872\ngithub.com/uber/cadence/common/persistence.(*taskPersistenceClient).UpdateTaskList\n\t/cadence/common/persistence/persistenceMetricClients.go:855\ngithub.com/uber/cadence/service/matching.(*taskListDB).UpdateState\n\t/cadence/service/matching/db.go:103\ngithub.com/uber/cadence/service/matching.(*taskReader).persistAckLevel\n\t/cadence/service/matching/taskReader.go:277\ngithub.com/uber/cadence/service/matching.(*taskReader).getTasksPump\n\t/cadence/service/matching/taskReader.go:156"
}重新启动工作流程后,一切都恢复正常,但我们仍在努力弄清楚发生了什么。在这个事件发生的那一刻,我们没有表现出任何沉重的工作负载,只是发生得很突然。我们的主要怀疑是,匹配服务可能在此事件期间失去了与cassandra数据库的连接,并且在我们重启它后,它能够恢复连接。但目前这只是一个假设。
这个问题的原因可能是什么?有没有办法防止这种情况在未来发生?也许是一些我们遗漏的动态配置?
PS: Cadence版本为0.18.3
发布于 2021-03-23 11:38:45
这是gocql中的known issue,原因有很多:
matching.persistenceGlobalMaxQPS将充当全局速率限制符,以覆盖matching.persistenceMaxQPS 此外,如果匹配的节点正在运行,则可能会达到单个任务列表的限制。如果是,请考虑启用the scalable tasklist feature。
https://stackoverflow.com/questions/66747733
复制相似问题