Cadence中QPS限制有两种类型的错误
Persistence Max QPS Reached
和
Persistence Max QPS Reached for List Operations
最好的解决方法是什么?
Cadence中QPS限制有两种类型的错误
Persistence Max QPS Reached
和
Persistence Max QPS Reached for List Operations
最好的解决方法是什么?
它们用于保护数据库不被 Cadence 服务过载。
达到默认数据库上所有数据库操作的限制时达到的持久性 Max QPS。
默认数据库几乎是数据库操作的所有内容,包括插入/更新/删除工作流/活动。
当达到可见性数据库上仅 db 操作的限制时,达到列表操作的持久性最大 QPS 。如果使用高级可见性,可见性数据库可以是 SQL/Cassandra 或 ElasticSearch。
可见性数据库仅用于提供可见性功能。
有不同的配置控制限制:
frontend.persistenceMaxQPS和frontend.persistenceGlobalMaxQPS共同控制前端服务的常规数据库操作限制。默认值为每个节点 2000。
matching.persistenceMaxQPS和matching.persistenceGlobalMaxQPS共同控制匹配服务的常规数据库操作的限制。默认值为每个节点 3000。
history.persistenceMaxQPS和history.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/内存。并根据需要扩展您的数据库。