ソリューション

すべてのワークロードに正しいアルゴリズムを選択

クラシックなround-robinからMaglev hashingおよびTR7独自の8シグナルFastest+エンジンまで — 13のアルゴリズムを搭載

ワークロードが異なれば、ルーティングロジックも異なります。同一Webサーバーで構成される均一なvService? Round-robin。容量が決定的な長期セッション? Least-connections。キャッシュアフィニティシナリオ? Consistent hashまたはMaglev。異種ハードウェアや変動負荷? Fastest+。TR7 ADCはすべての標準アルゴリズム — さらに3つのモダンなハッシュバリアントと1つの独自エンジン — をvServiceごとに選択でき、再起動なしに切り替えられます。

13
搭載済み負荷分散アルゴリズム
8
Fastest+がスコアリングするライブパフォーマンスシグナル
vServiceごと
アルゴリズム選択 — 再起動なしにライブで変更可能

トラフィックパターンが異なるアルゴリズムを必要とする理由

各クラシックアルゴリズムは、対象vServiceについての前提に基づいています。Round-robinはバックエンドが互換性を持つと前提します。Least-connectionsはセッション数がバックエンド負荷と相関すると前提します。Source-IPは明示的な永続性なしにユーザーとバックエンドの粘着性があると前提します。キャッシュアフィニティハッシュはリクエストキー — URL、ヘッダー、またはセッション — が安定していると前提します。前提が成立するとき、そのアルゴリズムが正しい答えです。

より難しいケースは、それらの前提が崩れるときです:業務時間中にバックエンドのパフォーマンスが変動する、ローリングアップグレード中にハードウェア世代が混在する、地域ごとのレイテンシがリクエストごとに変動する、あるいはワークロード自体に生のリクエスト数とは一致しないバースト的な重いクエリがある。このようなシナリオでは、リクエストごとに実際に最速のバックエンドを選択するか — またはすべてを再シャードすることなくバックエンド変更を吸収するためのハッシュアルゴリズムを使用することが、ユーザーに見えるレイテンシを維持します。

正しい答えは、アルゴリズムをワークロードに合わせること — グローバルではなくvServiceごとに。

アルゴリズム選択、vServiceごとに

TR7のvServiceは、フロントエンドリスナー、トラフィックルール、ヘルスチェック、バックエンドグループを単一の設定オブジェクトにまとめます — これらを別々の場所に分割するクラシックなpool概念より広い範囲をカバーします。各vServiceはドロップダウンから独自のアルゴリズムを選択します — 再ビルドなし、再起動なし。単一のTR7インスタンスで組み合わせ可能:静的アセットvServiceにround-robin、APIのvServiceにFastest+、キャッシュ層のvServiceにMaglev hash。サービスタイプのフィルタリングは自動で行われ、UIはvServiceのプロトコルに有効なアルゴリズムのみを表示します。

vServiceごとのアルゴリズム

アルゴリズムの選択はグローバルADC設定ではなく、vServiceオブジェクトに属します。異なるvServiceは同一のTR7インスタンスで異なるアルゴリズムを実行できます。

プロトコル対応フィルタリング

UIはvServiceのプロトコルに対して意味のあるアルゴリズムのみを表示します — HTTP、TCP、またはネットワーク層のvServiceはそれぞれ関連するサブセットを取得し、オペレーターが推測する必要はありません。

セッション永続性と組み合わせ可能

アルゴリズムは最初のリクエストのバックエンドを選択し、セッション永続性が同じユーザーの後続リクエストを固定します。両方のレイヤーはvServiceごとに独立して設定可能です。

ホットスワップ(再起動なし)

ライブvServiceのアルゴリズムを変更すると、トラフィックは即座に新しいロジックに切り替わります。サービスの再起動も、接続ドレインも不要です。

TR7 ADCに搭載された13のアルゴリズム

すべてのクラシックアルゴリズム、2つのモダンなconsistent hashバリアント、1つの最短遅延アルゴリズム、そしてTR7独自のFastest+エンジン。すべてvServiceごとに利用可能 — ドロップダウンから選択、設定コード不要。

