HTTP 504 ゲートウェイタイムアウトの説明: 診断と修正

HTTP 504 ゲートウェイタイムアウトの説明

Scrapeless Universal Scraping API は、管理されたウェブアンロッカーを通じて公のウェブページを取得し、HTTP エラーを正確に分類する必要のあるデータワークフローのためにページコンテンツを返します。

TL;DR

  • 504 は、ゲートウェイが適時な上流からの応答を受け取らなかったことを意味します。 仲介者は、リクエストを完了するために必要な別のサーバーを待っていて、その時間の予算が切れました。
  • 遅いコンポーネントは通常、ゲートウェイの背後にあります。 アプリケーション作業、データベースクエリ、接続プール、DNS、ネットワークパス、および外部 API はすべて、予算を消費する可能性があります。
  • すべてのレイヤーには独自の時計があります。 CDN、ロードバランサー、リバースプロキシ、アプリケーションクライアント、データベース制限は、実際のボトルネックを隠す順序で期限切れになる可能性があります。
  • より大きなタイムアウトは根本的な修復ではありません。 これは作業が理解された後に適切です。ただし、リソースを長く保持し、障害を外部に移動させる可能性もあります。
  • コレクターは、ステータスとコンテンツを検証する必要があります。 完全に見えるゲートウェイページは、ターゲットデータではなく、依然として利用できない結果です。

504 はサーバー間のタイミング障害です

504 は、仲介者がその背後のサーバーを待つのに時間を費やした後に現れます。ゲートウェイはブラウザのリクエストを受け入れてルーティングできますが、上流の作業はゲートウェイの設定されたウィンドウ内で必要な応答を生成しませんでした。したがって、経過時間は単なる不便ではなく証拠です。

現代のリクエストパスには、いくつかのタイマーが含まれています。CDNはオリジンを待ち、ロードバランサーはプロキシを待ち、プロキシはアプリケーションを待ち、アプリケーションはデータベースを待ち、データベースはストレージまたはロックを待ちます。最初に可視化されるタイマーの期限切れが、より深いコンポーネントが忙しいときも公の症状を生み出します。

正しい修正は、そのタイムラインを再構築し、時間がどこに費やされたかを見つけることです。すべての制限を引き上げると、接続の占有率が増加し、容量の問題が隠れる可能性があります。有用な調査は、各ホップを測定し、成功したリクエストと失敗したリクエストを比較し、長時間の作業が同期ページリクエストにまったく含まれているかどうかを確認します。

HTTP 504 ゲートウェイタイムアウトが意味すること

HTTP 504 ゲートウェイタイムアウトは、ゲートウェイまたはプロキシとして機能するサーバーが、リクエストを完了するために必要な上流サーバーからの適時な応答を受け取らなかったことを意味します。 HTTP セマンティクス標準 は、クライアントまたはオリジンだけでなく、仲介者境界でのステータスを定義します。

上流は到達可能でありながら、遅すぎて 504 を生成することがあります。また、ゲートウェイの待機ウィンドウを消費する方法で到達不可能な場合もあります。公のステータスは、遅延が計算、ロック、依存関係、DNS、パケットロス、または不一致なタイマーから来たのかを伝えません。トレースとメトリクスがその詳細を提供する必要があります。

ゲートウェイの時計が切れるところ

各仲介者は、リクエストを転送するか、次の応答イベントを待つときにタイマーを開始します。いくつかのタイマーは接続確立をカバーし、他のタイマーは最初の応答バイト、アイドルギャップ、または全体のトランザクションをカバーします。タイマーの名前付けは重要です。同じ公の 504 は異なるフェーズから来る可能性があるからです。

たとえば、エッジがその背後のリバースプロキシよりも少ない時間を許可したとします。エッジは 504 を返すことができ、プロキシとアプリケーションは引き続き作業を続けることができます。アプリケーションログには、クライアントがその結果を受け取らなかったにもかかわらず、後で成功が表示されることがあります。タイムスタンプが揃っていなければ、これは単なる外部タイマーの期限切れというよりも矛盾しているように見えます。

長い同期操作は、ソケット、ワーカー、メモリ、接続プールのスロットを保持します。いくつかの遅いリクエストは無関係なトラフィックの容量を減らし、さらに待機を引き起こす可能性があります。良い設計は同期作業を制限し、高価なクエリを効率的にし、実際に長い作業を明示的なジョブ状態を持つ非同期ワークフローに移動させます。

レイヤー何を検査するかなぜそれが重要なのか
DNS と接続解決時間、ルート、ハンドシェイクの時間到達可能性の遅延をアプリケーション作業から分離します。
ゲートウェイ待機接続、最初のバイト、アイドル、合計制限504 を生成した正確な時計の名前を付けます。
アプリケーションキュー時間、ハンドラー時間、発信呼び出し作業が実行される前に待機したかどうかを示します。
データと依存関係クエリプラン、ロック、プール待機、リモートレイテンシ最も深い時間の消費者を見つけます。

