機能

タイムアウトプロファイル

単一のプロファイルで9つの異なるタイムアウト値を管理し、Web、API、WebSocket、ロングポール、アップロードトラフィックのために適切な待機動作をプールごとに適用します。

TR7 タイムアウトプロファイルはタイムアウト管理を単一のアイドルタイム設定に縮小しません。HTTP keepalive、HTTP request、connect、server、client、queue、tunnel、clientFIN、serverFIN — 9つの独立したタイムアウト軸 — が単一のプロファイルオブジェクトにグループ化されています。 各タイムアウトは異なる本番問題を制御します。APIトラフィックは短いconnectとserverタイムアウトから恩恵を受け、ロングポーリングエンドポイントはより大きなserverTimeoutを必要とします。WebSocket接続はtunnelTimeoutをHTTP keepaliveから独立して管理する必要があります;そうしないと長命の接続が予期せずドロップします。 オペレーターは独自の名前付きプロファイル — web、api、websocket、longpoll、upload、defensive — を作成し、関連するプールにバインドします。プロファイルが変更されると、そのプロファイルにバインドされたすべてのプールが同じタイムアウト標準を自動的に継承します。 結果:TR7はタイムアウト管理を散在したプールごとのオーバーライドから解放し、接続の生存期間、スロークライアント保護、バックエンド待機時間、キュー動作、WebSocketの安定性を単一のプロファイルモデルで管理可能にします。

9
単一プロファイル内の独立したタイムアウト軸
60,000
設定可能な秒の範囲(16時間以上)
0
組み込みプリセット — すべてのプロファイルはオペレーターが定義

設定ミスのタイムアウトは本番でサイレントな障害、ゴースト切断、不必要な待機を生み出します。

タイムアウトが正しく設定されていない場合、失敗が常に明らかではありません。serverTimeoutが30秒に固定されている場合、ロングポーリングリクエストが504を返します。connectTimeoutが長すぎると、ダウンしているバックエンドに接続しようとするクライアントが再試行前に数秒間停止し、再試行のカスケードがトリガーされます。tunnelTimeoutが短すぎると、WebSocket接続が理由なくドロップし、ユーザーがゴースト切断を経験します。

ほとんどのシステムはタイムアウト設定をフラットなリストとして提示します。オペレーターはどの値がHTTPリクエストフェーズを制御し、どれがバックエンドレスポンス時間を制御し、どれがWebSocketトンネルに適用され、どれがFIN待機に影響するかを明確に識別できません。その結果、すべての値が高く設定されすぎて接続リークが発生するか、すべて低く設定されて正当なユーザートラフィックが切断されます。

WebSocketと長命の接続はこの問題が最も顕著になる場所です。HTTP keepaliveは30〜120秒の範囲で意味がありますが、WebSocketセッションは数時間オープンのままである可能性があります。tunnelTimeoutが独立して管理されていなければ、リアルタイムアプリケーションは通常のHTTPアイドル動作に制約されます。

TCPのティアダウン動作も重要です。clientFINとserverFINが制御されていない場合、半閉じた接続がファイルディスクリプタプールを使い果たす可能性があります。パブリックに面したサービスではこれがスロークローズ攻撃パターンと組み合わさってリソース枯渇問題になります。

TR7 タイムアウトプロファイルは9つの独立したタイムアウト軸を単一の名前付きプロファイルに収集し、すべてのプールがトラフィックタイプに応じた正しい待機、ドレイン、接続クローズ動作を適用することを保証します。

アプローチ

TR7はタイムアウトをプールにわたって個別の設定を散在させるのではなく、再利用可能な名前付きプロファイルを通じて管理します。

名前付きプロファイルを作成してプールにバインド

オペレーターはプロファイル名を定義し、その中に9つのタイムアウト値をグループ化します。同じプロファイルを複数のプールにバインドでき、Web、API、またはWebSocketプールに一貫した共有タイムアウト標準を提供します。

HTTP、TCP、queue、tunnel、FIN軸を分離して管理

HTTP request、keepalive、connect、server、client、queue、tunnel、clientFIN、serverFINはそれぞれ独立したフィールドとして管理されます。すべてのフィールドは独自のトラフィックセマンティクスに従って調整され、あるタイムアウト値が別のものの代替として使用されることはありません。

WebSocketトンネルタイムアウトがHTTP keepaliveから独立

