当前位置: 首页 > 知识库问答 >
问题:

如何在Cadence中增加持久性QPS限制

伯向晨
2023-03-14

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

Persistence Max QPS Reached

Persistence Max QPS Reached for List Operations

最好的解决方法是什么?

共有1个答案

微生曾琪
2023-03-14

它们用于保护数据库免受Cadence服务的过载。

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

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

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

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

有不同的配置控制限制:

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

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

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

持久性最大QPS是单个节点的本地限制,而 XXX.持久性全球最大QPS是所有节点的全局限制。持久性全局最大 QPS 在设置为大于零时首选。

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

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

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

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

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

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

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

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

这是动态配置格式。

如果您使用舵图,动态配置在此定义。举个例子,

frontend.persistenceGlobalMaxQPS:
  - value: 1000

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

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

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

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

 类似资料:
  • 问题内容: 关闭redis服务器后,使用set存储的值被破坏,在这里我找到了使用持久性存储的方法,有人帮助我,如何使用javascript实现它? 我想将来自客户端的一些值存储在redis db中,并且必须在其他客户端中使用该值。 问题答案: 您需要配置Redis服务器以支持持久性机制。此配置存储在文件中,该文件在redis-server命令行上作为参数给出。 这是Redis 2.4的默认文件:h

  • 问题内容: 我正在使用 现在,由于Cookie无法实现可序列化,因此我无法序列化该List。 编辑:(指定了我的目标,不仅是问题) 我的目标是将DefaultHttpClient与持久性cookie一起使用。 有经验的人可以带领我走上正确的道路吗?我可能还没有发现另一种最佳实践… 问题答案: 创建您自己的类,然后在构造过程中复制属性。像这样: 确保所有属性本身也可序列化。除了基元之外,该类本身例如

  • 我正在使用android的房间持久性库,如果有人能帮助我使用外键,如何通过使用外键获取数据,我将不胜感激。

  • 我有一个Kubernetes pod(让我们称之为POD-A),我希望它使用某个配置文件来使用k8s API执行一些操作。配置文件将是一个YAML或JSON,由POD中的应用程序解析。 配置文件由云上的应用服务器托管,它的最新版本可以根据触发器提取。配置文件包含k8s集群中所有部署的配置细节,并将用于使用POD-A中的k8s API更新部署。 现在我想的是将这个配置文件保存在配置映射中,每次拉出一

  • 我已命中错误 在尝试代码时: 在我的laravel项目中。 我已尝试按照链接中的说明进行操作,但无法增加内存限制,因为在我的/etc/目录中找不到php.ini文件。我只能找到php.ini.default,我已经将那里的内存限制增加到900MB。我已重新启动apache以反映新配置,但限制仍然显示为128MB,这是我运行命令时始终显示的: 我怎样才能把这个修好?我的php版本是7.3.9 我还必

  • 问题内容: 我对Java堆内存有一个问题。我用Java开发了一个客户端服务器应用程序,该应用程序作为Windows服务运行,需要超过512MB的内存。我有2GB的RAM,但是运行应用程序时会引发异常 内存不足错误:java堆空间 但是我已经在Java控制面板中设置了堆大小(最大512MB),但仍然收到相同的错误。我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,因此如何增加默