Round-robin(重み付き + 静的)

vService全体に均等分散、重み付きまたは重みなし。すべてのバックエンドが同一容量を持つ均一なvServiceの標準デフォルト。

Least-connections(重み付き)

現在最も少ない開放接続数のバックエンドにルーティング。セッション数がバックエンド負荷と相関する長期セッションに非常に効果的。重み付きバリアントは容量の差を考慮します。

First-available(最初に利用可能)

常に容量のある最初のバックエンドにルーティングし、過負荷の場合のみ次にフォールスルー。ウォーム→コールドのバックエンド順序付けやステージドデプロイメントに有用。

Random(ランダム)

正常なバックエンドからランダムに選択。ステートレス、統計的に均等 — vServiceが大きく均一な場合に有用。低オーバーヘッドの最小負荷選択にはpower-of-two randomをサポート。

Source-IP hash

同一クライアントIPは常に同一バックエンドにルーティング。アプリケーションが明示的なセッション永続性を管理しない場合のステートフルフローに有用。

URL hash(URI / URLパラメーター)

URLコンポーネントでハッシュ — URL長、URIパス、または特定のクエリパラメーター(例:?user_id)。キャッシュアフィニティのために同一URLまたはユーザーを同一バックエンドにルーティング。

Header hash

カスタムHTTPヘッダーでハッシュ。マルチテナントルーティング(tenant-idヘッダー)、フィーチャーフラグ、またはA/Bテストシナリオに有用。

RDP cookie hash

バックエンド選択のためにRDPセッションcookieを読み取り。セッションアフィニティが必要なRDPゲートウェイとリモートデスクトップファームに有用。

Consistent hash

バックエンドがvServiceに参加または離脱するときの中断を最小化するモダンなハッシュモード — キーのごく一部のみが再シャードされ、vService全体ではありません。バックエンドの変更がキャッシュ全体を無効化すべきでないキャッシュ層に適切。

Maglev hash

ソフトウェアロードバランサーのスケールのために設計されたGoogleのconsistent hashingアルゴリズム。クラシックなconsistent hashより低い分散、レプリカ間で決定論的。予測可能なバックエンド割り当てが必要なステートレスサービスに最適。

SED — Shortest Expected Delay

アクティブな接続とバックエンドごとの重みを考慮して、最低の期待待機時間のバックエンドにルーティング。バックエンドの容量が大きく異なる場合のleast-connectionsの洗練された代替。Fastest+の全複雑性なしに使用可能。

Fastest

最低の最近のレスポンス時間のバックエンドにルーティング。レスポンス時間のみが重要な場合のシンプルなレイテンシ対応オプション。

Fastest+

TR7独自の8シグナル適応型エンジン。レスポンス時間、接続時間、キュー深度、アクティブセッション、エラー率などをリクエストごとの速さスコアに統合。以下の詳細セクションを参照。

Fastest+ — TR7の8シグナル適応型エンジン

ほとんどの適応型アルゴリズムは1つのシグナルを監視します — レスポンス時間または接続数。Fastest+はバックエンドごとに8つの独立したパフォーマンスシグナルを継続的にサンプリングし、受信する各リクエストに対して新しく計算された単一の速さスコアに統合します。

01

レスポンス時間

バックエンドからの平均レスポンスレイテンシ、継続的にサンプリング。主要シグナル — レスポンスに時間がかかるバックエンドは即座にランキングを下げます。

02

接続時間

TCP/TLS接続の確立にかかる時間。接続時間が増加しているバックエンドは飽和に近づいています — レスポンス時間がまだ良好に見えても。

03

キュー時間

リクエストがバックエンドに到達する前にキューで過ごす時間。キュー時間の上昇は、バックエンドが追いつけていない最初の警告です。

04

アクティブセッション

バックエンドごとの現在の開放セッション数。過去の累計のノイズなしに容量対応ルーティングを実現。

05

アクティブキュー深度

現在待機中のリクエスト数。キューが0のバックエンドは、50が待機している同等速度のバックエンドより優先されます。