WebSocketやHTTP CONNECTなどの長命の接続はtunnelTimeoutで別々に管理されます。チャット、ライブストリーミング、イベントストリームの接続はHTTPアイドルタイマーに制約されず、不必要にクローズされません。

clientFINとserverFINが半閉じた接続を制限

TCP閉じる信号後に接続が保持される時間はクライアントとサーバーサイドで個別に設定されます。これによりFIN-WAIT式のリソース消費リスクが軽減され、パブリックに面したサービスでより積極的なドレインポリシーが可能になります。

機能

タイムアウトプロファイルにより、オペレーターはすべてのトラフィックタイプに合わせて9つの独立したフィールドにわたって接続の生存期間と待機動作を精密に調整できます。

httpKeepaliveTimeoutがアイドルHTTP接続のオープン期間を制御

httpKeepaliveTimeoutはHTTP/1.1 keep-alive接続がリクエスト間でどのくらいオープンを維持するかを定義します。デフォルトは120秒です。高すぎるとアイドル接続がリソースを浪費し、低すぎると再接続コストが増加します。バックエンドのアイドル接続バジェットに合わせて調整されます。

httpRequestTimeoutがスローヘッダー配信を制限してslowlorisリスクを軽減

httpRequestTimeoutはクライアントがリクエストラインとヘッダーを完了するために許可される時間です。デフォルトは30秒です。非常にゆっくりヘッダーを送信するクライアントはこの閾値で切断できます。パブリックに面したサービスでのslowlorisスタイルのパターンに対する重要な防御ポイントです。

connectTimeoutがバックエンドへのTCP接続待機時間を制御

connectTimeoutはTR7がバックエンドへのTCP接続を確立する際の待機時間を定義します。デフォルトは20秒です。長すぎると、ダウンまたは到達不能なバックエンドがクライアントを不必要に停止させます。迅速な障害レスポンスを必要とするAPIシナリオではより低いconnectTimeoutが有利です。

serverTimeoutがバックエンドからのレスポンス待機時間を設定

serverTimeoutはバックエンドがレスポンスを生成するために許可される時間です。デフォルトは90秒です。高速APIでは低く設定でき、重いレポーティング、ロングポーリング、スロークエリのエンドポイントでは上げられます。誤って低い値を設定すると、動作しているが遅いリクエストが504を受け取ります。

clientTimeoutがクライアントからデータを待つ動作を制御

clientTimeoutはクライアントからデータが届くまでの待機時間です。リクエストボディのアップロード、パイプライン処理されたリクエスト、スロークライアントシナリオに適用されます。デフォルトは90秒です。大きなファイルのアップロードでは上げられ、パブリックAPIでのスロークライアントリスクを軽減するために下げられます。

queueTimeoutがプールがキャパシティを超えた際のクライアントの待機時間を制限

queueTimeoutは接続キャパシティが満杯の場合にプールキューでリクエストが待機する時間を定義します。デフォルトは60秒です。超過するとリクエストはエラーで返され、クライアントが無限に保留されません。この値はmaxconn制限とアプリケーションSLAと共に考慮すべきです。

tunnelTimeoutがWebSocketとHTTPトンネル接続を別々に管理

tunnelTimeoutはWebSocketとHTTP CONNECTトンネル接続のアイドル時間を定義します。デフォルトは120秒です;リアルタイムアプリケーションではこれを3600秒以上に上げられます。このタイムアウトはHTTP keepaliveから独立しているため、長命の接続がWebトラフィック設定に制約されません。チャット、ライブ通知、ストリームアプリケーションに重要です。

clientFINがクライアントクローズ後に接続が保持される時間を制御

clientFINはクライアントからのFIN信号後に接続が保持される時間を設定します。デフォルトは3秒です。低い値により半閉じた接続がファイルディスクリプタを消費することを防ぎます。パブリックに面したサービスでFIN-WAITのリソース圧力を軽減するために特に重要です。

serverFINがバックエンドクローズ時のグレースフルドレイン時間を管理

serverFINはバックエンドからのFIN信号後の接続動作を制限します。デフォルトは6秒です。serverFINをclientFINより高く保つことでバックエンドシャットダウン中のグレースフルドレインのより多くの許容度が得られます。この設定はトラフィックの多いバックエンドプールでの接続クローズ品質に直接影響します。

同じタイムアウトプロファイルを複数のプールにバインドできる

