1

Cadence中QPS限制有两种类型的错误

Persistence Max QPS Reached

Persistence Max QPS Reached for List Operations

最好的解决方法是什么?

4

1 回答 1

2

这些是什么

它们用于保护数据库不被 Cadence 服务过载。

达到默认数据库上所有数据库操作的限制时达到的持久性 Max QPS

默认数据库几乎是数据库操作的所有内容,包括插入/更新/删除工作流/活动。

当达到可见性数据库上仅 db 操作的限制时,达到列表操作的持久性最大 QPS 。如果使用高级可见性,可见性数据库可以是 SQL/Cassandra 或 ElasticSearch。

可见性数据库仅用于提供可见性功能。

限制默认数据库

有不同的配置控制限制:

frontend.persistenceMaxQPSfrontend.persistenceGlobalMaxQPS共同控制前端服务的常规数据库操作限制。默认值为每个节点 2000。

matching.persistenceMaxQPSmatching.persistenceGlobalMaxQPS共同控制匹配服务的常规数据库操作的限制。默认值为每个节点 3000。

history.persistenceMaxQPShistory.persistenceGlobalMaxQPS共同控制历史服务的常规数据库操作限制。默认为每个节点 9000。

XXX.persistenceMaxQPS是单个节点的本地限制,而XXX.persistenceGlobalMaxQPS是所有节点的全局限制。当persistenceGlobalMaxQPS 设置为大于零时,它是首选。

默认情况下XXX.persistenceGlobalMaxQPS为零,因此将使用 persistenceMaxQPS 作为节点中的本地限制。检查文档中的默认值。

可见性数据库的限制

只有前端和历史服务需要查询可见性数据库:

frontend.visibilityListMaxQPS是基于 cassandra/SQL 数据库的前端服务可见性的本地节点限制。默认为 10。(在旧版本中为 1)

frontend.esVisibilityListMaxQPS是基于 ElasticSearch 的高级可见性的本地节点限制。默认为 30。

history.historyVisibilityOpenMaxQPS是后台任务写入开放执行时基于 cassandra/SQL 数据库的历史服务可见性的本地节点限制。后台任务应该能够进行退避重试,因此您无需担心错误。

history.historyVisibilityClosedMaxQPS与上面类似,但写入封闭表。

如何解决错误

识别哪个服务和哪个数据库操作类型

首先,确定哪个服务有错误。例如:

"level":"error","ts":"2020-04-15T05:24:22.075Z","msg":"Error refreshing domain cache","service":"cadence-frontend","error":"ServiceBusyError{Message: Persistence Max QPS Reached.}","logging-call-...
...

这是在默认数据库操作中遇到 QPS 限制的前端服务。

但如果你看到:

"service":"cadence-frontend","error":"ServiceBusyError{Message: Persistence Max QPS Reached for List Operations.}"

然后是前端服务对可见性数据库操作的 QPS 限制(基于 sql/Cassandra 或 ElasticSearch)。

如果需要,提高限制

因为默认限制是本地节点限制,所以提高限制的最简单方法就是向出现错误的服务添加更多节点。对于我们上面提到的两个示例,您只需将节点添加到前端服务即可提高限制。

但理想情况下,您应该能够更改配置。它是通过动态配置部分。

这是动态配置格式

如果您使用 helm chart,则在此处定义动态配置。举些例子,

frontend.persistenceGlobalMaxQPS:
  - value: 1000

将为默认数据库操作设置所有前端服务的全局限制。

frontend.visibilityListMaxQPS:
  - value: 100
frontend.esVisibilityListMaxQPS:
  - value: 100

将为可见性数据库操作(SQL/Cassandra 或 ElasticSearch)的所有前端服务设置全局限制。

确保相应地扩展数据库。

提高限制后,请观察添加到数据库的负载以了解延迟和 CPU/内存。并根据需要扩展您的数据库。

于 2021-01-11T17:46:17.157 回答