AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

ロードシェディングによる過負荷エラーの取り扱い

クラスターがリソースの処理能力を超える受信操作を受信すると、過負荷が発生します。これにより、クラスターに完全な停止時またはほぼ完全な停止時が発生する可能性があります。インテリジェント ワークロード マネジメント (IWM) の機能であるロードシェッディングは、Atlas が長時間の過負荷時に操作を拒否できるようにします。クラスターのロードシェディングを設定するには、インテリジェント ワークロード マネジメントの設定を参照してください。

Load Sheddingが操作を拒否すると、アプリケーションでその操作に対してSystemOverloadedErrorラベルが付いた新しいエラーが表示される場合があります。このエラーは、クラスターが過負荷状態で、操作を破棄していることを示しています。

バックプレッシャー対応のクライアントライブラリを使用している場合、クライアントライブラリはこれらのエラーを認識し、再試行しても安全なエラーを再試行します。アプリケーションは、再試行を継続する期間と負荷を軽減するタイミングを引き続き制御します。詳細については、「過負荷エラーの取り扱い」を参照してください。

SystemOverloadedError ラベル単独では、操作を安全に再試行できるという意味ではありません。オーバーロードエラーが再試行可能かどうかを判定するには、次のラベルを確認します。

  • RetryableError -操作は実行されず、安全に再試行できます

  • NoWritesPerformed - サーバーが書き込み (write) を実行する前に操作を拒否しました

次の例は、Load Sheddingが操作を拒否したときに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 Driver

2.9

Java Sync Driver

5.12

Java Reactive Streams ドライバー

5.12

Kotlin コルーチン ドライバー

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

バックプレッシャー対応のクライアントライブラリを使用している場合でも、アプリケーションで過負荷エラーを取り扱う必要があります。バックプレッシャー対応のクライアントライブラリは、再試行可能とラベル付けされた操作を再試行しますが、クラスターが拒否し続ける操作を破棄して負荷を軽減するタイミングや、再試行を継続する期間はアプリケーションが決定します。バックプレッシャー対応のクライアントライブラリを使用していない場合は、エラー検出と再試行のロジックも自分で実装してください。

再試行可能とラベル付けされた過負荷エラーを取り扱うために、指数バックオフを使用したエラー検出と再試行ロジックを実装する例については、次の手順を参照してください。

インターフェース

過負荷エラーを検出し、指数バックオフで再試行するためのユーティリティを実装するには、次の手順に従います。

過負荷エラーが原因で失敗した操作を再試行する場合は、過負荷を助長せず、再試行を成功させる可能性を高めるために、次のガイドラインに従ってください。

  • 再試行回数の制限: 1回の操作につき最大2回まで再試行してください。制限を高くするとエラー率は低下しますが、過負荷時のサーバー負荷は増加します。一方、再試行回数を減らすとサーバー負荷は軽減されますが、エラー率は増加します。

  • 選択的に適用します: このパターンは、レイテンシの影響を受けやすい操作またはビジネスに重要な操作でのみ使用してください。バックグラウンド ワークロードの場合、エラーをログ、より高いレベルで再試行し、遅延を増やします。