プロファイル-プールバインディングモデルにより、同じタイムアウト標準を複数のプールで共有できます。すべてのWebプールがwebプロファイルに、APIプールがapiプロファイルに、WebSocketプールがwebsocketプロファイルに向けられます。プロファイルへの単一の変更によりバインドされたすべてのプールのタイムアウト動作が集中的に更新され、設定の重複とドリフトが削減されます。

ネイティブ生成パイプラインがプロファイルフィールドをランタイムタイムアウトディレクティブに変換

9つのプロファイルフィールドは対応するランタイムタイムアウトディレクティブ — connect、server、client、queue、tunnel、http-keep-alive、http-request、client-fin、server-fin — に変換されます。オペレーターは個々のディレクティブを書く代わりにプロファイルを通じて値を管理し、GUIとランタイム動作間の一貫したブリッジを作成します。

ヘルスチェックタイムアウトはトラフィックプロファイルの外の独立した制御として残る

ヘルスチェックのタイミングは独自のタイムアウトフィールドで管理され、トラフィックタイムアウトプロファイルから独立しています。この分離は重要です:プローブのレイテンシと本番トラフィックの待機動作が混在しません。バックエンドのヘルスチェックは短く保ちながら、実際のエンドポイントのserverTimeoutを長くでき、サービスヘルスとユーザートラフィックを異なるセマンティクスで監視できます。

運用の深み

タイムアウトプロファイルはその値の範囲、デフォルト、小数サポート、トンネルセマンティクス、FINバランス、プールバインディングモデルと共に運用されます。

01

値の範囲

タイムアウトフィールドは0から60,000秒まで設定可能です。この範囲はサブ秒の防御設定から16時間を超えるセッションまでを網羅し、ロングポールと永続接続の要件に十分な柔軟性を提供します。

02

小数サポート

httpKeepaliveTimeoutは小数値を受け入れます。0.5秒などの値により、より精密なアイドルkeepalive動作が定義できます。残りの8つのタイムアウトフィールドは整数秒として扱われます。

03

本番に安全なデフォルト

デフォルト値はほとんどのWebおよびAPIトラフィックに適した安全な出発点を提供します。httpKeepaliveTimeout 120、httpRequestTimeout 30、connectTimeout 20、serverTimeout 90、clientTimeout 90、queueTimeout 60、tunnelTimeout 120、clientFIN 3、serverFIN 6秒が適切なベースラインです。特殊なトラフィックタイプに対しては、これらの値をプロファイルごとに調整すべきです。

04

トンネルセマンティクス

tunnelTimeoutはWebSocketやHTTP CONNECTのようなトンネル接続に適用されます。HTTPリクエストまたはkeepaliveタイムアウトと同じではありません。長命の接続で低すぎると設定すると切断の問題が生じます。

05

FINバランス

デフォルトモデルでは、serverFINはclientFINより許容度が高いです。これによりバックエンドシャットダウン中のグレースフルドレインのためのより多くの余地が生まれます。パブリックに面したサービスでは、両方の値をより積極的に設定して半閉じた接続のリソース消費を削減できます。

06

プリセットの代わりに名前付きプロファイル

TR7は組み込みのプリセットを課しません。オペレーターは自分のシナリオに合わせた名前付きプロファイルを作成します — web、api、websocket、longpoll、uploadなどの名前が組織の標準に合わせて定義できます。サービスごとの個別オーバーライドよりも適切なプロファイルにプールをバインドすることが推奨されます。

利用シナリオ

標準Webアプリケーション向けのバランスの取れたタイムアウトプロファイル

Webトラフィック用にデフォルト値に近いwebプロファイルを作成できます。Keepaliveがユーザーエクスペリエンスを維持しながら、requestとFINタイムアウト値がスローまたは半閉じた接続を制限します。同じプロファイルを複数のWebプールにバインドできます。

リアルタイムチャット向けの長いWebSocketトンネル期間

チャットアプリケーションはWebSocket接続が頻繁にドロップせずにオープンを維持する必要があります。websocketプロファイル内でtunnelTimeoutを3600秒などの長い値に設定し、他のHTTPタイムアウトはデフォルトに保てます。長命の接続はHTTP keepaliveウィンドウに制約されなくなります。

ロングポーリングAPI向けのserverTimeout引き上げ