なぜ上流の作業が締切を逃すのか

504 は経過時間によって生成されますが、その原因は計算、競合、ネットワーク遅延、依存関係の動作、またはタイマーの順序付けである可能性があります。

遅いデータベース作業

フルスキャン、インデックスの欠如、ブロックされたロック、または過負荷のストレージは、アプリケーションがゲートウェイの応答ウィンドウが閉じるまで待機し続ける原因となります。

接続プール競合

ハンドラーはビジネスロジックを実行するのではなく、データベースやHTTPクライアント接続を待っている時間が多くなる場合があります。プール待機メトリクスは、この隠れたキューを明らかにします。

遅い外部依存関係

支払い、身分、検索、またはコンテンツサービスは、重要な経路を延長することがあります。到着するリクエストの予算よりも大きな制限を持つダウンストリーム呼び出しは、無駄な作業を生み出します。

アプリケーションキューイング

ワーカーは健康であるが、完全に占有されている。新しいリクエストはキューで待機しており、外部ゲートウェイが期限切れになる前に実際の実行のための時間はほとんどない。

ネットワークの損失またはルーティング遅延

プライベートネットワーク、地域、またはセキュリティデバイス間でパケットがドロップされると、両方のエンドポイントが稼働している場合でも、接続または応答ウィンドウを消費する可能性があります。

順序が誤った時間予算

外側のレイヤーは、内側のレイヤーがする前に待つのをやめることができます。クライアントは504を表示しますが、アプリケーションは後に受信者がもはや存在しない成功の完了を記録します。

リクエストのレイテンシータイムラインを作成する

原因に到達する最も迅速なルートは、クライアント到着から最も深い依存関係までのタイムスタンプ付きのスパンであり、無関係な構成変更のリストではありません。

  1. 表示される期間を測定します。 リクエストが504になるまでの時間を記録し、その期間が安定した閾値の周りにクラスタリングされているかどうかを確認します。これは、設定されたタイマーを特定することがよくあります。
  2. エミッティングゲートウェイを特定します。 レスポンスヘッダー、ブランディング、リクエストID、およびエッジログを使用して、上流のクロックが期限切れになったレイヤーを特定します。
  3. タイマーフェイズに名前を付けてください。 接続の失敗、最初のバイトの失敗、アイドル、または総時間のいずれかを判定してください。これらのフェーズは異なる原因を指しています。
  4. トレースキューと実行時間を別々に追跡します。 長いキューの後に迅速に実行されるハンドラーは、容量作業が必要であり、一方で長い実行時間を持つハンドラーは、コードまたは依存関係の分析が必要です。
  5. 依存時間を分解する。 データベースプールの待機時間、クエリの持続時間、ロック待機時間、DNS、接続確立、TLS、およびリモートサービス時間を別々のスパンとして測定します。
  6. 成功したリクエストを比較する。 ルート、ペイロード、キャッシュ状態、テナント、リージョン、またはクエリプランの違いは、しばしば高価なブランチを隔離します。
  7. 設定されたすべての制限をマップします。 ドキュメントクライアント、エッジ、ロードバランサー、プロキシ、アプリケーションクライアント、およびデータベースの時間の予算は、内部作業がその呼び出し元がリスニングを停止する前に終了するようにします。

標準は HTTPセマンティクス、ゲートウェイ対オリジンの説明の中で MDNの504リファレンス、そしてプロバイダーのトラブルシューティングが Cloudflareの502および504ガイダンス すべての場所で504を期限切れの上流待機に配置します。

訪問者が一度に確認できること

訪問者はローカルパスを除外できますが、元の操作がゲートウェイの背後でまだ実行されている可能性がある場合、繰り返しの送信は危険です。

  • サービスのステータスと範囲を確認してください。 別のページまたは読み取り専用エンドポイントを比較して、高価なアクションの1つまたはサービス全体が影響を受けているかどうかを確認してください。
  • セカンドネットワークは診断目的のみ使用してください。 1つのネットワークが機能している場合、VPN、企業プロキシ、またはルートが遅延を引き起こしている可能性があります。
  • 重複した取引を避けてください。 購入、アップロード、および書き込みの場合、同じアクションを再度送信する前にサーバーの状態を確認してください。
  • 申し訳ありませんが、そのリクエストを処理することはできません。 期間はタイマーを表示できますが、相関キーはクライアントイベントを分散トレースに接続します。

限界を引き上げる前にクリティカルパスを短縮する

オペレーターは遅い作業を減らすか削除し、その後、意図された同期契約を反映した時間予算を設定するべきです。

測定されたボトルネックを最初に最適化します。クエリプランを改善し、ロック範囲を減らし、ペイロードサイズを制限し、不必要な直列依存呼び出しを削除し、健全なプール容量を復元します。キュー時間が支配的な場合は、フロントエンドプロセス数だけでなく、制約された依存関係に注意を払いながら同時実行性と需要制御を調整します。

