サーキットブレーカー

プラットフォームを過度の負荷から保護してプラットフォームの安定性を確保するために、カスタム API には サーキットブレーカー のメカニズムが含まれています。この機能は、特定のエラーしきい値を超えた場合に API リクエストをブロックします。

サーキットブレーカーは、登録されているすべてのエンドポイントに対して構成され、そのエンドポイントへの各受信リクエストはサーキットブレーカーを通過します。サーキットブレーカーがどのように動作するかは、対応するエンドポイントでの最近のスクリプト実行によって定義される内部状態によって異なります。サーキットブレーカーは、closedopenhalf-open の 3 つの状態のいずれかになります。

サーキットブレーカーのデフォルトの状態は closed で、リクエストが実装スクリプトにパススルーできることを意味します。

実装スクリプトの実行でエラーが発生した場合は、このエラーが追跡されます。エラー率がしきい値の ** 50%** を超えると、このプロセスがトリガーされます。

  1. 内部状態が open に変わります。この変更がログに記録されます。
  2. ** 60 ** 秒間、障害が発生したエンドポイントへの呼び出しは、エラータイプ custom-api-circuit-breaker-error で HTTP ステータスコード 503 - Service Unavailable を返します。
  3. 60 秒後、内部状態は half-open に変わります。この変更がログに記録されます。
  4. サーキットブレーカーは、障害が発生したエンドポイントへの次の 10 件の呼び出しを追跡します。そのうちの 5 つ以上が失敗した場合は、手順 1 に戻ります。
  5. 内部状態が closed に変わり、エンドポイントのブロックが解除されます。サーキットブレーカーは、このエンドポイントへのリクエストの追跡を続行します。この変更がログに記録されます。

closed の状態では、サーキットブレーカーはエラー率を計算するために、前の 100 件のリクエストを評価します。これは、サーキットブレーカーが開いたときに少なくとも 50 件が失敗していたことを意味します。

カスタム API リクエストでタイプが custom-api-internal-server-error または custom-api-circuit-breaker-error のエラーが返された場合は、Log Center を使用して原因を調査します。

  1. Business Manager で、管理 > サイトの開発 > 開発セットアップの順に移動します。
  2. ログファイル セクションで、Log Center をクリックします。
  3. 「Day of Year (年間通算日)」を選択します。
  4. LCQL フィールドに「CustomApiCircuitBreaker」と入力します。
  5. クエリのヒットで、CustomApiInvocationException エントリを見つけ、そのエントリの Stack Trace UUID (スタックトレース UUID) リンクをクリックします。
  6. スタックトレースで、Caused by (原因) セクションを見つけます。これには、障害の原因に関する情報が含まれている可能性があります。以下のような原因が考えられます。
  • レスポンスを返さないリモート呼び出しがスクリプトに含まれているため、スクリプトの実行がタイムアウトします。この場合は、代わりに非同期呼び出しを行ってみてください。
  • スクリプトにエラーが含まれています。コードを修正し、エラー処理の対策を追加することを考慮してください。