それはあなたが避けようとしていることに依存します。
本当に重要なサービスであるサービスの中断を回避しようとしている場合(「API呼び出しが適切に提供されない場合、人々は死ぬだろう」と考えています)、その大きな非効率性のために予算を組む必要があります。専用リソースを非常に過剰にプロビジョニングすることで発生します。そして、はい、それらは専用である必要があります。これのどれもがトラフィックの急上昇に対応することができず、複数のサービスの急上昇はそれ故に停止を引き起こします。
サービスがダウンしているというはるかに可能性の高いシナリオでは、クライアント側とサーバー側の両方から問題に対処できるので不便です。大量のトラフィックの問題を実際に解決することは論理的に不可能であることは注目に値しますが、トラフィックを処理しないと(リソースを消費します)、それが再試行であるかどうか、成功したが誤って処理された要求の再試行であるかどうかを知ることができないためです。クライアント(DDOSの場合など)によるものですが、影響を軽減することができます。
でクライアントコード上限と正常障害のための機構を有している賢明な再試行ロジックを書きます。そうすることで、失敗したリクエストの無限ループにユーザーを追い込まずに、エラーを出して、ユーザーが少しの間やったことをすべて試すように指示するだけです。
あなたのためにサーバー側のインフラ最も簡単な解決策は、スロットルにあります。リクエストに対するハード制限。特に、特定のユースケースに基づいて論理的にリクエストを分散できる場合(つまり、集中サービスでいくつかの難しい決定を行っている場合、地理的に離れたリクエストのブロックを開始して、スレッドがハングする可能性がありますか?サーバー側ですか、それとも、不可避であるがわずかな停止を均等に分散しますか?など)基本的に、意図的にゲートウェイから503を返すことは、リクエストを通過させて504を送信するよりもはるかに安価なことです。とにかく。基本的に、クライアントが現在提供できることに基づいて動作するようにクライアントを強制し、クライアントが適切に反応できるように正しい応答を提供します。