06

接続エラー

最近の失敗した接続数。直近10回の試行のうち3回を拒否したバックエンドは、ヘルスチェックが捕捉する前にランキングを下げます。

07

サーバーサイドアボート

最近のウィンドウ内でバックエンドが開始したセッションアボート。バックエンドが動作しているが途中で失敗しているケースを捕捉します。

08

使用中の接続

接続プールの利用率 — 各バックエンドのkeep-aliveプールが容量にどれだけ近いか。プール枯渇がユーザーに見える前に検出します。

各アルゴリズムが輝く場面

均一なvService

同一バックエンド、同一容量 — round-robinは計算をシンプルに保ち、負荷を対称に維持。ステートレスな大規模vServiceにはrandomを追加。

長期セッション

WebSocket、ストリーミングサービス、ビデオ通話 — セッションは数分または数時間開放されたまま。Least-connectionsまたはSEDはリクエスト数よりはるかにアクティブ負荷を追跡します。

キャッシュ層のvService

バックエンドの変更がキャッシュ全体を無効化すべきではありません。Consistent hashまたはMaglevはバックエンド変更時にキーのごく一部のみを再シャードします。

異種または変動負荷

混合ハードウェア、ローリングデプロイ、地域レイテンシ分散 — Fastest+はバックエンドをライブでスコアリングし、理論上最適ではなく実際に最速のものを選択します。

よくある質問

サービスを再起動せずにアルゴリズムを変更できますか?
はい。アルゴリズムはvServiceごとのドロップダウンです。ライブvServiceで変更すると、トラフィックは即座に新しいロジックに切り替わります — サービスの再起動も接続ドレインも不要です。
Fastest+はleast-connectionsとどのように関係しますか?
Least-connectionsは多くのvServiceに非常に効果的です — 特にセッション数がバックエンド負荷と密接に追跡する長期セッションに。Fastest+は7つの追加シグナル:キュー深度、最近のレスポンス時間、接続時間、エラー率などで全体像を拡張します。ユースケースは異なります:least-connectionsは予測可能なセッション形状を持つ均一なvServiceに多くの場合正しい選択で、Fastest+はセッション数だけではバックエンドが実際にどれだけビジーかを捉えられない場面で輝きます — 変動するクエリ時間、混合ハードウェア世代、またはローリングデプロイメント。
Consistent hashとMaglev hashはどちらを選ぶべきですか?
どちらもバックエンド変更時の再シャードを最小化します。Consistent hashはクラシックなアルゴリズム — シンプル、予測可能、よく理解されています。MaglevはGoogleのスケールのソフトウェアロードバランサー向けに構築されたバリアント — 負荷分散のより低い分散、レプリカ間で決定論的。ほとんどのワークロードにはconsistent hashで十分です;厳格な負荷均一性が必要な場合や、ルーティングで合意する必要がある複数のTR7インスタンスを実行する場合はMaglevを選択してください。
SEDがleast-connectionsにないことをすることは何ですか?
SED(Shortest Expected Delay)はアクティブな接続バックエンドごとの重みの両方を考慮して、次のリクエストに最も速く応答するバックエンドを推定します。重み付きleast-connectionsの洗練された形 — バックエンドの容量が大きく異なり、Fastest+の全複雑性なしにルーティングがそれを考慮するようにしたい場合に有用です。
アルゴリズム選択には外部モニタリングまたはAPM統合が必要ですか?
いいえ。すべてのシグナル — Fastest+の8つの入力を含む — は、TR7がすでにプロキシしているトラフィックから測定されます。エージェントなし、APMフックなし、外部メトリクスパイプラインなし。
デフォルトアルゴリズムは何ですか?
Round-robinは既存のデプロイメントとの後方互換性のためにデフォルトです。別のアルゴリズムへの切り替えは、vService設定でのワンドロップダウン変更です。

アルゴリズムをワークロードに合わせる

TR7 ADCがvServiceごとにアルゴリズムを設定させる方法、そしてFastest+が他のアルゴリズムが対処できないワークロードをどのように処理するかをご覧ください。