ルートと負荷分散
CreateYourVPNにおけるルートとは何か、1分で作る方法、空のルートがなぜ便利なのか、そしてシステムがどのようにユーザーをサーバーに分散させるのかを解説します。
ルートは、あなたのインフラとユーザーに見えるものをつなぐ橋渡し役です。あなたはサーバーとインバウンドを管理し、一方でユーザーはアプリの中で短い「サーバー」のリストを目にします — そのリストの各項目は、実際にはルートなのです。
ルート = ユーザーのアプリの1行
ルートとは、クライアントのサブスクリプションの中で、1つの名前にまとめられたインバウンドのグループです。 ルールはシンプルです:
空でないルート1つ = ユーザーのサーバーリストの項目1つ。
ルートには1つのインバウンドだけを入れることも、異なるサーバーにまたがる10個のインバウンドを入れることもできます。ユーザーにはこれが見えることはありません: ユーザーは「🇺🇸 アメリカ」を選ぶだけで、実際にどのサーバーに接続されるかはロードバランサーが決めます — 詳しくは後述します。
なお、ユーザーに表示される名前は、選択されたインバウンドの名前です: インバウンドにわかりやすい名前を付ければ(「🇺🇸 ニューヨーク」「🇺🇸 ダラス」)、それがそのままユーザーに表示されます。
最初のサーバーを接続すると、システムは自動的にデフォルトルートを作成し、 最初のインバウンドをそこに入れます — だからこそ、1つも設定をしなくても、 すぐにすべてが動くのです。ルートが本領を発揮するのは、もっと欲張りたい とき: 複数の国、専用の「ストリーミング」ルート、といった場合です。
ルートを作成する
クラスターページの**「ルート」セクションで、「新規ルート」**をクリックします。ウィザードには3つのセクションがあります。
- クライアントにはこのルートがどう見えるか — 名前(例:
🇺🇸 アメリカ)と国旗です。これがルートの「看板」になります。 - 負荷分散アルゴリズム — 「トラフィック最小負荷」(デフォルト)または「ラウンドロビン」。違いは以下で説明します。
- プール内のインバウンド — どのインバウンドをこのルートに含めるか。このセクションは任意です: 空のルートを作成して、あとからドラッグで追加することもできます。
インバウンドが所属できるルートは1つだけです。 すでに別のルートに 割り当てられているインバウンドを選ぶと、そのインバウンドは新しい方に 移動します。こうすることでシステムは、各入口のトラフィックが常に ちょうど1つのルールセットで統制されることを保証しています。
トポロジー図: ルートをひと目で確認する
クラスターページでは、ルートはライブの図として表示されます: 左側にサーバーとそのインバウンド、右側にルートのボックスです。インバウンドはマウスでドラッグできます: インバウンドをつかんで、別のルートにドロップすれば完了です。**「未割り当て」**というゾーンもあります — ここにインバウンドをドロップすると、すべてのルートから切り離されます。
ルートのボックス自体も並べ替えることができます(ドラッグハンドルや矢印を使って)— これは見た目上の並び順を変えるだけの、あなたの利便性のためのものです。
空のルート
インバウンドが1つもないルートは、破線の枠で描かれ、分配ノードへの「パイプ」もありません — これはユーザーからは見えないことを示すサインです。空のルートは便利なプレースホルダーになります: 「🇯🇵 日本」をあらかじめ作っておき、日本のサーバーが用意できたらインバウンドをドラッグして入れる — それだけでルートが生きたものになります。
逆のケースもハイライトされます: どのルートにも属していないインバウンドがある場合、パネルは警告してくれます — 「◯件のインバウンドがどのルートにも割り当てられていません — クライアントにはまだ表示されません」。
負荷分散: 誰がどのサーバーに振り分けられるか
ユーザーが接続をリクエストすると、システムは各ルートについて、プールの中から1つのインバウンドを選びます — これはリアルタイムで、最新のサーバーメトリクス(レッスン3で扱ったものです)に基づいて行われます。アルゴリズムは2種類あります。
「トラフィック最小負荷」(デフォルト)
システムは、各サーバーに残っているユーザー1人あたりの空き帯域を見ます: チャネルの容量から現在のトラフィックを差し引き、接続中のユーザー数で割ります。いちばん余裕のあるサーバーが選ばれます。これは「実際の負荷」に基づく公平な振り分けです: 非力で飽和しているサーバーは、たとえ形式上の接続人数が少なくても、新しいユーザーを受け取ることはありません。
チャネルの容量は、システムが自動的に推定します — 実際のトラフィックで観測されたピークから算出されます(サーバーがしばらく負荷を受けていないと、そのピークは徐々に「冷えて」いきます)。
「ラウンドロビン」
シンプルなルールです: 新しいユーザーは、現在いちばん人数の少ないサーバーに送られます — ただしサーバーの係数による調整が入ります。係数は重みです: 係数 2.0 のサーバーは「2倍の広さがある」とみなされ、係数 1.0 の隣のサーバーと比べて、おおよそ2倍のユーザーを受け取ります。これにより、性能の異なるマシンにも公平に負荷をかけることができます。
プール内のあるサーバーに、まだ容量の推定値がない場合(例えば、そのサーバー が真新しく、まだトラフィックのピークを一度も経験していない場合)、 そのルートはラウンドロビンへと自然にフォールバックします — こうして 判断は常に、実際に存在するデータに基づいて行われます。
再配分はいつ行われるか
常に、そして自動的にです。サーバーの選択は、リクエストのたびに最新のメトリクスをもとに再計算されます: 負荷が変化すれば、新しいユーザーはより空いているサーバーに振り分けられるようになります。同時に、システムは条件が同じであれば同じユーザーには同じ選択を維持しようとします — そうすることで、その人の「サーバー」が行ったり来たりしないようにしています。
もう1つの安全策があります: モニタリングが利用不可と判断したサーバーは、選択対象から除外されます — 詳しくはレッスン7で扱います。
要点まとめ
- ルートは、インバウンドのグループの「看板」。空でないルート = ユーザーのアプリの1行。
- 1つのインバウンドが属せるルートは1つだけ。どのルートにも属していないインバウンドは、クライアントからは見えない。
- 空のルートはごく普通のプレースホルダー: 破線のボックスで、ユーザーからは隠されている。
- 2つのアルゴリズム: 空き帯域による方式(スマート、デフォルト)と重み付きラウンドロビン。
- 負荷分散はリアルタイム: 接続のたびに、現在のメトリクスをもとに再計算される。