【文献】
大隅 淑弘 Yoshihiro Ohsumi,地理的に分散したサーバ間のフェイルオーバ・フェイルバックを可能にする複製サーバ冗長化構成,FIT2013 第12回情報科学技術フォーラム 講演論文集 第4分冊 査読付き論文・一般論文 ネットワーク・セキュリティ ユビキタス・モバイルコンピューティング 教育・人文科学 情報システム Forum on Information Technology 2013,2013年 8月20日,第23-27頁
(58)【調査した分野】(Int.Cl.,DB名)
前記1セットのLBデバイスのうちの対応するLBデバイスに関連付けられた前記重み値は、前記1セットのLBデバイスうちの前記対応するLBデバイスによってサーブされる処理装置のグループの容量を示している、請求項1に記載のシステム。
前記アプリケーションインスタンスは、アプリケーションサーバ、コンテンツサーバおよび仮想マシンのうち少なくとも1つに関連付けられている、請求項1に記載のシステム。
前記1セットのLBデバイスのうちの各々のLBデバイスはさらに、前記アプリケーションインスタンスに関連付けられたオフセット値に基づいて、前記1セットのLBデバイスのうちの前記LBデバイスによってサーブされた前記グループのうちの各々のアプリケーションインスタンスについての空データ構造位置の前記数を選択するように構成される、請求項5に記載のシステム。
前記1セットのLBデバイスのうちの対応するLBデバイスに関連付けられた前記重み値は、前記1セットのLBデバイスうちの前記対応するLBデバイスによってサーブされるアプリケーションインスタンスのグループの容量を示している、請求9に記載の方法。
前記アプリケーションインスタンスは、アプリケーションサーバ、コンテンツサーバおよび仮想マシンのうち少なくとも1つに関連付けられている、請求項9に記載の方法。
各々のアプリケーションインスタンスについての空データ構造位置の数を選択するステップは、前記アプリケーションインスタンスに関連付けられたオフセット値に基づいて空データ構造位置の前記数を選択するステップを含む、請求項13に記載の方法。
各々のエニーキャストノードにおいて各々のデータパケットを受信すると、前記エニーキャストノードによって、前記受信されたデータパケットのうちの第2の1つ以上のヘッダフィールドに基づいて第2のハッシュ値を生成するステップと、
前記エニーキャストノードによって、前記1セットのLBデバイスにおけるLBデバイスの数を法として、前記生成された第2のハッシュ値に基づいて、前記受信されたデータパケットを宛先のLBデバイスに転送するステップとを含む、請求項9に記載の方法。
【発明を実施するための形態】
【0008】
さまざまな図における同様の参照番号および符号は同様の要素を示している。
詳細な説明
オンラインサービスまたはアプリケーションは、通常、各々のアプリケーションまたはサービスのための複数のアプリケーションインスタンスを含む。各々のアプリケーションまたはサービスのための複数のアプリケーションインスタンスは複数のコンピュータサーバ上に常駐していてもよい。そのため、複数のエンドユーザによるアプリケーションまたはサービスへのアクセスに関連付けられた負荷は、少なくとも、対応する複数のアプリケーションインスタンスのサブセットにわたって分散されていてもよい。また、さまざまな地理的位置にわたって所与のアプリケーションまたはサービスのための複数のアプリケーションインスタンスを分散させることにより、エンドユーザが被るレイテンシを低減させることが容易になる。特に、エンドユーザは、対応する複数のアプリケーションインスタンスのうち1つ以上のアプリケーションインスタンスを有する最も近い地理的位置でサーブされている可能性がある。各々のエンドユーザまたはクライアントが対応する最も近い地理的位置でサーブされていることでレイテンシを低減させる一方で、各々の地理的位置におけるコンピュータサーバとそこにあるアプリケーションインスタンスとが有する容量が有限となる。特定の位置における所与のアプリケーションまたはサービスに対する要求が同じ位置におけるアプリケーションインスタンスの容量を上回っている場合、アプリケーションに対する過剰な要求が次に最も近い位置にまでオーバーフローする可能性がある。
【0009】
コンピュータサーバおよびその上で実行されるアプリケーションインスタンスが有する有限の容量に対処するために、従来より、既存のデータセンタにおいてドメインネームシステム(domain name system:DNS)サーバを用いてロードバランシング機能を実行してきた。以下において、エニーキャストデータトラフィックをロードバランシングするためのプロセス、装置およびシステムの実現例が提供される。
【0010】
エニーキャストベースのサービスまたはアプリケーションにおいては、1つ以上のインターネットプロトコル(IP)アドレスが、エニーキャストを用いてグローバルに複数のサーバからアドバタイズされている。さらに、同じアプリケーションまたはサービスにアクセスする場合、所与のアプリケーションまたはサービスについてのエニーキャストIPアドレスがエンドユーザによって用いられる。次いで、エニーキャストアドレスに関連付けられたデータトラフィック、たとえばアプリケーションまたはサービスにアクセスするためのエンドユーザからの要求は、以下に記載される実現例において説明されるように、さまざまな対応するアプリケーションインスタンスにわたってロードバランシングされている。エニーキャストアドレスに関連付けられたデータトラフィックはまた、この明細書
中において、エニーキャストトラフィックまたはエニーキャストデータトラフィックとも称される。ある実現例においては、ステートフルプロトコルに関連付けられたエニーキャストトラフィック、たとえばトランスポートコントロールプロトコル(transport control protocol:TCP)がロードバランシングおよびサーブされている一方で、対応する接続はインターネットルーティングテーブルが変化したときでも維持されている。さらに、以下に記載される実現例は、さまざまな位置についての容量または他のロードバランシングメトリクスを特定することを可能にし、かつ、負荷、容量または他のいずれかのロードバランシングメトリクスの変化に対する迅速なロードバランシング応答を可能にする。
【0011】
図1は、エニーキャストアドレスにアドレス指定されたデータトラフィックをロードバランシングするための単層型ロードバランシングシステム100の実現例のブロック図を示す。システム100は、複数のエニーキャストリダイレクタノード110a〜110c(以下、個々にまたは総称してエニーキャストノード110とも称する);ロードバランサデバイス120a〜120b(以下、個々にまたは総称してロードバランサ120とも称する);および複数のサーバクラスタ130a〜130c(以下、個々にまたは総称してクラスタ130とも称する)を含む。クラスタ130の各々はいくつかのアプリケーションインスタンス131を含む。
【0012】
エニーキャストアドレスにアドレス指定されたデータパケット10は、エニーキャストノード110によってシステム100において受信される。たとえば、データパケット10はエニーキャストノード110によって受信される。エニーキャストノード110は、エニーキャストアドレスにアドレス指定されたデータパケット10を受信し、受信されたデータパケットを対応するロードバランサ120にリダイレクトするように構成されたデバイスである。場合によっては、エニーキャストノード110は、受信されたデータパケット10を対応するロードバランサ120にリダイレクトする。他の場合には、受信側エニーキャストノード110は、受信されたデータパケット10を、システム100のうち1つ以上のそれぞれのクラスタ130にサーブするロードバランサ120のプールにリダイレクトする。
【0013】
いくつかの実現例においては、各々のエニーキャストノード110は、ソースインターネットプロトコル(IP)アドレスを、対応するクラスタ130またはこのようなクラスタに関連付けられたロードバランサ120に対してマッピングするそれぞれのマップを維持するかまたは当該それぞれのマップにアクセスできる。当該マップはソースIPマップとも称される。場合によっては、各々のソースIPアドレスは、同じソースIPアドレスに関連付けられたデータパケットソースに最も近いクラスタ130または対応するロードバランサ120にマッピングされる。当業者であれば、ソースIPアドレスとクラスタ130またはロードバランサ120との間のマッピングが、たとえばシステム100のアドミニストレータによってなされる割当てに基づいて、さまざまに規定され得ることを認識するはずである。エニーキャストアドレスにアドレス指定されたデータパケット10を受信すると、エニーキャストノード110は、ソースIPマップにおけるパケットのソースインターネットプロトコル(IP)アドレスを調べ、データパケット10を、マップされた位置(すなわちソースIPマップにおけるソースIPアドレスに関連付けられた位置)にリダイレクトする。マップされた位置は、システム100のロードバランサ120またはロードバランサ120のプールを示している。
【0014】
いくつかの実現例においては、エニーキャストノード110は、受信されたデータパケット10のうちのいくつかのヘッダフィールドを用いて、受信されたデータパケット10がリダイレクトされるべきロードバランサ120またはロードバランサ120のプールを決定する。たとえば、受信側エニーキャストノード110は、受信されたデータパケット10に関連付けられたソースポートおよび(仮想IP(virtual IP:VIP)アドレスな
どの)宛先IPアドレスを用いて、複数のエニーキャストサービスグループのうちの或るエニーキャストサービスグループを決定する。いくつかの実現例においては、受信側エニーキャストノード110は、宛先アドレス、宛先ポート、ソースIPアドレス、ソースポート、プロトコルまたはそれらのいずれかの組合せを用いて、エニーキャストサービスグループを決定することができる。受信側エニーキャストノード110はまた、接続識別子(identifier:ID)などのデータパケットペイロードに含まれる他の情報を用いてもよい。たとえば、2つのエニーキャストサービスグループが規定されてもよく、そのうち一方のエニーキャストサービスグループはバックエンドロードバランシングのためにエンドポイントサーバを用い、他方のエニーキャストサービスグループは、バックエンドロードバランシングのためにロードバランシングサーバを用いる。エンドポイントサーバは、トランスポートコントロールプロトコル(TCP)接続を終了するように構成される。他の例においては、さまざまなエニーキャストサービスグループが規定されてもよい。対応するエニーキャストサービスグループに対してパケットの宛先IPアドレスおよびソースポートをマッピングする際に、受信側エニーキャストノード110は、たとえば、このようなマッピングを示す第2のマップまたは構成情報を活用する。受信側エニーキャストノード110はさらに、受信されたデータパケット10のソースIPアドレスと受信側エニーキャストノード110に関連付けられたソースIPマップとを用いて、システム100のゾーン、たとえば1つ以上のクラスタ130を決定する。いくつかの実現例においては、単一のソースIPマップがすべてのエニーキャストノード110によって共有されている。他の実現例においては、さまざまなエニーキャストノード110が別個のソースIPマップに関連付けられてもよい。いくつかの実現例においては、各々のソースIPマップはそれぞれのサービスに関連付けられている。受信側エニーキャストノード110は、次いで、たとえば第3のマップに基づいて、決定されたゾーンおよび決定されたエニーキャストサービスグループをロードバランサ120またはロードバランサ120のプールにマッピングする。受信側エニーキャストノードは、次いで、受信されたデータパケット10を、決定されたロードバランサ120またはロードバランサ120のうち決定されたプールにリダイレクトする。
【0015】
当業者であれば、グローバルマッピング(たとえばソースIPマップ)を用いることによってエニーキャストノード110によるデータパケット10のリダイレクトを一致させることを、認識するはずである。言いかえれば、データパケットがエニーキャスト110bではなくエニーキャストノード110cにおいて受信される場合、エニーキャストノード110cは、ソースIPマップを用いて、エニーキャストノード110bによって選択されたであろう同じロードバランサにデータパケット10をリダイレクトすることとなる。
【0016】
受信側エニーキャストノード110はさらに、受信されたデータパケット10が、受信側エニーキャストノード110によって最近サーブされたデータフローまたはセッションに対応しているかどうかを判断するために接続テーブルをチェックするように構成され得る。受信されたデータパケットが接続テーブルにおいて示されるデータフローまたはセッションに対応している場合、受信側エニーキャストノード110は、受信されたデータパケット10を、対応するデータフローまたはセッションに関連付けられた宛先に転送する。そうでない場合、受信側エニーキャストノード110は、上述のとおりロードバランサ120またはロードバランサ120のプールを決定し、受信されたデータパケット10を、決定されたロードバランサ120またはロードバランサ120のうちの決定されたプールにリダイレクトする。
【0017】
いくつかの実現例においては、各々のロードバランサ120はプロセッサおよびメモリを含むコンピューティングデバイスである。メモリは、データパケット10がもともとアドレス指定されているエニーキャストアドレスに関連付けられたデータ構造121および
コンピュータコード命令を格納している。コンピュータコード命令は、エニーキャストアドレスに関連付けられたデータパケットをロードバランシングするためのソフトウェアロードバランサを含む。いくつかの実現例においては、ソフトウェアロードバランサは仮想マシンである。ロードバランサ120は、同じエニーキャストアドレスに関連付けられた複数のソフトウェアロードバランサおよび/または複数のエニーキャストアドレスに関連付けられた複数のソフトウェアロードバランサを含み得る。データ構造121は、エニーキャストアドレスに関連付けられたデータパケットを、クラスタ130に常駐している対応するアプリケーションインスタンス131にマッピングするためにロードバランサ120によって用いられる。場合によっては、各々のロードバランサ120は、同じロードバランサ120によってサーブされた各々のエニーキャストアドレスのための別個のデータ構造を含む。プロセッサは、メモリに格納されたコンピュータコード命令を実行するように構成される。当業者であれば、各々のロードバランサ120が複数のプロセッサおよび/または複数のメモリを含み得ることを認識するはずである。ロードバランサ120は、コンピュータサーバ、TCP接続を終了させるエンドポイントサーバ、この明細書中に記載されるようにロードバランシングを実行するように構成された他の電子デバイス、またはそれらの組合せを含む。
【0018】
場合によっては、ロードバランサ120はシステム100のさまざまな地理的区域にわたって分散されている。たとえば、ロードバランサ120a、120bおよび120cは、それぞれ、対応するクラスタ130a、130bおよび130cにサーブする。他の場合には、ロードバランサ120は2つ以上のクラスタ130にサーブしてもよい。ロードバランサ120はシステム100のゾーンにサーブしてもよい。ゾーンは、この明細書中においては、システム100のうち、たとえば対応する地理的位置または他の基準に基づいて関連付けられる1つ以上のクラスタ130を指している。たとえば、ゾーンは、同じデータセンタ内などにおいて互いに地理的に近接して位置する複数のクラスタ130を含み得る。他の場合においては、ゾーンは、比較的高速の通信リンクによって相互接続されている、互いにより遠くに離れたクラスタ130を含み得る。ゾーンは、ロードバランサのプールによってサーブされてもよい。
【0019】
受信されたデータパケット10がエニーキャストノード110によってロードバランサ120のプールにリダイレクトされる場合、イコール・コスト・マルチ・パス(equal-cost multi-path:ECMP)ルーティングを採用して、受信されたデータパケットをロー
ドバランサ120のプールのうち特定のロードバランサ120に転送してもよい。たとえば、データパケット10を受信するデバイスは、データパケット10のヘッダフィールド(たとえば、プロトコル、ソースIPアドレス、宛先IPアドレス、ソースポートおよび宛先ポートを含むパケットの5タプル)に基づいて整数ハッシュ値を生成する。受信側デバイスは、次いで、ロードバランサ120の識別を含むテーブルのサイズを法として、生成されたハッシュ値に基づいて、宛先ロードバランサ120を決定する。いくつかの実現例においては、受信側デバイスは、以下にさらに記載されるように、ロードバランサ120によって用いられるのと同じかまたは実質的に同様のアルゴリズムを用いて、宛先ロードバランサ120を決定する。受信側デバイスは、次いで、宛先ロードバランサ120を指し示すようにパケットのレイヤ2イーサネット(登録商標)ヘッダを書換えるか、または、GRE(generic routing encapsulation)ヘッダおよびアウターIPヘッダでデー
タパケット10をカプセル化することによって、データパケット10を宛先ロードバランサ120に送達する。受信されたデータパケット10を複数のソフトウェアロードバランサのうちの1つに転送するために、パケットの宛先IPアドレスにサーブする複数のソフトウェアロードバランサを含むロードバランサ120によって同じアプローチが用いられてもよい。
【0020】
データパケット10を受信すると、受信側ロードバランサ120またはその上にあるソ
フトウェアロードバランサが、データパケット10のうちの1つ以上のヘッダフィールド(たとえば、プロトコル、ソースIPアドレス、宛先IPアドレス、ソースポートおよび宛先ポートを含むパケットの5タプル)に基づいてハッシュ値を生成する。いくつかの実現例においては、データ構造121は、受信側ロードバランサ120によってサーブされるアプリケーションインスタンス131のグループに関連付けられたエントリを含む。アプリケーションインスタンス131のグループは、システム100に到達したときにデータパケット10がアドレス指定されていたエニーキャストアドレスに関連付けられたアプリケーションまたはサービスに対応している。受信側ロードバランサ120は、次いで、生成されたハッシュ値およびデータ構造121を用いて、受信側ロードバランサ120によってサーブされるアプリケーションインスタンスのグループのうちの或るアプリケーションインスタンス131の宛先IPアドレスを決定する。受信側ロードバランサ120は、さらに、決定されたアプリケーションインスタンス131にデータパケット10を転送する。
【0021】
いくつかの実現例においては、データ構造121は、各々のアプリケーションインスタンス131がデータ構造121に含まれている頻度が、同じアプリケーションインスタンス131に関連付けられた重みを反映するように設計されている。アプリケーションインスタンス131に関連付けられた重みは、どのアプリケーションインスタンス131にデータパケットが転送されるべきかを決定するのに関連する容量、処理時間または他の基準などのロードバランシングメトリックを示している。すなわち、各々のアプリケーションインスタンス131に関連付けられた重みは、アプリケーションインスタンス131がどれほどビジーであるかまたはどれほどフリーであるかを反映していてもよい。代替的には、所与のアプリケーションインスタンス131に関連付けられた重みは、同じアプリケーションインスタンス131が用いられている場合に、データパケット10をどれほど高速で、またはどれほど低速で処理するかを反映していてもよい。各々のアプリケーションの容量は、1秒当たりのパケット、接続、または、1秒当たりの同期(synchronize:SY
N)パケット、帯域幅などの点で規定されてもよい。処理時間は、ラウンドトリップタイム(round trip time:RTT)または当該技術において公知の他のメトリクスの点から
規定されてもよい。データ構造121においては、アプリケーションインスタンス131が含まれる頻度が高ければ高いほど、データパケット10に関連付けられた要求を処理するために同じアプリケーションインスタンス131が選択される可能性がより高くなるはずである。
【0022】
受信側ロードバランサ120は、生成されたハッシュ値を用いて、データ構造121のエントリを選択する。たとえば、受信側ロードバランサ120は、データ構造のサイズまたはデータ構造の要素部分のサイズを法として、生成されたハッシュ値に等しいインデックスを含むデータ構造エントリを選択してもよい。データ構造121の各々のエントリは対応するアプリケーションインスタンス131を示している。たとえば、データ構造121の各々のエントリは、対応するアプリケーションインスタンス131の宛先IPアドレスを含む。受信側ロードバランサ120は、次いで、データパケット10を、選択されたデータ構造エントリから得られた宛先IPアドレスを有するアプリケーションインスタンス131に転送する。
【0023】
いくつかの実現例においては、データ構造121は、システム100の対応する位置(たとえばクラスタ130またはゾーン)に関連付けられたアプリケーションインスタンスについてのエントリを含む各々の行または代替的には各々の列を備えた単一のテーブルである。そのため、受信側ロードバランサ120は、初めに、行または代替的には列を選択し、次いで、生成されたハッシュ値に基づいて、選択された行または代替的には選択された列内におけるエントリを選択してもよい。いくつかの実現例においては、データ構造121は複数のテーブルを含む。各々のテーブルは、システム100の位置(たとえばゾー
ンまたはクラスタ130)に対応している。このような場合、受信側ロードバランサ120は初めにテーブルを選択し、次いで、生成されたハッシュ値に基づいて、この選択されたテーブル内のエントリを選択する。
【0024】
受信側ロードバランサ120は、さまざまな方法で、システム100の位置に対応するテーブルまたは行もしくは列などのサブテーブルを選択してもよい。たとえば、この選択は、システム100の対応する位置にIPサブネットを関連付けるマップに基づいていてもよい。このようなマップは、各々のIPサブネットからのトラフィックが、通常、システム100のどの位置に到達するのかを観察することによって規定されてもよい。代替的には、マップは、システム100のアドミニストレータによってなされる割当てに基づいて、または、システム100の位置130とIPサブネットとの間の距離およびRTTに基づいて、規定されてもよい。受信側ロードバランサ120は、マップにおける受信されたデータパケット10に関連付けられたソースIPアドレスを調べて、位置または位置の重み付けリストを元に戻す。位置の重み付けリストがマップから検索される場合、受信側ロードバランサは、データパケット10のうちの1つ以上のヘッダフィールド(たとえば5タプル)を用いて生成された別のハッシュ値および対応する重みに基づいたリストから位置を選択してもよい。しかしながら、重み付けリストが用いられない場合、受信側ロードバランサ120は、マップにおいて示されている最も近接している位置がデータパケット10を処理するために十分な利用可能容量を有しているかどうかをチェックする。十分な利用可能容量を有している場合、最も近接している位置が選択される。十分な利用可能容量を有していない場合、マップに示されている次に最も近接する位置がチェックされる等である。各々の位置が対応するテーブルまたはサブテーブルに関連付けられていると想定すると、受信側ロードバランサ120は、マップから位置を選択する際に、データパケット10のための宛先アプリケーションインスタンス131を決定するのに使用されるテーブルまたはサブテーブルを選択する。当業者であれば、データ構造121が、代替的には、1つ以上のテーブルではなく1つ以上のツリーまたは当該技術において公知である他の如何なるデータ構造をも含み得ることを認識するはずである。
【0025】
受信側ロードバランサ120はまた、アプリケーションインスタンス131を選択する前に接続テーブルをチェックして、受信されたデータパケット10が既存の接続に関連付けられたフローまたはセッションに対応しているかどうかを判断してもよい。受信されたデータパケット10が既存の接続に関連付けられていることが判明すれば、データパケット10は、接続テーブルにおける接続に関連付けられたアプリケーションインスタンスに転送される。そうでない場合、受信側ロードバランサ120は、データ構造121からアプリケーションインスタンス131を決定し、データパケット10を決定されたアプリケーションインスタンス131に転送する。また、データパケット10を受信すると、ロードバランサ120はさらに、データパケット10を、これが予め1回以上カプセル化されていた場合には、デカプセル化してもよい。そのため、受信側ロードバランサ120は、内部パケットが到達するまで、データパケット10をデカプセル化し、次いで、アプリケーションインスタンス131を決定する際に使用されるいずれのヘッダフィールドをも検索して、データパケット10を処理する。
【0026】
各々のクラスタ130は、1つ以上のサービスに関連付けられたアプリケーションインスタンスを維持する1つ以上のコンピュータサーバ、たとえばコンテンツデリバリサーバおよび/またはアプリケーションサーバ、を含む。
図1においては、クラスタ130a〜130cの各々は、システム100に到達したときにデータパケット10がアドレス指定されていたエニーキャストアドレスを介してアクセスされたアプリケーションまたはサービスに関連付けられたいくつかのアプリケーションインスタンス131を含む。所与のクラスタ130におけるアプリケーションインスタンス131は、単一のコンピュータサーバに常駐してもよく、または、同じクラスタ130のうちの複数のコンピュータサーバ間
で分散されてもよい。アプリケーションインスタンス131は対応する宛先IPアドレスを介してアドレス指定される。この明細書中において参照されるアプリケーションインスタンスは、電子メールアプリケーション、ゲームアプリケーション、ソーシャルメディアアプリケーション、カレンダアプリケーションまたは他のいずれかのオンラインアプリケーションなどの、ウェブページまたはアプリケーションのエンドユーザの要求にサーブするサーバアプリケーションのコピーを含む。データパケット10を受信するアプリケーションインスタンス131は、データパケット10に関連付けられた要求を処理する。
【0027】
図2は、単層型ロードバランシングシステム100によって実行される、エニーキャストデータパケットを処理するプロセス200の実現例を説明するフローチャートを示す。プロセス200は、エニーキャストアドレスにアドレス指定されたデータパケット10をエニーキャストノード110によって受信するプロセス(ステージ210)と、受信されたデータパケット10をエニーキャストノード110によってロードバランサ120に転送するプロセス(ステージ220)と、データパケットが予めサーブされていたフローまたはセッションに関連付けられているかどうかをロードバランサ120によって判断するプロセス(ステージ230)とを含む。データパケットが予めサーブされていたフローまたはセッションに関連付けられていると判断されると、プロセス200は、予めサーブされていたフローまたはセッションに関連付けられたアプリケーションインスタンスに対してデータパケット10を転送するプロセス(ステージ240)を含む。その他の場合、プロセス200は、複数のサブデータ構造から或るサブデータ構造を選択するプロセス(ステージ250)と、データパケット10のうち1つ以上のヘッダフィールドおよび選択されたサブデータ構造に基づいてアプリケーションインスタンス131を決定するプロセス(ステージ260)と、決定されたアプリケーションインスタンスにデータパケットを転送するプロセス(ステージ270)とを含む。
【0028】
エンドユーザがエニーキャストアドレスに関連付けられたオンラインサービスを要求するかまたは消費すると、当該エンドユーザから送信された対応するデータパケットが同じエニーキャストアドレスにアドレス指定される。1つ以上のエニーキャストノード110は、エニーキャストアドレスにアドレス指定されたデータパケットを受信する(ステージ210)。たとえば、エニーキャストアドレスにアドレス指定された各々のデータパケットは、データパケットのソースに最も近いエニーキャストノード110によって受信される。エニーキャストノードにアドレス指定されたデータパケットを受信する(ステージ210)と、受信側エニーキャストノードは、受信されたデータパケットが予めサーブされていたフローまたはセッション(たとえば既に確立されていた接続)に関連付けられているかどうかを判断するために、接続テーブルをチェックしてもよい。データパケットが既存のフローまたはセッションに関連付けられていると判断される場合、受信側エニーキャストノード110は、既存のフローまたはセッションに関連付けられた次のホップにデータパケットを転送する。接続テーブルのチェックは、受信側エニーキャストノード110以外の別のネットワークエレメントまたはデバイスによって実行され得るので、または、全体がスキップされ得るので、任意となる。
【0029】
フローが予め異なるエニーキャストノードによって実行されているかもしくは受信側エニーキャストノード110によるチェックが実行されていないデータパケットまたは同期(SYN)データパケットなどのデータパケットが既存のフローまたはセッションに関連付けられていないと判断されると、エニーキャストノードはデータパケットをロードバランサ(LB)120に転送する(ステージ220)。データパケットを転送する(ステージ220)際、受信側エニーキャストノード110は、当該受信側エニーキャストノード110に関連付けられたデータパケットおよびサブデータ構造のうちの1つ以上のヘッダフィールド(たとえば、ソースIPアドレス、宛先IPアドレスおよび/またはソースポート)に基づいてロードバランサ120を決定してもよい。また、エニーキャストノード
110は、データパケットをロードバランサ120に転送する前に、データパケットをデカプセル化してもよく、および/または、当該データパケットを1つ以上の新しいヘッダでカプセル化してもよい。
【0030】
データパケットを受信すると、ロードバランサ120は、受信されたデータパケットが予めサーブされていたフローまたはセッション(たとえば既に確立されている接続)に関連付けられているかどうかを判断するために接続テーブルをチェックしてもよい(ステージ230)。データパケットが既存のフローまたはセッションに対応していると判断される場合、LB120は、既存のフローまたはセッションにサーブしているアプリケーションインスタンスに対してデータパケットを転送する(ステージ240)。接続テーブルのチェックは、LB120以外の別のネットワークエレメントまたはデバイスによって実行され得るので、または、その全体がスキップされ得るので、任意となる。
【0031】
フローが予め異なるエニーキャストノードによって実行されているかもしくはLB120によるチェックが実行されていないデータパケットまたは同期(SYN)データパケットなどのデータパケットが既存のフローまたはセッションに関連付けられていないと判断されると、LBは、LB120によって維持されているデータ構造121からサブデータ構造を選択する(ステージ250)。たとえば、データ構造121が単一のテーブルである場合、選択されたサブデータ構造はテーブルの行または列であってもよい。データ構造121が複数のテーブルを含んでいる他の場合には、選択されたサブデータ構造は複数のテーブルからなるテーブルとなる。サブデータ構造の選択は、データパケットのうちのヘッダフィールドに基づいて、および、IPサブネットとシステム100の対応する位置との間におけるサブデータ構造に基づいてなされてもよい。代替的には、選択は、データパケットのヘッダフィールド、およびリストにおける各々のサブデータ構造についての重みを反映しているサブデータ構造のリストに基づいていてもよい。データ構造121における各々のサブデータ構造は、システム100の対応する位置(たとえばクラスタ130またはゾーン)に関連付けられたアプリケーションインスタンス131の冗長リストを表わしている。アプリケーションインスタンス131が対応するサブデータ構造に含まれている頻度は、同じアプリケーションインスタンス131に関連付けられた重み値に依存している。
【0032】
LB120は、次いで、データパケットのうちの1つ以上のヘッダフィールドを用いて、選択されたサブデータ構造からアプリケーションインスタンス131を決定する(ステージ260)。たとえば、LB120は、データパケットのうちの1つ以上のヘッダフィールドを用いてハッシュ値を生成し、次いで、生成されたハッシュ値を用いてサブデータ構造のエントリを決定する。LB120は、サブデータ構造のサイズを法として、生成されたハッシュ値を計算し、その結果を、選択されたエントリについてのインデックスとして用いてもよい。当業者であれば、選択されるべきサブデータ構造のエントリを識別するためにさまざまな方法でデータパケットのヘッダフィールドが用いられ得ることを認識するはずである。選択されたサブデータ構造の各々のエントリは、対応するアプリケーションインスタンス131に関連付けられたIPアドレス(たとえば宛先IPアドレス)を含む。LB120は、次いで、データパケットに関連付けられた要求がサーブされている決定済みアプリケーションインスタンス131に対してデータパケットを転送する(ステージ270)。
【0033】
図3は、エニーキャストアドレスにアドレス指定されたデータトラフィックをロードバランシングするための2層型ロードバランシングシステム300の実現例のブロック図を示す。システム300は、以下において個々にまたは総称してエニーキャストノード310とも称されるエニーキャストリダイレクタノード310a〜310cと、以下において個々にまたは総称して第1層ロードバランサ320とも称される第1層ロードバランサデ
バイス320a〜320cと、以下において個々にまたは総称して第2層ロードバランサ325とも称される第2層ロードバランサ325a〜325cと、以下において個々にまたは総称してクラスタ330とも称される複数のサーバクラスタ、たとえばクラスタ330a〜330cとを含む。クラスタ330a〜330cの各々は、エニーキャストアドレスを通じてアクセスされるサービスに関連付けられたいくつかのアプリケーションインスタンス331を含む。
【0034】
エニーキャストノード310は、対応するエニーキャストアドレスにアドレス指定された受信されたデータパケット10を1つ以上の第1の層LB320のうち或る第1の層LB320に転送するように構成される。エニーキャストノード310は、エニーキャストノード310に関連付けられたデータパケット10およびサブデータ構造のうちの1つ以上のヘッダフィールド(たとえばソースIPアドレス、宛先IPアドレスおよび/またはソースポート)に基づいてデータパケットを転送するための第1の層LB320を決定する。また、エニーキャストノード310は、データパケットを選択された第1の層LB320に転送する前に、データパケットをデカプセル化してもよく、および/または、当該データパケットを1つ以上の新しいヘッダでカプセル化してもよい。さらに、エニーキャストノード310は、
図1に関連付けて説明されたエニーキャストノード110と同様に、データパケットを受信したときに接続テーブルをチェックしてもよい。
【0035】
いくつかの実現例においては、各々の第1の層LB320は、受信されたデータパケットをそれぞれの第2の層LB325にマッピングするための第1のデータ構造321を含む。場合によっては、第1のデータ構造321は、各々の第2の層LB325が第1のデータ構造に含まれている頻度が同じ第2の層LB325または対応する位置に関連付けられている重み値に依存するように、第2の層LB325の冗長リストを含む。たとえば、重みは、各々の対応する位置における利用可能容量、RTTを、各々の対応する位置、別のロードバランシング基準またはそれらの組合せに反映させてもよい。第1の層LB320は、データパケット10のうちの1つ以上のヘッダフィールドに基づいて、対応する第1のデータ構造321から第2の層LB325を選択する。第1の層LB325は、次いで、選択された第2の層LB325にデータパケット10を転送する。場合によっては、第1の層LB320は、データパケット10のヘッダフィールドを用いてハッシュ値を生成し、生成されたハッシュ値に基づいて、第1のデータ構造321から第2の層LB325を選択する。他の場合には、第1の層LB320による第2の層LB325の選択は、
図2に関連付けて説明されるように、サブデータ構造の選択と同様に実行されてもよい(ステージ250)。第1の層LB320による第2の層LB325の選択は、(
図2におけるステージ230、ステージ240およびステージ250と同様に)第1の層LB320による接続テーブルのチェックに依存してもよい。
【0036】
各々の第2の層LB325は、システム300の位置(たとえばゾーンまたはクラスタ330)に関連付けられており、システム300の同じ位置に関連付けられた対応する第2のデータ構造326を含む。第2のデータ構造326は、同じ位置に関連付けられたアプリケーションインスタンスの冗長リストを含む。各々のアプリケーションインスタンスが第2のデータ構造326に含まれている頻度は、同じアプリケーションインスタンスに関連付けられた重み値を反映している。このような重みは、各々のアプリケーションインスタンスにおいて利用可能な容量、RTTを、各々のアプリケーションインスタンス、他のロードバランシング基準またはそれらの組合せに反映させてもよい。選択された第2の層LB325は、データパケット10を受信し、データパケット10のうちの1つ以上のヘッダフィールドに基づいて対応する第2のデータ構造326からアプリケーションインスタンスを決定する。たとえば、第1の層LB320は、データパケット10のうちのヘッダフィールドを用いてハッシュ値を生成し、生成されたハッシュ値に基づいて第1のデータ構造321から第2の層LB325を選択する。いくつかの実現例においては、第2
のデータ構造326の各々のエントリは、対応するアプリケーションインスタンスに関連付けられたIPアドレス(たとえば宛先IPアドレス)を含む。生成されたハッシュ値は、IPアドレスを選択する際に、第2のデータ構造におけるエントリのインデックスとして用いることができる。第2の層LB325は、次いで、決定されたアプリケーションインスタンスにデータパケット10を転送する。
【0037】
各々のクラスタ330は、1つ以上のサービスに関連付けられたアプリケーションインスタンスを維持する1つ以上のコンピュータサーバ(たとえばコンテンツデリバリサーバおよび/またはアプリケーションサーバ)を含む。
図3においては、クラスタ330a〜330cの各々は、システム300に到達したときにデータパケット10がアドレス指定されていたエニーキャストアドレスを通じてアクセスされたアプリケーションまたはサービスに関連付けられたいくつかのアプリケーションインスタンス331を含む。所与のクラスタ330におけるアプリケーションインスタンス331は、単一のコンピュータサーバに常駐してもよく、または、同じクラスタ330の複数のコンピュータサーバ間で分散させられてもよい。アプリケーションインスタンス331は対応する宛先IPアドレスを介してアドレス指定される。データパケット10を受信するアプリケーションインスタンス331は、データパケット10に関連付けられた要求を処理する。
図3に示されるように、システム300の各々のクラスタ330またはゾーンは1つ以上の第2の層LB325によってサーブされてもよい。たとえば、クラスタ330aが第2の層LB325aによってサーブされており、クラスタ330bが2つの第2の層LB325bおよびLB325b′によってサーブされている。
【0038】
図4は、2層型ロードバランシングシステム300の別の実現例のブロック図を示す。例示を容易にするために、
図4に示されるブロック図は、システム300のうち、単一のエニーキャストノード310、2つの第1の層LB320aおよび320b、2つの第2の層LB325aおよび325b、ならびに2つのクラスタ330aおよび330bだけを示している。システム300はまた、第1のコントローラ312、第2のコントローラ322、第3のコントローラ327およびグローバルロードバランシングコントローラ350を含む。
【0039】
第1のコントローラ312は、ネットワークエレメント、コンピュータサーバまたは別の電子デバイスを含む。第1のコントローラ312はエニーキャストノード310を構成する。当該エニーキャストノード310は、ソースIPマップ、接続テーブルなどの情報、および/または、対応するエニーキャストアドレスにアドレス指定された受信済みデータパケット10を処理する際にエニーキャストノード310によって用いられる他の情報を含む。第1のコントローラ312は、システム300の1つ以上のデータベースまたは他のデバイスからこのような情報を取得し、対応する更新をエニーキャストノード310に提供してもよい。
【0040】
第2のコントローラ322はネットワークエレメント、コンピュータサーバまたは別の電子デバイスを含む。第2のコントローラ322は、システム300の各々の位置(たとえばクラスタ330またはゾーン)に関連付けられた重みなどの情報;システム300の位置にデータパケットをルーティングするためのルーティング情報;接続テーブル;および/または、受信されたデータパケット10を処理する際に第1の層LB320によって用いられる他の情報、を提供することによって、第1の層LB320aおよび320bを構成する。第2のコントローラデバイス322は、システム300のうちのグローバルロードバランシングコントローラ350、1つ以上のデータベースまたは他のデバイスからこのような情報を獲得し、対応する更新を第1の層LB320に提供してもよい。
【0041】
第3のコントローラ327は、ネットワークエレメント、コンピュータサーバまたは別
の電子デバイスを含む。第3のコントローラ327は、システム300の対応する位置における各々のアプリケーションインスタンス331に関連付けられた重みなどの情報;データパケット10をアプリケーションインスタンス331にルーティングするためのルーティング情報;および/または、受信されたデータパケット10を処理する際に第2の層LB320によって用いられる他の情報;を提供することによって、第2の層LB325aおよび325bを構成する。第3のコントローラ327は、システム300のうちの1つ以上のデータベースまたは他のデバイスからこのような情報を獲得し、対応する更新を第2の層LB320に提供してもよい。
【0042】
図4においては、システム300のさまざまなコンポーネント間における実線は、(データ面とも称される)データパケット経路を示し、破線は、(制御面とも称される)構成情報/指示のフローを示し、破断線は、(制御面の一部でもあり得る)フィードバック経路を示す。いくつかの実現例においては、第1の層LB320が、システム300のうちのある位置または対応する第2の層LB325にデータパケットを転送するたびに、第1の層LB325はこの転送をグローバルロードバランシングコントローラ350に報告する。また、第2の層LB325が、システム300のグローバルロードバランシングコントローラ350および/または別のデバイスにデータパケット10の転送を報告してもよい。グローバルロードバランシングコントローラ350は、第1の層LB320によって報告された情報を用いて、システム300のさまざまな位置に関連付けられる重みを更新する。第2の層LB325によって報告される情報は、グローバルロードバランシングコントローラ350によって、または第2の層LB325に関連付けられた位置においてローカルなデバイスによって用いられて、さまざまなアプリケーションインスタンス331に関連付けられた重みを更新する。いくつかの実現例においては、クラスタ330は、そのサーバまたはアプリケーションインスタンス331のステータス情報をシステム300におけるグローバルロードバランシングコントローラ350および/または他のデバイスに提供するように構成され得る。システム300におけるグローバルロードバランシングコントローラ350または別のデバイスは、クラスタ330によって報告された情報を用いて、さまざまなアプリケーションインスタンス331に関連付けられた重みを更新することができる。いくつかの実現例においては、グローバルロードバランシングコントローラ350はまた、リンク輻輳に関するデータをルータおよび/またはネットワークエレメントから取得する。
【0043】
図5は、2層型ロードバランシングシステム300によって実行される、エニーキャストデータパケットを処理するプロセス500の実現例を説明するフローチャートを示す。プロセス200は、エニーキャストアドレスにアドレス指定されたデータパケット10をエニーキャストノード310によって受信するプロセス(ステージ510)と;受信されたデータパケット10をエニーキャストノード310によって第1の層LB320に転送するプロセス(ステージ520)と;予めサーブされていたフローまたはセッションにデータパケットが関連付けられているかどうかを第1の層LB320によって判断するプロセス(ステージ530)と;予めサーブされていたフローまたはセッションにデータパケット10が関連付けられていると判断される場合、予めサーブされていたデータフローまたはセッションに関連付けられたアプリケーションインスタンスにデータパケット10を転送するプロセス(ステージ540)と;そうでない場合、第1の層LB320によって維持される第1のデータ構造およびデータパケット10のうちの1つ以上のヘッダフィールドに基づいて第2の層LB325を選択するプロセス(ステージ550)と;選択された第2の層LB325にデータパケットを転送するプロセス(ステージ560)と;第2の層LB325によって維持される第2のデータ構造およびデータパケット10のうちの1つ以上のヘッダフィールドに基づいて、選択された第2の層LB325によってアプリケーションインスタンス331を決定するプロセス(ステージ570)と;決定されたアプリケーションインスタンスにデータパケットを転送するプロセス(ステージ580)と
;を含む。
【0044】
プロセス500のステージ510〜540は、(
図3および
図4に示される)第1の層LB325が(
図1に示される)ロードバランサ120の代わりに用いられている点を除いては、
図2に関連付けて記載されたプロセス200のステージ210〜240と同様である。また、接続テーブルのチェックが第1の層LB320以外の別のデバイスによって実行され得るので、ステージ530および540は任意である。データパケット10を受信する第1の層LB320は、第1の層LB320によって維持される第1のデータ構造321およびデータパケット10のうちの1つ以上のヘッダフィールドに基づいて第2の層LB325を選択する(ステージ550)。第1のデータ構造321は、システム300における第2の層LB325または対応する位置(たとえばクラスタ330もしくはゾーン)の冗長リストを含む。各々の第2の層LB325または対応する位置が第1のデータ構造321に含まれている頻度は、同じ対応する位置に関連付けられた重み値に依存している。重みは、各々の対応する位置における利用可能な容量、RTTを、各々の対応する位置、別のロードバランシング基準またはそれらの組合せに反映させてもよい。場合によっては、第1の層LB320は、データパケット10のヘッダフィールドを用いてハッシュ値を生成し、生成されたハッシュ値に基づいて第1のデータ構造321から第2の層LB325を選択する。たとえば、第1の層LB320は、第1のデータ構造から選択されるべきエントリのインデックスとして、第1のデータ構造のサイズを法として、生成されたハッシュ値を用いる。第1の層LB320は、次いで、データパケットを、選択された第2の層LB325に、または、選択された位置に関連付けられた第2の層LB325に転送する(ステージ560)。
【0045】
データパケット10を受信する第2の層LB325は、第2の層LB325によって維持される第2のデータ構造326およびデータパケット10のうちの1つ以上のヘッダフィールドに基づいて、アプリケーションインスタンス331を決定する(ステージ570)。第2のデータ構造326は、アプリケーションインスタンス331の冗長リストを含む。各々のアプリケーションインスタンス331が第2のデータ構造326に含まれている頻度は、アプリケーションインスタンス331に関連付けられた重み値に依存している。重みは、各々の対応するアプリケーションインスタンス331における利用可能な容量、RTTを、各々の対応するアプリケーションインスタンス331、他のロードバランシング基準またはそれらの組合せに反映させてもよい。第2の層LB325は、データパケット10のヘッダフィールドを用いてハッシュ値を生成し、生成されたハッシュ値に基づいて第2のデータ構造326からアプリケーションインスタンス331を決定する。たとえば、第2の層LB325は、第2のデータ構造326から選択されるべきエントリのインデックスとして、第2のデータ構造326のサイズを法として、生成されたハッシュ値を用いる。第2の層LB325は、次いで、決定されたアプリケーションインスタンス331にデータパケット10を転送する(ステージ580)。
【0046】
図6は、ロードバランサによって用いられる冗長リストを生成するためのプロセス600の実現例を説明するフローチャートを示す。たとえば、エンティティの各々が対応する重み値に関連付けられているリストを想定すると、リストにおけるエンティティの数よりも大きい素数は、生成されるべき冗長リストのサイズとして選択される。プロセス600を実行するプロセッサは、エンティティの所与のリストにおける各々のエンティティについてのオフセット値およびステップ値を選択する(ステージ610)。プロセッサは、次いで、エンティティの所与のリストからエンティティを選択する(ステージ620)。この選択は、エンティティの(名前、名前の部分、識別ストリングなどの)識別の擬似ランダム置換に基づいて行うことができる。プロセッサは、選択されたエンティティについての冗長リストに既に含まれていたエントリの数を、対応する動的なしきい値と比較する(ステージ630)。たとえば、動的なしきい値は、反復回数を乗じた、選択されたエンテ
ィティに対応する重みとして規定される。既に含まれているエントリの数が動的なしきい値よりも小さいことが判明すると(ステージ630)、プロセッサは、生成されるべき冗長リストにおけるオフセット値によって示される位置が空であるかどうかをチェックする(ステージ640)。オフセット値によって示される位置が空ではないことが判明した場合、プロセッサは、対応するステップ値でオフセット値をインクリメントし、冗長リストのサイズを法として当該インクリメントされた値を切り捨てることによって、オフセット値を更新する(ステージ650)。プロセッサは、次いで、更新されたオフセット値によって示される位置が空であるかどうかをチェックする(ステージ640)。空の位置が検出されるまで、ステージ650および640が繰返される。いずれの時点においても、プロセスの結果(ステージ640)が空の位置を示す場合、プロセッサは、空の位置において選択されたエンティティに対応するエントリを追加する(ステージ660)。選択されたエンティティについてのエントリが冗長リストに追加される(ステージ660)か、または、選択されたエンティティについての既に追加されたエントリの数が動的なしきい値よりも大きいことが判明した(ステージ630)場合、プロセッサは、さらに、所与のリストにおけるすべてのエンティティが現在の繰返しにおいて処理されてしまっているかどうかをチェックする(ステージ670)。所与のリストにおけるすべてのエンティティが処理されてしまっていない場合、プロセッサは、処理すべき所与のリストから新しいエンティティを選択する(ステージ620)。そうでない場合、プロセッサは、繰返し数をインクリメントし(ステージ680)、次いで、処理すべき所与のリストからエンティティを選択する(ステージ620)。プロセッサは、冗長リストがフルになるまで、
図6に示されるステージを繰返す。
【0047】
プロセス600は、1次元テーブル(たとえば行もしくは列、ツリー、サブツリー、または他のデータ構造)として冗長リストを生成する。所与のリストにおけるエンティティは、アプリケーションインスタンス131もしくは331、ロードバランサ120もしくは325、またはロードバランシングシステム100もしくは300の位置であってもよい。生成された冗長リストにおいては、各々のエンティティが繰返される頻度は同じエンティティに対応する重み値に依存している。冗長リストのサイズが所与のリストにおけるエンティティの総数よりもはるかに大きくなるように、たとえば100倍大きくなるように、選択される場合、エンティティが冗長リストに含まれている頻度は対応する重みにほぼ比例するようになる。生成された冗長リストのサイズが所与のリストにおけるエンティティの数と比べて大きければ大きいほど、頻度と同じエンティティの重みとの間の比例関係がより正確になる。
【0048】
図7は、
図1および
図3におけるシステムによって採用されるデータ構造の例を示す。クラスタA(たとえばクラスタ130aまたは330a)の3つのアプリケーションインスタンスA_1、A_2およびA_3、ならびにクラスタB(たとえばクラスタ130bまたは330ba)の3つのアプリケーションインスタンスB_1、B_2およびB_3を考慮すると、
図7におけるテーブルの各々の行は、対応するセットの重みに基づいて生成される、(
図6に示される)プロセス600において17に等しいサイズを有するサンプル出力を示している。たとえば、第1の行は、各々のアプリケーションインスタンスA_1、A_2およびA_3に関連付けられた重みが1.0に等しく、かつ、アプリケーションインスタンスB_1、B_2およびB_3に関連付けられた重みが0.0に等しくなる出力に対応している。いずれかの行から次の行にまで進むと、アプリケーションインスタンスA_1、A_2およびA_3についての重み値は0.1ずつデクリメントされ、アプリケーションインスタンスB_1、B_2およびB_3についての重み値は0.1ずつインクリメントされる。
【0049】
アプリケーションインスタンスに関連付けられた重みが
図7に示されるテーブルにおいて或る1つの行から次の行へと変化するのが低速であるので、この或る1つ行から次の行
までで観察される変化はほんのわずかである。実際には、重みが或る1つの行から次の行へとわずかしか変化しないので、
図7のテーブルの列を調べることによって、各々の列にわたってはほんのわずかな変化しか起こらないことが分かるだろう。
【0050】
図1のクラスタ130aがアプリケーションインスタンスA_1、A_2およびA_3を含み、これらのアプリケーションインスタンスの各々がオーバーフローを経験しているシナリオを検討する。オーバーフロー需要(たとえば20%)は、利用可能な容量を含む次に最も近接するクラスタ(たとえば、アプリケーションインスタンスB_1、B_2およびB_3を含む
図1のクラスタ130b)にリダイレクトされることとなる。そのため、
図1のクラスタ130aに関連付けられたエニーキャストトラフィックに対して、0.8の重み値はアプリケーションインスタンスA_1、A_2およびA_3の各々に関連付けられ、0.2の重み値は、アプリケーションインスタンスB_1、B_2およびB_3の各々に関連付けられている。このような場合、
図7におけるテーブルの第3の行は、
図1のクラスタ130aに関連付けられたサブデータ構造のサンプルを表わしている。また、アプリケーションインスタンスB_1、B_2およびB_3がクラスタ130bに到達するエニーキャストトラフィックにサーブするのに十分な帯域幅を有していると想定すると、これらのアプリケーションインスタンスはすべて、
図1に示されるクラスタ130bに関連付けられたエニーキャストトラフィックに到達したときに1.0の等しい重みを有することとなる。そのため、
図7におけるテーブルの最後の行は、
図1のクラスタ130bに関連付けられたサブデータ構造のサンプルを表わしている。
【0051】
連続する行のいずれかの対を比較すると、或る1つの行から次の行に変化するエントリがほとんどわずかしかないことが観察できる。このような観察は、重み値のわずかな変化(重み値は1つの行から次の行へと±0.1ずつ変化する)がデータ経路に与える影響がほんのわずかであることを示している。小さな重み値に関連付けられた1つのアプリケーションインスタンスを追加または削除することによっても、それぞれの行またはサブデータ構造のエントリに対して与える影響はほんのわずかになるだろう。(
図6に示されるプロセス600を用いて)行またはサブデータ構造が生成される方法では、結果として、(
図1および
図3に示される)それぞれのアプリケーションインスタンス131または331に対する新しい要求の割当てに一貫性が得られる。いくつかの実現例においては、重み値のわずかな変化、および/または、小さな重みに関連付けられたアプリケーションインスタンスの追加/削除により、結果として、データトラフィックの再ルーティング(またはネットワークルータもしくは他のネットワークエレメントにおけるルーティングテーブルの再演算)が行われなくなる。なぜなら、このような変化は、ロードバランシングデータトラフィックにごくわずかな影響しか与えないからからである。
【0052】
アプリケーションインスタンスが
図3のクラスタ330aに関連付けられ、アプリケーションインスタンスB_1、B_2およびB_3が
図3のクラスタ330bに関連付けられている、同様のシナリオ(たとえば上述の段落において記載されるのと同じ重みが用いられている)を考慮すると、
図7におけるテーブルの第3の行は、
図3のクラスタ330aに関連付けられた第2のデータ構造326のサンプルを表わしている。また、
図7におけるテーブルの最後の行は、
図3のクラスタ330bに関連付けられた第2のデータ構造326のサンプルを表わしている。
【0053】
本明細書に記載の主題および動作の実現例は、本明細書に開示された構造およびそれらの構造均等物を含むデジタル電子回路、または有形媒体、ファームウェアもしくはハードウェア上で具体化されたコンピュータソフトウェア、またはこれらの1種以上の組合せで実現することができる。本明細書に記載される主題の実現例は、有形媒体上で具体化された1つ以上のコンピュータプログラムとして、すなわち、データ処理装置によって実行されるかまたはデータ処理装置の操作を制御するために、1つ以上のコンピュータ記憶媒体
にエンコードされたコンピュータプログラム命令の1つ以上のモジュールとして実装することができる。コンピュータ記憶媒体は、コンピュータ読み取り可能な記憶装置、コンピュータ読み取り可能な記憶基板、ランダムまたはシリアルアクセスメモリアレイもしくは装置、または1つ以上のこれらの装置の組合せであってもよく、その中に含まれてもよい。コンピュータ記憶媒体は、1つ以上の別個の要素または媒体(たとえば、複数のCD、ディスクまたは他の記憶装置)であってもよく、その中に含まれてもよい。コンピュータ記憶媒体は、有形且つ非一時的なものであってもよい。
【0054】
本明細書に記載の動作は、1つ以上のコンピュータ読み取り可能な記憶装置に記憶されたデータまたは他のソースから受信したデータに従って、データ処理装置によって実行される動作として実現可能である。プロセスフローおよび論理フローは、専用論理回路、たとえばFPGA(field programmable gate array:フィールドプログラマブルゲートア
レイ)またはASIC(application specific integrated circuit:特定用途向け集積
回路)としても実装され得る装置によって実行可能である。
【0055】
本明細書は、多くの具体的な実現詳細を記載しているが、これらの詳細は、発明または特許請求の範囲を限定するものとして解釈すべきではなく、特定の発明の特定の実現例に必要な特徴の説明として解釈すべきである。また、本明細書の個別の実現例に記載された特定の特徴は、単一の実現例に組み合わせて実施することができる。逆に、単一の実現例の文脈に記載されたさまざまな特徴は、複数の実現例で別個にまたは実現例の適切な組合せで実施することができる。さらに、上述のとおり特定の組合せで動作するものと記載され最初にこのようにクレームされているにも関わらず、場合によっては、クレームされた組合せに含まれた1つ以上の特徴をその組合せから除去してもよく、クレームされた組合せを別の組合せまたはその変形例に加えてもよい。
【0056】
用語「または」を言及する場合、「または」を用いて記載されたいずれの用語も、単一のもの、複数のものおよび記載されたすべてのものを指し得るように、包含的であると解釈されるべきである。「第1」、「第2」および「第3」などの用語は、必ずしも順序を指すものではなく、一般に同様または類似の項目または要素を区別するために用いられるに過ぎない。
【0057】
主題の特定の実現例を記載してきたが、他の実現例も添付の特許請求の範囲内に含まれる。場合によっては、特許請求の範囲に記載された動作は、異なる順序で実行されても、望ましい結果を達成することができる。また、添付の図面に示された工程は、望ましい結果を達成するために、必ずしも図示された特定の順序または順番である必要はない。いくつかの実現例においては、マルチタスクまたは並列処理が利用されてもよい。