(57)【要約】【課題】リソース要求を対応するリソースに会合させる方法、システム、コンピュータプログラム製品を提供する。【解決手段】２重に連結されたソート済リストは、モジュロ算術を用いて両方向に辿られる。ソート済リストは、複数の近接性メトリックに基づいて区分することができる。ノードのルーティングテーブルは、より効率的なルーティングを容易にするため、連合インフラストラクチャのＩＤ空間内で、ノードに対数指標を提供する。メッセージは、リング内のノードにルーティングすることができ、その他の区分化リング内のノードに近接的にルーティングすることができる。【選択図】図４
2006174417.tif 000002
【特許請求の範囲】
【請求項１】
連合インフラストラクチャにおいて、メッセージを宛先ノードに向けてルーティングする方法であって、
受信ノードが、宛先を指示する宛先識別子と共にメッセージを受信する動作であって、前記受信ノードは、双方向ルーティング用に構成されたノードからなるリングに含まれることと、
ノードからなる前記リング内での前記受信ノードの位置に基づいて、前記メッセージを受信すべき次の適切なノードを決定する動作であって、前記次の適切なノードは、前記受信ノードのルーティングテーブル内のその他のルーティングノードより前記宛先に数値的により近く、前記ルーティングテーブルは、ノードからなる前記リング内のその他のノードの対数指標を少なくとも表し、前記ルーティングテーブルは、前記連合インフラストラクチャにおける識別子を生成するための識別子空間を生成するのに利用される基数に少なくとも基づいて入力され、前記受信ノードは、前記受信ノードのルーティングテーブル内のノードと対称的な関係を有することと、
前記メッセージを次の適切な構成要素に送信する動作と、
を備えることを特徴とする方法。
【請求項２】
前記メッセージを受信すべき次の適切なノードを決定する前記動作は、前記受信ノードのルーティングテーブル内のその他のルーティングノードより前記宛先に数値的により近い中間ノードを識別する動作を含むことを特徴とする請求項１に記載の方法。
【請求項３】
中間ノードを識別する前記動作は、前記受信ノードのルーティングテーブルに含まれるノードとして前記中間ノードを識別する動作を含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記メッセージを受信すべき次の適切なノードを決定する前記動作は、前記受信ノードが先にメッセージを送信したノードからステータスメッセージを受信する動作を含むことを特徴とする請求項１に記載の方法。
【請求項５】
ステータスメッセージを受信する前記動作は、ノードプレゼンス情報を含むステータスメッセージを受信する動作を含むことを特徴とする請求項４に記載の方法。
【請求項６】
ステータスメッセージを受信する前記動作は、前記受信ノードによって、異なる次の適切な構成要素を識別させるステータスメッセージを受信する動作を含むことを特徴とする請求項４に記載の方法。
【請求項７】
前記受信ステータスメッセージから、前記受信メッセージは前記受信ノードによってさらに送信されるべきではないことを決定する動作をさらに含むことを特徴とする請求項４に記載の方法。
【請求項８】
前記受信ステータスメッセージから前記メッセージはさらに送信されるべきではないことを決定する前記動作は、前記受信ステータスメッセージから、前記メッセージは少なくとも１つの宛先ノードに配送されたことを決定する動作を含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記受信ステータスメッセージから前記メッセージはさらに送信されるべきではないことを決定する前記動作は、前記メッセージはどのような宛先ノードにも配送されていないことを決定する動作を含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記受信メッセージに関係するステータスメッセージを、前記受信ノードに前記メッセージを送信したノードに送信する動作をさらに備えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記受信メッセージに関係するステータスメッセージを送信する前記動作は、先に受信したステータスメッセージを、前記受信ノードに前記受信メッセージを送信した前記ノードに返信する動作を含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記メッセージを受信すべき次の適切なノードを決定する前記動作は、前記受信ノードを前記次の適切なノードとして識別する動作を含むことを特徴とする請求項１に記載の方法。
【請求項１３】
前記受信ノードを前記次の適切なノードとして識別する前記動作は、前記受信ノードの識別子が前記宛先識別子により近く一致することを決定する動作を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記受信ノードの識別子が前記宛先識別子により近く一致することを決定する前記動作は、前記受信ノードの前記識別子が前記宛先識別子に正確に一致することを決定する動作を含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記受信メッセージを前記受信ノードのすぐ隣のノードに転送する動作であって、前記すぐ隣のノードは、前記受信ノードのカレントリング内に存在することをさらに含むことを特徴とする請求項１３に記載の方法。
【請求項１６】
前記受信メッセージを前記受信ノードのすぐ隣のノードに転送する前記動作は、前記宛先識別子が前記受信ノードと前記受信ノードのすぐ隣の先行ノードの間に収まっていることを決定する動作を含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記受信メッセージを前記受信ノードのすぐ隣のノードに転送する前記動作は、前記宛先識別子が前記受信ノードと前記受信ノードのすぐ隣の後続ノードの間に収まっていることを決定する動作を含むことを特徴とする請求項１５に記載の方法。
【請求項１８】
前記受信ノードの前記すぐ隣のノードが、前記転送メッセージに関係するステータスメッセージを、前記受信ノードに返信する動作をさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１９】
前記受信ノードの前記すぐ隣のノードが、前記ステータスメッセージ内にノードプレゼンス情報を含める動作をさらに含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記受信ノードの前記すぐ隣のノードが前記転送メッセージに関係するステータスメッセージを前記受信ノードに返信する前記動作は、前記受信ノードの前記すぐ隣のノードによって、前記受信ノードが前記メッセージにとっての最良の次の適切なノードであると見なされたことの表示を少なくとも含むステータスメッセージを送信することをさらに含むことを特徴とする請求項１８に記載の方法。
【請求項２１】
前記受信ノードの前記すぐ隣のノードが前記転送メッセージに関係するステータスメッセージを前記受信ノードに返信する前記動作は、ノードプレゼンス情報を含むステータスメッセージを送信することを含むことを特徴とする請求項１８に記載の方法。
【請求項２２】
前記受信ノードの前記すぐ隣のノードが前記転送メッセージに関係するステータスメッセージを前記受信ノードに返信する前記動作は、前記受信メッセージが前記受信ノードによってさらに送信されるべきではないことの表示を含むステータスメッセージを送信することを含むことを特徴とする請求項１８に記載の方法。
【請求項２３】
前記受信ノードを前記次の適切なノードとして識別する前記動作は、前記受信メッセージが、前記受信ノードを前記次の適切なノードとして識別する原因となる動作を含むことを特徴とする請求項１２に記載の方法。
【請求項２４】
前記メッセージを次の適切な構成要素に送信する前記動作は、前記メッセージを前記次の適切なノードに送信する動作を含むことを特徴とする請求項１に記載の方法。
【請求項２５】
前記メッセージを前記次の適切なノードに送信する前記動作は、前記次の適切なノードに送信されている前記メッセージ内に追加のノードプレゼンス情報を含める動作を含むことを特徴とする請求項２４に記載の方法。
【請求項２６】
前記メッセージを次の適切な構成要素に送信する前記動作は、前記受信ノードが前記メッセージの最終宛先として機能する動作を含むことを特徴とする請求項１に記載の方法。
【請求項２７】
前記受信ノードが前記メッセージの最終宛先として機能する前記動作は、前記受信ノードに関連付けられたアプリケーション構成要素に前記メッセージを配送する動作を含むことを特徴とする請求項２６に記載の方法。
【請求項２８】
前記受信メッセージに関連するステータスメッセージを、前記受信ノードに前記受信メッセージを送信したノードに返信する動作をさらに含むことを特徴とする請求項２６に記載の方法。
【請求項２９】
区分されたノードクラスの階層を含む連合インフラストラクチャにおいて、近接性基準に基づいて、メッセージを宛先ノードに向けてルーティングする方法であって、
受信ノードが、宛先識別子および近接性基準と共にメッセージを受信する動作であって、前記近接性基準は、ノードクラスの階層における１つまたは複数のノードクラスを定義し、前記受信ノードは、ノードクラスの前記階層におけるカレントノードクラスの一員であり、前記カレントノードクラスは、ノードクラスの前記階層における前記１つまたは複数のノードクラスの中から選択されることと、
前記受信ノードのルーティングテーブルから適切なノードを識別する動作であって、前記適切なノードは、前記ルーティングテーブル内のその他のルーティングノードより前記宛先に数値的により近いが、近接性基準によって定義された前記１つまたは複数のノードクラス内にまだ存在しており、前記ルーティングテーブルは、近接性基準によって定義された前記１つまたは複数のノードクラス内の、前記連合インフラストラクチャ用のＩＤ空間を生成するのに利用される基数に基づいて入力されたその他のノードの対数指標を少なくとも表すことと、
前記メッセージを次の適切なノードに送信する動作と、
を備えることを特徴とする方法。
【請求項３０】
受信ノードが宛先識別子および近接性基準と共にメッセージを受信する前記動作は、前記受信ノードが、先に定義された部分的に序列化された近接性基準のリストにアクセスする動作を含むことを特徴とする請求項２９に記載の方法。
【請求項３１】
前記受信ノードが先に定義された部分的に序列化された近接性基準のリストにアクセスする前記動作は、先に定義された部分的に序列化された近接性基準のリストを受信する動作を含むことを特徴とする請求項３０に記載の方法。
【請求項３２】
前記メッセージを次の適切なノードに送信する前記動作は、先に定義された部分的に序列化された近接性基準のリストに従って、前記メッセージを前記次の適切なノードに送信する動作を含むことを特徴とする請求項２９に記載の方法。
【請求項３３】
区分されたノードクラスの階層を含む連合インフラストラクチャにおいて、メッセージを満足し得る宛先ノード（ｓｕｆｆｉｃｉｅｎｔ  ｄｅｓｔｉｎａｔｉｏｎ  ｎｏｄｅ）に向けてルーティングする方法であって、
受信ノードが、宛先識別子および近接性基準と共にメッセージを受信する動作であって、前記近接性基準は、ノードクラスの階層における１つまたは複数のノードクラス内の最高位ノードクラスを定義し、前記受信ノードは、ノードクラスの前記階層における少なくともカレントノードクラスの一員であり、前記カレントノードクラスは、ノードクラスの前記階層における前記１つまたは複数のノードクラスの中から選択されることと、
前記メッセージにとって満足し得る宛先ノードを識別する動作であって、前記満足し得る宛先ノードは、前記受信近接性基準によって定義された前記最高位ノードクラスのメンバであり、前記満足し得る宛先ノードは、前記最高位ノードクラスにおいて前記宛先識別子の近傍に存在することと、
前記メッセージを前記満足し得る宛先ノードに送信する動作と、
を備えることを特徴とする方法。
【請求項３４】
満足し得る宛先ノードを識別する前記動作は、前記近接性基準に基づいて、少なくとも前記受信ノードのルーティングテーブルから満足し得る宛先ノードを識別する動作を含むことを特徴とする請求項３３に記載の方法。
【請求項３５】
満足し得る宛先ノードを識別する前記動作は、前記受信ノードに関連するアプリケーション構成要素のアプリケーションロジックが、満足し得る宛先ノードを識別する動作を含むことを特徴とする請求項３３に記載の方法。
【請求項３６】
前記満足し得る宛先ノードが前記最高位ノードクラスにおいて前記宛先識別子の前記近傍に存在することを適格とする動作をさらに含むことを特徴とする請求項３３に記載の方法。
【請求項３７】
前記満足し得る宛先ノードが前記最高位ノードクラスにおいて前記宛先識別子の前記近傍に存在することを適格とする前記動作は、前記受信ノードが、前記受信ノードのルーティングテーブルを用いて、前記最高位ノードクラスにおいて前記宛先識別子に数値的に最も近くもある前記満足し得る宛先ノードをさらに適格とする動作を含むことを特徴とする請求項３６に記載の方法。
【請求項３８】
前記満足し得る宛先ノードが前記受信ノードであることを適格とする動作をさらに含むことを特徴とする請求項３３に記載の方法。
【請求項３９】
複数の階層化して区分されたノードクラスを含むシステムであって、
ノードからなる上位リングであって、ノードからなる前記上位リング内の各ノードは、ソート済リンクリストノード内の位置を示すノード識別子を有するノードからなることと、
ノードからなる第１の低位リングであって、ノードからなる前記第１の低位リング内の各ノードは、ノードからなる第１のサブリストにおけるノード識別子を有し、ノードからなる前記第１のサブリストは、前記第１の低位リング内のノードが前記上位リング内のノードでもあるように、前記ソート済リンクリストから区分され、前記第１のサブリストは、ノードからなるリングをどのように分類すべきかを示す近接性基準に基づいて、前記ソート済リンクリストから区分され、ノードからなる前記第１のリングは、ルーティングされるメッセージトラフィックが、ノードからなる前記第１のリング内でルーティングされる場合に、前記リンクリストに含まれる少なくともいくつかのノードをバイパスできるように構成されるノードからなることと、
ノードからなる第２の低位リングであって、ノードからなる前記第２の低位リング内の各ノードは、ノードからなる第２の異なるサブリストにおけるノード識別子を有し、ノードからなる前記第２のサブリストは、前記第２の低位リング内のノードが前記上位リング内のノードでもあるように、前記ソート済リンクリストから区分され、前記第２のサブリストは、前記近接性基準に基づいて、前記第１の低位リングと前記第２の低位リングが前記上位リングの近接性基準に関して同等に分類されるように、前記ソート済リンクリストから区分され、ノードからなる前記第２のリングは、ルーティングされるメッセージトラフィックがノードからなる前記第２のリング内でルーティングされる場合に、ノードからなる前記第１のリングに含まれる少なくともいくつかのノードをバイパスできるように構成されるノードからなることと、
を備えることを特徴とするシステム。
【請求項４０】
メッセージトラフィックは、ノードからなる前記上位リングに制限されることを特徴とする請求項３９に記載のシステム。
【請求項４１】
メッセージトラフィックは、ノードからなる前記第１の低位リングに制限されることを特徴とする請求項３９に記載のシステム。
【請求項４２】
メッセージトラフィックは、ノードからなる前記第２の低位リングに制限されることを特徴とする請求項３９に記載のシステム。
【請求項４３】
前記システムは、ノードからなる前記上位リングにおいて宛先ノードに向けられたメッセージが、前記メッセージのルーティングがノードからなる前記上位リングにおいて継続される前に、ノードからなる前記第１の低位リングにおいて可能な限り前記宛先ノードに向って前進するように構成されることを特徴とする請求項３９に記載のシステム。
【請求項４４】
前記システムは、ノードからなる前記上位リングにおいて宛先ノードに向けられたメッセージが、前記メッセージのルーティングがノードからなる前記上位リングにおいて継続される前に、ノードからなる前記第２の低位リングにおいて可能な限り前記宛先ノードに向って前進するように構成されることを特徴とする請求項３９に記載のシステム。
【請求項４５】
前記システムは、ノードからなる前記上位リングにおいて宛先ノードに向けられたメッセージが、表された等価のノードクラス内で前記宛先ノードの近傍に存在するノードにおいて前記メッセージが受信された後、前記宛先ノードに関連付けられたアプリケーション構成要素に配送されることができるように構成されることを特徴とする請求項３９に記載のシステム。
【請求項４６】
前記システムは、ノードからなる前記上位リングにおけるノード間のルーティング関係が対称的となるように構成されることを特徴とする請求項３９に記載のシステム。
【請求項４７】
前記システムは、ノードからなる前記上位リングにおけるノード間のルーティング関係が双方向的となるように構成されることを特徴とする請求項３９に記載のシステム。
【請求項４８】
ノードからなる第１のサブリストにおけるノード識別子を有するノードからなる前記第１の低位リング内の各ノードは、ノードからなる上位リングからのノード識別子を有するノードからなる前記第１の低位リング内の各ノードを含むことを特徴とする請求項３９に記載のシステム。
【請求項４９】
ノードからなる第２のサブリストにおけるノード識別子を有するノードからなる前記第２の低位リング内の各ノードは、ノードからなる上位リングからのノード識別子を有するノードからなる前記第２の低位リング内の各ノードを含むことを特徴とする請求項３９に記載のシステム。
【請求項５０】
ノードからなる前記第１の低位リング内の１つまたは複数のノードは、ノードからなる前記第２の低位リングにも含まれることを特徴とする請求項３９に記載のシステム。
【請求項５１】
ノードからなる前記第２の低位リングに含まれる、ノードからなる前記第１の低位リング内の前記１つまたは複数のノードは、ノードからなる前記第２の低位リングにおいて再命名された、ノードからなる前記第１の低位リング内の前記１つまたは複数のノードを含むことを特徴とする請求項５０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リソースへのアクセスに関し、より詳細には、リソース要求を対応するリソースに会合させる（ｒｅｎｄｅｚｖｏｕｓ）ことに関する。
【背景技術】
【０００２】
コンピュータシステムおよび関連技術は、社会の多くの局面に影響を及ぼしている。実際、情報を処理するコンピュータシステムの能力は、われわれの生活および仕事の仕方を様変わりさせた。コンピュータシステムが出現する前は人手によって行われていた多くの作業（例えば、文書処理、スケジューリング、およびデータベース管理）を、今ではコンピュータシステムが当たり前のように実行している。最近では、コンピュータシステムは、相互にまたその他の電子装置に結合されて、有線および無線コンピュータネットワークを形成しており、それを介して、コンピュータシステムおよびその他の電子装置は、電子データを転送することができる。その結果、コンピュータシステムで実行される多くの作業（例えば、音声通信、電子メールアクセス、家庭用電子機器の制御、ウェブブラウジング、および文書印刷）は、有線および／または無線コンピュータネットワークを介する多くのコンピュータシステムおよび／またはその他の電子装置の間の電子通信を含んでいる。
【０００３】
しかし、ネットワークリソースを利用してコンピュータ化された作業を実行するには、コンピュータシステムは、ネットワークリソースを識別し、それにアクセスするための何らかの方法を有していなければならない。そのため、リソースには一般に、リソースを一意に識別し、あるリソースを別のリソースから区別するために利用できる、例えばネットワークアドレスなどの、一意の識別子が割り当てられる。このように、リソースを利用したいと望むコンピュータシステムは、リソースに対応するネットワークアドレスを用いて、リソースに接続することができる。しかし、コンピュータシステムがネットワークリソースのネットワークアドレスを事前に知らない場合、ネットワークリソースにアクセスすることが難しいこともあり得る。例えば、ネットワークプリンタのネットワークアドレスをコンピュータシステム（または別のネットワーク接続されたコンピュータシステム）が知らないのなら、コンピュータシステムは、ネットワークプリンタで文書を印刷することができない。
【０００４】
したがって、事前に知らないリソースをコンピュータシステムが識別（およびアクセス）できるようにする様々なメカニズム（例えば、ドメインネームシステム（「ＤＮＳ」）、アクティブディレクトリ（「ＡＤ」）、分散ファイルシステム（「ＤＦＳ」））が開発されてきた。しかし、様々なコンピュータネットワークを介してアクセス可能なリソース（例えば、装置およびサービス）は大量にあり多様性に富んでいるので、開発者はしばしば、多様な異なる識別およびアクセスメカニズムを実装したアプリケーションを開発するよう求められる。異なるメカニズムは各々、異なる符号化要件（ｃｏｄｉｎｇ  ｒｅｑｕｉｒｅｍｅｎｔ）を有することがあり、１つのアプリケーションで必要とされるすべての機能を開発者に提供しないことがある。
【０００５】
例えば、ＤＮＳは、分散管理アーキテクチャ（すなわち、一元管理を必要としない）であるが、十分には動的でなく、自己組織化を行わず、貧弱なデータおよびクエリモデルしかサポートせず、固定的なルートの組を有している。一方、ＡＤは、十分に動的であるが、一元管理を必要とする。さらに、異なるメカニズムの態様は、互いに互換性をもたないことがある。例えば、ＤＮＳを用いて識別されたリソースは、ＤＦＳルーティングプロトコルと互換性をもたないかもしれない。したがって、開発者は、最適のメカニズムを選択し、その他のメカニズムの利点はなしで済ませるように強いられることがある。
【０００６】
リソースを識別するためのメカニズムは、ピアツーピアネットワークにおいて特に問題の多いものとなり得る。ＤＮＳは、ホスト名をキーとし、ＩＰアドレスを値として、検索要求を実施するのに１組の特別なルートサーバに依存する検索サービスを提供する。さらに、ＤＮＳは、ネームサーバ階層をクライアントが辿れるようにするため、情報（ＮＳレコード）の管理を必要とする。したがって、事前にリソースをＤＮＳに入力しておかなければ、ネットワーク上でリソースを識別することはできない。ネットワークに対するノードの接続および切り離しが頻繁に行われる大規模ネットワークでは、情報の入力に依存するのは必ずしも実用的とは言えない。さらに、ＤＮＳはホストまたはサービスを見つける作業に特化されており、一般にその他のタイプのリソースに適用することはできない。
【０００７】
このような事情のため、これらの短所に対処することを意図して、リソース識別およびアクセス用のその他のメカニズムが開発されてきた。多くのメカニズムは、ＤＮＳより拡張性のある分散検索プロトコルを含んでいる。これらのメカニズムは、様々なノード構成およびルーティングアルゴリズムを使用して、要求を対応するリソースにルーティングし、また検索用の情報を格納する。
【０００８】
これらのメカニズムのうちの少なくとも１つは、ネットワーク内の各ノードにおいてローカルマルチレベル近傍マップ（ｌｏｃａｌ  ｍｕｌｔｉ−ｌｅｖｅｌ  ｎｅｉｇｈｂｏｒ  ｍａｐ）を利用して、メッセージを宛先ノードにルーティングする。このようなメカニズムは必然的に、各ノードが対応するノード木（近傍マップ内のノード）の「ルートノード」となるアーキテクチャに帰着する。メッセージは、１桁ずつＩＤを増やしながら（例えば、＊＊＊６＝＞＊＊４６＝＞＊３４６＝＞２３４６、ただし、＊はワイルドカードを表す）、宛先ＩＤにルーティングされる。これらのタイプのメカニズムは、ルーティングホップがＯ（ｌｏｇ  Ｎ）のルーティング効率をもち、ノードはサイズがＯ（ｌｏｇ  Ｎ）のルーティングテーブルを維持することを要求される。
【０００９】
これらのメカニズムのうちの別の少なくとも１つは、数字を要素とする線形リング（ｌｉｎｅａｒ  ｒｉｎｇ）から取った一意のＩＤをノードに割り当てる。ノードは、直近の後続ノード（ＩＤ値に基づく）を指示するポインタと、直近の後続ノードのＩＤ値＋２ＬのＩＤ値をもつノードを指示するポインタとを含むルーティングテーブルを維持する。これらのタイプのメカニズムも、ルーティングホップがＯ（ｌｏｇ  Ｎ）のルーティング効率をもち、ノードはサイズがＯ（ｌｏｇ  Ｎ）のルーティングテーブルを維持することを要求される。
【００１０】
また別の少なくとも１つのメカニズムは、Ｏ（ｌｏｇ  Ｎｌ／ｄ）のルーティングホップを必要とし、ノードにサイズがＯ（Ｄ）のルーティングテーブルを維持するよう要求する。したがって、これらのどのメカニズムでも、ルーティング効率は、少なくとも部分的に、システム内のノードの数に依存する。
【００１１】
さらに、ＩＤは（これらのメカニズムの少なくともいくつかでは）リング全体に一様に分布させることができるので、リング上のノード間のルーティングがかなり非効率なものとなる少なからぬ可能性が常に存在する。例えば、ルーティングホップは、非常に長い地理的距離を越え、より高価なリンクを越え、または安全性の低いドメインを通り抜けるなどすることもあり得る。さらに、メッセージルーティングが複数のホップを必要とする場合、上記のような事態が複数回起こる少なからぬ可能性が存在する。残念ながら、これらのメカニズムは、（物理的またはその他の観点による）ノード相互の近接性を考慮していない。例えば、リング上のノード分布によっては、メッセージをニューヨークからボストンにルーティングするのに、メッセージをニューヨークから、ロンドン、アトランタ、東京を経由して、それからボストンにルーティングすることが必要となることもあり得る。
【００１２】
そのため、別のより最近のメカニズムの少なくとも１つは、単一のスカラ近接性メトリック（ｓｃａｌａｒ  ｐｒｏｘｉｍｉｔｙ  ｍｅｔｒｉｃ）（例えば、ＩＰルーティングホップまたは地理的距離）として近接性を定義することによって、近接性を考慮している。これらのメカニズムは、ルーティングテーブルのエントリを近接性に基づいて選択するという概念を用いている。各ルーティングテーブルのエントリには多くの「正当な」候補ノードが存在するので、これらのメカニズムは、候補ノードの中から近接性に基づき近いノードを選択しようと試みる。そのため、これらのメカニズムは、与えられたＩＰアドレスをもつノードと自身との「距離」を各ノードが決定できるようにする関数を提供することができる。メッセージは、さらに遠くのノードにルーティングする前に、近接性がより近いノード間でルーティングされて、宛先に向って進んで行く。したがって、リソースの一部を温存することができ、ルーティングはより効率的になる。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかし残念ながら、これらの既存のメカニズムは一般に、とりわけ、ノード間の対称関係（すなわち、第１のノードが第２のノードを自らのパートナであると見なす場合、第２のノードも同様に第１のノードを自らのパートナであると見なす）を提供せず、リング上で（時計回りおよび反時計回りの）双方向にメッセージをルーティングすること、ノードのリンクリスト（ｌｉｎｋｅｄ  ｌｉｓｔ）を複数の近接性メトリックに基づいて区分すること、および複数の近接性メトリック近接性に基づいてメッセージをルーティングすることを可能にしない。したがって、リソース要求を対応するリソースに会合させる（ｒｅｎｄｅｚｖｏｕｓ）ためにこれらのメカニズムを利用するシステム、方法、コンピュータプログラム製品があれば有利であろう。
【課題を解決するための手段】
【００１４】
従来技術が有する上述の問題は、リソース要求を対応するリソースに会合させるための方法、システム、およびコンピュータプログラム製品に関する本発明の原理によって克服される。いくつかの実施形態においては、連合インフラストラクチャ（ｆｅｄｅｒａｔｉｏｎ  ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）に属するノードが区分される。連合インフラストラクチャ内のノードに割り当てられたノードＩＤを含むソート済リンクリストがアクセスされる。ソート済リンクリストを区分するための複数の異なる近接性基準を表す近接性カテゴリ（ｐｒｏｘｉｍｉｔｙ  ｃａｔｅｇｏｒｙ）がアクセスされる。ソート済リンクリストは、第１の近接性基準に基づいて、１つまたは複数の第１のサブリストに区分され、１つまたは複数の第１のサブリストの各々は、ソート済リンクリストに属するノードＩＤの少なくとも部分集合を含む。１つまたは複数の第１のサブリストの中から選択されたある第１のサブリストが、第２の近接性基準に基づいて、１つまたは複数の第２のサブリストに区分され、１つまたは複数の第２のサブリストの各々は、その第１のサブリストに含まれるノードＩＤの少なくとも部分集合を含む。
【００１５】
別の実施形態においては、例えば図３に示されるように、ノードのルーティングテーブル（ｒｏｕｔｉｎｇ  ｔａｂｌｅ）に対して入力を行う。直近の先行ノードが、ルーティングテーブルに挿入される。直近の後続ノードが、ルーティングテーブルに挿入される。適切な近傍ノード識別子が、ルーティングテーブルに挿入され、近傍ノード（ｎｅｉｇｈｂｏｒｈｏｏｄ  ｎｏｄｅ）は、第１の方向およびそれとは反対の第２の方向において、所定または概算の近傍範囲および近傍サイズに基づいて、ソート済リンクリストから識別される。適切なルーティングノード識別子が、ルーティングテーブルに挿入され、ルーティングノード（ｒｏｕｔｉｎｇ  ｎｏｄｅ）は、第１および第２の両方向において、基数（ｎｕｍｂｅｒ  ｂａｓｅ）および連合インフラストラクチャのＩＤ空間のフィールドサイズに基づいて、ソート済リンクリストから識別され、ルーティングノードは、第１および第２の両方向におけるソート済リンクリストの対数指標（ｌｏｇａｒｉｔｈｍｉｃ  ｉｎｄｅｘ）を表す。
【００１６】
また別の実施形態においては、近接性基準を考慮して、ノードのルーティングテーブルに対して入力を行うことができる。カレントノードが参加する階層的に区分された各ルーティングリング（ｒｏｕｔｉｎｇ  ｒｉｎｇ）の先行ノードが、ルーティングテーブルに挿入され、階層的に区分された各ルーティングリングは、対応する近接性基準に基づいて区分され、親リングの双方向リンクリストの少なくとも部分集合を含む。カレントノードが参加する階層的に区分された各ルーティングリングの後続ノードが、ルーティングテーブルに挿入される。カレントノードが参加する階層的に区分された各ルーティングリングの適切な近傍ノードが、ルーティングテーブルに挿入される。カレントノードが参加する階層的に区分された各ルーティングリングの適切なルーティングノードが、ルーティングテーブルに挿入される。
【００１７】
さらに別の実施形態においては、対応する１つまたは複数のノードクラスを定義する１つまたは複数の近接性基準に潜在的に基づいて、メッセージは宛先ノードにルーティングされる。受信ノードは、宛先ノードを表す宛先番号と併せてメッセージを受信し、またオプションで１つまたは複数の近接性基準も受信する。カレントノードクラスのノードに潜在的に属する受信ノードは、対応する先行ノードよりも宛先番号から数値的により遠く、かつ対応する後続ノードよりも宛先番号から数値的により遠いことを決定する。受信ノードに対応するカレントノードクラスのノードに潜在的に属する近傍ノードの組の中には、宛先が存在しないことが決定される。
【００１８】
受信ノードに対応するルーティングテーブルに属する中間ノードが識別され、中間ノードは、対応するルーティングテーブル内のその他のルーティングノードよりも数値的に宛先番号により近い。メッセージは、中間ノードにルーティングされる。中間ノードは、引き続きメッセージをルーティングすることができる。メッセージを受信したノードが、その後続ノードまたは先行ノードのどちらかよりも数値的に宛先番号により近くなったときに、メッセージは最終的に宛先ノードに到着する。１つまたは複数の近接性基準に基づいてルーティングを行う実施形態においては、この数値的な近さは、選択されたノードクラスのノードについてのものとすることができる。
【００１９】
したがって、近接性基準に基づくメッセージのルーティングは、与えられた近接リング（ｐｒｏｘｉｍａｌ  ｒｉｎｇ）（ノードクラス）内において、そのリング内でのルーティングによってはもはや前進できなくなるまで、宛先ノードに漸進的に近づいて行くことにより宛先ノード（ＩＤ）へのルーティングすることを含む。カレントノードＩＤとその後続または先行ノードＩＤとの間に宛先番号があるときに、もはや前進できないという決定を下すことができる。この時点で、カレントノードは、自身が参加するより大きな次の近接リングにおけるパートナノードを介するルーティングを開始する。ルートリングに向って区分化パスを上って行くことによって宛先ノードに漸進的に近づいて行くこのプロセスは、宛先ノードに到着した時点で終了する。
【００２０】
本発明の上記およびその他の目的および特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかとなり、あるいは以下本明細書で説明する本発明を実施することにより学ぶことができるであろう。
【００２１】
本発明の上記およびその他の利点および特徴をさらに明確にするため、本発明のより詳細な説明を、添付の図面に例示された本発明の具体的な実施形態を参照しながら提示する。これらの図面は、本発明の典型的な実施形態を示したものに過ぎず、したがって、本発明の範囲を限定するものと見なすべきではないことは理解されよう。本発明は、添付の図面を用いて、さらに具体的かつ詳細に記述および説明される。
【発明を実施するための最良の形態】
【００２２】
従来技術が有する上述の問題は、リソース要求を対応するリソースに会合させる方法、システム、およびコンピュータプログラム製品に関する本発明の原理によって克服される。いくつかの実施形態においては、連合インフラストラクチャに属するノードが区分される。連合インフラストラクチャ内のノードに割り当てられたノードＩＤを含むソート済リンクリストがアクセスされる。ソート済リンクリストを区分するための複数の異なる近接性基準を表す近接性カテゴリがアクセスされる。ソート済リンクリストは、第１の近接性基準に基づいて、１つまたは複数の第１のサブリストに区分され、１つまたは複数の第１のサブリストの各々は、ソート済リンクリストに属するノードＩＤの少なくとも部分集合を含む。１つまたは複数の第１のサブリストの中から選択されたある第１のサブリストが、第２の近接性基準に基づいて、１つまたは複数の第２のサブリストに区分され、１つまたは複数の第２のサブリストの各々は、その第１のサブリストに含まれるノードＩＤの少なくとも部分集合を含む。
【００２３】
別の実施形態においては、例えば図３に示されるように、ノードのルーティングテーブルに対して入力を行う。直近の先行ノードが、ルーティングテーブルに挿入される。直近の後続ノードが、ルーティングテーブルに挿入される。適切な近傍ノード識別子が、ルーティングテーブルに挿入され、近傍ノードは、第１の方向およびそれとは反対の第２の方向において、所定または概算の近傍範囲および近傍サイズに基づいて、ソート済リンクリストから識別される。適切なルーティングノード識別子が、ルーティングテーブルに挿入され、ルーティングノードは、第１および第２の両方向において、基数および連合インフラストラクチャのＩＤ空間のフィールドサイズに基づいて、ソート済リンクリストから識別され、ルーティングノードは、第１および第２の両方向におけるソート済リンクリストの対数指標を表す。
【００２４】
また別の実施形態においては、近接性基準を考慮して、ノードのルーティングテーブルに対して入力を行うことができる。カレントノードが参加する階層的に区分された各ルーティングリングの先行ノードが、ルーティングテーブルに挿入され、階層的に区分された各ルーティングリングは、対応する近接性基準に基づいて区分され、親リングの双方向リンクリストの少なくとも部分集合を含む。カレントノードが参加する階層的に区分された各ルーティングリングの後続ノードが、ルーティングテーブルに挿入される。カレントノードが参加する階層的に区分された各ルーティングリングの適切な近傍ノードが、ルーティングテーブルに挿入される。カレントノードが参加する階層的に区分された各ルーティングリングの適切なルーティングノードが、ルーティングテーブルに挿入される。
【００２５】
さらに別の実施形態においては、対応する１つまたは複数のノードクラスを定義する１つまたは複数の近接性基準に潜在的に基づいて、メッセージは宛先ノードにルーティングされる。受信ノードは、宛先ノードを表す宛先番号と併せてメッセージを受信し、またオプションで１つまたは複数の近接性基準も受信する。カレントノードクラスのノードに潜在的に属する受信ノードは、対応する先行ノードよりも宛先番号から数値的により遠く、かつ対応する後続ノードよりも宛先番号から数値的により遠いことを決定する。受信ノードに対応するカレントノードクラスのノードに潜在的に属する近傍ノードの組の中には、宛先が存在しないことが決定される。
【００２６】
受信ノードに対応するルーティングテーブルに属する中間ノードが識別され、中間ノードは、対応するルーティングテーブル内のその他のルーティングノードよりも数値的に宛先番号により近い。メッセージは、中間ノードに送信される。中間ノードは、引き続きメッセージをルーティングすることができる。メッセージを受信したノードが、その後続ノードまたは先行ノードのどちらかよりも数値的に宛先番号により近くなったときに、メッセージは最終的に宛先ノードに到着する。１つまたは複数の近接性基準に基づいてルーティングを行う実施形態においては、この数値的な近さは、選択されたノードクラスのノードについてのものとすることができる。
【００２７】
したがって、近接性基準に基づくメッセージのルーティングは、与えられた近接リング（ノードクラス）内において、そのリング内でのルーティングによってはもはや前進できなくなるまで、宛先ノードに漸進的に近づいて行くことにより宛先ノード（ＩＤ）へのルーティングすることを含む。カレントノードＩＤとその後続または先行ノードＩＤとの間に宛先番号があるときに、もはや前進できないという決定を下すことができる。この時点で、カレントノードは、自身が参加するより大きな次の近接リングにおけるパートナノードを介するルーティングを開始する。ルートリングに向って区分化パスを上って行くことによって宛先ノードに漸進的に近づいて行くこのプロセスは、宛先ノードに到着した時点で終了する。
【００２８】
本発明の範囲内にある実施形態は、コンピュータ実行可能命令またはデータ構造をそこに格納して搬送または保持するためのコンピュータ読取り可能媒体も含む。そのようなコンピュータ読取り可能媒体は、汎用または専用コンピュータシステムによってアクセス可能な任意の利用可能媒体とすることができる。例えば、そのようなコンピュータ読取り可能媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭもしくはその他の光ディスク記憶、磁気ディスク記憶もしくはその他の磁気記憶装置、またはコンピュータ実行可能命令、コンピュータ可読命令、もしくはデータ構造の形態をとる所望のプログラムコード手段を搬送もしくは保存するのに使用でき、汎用もしくは専用コンピュータシステムによってアクセスできるその他の任意の媒体を含むことができるが、これらに限定されるものではない。
【００２９】
この説明および添付の特許請求の範囲において、「ネットワーク」は、コンピュータシステムならびに／またはモジュール（例えば、ハードウェアおよび／もしくはソフトウェアモジュール）の間での電子データの移送を可能にする（おそらくは速度が異なる）１つまたは複数のデータリンクとして定義される。情報がネットワークまたは別の通信コネクション（有線、無線、または有線もしくは無線の組合せ）を介してコンピュータシステムに転送または提供される場合、そのコネクションは、コンピュータ読取り可能媒体として適切に見なされる。したがって、そのようなコネクションはどれも、当然ながら、コンピュータ読取り可能媒体と呼ばれる。上記のものの組合せも、コンピュータ読取り可能媒体の範囲内に含まれるべきである。コンピュータ実行可能命令は、例えば、汎用コンピュータシステムまたは専用コンピュータシステムに一定の機能または機能群を実行させる命令およびデータを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間形式命令、またはソースコードにすらすることができる。いくつかの実施形態においては、例えば、専用集積回路またはゲートアレイなどのハードウェアモジュールは、本発明の原理を実施するために最適化される。
【００３０】
この説明および添付の特許請求の範囲において、「ノード」は、電子データに対する操作（ｏｐｅｒａｔｉｏｎ）を実行するために協働する１つもしくは複数のソフトウェアモジュール、１つもしくは複数のハードウェアモジュール、またはそれらの組合せとして定義される。例えば、ノードの定義は、パーソナルコンピュータのオペレーティングシステムなど、ソフトウェアコンポーネントに加えて、パーソナルコンピュータのハードウェアコンポーネントも含む。モジュールの物理レイアウトは重要ではない。ノードは、ネットワークを介して結合された１つまたは複数のコンピュータを含むことができる。同様に、ノードは、電子データに対する操作を実行するために（メモリおよびプロセッサなどの）内部モジュールが協働する、（移動電話または携帯情報端末「ＰＤＡ」などの）単一の物理装置を含むことができる。さらに、ノードは、例えば、専用の集積回路を含むルータなど、専用のハードウェアを含むことができる。
【００３１】
当業者であれば、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な消費者家電、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、移動電話、ＰＤＡ、ポケットベル、ルータ、ゲートウェイ、ブローカ、プロキシ、ファイアウォール、リダイレクタ、およびネットワークアドレス変換器などを含む、多くのタイプのノード構成を有するネットワークコンピューティング環境において、本発明を実施できることが理解されよう。本発明は、ネットワークを介して（有線データリンク、無線データリンク、または有線および無線データリンクの組合せによって）結合されたローカルおよびリモートノードが共にタスクを実行する、分散システム環境においても実施することができる。分散システム環境においては、プログラムモジュールは、ローカルおよびリモートメモリ記憶装置の両方に配置することができる。
【００３２】
連合アーキテクチャ
図１は、連合インフラストラクチャ１００を示したものである。連合インフラストラクチャ１００は、異なるタイプの連合パートナシップ（ｆｅｄｅｒａｔｉｎｇ  ｐａｒｔｎｅｒｓｈｉｐ）を形成できるノード１０１、１０２、１０３を含む。例えば、ノード１０１、１０２、１０３は、ルートノードを用いずに、ピア（ｐｅｅｒ）として互いに連合することができる。各ノード１０１、１０２、１０３は、それぞれ対応するＩＤ１７１、１８２、１９３を有する。
【００３３】
一般に、ノード１０１、１０２、１０３は、パートナシップを形成し、また情報（例えば、他のノードとの対話に関係する状態情報）を交換するために、連合プロトコル（ｆｅｄｅｒａｔｉｏｎ  ｐｒｏｔｏｃｏｌ）を利用することができる。パートナシップの形成、および情報の交換は、リソースへのより効率的かつ信頼性の高いアクセスを容易にする。ノード１０１、１０２、１０３の間には、その他の中間ノード（図示せず）が存在することができる（例えば、１７１と１９３の間のＩＤをもつノード）。したがって、例えば、ノード１０１とノード１０３の間でルーティングされるメッセージは、１つまたは複数のその他の中間ノードを通過させることができる。
【００３４】
連合インフラストラクチャ１００内のノード（その他の中間ノードを含む）は、対応するランデブープロトコルスタック（ｒｅｎｄｅｚｖｏｕｓ  ｐｒｏｔｏｃｏｌ  ｓｔａｃｋ）を含むことができる。例えば、ノード１０１、１０２、１０３は、それぞれ対応するランデブープロトコルスタック１４１、１４２、１４３を含む。各プロトコルスタック１４１、１４２、１４３は、アプリケーションレイヤ（例えば、アプリケーションレイヤ１２１、１２２、１２３）、およびその他の下位レイヤ（例えば、対応するその他の下位レイヤ１３１、１３２、１３３）を含む。ランデブープロトコルスタック内の各レイヤは、リソース要求を対応するリソースに会合させることに関係する異なる機能を担当する。
【００３５】
例えば、その他の下位レイヤは、チャネルレイヤ、ルーティングレイヤ、および機能レイヤを含むことができる。一般に、チャネルレイヤは、１つのエンドポイントから別のエンドポイントに（例えば、ノード１０１からノード１０３に）、（例えば、ＷＳ−ＲｅｌｉａｂｌｅＭｅｓｓａｇｉｎｇおよびシンプルオブジェクトアクセスプロトコル（「ＳＯＡＰ」）を用いて）メッセージを高い信頼性でトランスポートする責務を負う。チャネルレイヤは、着信および発信高信頼メッセージングヘッダを処理し、高信頼メッセージングセッションに関係する状態を維持する責務も負う。
【００３６】
一般に、ルーティングレイヤは、宛先に向うネクストホップを計算する責務を負う。ルーティングレイヤは、着信および発信アドレッシングおよびルーティングメッセージヘッダを処理し、ルーティング状態を維持する責務も負う。一般に、機能レイヤは、参加および離脱要求、ｐｉｎｇ、更新、ならびにその他のメッセージなど、ランデブープロトコルメッセージを発行し、処理する責務のほか、これらのメッセージに対する応答を生成する責務を負う。機能レイヤは、ルーティングレイヤからの要求メッセージを処理し、対応する応答メッセージがある場合は、ルーティングレイヤを利用して発信ノードに返信する。機能レイヤは、要求メッセージを開始し、ルーティングレイヤを利用して要求メッセージを配送させる。
【００３７】
一般に、アプリケーションレイヤは、機能レイヤから配送された非ランデブープロトコル特有データ（ｎｏｎ−ｒｅｎｄｅｚｖｏｕｓ  ｐｒｏｔｏｃｏｌ  ｓｐｅｃｉｆｉｃ  ｄａｔａ）（すなわち、アプリケーションメッセージ）を処理する。機能レイヤは、アプリケーションレイヤからのアプリケーションデータにアクセスすることができ、アプリケーションデータをランデブープロトコルメッセージ（例えば、ｐｉｎｇおよび更新など）から取得し、またランデブープロトコルメッセージに格納することができる。すなわち、機能レイヤは、アプリケーションデータがランデブープロトコルメッセージにピギーバックされるようにすることができ、またランデブープロトコルノードを受信したときに、アプリケーションデータがアプリケーションレイヤに渡されるようにすることができる。いくつかの実施形態においては、アプリケーションデータは、リソースおよびリソース関連物（ｒｅｓｏｕｒｃｅ  ｉｎｔｅｒｅｓｔ）を識別するのに使用される。したがって、アプリケーションレイヤは、リソースおよびリソース関連物を識別する目的で、その他の下位レイヤから受信されたデータおよびその他の下位レイヤに送信されるデータを処理するアプリケーション特有のロジックおよび状態（ｌｏｇｉｃ  ａｎｄ  ｓｔａｔｅ）を含むことができる。
【００３８】
連合メカニズム
ノードは、様々な異なるメカニズムを用いて連合することができる。第１の連合メカニズムは、情報を他のすべてのピアノードに転送するピアノードを含む。ノードは、連合インフラストラクチャに参加しようとするとき、例えば、ＷＳ−Ｄｉｓｃｏｖｅｒｙなどのブロードキャスト／マルチキャスト発見プロトコル（ｂｒｏａｄｃａｓｔ／ｍｕｌｔｉｃａｓｔ  ｄｉｓｃｏｖｅｒｙ  ｐｒｏｔｏｃｏｌ）を利用して、その存在を公表し、ブロードキャスト／マルチキャスト探索（ｂｒｏａｄｃａｓｔ／ｍｕｌｔｉｃａｓｔ  ｆｉｎｄ）を発行して、その他のノードを検出する。次に、ノードは、ネットワーク上にすでに存在しているその他のノードと単純な転送パートナシップ（ｆｏｒｗａｒｄｉｎｇ  ｐａｒｔｎｅｒｓｈｉｐ）を確立し、新規参加ノードとの新しいパートナシップを受け入れる。その後、ノードは、すべてのアプリケーション特有メッセージを、そのパートナノードのすべてに単純に転送する。
【００３９】
第２の連合メカニズムは、アプリケーション特有メッセージをその宛先に最も効率的に送信するピアノードを含む。新規ノードは、連合インフラストラクチャに参加しようとするとき、例えば、ＷＳ−Ｄｉｓｃｏｖｅｒｙなどのブロードキャスト／マルチキャスト発見プロトコルを利用して、その存在を公表し、ブロードキャスト／マルチキャスト探索を発行して、連合インフラストラクチャの構成要素であるその他のノードを検出する。別のノードが検出されると、新規ノードは、その別のノードとパートナシップを確立する。確立されたパートナシップから、新規ノードは、連合インフラストラクチャにすでに参加しているその他のノードの存在を学習する。次に、新規ノードは、これらの新たに学習されたノードとパートナシップを確立し、また新たに着信したパートナシップ要求を受け入れる。
【００４０】
ノード出現／離脱（ｎｏｄｅ  ａｒｒｉｖａｌ／ｄｅｐａｒｔｕｒｅ）および特定のアプリケーション特有メッセージに関する登録は共に、連合インフラストラクチャ内にフラッディングされ、その結果、あらゆるノードが、その他のパートナノードおよびアプリケーション特有メッセージに関する登録についての全体的知識を有する。そのような全体的知識を有することで、どのノードも、アプリケーション特有メッセージを、そのアプリケーション特有メッセージとの関係を表明したノードに直接送信することができる。
【００４１】
第３の連合メカニズムは、すべてのアプリケーション特有メッセージをその宛先に間接的に転送するピアノードを含む。この第３のメカニズムにおいては、ノードには、例えば、１２８ビットまたは１６０ビットの識別子（ＩＤ）など、ＩＤが割り当てられる。与えられたアプリケーション特有メッセージに関する登録を維持する責務を負うノードは、アプリケーション特有メッセージの宛先識別情報（例えば、ＵＲＩ）をこの１２８ビットまたは１６０ビットのＩＤ空間にマッピング（例えば、ハッシュ）することにより取得されたＩＤに最も近いＩＤをもつノードとなるように決定することができる。
【００４２】
この第３のメカニズムにおいては、ノード出現および離脱は、構成全体にフラッディングされる。一方、特定のアプリケーション特有メッセージに関する登録は、そのような登録情報を維持する責務を負うと決定されたノードに転送される。拡張性、負荷バランシング、耐障害性のため、特定のアプリケーション特有メッセージに関する登録を受信するノードは、その近傍集合（ｎｅｉｇｈｂｏｒｈｏｏｄ  ｓｅｔ）内において、その登録情報を高い信頼性でフラッディングすることができる。ある特定ノードの近傍集合は、特定ノードのＩＤの両側に事前に定められた範囲内に収まるＩＤを有するノードの集合となるように決定することができる。
【００４３】
第２のメカニズムと同様に、新規参加ノードは、例えば、ＷＳ−Ｄｉｓｃｏｖｅｒｙなどのブロードキャスト／マルチキャスト発見プロトコルを利用して、その存在を公表し、ローカルブロードキャスト／マルチキャスト探索を発行して、すでに連合インフラストラクチャの構成要素であるノードを検出する。新規ノードは、発見されたノードとパートナシップを確立し、そのパートナシップを用いて、連合インフラストラクチャに参加しているその他の新規ノードの存在について学習する。次に、新規ノードは、新たに発見されたノードとさらにパートナシップを確立し、また新たに着信したパートナシップ要求を受け入れる。新規ノードは、そのパートナから、自らが責務を負う特定のアプリケーションレイヤ特有リソースに関する着信登録を受け入れ、その近傍集合全体にそれらをフラッディングすることができる。したがって、メッセージは一般に、（例えば、新規参加ノードがパートナシップを確立した、またはパートナノードが知っている）中間ルーティングノードを介して、それらの最終宛先に転送されることができる。
【００４４】
着信アプリケーション特有メッセージを受信したことに応答して、新規ノードは、メッセージで指定された宛先についての登録情報を維持する責務を負うことのできるパートナノードにメッセージを転送する。したがって、この第３のメカニズムを使用する場合、連合インフラストラクチャのあらゆるノードは、他のすべてノードについての全体的知識を有するが、登録情報はノード間で効率的に区分される。アプリケーション特有メッセージは、それらのアプリケーション特有メッセージに関する登録情報を維持する責務を負うことのできるパートナノードだけを介して、それらの最終宛先に送信される。したがって、間接送信（ｉｎｄｉｒｅｃｔｉｏｎ）は、処理されるメッセージに関する登録情報についての全体的知識を有するパートナノードにだけ転送することによって達成される。これは、すべてのパートナノードに転送することによって間接送信が達成される第１のメカニズムとは対照的である。
【００４５】
第４の連合メカニズムは、その他のピアノードにメッセージをルーティングするピアノードを含む。この第４のメカニズムは、ノード出現／離脱および特定のアプリケーション特有メッセージに関する登録が共にすべて、フラッディングされる代わりにルーティングされる点で、少なくとも第３のメカニズムとは異なっている。ルーティングプロトコルは、アプリケーション特有メッセージと、それらのアプリケーション特有メッセージとの関係を表明した登録メッセージとの会合（ｒｅｎｄｅｚｖｏｕｓ）を保証するように設計される。
【００４６】
図２は、要求をパートナに間接的にルーティングすることを容易にする、コンピュータアーキテクチャ２００の一例を示したものである。コンピュータアーキテクチャ２００は、連合インフラストラクチャに参加している、潜在的に複数のローカル発見範囲（ｌｏｃａｌ  ｄｉｓｃｏｖｅｒｙ  ｓｃｏｐｅ）に分散する異なるタイプのコンピュータシステムおよび装置を示している。
【００４７】
ワークステーション２３３は、登録されたＰｎＰプロバイダインスタンス（ＰｎＰ  ｐｒｏｖｉｄｅｒ  ｉｎｓｔａｎｃｅ）を含むことができる。このＰｎＰプロバイダインスタンスの存在をパートナに通知するため、ワークステーション２３３は、連合インフラストラクチャを介して登録要求２０１をルーティングする。登録要求２０１は、最初にラップトップ２３１に転送され、次に、ラップトップ２３１が、登録要求２０１をメッセージブローカ２３７に転送し、さらに、メッセージブローカ２３７が、登録要求２０１をメッセージゲートウェイ２４１に転送する。メッセージゲートウェイ２４１は、そのデータベースに登録情報登録要求２０１を保存し、ワークステーション２３３に成功メッセージ２０４を返信する。
【００４８】
その後、今度は実行サービスのプロバイダインスタンスである、別の登録されたプロバイダインスタンスが、ワークステーション２３３内で活動化される。今度は、ノードは、メッセージゲートウェイ２４１が登録を担当していることを知っており、登録要求２０５をメッセージゲートウェイ２４１に直接転送する。メッセージゲートウェイ２４１は、そのデータベースに登録情報登録要求２０５を保存し、ワークステーション２３３に成功メッセージ２０６を返信する。
【００４９】
その後、プリンタ２３６（例えば、ＵＰｎＰプリンタ）に電源が入れられ、プリンタ２３６がアナウンスメント２０７を送信する。サーバ２３４は、アナウンスメント２０７を検出し、登録要求２０８をメッセージブローカ２３７にルーティングする。メッセージブローカ２３７は、登録要求２０８をメッセージゲートウェイ２４１に転送する。メッセージゲートウェイ２４１は、そのデータベースに登録情報登録要求２０８を保存し、サーバ２３４に成功メッセージ２１０を返信する。
【００５０】
その後、パーソナルコンピュータ２４２が、すべての装置を発見するために、検索要求２１１を発行する。パーソナルコンピュータ２４２は、検索要求２１１をどこに転送すべきか知らないので、ワークステーション２４３を介して、検索要求２１１をルーティングする。登録および検索要求は同一の宛先にルーティングされるので、ルーティングプロトコルは、２つの要求の会合を本質的に保証し、その結果、ワークステーション２４３は、探索要求２１１をメッセージゲートウェイ２４１に転送する。メッセージゲートウェイ２４１は、維持している登録情報を検索し、探索要求２１１をワークステーション２３３およびサーバ２３４の両方に転送する。ワークステーション２３３およびサーバ２３４は、それぞれ応答メッセージ２１４および２１６をパーソナルコンピュータ２４２に送信する。
【００５１】
この第４のメカニズムは、要求において指定された登録についての全体的知識を有するノード（メッセージゲートウェイ２４１）に、要求を（フラッディングする代わりに）ルーティングすることによって機能する。この第４のメカニズムは、以下により詳しく説明するように、Ｎを連合インフラストラクチャに参加しているノードの数として、Ｏ（ｌｏｇ  Ｎ）のホップでルーティングを達成できることを本質的に保証する。この第４のメカニズムは、ノード参加および登録情報の両者を本質的に区分するので、非常に大規模なネットワークに対しても、インターネットに対してすらも拡張性がある。
【００５２】
いくつかの連合メカニズムについて説明してきたが、その他の連合メカニズムも可能であることは、この説明を再検討してみれば、当業者には明らかであろう。
【００５３】
連合内におけるノード間の関係
したがって、連合は、情報が体系的かつ効率的に分散および配置された、動的で拡張性のあるネットワークを形成するために、互いに連携するノードの集合から構成される。ノードは、２項関係（ｂｉｎａｒｙ  ｒｅｌａｔｉｏｎ）を用いてソートされたリストとして連合に参加するように組織され、この２項関係は、反射的（ｒｅｆｌｅｘｉｖｅ）、非対称的、推移的、全体的であり、ノード識別情報の領域上で定義される。ソート済リストの両端は結合され、それによって、リングを形成する。したがって、リスト内の各ノードは、（モジュロ算術（ｍｏｄｕｌｏ  ａｒｉｔｈｍｅｔｉｃ）を用いた結果）自らをソート済リストの中央にあると見なすことができる。さらに、リストは、どのノードもリストを両方向に辿れるように２重に連結される。
【００５４】
各連合ノードには、０からある一定の上限の間にあるＩＤの固定集合から、（例えば、重複検出を備えた乱数発生器によって）ＩＤを割り当てることができる。したがって、一定の上限に等しいＩＤに１を加算すると、ＩＤは０になる（すなわち、リンクリストの末尾からリンクリストの先頭に移動する）。さらに、ノード識別情報の値領域からノード自身への１：１のマッピング関数が定義される。
【００５５】
図３は、リンクリスト３０４および対応するリング３０６の一例を示したものである。そのようなリングを所与として、以下の関数を定義することができる。
【００５６】
ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）：ノード識別情報の値領域に属する値Ｖおよびメッセージ「Ｍｓｇ」を与えたときに、識別情報がマッピング関数を用いてＶにマッピングされ得るノードＸにメッセージを配送する。
【００５７】
Ｎｅｉｇｈｂｏｒｈｏｏｄ（Ｘ，Ｓ）：ＮｅｉｇｈｂｏｒｈｏｏｄはノードＸの両側に存在するノードの集合であり、その要素数（ｃａｒｄｉｎａｌｉｔｙ）はＳに等しい。
【００５８】
連合内のあらゆるノードがリングの全体的知識を有する場合、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）は、マッピング関数をＶに適用することによってその識別情報が取得されるノードＸに、Ｍｓｇを直接送信することによって実施される。あるいは、ノードがその他のノードについての限定的な（例えば、すぐ隣のノードだけの）知識しか有さない場合、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）は、宛先ノードＸに辿り着くまで、リングに沿って連続するノードにメッセージを転送することによって実施される。
【００５９】
あるいは（そして有利には）、ノードは、（全体的知識をもつ必要なしに、またはすぐ隣のノード間でルーティングを実施する必要なしに）分散２分探索（ｄｉｓｔｒｉｂｕｔｅｄ  ｂｉｎａｒｙ  ｓｅａｒｃｈ）を実行するのに十分なリングについての知識を記憶することができる。リング知識の量は、リング知識を維持することで各ノードが受ける影響は十分に小さいのに、ルーティングホップ数の減少によるルーティング性能の向上が可能となるように設定することができる。
【００６０】
先に説明したように、ＩＤは、自然数の十分に大きな有限集合、つまり、その範囲が０以上ある一定数以下の有限な数の組にわたる集合上で定義された「＜」（より小さい）関係を用いて割り当てることができる。したがって、連合に参加するあらゆるノードには、０以上適切に選択された上限以下の自然数が割り当てられる。その範囲は埋め尽くされている必要はなく、ノードに割り当てられた数の間にギャップがあってもよい。ノードに割り当てられた数は、リング内でのノード識別情報として使用される。マッピング関数は、２つのノード識別情報の間にある数を、その数に数値的に最も近い識別情報をもつノードにマッピングすることによって、数空間中のギャップの原因となる。
【００６１】
この手法は様々な利点を有する。各ノードに一様分布した数を割り当てることによって、リングのすべてのセグメントが一様に埋められる可能性が高くなる。さらに、後続、先行、および近傍の計算を、モジュロ算術を用いて効率的に実行することができる。
【００６２】
いくつかの実施形態においては、連合ノードには、（例えば、乱数発生が用いられる場合）広大であるため２つのノードが同じＩＤに割り当てられる可能性がきわめて低いＩＤ空間内からＩＤが割り当てられる。例えば、ノードは、ｂが例えば８または１６に等しく、ｎが例えば１２８ビットまたは１６０ビット相当の桁数に等しいとして、０からｂｎ−１の範囲内のＩＤに割り当てることができる。したがって、ノードには、例えば、０から１６４０−１（すなわち、約１．４６１５０２Ｅ４８）の範囲に属するＩＤを割り当てることができる。０から１６４０−１の範囲は、例えば、インターネット上のあらゆるノードに一意のＩＤを割り当てるのに十分な数のＩＤを提供する。
【００６３】
したがって、連合内の各ノードは、
０からｂｎ−１の範囲内に一様に分布する数値であるＩＤと、
ルーティングテーブルであって、
後続ノード（ｓ）と、
先行ノード（ｐ）と、
ｓｊ．ｓ．ｉｄ＞（ｉｄ＋ｕ／２），ｊ≧ｖ／２−１かつｐｋ．ｐ．ｉｄ＜（ｉｄ−ｕ／２），ｋ≧ｖ／２−１であるような、近傍ノード（ｐｋ，．．，ｐ１，ｐ，ｓ，ｓ１，．．，ｓｊ）と、
ｒ±ｉ＝ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（ｉｄ±ｂｉ，Ｍｓｇ）であるような、ルーティングノード（ｒ−（ｎ−１），．．，ｒ−１，ｒ１，．．，ｒｎ−１）とから構成されるルーティングテーブル（すべての計算はｂｎを法として実行される）とを有することができる。ここで、ｂは基数、ｎは桁数で表したフィールドサイズ、ｕは近傍範囲、ｖは近傍サイズであり、計算はｂｎを法として実行される。良好なルーティング効率および耐障害性のため、ｕおよびｖの値は、Ｎを連合に物理的に参加しているノードの総数として、ｕ＝ｖかつｖ≧ｍａｘ（ｌｏｇ２（Ｎ），４）とすることができる。Ｎは、例えば、ＩＤが一様に分布している場合、長さがｂ以上であるリングセグメント上に存在するノードの数から推定することができる。ｂおよびｎの典型的な値は、ｂ＝８または１６、ｎ＝１２８ビットまたは１６０ビット相当の桁数である。
【００６４】
したがって、ルーティングノードは、リング全体にわたる対数指標を形成することができる。リング上でのノードの位置に応じて、例えば、ｉｄ±ｂｉ、ｉ＝（１，２，．．．，（ｎ−１））を要素とする集合内の各数の位置に既存ノードが存在する場合、対数指標は正確であることができる。しかし、集合内の各数の位置に既存ノードが存在しないこともあり得る。そのような場合、ｉｄ±ｂｉに最も近いノードを、ルーティングノードとして選択することができる。その結果の対数指標は正確ではなく、集合内のいくつかの数では一意のルーティングノードがないことすらあり得る。
【００６５】
再び図３を参照すると、図３は、ソート済リスト３０４および対応するリング３０６の形態をとる、連合インフラストラクチャ内のノード間の２項関係の一例を示している。ソート済リスト３０４のＩＤ空間は、０から２８−１（すなわち、２５５）の範囲にある。すなわち、ｂ＝２かつｎ＝８である。したがって、図３に示されたノードには、０から２５５の範囲内のＩＤが割り当てられる。ソート済リスト３０４は、２項関係を利用し、この２項関係は、反射的、非対称的、推移的、全体的であり、ノード識別情報の領域上で定義される。ソート済リスト３０４の両端は結合され、それによって、リング３０６を形成する。これによって、図３の各ノードは、自らをソート済リスト３０４の中央にあると見なすことができる。ソート済リスト３０４は、どのノードもソート済リスト３０４を両方向に辿れるように２重に連結される。ソート済リスト３０４（またはリング３０６）を辿るための計算は、２８を法として実行される。したがって、２５５（すなわち、ソート済リスト３０４の末尾）＋１＝０（すなわち、ソート済リスト３０４の先頭）である。
【００６６】
ルーティングテーブルは、ＩＤ６４の後続ＩＤがＩＤ７２（ＩＤ６４から時計回りにすぐ次のＩＤ）であることを示している。後続ＩＤは、例えば、（例えばＩＤが７１の）新規ノードが参加したり、または（例えばＩＤ７６の）既存ノードが連合インフラストラクチャから離脱したりした場合に変化し得る。同様に、ルーティングテーブルは、ＩＤ６４の先行ＩＤがＩＤ５０（ＩＤ６４から反時計回りにすぐ次のＩＤ）であることを示している。先行ＩＤは、例えば、（例えばＩＤが５９の）新規ノードが参加したり、または（例えばＩＤ５０の）既存ノードが連合インフラストラクチャから離脱したりした場合に変化し得る。
【００６７】
ルーティングテーブルはさらに、ＩＤ６４の近傍ノードの集合が、ＩＤ８３、７６、５０、および４６を含むことを示している。近傍ノードの集合は、ＩＤ６４の指定された範囲（すなわち、近傍範囲ｕ）内にある指定された数（すなわち、近傍サイズｖ）のノードとすることができる。近傍ノードの集合を識別するのに、例えば、Ｖ＝４かつＵ＝１０など、可能性としては様々な異なる近傍サイズおよび近傍範囲を使用することができる。近傍ノードの集合は、例えば、ノードが連合インフラストラクチャに参加したり、もしくは離脱したりした場合、または指定されたノード数もしくは指定された範囲が変更された場合に変化し得る。
【００６８】
ルーティングテーブルはさらに、ＩＤ６４が、ＩＤ２００、２、３０、４６、５０、６４、６４、６４、６４、７６、８３、９８、１３５、および２００をもつノードにルーティングできることを示している。このリストは、ｉｄ±２ｉ、ｉ＝（１，２，３，４，５，６，７）を要素とする集合の各数に最も近いノードを識別することによって生成される。すなわち、ｂ＝２、ｎ＝８である。例えば、ＩＤ７６をもつノードは、６４＋２３、すなわち７２に最も近いノードを計算することから識別することができる。
【００６９】
ノードは、メッセージ（例えば、リソースへのアクセスを求める要求）を、先行ノード、後続ノード、近傍ノード集合内の任意のノード、または任意のルーティングノードに直接ルーティングすることができる。いくつかの実施形態においては、ノードは、メッセージをルーティングするために、数値的ルーティング関数を実施する。したがって、ＩＤが数値的にＶに最も近い連合インフラストラクチャ内のノードＹにＭｓｇを配送し、ノードＹのＩＤをノードＸに返すために、ノードＸにおいてＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）を実施することができる。例えば、ＩＤ６４をもつノードは、ＩＤ２５０をもつノードにメッセージがルーティングされるように、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（２４３，Ｍｓｇ）を実施することができる。しかし、ＩＤ２５０はＩＤ６４のルーティングノードではないので、ＩＤ６４は、ＩＤ２（２４３に最も近いルーティングノード）にメッセージをルーティングすることができる。今度は、ＩＤ２をもつノードが、ＩＤ２５０をもつノードにメッセージが（直接またはさらに中間ノードを介して）ルーティングされるように、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（２４３，Ｍｓｇ）を実施することができる。したがって、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ関数は繰り返して呼び出されて、呼び出しのたびに、メッセージを宛先により近くルーティングすることもあり得る。
【００７０】
有利には、本発明の他の実施形態は、１つまたは複数の近接性カテゴリ（例えば、地理的境界、ルーティング特性（例えば、ＩＰルーティングホップ）、管理ドメイン、組織的境界など）の複数の近接性基準に基づいて、リングをリングからなるリングまたはリングからなる木に区分することを容易にする。２回以上同じタイプの近接性基準を用いてリングを区分できることを理解されたい。例えば、大陸近接性基準と国近接性基準（共に地理的境界の近接性カテゴリ）に基づいて、リングを区分することができる。
【００７１】
（乱数発生の結果）ＩＤ空間全体にわたってＩＤを一様に分布させることができるので、近接性クラスがほぼ同じ要素数をもつならば、循環ＩＤ空間の任意の与えられたセグメントが、異なる近接性クラスに属するノードを含む確率は高い。有意な統計的挙動を得るのに十分な数のノードが存在する場合、この確率はさらに高くなる。
【００７２】
したがって、任意の与えられたノードの近傍ノードは一般に、近接性の観点からは良く分散されている。公開されたアプリケーション状態は、近傍ノード間で複製されることができるので、公開された情報も同様に、近接性の観点から良く分散されることができる。
【００７３】
図４は、近接ルーティング（ｐｒｏｘｉｍａｌ  ｒｏｕｔｉｎｇ）を容易にするリングからなるリング４００を示している。
【００７４】
リング４０１は、マスタまたはルートリングと見なすことができ、各リング４０２、４０３、および４０４内のすべてのノードを含んでいる。各リング４０２、４０３、４０４は、特定の近接性基準に基づいて区分された、リング４０１に属するノードの部分集合を含んでいる。例えば、リング４０１は、地理的ロケーションに基づいて区分することができ、その場合、リング４０２は北アメリカのノードを含み、リング４０３はヨーロッパのノードを含み、リング４０４はアジアのノードを含む。
【００７５】
６５５３６（２１６）個のＩＤを含む数値空間では、ＩＤ５３４５をもつ北アメリカのノードからＩＤ２３３４５をもつアジアのノードへのメッセージのルーティングは、アジアのノードの近隣ノード（ｎｅｉｇｈｂｏｒ  ｎｏｄｅ）が識別されるまで、メッセージをリング４０２内でルーティングすることを含むことができる。その後、近隣ノードは、アジアのノードにメッセージをルーティングすることができる。したがって、北アメリカのノードとアジアのノードの間では、ホップは（複数ホップではなく）１回行われるだけである。そのため、ルーティングは、リソース効率の良い方式によって実行される。
【００７６】
図５は、近接ルーティングを容易にするリングからなる近接性誘導区分木（ｐｒｏｘｉｍｉｔｙ  ｉｎｄｕｃｅｄ  ｐａｒｔｉｔｉｏｎ  ｔｒｅｅ）５００を示したものである。図示したように、リングからなる区分木５００は、複数のリングを含んでいる。各リングは、ソート済リンクリストの区分を表す。各リングは、ソート済リンクリスト内のＩＤを有する複数のノードを含む。しかし、潜在的なノードの多さに配慮し（例えば、区分木５００のＩＤ空間は、ｂ＝１６かつｎ＝４０とすることができる）、明瞭とするために、ノードはリング上に明示的に示されてはいない。
【００７７】
区分木５００内において、ルートリング５０１は、基準５７１（第１の管理ドメイン境界基準）に基づいて、サブリング５１１、５１２、５１３、５１４を始めとする複数のサブリングに区分される。例えば、ＤＮＳネームの各成分は、近接性基準であると見なすことができ、成分間には、右から左に読んだ際のＤＮＳネーム内での出現順序によって誘導された部分序列が存在する。したがって、サブリング５１１は、基準５８１（第２の管理ドメイン境界基準）に基づいて、サブリング５２１、５２２、５２３を始めとする複数のサブリングにさらに区分することができる。
【００７８】
サブリング５２２は、基準５７２（地理的境界基準）に基づいて、サブリング５３１、５３２、５３３を始めとする複数のサブリングにさらに区分することができる。ロケーションベースの近接性基準は、大陸、国、郵便番号などの系列に沿って部分的に序列化することができる。郵便番号は、それ自体が階層的に構成されており、近接性基準の部分的序列化サブリストをさらに導入していると見ることができる。
【００７９】
サブリング５３１は、基準５７３（第１の組織的境界基準）に基づいて、サブリング５４１、５４２、５４３、５４４を始めとする複数のサブリングにさらに区分することができる。近接性基準の部分的序列化リストは、与えられた企業がどのように組織的に構造化されているか、すなわち、部、課、製造グループなどの系列に沿って誘導されることができる。したがって、サブリング５４３は、基準５８３（第２の組織的境界基準）に基づいて、サブリング５５１、５５２を始めとする複数のサブリングにさらに区分することができる。
【００８０】
区分木５００内において、各ノードは、単一のＩＤを有し、ルートから始まりリーフに到る対応する区分パスに沿ってリングに参加する。例えば、サブリング５５２に参加する各ノードは、サブリング５４３、５３１、５２２、５１１、およびルート５０１にも参加する。宛先ノード（ＩＤ）へのルーティングは、以下のように、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ関数を実施することによって達成することができる。
【００８１】
ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，Ｐ）：ノード識別情報の領域に属する値Ｖおよびメッセージ「Ｍｓｇ」を与えたときに、近接性基準Ｐによって同等と見なされるノードの中の、識別情報がマッピング関数を用いてＶにマッピングされ得るノードＹに、メッセージを配送する。
【００８２】
したがって、ルーティングは、与えられたリング内において、そのリング内でのルーティングによってはもはや前進できなくなるまで、宛先ノードに漸進的に近づいて行くことによって達成することができるが、前進できなくなったことは、カレントノードとその後続または先行ノードとの間に宛先ノードがあるという条件から決定される。この時点で、カレントノードは、自身が参加するより大きな次のリングにおけるパートナノードを介するルーティングを開始する。ルートリングに向って区分化パスを上って行くことによって宛先ノードに漸進的に近づいて行くこのプロセスは、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ呼び出しで最初に指定された要求された近接性コンテキスト内において、宛先ノードに最も近いノードに到着した時点で終了する。
【００８３】
ルーティングホップは、宛先ノードが要求を発信したノードの近接近傍（ｐｒｏｘｉｍａｌ  ｎｅｉｇｈｂｏｒｈｏｏｄ）の外部に存在するために、その近傍内ではもはや前進できなくなるまで、その近傍内で行われることができる。この時点で、さらなる前進が行えるよう近接近傍のサイズを拡大するために、近接性基準が緩和される。このプロセスは、近接近傍が十分に拡大されて、宛先ノード（ＩＤ）を含むようになるまで繰り返される。近接近傍基準の連続する各緩和の後に行われるルーティングホップは、近接空間内では、潜在的により大きなジャンプとなることができるが、数値空間内では、対応するジャンプをそれまでのホップと比べてより小さなものとする。したがって、宛先に到着するまでに、絶対的に必要な数のそのような（リング間の）ホップだけが行われる。
【００８４】
公開されたアプリケーションデータは、宛先ノードの近傍ノード間で複製されるときは、区分木の下位方向に複製されるので、検索メッセージに関しては、いくつかのホップが回避される場合があり得る。
【００８５】
近接ルーティングを達成するため、各連合ノードは、（単一リングに対する後続ノードおよび先行ノードと同様に）自らがメンバとして参加するすべてのリングにおいて、後続ノードおよび先行ノード−近接先行ノード、近接後続ノード、および近接近傍への参照を維持する。ルーティングを効率的にするため、ノードは、（単一のリングに対するルーティングノードと同様に）リングの両半分における指数関数的に増加する距離に最も近いその他のノードをルーティングパートナとして、それらのノードへの参照も維持することができる。いくつかの実施形態においては、１対の連続する後続または先行ノードの間にあるルーティングパートナノードは、カレントノードと後続または先行ノード対それぞれの間でそれに数値的に最も近いノードとによって共用される同じ最低位のリングに参加する。したがって、宛先ノードに向うルーティングホップは、さらに前進するために絶対に必要なときだけ、緩和された近接性基準を用いて遷移する（すなわち、より高位のリングに遷移する）。そのため、対応する連合ノードにメッセージを効率的に会合させることができる。
【００８６】
いくつかの実施形態においては、ノードは、同等の基準関係に基づいてメッセージをルーティングするために、近接ルーティング関数を実施する。したがって、番号Ｖとメッセージ「Ｍｓｇ」が与えられたとき、ノードは、近接性基準Ｐによって同等と見なされるノードの中の識別情報がＶにマッピングされ得るノードＹにメッセージを配送するために、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，Ｐ）を実施することができる。区分木において、近接性基準Ｐによって近接性が同等と見なされるすべてのノードに共通の祖先（ａｎｃｅｓｔｏｒ）である最低位のリングを、近接性基準Ｐは識別する。近接性基準Ｐは、ルートリングから近接性基準Ｐによって識別されたリングまでのパス沿いに見出される近接性基準を、パス分離文字「／」で分離しながら連結することによって得られる文字列として表現することができる。例えば、サブリング５４２を識別する近接性基準は、「Ｐｒｏｘｉｍｉｔｙ：／．ＣＯＭ／Ｃｏｒｐ２／ＬｏｃａｔｉｏｎＡ／Ｄｉｖ２」として表現することができる。区分木５００の各リングには、例えば、ＳＨＡベースのアルゴリズムを用いて表現文字列をハッシュすることによって、一意の番号を割り当てることができる。番号０がルートリング用に確保されている場合、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）≡ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，０）ということになり得る。
【００８７】
例えば、サブリング５４４内のノードは、（例えば、サブリング５１３内のノードに）より近いサブリング５３１内のノードを識別するために、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施することができる。今度は、サブリング５３１は、サブリング５２２内のより近いノードを識別するために、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施することができる。同様に、サブリング５２２は、サブリング５１１内のより近いノードを識別するために、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施することができる。同じく、サブリング５１１は、サブリング５０１内のより近いノードを識別するために、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施することができる。したがって、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ関数は繰り返して呼び出されて、呼び出しのたびに、メッセージを宛先により近くルーティングすることもあり得る。
【００８８】
したがって、近接性基準が考慮される場合、パス上を最終宛先に向うルーティングホップは、宛先ノードに到着するか、または選択された近接性基準の下ではもはや前進できなくなるまでは、要求を発信したノードの近接性内にとどまることができるが、数値空間内では発信ノードと宛先ノードの間でかなりの前進が行われており、前進できなくなった時点で、宛先に向ってさらなる前進を行うのに十分なだけ近接性基準が緩和される。例えば、近接性基準は、リング５３１からリング５２２などにメッセージをルーティングするのに十分なだけ緩和することができる。
【００８９】
近接性に対する上記の手法を利用することで、公開情報を与えられたリング外に出さないようにすることが可能になる。例えば、組織は、組織特有の情報が、（１）組織ドメインの外部のノードへの近傍複製（ｎｅｉｇｈｂｏｒｈｏｏｄ  ｒｅｐｌｉｃａｔｉｏｎ）の形態で暗黙的にも、（２）そのような情報に対する検索要求にサービス提供する形態で明示的にも、信用ドメインの外部のエンティティから利用できないよう保証したいと望むことがある。第１の態様は、指定リング内において目標ＩＤの近くにあるノード間でだけ公開情報を複製することによって満足される。ノードによって発信されるすべてのメッセージは、ノードが属するリングをルートリングに向って連続的に上って行くことによってルーティングされるので、組織内で発信されたすべての検索要求が、組織内に制限された公開情報を見つけることができる可能性は高く、したがって、第２の態様を暗黙的に満足する。
【００９０】
また、組織は、ノードが信用ドメインの外部のノードと自動的に連合することを望まない。こうしたことは、例えば、訪問販売者が、顧客の建物において彼／彼女のラップトップコンピュータをネットワークに接続するときに起こり得る。理想的には、販売者が所有するラップトップコンピュータは、自らのホームドメイン内で公開されている情報を見つけること、および／または最低位の好ましい近接性リングから始めて、自らのホームドメイン内のノードと連合することを望む。顧客ドメイン内のノードと連合することは、一般に許可されない。このシナリオをサポートするには、ホームドメイン内のシードノード（ｓｅｅｄ  ｎｏｄｅ）を見つける能力が必要とされる。そのようなシードノードは、ホームドメイン内で公開されている情報を見つけ、ホーム連合に参加し、ならびに公開情報をドメイン間で選択的にインポートおよびエキスポートするために使用することができる。シードノードは、時にはメッセージゲートウェイとも呼ばれる。
【００９１】
その他の実施形態においては、エンティティは、ルートリングにおけるシードノードへの参照を公開する。シードノードは、（表現文字列をハッシュすることによって得られる番号など）リングに関連付けられた（目標ＩＤとしての）一意の番号において公開することができる。シードノード情報はさらに、ルートリング内の対応する目標ＩＤに到るパス上に存在する様々なリング内のノードによって、オンデマンドでキャッシュすることができる。そのようなオンデマンドキャッシングは、性能を向上させ、また半静的な情報が非常に頻繁に検索される場合に発生することがあるホットスポットを減少させることができる。シードノード情報は、ＤＮＳなどその他の手段を介して取得することもできる。
【００９２】
制限された公開情報に耐障害性を与えるため、各ノードは、自らが参加するすべてのリングにおいて、近傍ノードの集合を維持することができる。上記のようなノードが与えられた場合、ノードによって維持される状態は、以下のように要約することができる。
・０からｂｎ−１の範囲内に一様に分布する数値であるＩＤ。
・ルーティングテーブルであって、
・ノードが参加する各リング、すなわち、リングｄに関して、
・後続ノード（ｓｄ）と、
・先行ノード（ｐｄ）と、
・ｓｊｄ．ｓｄ．ｉｄ＞（ｉｄ＋ｕ／２），ｊ≧ｖ／２−１かつｐｋｄ．ｐｄ．ｉｄ＜（ｉｄ−ｕ／２），ｋ≧ｖ／２−１であるような、近傍ノード（ｐｋｄ，．．，ｐ１ｄ，ｐｄ，ｓｄ，ｓ１ｄ，．．，ｓｊｄ）と、
・ｒ±ｉ＝ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（ｉｄ±ｂｉ，ｕｐｄａｔｅＭｓｇ，ｄ）、適宜、ｓｄ≦ｉｄ＋ｂｉ≦ｓｄ＋１またはｐｄ＋１≦ｉｄ−ｂｉ≦ｐｄであるような、ルーティングノード（ｒ−（ｎ−１），．．，ｒ−１，ｒ１，．．，ｒｎ−１）とから構成されるルーティングテーブル（すべての計算はｂｎを法として実行される）。ここで、ｂは基数、ｎは桁数で表したフィールドサイズ、ｕは近傍範囲、ｖは近傍サイズである。
【００９３】
リング「ｄ」において与えられたノードによって維持される近傍ノードの部分集合は、与えられたノードが同様に参加している子リング「ｄ＋１」における近傍ノードとして再び出現できることに留意されたい。そのため、与えられたノードが参加しているＤ個のリングすべてにわたる、与えられたノードによって維持される近傍ノードの総数の上限は、Ｄ×ｍａｘ（ｕ，ｖ）／２として導くことができる。このことから、与えられたノードへのただ１つの参照が保たれ、最悪ケースの上限は平衡木用のものであると考えられる。
【００９４】
リングが複数の対応する兄弟サブリング（ｓｉｂｌｉｎｇ  ｓｕｂ−ｒｉｎｇ）に区分される場合、例えば、再命名（ａｌｉａｓｉｎｇ）によって、指定ノードが同時に２以上の複数の対応する兄弟サブリングに参加することが許可されることに留意されたい。再命名は、例えば、異なるサブリングの異なる状態を指定ノードに関連づけるために実施することができる。したがって、与えられたノードの別名（ａｌｉａｓ）は同じＩＤを有するが、各別名は、それらに関連付けられた異なる状態を有することができる。再命名は、指定ノードが、必ずしもより特定的な近接性基準の共通の祖先であるとは限らない異なる近接性基準を有する複数のリングに参加することを可能にする。すなわち、指定ノードは、近接性木の複数の枝に参加することができる。
【００９５】
例えば、デュアルＮＩＣ（有線および無線）ラップトップは、ラップトップとして、同じＬＡＮセグメントを共有するその他の無線および有線ノードの両方と近接性において同等であると見なすことができる。しかし、これら２つの異なる近接性基準は、例えば、組織のメンバシップに基づく基準など、異なるより高位の優先近接性基準を適用した後にだけ、適用可能な副基準としてモデル化することができる。そのラップトップは同じ組織に属するので、１）有線におけるメンバシップ、および２）無線ＬＡＮセグメントにおけるメンバシップを表す２つのサブリング内の再命名ノードは、ラップトップが属する組織を表すリング内の単一のノードに併合される。ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙは、再命名が存在する場合でも、変更を施すことなく期待通りに機能することを理解されたい。
【００９６】
各近接リングは、（潜在的に異なる）リングパラメータによって構成することができる。リングパラメータは、近傍を定義するため（例えば、リングパラメータは、近傍範囲、近傍サイズ、ｐｉｎｇメッセージおよび離脱メッセージタイミング、ならびにｐｉｎｇおよび離脱メッセージの配布パターンを表すことができる）、特定の連合メカニズムを（例えば、先に説明した上述の第１から第４の連合メカニズムの中から、またはその他の連合メカニズムの中から）指示するため、あるいは、同じ近接リング内のルーティングパートナ間の通信特性を定義するために使用することができる。いくつかのリングパラメータは、より汎用的で、複数の異なる連合メカニズムに適用することができるが、一方別のリングパラメータは、より専用的で、特定のタイプの連合メカニズムにのみ適用される。
【００９７】
より高位レベルの近接リングを構成するのに使用されるリングパラメータは、いくつかの実施形態においては、より低位の近接リングによって継承されることができる。例えば、リング５４３は、リング５３１のリングパラメータのいくつかを継承する（リング５３１はリング５２２から継承しており、同様の継承が繰り返される）。したがって、リング５３１に関連付けられた近傍サイズおよび近傍範囲は、リング５４１にも関連付けられている。
【００９８】
しかし、継承されたリングパラメータは、変更するこができ、かつ／または近接リングは、異なるリングパラメータに基づいて個別に構成することもできる。例えば、リング５１１は、多数のノードを含む管理ドメイン用のものであり、したがって、リング５１１にとっては、上述の第４の連合メカニズムがより適切である。一方、リング５２１は、比較的少数のノードを含む小企業用のものであり、したがって、リング５２１にとっては、上述の第２の連合メカニズムがより適切である。したがって、リング５２１に関連付けられたリングパラメータには、リング５１１に関連付けられたリングパラメータとは異なる値を設定（または継承されたパラメータを変更）することができる。例えば、特定のタイプの連合メカニズムを表すリングパラメータは、リング５１１とリング５２１とで異なることができる。同様に、近傍を定義するパラメータも、リング５１１とリング５２１とで異なることができる。さらに、リング５２１は、上述の第２の連合メカニズムに固有の専用パラメータに基づいて構成することができ、リング５１１は、それとは別に、上述の第４の連合メカニズムに固有の専用パラメータに基づいて構成することができる。
【００９９】
したがって、近接リングは、近接リング内のノードの特性（例えば、数、含まれるリソースなど）に基づいて、柔軟に構成することができる。例えば、管理者は、（例えば、ユーザインターフェースを介して）設定手順を利用して、近接リングのリングパラメータを選択することができる。設定手順は、個々の近接リングの構成ばかりでなく、例えば、継承されたリングパラメータを異なる形に上書きするなど、近接リング間の継承関係の構成も容易にすることができる。
【０１００】
図８は、連合インフラストラクチャのノードを区分する方法８００のフローチャートの一例を示したものである。方法８００は、図５の区分木５００のリングに関して説明される。方法８００は、連合インフラストラクチャ内のノードに割り当てられたノードＩＤを含むソート済リンクリストにアクセスする動作を含む（動作８０１）。例えば、リング５０１によって表されるソート済リンクリストにアクセスすることができる。ソート済リンクリストのノードＩＤ（リング５０１上に示されたノード）は、連合インフラストラクチャ（例えば、連合インフラストラクチャ１００）内のノードを表すことができる。
【０１０１】
方法８００は、ソート済リンクリストを区分するための複数の異なる近接性基準を表す近接性カテゴリにアクセスする動作を含む（動作８０２）。例えば、ドメイン境界５６１、地理的境界５６２、および組織的境界５６３を表す近接性基準にアクセスすることができる。しかし、アクセスされる近接性基準として、信用ドメイン境界など、その他の近接性基準を提示することもできる。近接性カテゴリは、事前に作成された部分的に序列化された近接性基準のリストを含むことができる。リングは、部分的に序列化された近接性基準のリストに基づいて区分することができる。
【０１０２】
方法８００は、ソート済リンクリストを、第１の近接性基準に基づいて、１つまたは複数の第１のサブリストに区分する動作を含み（動作８０３）、１つまたは複数の第１のサブリストの各々は、ソート済リンクリストに属するノードＩＤの少なくとも部分集合を含む。例えば、リング５０１は、基準５７１に基づいて、サブリング５１１、５１２、５１３、５１４に区分することができる。サブリング５１１、５１２、５１３、５１４の各々は、リング５０１に属するノードＩＤの異なる部分集合を含むことができる。
【０１０３】
方法８００は、１つまたは複数の第１のサブリストの中から選択されたある第１のサブリストを、第２の近接性基準に基づいて、１つまたは複数の第２のサブリストに区分する動作を含み（動作８０４）、１つまたは複数の第２のサブリストの各々は、その第１のサブリストに含まれるノードＩＤの少なくとも部分集合を含む。例えば、サブリング５１１は、基準５８１に基づいて、サブリング５２１、５２２、５２３に区分することができる。サブリング５２１、５２２、５２３の各々は、サブリング５１１に属するノードＩＤの異なる部分集合を含むことができる。
【０１０４】
図９は、ノードのルーティングテーブルに対して入力を行う方法９００のフローチャートの一例を示したものである。方法９００は、図３のソート済リンクリスト３０４およびリング３０６に関して説明される。方法９００は、先行ノードをルーティングテーブルに挿入する動作を含み（動作９０１）、先行ノードは、ソート済リンクリストの第１の方向において、カレントノードと比較して、カレントノードに先行する。例えば、ＩＤ５０をもつノードを、ＩＤ６４をもつノード（カレントノード）の先行ノードとして、ルーティングテーブルに挿入することができる。時計回り方向３２１に（ソート済リンクリスト３０４の端部Ａからソート済リンクリスト３０４の端部Ｂに向って）動いた場合、ＩＤ５０をもつノードは、ＩＤ６４をもつノードに先行する。先行ノードを挿入することにより、カレントノードと先行ノードの間に、カレントノードが先行ノードのパートナであり、かつ先行ノードがカレントノードのパートナである対称的なパートナシップを確立することができる。
【０１０５】
方法９００は、後続ノードをルーティングテーブルに挿入する動作を含み（動作９０２）、後続ノードは、ソート済リンクリストの第１の方向において、カレントノードと比較して、カレントノードに後続する。例えば、ＩＤ７６をもつノードを、ＩＤ６４をもつノード（カレントノード）の後続ノードとして、ルーティングテーブルに挿入することができる。反時計回り方向３２２に（ソート済リンクリスト３０４の端部Ａからソート済リンクリスト３０４の端部Ｂに向って）動いた場合、ＩＤ７６をもつノードは、ＩＤ６４をもつノードに後続する。後続ノードを挿入することにより、カレントノードと後続ノードの間に、カレントノードが後続ノードのパートナであり、かつ後続ノードがカレントノードのパートナである対称的なパートナシップを確立することができる。
【０１０６】
方法９００は、適切な近傍ノードをルーティングテーブルに挿入する動作を含み（動作９０３）、近傍ノードは、第１の方向およびそれとは反対の第２の方向の両方において、近傍範囲および近傍サイズに基づいて、ソート済リンクリストから識別される。例えば、ＩＤ８３、７６、５０、４６をもつノードを、ＩＤ６４をもつノード（カレントノード）の近傍ノードとして、ルーティングテーブルに挿入することができる。２０の近傍範囲および４の近傍サイズに基づいて、時計回り方向３２１に、ＩＤ８３および７６をもつノードを識別することができ、反時計回り方向３２２に（ソート済リンクリスト３０４の端部Ｂからソート済リンクリスト３０４の端部Ａに向って）、ＩＤ５０および４６をもつノードを識別することができる。いくつかの環境においては、適切な近傍ノードが識別されないこともあり得る。近傍ノードを挿入することにより、カレントノードと近傍ノードの間に、カレントノードが近傍ノードのパートナであり、かつ近傍ノードがカレントノードのパートナである対称的なパートナシップを確立することができる。
【０１０７】
方法９００は、適切なルーティングノードをルーティングテーブルに挿入する動作を含み（動作９０４）、ルーティングノードは、第１および第２の両方向において、基数および連合インフラストラクチャのＩＤ空間のフィールドサイズに基づいて、ソート済リンクリストから識別され、ルーティングノードは、第１および第２の両方向におけるソート済リンクリストの対数指標を表す。例えば、ＩＤ２００、２、３０、４６、５０、６４、６４、６４、６４、６４、７６、８３、９８、１３５、２００をもつノードを、ＩＤ６４をもつノードのルーティングノードとして、ルーティングテーブルに挿入することができる。２の基数および８のフィールドサイズに基づいて、方向３２１に、ＩＤ６４、６４、７６、８３、９８、１３５、２００をもつノードを識別することができ、方向３２２に、ＩＤ６４、６４、５０、４６、３０、２、２００をもつノードを識別することができる。リング３０６の内部に示すように、ルーティングノードは、時計回り方向３２１および反時計回り方向３２２の両方におけるソート済リンクリスト３０４の対数指標を表す。ルーティングノードを挿入することにより、カレントノードとルーティングノードの間に、カレントノードがルーティングノードのパートナであり、かつルーティングノードがカレントノードのパートナである対称的なパートナシップを確立することができる。
【０１０８】
図７は、近接性基準を考慮したノードルーティングテーブルに対して入力を行う方法７００のフローチャートの一例を示したものである。方法７００は、図５のリングに関して説明される。方法７００は、カレントノードが参加する階層化して区分された各ルーティングリングに関する先行ノードをルーティングテーブルに挿入する動作を含む（動作７０１）。各先行ノードは、カレントノードが参加する階層化して区分された各ルーティングリング内において、第１の（例えば、時計回り）方向に関して、カレントノードに先行する。階層化して区分されたルーティングリングは、対応する近接性基準に基づいて区分され、両方向のリンクリストの少なくとも部分集合（場合によっては両方向のリンクリスト全体）を含む。例えば、ある指定ノードが、ルートリング５０１と、サブリング５１１、５２２、５２３、５３１、５４２に参加することがあり得る。したがって、先行ノードは、ルートリング５０１およびサブリング５１１、５２２、５２３、５３１、５４２の各々の内部で、それに属する指定ノードについて選択される。
【０１０９】
方法７００は、カレントノードが参加する階層化して区分された各ルーティングリングに関する後続ノードをルーティングテーブルに挿入する動作を含む（動作７０２）。各後続ノードは、カレントノードが参加する階層化して区分された各ルーティングリング内において、第１の方向に関して、カレントノードに先行する。例えば、後続ノードは、リング５０１およびサブリング５１１、５２２、５２３、５３１、５４２の各々の内部で、それに属する指定ノードについて選択される。
【０１１０】
方法７００は、カレントノードが参加する階層化して区分された各ルーティングリングに関する適切な近傍ノードをルーティングテーブルに挿入する動作を含む（動作７０３）。近傍ノードは、第１の（例えば、時計回り）方向およびそれとは反対の第２の（例えば、反時計回り）方向の両方において、近傍範囲および近傍サイズに基づいて、カレントノードが参加する階層化して区分されたルーティングリングから識別することができる。例えば、近傍ノードは、リング５０１およびサブリング５１１、５２２、５２３、５３１、５４２の各々の内部で、それに属する指定ノードについて識別することができる。
【０１１１】
方法７００は、カレントノードが参加する階層化して区分された各ルーティングリングに関する適切なルーティングノードをルーティングテーブルに挿入する動作を含む（動作７０４）。例えば、ルーティングノードは、リング５０１およびサブリング５１１、５２２、５２３、５３１、５４２の各々の内部で、それに属する指定ノードについて識別することができる。
【０１１２】
いくつかの実施形態においては、適切なルーティングノードは、リーフリング（または再命名を利用する実施形態では複数のリーフリング）を除いて、ノードＹが参加する各近接リングｄに関して挿入される。適切なルーティングノードは、以下の式に基づいて挿入することができる。
【０１１３】
もしＹ．ｓｄ．ｉｄ＜Ｙ．ｉｄ＋ｂｉ＜Ｙ．ｓｄ＋１．ｉｄならば、リングｄを使用する、または、
もしＹ．ｐｄ．ｉｄ＜Ｙ．ｉｄ−ｂｉ＜Ｙ．ｐｄ＋１．ｉｄならば、リングｄを使用する。
【０１１４】
上のステップにおいて、リングが識別されなかった場合、リングｄとしてリードリング（ｌｅａｄ  ｒｉｎｇ）（例えば、リング５０１）を使用する。これで、リングｄは、ノードＹがｚに最も近いルーティングパートナを探索すべき近接リングとなる。
【０１１５】
図１０は、メッセージを宛先ノードに向けてルーティングする方法１０００のフローチャートの一例を示したものである。方法１０００は、図３のソート済リンクリスト３０４およびリング３０６に関して説明される。方法１０００は、受信ノードが、宛先を示す番号と共にメッセージを受信する動作を含む（動作１００１）。例えば、ＩＤ６４をもつノードは、宛先が２１２であると指示するメッセージを受信することができる。
【０１１６】
方法１０００は、受信ノードが、対応する先行ノードより宛先から数値的により遠いのか、対応する後続ノードより宛先から数値的により遠いのかの少なくとも一方であることを決定する動作を含む（動作１００２）。例えば、方向３２２に関して、ＩＤ６４は、ＩＤ５０より宛先２１２からより遠く、方向３２１に関して、ＩＤ６４は、ＩＤ７６より宛先２１２からより遠い。方法１０００は、宛先が、受信ノードに対応する近傍ノード集合に属していないことを決定する動作を含む（動作１００３）。例えば、ＩＤ６４をもつノードは、宛先２１２が、８３、７６、５０、４６からなる近傍集合に属していないことを決定することができる。
【０１１７】
方法１０００は、受信ノードに対応するルーティングテーブルから中間ノードを識別する動作を含み（動作１００４）、中間ノードは、対応するルーティングテーブル内のその他のルーティングノードより宛先に数値的により近い。例えば、ＩＤ６４をもつノードは、その他のルーティングノードより宛先２１２に数値的により近いものとして、ＩＤ２００をもつルーティングノードを識別することができる。方法１０００は、中間ノードにメッセージを送信する動作を含む（動作１００５）。例えば、ＩＤ６４をもつノードは、ＩＤ２００をもつノードにメッセージを送信することができる。
【０１１８】
図１１は、近接性基準に基づいてメッセージを宛先ノードに向けてルーティングする方法１１００のフローチャートの一例を示したものである。方法１１００は、図４および図５のリングに関して説明される。方法１１００は、受信ノードが、宛先を示す番号および近接性基準と共にメッセージを受信する動作を含む（動作１１０１）。近接性基準は、ノードの１つまたは複数のクラスを定義する。受信ノードは、近接性基準に基づいて１つまたは複数のノードクラスの中から選択されたカレントノードクラスの一員として、メッセージを受信する。例えば、ＩＤ１７２をもつノードは、宛先が２０１であると指示するメッセージと、宛先ノードがリング４０１によって表されるクラスの一員であることを示す近接性基準とを受信することができる。ＩＤ１７２をもつノードは、リング４０４の一員として、メッセージを受信することができる。
【０１１９】
方法１１００は、選択されたノードクラスのノードの中で、受信ノードが、対応する先行ノードより宛先から数値的により遠いのか、対応する後続ノードより宛先から数値的により遠いのかの少なくとも一方であることを決定する動作を含む（動作１１０２）。例えば、リング４０４の中で、ＩＤ１７２をもつノードは、時計回り方向に関してＩＤ１７４をもつノードより宛先２０１からより遠く、反時計回り方向に関してＩＤ１５３をもつノードより宛先２０１からより遠い。
【０１２０】
方法１１００は、近接性基準によって定義された１つまたは複数のノードクラスのいずれについても、宛先が、受信ノードの近傍ノード集合に属していないことを決定する動作を含む（動作１１０３）。例えば、ＩＤ１７２をもつノードは、宛先２０１が、リング４０４またはリング４０１内の対応する近傍集合に属していないことを決定することができる。
【０１２１】
方法１１００は、受信ノードのルーティングテーブルから中間ノードを識別する動作を含み（動作１１０４）、中間ノードは、ルーティングテーブル内のその他のルーティングノードより宛先に数値的により近い。例えば、ＩＤ１７２をもつノードは、リング４０４内のその他のルーティングノードより宛先２０１に数値的により近いものとして、ＩＤ１９４をもつノードを識別することができる。方法１１００は、中間ノードにメッセージを送信する動作を含む（動作１１０５）。例えば、ＩＤ１７２をもつノードは、ＩＤ１９４をもつノードに受信したメッセージを送信することができる。ＩＤ１７２をもつノードは、先に定義された部分的に序列化された近接性基準のリストに従って、ＩＤ１９４をもつノードに受信したメッセージを送信することができる。
【０１２２】
リング４０４内においては、ノード１９４が宛先２０１に可能な限り近いことがあり得る。そのため、次の区間（ｎｅｘｔ  ｌｅｇ）において、宛先に向けてのさらなるルーティングをリング４０１内で行うことを可能にするのに十分なだけ、近接性が緩和されることができる。すなわち、リング４０４上では、もはや宛先に向けてこれ以上前進できないので、ルーティングはリング４０４からリング４０１に遷移される。あるいは、ＩＤ２０１をもつノードは、リング４０１においてＩＤ１９４をもつノードの近傍内にあり、その結果、もはやルーティングは行われないこともあり得る。したがって、いくつかの実施形態においては、さらなるルーティングを行わせるには、より高い次のリングに遷移するように近接性基準を緩和するだけで十分である。
【０１２３】
しかし、その他の実施形態においては、さらなるルーティングが行えるようになるまで（またはルートリングに出会うまで）、より高い次のリングへの遷移を生じさせる近接性基準の漸増的な緩和が継続する。すなわち、さらなるルーティング前進が行えるまで、より高いリングへの遷移が複数回発生する。例えば、図５を参照すると、リング５３１上では、もはやルーティング前進が行えない場合、リング５１１にまたはルートリング５０１にすら遷移するのに十分なだけ、近接性基準を緩和することができる。
【０１２４】
図６および以下の説明は、本発明を実施することができる適切なコンピューティング環境についての簡略で概括的な説明を提供することを意図したものである。必須ではないが、本発明は、コンピュータシステムによって実行されるプログラムモジュールなどのコンピュータ実行可能命令を一般的前提として説明される。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連データ構造、およびプログラムモジュールは、本明細書で開示される方法の動作を実行するプログラムコード手段の例を表す。
【０１２５】
図６を参照すると、本発明を実施するためのシステム例は、プロセッシングユニット６２１と、システムメモリ６２２と、システムメモリ６２２を含む様々なシステムコンポーネントをプロセッシングユニット６２１に結合するシステムバス６２３とを含むコンピュータシステム６２０の形態をとる汎用コンピューティング装置を含む。プロセッシングユニット６２１は、本発明の機能を含むコンピュータシステム６２０の機能を実施するように設計されたコンピュータ実行可能命令を実行することができる。システムバス６２３は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを用いるローカルバスを含む複数のタイプのバス構造のいずれかとすることができる。システムメモリは、読み取り専用メモリ（ＲＯＭ）６２４、およびランダムアクセスメモリ（ＲＡＭ）６２５を含む。基本入出力システム（ＢＩＯＳ）６２６は、起動処理中などにコンピュータシステム６２０内の要素間での情報転送を助ける基本ルーチンを含み、ＲＯＭ６２４に記憶しておくことができる。
【０１２６】
コンピュータシステム６２０は、磁気ハードディスク６３９に対して読み書きを行う磁気ハードディスクドライブ６２７、着脱可能な磁気ディスク６２９に対して読み書きを行う磁気ディスクドライブ６２８、および例えばＣＤ−ＲＯＭまたはその他の光媒体など着脱可能な光ディスク６３１に対して読み書きを行う光ディスクドライブ６３０も含むことができる。磁気ハードディスクドライブ６２７、磁気ディスクドライブ６２８、および光ディスクドライブ６３０は、それぞれハードディスクドライブインターフェース６３２、磁気ディスクドライブインターフェース６３３、および光ドライブインターフェース６３４によって、システムバス６２３に接続される。ドライブおよび関連コンピュータ読取り可能媒体は、コンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性記憶をコンピュータシステム６２０に提供する。本明細書で説明する例示的な環境は、磁気ハードディスク６３９、着脱可能な磁気ディスク６２９、および着脱可能な光ディスク６３１を利用するが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌイカートリッジ、ＲＡＭ、およびＲＯＭなどを含む、データを保存するためのその他のタイプのコンピュータ読取り可能媒体を使用することもできる。
【０１２７】
１つまたは複数のプログラムモジュールを含むプログラムコード手段は、ハードディスク６３９、磁気ディスク６２９、光ディスク６３１、ＲＯＭ６２４、またはＲＡＭ６２５に保存することができ、オペレーティングシステム６３５、１つまたは複数のアプリケーションプログラム６３６、その他のプログラムモジュール６３７、およびプログラムデータ６３８を含む。ユーザは、キーボード６４０、ポインティングデバイス６４２、または例えばマイクロホン、ジョイスティック、ゲームパッド、もしくはスキャナなどのその他の入力装置（図示せず）を介して、コンピュータシステム６２０にコマンドおよび情報を入力することができる。上記およびその他の入力装置は、システムバス６２３に結合された入出力インターフェース６４６を介して、プロセッシングユニット６２１に接続することができる。入出力インターフェース６４６は、例えば、シリアルポートインターフェース、ＰＳ／２インターフェース、パラレルポートインターフェース、ユニバーサルシリアルバス（「ＵＳＢ」）インターフェース、もしくはＩＥＥＥ１３９４インターフェース（すなわち、ＦｉｒｅＷｉｒｅインターフェース）など、多種多様な異なるインターフェースのいずれかを論理的に表し、または異なるインターフェースの組合せを論理的に表すことすらできる。
【０１２８】
モニタ６４７または別のディスプレイ装置も、ビデオインターフェース６４８を介してシステムバス６２３に接続される。スピーカ６６９またはその他のオーディオ出力装置も、オーディオインターフェース６４９を介してシステムバス６２３に接続される。例えば、プリンタなどのその他の周辺出力装置（図示せず）も、コンピュータシステム６２０に接続することができる。
【０１２９】
コンピュータシステム６２０は、例えば、オフィス規模または企業規模のコンピュータネットワーク、ホームネットワーク、イントラネット、および／またはインターネットなどのネットワークに接続可能である。コンピュータシステム６２０は、そのようなネットワークを介して、例えば、リモートコンピュータシステム、リモートアプリケーション、および／またはリモートデータベースなどの外部ソースとデータを交換することができる。
【０１３０】
コンピュータシステム６２０は、コンピュータシステム６２０が外部ソースからデータを受信し、かつ／または外部ソースにデータを送信するのに用いるネットワークインターフェース６５３を含む。図６に示すように、ネットワークインターフェース６５３は、リンク６５１を介してリモートコンピュータシステム６８３とのデータ交換を容易にする。ネットワークインターフェース６５３は、例えば、ネットワークインターフェースカードおよび対応するネットワークドライバインターフェース仕様（「ＮＤＩＳ」）スタックなど、１つまたは複数のソフトウェアおよび／またはハードウェアモジュールを論理的に表すことができる。リンク６５１は、ネットワークの一部（例えば、イーサネット（登録商標）セグメント）を表し、リモートコンピュータシステム６８３は、ネットワークのノードを表す。
【０１３１】
同様に、コンピュータシステム６２０は、コンピュータシステム６２０が外部ソースからデータを受信し、かつ／または外部ソースにデータを送信するのに用いる入出力インターフェース６４６を含む。入出力インターフェース６４６は、コンピュータシステム６２０が外部ソースからデータを受信し、かつ／または外部ソースにデータを送信するのに用いるリンク６５９を介してモデム６５４（例えば、標準モデム、ケーブルモデム、またはデジタル加入者線（「ＤＳＬ」）モデム）に結合される。図６に示すように、入出力インターフェース６４６は、リンク６５２を介してリモートコンピュータシステム６９３とのデータ交換を容易にする。リンク６５２は、ネットワークの一部を表し、リモートコンピュータシステム６９３は、ネットワークのノードを表す。
【０１３２】
図６は、本発明にとっての適切な動作環境を表すが、本発明の原理は、必要に応じて適切な変更を施して本発明の原理を実施できる任意のシステムにおいて利用することができる。図６に示す環境は、例示的なものに過ぎず、本発明の原理を実施できる多種多様な環境の僅かな一部であっても決して代表するものではない。
【０１３３】
本発明によれば、ノード、アプリケーションレイヤ、およびその他の低位レイヤは、関連データのほか、ルーティングテーブルを含み、ノードＩＤは保存され、コンピュータシステム６２０に関連づけられた任意のコンピュータ読取り可能媒体からアクセスすることができる。例えば、そのようなモジュールの一部および関連プログラムデータの一部は、オペレーティングシステム６３５、アプリケーションプログラム６３６、プログラムモジュール６３７、および／またはプログラムデータ６３８に含まれ、システムメモリ６２２に記憶することができる。
【０１３４】
例えば、磁気ハードディスク６３９などの大容量記憶装置が、コンピュータシステム６２０に結合された場合、そのようなモジュールおよび関連プログラムデータも、大容量記憶装置に保存することができる。ネットワーク環境では、コンピュータシステム６２０またはその一部に関して示されたプログラムモジュールは、リモートコンピュータシステム６８３および／もしくはリモートコンピュータシステム６９３に関連するシステムメモリならびに／または大容量記憶装置などのリモートメモリ記憶装置に保存することができる。そのようなモジュールの実行は、先に説明したように分散環境で行うことができる。
【０１３５】
本発明は、本発明の主旨および基本特性から逸脱することなく、その他の特定の形態で実施することができる。説明した実施形態は、すべての点で例示的なものに過ぎず、限定的なものと考えるべきではない。したがって、本発明の範囲は、上述の説明よりもむしろ添付の特許請求の範囲によって表される。特許請求の範囲の意味および均等性の範囲に収まるすべての変更は、それらの範囲に包含されるものとする。
【図面の簡単な説明】
【０１３６】
【図１】連合インフラストラクチャの一例を示した図である。
【図２】要求をパートナに間接的にルーティングすることを容易にするコンピュータアーキテクチャの一例を示した図である。
【図３】ソート済リストおよび対応するリングの形態をとる連合インフラストラクチャにおけるノード間の２項関係の一例を示した図である。
【図４】近接ルーティングを容易にするリングからなるリングの一例を示した図である。
【図５】近接ルーティングを容易にするリングからなる近接性誘導区分木の一例を示した図である。
【図６】本発明の原理にとって適切な動作環境を示した図である。
【図７】近接性基準を考慮したノードのルーティングテーブルに入力する方法のフローチャート例である。
【図８】連合インフラストラクチャのノードを区分する方法のフローチャート例である。
【図９】ノードのルーティングテーブルに入力する方法のフローチャート例である。
【図１０】メッセージを宛先ノードに向って数値的にルーティングする方法のフローチャート例である。
【図１１】メッセージを宛先ノードに向って近接的にルーティングする方法のフローチャート例である。
【符号の説明】
【０１３７】
１００  連合インフラストラクチャ
２００  コンピュータアーキテクチャ
３０４  ソート済みリンクリスト
３０６、４０１、４０２、４０３、４０４  リング
５００  区分木
５１１、５１２、５１３、５１４  サブリング
【図１】
2006174417.tif 000003
【図２】
2006174417.tif 000004
【図３】
2006174417.tif 000005
【図４】
2006174417.tif 000006
【図５】
2006174417.tif 000007
【図６】
2006174417.tif 000008
【図７】
2006174417.tif 000009
【図８】
2006174417.tif 000010
【図９】
2006174417.tif 000011
【図１０】
2006174417.tif 000012
【図１１】
2006174417.tif 000013
【外国語明細書】
2006174417000001.pdf