Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/
数据库手册
/ /

配置入口连接建立速率限制器

此操作步骤介绍如何使用MongoDB中的 ingressConnectionEstablishmentRateLimiterEnabled 参数配置速率限制。速率限制器有助于保护您的部署免受可能影响系统稳定性和性能的连接风暴的影响。

在开始此过程之前,请确保满足以下要求:

  • 您拥有MongoDB 部署的管理权限

  • 您了解系统的连接负载模式和要求

  • 您了解驱动程序的 connectTimeoutMS 设置

1

要开始使用速率限制器,启用速率限制器:ingressConnectionEstablishmentRateLimiterEnabledtrue

db.adminCommand( {
setParameter: 1,
ingressConnectionEstablishmentRateLimiterEnabled: true
} )
2

ingressConnectionEstablishmentRatePerSec 设置为集群在不对吞吐量产生负面影响的吞吐量下可以处理的最大速率。这应该是一个固定数字,不会因其他工作负载动态而变化。

db.adminCommand( {
setParameter: 1,
ingressConnectionEstablishmentRatePerSec: 20
} )
3

根据以下公式设置ingressConnectionEstablishmentMaxQueueDepth

maxQueueDepth < (establishmentRatePerSec / 1000) * (connectTimeoutMs - ((averageTimeToCompletedHelloMicros-averageTimeQueuedMicros)*1000))

此公式可确保:

  • 在驾驶员放弃连接尝试之后,新的连接尝试不会保留在队列中。

  • 大多数 hello+auth 尝试都会成功,而不是由于超时错误而失败。

averageTimeQueuedMicros 指标可以帮助调整 ingressConnectionEstablishmentMaxQueueDepth,因为它大约等于 (maxQueueDepth / establishRatePerSec) * 1e6

重要

调整队列大小时,优先考虑较长的队列,而不是较短的队列。与连接在队列中停留时间过长和超时相比,驱动程序由于关闭连接而清除连接池的风险更大。

4

如果发现连接失败,请降低驱动程序的maxPoolSizemaxConnecting设置。如果减少这些设置,驾驶员会重复使用连接,而不是在延迟增加期间打开更多与服务器的连接,这可能会导致连接风暴。

注意

如果减少 maxPoolSizemaxConnecting,查询可能会在驾驶员层等待连接返回到池中花费更长的时间。减少这些设置有助于保持可用性,但费用在负载峰值期间增加延迟。

监控以下指标,确保正确配置速率限制器:

如果您发现被拒绝的连接数量不断增加,请考虑:

  1. ingressConnectionEstablishmentRatePerSec如果集群似乎有足够的 CPU 资源来处理此负载,则增加 。

  2. ingressConnectionEstablishmentMaxQueueDepth根据公式调整 。

  3. 查看驾驶员连接池设置。

在此页面上