過負荷は、クラスターが処理できる以上の受信操作を受け取った場合に発生し、クラスターが完全に停止またはほぼ完全に停止時可能性があります。ロード シードは、インテリジェント ワークロード マネジメント(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 ラベルが含まれない場合は、操作が冪等であることを確認し、再試行する前に待機して、過負荷に寄与しないようにします。再試行ロジックで指数バックオフとJWTを使用します。
バックプレッシャー対応クライアント ライブラリのバージョン
バックプレッシャー対応ドライバーとその他のクライアントライブラリは、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:が必要: |
PyMongo | 4.18 |
Scala ドライバー | 5.12 |
Ruby | 2.26 |
Rust | 3.9 |
過負荷エラーの処理
バックプレッシャー対応のクライアントライブラリを使用する場合でも、アプリケーション内の過負荷エラーを処理します。バックプレッシャーを認識するクライアントライブラリは、再試行可能なというラベルの付いた操作を再試行しますが、アプリケーションは再試行を続ける時間と、クラスターが拒否し続ける操作を中止して負荷を分散するタイミングを決定します。バックプレッシャー対応のクライアントライブラリを使用していない場合は、エラー検出と再試行ロジックも自分で実装します。
再試行可能なというラベルの付いた過負荷エラーを処理するために、エラー検出と再試行ロジックを実装する方法の例については、次の手順を参照してください。
過負荷エラーを検出し、指数バックオフで再試行するためのユーティリティを実装するには、次の手順に従います。
安全な過負荷再試行に関するガイドライン
過負荷エラーが原因で失敗した操作を再試行する場合は、次のガイドラインに従って過負荷にならないようにし、再試行が成功する可能性を増やします。
再試行を制限する: 1操作ごとに最大 2 回の再試行を使用します。値を高くするとエラー率は減りますが、過負荷時にサーバーの負荷が増加しますが、再試行の頻度が少ないとサーバーの負荷は軽減されますが、エラー率は増加します。
選択的に適用します: このパターンは、レイテンシの影響を受けやすい操作またはビジネスに重要な操作でのみ使用してください。バックグラウンド ワークロードの場合、エラーをログ、より高いレベルで再試行し、遅延を増やします。