メインコンテンツへスキップ
ソリューション

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

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

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

14
Layer 7の選択基準
11
Layer 4のスケジューラ
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に搭載された14のアルゴリズム

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

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

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

Least-connections(重み付き)

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

最短レスポンス時間

現時点で最も速く応答するバックエンドへルーティングします。サンプリングではなく継続的に測定します。容量は同じでもノードごとの遅延が変動するプール — ウォームアップ中のキャッシュ、GC負荷のかかったノード、ノイジーネイバー — に適しています。

最小帯域幅

その時点で最も少ないトラフィックを扱っているバックエンドへルーティングします。応答が件数ではなくサイズで異なる場合 — メディア、ファイルダウンロード、レポート出力 — に正しい基準であり、接続数は実際の負荷を表しません。

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

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

SED — Shortest Expected Delay

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

Fastest

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

Fastest+

TR7独自の2段階エンジン。オペレーターは8種類のライブサービスシグナル — レスポンス時間、接続確立時間、キュー混雑度、エラー率など — から2つを選択します。Fastest+はprimaryシグナルで候補を絞り込み、次にsecondaryシグナルで同点を分離します。以下の詳細セクションを参照。

Fastest+ — TR7の2段階、オペレーターが調整するエンジン

ほとんどの適応型アルゴリズムは1つのシグナルを監視します — レスポンス時間または接続数。Fastest+はオペレーターに8種類のライブサービスシグナルから2つを選択させます:primaryシグナルが最良スコアのバックエンドへ候補を絞り込み、secondaryシグナルが残った候補の同点を分離します。メンテナンスモードにある、またはヘルス状態が適切でないバックエンドは自動的に除外され、1つの基準で十分な場合は単一シグナルモードも利用できます。選択できる8種類のシグナルは以下のとおりです:

01

レスポンス時間

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

02

接続時間

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

03

キュー時間

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

04

アクティブセッション

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

05

アクティブキュー深度

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

06

接続エラー

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

07

サーバーサイドアボート

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

08

使用中の接続

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

2つのレイヤー、1つのポリシー

Layer 7に14、パケットレベルに11

Layer 7ではリクエストの中身 — ヘッダー、パス、クッキー、リアルタイムのレスポンス時間 — を読んで判断します。Layer 4ではトラフィックがアプリケーション層に上がる前に、パケット単位で判断します。最も高いスループットはここにあります。どちらの場合もアルゴリズムはサービスごとに選択でき、装置を動かしたまま変更できます。

Layer 7 — 14の選択基準

ラウンドロビン — 順番に。重み付きまたは完全に均等
重み付きラウンドロビン — 容量差を反映
最小接続数 — 開いている接続が最も少ないものを選択
最短レスポンス時間 — 現時点で最も速く応答するバックエンド
最小帯域幅 — その時点で最も少ないトラフィックのバックエンド
最初に利用可能 — 次に進む前に1台を埋める
ランダム — 統計的に均一、状態を持たない
Fastest — ライブシグナル1つ、最小値が勝つ
Fastest+ — ライブシグナル2つ。1つ目で絞り、2つ目で同点を解消
送信元IP — 同じクライアントは同じバックエンドへ
URI — 同じパスは同じバックエンドへ。キャッシュが温まったまま
URLパラメータ — クエリ文字列内の値でルーティング
ヘッダー — 独自ヘッダーを含む任意のヘッダーでルーティング
RDPクッキー — デスクトップセッションは自分のブローカーへ

Layer 4 — パケットレベルの11スケジューラ

rr — ラウンドロビン
wrr — 重み付きラウンドロビン
lc — 最小接続数
wlc — 重み付き最小接続数
lblc — ローカリティベース最小接続数
lblcr — 同上(レプリケーションあり)
sh — 送信元ハッシュ
dh — 宛先ハッシュ
sed — 最短予測遅延
nq — キューイングなし
mh — Maglevハッシュ — プール変更時の再マッピングを最小化

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

均一なvService

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

長期セッション

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

キャッシュ層のvService

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

異種または変動負荷

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

よくある質問

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

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

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