インタラクティブなリクエストに正当な理由でより長い時間がかかる作業については、ジョブ識別子を返し、非同期パターンを通じて完了状態を公開してください。これによりゲートウェイ接続が解放され、クライアントに明確な結果が提供され、曖昧なタイムアウトページの代わりとなります。

クリティカルパスが理解された後、内側から外側に向けて制限を調整します。下流の呼び出しは、アプリケーション予算内で終了し、アプリケーションはプロキシ予算内で、プロキシはエッジ予算内で終了する必要があります。応答転送とクリーンアップのために十分なマージンを残し、外側のレイヤーが完了した作業を放棄しないようにします。

504を他のタイムアウト信号と区別する

タイムアウト関連のメッセージは、どの参加者が待っていて、どの境界が時間切れになったかを特定します。

信号考えられる意味次の所有者
504ゲートウェイタイムアウトゲートウェイは上流からの応答を待つのに時間がかかりすぎました上流のレイテンシー所有者
408リクエストタイムアウトサーバーはクライアントのリクエストを待つのに時間がかかりすぎましたクライアントのアップロードまたは接続所有者
502 Bad Gatewayゲートウェイは無効な上流の応答を受信しましたプロトコル、ルート、または上流の所有者
クライアント側のタイムアウトブラウザまたはSDKは自分の制限で待機を停止しましたクライアント設定またはエンドツーエンドのレイテンシー所有者

タイムアウトページからデータの入力を防ぐ

収集システムは、取得が失敗したときに経過時間と応答生成レイヤーを記録する必要があります。 ScrapelessユニバーサルスクレイピングAPI パブリックページのために管理された取得レイヤーを提供しますが、データセットの品質はゲートウェイページやその他のターゲット外のコンテンツを拒否することに依存します。

要求されたURLと最終URL、ステータス、期間、コンテンツタイプ、タイトル、およびボディ署名をキャプチャします。応答が504である場合、運用分析のためにイベントを保持し、抽出からボディを除外します。ゲートウェイページは見出し、リンク、および洗練されたCSSを含むことがあり、そうでなければ素朴なパーサーを通過します。

監視頻度を制限し、タイムアウト後の重複書き込みアクションを避けてください。公開データアクセスはサイトの利用規約および適用法に従うべきであり、可用性エラーはトラフィックを増加させる許可として扱われるべきではありません。

504は待機境界を名付けます

HTTP 504ゲートウェイタイムアウトは、中間者の上流待機が期限切れになったことを示します。遅いクエリや依存関係を特定することはありませんが、タイミング契約が失敗した境界を名付けます。

経過したしきい値を測定し、発生ゲートウェイを特定し、キュー時間と実行時間を分離し、すべての内的依存関係をマッピングします。制限を変更する前にボトルネックを修正し、制限を調整して呼び出し元が制御された順序で作業を停止するようにします。

HTTP障害の分類を容易にする準備はできましたか?

HTTP 504に関する証拠を記録する公開ウェブ取得ワークフローを構築し、すべての失敗した取得を同じイベントとして扱うのではなくします。

今すぐサインアップして、 $5の無料クレジットを受け取りますクレジットカードは不要です.

あなたの$5クレジットを取得 →

FAQ

504は遅いインターネット接続によって引き起こされますか?

ローカルネットワークは、1人のユーザーまたはパスに影響を与える場合に寄与することがありますが、504は上流サーバーを待つのに時間がかかりすぎたゲートウェイによって生成されます。多くのユーザーがこれを見た場合、サービスの上流レイテンシーとタイマー設定が優先されるべきです。

504と408の違いは何ですか?

504はゲートウェイが上流サーバーを待つのに時間がかかりすぎたことを意味する一方で、408はサーバーがクライアントがリクエストを完了するのを待つのに時間がかかりすぎたことを意味します。待機している参加者と遅延の方向は異なります。

プロキシのタイムアウトを増やすことで504エラーは修正されますか?

プロキシのタイムアウトを増加させることで、既知の合法的な作業に対応できますが、遅いクエリ、ロックのブロック、飽和プール、または利用できない依存関係を修復することはありません。また、リソースを長く占有し続ける可能性があるため、最初にクリティカルパスを測定してください。

なぜユーザーが504を見た後、バックエンドが成功を記録するのですか?

外部ゲートウェイはアプリケーションが終了する前に待機を停止できます。その後バックエンドは成功を完了し記録しますが、クライアント接続はすでに切断されており、これは時間予算の不整合や同期パスの作業が長すぎることを示しています。

スクレイパーは504ページをどのように扱うべきですか?

スクレイパーは504を取得の失敗として保存し、そのボディをターゲット抽出から除外する必要があります。最終URL、期間、ヘッダー、リクエストID、および小さなコンテンツフィンガープリンタを記録し、イベントを診断できるようにしてデータセットを汚染しないようにします。

参考文献