对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

处理限载引起的过载错误

当集群接收到的传入操作超过其资源可以进程时,就会发生过载,并且可能会导致集群完全或几乎完全中断。负载卸载是智能工作负载管理(IWM) 的一项功能,它允许Atlas在长时间过载期间拒绝操作。要为集群配置卸载,请参阅配置智能工作负载管理。

当减载拒绝某个操作时,您的应用程序可能会看到该操作的一个带有 SystemOverloadedError 标签的新错误。此错误表明您的集群过载并正在丢弃操作。

如果您使用反压感知客户端端库,则客户端库会识别这些错误并重试可以安全重试的错误。您的应用程序仍可控制继续重试的时长以及何时卸载负载。要学习;了解更多信息,请参阅处理过载错误。

SystemOverloadedError 标签本身并不平均值可以安全地重试操作。要确定重载错误是否可重试,请检查以下标签:

  • RetryableError - 操作未执行,可以安全地重试

  • NoWritesPerformed -服务器在执行任何写入之前拒绝了该操作

以下示例显示了当减载拒绝操作时Atlas返回的过载错误:

{
"ok": 0.0,
"errmsg": "Request rejected: ingress operation rate limit exceeded",
"code": 463,
"codeName": "IngressOperationRateLimitExceeded",
"errorLabels": ["SystemOverloadedError", "RetryableError", "NoWritesPerformed"]
}

重要

如果过载错误不包含 RetryableError 标签,请确保操作是幂等的,并在重试之前等待,以避免导致过载。在重试逻辑中使用指数退避和抖动。

反压感知型驱动程序和其他客户端端库会自动识别带有 SystemOverloadedError 标签的过载错误,并将其视为过载信号。如果错误具有导致重试的标签(包括 RetryableError 标签),则反压感知客户端端库会自动使用指数退避和抖动重试操作。

下表列出了具有反压感知功能的最早客户端库版本:

客户端库
最早的背压感知版本

C 驱动程序

2.5

C++ 驱动程序

4.6

.NET/C# 驱动程序

3.11

Go 驱动程序

2.9

Java (Sync) 驱动程序

5.12

Java Reactive Streams 驱动程序

5.12

Kotlin Coroutine 驱动程序

5.12

Kotlin Sync 驱动程序

5.12

Node.js 驱动程序

7.6

PHP库

2.5;需要 mongodb PHP扩展 (PHPC) 2.5.0+

pymongo

4.18

Scala 驱动程序

5.12

Ruby

2.26

Rust

3.9

即使您使用反压感知客户端端库,也能处理应用程序中的过载错误。具有反压感知能力的客户端端库会重试标记为可重试的操作,但您的应用程序会决定继续重试的时长,以及何时通过放弃集群继续拒绝的操作来卸载负载。如果您使用的不是反压感知客户端端库,还需自行实现错误检测和重试逻辑。

有关如何实现错误检测和重试逻辑,以处理标记为可重试的过载错误,请参阅以下过程的示例:

使用以下过程实现实用程序,以检测过载错误并使用指数退避重试。

重试由于过载错误而失败的操作时,请遵循以下准则,避免导致过载并增加重试成功的机会:

  • 限制重试次数:每个操作最多重试两次。较高的限制可降低错误率,但会增加过载期间的服务器负载,而较少的重试尝试可降低服务器负载,但会增加错误率。

  • 有选择地应用:仅将此模式用于对延迟敏感或业务关键型操作。对于背景工作负载,日志错误并在更高级别重试,延迟时间更长。