ロングポーリングエンドポイントはバックエンドがレスポンスするまで数分間待機することがあります。longpollプロファイルでserverTimeoutを300秒に設定することで5分の待機ウィンドウをサポートします。これがないと標準のAPIタイムアウトがリクエストを早期に切断します。

大きなファイルアップロード向けのclientTimeout拡張

大きなPOSTボディやファイルアップロードトラフィック中はクライアントからのデータ着信が遅い場合があります。uploadプロファイルでclientTimeoutと必要に応じてhttpRequestTimeoutを600秒に上げられます。これにより正当だが遅いアップロード操作が切断されることを防ぎます。

高速バンキングAPI向けの積極的なタイムアウトプロファイル

バンキングAPIが素早いバックエンドレスポンスを期待する場合、connectTimeout 2秒、serverTimeout 5秒のような厳しい値を使用できます。スローまたはダウンしているバックエンドがクライアントを長時間停止させません。再試行とフェイルオーバー動作がより早くトリガーされます。

パブリックに面したWebのスロー攻撃防御プロファイル

防御プロファイルはhttpRequestTimeout 5秒、clientFIN/serverFIN 1秒のような低い値を使用できます。この構造はスローヘッダー配信と半閉じた接続消費パターンを制限します。パブリックに面したサービスの攻撃面を縮小します。

よくある質問

9つのタイムアウトフィールドそれぞれは何を制御しますか?
各フィールドは異なる接続フェーズを制御します。httpKeepaliveTimeoutとhttpRequestTimeoutはHTTPレイヤーをカバーします;connectTimeout、serverTimeout、clientTimeoutはTCP確立とアプリケーション待機時間を制御します;queueTimeoutはプールの飽和を管理します;tunnelTimeoutはWebSocketとHTTP CONNECTトンネルを処理します;clientFINとserverFINはTCPティアダウン動作を制御します。各フィールドのセマンティクスは異なり、別のものの代替として使用すると隠れた本番障害が発生します。
なぜWebSocket接続は別のタイムアウトプロファイルを必要とするのですか?
HTTP keepaliveタイムアウトは30〜120秒の範囲で意味がありますが、WebSocketセッションは数時間オープンのままである可能性があります。tunnelTimeoutはHTTP CONNECTとWebSocketトンネルのためにHTTP keepaliveから独立した期間を定義します。この分離がないと、リアルタイムアプリケーションは通常のHTTPアイドルウィンドウに制約されてゴースト切断が頻繁に発生します。
clientFINとserverFINの値はセキュリティの観点からなぜ重要なのですか?
TCP閉じる信号後に接続を長くオープンに保つと、半閉じた接続がファイルディスクリプタプールを使い果たす可能性があります。パブリックに面したサービスではこれがスロークローズ攻撃パターンと組み合わさってリソース枯渇ベクターになります。デフォルトはclientFIN 3秒、serverFIN 6秒です;防御プロファイルではこれらをより積極的に低くできます。
同じプロファイルを複数のプールにどのようにバインドしますか?
オペレーターはプロファイルに名前を割り当て、各関連プールの設定でその名前を参照します。プロファイルは任意の数のプールにバインドできます — web、api、またはwebsocketという名前のプロファイルはすべての関連するプールに同じタイムアウト標準を適用します。プロファイルへの単一の変更によりバインドされたすべてのプールの動作が集中的に更新されます。
serverTimeoutとqueueTimeoutの違いは何ですか?
serverTimeoutは接続が確立された後にバックエンドがレスポンスを生成するために許可される時間です。queueTimeoutは接続がまったく確立される前にリクエストがプールキューで待機する時間です。これらは異なるフェーズをカバーしており、互いの代替として使用することはできません。両方とも、maxconn制限とアプリケーションSLAと共に調整すべきです。
組み込みのタイムアウトプロファイルテンプレートはありますか?
TR7は組み込みのプリセットを課しません。オペレーターは自分のシナリオに合わせた名前付きプロファイルを作成します — web、api、websocket、longpoll、uploadなどの名前が組織の標準に合わせて定義できます。このアプローチにより、プラットフォームが単一の設定モデルをすべてのトラフィックタイプに強制するのではなく、各環境が独自のプロファイルを定義できます。

タイムアウト管理をトラフィックタイプに合わせてモデル化する

Web、API、WebSocket、アップロードプールのための9軸の名前付きタイムアウトプロファイル。お客様自身の設定でのライブセットアップをご案内します。