如何在 Cadence 中增加 Persistence QPS 限制 确保相应地扩展数据库

问题描述

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

Persistence Max QPS Reached

Persistence Max QPS Reached for List Operations

最好的解决方法是什么?

解决方法

它们是什么

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

在达到 default database 上所有数据库操作的限制时达到了持久性最大 QPS

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

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

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

对默认数据库的限制

有不同的配置控制限制:

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

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

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

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

默认XXX.persistenceGlobalMaxQPS 为零,因此使用persistenceMaxQPS 作为节点中的本地限制。检查 documentation 中的默认值。

可见性数据库的限制

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

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.}"

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

如果需要提高限制

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

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

这是dynamic configuration format

如果您使用的是舵图,the dynamic config is defined here。 例如,

frontend.persistenceGlobalMaxQPS:
  - value: 1000

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

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

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

确保相应地扩展数据库。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...