在Cadence中QPS限制有两种类型的错误
Persistence Max QPS Reached和
Persistence Max QPS Reached for List Operations最好的解决方法是什么?
发布于 2021-01-12 01:46:17
他们是什么
它们用于保护数据库免受Cadence服务的过载。
当达到default database上所有数据库操作的限制时,持久性最大QPS达到。
默认数据库几乎是数据库操作的一切,包括插入/更新/删除工作流/活动。
在可见性数据库上仅达到数据库操作限制时,已达到列表操作的持久性最大QPS。可见性数据库可以是SQL/Cassandra,如果使用高级可见性,则可以是ElasticSearch。
可见性数据库仅用于服务可见性功能。
对默认数据库的限制
有不同的配置来控制该限制:
frontend.persistenceMaxQPS和frontend.persistenceGlobalMaxQPS共同控制前端服务的常规db操作的限制。默认值为每个节点2000。
matching.persistenceMaxQPS和matching.persistenceGlobalMaxQPS一起控制用于匹配服务的常规db操作的限制。默认值为每个节点3000。
history.persistenceMaxQPS和history.persistenceGlobalMaxQPS共同控制历史服务的常规db操作的限制。默认值为每个节点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.}"然后是前端服务对可见性数据库操作的QPS限制(基于sql/Cassandra或ElasticSearch )。
如果需要,提高限制
因为默认限制是本地节点限制,所以提高限制的最简单方法是简单地向出现错误的服务添加更多节点。对于我们上面提到的两个示例,您只需将节点添加到前端服务,然后应提高限制。
但理想情况下,您应该能够更改配置。它是通过动态配置部分实现的。
这是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/内存。并根据需要扩展您的数据库。
https://stackoverflow.com/questions/65671986
复制相似问题