(57)【要約】  本発明は、ランデブーフェデレーション内の近傍域間通信を容易にする方法、システム、およびコンピュータプログラム生成物にわたる。ノードは、副次リングおよび副次リングへの対応するエントリノードを含む、副次リングセットエントリテーブルを保持する。ノードは、副次リングセットエントリ状態を交換して、リングのツリー内のリングの構成について相互に更新することができる。ノードは、副次リングセットエントリテーブルおよび他のノードを参照して、ノードの副次リングであるリングへのエントリノードを識別することができる。メッセージは、副次リング内のエントリノードに送信されることができる。メッセージは、目標近傍域リング内のエントリノードが、示された宛先ノードに最も近接するノードＩＤを有する目標近傍域リング内のノードにメッセージを送るべきであるという指示を含むことができる。
2009543188.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて、リングのツリー（１９００）内の近傍域間通信を送信する方法であって、
ノード（１３１１）がメッセージ（１９０３）を前記ノード（１３１１）の指定された副次リング（２１）に送信すべきことを判定することと、
前記ノード（１３１１）が、前記ノード（１３１１）の複数の副次リングセットエントリを格納するように構成された副次リングセットエントリテーブル（１９０４）にアクセスすることであって、各副次リングセットエントリは、前記ノード（１３１１）の副次リング（２１）と、前記ノード（１３１１）の前記副次リング（２１）への対応する少なくとも１つのエントリノード（６５２１）とを示すように構成されることと、
前記ノードの副次リングセットエントリテーブル（１９０４）から、前記指定された副次リング（２１）の少なくとも１つの副次リングセットエントリを識別することであって、前記少なくとも１つの副次リングセットエントリの各々は、前記指定された副次リング（２１）の少なくとも１つのエントリノード（６５２１）を示すことと、
前記メッセージ（１９０３）を、示された少なくとも１つのエントリノード（６５２１）に送信することと
を備えることを特徴とする方法。
【請求項２】
ノードがメッセージを前記ノードの指定された副次リングに送信すべきことを判別することは、前記ノードに関連するアプリケーションからの指示を受信することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
ノードがメッセージを前記ノードの指定された副次リングに送信すべきことを判別することは、前記リングのツリー内の別のノードから指示を受信することを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記ノードがメッセージを指定された副次リングに送信すべきことを判別することは、前記ノードが、１つまたは複数の副次リング／エントリノード項目にアクセスすることを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記ノードの副次リングセットエントリテーブルから、前記指定された副次リングの少なくとも１つの副次リングセットエントリを識別することは、前記指定された副次リングと前記指定された副次リングへの複数のエントリノードとを識別する、副次リング／エントリノード項目を識別することを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記複数のエントリノードを、エントリノードの適切なサブセットとすることを決定することをさらに備えることを特徴とする請求項５に記載の方法。
【請求項７】
前記複数のエントリノードを、単一の適切なエントリノードとすることを決定することをさらに備えることを特徴とする請求項５に記載の方法。
【請求項８】
コンピュータシステムにおいて、リングのツリー（１９００）内の近傍域間通信を送信する方法であって、
ノード（１３１１）が、発信元ノードがメッセージ（１９９８）を前記リングのツリー（１９００）内の目標近傍域リング（１２２１）の所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを判定することと、
前記目標近傍域リング（１２２１）および前記目標近傍域リング（１２２１）の先祖リング（２２１）のうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノード（４１２２１）を識別することと、
前記メッセージ（１９９８）を、識別されたエントリノード（４１２２１）に送信する動作であって、前記メッセージ（１９９８）は、該メッセージ（１９９８）が前記識別されたエントリノード（４１２２１）によって、前記目標近傍域リング（１２２１）内の示された宛先ノードに最も近接するノードＩＤを有する前記ノードに送られるべきであることを示していることと
を備えることを特徴とする方法。
【請求項９】
ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを判別することは、前記ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示にアクセスすることを含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示にアクセスすることは、前記ノードが、送信側ノードがメッセージを前記送信側ノードの副次リングである目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示を受信することを含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示にアクセスすることは、前記ノードが、送信側ノードがメッセージを前記送信側ノードの副次リングのサブリングである目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示を受信することを含むことを特徴とする請求項９に記載の方法。
【請求項１２】
前記ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示にアクセスすることは、前記ノードに関連するアプリケーションから表示を受信することを含むことを特徴とする請求項９に記載の方法。
【請求項１３】
前記ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示にアクセスすることは、別のメッセージで表示を受信することを含むことを特徴とする請求項９に記載の方法。
【請求項１４】
別のメッセージで表示を受信することは、前記リングのツリー内の別のノードからのメッセージで表示を受信することを含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示にアクセスすることは、発信元ノードがメッセージを前記発信元ノードの副次リング内の所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示を受信することを含むことを特徴とする請求項９に記載の方法。
【請求項１６】
前記ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示にアクセスすることは、発信元ノードがメッセージを前記発信元ノードの副次リングのサブリング内の所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを示す表示を受信することを含むことを特徴とする請求項９に記載の方法。
【請求項１７】
ノードが、発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを判定することは、前記発信元ノードが、前記発信元ノードがメッセージを前記リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを判定することを含むことを特徴とする請求項８に記載の方法。
【請求項１８】
前記目標近傍域リングおよび前記目標近傍域リングの先祖リングのうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノードを識別することは、前記ノードにおいてローカル知識を参照して、前記目標近傍域リング内の任意のノードを識別することを含むことを特徴とする請求項８に記載の方法。
【請求項１９】
前記目標近傍域リングおよび前記目標近傍域リングの先祖リングのうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノードを識別することは、前記目標近傍域リングのメンバーであるエントリノードを識別することを含むことを特徴とする請求項８に記載の方法。
【請求項２０】
前記目標近傍域リングおよび前記目標近傍域リングの先祖リングのうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノードを識別することは、前記目標近傍域リングの先祖リングのメンバーであるエントリノードを識別することを含むことを特徴とする請求項８に記載の方法。
【請求項２１】
前記目標近傍域リングの先祖リングのメンバーであるエントリノードを識別することは、前記目標近傍域リングの最も近接する先祖リングである、前記目標近傍域リングの先祖リングのメンバーであるエントリノードを識別することを含むことを特徴とする請求項２０に記載の方法。
【請求項２２】
前記目標近傍域リングおよび前記目標近傍域リングの先祖リングのうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノードを識別することは、
前記ノードが、副次リングセットエントリテーブルを参照して、前記目標近傍域リングの先祖リング内にある送信側ノードの副次リングセットエントリテーブル内のノードを識別することと、
前記メッセージを前記先祖リング内の前記識別されたノードに送信することと
を含むことを特徴とする請求項８に記載の方法。
【請求項２３】
前記先祖リング内の前記ノードが、ローカル知識を参照して、前記目標近傍域リング内の任意のノードを識別することをさらに含むことを特徴とする請求項２２に記載の方法。
【請求項２４】
前記先祖リング内の前記ノードが、副次リングセットエントリテーブルを参照して、前記目標近傍域リングの前記最も近接する先祖リング内にある前記識別されたノードの副次リングセット内のさらなるノードを識別することと、
前記メッセージを前記さらなるノードに送信することと
をさらに備えることを特徴とする請求項２２に記載の方法。
【請求項２５】
前記目標近傍域リングおよび前記目標近傍域リングの先祖リングのうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノードを識別することは、前記ノードが、エントリノードディレクトリ機構を使用して、前記目標近傍域リングのメンバーノードであることが知られているエントリノードを識別することを含むことを特徴とする請求項８に記載の方法。
【請求項２６】
前記ノードが、エントリノードディレクトリ機構を使用して、前記目標近傍域リングのメンバーノードであることが知られているエントリノードを識別することは、
エントリノードルックアップ要求メッセージをランデブーポイントにルーティングすることと、
前記ルックアップ要求に対応し複数のエントリノードを含むエントリノードルックアップ応答を受信することと
を含むことを特徴とする請求項２５に記載の方法。
【請求項２７】
前記ルックアップ要求に対応するエントリノードルックアップ応答を受信することは、前記ランデブーポイントからエントリノードルックアップ応答を受信することを含むことを特徴とする請求項２６に記載の方法。
【請求項２８】
前記ルックアップ要求に対応するエントリノードルックアップ応答を受信することは、エントリノードディレクトリ機構に登録されている１つまたは複数のエントリノードを含むエントリノードルックアップ応答を受信することを含むことを特徴とする請求項２６に記載の方法。
【請求項２９】
エントリノードディレクトリ機構に登録されている１つまたは複数のエントリノードを含むエントリノードルックアップ応答を受信することは、前記ランデブーポイントに登録されている１つまたは複数のエントリノードを含むエントリノードルックアップ応答を受信することを含むことを特徴とする請求項２８に記載の方法。
【請求項３０】
エントリノードディレクトリ機構に登録されている１つまたは複数のエントリノードを含むエントリノードルックアップ応答を受信することは、前記ランデブーポイントに自身を登録したエントリノードを含むエントリノードルックアップ応答を受信することを含むことを特徴とする請求項２８に記載の方法。
【請求項３１】
エントリノードディレクトリ機構に登録されている１つまたは複数のノードを含むエントリノードルックアップ応答を受信することは、別のパーティによって前記エントリノードディレクトリ機構に登録されたエントリノードを含むエントリノードルックアップ応答を受信することを含むことを特徴とする請求項２８に記載の方法。
【請求項３２】
別のパーティによって前記エントリノードディレクトリ機構に登録されたエントリノードを含むエントリノードルックアップ応答を受信することは、別のランデブーポイントによって前記エントリノードディレクトリ機構に登録されたエントリノードを含むエントリノードルックアップ応答を受信することを含むことを特徴とする請求項３１に記載の方法。
【請求項３３】
エントリノードのエントリノード登録要求を受信することと、
前記エントリノードを前記ランデブーポイントに登録することと
をさらに備えることを特徴とする請求項２６に記載の方法。
【請求項３４】
コンピュータシステムにおいて使用し、リングのツリー（１９００）内の近傍域間通信を送信する方法を実施するためのコンピュータプログラム生成物であって、前記コンピュータプログラム生成物は、プロセッサによって実行されると、ノードに、
ノード（１３１１）がメッセージ（１９０３）を前記ノード（１３１１）の指定された副次リング（２１）に送信すべきことを判別させ、
前記ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブル（１９０４）にアクセスさせることであって、各副次リングセットエントリは、前記ノード（１３１１）の副次リング（２１）と、前記ノードの前記副次リング（２１）への対応する少なくとも１つのエントリノード（６５２１）とを示すように構成され、
前記指定された副次リング（２１）の少なくとも１つの副次リングセットエントリを前記ノードの副次リングセットエントリテーブル（１９０４）から識別させることであって、前記少なくとも１つの副次リングセットエントリの各々は、前記指定された副次リング（２１）の少なくとも１つのエントリノード（６５２１）を示し、
前記メッセージ（１９０３）を、示された少なくとも１つのエントリノード（６５２１）に送信させる
ためのコンピュータ実行可能命令を格納している、１つまたは複数のコンピュータ読み取り可能記憶媒体を備えることを特徴とするコンピュータプログラム生成物。
【請求項３５】
前記コンピュータ読み取り可能記憶媒体は、システムメモリを備えることを特徴とする請求項３４に記載のコンピュータプログラム生成物。
【請求項３６】
前記コンピュータ読み取り可能記憶媒体は、磁気ディスクを備えることを特徴とする請求項３４に記載のコンピュータプログラム生成物。
【請求項３７】
コンピュータシステムにおいて使用し、リングのツリー（１９００）内の近傍域間通信を送信する方法を実施するためのコンピュータプログラム生成物であって、前記コンピュータプログラム生成物は、プロセッサによって実行されるとき、ノードに、
発信元ノードが、メッセージ（１９９８）を前記リングのツリー（１９００）内の目標近傍域リング（１２２１）の所定のノードＩＤに最も近接する宛先ノードにルーティングしようとしていることを判定させ、
前記目標近傍域リング（１２２１）および前記目標近傍域リング（１２２２１）の先祖リング（２２１）のうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノード（４１２２１）を識別させ、
前記メッセージ（１９９８）を識別されたエントリノード（４１２２１）に送信させることであって、前記メッセージ（１９９８）は、前記識別されたエントリノード（４１２２１）が前記メッセージ（１９９８）を前記目標近傍域リング（１２２１）内の示された宛先ノードに最も近接するノードＩＤを有する前記ノードに送るべきであることを示す
ためのコンピュータ実行可能命令を格納している、１つまたは複数のコンピュータ読み取り可能記憶媒体を備えることを特徴とするコンピュータプログラム生成物。
【請求項３８】
前記コンピュータ読み取り可能記憶媒体は、システムメモリを備えることを特徴とする請求項３７に記載のコンピュータプログラム生成物。
【請求項３９】
前記コンピュータ読み取り可能記憶媒体は、磁気ディスクを備えることを特徴とする請求項３７に記載のコンピュータプログラム生成物。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ランデブーフェデレーション内の近傍域間通信に関する。
【背景技術】
【０００２】
１．背景技術および関連技術
コンピュータシステムおよび関連技術は、社会の多くの側面に影響を及ぼす。実際、情報を処理するコンピュータシステムの能力は、我々が暮らし、働く様式を変えてきた。コンピュータシステムが登場する以前は手作業で行われていた多くの作業（例えば、ワードプロセッシング、スケジューリング、およびデータベース管理）は、今ではコンピュータシステムが普通に行うようになっている。最近になって、コンピュータシステムは、相互に、および他の電子装置に結合されて、コンピュータシステムおよび他の電子装置が電子データを転送することができる有線および無線のコンピュータネットワークを形成するようになった。その結果、コンピュータシステムにおいて実行される多くのタスク（例えば、音声通信、電子メールへのアクセス、ホームエレクトロニクスの制御、Ｗｅｂブラウジング、および文書の印刷）は、有線および／または無線コンピュータネットワークを介する、多数のコンピュータシステム間および／またはその他の電子装置との間の電子メッセージの交換を含む。
【０００３】
しかし、ネットワークリソースを使用してコンピュータ制御のタスクを実行するために、コンピュータシステムは、ネットワークリソースを識別してアクセスする何らかの方法を備える必要がある。したがって、リソースは通常、例えば、リソースを一意に識別して、あるリソースを他のリソースと区別するために使用することができる、ネットワークアドレスなどの一意の識別子を割り当てられる。したがって、リソースを使用しようと望むコンピュータシステムは、リソースに対応するネットワークアドレスを使用してリソースに接続することができる。しかし、コンピュータシステムがネットワークリソースのネットワークアドレスについての予備知識を持たない場合、ネットワークリソースにアクセスすることは困難になる可能性がある。例えば、コンピュータシステム（または別のネットワーク化されたコンピュータシステム）は、ネットワークプリンタのネットワークアドレスを認識していない限り、ネットワークプリンタにおいて文書を印刷することはできない。
【０００４】
したがって、コンピュータシステムが以前の不明のリソースを識別（およびアクセス）するために、様々な機構（例えば、ドメインネームシステム（「ＤＮＳ」）、Ａｃｔｉｖｅ  Ｄｉｒｅｃｔｏｒｙ（「ＡＤ」）、分散ファイルシステム（「ＤＦＳ」）が開発された。しかし、様々なコンピュータネットワークを介してアクセス可能なリソース（例えば、装置およびサービス）の数は膨大で多岐にわたるため、開発者は、多種多様なリソース識別およびアクセスの機構を実施するアプリケーションを開発する必要に迫られる場合も多い。様々な機構は各々、異なるコーディング要件を備えることもあり、アプリケーションで必要とされる機能をすべて開発者に提供することができるわけではない。
【０００５】
例えば、ＤＮＳが分散管理アーキテクチャ（つまり、集中管理が必要とされない）を備えていたとしても、ＤＮＳは十分に動的ではなく、自己組織化型（self-organizing）ではなく、弱いデータおよびクエリモデルをサポートし、固定のルートのセットを有する。一方、ＡＤは、十分に動的であるが、集中管理を必要とする。さらに、様々な機構の側面は、相互に互換性がないこともある。例えば、ＤＮＳを使用して識別されたリソースは、ＤＦＳルーティングプロトコルと互換性がないこともある。したがって、開発者は、最も適切な機構を選択して、その他の機構の利点をあきらめることを余儀なくされる場合もある。
【０００６】
リソースを識別する機構は、ピアツーピアネットワークにおいて特に問題となる可能性もある。ＤＮＳは、ホスト名をキーとして、ＩＰアドレスを値として、ルックアップ要求を実施するために特殊ルートサーバのセットに依存する、ルックアップサービスを提供する。さらに、ＤＮＳは、クライアントがネームサーバの階層をナビゲートできるようにするための情報（ＮＳレコード）の管理を必要とする。したがって、リソースは、ネットワーク上でリソースが識別される前に、ＤＮＳに入れられる必要がある。ノードがネットワークと頻繁に接続および切断するような大規模なネットワークでは、情報のエントリに依存することは必ずしも実際的ではない。加えて、ＤＮＳは、ホストまたはサービスを見つけるタスクに特化されており、その他のタイプのリソースには一般に適用可能ではない。
【０００７】
したがって、リソース識別およびアクセスのためのその他の機構が開発され、これらの欠点に対処しようと試みられた。多くの機構は、ＤＮＳよりもさらに拡張性のある分散ルックアッププロトコルを含む。これらの機構は、様々なノード配置およびルーティングアルゴリズムを使用して、要求を対応するリソースにルーティングし、ルックアップのための情報を格納する。
【０００８】
これらの機構のうちの少なくとも１つは、ネットワーク内の各ノードにおいてローカルマルチレベル近隣マップを使用して、メッセージを宛先ノードにルーティングする。これは基本的に、各ノードが、対応するノードのツリー（その近隣マップ内のノード）の「ルートノード」であるようなアーキテクチャをもたらす。メッセージは、宛先ＩＤに１桁ずつ増分的にルーティングされる（例えば、＊＊＊６＝＞＊＊４６＝＞、＊３４６＝＞２３４６、ここで＊はワイルドカードを表す）。これらのタイプの機構のルーティング効率は、Ｏ（ｌｏｇＮ）ルーティングホップであり、ノードがＯ（ｌｏｇＮ）サイズのルーティングテーブルを保持することを必要とする。
【０００９】
これらの機構のうちの他の少なくとも１つは、数字の線形リングから取られた一意のＩＤを、ノードに割り当てる。ノードは、（ＩＤ値に従って）それらの直後の後続ノード、およびＩＤ値が値ＩＤ＋２Lの最も近接する後続であるようなノードを指し示すポインタを含む、ルーティングテーブルを保持する。これらのタイプの機構のルーティング効率も、Ｏ（ｌｏｇＮ）ルーティングホップであり、ノードがＯ（ｌｏｇＮ）サイズのルーティングテーブルを保持することを必要とする。
【００１０】
さらなる機構のうちの少なくとも１つは、Ｏ（ｌｏｇＮ1/d）ルーティングホップを必要とし、ノードがＯ（Ｄ）サイズのルーティングテーブルを保持することを必要とする。したがって、これらのすべての機構のルーティング効率は、少なくとも部分的に、システム内のノードの数によって決まる。
【００１１】
さらに、（少なくとも一部の機構の）ＩＤはリング周囲に均等に分散されうるので、リング上のノード間のルーティングが何らかの非効率をもたらす多少の可能性が常にある。例えば、ルーティングホップは、広大な地理的距離を横断するか、さらに高価なリンクを横断するか、あるいはセキュリティ保護されていないドメインを通過する可能性がある。加えて、メッセージルーティングが複数のホップを伴う場合、そのようなイベントが複数回発生する可能性も一部ある。残念なことに、これらの機構は、相互に関して（物理的またはそれ以外の）ノードの近傍域（proximity）を考慮に入れることはない。例えば、リング上のノード分布に応じて、メッセージをニューヨークからボストンにルーティングすることは、ニューヨークから、ロンドン、アトランタ、東京、その後ボストンへとメッセージをルーティングすることを伴う可能性もある。
【００１２】
したがって、少なくとも１つの他のより最新の機構は、近傍域を単一のスカラ近傍域メトリック（例えば、ＩＰルーティングホップまたは地理的距離）として定義することにより、近傍域を考慮に入れる。これらの機構は、ルーティングテーブルエントリの近傍域ベースの選択の概念を使用する。各ルーティングテーブルエントリには数多くの「正しい」ノード候補があるので、これらの機構は、候補ノードの中から近位に近接したノードを選択しようと試みる。これらの機構は、各ノードが所定のＩＰアドレスを持つノードからそれ自身までの「距離」を判別することができるようにする機能を提供することができるからである。メッセージは、さらに遠く離れたノードへとルーティングする前に、宛先に向けて進行するように、より近接する近傍域のノード間でルーティングされる。したがって、一部のリソースを保つことができ、ルーティングの効率はさらに高まる。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
残念なことに、これらの既存の機構は通常、特に、ノード間の対称関係（つまり、第１のノードが第２のノードをそのパートナーであると見なし、第２のノードもまた第１のノードをパートナーであると見なす場合）、リング上の両方向のメッセージのルーティング（右回りおよび左回り）、複数の近傍域メトリクスに基づくノードのリンクリストの区分化、および複数の近傍域メトリクスに基づくメッセージのルーティングを提供することはない。これらが欠如しているということは、例えば、ネットワークの全ノードにデータをブロードキャストする場合などのような、ネットワークのノード間の、動的な、分散された、効率的なデータの転送を制限する可能性がある。
【課題を解決するための手段】
【００１４】
本発明は、ランデブーフェデレーション内の近傍域間通信を容易にするための方法、システム、およびコンピュータプログラム生成物に及ぶ。一部の実施形態において、ノードの副次リング（collateral ring）セットエントリテーブルが保持される。ノードは、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの少なくとも１つの対応するエントリノードを示すように構成される。リングのツリーの構成に関連する情報を保持する使用可能なリソースから、副次リングセットエントリテーブル情報が発見される。副次リングセットエントリテーブルは、発見された副次リングセットエントリテーブル情報に基づいて、適切な副次リングセットエントリ状態で更新される。適切な副次リングセットエントリ状態は、ノードの副次リング、およびノードの副次リングへの少なくとも１つの対応するエントリノードを含む。
【００１５】
その他の実施形態において、近傍域間通信は、リングのツリーで送信される。近傍域間通信の１つの実施形態において、メッセージをノードの指定された副次リングに送信するノードが判別される。該ノードは、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの対応する少なくとも１つのエントリノードを示すように構成される。指定された副次リングの少なくとも１つの副次リングセットエントリは、ノードの副次リングセットエントリテーブルから識別される。少なくとも１つの副次リングセットエントリの各々は、指定された副次リングの少なくとも１つのエントリノードを示す。メッセージは、少なくとも１つの示されたエントリノードに送信される。
【００１６】
近傍域間通信のもう１つの実施形態において、発信元ノードが、リングのツリー内の目標（target）近傍域リングの所定のノードＩＤに最も近接する宛先ノードに、メッセージをルーティングするよう意図することが判別される。目標近傍域リングおよび目標近傍域リングの上位リングのうちの少なくとも１つのメンバーノードであることが知られている１つまたは複数のエントリノードが識別される。メッセージは、識別されたエントリノードに送信される。メッセージは、識別されたエントリノードが該メッセージを、目標近傍域リング内の示された宛先ノードに最も近接するノードＩＤを有するノードに送るべき（resolve）であることを示す。
【００１７】
この「課題を解決するための手段」は、以下の「発明を実施するための形態」でさらに説明される一連の概念を簡略化された形態で示すために提供される。この「課題を解決するための手段」は、請求項に係る主題の重要な特徴または基本的特徴を特定することを意図するものではなく、また請求項に係る主題の範囲を判別する際の補助として使用されることを意図するものでもない。
【００１８】
追加の特徴および利点は、以下の説明に示され、部分的に説明から明らかとなるか、または本明細書における教示の実施により習得することができる。本発明の特徴および利点は、添付の特許請求の範囲に特に指摘されている手段および組合せにより実現され取得されてもよい。本発明の特徴は、以下の説明および添付の特許請求の範囲からさらに完全に明らかとなるか、またはこれ以降に示される本発明の実施により習得することができる。
【００１９】
前述およびその他の利点と特徴が取得されうる方法を説明するために、上記で簡単に説明されている本主題のさらに詳細な説明が、添付の図面に示される特定の実施形態を参照して提供される。これらの図面が代表的な実施形態のみを示し、したがって範囲を限定するものと見なされるべきではないという理解のもとに、実施形態は、添付の図面の使用を通じてさらなる特定性および詳細をもって記述され説明されるであろう。
【図面の簡単な説明】
【００２０】
【図１】フェデレーションインフラストラクチャの例を示す図である。
【図２】パートナーへの間接的なルーティング要求を容易にするコンピュータアーキテクチャの例を示す図である。
【図３】ソートされたリストおよび対応するリングの形態でフェデレーションインフラストラクチャ内のノード間の２項関係の例を示す図である。
【図４】近傍ルーティングを容易にするリングの例示のリングを示す図である。
【図５】近傍ルーティングを容易にするリングの近傍域誘導区分ツリーの例を示す図である。
【図５Ａ】図５のリングの区分ツリーの一部をさらに詳細に示して、図５のリングの近傍域誘導区分ツリーの例を説明する図である。
【図６】本発明の原理に適切なオペレーティング環境を示す図である。
【図７】近傍域基準を考慮したノードルーティングテーブルを取り込む方法を示す例示の流れ図である。
【図８】フェデレーションインフラストラクチャのノードを区分する方法を示す例示の流れ図である。
【図９】ノードルーティングテーブルを取り込む方法を示す例示の流れ図である。
【図１０】メッセージを宛先ノードに向けて数値的にルーティングする方法を示す例示の流れ図である。
【図１１】メッセージを宛先ノードに向けて近位的にルーティングする方法を示す例示の流れ図である。
【図１２Ａ】既存のフェデレーション内のメンバーシップを確立するノードの例を示す図である。
【図１２Ｂ】メッセージを交換するフェデレーションインフラストラクチャ内のノードの例を示す図である。
【図１３】フェデレーションインフラストラクチャ内のメンバーシップを確立する方法を示す例示の流れ図である。
【図１４】フェデレーションインフラストラクチャ内のメンバーシップを保持する方法を示す例示の流れ図である。
【図１５】別のノードの活性情報を発見する方法を示す例示の流れ図である。
【図１６】メッセージモデルおよび関連する処理モデルの例を示す図である。
【図１７】ファンクション層とアプリケーション層との間に発生しうる多数の活性インタラクションの例を示す図である。
【図１８】要求−応答メッセージ交換パターンのメッセージ形成部分がリング上のノードにわたりルーティングされる例を示す図である。
【図１９Ａ】近傍域間通信を容易にするリングの近傍域誘導区分ツリーの例を示す図である。
【図１９Ｂ】図１９Ａからのリングの近傍域誘導区分ツリーの例を示す別の図である。
【図１９Ｃ】図１９Ａからのリングの近傍域誘導区分ツリーの例の一部を示す区分図である。
【図１９Ｄ】図１９Ａからのリングの近傍域誘導区分ツリーの例からの中間リングを示す拡大図である。
【図１９Ｅ】図１９Ａからのリングの近傍域誘導区分ツリーの例を示すさらに別の図である。
【図１９Ｆ】図１９Ａからのリングの近傍域誘導区分ツリーの例をさらに示す図である。
【図１９Ｇ】図１９Ｆの一部を示す拡大図である。
【図２０】リングのツリー内のノードの副次リングセットを保持する方法を示す例示の流れ図である。
【図２１】リングのツリー内の近傍域間通信を送信する方法を示す例示の流れ図である。
【図２２】リングのツリー内の近傍域間通信を送信する別の方法を示す例示の流れ図である。
【発明を実施するための形態】
【００２１】
本発明は、ランデブーフェデレーション内の近傍域間通信を容易にするための方法、システム、およびコンピュータプログラム生成物に及ぶ。一部の実施形態において、ノードの副次リングセットエントリテーブルが保持される。ノードは、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの少なくとも１つの対応するエントリノードを示すように構成される。リングのツリーの構成に関連する情報を保持する使用可能なリソースから副次リングセットエントリテーブル情報が発見される。副次リングセットエントリテーブルは、発見された副次リングセットエントリテーブル情報に基づいて適切な副次リングセットエントリ状態で更新される。適切な副次リングセットエントリ状態は、ノードの副次リング、およびノードの副次リングへの少なくとも１つの対応するエントリノードを含む。
【００２２】
その他の実施形態において、近傍域間通信は、リングのツリー内で送信される。近傍域間通信の１つの実施形態において、ノードが、メッセージをノードの指定された副次リングに送信すべきことが判別される。ノードは、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの対応する少なくとも１つのエントリノードを示すように構成される。指定された副次リングの少なくとも１つの副次リングセットエントリは、ノードの副次リングセットエントリテーブルから識別される。少なくとも１つの副次リングセットエントリの各々は、指定された副次リングの少なくとも１つのエントリノードを示す。メッセージは、示された少なくとも１つのエントリノードに送信される。
【００２３】
近傍域間通信のもう１つの実施形態において、発信元ノードがメッセージを、リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングするよう意図することが判別される。目標近傍域リングおよび目標近傍域リングの上位リングのうちの少なくとも１つのメンバーノードであることが知られている１つまたは複数のエントリノードが識別される。メッセージは、識別されたエントリノードに送信される。メッセージは、識別されたエントリノードが、目標近傍域リングの示された宛先ノードに最も近接するノードＩＤを有するノードにメッセージを帰着させるべきであることを示す。
【００２４】
本発明の範囲内の実施形態は、コンピュータ実行可能命令を保持または記憶し、またはデータ構造を格納するためのコンピュータ読み取り可能媒体も含む。そのようなコンピュータ読み取り可能媒体は、汎用または特殊用途のコンピュータシステムによってアクセスできる任意の使用可能な媒体であってもよい。例えば、そのようなコンピュータ読み取り可能媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭその他の光ディスクストレージ、磁気ディスクストレージその他の磁気記憶装置のような物理記憶媒体、あるいは所望のプログラムコード手段をコンピュータ実行可能命令、コンピュータ読み取り可能命令、またはデータ構造の形態で保持または格納するために使用することができ、汎用または特殊用途コンピュータによってアクセスすることができる、任意の他の媒体を備えることができるが、これらに限定されることはない。
【００２５】
この説明および特許請求の範囲において、「ネットワーク」は、コンピュータシステムおよび／またはモジュール（例えば、ハードウェアおよび／またはソフトウェアモジュール）間の電子データの伝送を可能にする（おそらくは異なる速度の）１つまたは複数のデータリンクとして定義される。情報が、ネットワークまたは別の通信接続（有線、無線、あるいは有線または無線の組合せ）を介してコンピュータシステムに転送または提供される場合、接続は適切にコンピュータ読み取り可能媒体として見なされる。このように、そのような接続は、適正にコンピュータ読み取り可能媒体と称される。上記の組合せも、コンピュータ読み取り可能媒体の範囲内に含まれるべきである。コンピュータ実行可能命令は、例えば、汎用コンピュータシステムまたは特殊用途コンピュータシステムに特定の機能または機能のグループを実行させる命令およびデータを備える。コンピュータ実行可能命令は、例えば、アセンブリ言語またはソースコードのようなバイナリの中間形式の命令であってもよい。一部の実施形態において、例えば特殊用途向け集積回路またはゲートアレイのようなハードウェアモジュールは、本発明の原理を実施するために最適化される。
【００２６】
この説明および以下の特許請求の範囲において、「ノード」は、電子データに対するオペレーションを実行するために共に動作する、１つまたは複数のソフトウェアモジュール、１つまたは複数のハードウェアモジュール、またはその組合せとして定義される。例えば、ノードの定義は、パーソナルコンピュータのハードウェアコンポーネント、およびパーソナルコンピュータのオペレーティングシステムのようなソフトウェアモジュールを含む。モジュールの物理的配置は、重要ではない。ノードは、ネットワークを介して結合された１つまたは複数のコンピュータを含むことができる。同様に、ノードは、（メモリおよびプロセッサのような）内部モジュールが電子データに対するオペレーションを実行するために共に動作する（携帯電話／携帯情報端末「ＰＤＡ」のような）単一の物理的な装置を含むことができる。さらに、ノードは、例えば、特殊用途向け集積回路を含むルータなど、特殊用途ハードウェアを含むことができる。
【００２７】
本発明が、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ページャ、ルータ、ゲートウェイ、ブローカ、プロキシ、ファイアウォール、リダイレクタ、ネットワークアドレストランスレータなどを含む、多数のタイプのノード構成でネットワークコンピューティング環境において実施できることを当業者であれば理解するであろう。本発明はまた、ネットワークを通じて（有線データリンク、無線データリンクによるか、または有線と無線のデータリンクの組合せにより）リンクされたローカルおよびリモートノードが共にタスクを実行する分散システム環境において実施することもできる。分散システム環境において、プログラムモジュールは、ローカルおよびリモートの記憶装置に配置することができる。
【００２８】
フェデレーションアーキテクチャ
図１は、フェデレーションインフラストラクチャ１００の例を示す。フェデレーションインフラストラクチャ１００は、様々なタイプのフェデレーションパートナーシップを形成することができるノード１０１、１０２、１０３を含む。例えば、ノード１０１、１０２、１０３は、ルートノードなしでピアとして相互の間で連合（federate）されてもよい。各ノード１０１、１０２、および１０３はそれぞれ、対応するＩＤ１７１、１８２、および１９３を有する。
【００２９】
一般に、ノード１０１、１０２、１０３は、フェデレーションプロトコルを使用してパートナーシップを形成し、情報（例えば、他のノードとの対話に関連する状態情報）を交換することができる。パートナーシップの形成および情報の交換は、リソースへのさらに効率的で信頼性の高いアクセスを容易にする。その他の中間ノード（図示せず）は、ノード１０１、１０２、および１０３（例えば、１７１から１９３のＩＤを有するノード）の間に存在することができる。したがって、例えば、ノード１０１とノード１０３の間をルーティングされたメッセージは、その他の中間ノードのうちの１つまたは複数を通過することができる。
【００３０】
フェデレーションインフラストラクチャ１００内のノード（その他の中間ノードを含む）は、対応するランデブープロトコルスタックを含むことができる。例えば、ノード１０１、１０２、および１０３はそれぞれ、対応するランデブープロトコルスタック１４１、１４２、および１４３を有する。プロトコルスタック１４１、１４２、および１４３の各々は、アプリケーション層（例えば、アプリケーション１２１、１２２、および１２３）およびその他の下位層（例えば、対応する他の下位層１３１、１３２、および１３３）を含む。ランデブープロトコルスタック内の各層は、リソース要求の対応するリソースとのランデブーに関連する様々な機能に関与する。
【００３１】
例えば、その他の下位層は、チャネル層、ルーティング層、およびファンクション層を含むことができる。一般に、チャネル層は、あるエンドポイントから別のエンドポイントへ（例えば、ノード１０１からノード１０３）メッセージを（例えば、ＷＳ−ＲｅｌｉａｂｌｅＭｅｓｓａｇｉｎｇおよびＳｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ（「ＳＯＡＰ」）を使用して）確実にトランスポートすることに関与する。チャネル層はまた、メッセージングヘッダの確実な着信および発信を処理すること、および確実なメッセージングセッションに関連する状態を保持することに関与する。
【００３２】
一般に、ルーティング層は、宛先に向かう次のホップを計算することに関与する。ルーティング層はまた、アドレッシングおよびルーティングメッセージングヘッダの着信および発信を処理すること、およびルーティング状態を保持することに関与する。一般に、ファンクション層は、参加および離脱（depart）要求、ｐｉｎｇ、更新、およびその他のメッセージなど、ランデブープロトコルメッセージの発行および処理、ならびにそれらのメッセージへの応答の生成に関与する。ファンクション層は、ルーティング層からの要求メッセージを処理して、対応する応答メッセージがある場合は、ルーティング層を使用して発信元ノードに送信する。ファンクション層はまた、要求メッセージを開始し、ルーティング層を使用して要求メッセージを配信させる。
【００３３】
一般に、アプリケーション層は、ファンクション層から配信された非ランデブープロトコル固有データ（つまり、アプリケーションメッセージ）を処理する。ファンクション層は、アプリケーション層からのアプリケーションデータにアクセスし、アプリケーションデータを取得してランデブープロトコルメッセージに書き込む（つまり、ｐｉｎｇおよび更新）。つまり、ファンクション層は、アプリケーションデータがランデブープロトコルメッセージに結合（piggyback）されるようにすることができ、アプリケーションデータが元の受信側ランデブープロトコルノードのアプリケーション層に渡されるようにすることができる。一部の実施形態において、アプリケーションデータは、リソースおよびリソースインタレストを識別するために使用される。したがって、アプリケーション層は、アプリケーション固有の論理と、リソースおよびリソースインタレストを識別する目的で他の下位層との間で受信および送信されたデータを処理する状態を含むことができる。
【００３４】
フェデレーション機構
ノードは、多種多様な機構を使用して連合することができる。第１のフェデレーション機構は、情報を他のすべてのピアノードに転送するピアノードを含む。ノードがフェデレーションインフラストラクチャに参加すべき場合、ノードは、例えばＷＳ−Ｄｉｓｃｏｖｅｒｙなどのブロードキャスト／マルチキャスト発見プロトコルを使用して、その存在を宣言し、他のノードを検出するためにブロードキャスト／マルチキャスト検索（find）を発行する。次いで、ノードはネットワーク上にすでに存在する他のノードとの間に単純転送パートナーシップを確立し、新しく参加するノードとの新しいパートナーシップを受け入れる。その後、ノードは単に、すべてのアプリケーション固有メッセージをそのすべてのパートナーノードに転送する。
【００３５】
第２のフェデレーション機構は、アプリケーション固有メッセージをそれらの宛先に最も効率的に伝送するピアノードを含む。新しいノードがフェデレーションインフラストラクチャに参加すべき場合、新しいノードは、例えばＷＳ−Ｄｉｓｃｏｖｅｒｙなどのブロードキャスト／マルチキャスト発見プロトコルを使用して、その存在を宣言し、ブロードキャスト／マルチキャスト検索を発行して、フェデレーションインフラストラクチャの一部である他のノードを検出する。別のノードを検出すると、新しいノードは他のノードとのパートナーシップを確立する。確立されたパートナーシップから、新しいノードは、すでにフェデレーションインフラストラクチャに参加している他のノードの存在に関して学習する。次いで、この新しいノードは、これらの新たに学習したノードとのパートナーシップを確立して、任意の新しい着信パートナーシップ要求を受け入れる。
【００３６】
特定のアプリケーション固有メッセージのノード出現／離脱およびインタレストの登録はいずれも、フェデレーションインフラストラクチャを通じてフラッディングされ、その結果すべてのノードが、アプリケーション固有メッセージに他のパートナーノードおよびインタレストの登録に関するグローバルな知識を有することになる。そのようなグローバルな知識を使用して、任意のノードは、アプリケーション固有メッセージを、アプリケーション固有メッセージにインタレストを表したノードに直接送信することができる。
【００３７】
第３のフェデレーション機構は、すべてのアプリケーション固有メッセージをそれらの宛先に間接的に転送するピアノードを含む。この第３の機構において、ノードは、例えば１２８ビットまたは１６０ビットＩＤのような識別子（ＩＤ）を割り当てられる。所与のアプリケーション固有メッセージのインタレストの登録の保持に関与するノードは、そのＩＤが、アプリケーション固有メッセージの宛先識別（例えば、ＵＲＩ）をこの１２８ビットまたは１６０ビットＩＤスペースにマッピング（例えば、ハッシング）することによって取得されたものに最も近接するノードであると判別することができる。
【００３８】
この第３の機構において、ノード出現および離脱はファブリック全体にわたってフラッディングされる。一方、特定のアプリケーション固有メッセージのインタレストの登録は、そのような登録情報を保持することに関与すると判別されたノードに転送される。拡張性、ロードバランシング、耐障害性のために、特定のアプリケーション固有メッセージのインタレストの登録を受信するノードは、その近隣セット内にその登録情報を確実にフラッディングすることができる。指定されたノードの近隣セットを、指定されたノードのＩＤのいずれかの側に所定の範囲内のＩＤを有するノードのセットであると判別することができる。
【００３９】
第２の機構と同様に、新しく参加するノードは、例えばＷＳ−Ｄｉｓｃｏｖｅｒｙなどのブロードキャスト／マルチキャスト発見プロトコルを使用して、その存在を宣言し、ローカルブロードキャスト／マルチキャスト検索を発行して、すでにフェデレーションインフラストラクチャの一部であるノードを検出する。新しいノードは、発見されたノードとのパートナーシップを確立し、そのパートナーシップを使用してフェデレーションインフラストラクチャに参加している他の新しいノードの存在に関して学習する。次いで、新しいノードはさらに、新たに発見されたノードとのパートナーシップを確立して、任意の新しい着信パートナーシップ要求を受け入れる。新しいノードは、関与しているそのパートナーからの特定のアプリケーション層固有リソースへのインタレストの着信登録を受け入れ、それらをその近隣セットにわたりフラッディングすることができる。したがって、メッセージは一般に、（例えば、新しく参加するノードがパートナーとなっている、またはパートナーノードが認識している）中間ルーティングノードを介して、それらの最終宛先に転送することができる。
【００４０】
着信アプリケーション固有メッセージの受信に応答して、新しいノードは、メッセージ内で指定された宛先の登録情報を保持することに関与しうるパートナーノードに、メッセージを転送する。したがって、この第３の機構を使用する場合、フェデレーションインフラストラクチャ内のすべてのノードは、他のすべてのノードについてのグローバルな知識を備えているが、登録情報はノード間で効率的に区分される。アプリケーション固有メッセージは、それらのアプリケーション固有メッセージのインタレストの登録情報を保持する責任があるパートナーのノードのみを介してそれらの最終宛先に伝送される。したがって、間接化は、処理されるメッセージのインタレストの登録情報のグローバルな知識を有するパートナーノードにのみ転送することによって達成される。これは、すべてのパートナーノードに転送することにより間接化が達成される第１の機構の場合とは対照的である。
【００４１】
第４のフェデレーション機構は、メッセージを他のピアノードにルーティングするピアノードを含む。この第４の機構は、少なくとも、ノード出現／離脱および特定のアプリケーション固有メッセージのインタレストの登録が共に、フラッディングされるのではなく、すべてルーティングされるという点において、第３の機構とは異なる。ルーティングプロトコルは、アプリケーション固有メッセージと、アプリケーション固有メッセージでインタレストを表す登録メッセージとの間のランデブーを保証するように設計される。
【００４２】
図２は、パートナーへの間接的なルーティング要求を容易にするコンピュータアーキテクチャ２００の例を示す。コンピュータアーキテクチャ２００は、フェデレーションインフラストラクチャに参加している複数のローカル発見範囲にわたり展開する可能性のある様々なタイプのコンピュータシステムおよび装置を表す。
【００４３】
ワークステーション２３３は、登録されているＰｎＰ（プラグアンドプレイ）プロバイダインスタンスを含むことができる。このＰｎＰプロバイダインスタンスの存在をそのパートナーに知らせるため、ワークステーション２３３は、フェデレーションインフラストラクチャにわたり登録要求２０１をルーティングする。登録要求２０１は最初にラップトップ２３１に転送され、ラップトップ２３１は登録情報２０１をメッセージブローカ２３７に転送し、メッセージブローカ２３７は登録情報２０１をメッセージゲートウェイ２４１に転送する。メッセージゲートウェイ２４１は、登録情報登録要求２０１をそのデータベースに保存し、成功メッセージ２０４をワークステーション２３３に返す。
【００４４】
続いて、今回実行しているサービスのプロバイダインスタンスである、別の登録されているプロバイダインスタンスが、ワークステーション２３３内でアクティブになる。今回、ノードは、メッセージゲートウェイ２４１が登録の責任を負っていることを認識して、登録要求２０５をメッセージゲートウェイ２４１に直接転送する。メッセージゲートウェイ２４１は、登録情報登録要求２０５をそのデータベースに保存し、成功メッセージ２０６をワークステーション２３３に返す。
【００４５】
続いて、プリンタ２３６（例えば、ＵＰｎＰプリンタ）が電源オンされ、宣言（announcement）２０７を送信する。サーバ２３４は宣言２０７を検出し、登録要求２０８をメッセージブローカ２３７にルーティングする。メッセージブローカ２３７は、登録要求２０８をメッセージゲートウェイ２４１に転送する。メッセージゲートウェイ２４１は、登録情報登録要求２０８をそのデータベースに保存し、成功メッセージ２１０をサーバ２３４に返す。
【００４６】
続いて、パーソナルコンピュータ２４２は、ルックアップ要求２１１を発行してすべての装置を発見する。パーソナルコンピュータ２４２は、ルックアップ要求２１１の転送先を認識していないので、ワークステーション２４３を通じてルックアップ要求２１１をルーティングする。登録およびルックアップ要求は同じ宛先にルーティングされるので、ルーティングプロトコルは基本的に、２つの要求の間のランデブーを保証し、その結果ワークステーション２４３は、検索要求２１１をメッセージゲートウェイ２４１に転送することになる。メッセージゲートウェイ２４１は、該メッセージゲートウェイ２４１が保持している登録情報をルックアップして、検索要求２１１をワークステーション２３３およびサーバ２３４の両方に転送する。ワークステーション２３３およびサーバ２３４は、応答メッセージ２１４および２１６をパーソナルコンピュータ２４２にそれぞれ送信する。
【００４７】
この第４の機構は、要求を、要求に指定されている登録のグローバルな知識を有するノード（メッセージゲートウェイ２４１）に、（フラッディングではなく）ルーティングすることにより機能する。この第４の機構は基本的に、以下でさらに詳細に説明されるように、ルーティングがＯ（ｌｏｇＮ）ホップで達成されうることを保証するが、ここでＮはフェデレーションインフラストラクチャに参加しているノードの数である。この第４の機構は、ノードパートナーシップと登録情報の両方を効率的に区分するので、インターネットのような、非常に大規模なネットワークに合わせて拡張する。
【００４８】
いくつかのフェデレーション機構について説明してきたが、当業者には、その他のフェデレーション機構が可能であることが、この説明を検討した後明らかとなろう。
【００４９】
フェデレーション内のノード間の関係
したがって、フェデレーションは、情報が体系的かつ効率的に広められ配置されうる動的で拡張性のあるネットワークを形成するために相互の間で協調するノードのセットからなる。ノードは、再帰的、非対称的、推移的、全体的でありノード識別のドメインにわたって定義される２項関係を使用して、ソートされたリストとしてフェデレーションに参加するように編成される。ソートされたリストの両端は結合され、それによりリングを形成する。したがって、リスト内の各ノードは、自身が（モジュロ演算を使用した結果）ソートされたリストの中央にあるものと見なすことができる。さらに、リストは、任意のノードがいずれの方向にもリストをトラバースすることができるように、二重連結される。
【００５０】
各フェデレーションノードには、０から固定された上限までの、固定のＩＤのセットから（例えば、重複検出を用いた乱数発生器によって）ＩＤを割り当てることができる。したがって、固定上限のＩＤに１を加えると、ゼロのＩＤとなる（つまり、リンクリストの最後からリンクリストの最初に戻るように移動する）。加えて、ノード識別の値ドメインからノード自身への１対１のマッピング関数が定義される。
【００５１】
図３は、リンクリスト３０４の例および対応するリング３０６を表す。そのようなリングを所与として、以下の関数を定義することができる。
ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）：ノード識別の値ドメインからの値Ｖおよびメッセージ「Ｍｓｇ」を与えられ、マッピング関数を使用して識別がＶにマップされうるノードＸに、メッセージを配信する。  
Ｎｅｉｇｈｂｏｒｈｏｏｄ（Ｘ，Ｓ）：近隣は、基数がＳと等しいノードＸのいずれかの側のノードのセットである。
【００５２】
フェデレーション内のすべてのノードがリングのグローバルな知識を有する場合、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）は、マッピング関数をＶに適用することによって識別が得られるノードＸにＭｓｇを直接送信することで実施される。代替として、ノードが他のノードについて限られた知識を有する場合（例えば、直接隣接したノードについてのみ）、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）は、宛先ノードＸに到達するまで、リングに沿って連続するノードにメッセージを転送することにより実施される。
【００５３】
代替として（および有利なことに）、ノードは、（グローバルな知識を有するかまたは直接隣接するノード間のルーティングを実施する必要なく）分散二分検索を実行するのに十分なリングに関する知識を格納することができる。リング知識の量は、リング知識の保持が各ノードに与える影響は十分に小さいが、ルーティングホップの数が減少することでルーティングパフォーマンスの増大を可能にするように構成可能である。
【００５４】
前述のように、ＩＤを、自然数の十分に大きい有界集合にわたり定義された「＜」（小なり）の関係を使用して割り当てることができる。つまりその範囲が０と何らかの固定値の間の数（０と固定値を含む）の有限集合に及ぶ。したがって、フェデレーションに参加しているすべてのノードは、０から何らかの適切に選択された上限まで（０と上限を含む）の間にある自然数を割り当てられる。範囲は厳重なものである必要はなく、ノードに割り当てられている数値間に途切れがあってもよい。ノードに割り当てられている数値は、リング内のその識別としての役割を果たす。マッピング関数は、２つのノード識別の間に含まれる数を、識別がその数値に最も数値的に近接するノードにマップすることにより、数値スペースの途切れを考慮する。
【００５５】
この手法は、多数の利点を備えている。均等に分布した数を各ノードに割り当てることにより、リングのすべてのセグメントが均一に取り込まれる可能性が高まる。さらに、後続、先行、および近隣の計算は、モジュロ演算を使用して効率的に行うことができる。
【００５６】
一部の実施形態において、フェデレーションノードは、（例えば、乱数発生が使用される場合）２つのノードが同じＩＤを割り当てられる可能性が極めて低くなるように、十分に大きいＩＤスペース内からＩＤを割り当てられる。例えば、ノードは、０からｂn−１の範囲のＩＤを割り当てられてもよく、ここで、ｂは、例えば８または１６と等しく、ｎは、例えば１２８ビットまたは１６０ビットと等価の桁と等しい。したがって、ノードは、例えば、０から１６40−１（または、約１．４６１５０２Ｅ４８）の範囲からＩＤを割り当てられてもよい。０から１６40−１の範囲は、例えば、インターネット上のすべてのノードに一意のＩＤを割り当てるのに十分な数のＩＤを提供する。
【００５７】
したがって、フェデレーション内の各ノードは以下のものを有することができる。  
０からｂn−１の範囲で均一に分布された数値であるＩＤ
以下のもので構成されるルーティングテーブル（すべての演算はｂnを法として行われる）
後続ノード（ｓ）
先行ノード（ｐ）
ｓj．ｓ．ｉｄ＞（ｉｄ＋ｕ／２）、ｊ≧ｖ／２−１、およびｐk．ｐ．ｉｄ＜（ｉｄ−ｕ／２）、およびｋ≧ｖ／２−１であるような、近隣ノード（ｐk，．．．，ｐ1，ｐ，ｓ，ｓ1，．．．，ｓj）
ｒ±i＝ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（ｉｄ±ｂi，Ｍｓｇ）であるような、ルーティングノード（ｒ-(n-1)，．．．，ｒ-1，ｒ1，．．．，ｒn-1）
ここでｂは基数であり、ｎは桁数のフィールドサイズであり、ｕは近隣範囲であり、ｖは近隣サイズであり、演算はｂnを法として行われる。良好なルーティング効率および耐障害性のために、ｕおよびｖの値はｕ＝ｂかつｖ≧ｍａｘ（ｌｏｇ2（Ｎ），４）であってもよく、ここでＮは、フェデレーションに物理的に参加しているノードの合計数である。Ｎは、例えば、ＩＤの均一な分布がある場合、長さがｂよりも大きいかまたはｂと等しいリングセグメント上に存在するノードの数から推定することができる。ｂおよびｎの標準的な値は、ｂ＝８または１６、およびｎ＝１２８ビットまたは１６０ビットと等価の桁である。
【００５８】
したがって、ルーティングノードは、リングにまたがる対数指標（index）を形成することができる。リング上のノードの位置に応じて、例えば、ｉ＝（１，２，．．，（ｎ−１））として、ｉｄ±ｂiの集合内の各数値において既存のノードがある場合、正確な対数指標が可能である。しかし、集合内の各数値に既存のノードがないような場合もある。そのような場合には、ｉｄ±ｂiに最も近接するノードが、ルーティングノードとして選択されてもよい。結果として得られる対数指標は正確ではなく、集合内の一部の数値に対して一意のルーティングノードが十分ではないこともある。
【００５９】
再度図３を参照すると、図３は、ソートされたリスト３０４および対応するリング３０６の形態でフェデレーションインフラストラクチャ内のノード間の２項関係の例を示す。ソートされたリスト３０４のＩＤスペースは、０から２8−１（すなわち２５５）の範囲である。つまり、ｂ＝２、およびｎ＝８である。したがって、図３に示されるノードは、０から２５５の範囲のＩＤを割り当てられる。ソートされたリスト３０４は、再帰的、非対称的、推移的、かつ全体的でノード識別のドメインにわたり定義される２項関係を使用する。ソートされたリスト３０４の両端は結合され、それによりリング３０６を形成する。これにより、図３の各ノードは、自身がソートされたリスト３０４の中央にあるものと見なすことが可能になる。ソートされたリスト３０４は、任意のノードがいずれの方向にもソートされたリスト３０４をトラバースすることができるように、二重連結される。ソートされたリスト３０４（またはリング３０６）をトラバースする演算は、２8を法として行われる。したがって、２５５（またはソートされたリスト３０４の最後）＋１＝０（またはソートされたリスト３０４の最初）である。
【００６０】
ルーティングテーブルは、ＩＤ６４の後続がＩＤ７６（ＩＤ６４から直接右回りのＩＤ）であることを示す。後続は、例えば、新しいノード（例えば、７１のＩＤを持つ）が加わる場合、または既存のノード（例えば、ＩＤ７６）がフェデレーションインフラストラクチャを離れる場合などに、変化する可能性がある。同様に、ルーティングテーブルは、ＩＤ６４の先行がＩＤ５０（ＩＤ６４から直接左回りのＩＤ）であることを示す。先行は、例えば、新しいノード（例えば、５９のＩＤを持つ）が加わる場合、または既存のノード（例えば、ＩＤ５０）がフェデレーションインフラストラクチャを離れる場合などに、変化する可能性がある。
【００６１】
ルーティングテーブルはさらに、ＩＤ６４の近隣ノードのセットが、ＩＤ８３、７６、５０、および４６を有することを示す。近隣ノードのセットは、ＩＤ６４の指定された範囲（つまり、近隣範囲ｕ）内である指定されたノードの数（つまり、近隣サイズｖ）であってもよい。例えばＶ＝４およびＵ＝１０のような、多種多様な近隣サイズおよび近隣範囲が、近隣ノードのセットを識別するために使用できる可能性がある。近隣セットは、例えば、ノードがフェデレーションインフラストラクチャに加わるかまたはこれを離れる場合、あるいは指定されたノード数または指定された範囲が変更された場合に、変化する可能性がある。
【００６２】
ルーティングテーブルはさらに、ＩＤ６４が、ＩＤ２００、２、３０、４６、５０、６４、６４、６４、６４、７６、８３、９８、１３５および２００を有するノードにルーティングすることができることを示す。このリストは、ｉ＝（１，２，３，４，５，６，７）として、ｉｄ±２iの集合内の各数値に最も近接するノードを識別することにより生成される。つまり、ｂ＝２、かつｎ＝８である。例えば、ＩＤ７６を有するノードは、６４＋２3、つまり７２に最も近接するノードを計算することから識別されてもよい。
【００６３】
ノードは、先行ノード、後続ノード、近隣ノードのセット内の任意のノード、または任意のルーティングノードに、メッセージ（例えば、リソースへのアクセスの要求）を直接ルーティングすることができる。一部の実施形態において、ノードは、数字ルーティング関数を実施して、メッセージをルーティングする。したがって、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）をノードＸにおいて実施して、ＩＤが数値的にＶに最も近接するフェデレーション内のノードＹにＭｓｇを配信し、ノードＹのＩＤをノードＸに返すことができる。例えば、ＩＤ６４を有するノードは、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（２４３，Ｍｓｇ）を実施して、ＩＤ２５０を有するノードにメッセージがルーティングされるようにすることができる。しかし、ＩＤ２５０はＩＤ６４のルーティングノードではないので、ＩＤ６４はメッセージをＩＤ２（２４３に最も近接するルーティングノード）にルーティングすることができる。ＩＤ２を有するノードは、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（２４３，Ｍｓｇ）を実施して、メッセージがＩＤ２５０を有するノードに（直接またはさらに中継ノードを経由して）ルーティングされるようにすることができる。したがって、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ関数は、メッセージをより近接の宛先にルーティングする呼び出しごとに、再帰的に呼び出されることがある。
【００６４】
有利なことに、本発明のその他の実施形態は、１つまたは複数の近傍域カテゴリ（例えば、地理的境界、ルーティング特性（例えばＩＰルーティングホップ）、管理可能ドメイン、組織境界など）の複数の近傍域基準に基づいて、複数のリングの或るリングまたは複数のリングのツリーに、或るリングを区分することを容易にする。リングは、同じタイプの近傍域基準を使用して複数回区分することができることを理解されたい。例えば、リングは、大陸近傍域基準（continent proximity criteria）および国近傍域基準（country proximity criteria）（いずれも地理的境界の近傍域カテゴリ）に基づいて区分されてもよい。
【００６５】
ＩＤは、（乱数発生の結果）ＩＤスペースにわたり均一に分布されるので、環状ＩＤスペースの任意の所定のセグメントが、異なる近傍域クラス（ただし、これらのクラスがほぼ同じ基数を有するという条件で）に属すノードを含む確率が高い。確率は、意味のある統計的動作を得るのに十分なノード数がある場合にさらに高まる。
【００６６】
このようにして、任意の所定のノードの近隣ノードは通常、近傍域の観点から十分に分散される。パブリッシュされたアプリケーション状態は近隣ノードの間で複製することができるので、パブリッシュされた情報も、近傍域の観点から十分に分散することができる。
【００６７】
図４は、近傍ルーティングを容易にするリング４００のリングを示す図である。リング４０１は、マスターまたはルートリングと見なすことができ、リング４０２、４０３、および４０４の各々のすべてのノードを含む。リング４０２、４０３、および４０４は各々、指定された近傍域基準に基づいて区分されるリング４０１からのノードのサブセットを含む。例えば、リング４０１は、地理的位置に基づいて区分されてもよく、ここでリング４０２は北米のノードを含み、リング４０３はヨーロッパのノードを含み、リング４０４はアジアのノードを含む。
【００６８】
６５，５３６（２16）のＩＤを含む数値スペースにおいて、ＩＤ５，３４５を有するＮｏｒｔｈ  ＡｍｅｒｉｃａｎノードからＩＤ２３，３４５を有するＡｓｉａｎノードへメッセージをルーティングすることは、Ａｓｉａｎノードの近隣ノードが識別されるまでリング４０２内でメッセージをルーティングすることを含むことができる。次いで、近隣ノードは、メッセージをＡｓｉａｎノードにルーティングすることができる。このようにして、単一のホップ（複数ホップに対して）が、Ｎｏｒｔｈ  ＡｍｅｒｉｃａｎノードとＡｓｉａｎノードとの間に行われる。したがって、ルーティングは、リソース効率の高い方法で実行される。
【００６９】
図５は、近傍ルーティングを容易にするリングの近傍域誘導区分ツリー（proximity induced partition tree）５００の例を示す。示されているように、リングの区分ツリー５００は多数のリングを含む。リングは各々、ソートされたリンクリストの区分を表す。各リングは、ソートされたリンクリスト内のＩＤを有する複数のノードを含む。しかし、可能なノードの数が多いので明確にするために、ノードはリング上で明示的に示されてはいない（例えば区分ツリー５００のＩＤスペースはｂ＝１６およびｎ＝４０であってもよい）。
【００７０】
区分ツリー５００内で、ルートリング５０１は、基準５７１（第１の管理ドメイン境界基準）に基づいて、サブリング５１１、５１２、５１３、５１４を含む複数のサブリングに区分される。例えば、ＤＮＳ名の各コンポーネントは、右から左に読まれるＤＮＳ名に出現する順序に従って誘導されたそれらの間の半順序による近傍域基準を考慮されてもよい。したがって、サブリング５１１はさらに、基準５８１（第２の管理ドメイン境界基準）に基づいて、サブリング５２１、５２２、および５２３を含む複数のサブリングに区分することができる。
【００７１】
サブリング５２２はさらに、基準５７２（地理的境界基準）に基づいて、サブリング５３１、５３２、および５３３を含む複数のサブリングに区分することができる。位置ベースの近傍域基準は、大陸、国、郵便番号などに従って、半順序にすることができる。郵便番号自体は、階層的に編成されている、つまり、さらに近傍域基準の半順序サブリストをさらに誘導するものと見なすことができる。
【００７２】
サブリング５３１はさらに、基準５７３（第１の組織境界基準）に基づいて、サブリング５４１、５４２、５４３、および５４４を含む複数のサブリングに区分することができる。近傍域基準の半順序リストは、所定の会社が課、部、および製品グループなどに組織的に構造化される方法に従って誘導することができる。したがって、サブリング５４３はさらに、基準５８３（第２の組織境界基準）に基づいて、サブリング５５１、および５２２を含む複数のサブリングに区分することができる。
【００７３】
区分ツリー５００内で、各ノードは、単一のＩＤを有し、ルートから始まりリーフまでの対応する区分パスに沿ってリングに加わる。例えば、サブリング５５２に参加している各ノードはまた、サブリング５４３、５３１、５２２、５１１、およびルート５０１に参加する。宛先ノード（ＩＤ）へのルーティングは、以下のようにＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ関数を実施することにより達成することができる。  
ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，Ｐ）：ノード識別のドメインからの値Ｖおよびメッセージ「Ｍｓｇ」を与えられ、メッセージを、近傍域基準Ｐによって等価であると見なされるノード間で識別がＶにマップされうるノードＹに配信する。
【００７４】
このように、ルーティングは、宛先ノードが現在のノードとその後続または先行ノードとの間にあるという条件から判別される所定のリング内のルーティングにより、さらなる進行が行われなくなるまで、そのリング内で徐々に宛先ノードに近づいてゆくことによって、達成することができる。この時点において、現在のノードは、参加する次のより大きいリング内のそのパートナーノードを介して、ルーティングを開始する。ルートリングに向かう区分パスに沿って上ることによって宛先ノードに向かって次第に動くこのプロセスは、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ呼び出しで最初に指定されているように、要求された近傍コンテキスト内で宛先ノードに最も近接するノードに到達した場合に終了する。
【００７５】
ルーティングホップは、宛先ノードが外側に存在するのでその近隣の範囲内でさらなる進行が行われなくなるまで、要求を発信したノードの近傍近隣にとどまることができる。この時点において、近傍域基準は、さらなる進行を行うため、近傍近隣のサイズを増大させるように緩和される。このプロセスは、近傍近隣が、宛先ノード（ＩＤ）を含むように十分に拡大されるまで繰り返される。近傍近隣基準の連続的な緩和ごとに行われたルーティングホップは、以前のホップと比較して数値スペースでそれ相応により小さいジャンプを行うが、近傍スペースで場合によってはより大きいジャンプとなる可能性がある。したがって、絶対的に必要な数のそのような（リング間）ホップのみが、宛先に到達するまでに行われる。
【００７６】
パブリッシュされたアプリケーションデータが、宛先ノードの近隣ノード間で複製されるときに、区分ツリーを下がって複製されるので、一部のホップはルックアップメッセージに対して回避される場合もある。
【００７７】
近傍ルーティングを達成するため、各フェデレーションノードは、メンバーとして参加するすべてのリング内のその後続および先行ノード（単一リングの後続および先行と類似する）、つまり近傍先行、近傍後続、および近傍近隣への参照を保持する。ルーティングを効率的にするため、ノードはまた、ルーティングパートナーとしてリングのいずれか半分で飛躍的に増大する距離に最も近いその他のノード（単一リングのルーティングノードと類似する）への参照を保持することもできる。一部の実施形態において、連続する後続または先行ノードのペアの間にあるルーティングパートナーノードは、後続または先行ノードペア間で、それぞれ現在のノードとそれに数値的に最も近接するノードによって共有される同じ最下位リングに参加する。したがって、宛先ノードに向かうルーティングホップは、さらなる進行を行うことが絶対的に必要とされる場合に限り、緩和された近傍域基準の使用に移行する（すなわち、上位のリングに移行する）。その結果、メッセージは、対応するフェデレーションノードと効率的にランデブーすることができる。
【００７８】
一部の実施形態において、ノードは、近傍ルーティング関数を実施し、等価基準関係に基づいてメッセージをルーティングする。したがって、数値Ｖおよびメッセージ「Ｍｓｇ」を与えられると、ノードは、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，Ｐ）を実施して、メッセージを、近傍域基準Ｐによって等価であると見なされるノード間で識別がＶにマップされうるノードＹに、配信することができる。近傍域基準Ｐは、近位に等価であると見なされるすべてのノードにとって共通の祖先である、区分ツリー内の最下位リングを識別する。これは、ルートリングからパス区切り文字「／」で区別されることにより識別されるリングまでのパスに沿って見出された近傍基準を連結することによって得られる、ストリングとして表すことができる。例えば、サブリング５４２を識別する近傍域基準は、「Ｐｒｏｘｉｍｉｔｙ：／．ＣＯＭ／Ｃｏｒｐ２／ＬｏｃａｔｉｏｎＡ／Ｄｉｖ２」として表されてもよい。区分ツリー５００内の各リングは、例えば、その表現ストリングをＳＨＡベースのアルゴリズムでハッシュすることなどによって、一意の数値を割り当てられてもよい。数値０がルートリングに予約されている場合、これはＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）≡ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，０）であると推測することができる。
【００７９】
例えば、サブリング５４４内のノードは、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施して、サブリング５３１内でより近接するノード（例えば、サブリング５１３内のノード）を識別することができる。同様に、サブリング５３１は、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施して、サブリング５２２内でより近接するノードを識別することができる。同様に、サブリング５２２は、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施して、サブリング５１１内でより近接するノードを識別することができる。同様に、サブリング５１１は、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施して、リング５０１内でより近接するノードを識別することができる。したがって、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ関数は、宛先により近接したメッセージをルーティングする呼び出しごとに再帰的に呼び出されることがある。
【００８０】
したがって、近傍域基準が考慮に入れられる場合、最終宛先へのパス上のルーティングホップは、要求を発信するノードの近傍域内にとどまることができるが、宛先ノードに到達するか、または宛先に向けてさらに進行するのにちょうど十分となるように緩和される選択された近傍域基準の下でさらなる進行が行われなくなるまで、数値スペース内で発信元ノードと宛先ノードとの間で大きく進行する。例えば、近傍域基準は、メッセージが、リング５３１からリング５２２までルーティングされるのに十分に緩和されてもよい。
【００８１】
近傍域への上記の手法を使用して、パブリッシュされた情報を所定のリングに限定することが可能である。例えば、組織では、組織固有の情報が、（１）組織のドメインの外部のノードへの近隣複製の形態で黙示的に、または（２）そのような情報のルックアップ要求にサービスを提供する形態で明示的に、その信頼ドメインの外部のエンティティに使用できないことを確実にしたい場合もある。第１の態様は、パブリッシュされた情報を指定されたリング内の目標ＩＤに近隣するノード間のみで複製することにより満足される。ノードによって発信されたすべてのメッセージは、ノードがルートリングの方に属すリングを連続的に上ることによってルーティングされるので、組織内で発信されるすべてのルックアップ要求が、組織に限定されているパブリッシュ情報を見つけることができる確率が高まり、それにより黙示的に第２の態様を満足する。
【００８２】
また、組織では、そのドメインの外部のノードと自動的に連合するノードを嫌う。これは、例えば、訪問中の販売担当員が、自分のラップトップコンピュータを顧客の施設内のネットワークに接続するような場合に生じる可能性がある。販売担当者に属すラップトップコンピュータが、そのホームドメインでパブリッシュされた情報を見つけようとする、および／またはその最下位の優先近傍域リングで始まるそのホームドメインのノードと連合しようとすることが理想的である。顧客のドメインでノードを連合することは、通常許可されるべきではない。このシナリオをサポートするには、ホームドメインのシードノードを見つける能力が必要となる。そのようなシードノードは、ホームドメインでパブリッシュされている情報を見つけて、ホームフェデレーションに参加し、パブリッシュされている情報をドメインにわたり選択的にインポートおよびエクスポートするために使用することができる。シードノードは、場合によっては、メッセージゲートウェイとも呼ばれる。
【００８３】
もう一部の実施形態において、エンティティは、ルートリング内のシードノードへの参照をパブリッシュする。シードノードは、（目標ＩＤとして）リングに関連付けられている（その表現ストリングをハッシュすることにより得られる数値のような）一意の数値でパブリッシュすることができる。シードノード情報はさらに、ルートリング内の対応する目標ＩＤへのパス上にある様々なリング内のノードによってオンデマンドでキャッシュされてもよい。そのようなオンデマンドキャッシングは、パフォーマンスの向上と、半静的な情報が極めて頻繁にルックアップされる場合に発生することもあるホットスポットの軽減をもたらす。シードノード情報はまた、ＤＮＳのような他の手段を介しても取得することができる。
【００８４】
限定されたパブリッシュ情報の耐障害性を提供するために、各ノードは、参加するすべてのリング内の近隣ノードのセットを保持することができる。以上のことを考慮すると、ノードによって保持される状態は、以下のように要約することができる。  
０からｂn−１の範囲で均一に分布された数値であるＩＤ
以下のもので構成されるルーティングテーブル（すべての演算はｂnを法として行われる）
ノードが参加する各リング、例えばリングｄについて、
後続ノード（ｓd）
先行ノード（ｐd）
ｓjd．ｓd．ｉｄ＞（ｉｄ＋ｕ／２）、ｊ≧ｖ／２−１、ｐkd．ｐd．ｉｄ＜（ｉｄ−ｕ／２）、およびｋ≧ｖ／２−１であるような、近隣ノード（ｐkd，．．．，ｐ1d，ｐd，ｓd，ｓ1d，．．．，ｓjd）
必要に応じてｓd＜ｉｄ＋ｂi＜ｓd+1またはｐd+1＜ｉｄ−ｂi＜ｐdとなるｒ±i＝ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（ｉｄ±ｂi，ｕｐｄａｔｅＭｓｇ，ｄ）であるような、ルーティングノード（ｒ-(n-1)，．．．，ｒ-1，ｒ1，．．．，ｒn-1）
ここでｂは基数であり、ｎは桁数のフィールドサイズであり、ｕは近隣範囲であり、ｖは近隣サイズである。
【００８５】
リング「ｄ」内の所定のノードによって保持される近隣ノードのサブセットは、その所定のノードが参加している子リング「ｄ＋１」内の近隣ノードとして再度表示される可能性があることに留意されたい。そのようなものとして、所定のノードがＤ＊ｍａｘ（ｕ，ｖ）／２として参加するすべてのＤリングにわたって所定のノードによって保持される近隣ノードの合計数に、上限を導くことができる。これは、所定のノードへの唯一の参照が保持され、最悪状況の上限は平衡ツリー（balanced tree）の場合である。
【００８６】
リングが複数の対応する兄弟サブリングに区分されるとき、例えば別名割り当て（aliasing）を通じて、指定されたノードが複数の対応する兄弟サブリングのうちの２つ以上に同時に参加することが許可されることに留意されたい。別名割り当ては、例えば様々なサブリングからの異なる状態を指定されたノードに関連付けるために実施されてもよい。したがって、所定のノードの別名（alias）が同じＩＤを有していたとしても、各別名はそれらに関連付けられている異なった状態を有することができる。別名割り当てにより、指定されたノードは、必ずしもより特定的な近傍域基準の共通の祖先ではない、別個の近傍域基準を有する複数のリングに参加することができる。つまり、指定されたノードは、近傍域ツリーの複数の分岐（branch）に参加することができる。
【００８７】
例えば、二重（dual）ＮＩＣ（有線および無線）ラップトップは、ラップトップと同じＬＡＮセグメントを共有する他の無線および有線ノードと近位等価であると見なされてもよい。しかし、これらの２つの別個の近傍域基準は、例えば、組織メンバーシップに基づく近傍域基準のように、異なるより高位の優先近傍域基準の適用後に限り適用可能である下位基準としてモデル化することができる。ラップトップは同じ組織に属しているので、１）有線内のメンバーシップ、および２）無線ＬＡＮセグメントのメンバーシップを表す２つのサブリング内の別名割り当てされたノードは、ラップトップが属す組織を表すリング内の単一ノードに結合する。ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙは、別名割り当ての存在下でいかなる変更も伴うことなく予想通りに機能することを理解されたい。
【００８８】
各近傍リングは、（異なる可能性のある）リングパラメータに従って構成することができる。リングパラメータを使用して、近隣を定義し（例えば、リングパラメータは近隣範囲、近隣サイズ、ｐｉｎｇメッセージおよび出発メッセージのタイミングおよびｐｉｎｇおよび出発メッセージの分布パターンを表すことができる）、（例えば、先に説明された前述の第１から第４のフェデレーション機構またはその他のフェデレーション機構からの）特定のフェデレーション機構を示し、または同じ近傍リング内のルーティングパートナー間の通信特性の定義することができる。より一般的であり、複数の異なるフェデレーション機構に適用するリングパラメータも一部あるが、他のリングパラメータはより特定的で、特定のタイプのフェデレーション機構に適用する。
【００８９】
上位レベルの近傍リングを構成するために使用されるリングパラメータは、一部の実施形態において下位レベルの近傍リングによって継承されてもよい。例えば、リング５４３は、（リング５２２などから継承される）リング５３１のリングパラメータの一部を継承する。したがって、リング５３１に関連付けられている近隣サイズおよび近隣範囲もまた、リング５４１に関連付けられる。
【００９０】
しかし、継承されたパラメータは変更される可能性があり、および／または近傍リングは様々なリングパラメータに従って個々に構成される可能性がある。例えば、リング５１１は、膨大な数のノードを含む管理ドメイン向けであり、そのためリング５１１にとって前述の第４のフェデレーション機構の方がより適している場合もある。一方、リング５２１は、比較的少数のノードを備える中小企業向けであり、そのためリング５２１にとって前述の第２のフェデレーション機構の方がより適している場合もある。したがって、リング５２１に関連付けられているリングパラメータは、リング５１１に関連付けられているリングパラメータとは異なる値に設定（またはこれに変更されたパラメータを継承）されてもよい。例えば、特定のタイプのフェデレーション機構を示すリングパラメータは、リング５１１と５２１との間で異なっていてもよい。同様に、近隣を定義するパラメータは、リング５１１と５２１との間で異なっていてもよい。さらに、リング５２１は、前述の第２のフェデレーション機構に固有である固有パラメータに従って構成することができるが、リング５１１は、前述の第４のフェデレーション機構に固有である固有パラメータにさらに従って構成される。
【００９１】
したがって、近傍リングは、近傍リング内のノードの特性（例えば、数、含まれるリソースなど）に基づいて柔軟に構成することができる。例えば、管理者は、（例えば、ユーザインターフェース経由など）構成手順を使用して近傍リングのリングパラメータを選択することができる。構成手順は、近傍リング間の継承関係の構成、および例えば、本来ならば継承されたリングパラメータをオーバーライドするような個々の近傍リングの構成を容易にすることができる。
【００９２】
図８は、フェデレーションインフラストラクチャのノードを区分する方法８００を示す例示の流れ図である。方法８００は、図５における区分ツリー５００のリングに関して説明される。方法８００は、フェデレーションインフラストラクチャ内のノードに割り当てられているノードＩＤを含むソートされたリンクリストにアクセスする動作を含む（動作８０１）。例えば、リング５０１によって表されるソートされたリンクリストがアクセスされてもよい。ソートされたリンクリストのノードＩＤ（リング５０１で示されるノード）は、フェデレーションインフラストラクチャ（例えば、フェデレーションインフラストラクチャ１００）内のノードを表すことができる。
【００９３】
方法８００は、ソートされたリンクリストを区分するための複数の異なる近傍域基準を表す近傍域カテゴリにアクセスする動作を含む（動作８０２）。例えば、ドメイン境界５６１、地理的境界５６２、および組織境界５６３を表す近傍域基準にアクセスすることができる。しかし、信頼ドメイン境界など、他の近傍域基準もまた、アクセスされた近傍域基準で表すことができる。近傍域カテゴリは、以前作成された近傍域基準の半順序リストを含むことができる。リングは、近傍域基準の半順序リストに基づいて区分することができる。
【００９４】
方法８００は、第１の近傍域基準に基づいて、ソートされたリンクリストを１つまたは複数の第１のサブリストに区分する動作を含み、１つまたは複数の第１のサブリストの各々は、ソートされたリンクリストからノードＩＤの少なくともサブセットを含む（動作８０３）。例えば、リング５０１は、基準５７１に基づいて、サブリング５１１、５１２、５１３、および５１４に区分することができる。サブリング５１１、５１２、５１３、および５１４は各々、リング５０１とは異なるノードＩＤのサブセットを含むことができる。
【００９５】
方法８００は、第２の近傍域基準に基づいて、１つまたは複数の第１のサブリストの中から選択された第１のサブリストを１つまたは複数の第２のサブリストに区分する動作を含み、１つまたは複数の第２のサブリストの各々は、第１のサブリストに含まれるノードＩＤの少なくともサブセットを含む（動作８０４）。例えば、サブリング５１１は、基準５８１に基づいて、サブリング５２１、５２２、および５２３に区分することができる。サブリング５２１、５２２、および５２３は各々、サブリング５１１とは異なるノードＩＤのサブセットを含むことができる。
【００９６】
図９は、ノードのルーティングテーブルを取り込む方法９００を示す例示の流れ図である。方法９００は、図３におけるソートされたリンクリスト３０４およびリング３０６に関して説明される。方法９００は、先行ノードをルーティングテーブルに挿入する動作を含み、先行ノードは、現行ノードに関してソートされたリンクリストの第１の方向に現行ノードに先行する（動作９０１）。例えば、ＩＤ５０を有するノードは、ＩＤ６４を有するノード（現行ノード）の先行としてルーティングテーブルに挿入することができる。（ソートされたリンクリスト３０４の最後Ａから、ソートされたリンクリスト３０４の最後Ｂに向かって）右回り方向３２１に移動すると、ＩＤ５０を有するノードは、ＩＤ６４を有するノードに先行する。先行ノードを挿入することで、現行ノードが先行ノードのパートナーであり、先行ノードが現行ノードのパートナーであるように、現行ノードと先行ノードとの間の対称パートナーシップを確立することができる。
【００９７】
方法９００は、後続ノードをルーティングテーブルに挿入する動作を含み、後続ノードは、現行ノードに関してソートされたリンクリストの第１の方向に現行ノードの後に続く（動作９０２）。例えば、ＩＤ７６を有するノードは、ＩＤ６４を有するノード（現行ノード）の後続としてルーティングテーブルに挿入することができる。左回り方向３２２に移動することで、ＩＤ７６を有するノードは、ＩＤ６４を有するノードの後に続く。後続ノードを挿入することで、現行ノードが後続ノードのパートナーであり、後続ノードが現行ノードのパートナーであるように、現行ノードと後続ノードとの間の対称パートナーシップを確立することができる。
【００９８】
方法９００は、適切な近隣ノードをルーティングテーブルに挿入する動作を含み、近隣ノードは、近隣範囲および近隣サイズに基づいて第１の方向および第２の相対する方向で、ソートされたリンクリストから識別される（動作９０３）。例えば、ＩＤ８３、７６、５０、および４６を有するノードは、ＩＤ６４を有するノード（現行ノード）の近隣ノードとしてルーティングテーブルに挿入することができる。２０の近隣範囲および近隣サイズ４に基づいて、ＩＤ８３および７６を有するノードを右回り方向３２１で識別することができ、ＩＤ５０および４６を有するノードを左回り方向３２２で（ソートされたリンクリスト３０４の最後Ｂから、ソートされたリンクリスト３０４の最後Ａに移動して）識別することができる。環境によっては、適切な近隣ノードが識別されないような場合もある。近隣ノードを挿入することで、現行ノードが近隣ノードのパートナーであり、近隣ノードが現行ノードのパートナーであるように、現行ノードと近隣ノードとの間の対称パートナーシップを確立することができる。
【００９９】
方法９００は、適切なルーティングノードをルーティングテーブルに挿入する動作を含み、ルーティングノードは、フェデレーションインフラストラクチャの基数およびＩＤスペースのフィールドサイズに基づいて第１の方向および第２の方向に、ソートされたリンクリストから識別され、ルーティングノードは、第１および第２の方向で、ソートされたリンクリストの対数指標を表す（動作９０４）。例えば、ＩＤ２００、２、３０、４６、５０、６４、６４、６４、６４、６４、７６、８３、９８、１３５、および２００を有するノードは、ＩＤ６４を有するノードのルーティングノードとしてルーティングテーブルに挿入することができる。例えば、基数２および８のフィールドサイズに基づいて、ＩＤ６４、６４、７６、８３、９８、１３５、および２００を有するノードを方向３２１で識別することができ、ＩＤ６４、６４、５０、４６、３０、２、および２００を有するノードを方向３２２で識別することができる。リング３０６内に示されるように、ルーティングノードは、右回り方向３２１および左回り方向３２２の両方で、ソートされたリンクリスト３０４の対数指標を表す。ルーティングノードを挿入することで、現行ノードがルーティングノードのパートナーであり、ルーティングノードが現行ノードのパートナーであるように、現行ノードとルーティングノードとの間の対称パートナーシップを確立することができる。
【０１００】
図７は、近傍域基準を考慮に入れるノードルーティングテーブルを取り込む方法７００を示す例示の流れ図である。方法７００は、図５におけるリングに関して説明される。方法７００は、現行ノードが参加する各階層的に区分されたルーティングリングの先行ノードをルーティングテーブルに挿入する動作を含む（動作７０１）。各先行ノードは、現行ノードが参加する各階層的に区分されたルーティングリング内で第１の方向（例えば、右回り）に現行ノードに先行する。階層的に区分されたルーティングリングは、対応する近傍域基準に従って区分され、双方向のリンクリストの少なくともサブセット（および場合によっては双方向のリンクリスト全体）を含む。例えば、指定されたノードが、ルートリング５０１、およびサブリング５１１、５２２、５２３、５３１、および５４２に参加してもよい。したがって、先行ノードは、リング５０１、およびサブリング５１１、５２２、５２３、５３１、および５４２の各々の中から指定されたノードに対して選択される。
【０１０１】
方法７００は、現行ノードが参加する各階層的に区分されたルーティングリングの後続ノードをルーティングテーブルに挿入する動作を含む（動作７０２）。各後続ノードは、現行ノードが参加する各階層的に区分されたルーティングリング内で第１の方向に現行ノードの後に続く。例えば、後続ノードは、リング５０１、およびサブリング５１１、５２２、５２３、５３１、および５４２の各々の中から指定されたノードに対して選択される。
【０１０２】
方法７００は、現行ノードが参加する各階層的に区分されたルーティングリングの適切な近隣ノードをルーティングテーブルに挿入する動作を含む（動作７０３）。近隣ノードは、現行ノードが参加する階層的に区分されたルーティングリングからの近隣範囲および近隣サイズに基づいて、第１の方向（例えば、右回り）および第２の相対する方向（例えば、左回り）に識別することができる。例えば、近隣ノードは、リング５０１、およびサブリング５１１、５２２、５２３、５３１、および５４２の各々の中から指定されたノードに対して識別することができる。
【０１０３】
方法７００は、現行ノードが参加する各階層的に区分されたルーティングリングの適切なルーティングノードをルーティングテーブルに挿入する動作を含む（動作７０４）。例えば、ルーティングノードは、リング５０１、およびサブリング５１１、５２２、５２３、５３１、および５４２の各々の中から指定されたノードに対して識別することができる。
【０１０４】
一部の実施形態において、適切なルーティングノードは、ノードＹが参加する、リーフリング（または別名割り当てを使用する実施形態におけるリーフリング）を除く各近傍域リングｄに対して挿入される。適切なルーティングノードは、以下の式に基づいて挿入することができる。  
Ｙ．ｓd．ｉｄ＜Ｙ．ｉｄ＋ｂi＜Ｙ．ｓd+1．ｉｄが真である場合、リングｄを使用する、または
Ｙ．ｐd．ｉｄ＜Ｙ．ｉｄ−ｂi＜Ｙ．ｐd+1．ｉｄが真である場合、リングｄを使用する。
【０１０５】
リングが以前のステップで識別されていない場合、リード（例えば、リング５０１）リングをリングｄとして使用する。ここで、リングｄは、ノードＹがｚに最も近接するルーティングパートナーを探すべき近傍域リングである。
【０１０６】
図１０は、メッセージを宛先ノードに向けてルーティングする方法１０００を示す例示の流れ図である。方法１０００は、図３におけるソートされたリンクリスト３０４およびリング３０６に関して説明される。方法１０００は、宛先を示す数値と共にメッセージを受信する受信ノードの動作を含む（動作１００１）。例えば、ＩＤ６４を有するノードは、２１２の宛先を示すメッセージを受信することができる。
【０１０７】
方法１０００は、受信ノードが、対応する先行ノードよりも宛先から数値的に遠いもの、および対応する後続ノードよりも宛先から数値的に遠いもののうちの少なくとも１つであることを判別する動作を含む（動作１００２）。例えば、方向３２２において、ＩＤ６４はＩＤ５０よりも宛先２１２から遠く、方向３２１において、ＩＤ６４はＩＤ７６よりも宛先２１２から遠い。方法１０００は、宛先が受信ノードに対応するノードの近隣セット内にはないことを判別する動作を含む（動作１００３）。例えば、ＩＤ６４を持つノードは、宛先２１２が、８３、７６、５０、および４６の近隣セット内にはないことを判別することができる。
【０１０８】
方法１０００は、受信ノードに対応するルーティングテーブルから中間ノードを識別する動作を含み、中間ノードは、対応するルーティングテーブル内の他のルーティングノードよりも宛先に数値的に接近している（動作１００４）。例えば、ＩＤ６４を有するノードは、ＩＤ２００を有するルーティングノードを、他のルーティングノードよりも宛先２１２に数値的に近接しているものとして識別することができる。方法１０００は、メッセージを中間ノードに送信する動作を含む（動作１００５）。例えば、ＩＤ６４を有するノードは、ＩＤ２００を有するノードにメッセージを送信することができる。
【０１０９】
図１１は、近傍域基準に基づいてメッセージを宛先ノードに向けてルーティングする方法１１００を示す例示の流れ図である。方法１１００は、図４および図５におけるリングに関して説明される。方法１１００は、宛先を示す数値および近傍域基準と共にメッセージを受信する受信ノードの動作を含む（動作１１０１）。近傍域基準は、ノードの１つまたは複数のクラスを定義する。受信ノードは、メッセージを、近傍域基準に基づいてノードの１つまたは複数のクラスの中から選択されたノードの現行クラスの一部として受信する。例えば、ＩＤ１７２を有するノードは、２０１の宛先を示すメッセージ、および宛先ノードがリング４０１によって表されるクラスの一部であることを示す近傍域基準を受信することができる。ＩＤ１７２を有するノードは、リング４０４の一部としてメッセージを受信することができる。
【０１１０】
方法１１００は、受信ノードが、ノードの選択されたクラス内のノードの中で、対応する先行ノードよりも宛先から数値的に遠いもの、および対応する後続ノードよりも宛先から数値的に遠いもののうちの少なくとも１つであることを判別する動作を含む（動作１１０２）。例えば、リング４０４内において、ＩＤ１７２を持つノードは、ＩＤ１７４を持つノードよりも宛先２０１から右回り方向に遠く、ＩＤ１５３を持つノードよりも宛先２０１から左回り方向に遠い。
【０１１１】
方法１１００は、宛先が、近傍域基準によって定義されたノードの１つまたは複数のクラスのいずれかについてノードの受信ノードの近隣セット内にはないことを判別する動作を含む（動作１１０３）。例えば、ＩＤ１７２を持つノードは、宛先２０１が、リング４０４、またはリング４０１内の対応する近隣セット内にはないことを判別することができる。
【０１１２】
方法１１００は、受信ノードのルーティングテーブルから中間ノードを識別する動作を含み、中間ノードは、ルーティングテーブル内の他のルーティングノードよりも宛先に数値的に接近している（動作１１０４）。例えば、ＩＤ１７２を有するノードは、ＩＤ１９４を有するノードを、リング４０４内の他のルーティングノードよりも宛先２０１に数値的に近接しているものとして識別することができる。方法１１００は、メッセージを中間ノードに送信する動作を含む（動作１１０５）。例えば、ＩＤ１７２を有するノードは、受信したメッセージを、ＩＤ１９４を有するノードに送信することができる。ＩＤ１７２を有するノードは、受信したメッセージをＩＤ１９４を有するノードに送信して、以前に定義された近傍域基準の半順序リストに従うことができる。
【０１１３】
ノード１９４は、リング４０４内で可能な限り宛先２０１に接近することができる。したがって、近傍域は、宛先に向けたルーティングが次のレッグ内のリング４０１でさらに行われるようにするのに十分に緩和されてもよい。つまり、リング４０４では宛先に向けてさらなる進行は行うことができないので、ルーティングはリング４０４からリング４０１へ移行される。代替として、ＩＤ２０１を持つノードは、リング４０１内のＩＤ１９４を持つノードの近隣内にあり、それ以上のルーティングをもたらすことはない。したがって、一部の実施形態において、１つ上位のリングに到達するために近傍域基準を緩和することは、さらにルーティングを進めるのに十分である。
【０１１４】
しかし、その他の実施形態において、１つ上位のリングへの移行を行わせる近傍域基準の増分緩和は、さらなるルーティングが生じるまで（または、ルートリングに遭遇するまで）続行する。つまり、さらなるルーティングの進行が行われる前に、１つ上位のリングへの複数の移行が生じる。例えば、ここで図５を参照すると、リング５３１でさらなるルーティングの進行が行われない場合、近傍域基準は、リング５１１に移行するのに、またはルートリング５０１に移行するのに十分に緩和されてもよい。
【０１１５】
ノードフェーズ
フェデレーションインフラストラクチャに参加しているノードは、様々な動作フェーズで動作することができる。ノードの有効なフェーズ値は、順序付きセットのメンバーとなるように定義することができる。例えば、{Nodeld}.{Instancelds}.{Phase Value [Phase-State Values: Inserting, Syncing, Routing, Operating].[Phase.Unknown Indication: phase known at time of transmission（伝送時においてフェーズ既知）、phase unknown at time of transmission（伝送時においてフェーズ不明）]}は、フェデレーションインフラストラクチャ内の所定のノードのフェーズスペースを表す１つの可能な順序付きセットを定義する。ノードインスタンスは、ノードフェーズ状態を経由して、ＩｎｓｅｒｔｉｎｇからＳｙｎｃｉｎｇ、Ｒｏｕｔｉｎｇ、Ｏｐｅｒａｔｉｎｇへと順番に移行する（または進む）ことができる。さらに、一部の実施形態において、ノードインスタンスを、ノードインスタンスが前のノードフェーズ状態に戻ることができないように構成することができる。一部の実施形態において、ノードは、ノードが上るごとに、そのインスタンスＩＤを進める。
【０１１６】
例えば、ノードインスタンスは、ＲｏｕｔｉｎｇからＳｙｎｃｉｎｇへと戻る（またはＩｎｓｅｒｔｉｎｇに戻る）ことなどを防ぐことができる。したがって、一部の実施形態において、（例えば、（ＮｏｄｅＩｄ，ＩｎｓｔａｎｃｅＩｄ）によって識別された）所定のノードインスタンスが、特定のノードフェーズ状態（例えば、Ｏｐｅｒａａｔｉｎｇ）に進んだことが知られている場合、この所定のノードインスタンスが、以前のノードフェーズ状態に戻る（例えば、Ｒｏｕｔｉｎｇ、Ｓｙｎｃｉｎｇ、またはＩｎｓｅｒｔｉｎｇに戻る）可能性が低い（一部の実施形態においては戻ることはない）ことも知られている。したがって、特定のノードフェーズ状態の前のノードフェーズにある任意のノードインスタンスが、ノードの新しい（および進んだ）インスタンスであるという可能性が極めて高い。
【０１１７】
一部の実施形態において、フェーズ情報および対応するＩｄ（ノードの上昇に応じて進む）は、共に転送される。したがって、同一のインスタンスに対してより小さいノードフェーズ状態の方が古いものであると判別することができる。さらに、（任意のフェーズ状態値において）より新しいノードインスタンスが知られている場合、より古いインスタンスに関する情報は、期限を経過したものであると見なされる。
【０１１８】
時折、ノードは、例えば、最初のスタートアップ時、正常終了を経て、または異常終了（クラッシュ）の結果など、リブートするかまたは相互の通信を失うこともある。したがって、任意のノードフェーズ状態のノードが、リブートするかまたは他のノードとの通信を失う可能性がある。例えば、クラッシュは、Ｒｏｕｔｉｎｇフェーズ状態にあるノードをリブートさせる可能性がある。リブートまたは通信を失っている間、ノードがどのノードフェーズ状態にあるのかを判別する方法はないこともある。したがって、ノードがリブートしているとき、またはノードへの通信が失われたとき、［Ｐｈａｓｅ．Ｕｎｋｎｏｗｎ  Ｉｎｄｉｃａｔｉｏｎ］を、ノードのフェーズ状態が現在不明であることを示すように設定することができる。しかし、ノードの以前に示され、および／または検出されたフェーズ状態を保持することができ、失われることはない。
【０１１９】
［Ｐｈａｓｅ．Ｕｎｋｎｏｗｎ  Ｉｎｄｉｃａｔｉｏｎ］を使用して、フェーズ状態値が伝送された時点でフェーズ状態が既知であったかどうか（例えば、ｐｈａｓｅ．ｕｎｋｎｏｗｎを設定していないフェーズ値）、またはフェーズ状態が以前表現されたフェーズ状態であり、フェーズ状態値が伝送された時点で該フェーズ状態が不明であったかどうか（例えば、ｐｈａｓｅ．ｕｎｋｎｏｗｎを設定したフェーズ値）を示すことができる。したがって、ノードのフェーズ（そのフェーズ値）は、フェーズ状態値およびｐｈａｓｅ．ｕｎｋｎｏｗｎ表示（indication）を使用して表すことができる。
【０１２０】
参加プロトコル
随時、ノードは、既存のフェデレーションに参加、および既存のフェデレーションから離脱することができる。ノードは、フェデレーションへの参加および離脱のための適切なプロトコルを実施することができる。例えば、ノードは、Ｊｏｉｎ（）関数を実施して既存のフェデレーションに加わることができる。Ｊｏｉｎ（）関数を実施しているノードは、最終動作フェーズ状態に到達する前に、挿入フェーズ状態、同期フェーズ状態、およびルーティングフェーズ状態という３つの順序付きフェーズ状態を経由して移行することができる。その他の実施形態において、これらの特定の順序のフェーズ状態は存在しないが、他のフェーズ状態が定義されていることもある。図１２Ａは、フェデレーションインフラストラクチャ内のメンバーシップを確立するノードの例を示す。図１２Ｂは、メッセージを交換するフェデレーションインフラストラクチャ内のノードの例を示す。
【０１２１】
挿入フェーズ：ノードＹは、少なくとも自身のノードＩＤを含みフェデレーションに対する参加アクションを示す、参加メッセージを発行することにより、このフェーズ状態に入る。参加メッセージは、宛先プロパティを新しく参加するノードの識別に設定されている新しく参加するノード（ノードＹ）によって送信される、ルーティングされたメッセージであってもよい。このフェーズ状態において、新しく参加するノードは、フェデレーション内でその先行および後続ノードの間に挿入される。挿入フェーズ状態は、以下のアルゴリズムに従って実施することができる（すべての演算はｂnを法として行われる）。
【０１２２】
ＩＰ１。Ｙは、参加するノードがフェデレーションに参加を望む最下位リングのすでに一部である既存のノードを識別する。これは、ＤＨＣＰおよび／またはＤＮＳおよび／またはＷＳ−Ｄｉｓｃｏｖｅｒｙまたは（既知の可能性がある）定数を使用して、静的に構成されるか、または動的に発見されてもよい。この既存のフェデレーションノードをＥとする。
【０１２３】
ＩＰ２。Ｙは、Ｅ．ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｙ，ｊｏｉｎＭｓｇ）を呼び出して、ノードＹが参加するあらゆる近傍域リング内のＹ．ＩｄにＩＤが数値的に最も近接するノードＸを判別する。これは、参加メッセージを複数のノードにルーティングすることを含むことができる。
【０１２４】
ＩＰ３。  数値的な後続（ｓ）および先行（ｐ）ノードを判別する（以下の挿入を行うために必要なデータが、参加メッセージおよびその応答で搬送搬されうることに留意されたい。そのため、それ以上の往復は必要ない）。  
ケース１：Ｘ．ｉｄ＞Ｙ．ｉｄ
Ｙ．ｓ＝Ｘ、Ｙ．ｐ＝Ｘ．ｐ、Ｘ．ｐ．ｓ＝Ｙ、およびＸ．ｐ＝Ｙ
ケース２：Ｘ．ｉｄ＜Ｙ．ｉｄ
Ｙ．ｐ＝Ｘ、Ｙ．ｓ＝Ｘ．ｓ、Ｘ．ｓ．ｐ＝Ｙ、およびＸ．ｓ＝Ｙ
【０１２５】
参加メッセージに応答して、ノードＸ（参加メッセージを処理したノード）は、参加応答をノードＹに送信することができる。参加応答は、ノードＹの先行ノード（Ｙ．ｐ）および後続ノード（Ｙ．ｓ）を示すことができる。ノードＹは、参加応答を受信して、その先行および後続ノードを認識するように参加応答を処理することができる。参加応答を処理した後、ノードＹは、フェデレーション内の弱いルーティング参加者となる可能性がある。例えば、ノードＹは、そこに送信されたメッセージを、その後続または先行ノードのいずれかに単に転送することができる。したがって、ノードＹは、フェデレーションインフラストラクチャに挿入されるが、ルーティングおよび近隣テーブルは取り込まれない。この時点に到達する前に、ノードＹは、ノードＹの活性（liveness）フェーズが挿入フェーズ状態にあることを示す状態メッセージを送信側ノードに返すことによって、メッセージを送信する他のノードに、送信されるメッセージを異なるノード経由でリダイレクトするよう要求する。
【０１２６】
一般に、随時、ノードは同期の要求および応答メッセージを交換することができる。同期要求および同期応答メッセージは、送信側の観点から他のノードの活性情報（例えば、ヘッダ）を含むことができる。近隣状態もまた、近隣のアプリケーション層が相互の状態を認識するように、同期の要求および応答メッセージに含まれてもよい。同期の要求および応答メッセージが交換される場合の１つの例は、参加するノードの同期化フェーズ状態の間である。しかし、同期の要求および応答メッセージは、その他の動作フェーズ状態（例えば、Ｏｐｅｒａｔｉｎｇ  Ｐｈａｓｅ状態の間など）でも交換することができる。
【０１２７】
図１６は、メッセージモデルおよび関連する処理モデル１６００の例を示す。図１６に示されるように、ノードは同期要求メッセージを送受信することができる。例えば、同期要求メッセージ１６０１は、新しく挿入されたノード（例えば、ＩＤ１４４を持つ図１２Ｂのノード）からファンクション層１６５１において受信されてもよい。アプリケーションデータ１６０２（例えば、ネームスペースサブスクリプション）は、同期要求メッセージ１６０１に結合することができる。ファンクション層１６５１は、同期要求メッセージに含まれている任意のアプリケーションデータについてアプリケーション層１６５２に知らせることができる。例えば、ファンクション層１６５１は、アプリケーションデータ１６０２を含む、近隣状態同期イベント１６０３をアプリケーション層１６５２に呼び出すことができる。アプリケーションデータ１６０７を含む同期要求１６３１も、処理モデル１６００における同期要求１６０１に対する処理と類似した同期要求１６３１の処理を行う、別のノードに送信することができる。
【０１２８】
一部のファンクション層イベント（例えば、同期要求メッセージ１６０１、同期応答メッセージ１６４１、またはｐｉｎｇメッセージ１６１２）に応答して、ファンクション層１６５１は、アプリケーション層１６５２の近隣状態要求関数１６０４を呼び出すことができる。近隣状態要求１６０４は、近隣に伝搬される必要のある状態を取得するためのアプリケーション層への要求である。近隣状態要求１６０４に応答して、アプリケーション層１６５２は、オプションのアプリケーションデータ１６０７を含む近隣状態１６０６をファンクション層１６５１に供給することができる。代替として、アプリケーション層１６５２は、一部のアプリケーション層イベントに対してオプションのアプリケーションデータ１６０７を含む近隣状態１６０６を送信することができる。上記のものと同様の内部機構を使用して、ファンクション層１６５１は、オプションのアプリケーションデータ１６０７を含む同期応答メッセージ１６０８を送信して、アプリケーション層近隣状態を伝搬することができる。
【０１２９】
同期フェーズ：参加応答メッセージを処理した後、ノードＹは、挿入フェーズ状態から同期（Ｓｙｎｃｉｎｇ）フェーズ状態へと移行する。同期フェーズ状態において、新しく挿入されたノードＹは、情報を近隣内のノードと同期させる。一般に、ノードＹは、同期メッセージを、挿入フェーズ状態で識別された少なくともその先行および後続ノードに送信することができる。同期メッセージを処理するこれらのノードは、これらの処理ノードの対応する近隣およびルーティングパートナーノードを示す同期応答を返すことができる。さらに具体的な例において、同期フェーズ状態は、以下のアルゴリズムに従って実施することができる（すべての演算はｂnを法として行われる）。
【０１３０】
ＳＰ１。ノードＹが参加する各近傍リング内のＮｅｉｇｈｂｏｒｈｏｏｄ（Ｙ．ｓ）およびＮｅｉｇｈｂｏｒｈｏｏｄ（Ｙ．ｐ）ノードの和集合からＮｅｉｇｈｂｏｒｈｏｏｄ（Ｙ）を計算する。和集合の計算は、以下のように行うことができる。  
ｓj．ｓ．ｉｄ＞（Ｙ．ｉｄ＋ｕ／２）、ｊ≧ｖ／２−１、ｐk．ｐ．ｉｄ＜（Ｙ．ｉｄ−ｕ／２）、かつｋ≧ｖ／２−１であるような、（ｓj，．．．，ｓ1，ｓ，ｐ，ｐ1，．．．，ｐｋ）
【０１３１】
ＳＰ２。図１６を簡単に参照すると、クエリＹのローカルアプリケーション層（例えば、アプリケーション層１６５２）は、近隣状態要求（例えば、近隣状態要求１６０４）を介して、オプションのアプリケーション固有近隣データ（例えば、アプリケーション固有データ１６０７）を取得する。
【０１３２】
ＳＰ３。Ｙの観点からの各近傍近隣およびルーティングパートナーノードの少なくとも活性状態情報をそれぞれ含む同期メッセージを、少なくとも近傍後続および先行ノードに送信する。ＳＰ２を介してアクセスされたオプションのアプリケーション固有近隣データ（例えば、アプリケーションデータ１６０７）は、同期要求１６３１に含まれる。
【０１３３】
ＳＰ３。Ｙは、ＳＰ２で送信された同期メッセージを処理するノードから戻された同期応答メッセージを受信する。例えば、ノードＹは、その計算された近隣内の１つまたは複数のノードと同期メッセージ（要求／応答）を交換することができる。同期メッセージが、ノードＹの近隣ノードの少なくとも１つおよび場合によっては全部と交換された後、計算された近隣ノードはさらに、同期化されたデータを伝搬するためにメッセージを交換することができる。同期メッセージ（要求または応答）は、そのデータを、例えば近隣のノード内のターゲットノードと事前に同期化するために、ノードによって送信された非ルーティングメッセージであってもよい。
【０１３４】
ＳＰ４。ＳＰ３における同期応答メッセージ（例えば、同期応答メッセージ１６４１）が受信されると、これらの受信された同期応答メッセージ内に存在するオプションのアプリケーション固有近隣データ（例えばアプリケーションデータ１６２２）を、近隣状態同期イベント１６０３を介してＹのアプリケーション層１６５２に提供することができる。
【０１３５】
同期フェーズ状態の一部として、近傍後続（例えば、Ｙ．ｓ）および先行（Ｙ．ｐ）ノードは、それらのルーティングテーブルを、新しく挿入されたノード（例えば、Ｙ）と交換する。同期メッセージを受信するノードは、同期応答を送信することによって応答することができる。同期応答は、応答側ノードの観点を除き、同期メッセージと同様のデータを搬送する。同期メッセージおよび同期応答はいずれも、アプリケーションデータを搬送（または結合）することができる。したがって、アプリケーションデータを、同期化フェーズ状態の間に、ノード間で伝搬することができる。同期フェーズ状態が完了すると、ノードは、そこに向けられたメッセージを、単に後続または先行に転送するのではなく、処理することができる。しかし、ノードは、そのルーティングテーブルが取り込まれないので、引き続き弱いルーティング参加者と見なされることがある。
【０１３６】
ルーティングフェーズ：同期フェーズ状態が完了した後、ノードは、ルーティングフェーズ状態に移行する。ルーティングフェーズ状態において、新しく同期化されたノード（例えば、ノードＹ）は、そのルーティングノードを計算する。ルーティングフェーズ状態は、以下のアルゴリズムに従って実施することができる（すべての演算はｂnを法として行われる）。
【０１３７】
ＲＰ１。ルーティングフェーズ状態が平衡化手順（以下で説明）の一部として実行されている場合、後続ノード（Ｙ．ｓ）および先行ノード（Ｙ．ｐ）は、ノードＹが参加するあらゆる近傍域リングで活性であることを保証する。いずれかが活性でない場合、考慮中のリング内の近隣ノードの中から次善の後続または先行ノードを選択することにより、失敗したノードの代替ノードを判別する。
【０１３８】
ＲＰ２。  １≦ｉ≦ｎ−１である場合、
ＲＰ２ａ。  ｚ＝Ｙ．ｉｄ±ｂiを計算する。
ＲＰ２ｂ。  リングｄが最も特定的な近傍域ではない場合、ノードＹが参加し、Ｙ．ｓd．ｉｄ＜Ｙ．ｉｄ＋ｂi＜Ｙ．ｓd+1．ｉｄまたはＹ．ｐd．ｉｄ＜Ｙ．ｉｄ−ｂi＜Ｙ．ｐd+1．ｉｄの条件を満足する近傍域リングを見つける。それ以外の場合、リングｄを最も特定的な近傍域リングにする。リングｄは、ノードＹがｚに最も近接するルーティングパートナーを探すべき近傍域リングである。仮にＱを、Ｙ．ｓd．ｒ±iとＹ．ｐd．ｒ±iとの間でｚに数値的に最も近接するノードとする。｜Ｑ．ｉｄ−ｚ｜がｂiの構成可能な割合（通常２０％）の範囲内である場合、単にＹ．ｒ±i＝Ｑとする。Ｑ．ｉｄが（Ｙ．ｓd．ｉｄ±ｂi）または（Ｙ．ｐd．ｉｄ±ｂi）のいずれかよりもｚに近接している場合、これはノードＹが、Ｙ．ｓdまたはＹ．ｐdよりも近傍域リングｄにおいてノードＱへのよりよいパートナールーティングノードであることを意味する。したがって、ｕｐｄａｔｅＭｓｇがまだ送信されていない場合は、これをノードＱに送信して、ノードＱがｒ．jにおけるそのパートナールーティングノードとしてノードＹを確立することができるように、ｉおよびノードＹをパラメータとして供給する。  
ＲＰ２ｃ。  このフェーズ状態が平衡化手順の一部として実行されている場合、およびＹ．ｓd．ｒ±i．ｉｄ＝Ｙ．ｐd．ｒ±i．ｉｄである場合、（Ｙ．ｓd．ｉｄ±ｂi）と（Ｙ．ｐd．ｉｄ±ｂi）との間の数値範囲には１つのノードしかない。そのノードは、後続（または先行）ノードのルーティングノードｒ±iによって指し示されるノードである。したがって、単にＹ．ｒ±i＝Ｙ．ｓd．ｒ±i.iとする。  
ＲＰ２ｄ。  それ以外の場合、近傍域基準をリングｄの近傍域基準に設定されたノードＱでＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを呼び出すことにより、ルーティングパートナーＹ．ｒ±iを計算する。これは、Ｙ．ｒ±i＝Ｑ．ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（ｚ，ｕｐｄａｔｅＭｓｇ，ｄ）を暗示する。
【０１３９】
ＲＰ３。この時点において、ノードＹは、そこに向けられたメッセージを処理できるだけではなく、ルートメッセージも処理することができる。
【０１４０】
ＲＰ４。まだ行われていない場合、パートナールーティングノードのエンドポイントＩＤのアプリケーション層から送信された活性通知イベントをサブスクライブする。さらに、もはやパートナールーティングノードではないノードのアプリケーション層で以前確立された、任意の活性イベントサブスクリプションを呼び出す。例えば、サブスクリプションおよび／または呼び出し要求は、対応するアプリケーション（例えば、ネームスペースアプリケーション）のｐｕｂ−ｓｕｂ（パブリック−サブスクライブ）論理を実施するアプリケーション層（例えば、アプリケーション層１２１）まで渡されてもよい。その後のアプリケーション固有の活性メッセージ（例えば、ネームスペースサブスクリプションの結果生じたもの）がアプリケーション層において受信されると、通知（イベント）は、処理のために他の下位層（例えば、他の下位層１３１）まで押し下げられる。
【０１４１】
図１７は、ファンクション層１７５１とアプリケーション層１７５２との間に発生しうる多数の活性インタラクションの例を示す。図１７に示されるように、エンドポイントは、例えば、様々なノードを表す（例えば、ＵＲＬまたはＵＲＩによって表される）パブリッシュ／サブスクリプショントピックであり、例えば、フェデレーションインフラストラクチャノードであってもよい。Ｓｕｂｓｃｒｉｂｅ  Ｔｏ  Ｌｉｖｅｎｅｓｓ  Ｅｖｅｎｔ１７０１は、活性イベント（例えば、パブリッシュ／サブスクライブトピック）をサブスクライブするために、ファンクション層１７５１からアプリケーション層１７５２に呼び出すことができる。Ｒｅｖｏｋｅ  Ｌｉｖｅｎｅｓｓ  Ｓｕｂｓｃｒｉｐｔｉｏｎ１７０２は、活性イベントへのサブスクリプションを呼び出すために、ファンクション層１７５１からアプリケーション層１７５２に呼び出すことができる。Ｅｎｄ  Ｐｏｉｎｔ  Ｄｏｗｎ１７０３は、エンドポイントが停止している可能性があることを示し、ファンクション層１７５１にオプションの代替エンドポイントを提供するために、アプリケーション層１７５２からファンクション層１７５１に送信することができる。Ｅｎｄ  Ｐｏｉｎｔ  Ｄｏｗｎ  Ｅｖｅｎｔ１７０３は、以前のサブスクリプション（例えば、Ｓｕｂｓｃｒｉｂｅ  Ｔｏ  Ｌｉｖｅｎｅｓｓ  Ｅｖｅｎｔ１７０１）に基づいて非同期的に送信することができる。
【０１４２】
Ｎｏｄｅ  Ｄｏｗｎ１７０４は、ファンクション層１７５１（または、何らかの他の下位層）が故障した（failed）ノードを検出したことを示し、オプションでアプリケーション層１７５２に代替ノードを提供するために、ファンクション層１７５１からアプリケーション層に呼び出すことができる。続いて、アプリケーション層１７５２は、故障している可能性のあるノードが検出されたことをその他の関係者に伝搬することができる。Ｎｏｄｅ  Ｄｏｗｎ  Ｅｖｅｎｔ１７０４を、ファンクション層１７５１またはその他の下位層が故障した可能性のあるノードを検出したとき、いつでも非同期的に送信することができる。Ｓｅｎｄ  Ｌｉｖｅｎｅｓｓ１７０６は、（例えば、Ｎｏｄｅ  Ｄｏｗｎ  Ｅｖｅｎｔ１７０４またはその他のアウトオブバンド機構から）ノードが停止していることをアプリケーション層１７５２が検出したとき、アプリケーション層１７５２からファンクション層１７５１に呼び出すことができる。Ｓｅｎｄ  Ｌｉｖｅｎｅｓｓ  Ｅｖｅｎｔ１７０６は、ファンクション層１７５１に活性メッセージを送信させることができる。Ｓｅｎｄ  Ｌｉｖｅｎｅｓｓ  Ｅｖｅｎｔ１７０６はまた、アプリケーション層１７５２が、ノードが停止しており（活性のサブスクライブを介して）以前確立されたサブスクリプションに依存していないことを検出すると、いつでも非同期的に呼び出すことができる。
【０１４３】
したがって、一部の実施形態において、ファンクション層１７５１は再帰的に使用される。例えば、ファンクション層１７５１は、指定されたノード（例えば、上または下の特定のノード）へのインタレストをアプリケーション層１７５２に示すことができる。アプリケーション層１７５２は、指定されたノードに関連する通知に対してアプリケーション固有のサブスクリプションを形成することができ、次いで、形成されたサブスクリプションを、その他のフェデレーションノードの適切な対応するアプリケーション層１７５２に伝達するために、ファンクション層１７５１を再使用することができる。例えば、フェデレーションノード内のアプリケーション層１７５２がネームスペースｐｕｂ／ｓｕｂ動作を実施した場合、ファンクション層１７５１は、指定されたノードの通知を管理するパブリッシュ／サブスクライブマネージャに、サブスクリプションをルーティングすることができる。このパブリッシュ／サブスクライブマネージャは、関連するフェデレーションノードにおいてアプリケーション１７５２の少なくとも一部として実装される。したがって、ファンクション層１７５１は、ファンクション層１７５１が生成させたサブスクリプションをルーティングするために使用される。同様の再帰的機構はまた、アンサブスクライブするか、または指定されたノードにもはやインタレストがないことを示すために使用することができる。
【０１４４】
動作フェーズ：ルーティングフェーズ状態が完了した後、ノードは、動作フェーズ状態に移行する。ノードは、停止する（例えば、リブートする）まで、動作フェーズ状態にとどまることができる。動作フェーズ状態において、ノードは、更新メッセージをルーティングパートナーに適宜送信することができる。更新メッセージ（更新要求および更新応答）は、送信側ノード（例えば、対象となるすべての近傍近隣）の近隣ノード活性情報を含むことができる。この送信される活性情報はまた、送信側の活性情報も含むことができる。更新メッセージは、そのルーティングパートナーノードを定期的に更新するためにノードによって発信された、ルーティングされたメッセージであってもよい。アプリケーションデータは、ルーティングパートナーの更新中にアプリケーションデータが伝搬されるように、更新メッセージで結合することができる。メッセージ宛先は、所望のルーティングインデックスにおいて完全なルーティングパートナーの識別に設定される。このメッセージのＭｅｓｓａｇｅ  ＩＤプロパティは、このメッセージを処理するノードが最新メッセージを判別することができ、このメッセージが近位にルーティングされるように、アプリケーションシーケンス番号を割り当てられる。
【０１４５】
更新メッセージを受信するノードは、更新応答で応答することができる。更新応答は、データが応答側ノードの観点からであることを除き、更新メッセージと同様のデータを搬送する。更新メッセージおよび更新応答の交換を通じて、ノードは、ルーティング情報を交換することができる。随時、動作ノードは、ルーティングパートナーを更新することができる。
【０１４６】
随時、動作ノードはまた、ｐｉｎｇメッセージ（例えば、ｐｉｎｇメッセージ１６０９および１６１１）を送信することもできる。ｐｉｎｇメッセージは、ノードによって送信される単方向メッセージであり、その存在を定期的に宣言し、その近隣／ルーティングノードおよび複製（例えば、結合された）アプリケーションデータに関してその近隣内に情報を広める。
【０１４７】
発信元ノードは、その直後の後続近隣ノードまたは直前の先行近隣ノードのうちの１つまたは複数にｐｉｎｇメッセージを送信することができる。したがって、ｐｉｎｇ分布パターン（つまり、どのノードがｐｉｎｇメッセージを送信されるか）に応じて、発信元ノードに関連する情報が、発信元ノードの近隣内のリングで他のノードに伝搬される。例えば、発信元ノードは、その直前の先行ノードおよび直後の後続ノードのみにｐｉｎｇメッセージを送信することができ、ｐｉｎｇメッセージは、発信元ノードの位置（ノードＩＤ）からにリングに沿って両方向に発信元の近隣の端まで外側に伝搬する。代替として、発信元ノードは、その先行および後続の両方向に、その近隣のｎ番目のノードごとにｐｉｎｇメッセージを送信することができる。
【０１４８】
ｐｉｎｇメッセージを受信する各ノードは、近隣の範囲の観点から、発信元ノードへのそのインタレストを確認する。インタレストがない場合、ノードはｐｉｎｇメッセージを廃棄する。インタレストがある場合、ノードはｐｉｎｇメッセージを処理して、転送に制約がある場合はその指定されているｐｉｎｇパターンに従ってｐｉｎｇメッセージを発信元ノードの近隣に転送する。例えば、ｐｉｎｇメッセージを処理した後、受信側ノードは、送信側および発信側ノードがその先行ノードセットにある場合は少なくともその後続ノードに、また送信側および発信側ノードがその後続ノードセットにある場合は少なくともその先行ノードに、ｐｉｎｇメッセージを転送することができる。
【０１４９】
したがって、ｐｉｎｇメッセージの外側への伝搬は、メッセージが発信元ノードの周囲の近隣ノードセットの端に到達したときに停止する。ｐｉｎｇメッセージのＭｅｓｓａｇｅ  ＩＤプロパティは、このメッセージを処理するノードが発信元ノードから最新メッセージを判別して処理の重複または不必要な転送を防ぐことができるように、アプリケーションシーケンス番号を割り当てられる。
【０１５０】
図１６に戻って参照すると、ｐｉｎｇメッセージ１６０９は、ファンクション層１６５１において近隣ノードから受信することができる。アプリケーションデータ１６１２（例えば、ネームスペースサブスクリプション）は、ｐｉｎｇメッセージ１６０９に結合することができる。ファンクション層１６５１は、ｐｉｎｇメッセージに含まれている任意のアプリケーションデータについてアプリケーション層１６５２に知らせることができる。同様に、ファンクション層１６５１は、同期要求メッセージに含まれている任意のアプリケーションデータについてアプリケーション層１６５２に知らせることができる。これらのいずれの場合の移動も、アプリケーションデータ１６１２を含む、近隣状態同期イベント１６０３をアプリケーション層１６５２に送信することを介して、達成することができる。
【０１５１】
一部のファンクション層イベント（例えば、受信したｐｉｎｇメッセージ１６０９）に応答して、ファンクション層１６５１は、近隣状態要求１６０４をアプリケーション１６５２に送信することができる。近隣状態要求１６０４は、近隣にオプションで伝搬される必要のある状態を取得するためにアプリケーション層１６５２で呼び出される。近隣状態要求１６０４に応答して、アプリケーション層１６５２は、オプションのアプリケーションデータ１６０７を含む近隣状態１６０６をファンクション層１６５１に返すことができる。ファンクション層１６５１は、近隣およびルーティングパートナーノード活性情報、さらにオプションのアプリケーション層近隣状態を伝搬するため、オプションのアプリケーションデータ１６０７を含むｐｉｎｇメッセージ１６１１を送信することができる。ファンクション層１６５１はまた、アプリケーション状態を伝搬するために、オプションのアプリケーションデータ１６０７を含む同期応答１６０８を送信することができる。
【０１５２】
離脱プロトコル
ノードがフェデレーションから離脱することが適切である場合、ノードは、フェデレーションから正常終了して除去されるようにＤｅｐａｒｔ関数を実施することができる。ノードは、その直前の近傍先行ノードおよび直後の近傍後続ノード、ならびにおそらくは同じ近傍近隣内の他のノードのうちの１つまたは複数に離脱メッセージを送信することにより、既存のフェデレーションを離脱する。したがって、離脱分布パターン（つまり、どのノードが離脱メッセージを送信されるか）に応じて、発信元ノードに関連する情報が、離脱するノードの近隣内のリングで他のノードに伝搬される。離脱メッセージは、正常に離脱するノードによって発信される単方向メッセージであり、少なくとも１つのその近傍近隣内の１つまたは複数の他のノードに、その差し迫った離脱を知らせる。離脱するノードは、ｐｉｎｇメッセージの伝搬と類似した方法で、（例えば、その近隣内に）離脱メッセージを伝搬する。例えば、ＩＤ３０を有するノードは、ＩＤ１７および４０を有するノードに離脱メッセージ１２１９を送信することができる。次いで、ＩＤ３０を有するノードは、所定の近傍リングの観点から、自身をフェデレーションインフラストラクチャから外すことができる。ノードは１つの近傍近隣から自身を外すことができるが、属している他のノードを外すことはできないことに留意されたい。
【０１５３】
ＩＤ１７および４０を有するノード（つまり、先行および後続ノード）は、ＩＤ３０を有するノードが外された後にＩＤ３０に最も近接するノードとなる可能性が高く、ＩＤ１７および４０を有するノードは、ＩＤ３０を有するノードの離脱について認識させられる。したがって、ＩＤ３０に配信されるべき今後のメッセージを、ＩＤ１７および４０を有するノードにおいて適切に処理することができる。ＩＤ１７および４０を有するノードは、ＩＤ３０を有するノードの離脱を、リング１２０６の他のノードに伝搬することができる。ＩＤ３０を有するノードがない場合、ＩＤ１７および４０を有するノードはまた、相互を指し示す可能性がある先行および後続ポインタを、再計算することもできる。
【０１５４】
離脱メッセージのＭｅｓｓａｇｅ  ＩＤプロパティは、離脱メッセージを処理するノードが、発信側ノードによって送信された一連のｐｉｎｇおよび離脱メッセージの中で最新メッセージを判別することができるように、ｐｉｎｇメッセージと同じアプリケーションシーケンス番号を割り当てられる。フェデレーション近傍リングからの正常な離脱はオプションであるが、推奨される。しかし、フェデレーションは、ノードが突然に離脱する場合、自己回復するように設計される。
【０１５５】
活性
フェデレーションの存続期間中、ノードは、フェデレーションを保持するために活性情報を交換することができる。活性情報は、Ｌｉｖｅｎｅｓｓ  Ｍｅｓｓａｇｅ  Ｈｅａｄｅｒの形態で、フェデレーション内で交換される実質的にすべてのメッセージに含まれる。例えば、参加メッセージ、参加応答、同期メッセージ、同期応答、更新メッセージ、更新応答、アプリケーション固有メッセージ、活性メッセージ、およびｐｉｎｇメッセージはすべて、活性情報ヘッダを含むことができる。フェデレーションノードが任意のメッセージまたは応答を送信する場合、ノードは、その他のノードによる処理のための活性情報を含むことができる。活性情報は、活性メッセージの活性情報ヘッダに含まれている。
【０１５６】
ノードの活性状態を示す活性情報は、以下のプロパティを使用して表すことができる。
［Ｎｏｄｅ］：活性状態を表しているノードを識別する。ノードは、［Ｉｎｓｔａｎｃｅ  ＩＤ］をさらに含む［Ｒｅｆｅｒｅｎｃｅ  Ｐｒｏｐｅｒｔｉｅｓ］に基づいて識別することができる。  
［Ｒｅｆｅｒｅｎｃｅ  Ｐｒｏｐｅｒｔｉｅｓ］：ＷＳアドレッシング仕様で規定されている要素情報項目。ＷＳアドレッシングは、参照プロパティセットに含めるための［Ｉｎｓｔａｎｃｅ  ＩＤ］参照プロパティを定義する。  
［Ｉｎｓｔａｎｃｅ  ＩＤ］：ノードの特定のインスタンスを識別する数字。増分ブートカウントを、ノードのインスタンスＩＤとして使用することができる。  
［Ｐｈａｓｅ］：識別されたノードのフェーズを伝達する。  
［Ｐｈａｓｅ−Ｓｔａｔｅ  Ｖａｌｕｅ］  示されたノードインスタンスが達成したと認識された最高フェーズ状態（挿入、同期、ルーティング、動作）を伝達する。  
［Ｐｈａｓｅ．Ｕｎｋｎｏｗｎ  Ｉｎｄｉｃａｔｉｏｎ］  現行フェーズが既知または未知であるかどうかを伝達するインジケータ。  
［Ｆｒｅｓｈｎｅｓｓ］：情報の新しさ、および０からＭａｘＦｒｅｓｈｎｅｓｓまでのその値を伝達する。値が高くなれば、それに応じて情報は新しいものになり、０は情報がないことを示し、ＭａｘＦｒｅｓｈｎｅｓｓはプロトコル定義の定数である。  
［Ｃｏｌｏｒ］：ノードが属している近傍域等価クラスを識別する。同じカラー値を持つ２つのノードは、カラー値によって識別された同じ等価クラスに属すので、常に近位に最も接近していると見なされる。より多くのノードがフェデレーションに参加するので、近位等価クラスの数は、時間の経過と共に増大することができる。  
［Ｗｅｉｇｈｔ］：ノード容量メトリック、および０からＭａｘＷｅｉｇｈｔまでのその値の範囲を供給する。これは、大規模計算能力、高いネットワーク帯域幅、長いアップタイムなど、フェデレーションノードの望ましい特性を測定する。値が高くなれば、それに応じて、ノードの能力は高まり、パートナーシップの観点からより望ましくなる。
【０１５７】
一部の環境において、ノードの［Ｎｏｄｅ］および［Ｆｒｅｓｈｎｅｓｓ］プロパティは、［Ｏｒｉｇｉｎ］および［Ｓｅｎｄｅｒ］メッセージヘッダなどのより大きい範囲で黙示的または明示的に伝達され、したがって、活性ヘッダに再度上記のプロパティを含めることは重複することになる。例えば、メッセージの送信者は、その現行のフェーズ、カラー、および重みの情報をそのＩＤとして伝達する必要があるだけであり、インスタンスＩｄはメッセージアドレッシングヘッダで供給され、その新しさ（Ｆｒｅｓｈｎｅｓｓ）が黙示的に示される。
【０１５８】
活性状態は、以下のように定義される「＜」２項関係に基づいて、少なくとも部分的に順序付けることができる。
【０１５９】
「Ｌ１＜Ｌ２」は、以下の場合に真である。  
１．「Ｌ１．［Ｎｏｄｅ］．［Ｎａｍｅ］＝Ｌ２．［Ｎｏｄｅ］．［Ｎａｍｅ］」が真であり、以下のうちの１つが、リストされている順序で実行され短絡されたテストで真である。  
・L1.[Node].[Reference Properties].[Instance ID] < L2.[Node].[Reference Properties].[Instance ID]
・L1.[Phase.Unknown Indication]!= true AND L2.[Phase.Unknown Indication] != true AND L1.[Phase-State] < L2.[Phase-State]
・L1.[Freshness] < L2.[Freshness]
２．「Ｌ１．［Ｃｏｌｏｒ］＝Ｌ２．［Ｃｏｌｏｒ］」が真であり、以下のうちの１つが、リストされている順序で実行され短絡されたテストで真である。  
・L1.[Phase-State] <L2.[Phase-State]
・L1.[Weight] < L2.[Weight]
【０１６０】
さらに、指定されたノードが使用不可能になった（例えば、停止した）ことが検出されるかまたは疑われる場合、活性「ダウン（ｄｏｗｎ）」メッセージを、指定されたノードに送信することができる。一例として、アプリケーション層（例えば、アプリケーション層１２１）が、別のアプリケーション層（例えば、アプリケーション層１２３）またはその別のアプリケーション層をホスティングするノードが機能停止していることを検出した場合、その検出側アプリケーション層は、例えばメッセージモデルおよび関連する処理モデル１６００および／または１７６０に従って、ノードが停止している可能性があることを、他の下位層（例えば、他の下位層１３１）に通知することができる。そのような通知は、例えば、ファンクション層１６５１などの他の下位層に、活性ダウンメッセージを送信させることができる。これは、活性ダウンメッセージの生成に対する刺激の一例にすぎない。
【０１６１】
活性ダウンメッセージは、停止していることが疑われるノードに最も接近するノードにルーティングされて配信されるので、指定されたノードの活性ダウンメッセージがその指定されたノードに戻されて配信された場合、その指定されたノードが停止していないか、または指定されたノードが異なるインスタンスである（例えば、異なるインスタンスＩＤ）である。一方、活性ダウンメッセージが別のノードに配信された場合、その指定されたノードが停止していることを示す。したがって、活性ダウンメッセージを受信するノードが、自身を、指定されたノードの近傍近隣にあると見なす場合、それは、前述のようにその近傍近隣への指定されたノードの離脱メッセージをたどって、指定されたノードが停止している可能性があること、および受信側ノードがその代替であることを、（例えば、Ｎｏｄｅ  Ｄｏｗｎ１７０４を使用して）そのアプリケーション層に示すことができる。指定されたノードの活性ダウンメッセージは、その目標ＩＤを停止している可能性のあるノードのＩＤに設定して近位にルーティングすることができる。
【０１６２】
平衡化手順
本発明の実施形態は、短期間にフェデレーションに参加および離脱する多数のノードに対応するように設計される。ネットワークのそのような変化は、様々なノードにおいて保持される対数検索ツリーが平衡を失った場合、ルーティングの遅延を引き起こす可能性がある。つまり、リングの一方の側に、他方よりも多くのノードがあるような場合である。最適なルーティング効率を実現するため、フェデレーションに参加しているノードは、特定の基準が満たされたときに平衡化手順を実行する。
【０１６３】
例えば、以下の条件のいずれかが真である場合、任意のノードは、平衡化手順を実行して最適なルーティング効率のための平衡化ルーティングテーブルを確保することができる。  
・設定された数の前述の活性メッセージが受信された。  
・前述の活性メッセージの前回の受信以降、設定された時間数が経過した。  
・新しいノードが到達したか、または既存のノードが離脱したという意味で、近隣が変化した。
【０１６４】
ルーティングテーブルの平衡化は、単純なプロセスである。例えば、平衡を失ったルーティングテーブルを持つノードは、Ｊｏｉｎプロトコルの同期化およびルーティングフェーズ状態を再実行することができる。
【０１６５】
動作ＲＰ２ｂ、ＲＰ２ｄ、およびＲＰ４は、１）数値に最も近接するルーティングノードを見つけること、２）フェデレーションを正常に離れるノードが後に続く離脱プロトコル、および３）活性メッセージを受信するノードが後に続く平衡化手順と相まって、連合するノードがネットワークをかなり迅速かつ多数で参加および離脱するとき、より高速な回復システムをもたらす。
【０１６６】
状況メッセージ
状況メッセージは、受信側ノードによって送信側ノードに送信される非ルーティングメッセージであり、送信側ノードが以前受信側ノードに転送した相関関係のあるメッセージのルーティング成功／失敗を知らせる。図１８は、要求−応答メッセージ交換パターンのメッセージ形成部分が、リング上のノードにわたりルーティングされる方法の例を示す図である。状況メッセージは、ルーティング状況が報告されている元の相関メッセージを識別するヘッダを含むことができる。したがって、状況メッセージは、メッセージが、あるノードから次のノードへ正常にルーティングされたことを示すためにノード間で使用することができる。例えば、ノード１８０１からノード１８０６へのルーティング要求メッセージ１８１１は、ノード１８０２、１８０３、１８０４、および１８０５を経由して要求１８１１を送信することを含む。対応するカスケード成功状況メッセージ（状況１８１７、１８１８、１８１９、１８２０、および１８２１）は、それぞれ、ノード１８０６からノード１８０５へ、ノード１８０５からノード１８０４へ、ノード１８０４からノード１８０３へ、ノード１８０３からノード１８０２へ、およびノード１８０２からノード１８０１へと送信することができる。要求１８１１に応答して、応答１８１６は、ノード１８０７からノード１８０１へと終端間で送信することができる。応答１８１６はオプションであり、単方向メッセージ交換パターンにおいてはなくてもよい。
【０１６７】
図１３は、ノードがフェデレーションインフラストラクチャに参加する方法１３００を示す例示の流れ図である。方法１３００は、図１２Ａおよび１２Ｂにおけるリング１２０６に関して説明される。方法１３００は、参加メッセージをフェデレーションインフラストラクチャに発行する動作を含む（動作１３０１）。例えば、ＩＤ１４４を有するノードは、リング１２０６を含むフェデレーションインフラストラクチャに参加１２０１を発行することができる。方法１３００は、参加するノードから参加メッセージを受信する動作を含む（動作１３０８）。例えば、リング１２０６を含むフェデレーションインフラストラクチャ内の既存のノードは、参加１２０１を受信することができる。
【０１６８】
方法１３００は、参加メッセージを処理ノードにルーティングする動作を含む（動作１３０９）。処理ノードは、参加メッセージがルーティングされる時点においてフェデレーションインフラストラクチャ内の他のアクティブなノードよりも参加ノードのＩＤに数値的に近接するＩＤを有するノードとすることができる。例えば、参加１２０１は、最初にＩＤ６４を有するノードにおいて受信されて、ＩＤ１５１を有するノードにルーティングする、ＩＤ１３５を有するノードにルーティングされてもよい。
【０１６９】
方法１３００は、参加するノードの１つまたは複数の先行ノード、ならびに１つまたは複数の後続ノードを計算する動作を含む（動作１３１０）。例えば、ＩＤ１５１を有するノードは、ＩＤ１４４を有するノードの直前の先行ノードおよび直後の後続ノードを計算することができる。リング１２０６内で、ＩＤ１５１を有するノードは、ＩＤ１３５を有するノードが直前の先行ノードであり、ＩＤ１５１を有するノードが直後の後続ノードであることを計算することができる。同様の計算を、その他の近傍リングについて行うことができる。
【０１７０】
方法１３００は、参加するノードの１つまたは複数のルーティングノードを計算する動作を含む（動作１３１１）。例えば、ＩＤ１５１を有するノードは、ＩＤ１４４を有するノードのルーティングノードを（ＩＤ１５１を有するノードの観点から）計算することができる。リング１２０６内で、ＩＤ１５１を有するノードは、例えば、ＩＤ２１８および４０を有するノードが、ＩＤ１４４を有するノードのルーティングノードであることを計算することができる。同様の計算を、その他の近傍リングについて行うことができる。
【０１７１】
方法１３００は、参加するノードに参加応答を送信する動作を含む（動作１３１２）。参加応答は、フェデレーションインフラストラクチャの現行ビューを与えられて処理ノードによって計算されたように、参加するノードの先行および後続の近隣およびルーティングパートナーノードをすべて識別することができる。例えば、参加応答１２０２は、少なくともＩＤ１３５を有するノードを、ＩＤ１４４を有するノードの直前の先行ノードとして識別することができ、ＩＤ１５１を有するノードを、ＩＤ１４４を有するノードの直後の後続ノードとして識別することができ、ノードＩＤ１４４（新しく参加するノード）についてＩＤ１５１を有するノードにおいて計算された（ＩＤ１４４を有するノードの）任意のルーティングノードを識別することができる。
【０１７２】
方法１３００は、参加メッセージを処理したフェデレーションノードから参加応答を受信する動作を含む（動作１３０２）。例えば、ＩＤ１４４を有するノードは、ＩＤ１５１を有するノードから参加応答１２０２を受信することができる。
【０１７３】
方法１３００は、直前の近傍先行ノードおよび直後の近傍後続ノードの少なくとも各々に同期要求を送信する動作を含む（動作１３０３）。例えば、ここで図１２Ｂを参照すると、ＩＤ１４４を有するノードは、ＩＤ１３５および１５１を有するノードに同期要求１２０３を送信することができる。同期要求１２０３は、ＩＤ１４４を有するノードの任意の近隣ノードの識別、および／またはＩＤ１４４を有するノードの任意のルーティングパートナーの識別を含むことができる。
【０１７４】
ＩＤ１３５および１５１を有するノードは、同期要求１２０３を受信することができる。同期要求１２０３の受信に応答して、ＩＤ１３５および１５１を有するノードは、対応するルーティングテーブルからそれらの近隣およびルーティングパートナーノードを識別することができる。ＩＤ１３５および１５１を有するノードは、同期応答１２０４内に、それらの識別された近隣およびルーティングパートナーノードの活性情報を含むことができ、ＩＤ１４４を有するノードに同期応答１２０４を送信することができる。
【０１７５】
方法１３００は、近傍先行および後続ノードの各々から同期応答を受信する動作を含む（動作１３０４）。例えば、ＩＤ１４４を有するノードは、ＩＤ１３５および１５１を有するノードから同期応答１２０４を受信することができる。同期応答１２０４は、フェデレーションインフラストラクチャ内のリング１２０６または他のリング上の１つまたは複数のノードの活性情報を含むことができる。同期応答１２０４はまた、ＩＤ１４４を有するノードの見込み（prospective）ルーティングパートナーノードを識別することができる。
【０１７６】
方法１３００は、近隣ノードを計算する動作を含む（動作１３０５）。例えば、ＩＤ１４４を有するノードは、ＩＤ１３５および１５１を有するノードの近隣ノードの和集合に基づいて、対応する近隣ノードを計算することができる。近隣ノードは、参加応答メッセージおよび任意の同期応答メッセージの集約されたビューに基づいて計算することができる。
【０１７７】
方法１３００は、ルーティングノードを計算する動作を含む（動作１３０６）。例えば、ＩＤ１４４を有するノードは、リング１２０６のノードの中からルーティングノードを計算することができる。ルーティングパートナーは、参加応答メッセージおよび任意の同期応答メッセージの集約されたビューに基づいて計算することができる。
【０１７８】
方法１３００は、少なくとも近隣ノード情報を、計算されたルーティングパートナーと交換する動作を含む（動作１３０７）。例えば、ＩＤ１４４を有するノード、およびＩＤ２１８を有するノード（計算されたルーティングパートナー）は、それらのそれぞれの近隣ノードに対応する状態情報（例えば、インスタンスＩＤ、フェーズ状態など）を交換することができる。これらの交換は、上記のルーティングフェーズ状態において説明されている少なくとも各々の一意の計算されたルーティングパートナーまで更新メッセージをソーシング（ルーティング）する、新しく参加するノードによって達成される。更新メッセージを処理するノードは、新しく参加するノードからのこれらの更新メッセージの受信に対して、対応する更新応答メッセージを送信する。更新応答メッセージは、少なくとも自身およびその近隣ノードの活性情報を含む。
【０１７９】
方法１３００はまた、少なくとも１つの近隣ノードへのルーティングテーブルの初期伝搬を開始する動作を含むことができる。例えば、ＩＤ１４４を有するノードは、計算された近隣およびルーティングパートナーノードをｐｉｎｇメッセージに含むことができ、ｐｉｎｇメッセージを、ＩＤ１７４を有するノード（例えば、計算された近隣ノードの１つ）に送信することができる。ＩＤ１７４を有するノードは、ｐｉｎｇメッセージを受信して、ＩＤ１４４を有するノードにおいて発信された活性情報で、対応するルーティングテーブルを更新することができる。ＩＤ１７４を有するノードはまた、その対応するルーティングテーブルを第２のｐｉｎｇメッセージに含むことができ、将来のある時点で第２のｐｉｎｇメッセージを、ＩＤ１４４を有するノードに送信することができる。ＩＤ１４４を有するノードは、第２のｐｉｎｇメッセージを受信して、その対応するルーティングテーブルを、第２のｐｉｎｇメッセージに含まれる活性情報内のノード（つまり、ＩＤ１７４を有するノードのルーティングテーブル内のノード）で更新することができる。ＩＤ１４４を有するノードは、リング１２０６内の他の近隣ノードでｐｉｎｇメッセージの送信を繰り返すことができる。
【０１８０】
新しく参加するノードがフェデレーションに参加するとき、新しく参加するノードは、既存のフェデレーションメンバーを見つけることができない場合もあり、そのため単独のメンバーとなる場合もあることを理解されたい。したがって、新しく参加するノードには、先行、後続、または近隣ノードが割り当てられていないこともある。そのため、新しく参加するノードは、あらゆる場合において、最善のルーティングパートナーとしてマップされる。
【０１８１】
さらに、方法１３００が単独のリング（リング１２０６）に関して説明されていても、一部の実施形態において、１つのリングに参加するノードは本質的に、１つまたは複数の他のリングにも参加することを理解されたい。例えば、戻って図５を簡単に参照すると、リング５５１において参加するノードはまた、リング５４３、５３１、５２２、５１１、および５０１にも参加する。したがって、方法１３００は、複数のリングに参加するように実施されてもよい。その他の実施形態において、方法１３００の動作の一部または全部は、複数のリングに参加する場合に繰り返されてもよい。例えば、図５を再度参照すると、１３００の動作のうちの１つまたは複数は、ノードがリング５５１およびリング５１４の両方に参加する場合（例えば、別名割り当て）繰り返されてもよい。いずれにしても、参加するノードＩＤに、アクセスし、ソートされたリンクリスト内、および参加するノードが参加すべき階層的に区分された対応するサブリスト内の参加するノードを識別するために使用することができる。受信側ノードは、ソートされたリンクリストおよび区分された各サブリストから識別される。参加メッセージは、ソートされたリンクリストおよび分割された各サブリスト内の処理ノードに（例えば、ＩＤに基づいて）ルーティングされる。参加応答は、ソートされたリンクリストおよび区分された各サブリスト内の処理ノードから受信される。
【０１８２】
図１４は、ノードがフェデレーションインフラストラクチャ内のメンバーシップを保持する方法１４００を示す例示の流れ図である。方法１４００は、リング１２０６に関して説明される。方法１４００は、第１のｐｉｎｇメッセージを近隣ノードに送信する動作を含む（動作１４０１）。第１のｐｉｎｇメッセージは、第１のｐｉｎｇメッセージを送信する現行ノードが近隣ノードの近隣であることを示す。第１のｐｉｎｇメッセージはまた、ルーティングパートナーと、現行ノードの近隣ノードの状態も含むことができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１５１を有するノードにｐｉｎｇメッセージを送信することができる。第１のｐｉｎｇメッセージを受信すると、ＩＤ１５１を有するノードは、ＩＤ１４４を有するノードが、ＩＤ１５１を有するノードの近隣であることを認識させられる。ノード１５１はまた、この動作の副次作用として、ノード１４４からの（リング１２０６上の他のノードの）より新しい活性情報を発見することができる。
【０１８３】
ｐｉｎｇメッセージは、例えば、ｐｉｎｇメッセージが送信されるべき近傍リングに関連付けられている構成状態に基づいて、指定された頻度で定期的に繰り返すことができる。頻度は、構成状態に応じて異なっていてもよい。例えば、ＷＡＮ用に指定されたｐｉｎｇ頻度は、ＬＡＮ用に指定された頻度とは異なっていてもよい。ｐｉｎｇメッセージはまた、ｐｉｎｇ分布パターンに従って送信することができる。発信元ノードのｐｉｎｇ分布パターンは、ｐｉｎｇメッセージが、リング上の両方向の近隣ノードに送信されるべきであることを示すことができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１３５を有するノードの方向、およびＩＤ１５１を有するノードの方向の両方にｐｉｎｇを送信することができる。ｐｉｎｇ分布のパターンおよび頻度は異なっていてもよい。例えば、近傍域リングごとに異なっていてもよい。
【０１８４】
方法１４００は、第２のｐｉｎｇメッセージを近隣ノードから受信する動作を含む（動作１４０２）。第２のｐｉｎｇメッセージは、少なくとも第２のｐｉｎｇメッセージを発信する近隣ノードが現行ノードの近隣であることを現行ノードに示す。第２のｐｉｎｇメッセージはまた、ルーティングパートナーと、発信元近隣ノードについての近隣ノードの状態も含むことができる。例えば、ＩＤ１５１を有するノードは、ＩＤ１４４を有するノードに第２のｐｉｎｇメッセージを送信することができる。第２のｐｉｎｇメッセージを受信すると、ＩＤ１４４を有するノードは、ＩＤ１５１を有するノードが、ＩＤ１４４を有するノードの近隣であることを認識させられる。第２のｐｉｎｇメッセージはまた、リング１２０６上の他のノードの活性情報を含むことができる。したがって、一般に、ｐｉｎｇメッセージは、近隣内で交換することができ、（各近傍メンバーシップについて）近隣メンバーシップと、フェデレーション内のノードの存在の接近する共通の近隣ビューを保持するために使用することができる。
【０１８５】
受信されたｐｉｎｇメッセージは、ｐｉｎｇが発信された（発信元ノードによって送信された）近傍近隣内の他のノードに定期的に繰り返す／転送することができる。転送されるｐｉｎｇメッセージはまた、ｐｉｎｇ分布パターンに従って送信することができる。転送側ノードのｐｉｎｇ分布パターンは、ｐｉｎｇメッセージが、発信元ノードから離れる方向の近隣ノードに送信されるべきであることを示すことができる。例えば、ＩＤ１１５１を有するノードは、ＩＤ１４４を有するノードにおいて発信するｐｉｎｇを、ＩＤ１７４を有するノードの方向に転送することができる。ｐｉｎｇ転送分布パターンは、例えば、近傍域リングごとに異なっていてもよい。
【０１８６】
ノードは、対応する間隔でｐｉｎｇメッセージを受信するように構成することができる。予想されるｐｉｎｇメッセージが受信されない場合、ノードは、通信障害であると解釈して、別のノードのＰｈａｓｅ．Ｕｎｋｎｏｗｎの表示を、予想されるが少なくとも遅延しているｐｉｎｇメッセージを発信すべきノードに対して、真に設定することができる。
【０１８７】
方法１４００は、更新要求メッセージを完全なルーティングノードに近位にルーティングする動作を含む（動作１４０３）。更新要求メッセージは、現行ノードが受信側ルーティングノードのルーティングパートナーとして参加していることを、そのようなルーティングされた更新要求を受信するルーティングノードに示す。更新要求メッセージはまた、少なくとも現行ノードの近隣ノードの識別（例えば、活性情報の形態で）を含むことができる。例えば、ＩＤ１４４を有するノードは、ＩＤ２０８を有するノードに更新メッセージ１２１６をルーティングすることができる（１４４から６４でオフセットされた完全なルーティングパートナー）。ノード２１０（以前計算されたルーティングノード）は２０８に最も接近しているので、これはルーティングされた更新要求を受信して処理する。更新メッセージ１２１６を受信すると、ＩＤ２１０を有するノードは、ＩＤ１４４を有するノードが、ＩＤ２１０を有するノードのルーティングパートナーであることを認識させられる（または、強調される）。
【０１８８】
方法１４００は、処理側（受信側）ルーティングノードから更新応答メッセージを受信する動作を含む（動作１４０４）。更新応答は、処理側ルーティングノードが現行ノードのルーティングパートナーとして参加していることを、現行ノードに示す。更新応答メッセージはまた、少なくとも処理側ルーティングパートナーの近隣ノードの識別も含むことができる。例えば、ＩＤ２１０を有するノードは、ＩＤ１４４を有するノードに更新応答１２０７を送信することができる。更新応答１２０７を受信すると、ＩＤ１４４を有するノードは、ＩＤ２１０を有するノードが、ＩＤ１４４を有するノードのルーティングパートナーであることを認識させられる。
【０１８９】
方法１４００はまた、現行ノードおよび近隣ノードが近隣として参加しており、現行ノードおよび近隣ノードがルーティングパートナーとして参加していることを示すために、ノード情報を適切に更新する動作を含むことができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１４４および１４１を有するノードが（近傍）近隣に参加していることを示すために、ＩＤ１５１を有するノードに対応するノード情報を更新することができる。同様に、ＩＤ１４４を有するノードは、ＩＤ１４４および２１０を有するノードがルーティングパートナーとして参加していることを示すために、ＩＤ２１０を有するノードに対応するノード情報を更新することができる。
【０１９０】
一部の実施形態において、指定されたノードＸにおいて保存されたアプリケーション状態は、信頼できるフラッディングプロトコルを使用してそのＮｅｉｇｈｂｏｒｈｏｏｄ（Ｘ）ノードの間で複製される。アプリケーション状態の各項目（item）は、割り当てられたオーナーを有しており、該オーナーは、項目を作成したエンドポイントであってもよい。アプリケーション状態の各項目はまた、そのオーナーによって与えられる、割り当てられたタイムスタンプ（シーケンス番号とも呼ばれる）を有する。タイムスタンプは、少なくとも以下の３つのコンポーネントを有する。
・所有するエンティティのインスタンスＩＤ（例えば、符号なし整数）。少なくとも単調（＞１）増加する必要がある。
・オーナーによって生成された特定のシーケンスを識別するシーケンスＩＤ（例えば、ＵＲＩ）。このコンポーネントにより、同じオーナーが複数の独立したシーケンスを生成することができる。
・識別されたアプリケーションシーケンスＩＤ内のオフセットを識別する序数（例えば、符号なし整数）。
【０１９１】
項目タイムスタンプは、＜Ｉｎｓｔａｎｃｅ  ＩＤ，Ｓｅｑｕｅｎｃｅ  ＩＤ，およびＯｆｆｓｅｔ＞の三重項で少なくとも半順序を生成するので、項目タイムスタンプは、複製中に対応する項目に関連付けられている最新の情報を検出するために使用される。複製されている項目に関連付けられているタイムスタンプは、最新のタイムスタンプを検出するため、ローカルのタイムスタンプ（ある場合）と比較される。項目タイムスタンプはまた、作成／更新／削除オペレーションの冪等（idempotent）セマンティックをサポートするために使用される。例えば、アプリケーション状態において既存の項目を更新するよう求める要求をノードが受信した場合、更新は、更新要求に関連付けられているタイムスタンプがローカル項目に関連付けられているタイムスタンプよりも高い場合に限り受け入れられる。ベクトルタイムスタンプに基づく競合解決技法は、項目が単一のオーナーに割り当てられない場合に使用されてもよい。アプリケーション状態の複製は、耐障害性をもたらし、近隣ノードにわたるロードバランシング要求を容易にする。
【０１９２】
オプションの動作として、（起点）他のパートナー（ルーティングおよび／またはパートナー）ノードから、予想される更新またはｐｉｎｇを（ある時間が経過した後）検出しなかったノードは、フェーズ状態が不明であると見なして、Ｐｈａｓｅ．Ｕｎｋｎｏｗｎ表示を真に設定し、そのように他のサードパーティノードに報告することができる。つまり、更新およびｐｉｎｇの定期的な生成が必要とされる可能性がある。この要件および実際のタイムアウト値は、様々な近傍リングの属性であってもよい。例えば、リングは、（例えば、ＬＡＮセグメント内の）一部のサブリングについて、より限定的なタイミング要件を有することもでき、ノード障害検出／報告は比較的迅速である。一方、リングは、（例えば、インターネット上の）他のサブリングについて、あまり限定的ではないタイミング要件を有する（またはタイミング要件がない）こともでき、事前のノード障害検出／報告は比較的時間を要する（または存在しない）。
【０１９３】
図１５は、別のノードの活性情報を発見する方法１５００を示す例示の流れ図である。方法１５００は、図１２Ａおよび１２Ｂにおけるリング１２０６に関して説明される。一般に、例えば、同期１２０３、同期応答１２０４、更新１２１６、更新応答１２０７などの任意のメッセージは、少なくとも１つの活性ヘッダを含むことができる。一部の実施形態において、活性ヘッダは、あるノードの＜ノードＩＤ、インスタンスＩＤ、フェーズ[phase-state value].[phase.unknown indication]、鮮度値、カラー（近傍域）値、および重み値＞を含む。他の実施形態において、活性ヘッダは、＜フェーズ[phase-state value].[phase.unknown indication]、鮮度値、カラー（近傍域）値、および重み値＞を含む。これらの他の実施形態において、活性ヘッダは、送信側および発信側ノードのノードＩＤおよびインスタンスＩＤをすでに含むアドレッシングヘッダを増大させるために使用することができる。アドレッシングヘッダはすでにノードＩＤおよびインスタンスＩＤを含むので、この情報は、活性ヘッダから除外されてもよい。
【０１９４】
方法１５００は、フェデレーションインフラストラクチャに参加しているノードの状態情報を表す活性ヘッダを受信する動作を含む（動作１５０１）。活性ヘッダは、少なくとも受信された参加ノードＩＤ、受信されたノードのインスタンスＩＤ、受信されたフェーズ値、および受信された鮮度値を含む。例えば、ＩＤ１４４を有するノードは、ＩＤ１５１を有するノードから同期応答１２０４内で第１の活性ヘッダを受信することができる。第１の活性ヘッダは、ＩＤ１７４を有するノードの＜参加ノードＩＤ、インスタンスＩＤ、フェーズ値[phase-state value].[phase.unknown indication]、鮮度値、カラー（近傍域）値、および重み値＞を含むことができる。フェーズ状態値（例えば、Ｉｎｓｅｒｔｉｎｇ、Ｓｙｎｃｉｎｇ、Ｒｏｕｔｉｎｇ、Ｏｐｅｒａｔｉｎｇ）は、第１の鮮度値の時点において、ＩＤ１７４を有するノードの表現されたフェーズを識別する。フェーズ値（例えば、フェーズ状態：［Ｉｎｓｅｒｔｉｎｇ、Ｓｙｎｃｉｎｇ、Ｒｏｕｔｉｎｇ、Ｏｐｅｒａｔｉｎｇ］、およびｐｈａｓｅ．ｕｎｋｎｏｗｎ）は、第１の鮮度値によって示された時点において、ＩＤ１７４を有するノードの表現および／または検出されたフェーズ情報を識別する。
【０１９５】
しかし、鮮度値は、通信の遅延の理由から無視することができる。鮮度値はまた、時間の経過と共に減衰する可能性がある。鮮度値の減衰曲線は、（不明を含む）様々なフェーズ状態に対して異なる可能性がある（ならびに、線形または対称とはならないこともある）。したがって、様々なノードフェーズにわたり、鮮度値の減衰は非線形および／または非対称であってもよい。
【０１９６】
方法１５００は、現行ノードにおいて保持される参加ノードの、少なくとも現行インスタンスＩＤ、現行フェーズ値、および現行鮮度値にアクセスする動作を含む（動作１５０２）。例えば、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードの、以前受信され格納されているインスタンスＩＤ、フェーズ値［ｐｈａｓｅ−ｓｔａｔｅ  ｖａｌｕｅ．］［ｐｈａｓｅ．ｕｎｋｎｏｗｎ  ｉｎｄｉｃａｔｉｏｎ］、および鮮度値にアクセスすることができる。
【０１９７】
方法１５００は、少なくとも受信されたインスタンスＩＤ、受信されたフェーズ値、および受信された鮮度値を、それぞれ現行ノードにおける現行インスタンスＩＤ、現行フェーズ値、および現行鮮度値と比較する動作を含む（動作１５０３）。例えば、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードの、以前受信され格納されているインスタンスＩＤ、フェーズ値［ｐｈａｓｅ−ｓｔａｔｅ  ｖａｌｕｅ．］［ｐｈａｓｅ．ｕｎｋｎｏｗｎ  ｉｎｄｉｃａｔｉｏｎ］、および鮮度値を、活性ヘッダで受信されたインスタンスＩＤ、フェーズ値［ｐｈａｓｅ−ｓｔａｔｅ  ｖａｌｕｅ．］［ｐｈａｓｅ．ｕｎｋｎｏｗｎ  ｉｎｄｉｃａｔｉｏｎ］、および鮮度値と比較することができる。
【０１９８】
ＩＤ１４４を有するノードは、（順に）第１のインスタンスＩＤがＩＤ１７４を有するノードの現在格納されているインスタンスＩＤよりも大きいことに基づいて、第１のフェーズ状態値がＩＤ１７４を有するノードの現在格納されているフェーズ状態値よりもさらに進んでいることに基づいて、または第１の鮮度値がＩＤ１７４を有するノードの現在格納されている鮮度値よりも大きい値であることに基づいて、ＩＤ１７４を有するノードの（例えば、ＩＤ１５１を有するノードから受信された）現在の状態情報が新しくないことを判別することができる。ＩＤ１４４を有するノードはまた、少なくとも１つの（現在格納されているかまたは活性ヘッダで受信された）ｐｈａｓｅ．ｕｎｋｎｏｗｎの表示が、フェーズ状態が検出／伝送された時点でフェーズ状態が既知であったことを示すことを判別することができる。
【０１９９】
方法１５００は、参加するノードの状態情報が、比較に基づいて現行ノードにおいて更新されるべきであるかどうかを判別する動作を含む（動作１５０４）。例えば、ＩＤ１７４を有するノードの値の比較に基づいて、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードの状態情報が更新されるべきであると判別することができる。ＩＤ１７４を有するノードの古い状態情報を更新することは、現在格納されている値（例えば、インスタンスＩＤ、フェーズ状態値、ｐｈａｓｅ．ｕｎｋｎｏｗｎ表示、または鮮度値）を、活性ヘッダに含まれている値と置き換えることを含むことができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードがさらに進んだフェーズ状態に移行したことを示すために、ＩＤ１７４を有するノードの状態情報を更新することができる。
【０２００】
一部の実施形態において、参加するノードとの通信が失われていることを検出することができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１５１を有するノードとの通信が失われたことを検出することができる。図１７を簡単に参照すると、（ＩＤ１５１を有するノードのエンドポイントとの）活性イベント１７０１の以前のサブスクリプションに応答して、アプリケーション層１７５２は、（ＩＤ１５１を有するノードのエンドポイントとの）エンドポイントダウンイベント１７０３をファンクション層１７５１に送信することができる。これらの実施形態において、そのような検出された活性条件を、前回の既知のフェーズ状態値と共にＰｈａｓｅ．Ｕｎｋｎｏｗｎ表示が真に設定された活性情報において示すことができる。
【０２０１】
方法１５００はさらに、フェデレーションインフラストラクチャ内の第２の異なるノードから、第２の活性ヘッダを含むメッセージを受信する動作を含む。例えば、ＩＤ１４４を有するノードは、第２の活性ヘッダを含む状況メッセージを（ＩＤ１０３を有するノード、またはリング１２０６内の他のノードから）受信することができる。第２の活性ヘッダは、ＩＤ１７４を有するノードの＜参加ノードＩＤ、第２のインスタンスＩＤ、第２のフェーズ値［ｐｈａｓｅ−ｓｔａｔｅ  ｖａｌｕｅ］．［ｐｈａｓｅ．ｕｎｋｎｏｗｎ  ｉｎｄｉｃａｔｉｏｎ］、第２の鮮度値、第２のカラー（近傍域）値、および第２の重み値＞を含むことができる。第２のフェーズ値（例えば、フェーズ状態：［Ｉｎｓｅｒｔｉｎｇ、Ｓｙｎｃｉｎｇ、Ｒｏｕｔｉｎｇ、Ｏｐｅｒａｔｉｎｇ］、およびｐｈａｓｅ．ｕｎｋｎｏｗｎ表示）は、第２の鮮度値の時点におけるＩＤ１７４を有するノードの表現／検出されたフェーズを識別する。
【０２０２】
代替として、第１の活性ヘッダを受信した後、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードと直接に通信しようと試みることができる。通信が成功した場合、ＩＤ１７４を有するノードは、アドレッシングヘッダ内にノードＩＤおよび第２のインスタンスＩＤを有し、＜第２のフェーズ値、第２の鮮度値、第２のカラー（近傍域）値、および第２の重み値＞を含む活性ヘッダを有するメッセージ（例えば、同期応答）を返すことができる。障害が検出された場合、ＩＤ１４４を有するノードは、内部活性状態変更（例えば、鮮度（ｆｒｅｓｈｎｅｓｓ）＝最高（ｍａｘ）、およびｐｈａｓｅ．ｕｎｋｎｏｗｎ表示＝真（ｔｒｕｅ））を生成し、状態変更が別のノードから受信されたかのように状態変更を処理する。そのような状態変更は、最高の鮮度値を有する。
【０２０３】
方法１５００はまた、第２のインスタンスＩＤ、第２のフェーズ値、および第２の鮮度値を、それぞれ現行インスタンスＩＤ、現行フェーズ値、および現行鮮度値と比較する動作を含むことができる（動作１５０６）。例えば、ＩＤ１０３を有するノードから状況メッセージを受信した後、ＩＤ１４４を有するノードは、（順に）第２のインスタンスＩＤが第１のインスタンスＩＤよりも大きいことに基づいて、第２のフェーズが第１のフェーズ値よりもさらに進んでいることに基づいて、または第２の鮮度値が第１のフェーズ値よりも大きいことに基づいて、ＩＤ１５１を有するノードの現在の状態情報が新しくないことを判別することができる。
【０２０４】
方法１５００はまた、参加するノードの状態情報が、比較に基づいて更新されるべきであるかどうかを判別する動作を含むことができる。例えば、ＩＤ１７４を有するノードの値の比較に基づいて、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードの状態情報が更新されるべきであると判別することができる。ＩＤ１７４を有するノードの古い状態情報を更新することは、現在格納されている値（例えば、インスタンスＩＤ、フェーズ状態値、ｐｈａｓｅ．ｕｎｋｎｏｗｎ表示、または鮮度値）を、第２の活性ヘッダに含まれている値と置き換えることを含むことができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードがさらに進んだフェーズ状態に移行したことを示すために、ＩＤ１７４を有するノードの状態情報を更新することができる。
【０２０５】
一部の実施形態において、フェーズ値は、等しいカラー値というコンテキストの中で比較される。前述のように、ノードは、複数の近傍域リングに参加することができる。複数の近傍域リングへの参加は、（共通のスパインに沿った）より一般的なリングへの参加を意味する、より特定的なリングへの参加の結果として生じる可能性がある。例えば、図５に戻って参照すると、リング５３２へのノードの参加はまた、ノードがリング５２２、５１１、および５０１に参加することも意味する。したがって、より特定的なリングのカラーはまた、すべての親近傍リングを表す。さらに、前述のように、複数の近傍域リングへの参加は、１つのリング内のノードが（異なるスパインに沿う可能性のある）１つまたは複数の他のリングに別名割り当てされるときに生じる可能性がある。例えば、引き続き図５を参照すると、リング５３２に参加しているノードを、リング５３１（またはリング５３１、５２２、５１１、および５０１への参加を意味するリング５４１）に別名割り当てすることができる。したがって、１つのリング（例えば、リング５３１）のカラーは、別のリング（例えば、リング５３２）のピアカラー（または近傍域）と見なすことができる。
【０２０６】
ノードが別名割り当ての方法で複数の近傍域リングに参加する場合、ノードのフェーズ値（例えば、フェーズ状態値および／またはｐｈａｓｅ．ｕｎｋｎｏｗｎ表示）が、様々な近傍域リングの間で異なる可能性が一部ある。したがって、別のノードの状態情報を受信するノードは、現在の状態情報がそのノードおよびカラーに対して更新されるべきであるかどうかを判別する前に、状態情報（カラー）について、対応する近傍域リングを識別する。例えば、ＩＤ１４４を有するノードは、受信された状態情報を現在の状態情報と比較する前に、ＩＤ１７４を有するノードに対応する受信された状態情報の対応する近傍域リングを識別することができる。
【０２０７】
適切な近傍域リングを識別することは、受信されたカラー値を、１つまたは複数の現行カラー値と比較することを含むことができる。受信されたカラー値と現行カラー値が等しい場合、例えば現行インスタンスＩＤ、現行フェーズ値、および現行鮮度値などの他の状態情報を、例えば受信されたインスタンスＩＤ、受信されたフェーズ値、および受信された鮮度値などの対応する受信された状態情報と比較することができる。一方、受信されたカラー値と現行カラー値が異なる場合、さらに比較は行われることはない。
【０２０８】
カラー値の間の等価は、様々な方法でもたらすことができる。例えば、カラー値の間の等価は、現行カラー値と受信されたカラー値が、同じ近傍域リング（例えば、リング５３２）を示す場合に起こり得る。さらに、カラー値の間の等価は、より特定的なカラー値が、対応する親カラー値（例えば、同じスパインに沿った別のリング）と比較される場合に起こり得る。例えば、リング５３２のカラー値を、リング５１１（あるいは、リング５２２または５０１）のカラー値と比較することで、等価となることができる。このように、子近傍域は、親近傍域であるが、より特定的である。
【０２０９】
したがって一般に、フェデレーションインフラストラクチャ内の現在動作可能なノードは、他のノードとの通信が失われているように見える場合であっても、他のノードについての、表現され検出された活性状態情報を交換することができる。
【０２１０】
ブートストラップ機構
一般に、ノードがフェデレーションのアクティブなメンバーになるために（例えば、参加）、ノードは、参加しようと意図するリーフリングのすでにアクティブなメンバーである、少なくとも１つの他のノードと通信する必要がある。通信のこの初期形態が使用可能であること確実にするため、フェデレーションは、ブートストラップ機構を使用することができる。ブートストラップ機構は、他のタイプの通信がリーフリングのアクティブメンバーを識別することができない場合、または新しく参加するノードがシードノードのような特殊ノードのセットのうちの少なくとも１つと最初に通信するようセキュリティの制約が求める場合、最後の手段として使用されることができる。つまり、他のタイプの通信が失敗した場合、またはセキュリティ要件に応じて、ブートストラップ機構は、リーフリングのアクティブなメンバーノードを識別するために使用されることができる。
【０２１１】
一部の実施形態において、シードノードは、フェデレーションとの通信をブートストラップするために使用される。シードノードは、近傍域相互（間）通信の一部のタイプに、既知のエントリポイントを提供する。シードノードは、インフラストラクチャ障害／回復および一般的なダイナミズムに起因するリング区分の修復を助ける。各リングは、フェデレーションの基本ブートストラッププロパティを提供するために、少なくとも１つの動作可能なシードノードを有することができる。
【０２１２】
ピアシードノードは、その近傍域の少なくともすべてのアクティブなシードノードからなる近傍域についてのリング構造（例えば、二重リンクリスト）を保持するために、ピアシードノード間で通信することができる。専用シードノード同期プロトコルを使用して、他のすべてのシードノードの存在（アクティブ）状態についての少なくとも全体的な知識を、各シードノードに提供することができる。アクティブなシードノードは、それがめざす近傍域リーフリング、およびリーフリングの他のすべての祖先リングのメンバーノードである。したがって、シードノードは、例えばシードノードのリーフリングからルートリングまで、近傍域リングのスパイン全体を表すことができる。それゆえ、シードノードは、それらの近傍域リングの各々において、可用性の高い既知のエントリノードとして機能することができる。その結果、シードノードに関する存在状態は、フェデレーション内の様々な形態の通信（例えば、近傍域間通信）にとって有用となりうる。したがって、シードノードは、例えば、参加するノードについての既知の「参加ポイント」として機能すること、セキュアなリング権限として機能すること、インフラストラクチャ区分の回復を支援すること、およびその近傍域の各々に対して安定した「エントリノード」として機能することなど、多くの特殊なプロパティを提供することができる。
【０２１３】
存在データを提供するため、シードノードの出現および規則的な離脱を、それらの各近傍域内のランデブーポイントにおける安定したエントリノードとして登録することができる。例えば、登録メッセージは、宛先ＩＤがストリング「Ｐｒｏｘｉｍｉｔｙ：／」のＳＨＡ−１ハッシュである、固定のＵＲＩにルーティングされてもよい。一実施形態において、安定したエントリノードとして機能するシードノードは、このような方法で自身を登録するが、選択されたシード以外のノードも同じ方法で、シードノードについて本明細書において説明されている同一または類似のプロトコルで自身を登録することができる、他の実施形態もある。安定したエントリノード（シードノードなど）が登録する場合、安定したエントリノードは、それがメンバーである各リングを示すことができる。このように、この固定ＵＲＩによって識別されるランデブーポイントにおいて保持される情報は、基本的に、安定したエントリノードおよびそれらの対応するリングメンバーシップのリストである。したがって、任意のノードは、この固定ＵＲＩによって識別されるランデブーポイントを参照して、使用可能な安定したエントリノードおよびそれらの対応するリングメンバーシップのリストを取得することができる。
【０２１４】
一実施形態において、安定したエントリノードは、これらの出現および離脱イベントを直接登録する。別の実施形態において、安定したエントリノードはその隣接した近傍域リング内のランデブーポイントにおいてこれらのイベントを直接登録し、そのランデブーポイントは、登録する／登録解除する安定したエントリノードが属している、残りの各近傍域リング内の他のすべての適切なランデブーポイントの（直接的または間接的な）更新を透過的に容易にする。フェデレーションのアプリケーション状態順序付けおよび伝搬プロパティは、この安定したエントリノードの登録情報を保持して伝搬するために使用されることができる。例えば、信頼できるフラッディングプロトコルは、あるノードの近隣ノードの間で、保存されたアプリケーション状態を複製するために使用されることができる。
【０２１５】
安定したエントリノードの存在データのルートリングに向けたプロモーションにより、フェデレーション内の他のノードは、すべての近傍域において少なくとも１つのエントリノードをルックアップすることができる。Ｅｎｔｒｙ  Ｎｏｄｅ  Ｌｏｏｋｕｐ（エントリノードルックアップ）は、ルックアップを実行するノードのリーフリングと所望の近傍域リングのＬｏｗｅｓｔ  Ｃｏｍｍｏｎ  Ａｎｃｅｓｔｏｒ  Ｒｉｎｇ（最下位共通祖先リング）（「ＬＣＡＲ」）内の上記で判別されたランデブーポイントに向けて、ノードルックアップメッセージをルーティングすることによって容易にされてもよい。例えば、図５を参照すると、リング５４１内のノードは、リング５３３内のノードと通信するよう望むこともある。しかし、リング５４１内のノードは、リング５３３内のいかなるノードについても直接の知識を備えていないこともある。したがって、リング５４１内のノードは、Ｎｏｄｅ  Ｌｏｏｋｕｐ  Ｍｅｓｓａｇｅ（ノードルックアップメッセージ）をリング５２２（リング５４１およびリング５３３のリングのＬＣＡＲ）に送信することができる。（例えば、そのエントリノードによって発信された登録メッセージによりシステム内に存在することになった）エントリノード存在情報を処理する、リング５２２内のランデブーポイントノードは、リング５３３内の少なくとも登録された安定したエントリノードのコンタクト情報と共にＬｏｏｋｕｐ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ（ルックアップ応答メッセージ）を返すことができる。
【０２１６】
一部の実施形態において、安定したエントリノードは、様々な近傍域の存在データを保持するために安定したエントリノードとして特に構成されたシードノードである。他の実施形態において、その他のタイプのノードもまた、様々な近傍域の存在データを保持する安定したエントリノードとして機能することができ、さらにその他の操作を実行するように構成されてもよい。例えば、他の特定のタイプのノードは、可用性が高く、そのため（上記のように登録される）安定したエントリノードとして適切であるように（例えば、管理者によって）構成されてもよい。しかし、他のタイプのノードは、追加のシードノード機能を含まない場合もある（例えば、セキュリティリング権限として信頼することができない）。一部の実施形態において、隣接する近傍域のエントリノード存在状態を保持するランデブーポイントは、１つまたは複数の祖先リング内の安定したエントリノードとして自身を登録することができる。
【０２１７】
近傍域間通信
本発明の実施形態はまた、例えば、リングのツリーの異なる近傍域分岐内のノード間のような、近傍域間通信を容易にすることもできる。近傍域間通信は、近位に区分されたリングインフラストラクチャ内で、１つまたは複数の、および場合によってはすべての、近傍域リングに対するおよび／または近傍域間の通信を行うために使用されることができる。ここで図５Ａを参照すると、図５Ａは、例示の近傍域誘導区分ツリー５００を、区分ツリー５００の一部をさらに詳細に示して説明する。近傍域間通信は、図５Ａにおける様々なノード間で生じてもよい。
【０２１８】
図５Ａに示されるように、リングの区分ツリー５００はさらに、リング５１３の下に様々なサブリングを含む。追加のサブリングは各々、ソートされたリンクリストの区分を表す。図５について上記で説明されているように、区分ツリー５００内で、ルートリング５０１は、基準５７１（第１の管理ドメイン境界基準）に基づいて、サブリング５１１、５１２、５１３、および５１４を含む複数のサブリングに区分される。また、図５について上記で説明されているように、サブリング５１１はさらに、基準５８１（第２の管理ドメイン境界基準）に基づいて、サブリング５２１、５２２、および５２３を含む複数のサブリングに区分されることができる。サブリング５２２の下の他のサブリングはさらに、他の基準に基づいて区分される。
【０２１９】
前述のように、区分ツリー５００内で、各ノードは、単一のＩＤを有し、ルートから始まりリーフまでの対応する区分パス（スパイン）に沿ってリングに参加する。例えば、サブリング５５２に参加する各ノードはまた、サブリング５４３、５３１、５２２、５１１、およびルート５０１に参加する。
【０２２０】
図５Ａにおいて、サブリング５１３はまた、例えば、州の管轄区域などの他の基準に基づいて、サブリング５６１および５６２を含む複数のサブリングにさらに区分されることができる。サブリング５６２は、例えば、市区町村の管轄区域などの他の基準に基づいて、サブリング５７１および５７２を含む複数のサブリングにさらに区分されることができる。このように、図５Ａ内で、近傍域間通信を使用すると、リング５４１からルートリング５０１までスパインをさかのぼり、その後ルートリング５０１からリング５７２まで降りてくるように通信を行う必要はなく、リング５４１のロードからリング５７２のノードへとメッセージを送信することができる。
【０２２１】
近傍域間通信を、例えば、リングのツリーで実施される、ブロードキャスティング、マルチキャスティング、またはエニーキャスティングなど、通信パターンの一部として含むことができる。ブロードキャスティングは、リングのツリー内のすべてのアクティブなノードにメッセージを送信することを含むことができる。マルチキャスティングは、リングのツリー内のノードのグループにメッセージを送信することを含むことができる。エニーキャスティングは、リングのツリー内の少なくとも１つのノードにメッセージを送信することを含むことができる。
【０２２２】
図１９Ａは、近傍域間通信を容易にするリングの近傍域誘導区分ツリー１９００の例を示す。リングの区分ツリー１９００内で、ルートリング１９０１は、選択された基準（例えば、第１の管理ドメイン境界基準）に基づいて、サブリング１、２、３、および４を含む複数のサブリングに区分される。サブリング１はさらに、サブリング１１、２１、３１、および４１に区分される。サブリング１１はさらに、サブリング１１１、２１１、および３１１に区分される。サブリング２１はさらに、サブリング１２１、２２１、３２１、４２１、および５２１に区分される。明確には示されていないが、例えば、サブリング２、３、４、３１、および４１など、その他のサブリングも、さらに区分されることができる。
【０２２３】
リングの近傍域誘導区分ツリー１９００のリング番号付け規則は、第１の桁の後の任意の桁がリングの親リングを示すように構成される。例えば、リング「３１１」の「１１」は、リング１１がリング３１１の親リングであることを示す。同様に、リング「４１」の「１」は、リング１がリング４１の親リングであることを示す。グローバルリング１９０１は、例えば、リング１、２、３、および４のような、一桁で番号付けされている任意のリングの親リングである。図５Ａにおけるリングの近傍域誘導区分ツリー５００と同様に、リングの区分ツリー１９００は、様々な近傍域基準に基づいて区分されることができる。
【０２２４】
説明および添付の特許請求の範囲の中では、注記Ｒ［“＜番号＞”］は、リング番号を示すために使用される。例えば、Ｒ［“１１”］は、リング１１を示す。説明および添付の特許請求の範囲の中では、注記Ｎ［＜番号＞］は、ノード番号を示すために使用される。例えば、Ｎ［１３１１］は、ノード１３１１を示す。
【０２２５】
リングのツリー内の通信を容易にするため、ノードは、リングとそれらのリング内の対応するエントリノードを適合させるエントリテーブルを保持することができる。前述のように、リングの区分ツリー１９００の構成に基づいて、親リングはその子リング各々からのすべてのノードを含む。例えば、リング１１は、Ｒ［“１１１”］、Ｒ［“２１１”］、およびＲ［“３１１”］からのすべてのノードを含む。したがって、リングＲ［“１１１”］、Ｒ［“２１１”］、およびＲ［“３１１”］内の任意のノードにメッセージを到達させるには、メッセージをリング１１に送信することで十分である。ゆえに、一部の実施形態において、ノードのエントリテーブルは、ノードが属しているリングの観点から比較的異なっているリングのエントリまで縮小されることができる。例えば、Ｎ［１１１１］は、Ｒ［“２１”］−Ｎ［１１２１］のエントリを単に保持することができる。複数の子リングまたはＲ［“２１”］のエントリを保持することは冗長になるからである。
【０２２６】
副次リングセットの作成および保持
この説明および添付の特許請求の範囲の中では、指定されたリングの任意のピアリングは、指定されたリングの「副次リング（collateral ring）」として定義される。この説明および添付の特許請求の範囲の中では、指定されたリングの祖先リングの任意のピアリングもまた、指定されたリングの「副次リング」として定義される。指定されたリングの任意の副次リングはまた、指定されたリングに含まれるすべてのノードの副次リングである。
【０２２７】
したがって、例えば、図１９Ａを引き続き参照すると、Ｒ［“２１１”］はＲ［“１１１”］のピアであるから、Ｒ［“２１１”］はＲ［“１１１”］の副次リングである。Ｒ［“２１１”］はまた、例えばＮ［１３１１］のような、Ｒ［“１１１”］に含まれる任意のノードの副次リングでもある。さらに、Ｒ［“２１”］はＲ［“１１”］のピア（つまり、Ｒ［“１１１”］の祖先）であるから、Ｒ［“２１”］はＲ［“１１１”］の副次リングである。Ｒ［“２１”］はまた、例えばＮ［１１１１］のような、Ｒ［“１１１”］に含まれる任意のノードの副次リングでもある。
【０２２８】
この説明および添付の特許請求の範囲の中では、「副次リングセット」（「ＣＲＳ」）は、指定されたリングまたは指定されたリング内のノードの観点から１つまたは複数の副次リングのセットとして定義される。例えば、図１９Ａにおいて、Ｒ［“２２１”］の副次リングセット、および、例えばＮ［８２２１］のようなＲ［“２２１”］の任意のノードは、Ｒ［“１１”］、Ｒ［“１２１”］、Ｒ［“３１”］、Ｒ［“４１”］、Ｒ［“２”］、Ｒ［“３”］、およびＲ［“４”］を含む。
【０２２９】
したがって、近傍域間通信を容易にするため、ノードは、１つまたは複数の副次リングと、１つまたは複数の副次リングへの１つまたは複数の対応するエントリノードとを含む、ＣＲＳエントリテーブルを保持することができる。ＣＲＳエントリテーブルは、１つまたは複数の＜副次リング、１〜Ｎエントリノード＞項目を含むデータ構造であってもよく、Ｎは何らかの整数である。例えば、データ構造は、フォーマット＜ｃｏｌｌａｔｅｒａｌ  ｒｉｎｇ＿０１、ｅｎｔｒｙ  ｎｏｄｅ＿０１、ｅｎｔｒｙ  ｎｏｄｅ＿０２、．．．＞であってもよく、ここで省略符号はｃｏｌｌａｔｅｒａｌ  ｒｉｎｇ＿０１への１つまたは複数の追加エントリノードを表す。
【０２３０】
ＣＲＳエントリテーブルを作成するため、ノードは、ローカル知識、リングのツリー内で状態を伝搬するために使用されるランデブープロトコルメッセージ（例えば、ｐｉｎｇメッセージ、更新メッセージ、および更新応答）、アプリケーションメッセージ、およびリングのツリー内で指定された通信パターン（例えば、ブロードキャスティング、マルチキャスティング、およびエニーキャスティング）を容易にするために使用されるメッセージを利用することができる。
【０２３１】
ノードは、例えば、ルーティングテーブル情報などの、ノードが参加するリングのすべてのレベルからのローカル知識を使用することができる。例えば、引き続き図１９を参照すると、Ｎ［１１２１］は、Ｒ［“１”］におけるＮ［１３１１］の近隣であってもよい。Ｎ［１１２１］の観点からＮ［１３１１］の１つの副次リングは、Ｒ［“２１”］である。したがって、Ｎ［１３１１］は、ペア（Ｒ［“２１”］、Ｎ［１１２１］）（この場合、単一エントリノードを有する項目）を、Ｎ［１３１１］のＣＲＳエントリテーブルに挿入することができる。このタイプのローカル知識を利用することにより、ノードは、エントリをＣＲＳエントリテーブルに挿入することができる。
【０２３２】
ノードは、特に意図されたメッセージに加えて、例えば、近隣およびルーティングパートナー状態情報を伝搬するためなど、本来ならば他の目的のために使用されるメッセージで、それらのＣＲＳエントリテーブル情報を他のノードに伝搬することができる。例えば、ノードは、近隣ノードに送信されるｐｉｎｇメッセージ、およびルーティングパートナーノード間で交換される更新メッセージおよび更新応答にＣＲＳエントリテーブル状態を含むことができる。別のノードからＣＲＳエントリテーブル状態を受信するノードは、受信したＣＲＳエントリテーブル状態を使用して、それらの各自のＣＲＳエントリテーブルを増補および／または保持することができる。
【０２３３】
例えば、ノードが、Ｒｅｎｄｅｚｖｏｕｓ  Ｐｉｎｇ／Ｕｐｄａｔｅメッセージを（例えば、ランデブープロトコル層において）その近隣／パートナーノードと交換する場合、該ノードはまた、そのＣＲＳエントリテーブル（の少なくとも一部、および場合によっては全部）を交換し、その近隣／パートナーから受信したＣＲＳエントリテーブル状態を使用して自分自身のテーブルを更新することができる。例えば、Ｎ［１３１１］が、Ｒ［“３”］内の任意のノードについて（リング１９０１のコンテキスト内で）予備知識を持たないと仮定する。しかし、Ｎ［１３１１］は、（Ｒ［“１”］内に）近隣Ｎ［８２２１］を有し、Ｎ［８２２１］のＣＲＳエントリテーブルは、エントリ（Ｒ［“３”］、Ｎ［８２２３］）を有する。少なくともＮ［１３１１］およびＮ［８２２１］は近隣であるため、Ｎ［１３１１］およびＮ［８２２１］は、随時ｐｉｎｇメッセージを相互に送信することができる。Ｎ［８２２１］は、Ｎ［１３１１］に送信されるｐｉｎｇメッセージにそのＣＲＳエントリテーブル（の少なくとも一部、および場合によっては全部）を含めることができる。したがって、Ｎ［１３１１］は、Ｎ［８２２１］からｐｉｎｇメッセージを受信し、その後ｐｉｎｇメッセージは、Ｎ［８２２１］のＣＲＳエントリテーブルを含めることができる。Ｎ［８２２１］のＣＲＳエントリテーブルから、Ｎ［１３１１］は、項目＜Ｒ［“３”］、Ｎ［８２２３］、．．．＞を識別して、項目＜Ｒ［“３”］、Ｎ［８２２３］、．．．＞を自分自身のＣＲＳエントリテーブルに含めることができる。Ｎ［１３１１］はまた、そのＣＲＳ内の他のリングの他の項目を識別して、それらの他の項目を自分自身のＣＲＳエントリテーブルに含めることができる。
【０２３４】
ＣＲＳエントリテーブル状態は、リング内のルーティングパートナー間で交換される更新メッセージおよび更新応答で同様に交換されることができる。また、任意のルーティングプロトコルメッセージを使用して、ＣＲＳエントリノードに関して（例えば、活性情報を）学習することができる。また、ＣＲＳエントリテーブルの保持を意図された特定のメッセージを使用することもできる。
【０２３５】
ＣＲＳエントリテーブル状態は、リングのツリー内の指定された通信パターン（例えば、ブロードキャスティング、マルチキャスティング、およびエニーキャスティング）を容易にするメッセージで発見されることもできる。例えば、リングのツリー内のすべてのノードにメッセージをブロードキャストするため、ブロードキャスティングアルゴリズムは、ブロードキャスティングに固有の様々なメッセージのタイプを使用してもよい。これらのブロードキャスト固有のメッセージを送信するノードは、ブロードキャスト固有メッセージ内にＣＲＳエントリテーブル状態を含めることができる。同様に、ノードのグループ内のすべてのノードにメッセージをマルチキャストする場合、マルチキャスティングアルゴリズムは、マルチキャスティングに固有の様々なメッセージのタイプを使用してもよい。これらのマルチキャスト固有のメッセージを送信するノードは、マルチキャスト固有メッセージ内にＣＲＳエントリテーブル状態を含めることができる。同様に、少なくとも１つのノードにメッセージをエニーキャストする場合、エニーキャスティングアルゴリズムは、エニーキャスティングに固有の様々なメッセージのタイプを使用してもよい。これらのエニーキャスト固有のメッセージを送信するノードは、エニーキャスト固有メッセージ内にＣＲＳエントリテーブル状態を含めることができる。通信パターン固有メッセージを受信するノードは、適切なエントリ（例えば、＜副次リング、エントリノード＞項目）を識別し、それらのエントリから一部または全部の状態を自分自身のＣＲＳエントリテーブルに含めることができる。
【０２３６】
ＣＲＳ状態はまた、アプリケーション間で交換されるアプリケーションコンポーネントメッセージで発見されてもよい。図１を簡単に参照すると、アプリケーション層１２１、１２２、および／または１２３は、ＣＲＳ状態を含むアプリケーションコンポーネントメッセージを交換することができる。ＣＲＳ状態を含むアプリケーションコンポーネントメッセージを受信すると、アプリケーション層は、例えば、ランデブープロトコル層のような、対応する他の下位層まで下にＣＲＳ状態を転送して、既存のＣＲＳ状態を増補することができる。
【０２３７】
ＣＲＳ状態は、提供および／またはハードワイヤードされたアプリケーションであってもよく、リングのツリー内のノードによって構成可能である。
【０２３８】
図１９Ａに戻って参照すると、ノードが同じリングへの複数のエントリノードを認識していることを見出した場合、ノードは、そのリングに対してエントリノードのうちの２つ以上を保持することを決定することができる。一部の実施形態において、ノードは、任意の保持されたエントリノードの中から無作為にエントリノードを選択する。他の実施形態において、ポリシーは、任意の保持されたエントリノードの中からの指定されたエントリノードの選択を補助するために適用される。ポリシーは、選択されるエントリノードが、毎回同じエントリノードであることを示すことができる。代替として、ポリシーは、選択されるエントリノードが、任意の保持されたエントリノードによって異なることを示すことができる。例えば、一部の実施形態において、エントリノードは、負荷が任意の保持されたエントリノード間で均一に分散されうるように、ラウンドロビン方式で選択される。
【０２３９】
さらに、複数のエントリノードが保持されるとき、ノードは、例えば、第１の選択されたエントリノードが失敗したか、ビジー状態であるか、または他の何らかの理由により使用可能ではない場合に、別のエントリノードへと効率的に移行することができる。
【０２４０】
代替として、ノードは、リングに対して単一のエントリノードを保持してもよい。
【０２４１】
随時、ノードは、リングの追加のエントリノードを検出することができる。一部の実施形態において、ノードが単一のエントリノードを保持するか、または追加のエントリノードを格納するメモリが不足している場合、新しく受信されたエントリノードが既存のエントリノードに置き換わるべきかどうかを判別することができる。一部の実施形態において、ノードは、関数を使用して、ｄｉｓｔａｎｃｅ  ｏｆ  ｔｈｅ  ｅｎｔｒｙ  ｎｏｄｅ（エントリノードの距離）、ｆｒｅｓｈｎｅｓｓ  ｏｆ  ｔｈｅ  ｅｎｔｒｙ  ｎｏｄｅ  ｉｎｆｏｒｍａｔｉｏｎ（エントリ情報の鮮度）、およびｗｅｉｇｈｔ  ｏｆ  ｔｈｅ  ｅｎｔｒｙ  ｎｏｄｅ（エントリノードの重み）（例えば、構成プリファレンス）というパラメータで候補エントリノードごとにランクを計算することができる。より高いランクを持つエントリノードが保持される。
【０２４２】
ＣＲＳエントリテーブルは、完全である場合も、完全でない場合もある。完全ＣＲＳエントリテーブルは、ノードのＣＲＳ内のリングごとに少なくとも１つのエントリノードを含む。例えば、ノード１３１１の完全ＣＲＳエントリテーブルは、リング１１１、２１１、２１、３１、４１、２、３、および４の各々への少なくとも１つのエントリノードを含む。
【０２４３】
上記の機構を使用することで、近傍域リング階層内に１つまたは複数のリングおよび／またはノードの観点から、完全ＣＲＳエントリテーブルを構築することが可能である。一部の実施形態において、ルーティングテーブル状態情報が単独で、リングのツリー内の各ノードの完全ＣＲＳエントリテーブルを形成することがあってもよい。例えば、リングのツリー１９００において（例えば、ｐｉｎｇメッセージ、更新要求メッセージ、および更新応答メッセージで）伝搬されたルーティングテーブル関連情報は、示されているリングの各々のノードごとに完全ＣＲＳエントリテーブルを形成してもよい。
【０２４４】
しかし、他の分散ネットワーク環境において、リングの動的な特性および／またはエントリテーブル関連状態の交換における遅延が、完全エントリテーブルの構築を妨げる可能性もある。言い換えれば、これらの他の環境において、ノードまたはリングが常には認識していないリングまたはノードの副次リングセットからの、１つまたは複数のリングがある場合もある。例えば、再度図１９Ａを参照すると、Ｎ［８００４］が参加したばかりであり、それ以前はＲ［“４”］に属していたノードがないと仮定すると、メッセージトラフィック（例えば、Ｐｉｎｄ／Ｕｐｄａｔｅメッセージ）または他のアクティビティによってリングインフラストラクチャ全体にわたるその情報の配信が引き起こされるまで、ほとんどのノードはＲ［“４”］のエントリノードを有することはない。したがって、（例えば、ノード障害、通信障害、通信遅延、ノード追加など）ネットワークのダイナミズムがあるため、ノードにおいて完全ＣＲＳエントリテーブルを保持することは、常に可能であるとは限らない。そのため、多くの環境において、ノードは、ノードのＣＲＳ内の全リングよりは少ないリングのエントリノードを含む、部分ＣＲＳエントリテーブルを保持する。
【０２４５】
ＣＲＳエントリテーブルを使用する近傍域間通信
ノードは、ＣＲＳエントリテーブルの情報を使用して、（例えば、送信側リングおよび宛先リングのＬＣＡＲにメッセージをルーティングする必要なく）近傍域間通信を送信することができる。引き続き図１９Ａを参照すると、ＣＲＳエントリテーブルの適切なエントリに基づいて、Ｎ［１３１１］（例えば、パブリッシャノード）は、Ｒ［“１１１”］、Ｒ［“２１１”］、Ｒ［“２１”］、Ｒ［“３１”］、Ｒ［“４１”］、Ｒ［“２”］、Ｒ［“３”］、およびＲ［“４”］のうちの１つまたは複数に、近傍域間通信を直接送信することができる。例えば、ある時点において、Ｎ［１３１１］のＣＲＳエントリテーブルは、以下のエントリを含むことができる。
Ｒ［“２”］：Ｎ［１１１２］
Ｒ［“３”］：Ｎ［８２２３］
Ｒ［“２１”］：Ｎ［１１２１］
Ｒ［“３１”］：Ｎ［１１３１］
Ｒ［“１１１”］：Ｎ［１１１１］
Ｒ［“２１１”］：Ｎ［１２１１］
【０２４６】
これらのエンティティは、Ｒ［“１１１”］、Ｒ［“２１１”］、Ｒ［“２１”］、Ｒ［“３１”］、Ｒ［“２”］、およびＲ［“３”］に対する直接通信に使用されることができる。例えば、Ｎ［１３１１］はＲ［“１１１”］に通信５２を送信することができ、Ｎ［１３１１］はＲ［“２１１”］に通信５１を送信することができ、Ｎ［１３１１］はＲ［“２１”］に通信５３を送信することができ（Ｎ［１２１１］は、Ｒ［“２１”］およびＲ［“２２１”］の両方のメンバーである）、Ｎ［１３１１］はＲ［“３１”］に通信５６を送信することができ、Ｎ［１３１１］はＲ［“２”］に通信５７を送信することができ、Ｎ［１３１１］はＲ［“３”］に通信５８を送信することができる。時間の経過に伴って、Ｎ［“１３１１”］は、Ｒ［“４１”］およびＲ［“４”］のエントリ（例えば、＜副次リング、エントリノード＞項目）を識別することができる。これらのエントリは、更新されたローカル知識から、ランデブープロトコルメッセージ（例えば、ｐｉｎｇメッセージ、更新メッセージ、および更新応答）に含まれているＣＲＳエントリテーブルから、通信パターン固有メッセージに含まれているＣＲＳエントリテーブル状態を通じて、および、例えばアプリケーションコンポーネントのような他の機構を通じて識別されることができる。
【０２４７】
下方ルーティングアルゴリズム
ランデブーフェデレーション（ＣＲＳエントリテーブルの有無にかかわらず）において、メッセージが発信されたリーフリングの（またはリーフリング内の）祖先ではない指定された近傍域リング内の所定のノードＩＤに最も近接するノードに、メッセージがルーティングされるべき場合もある（以下、下方ルーティングと称する）。その１つの例は、発信元リング内のノードが副次リングのエントリノードを認識していない場合に、発信元リング内のノードから副次リングへの近傍域間通信を容易にすることである。図１９Ｂは、リングの近傍域誘導区分ツリー１９００の例を示す、もう１つの図である。例えば、ここで図１９Ｂを参照すると、Ｎ［１３１１］が、Ｒ［“４”］またはＲ［“４１”］のノードに向けられた通信を送信するものであってもよい。
【０２４８】
ランデブーフェデレーションを前提として、以下の関数を定義することができる。
ＲｏｕｔｅＤｏｗｎ（Ｍ，Ｐ，ＩＤ）：フェデレーションは、近傍域Ｐ内のＩＤに最も近接するノードにメッセージＭを配信することになる。近傍域Ｐは、発信元ノードのリーフリングの（またはリーフリング内の）祖先ではないフェデレーションの任意の近傍域リング（リーフまたは中間）であってもよい。
【０２４９】
一部の実施形態において、メッセージＭは、発信元ノードのリーフリングおよび目標近傍域リングＰのＬＣＡＲ内のノードより上にルーティングされることは決してない。例えば、Ｎ［１３１１］からＲ［“４１”］への下方ルーティングを実施するため、Ｒ［“１”］（Ｒ［“３１１”］とＲ［“４１”］のＬＣＡＲ）より上にメッセージをルーティングする必要はないことがある。しかし、その他の実施形態において、適切な場合、メッセージはＬＣＡＲよりも上にルーティングされてもよい。
【０２５０】
ＲｏｕｔｅＤｏｗｎ（Ｍ，Ｐ，ＩＤ）関数は、目標近傍域リングＰのメンバーであることが知られているエントリノードを識別することを含むことができる。送信側ノードは、多種多様な機構を使用して、目標近傍域リング内のエントリノードを識別することができる。送信側ノードは、発信元ノード（第１の送信側ノード）であってもよい。送信側ノードはまた、メッセージを発信元ノードまたは別の中間ノードから受信して、その後そのメッセージを転送する、中間ノードであってもよい。
【０２５１】
送信側ノードは、例えば、構成またはローカルにキャッシュされた情報（例えば、ＣＲＳエントリテーブルに加えて）などのローカル知識を使用して、目標近傍域リングのエントリノードを識別することができる。例えば、Ｎ［１３１１］は、リングのツリー１９００内のリングに関する構成またはローカルにキャッシュされた情報を含む、キャッシュおよび構成１９０２にアクセスすることができる。一部の環境において、フェデレーションに関するローカル知識は、フェデレーションの外部の通信機構を通じて（つまり、アウトオブバンドで）取得される。ローカル知識は、正確な目標近傍域リングＰ内の任意のノードを識別するために使用されることができる。正確な目標近傍域リング内の任意のノードが見つかると、メッセージＭを、それらのノードのうちの１つに転送することができる。例えば、Ｎ［１３１１］は、キャッシュおよび構成１９０２を使用して、Ｎ［８００４］を識別し、メッセージ１９０３をＲ［“４”］に転送することができる。
【０２５２】
送信側ノードは、ＣＲＳエントリテーブルを使用して、目標近傍域リングＰ内の任意のエントリノードを見つけることができる。目標近傍域リング内の任意のエントリノードが見つかると、メッセージＭを、目標近傍域リングＰ内のエントリノードに転送することができる。例えば、Ｎ［７５２１］がメッセージ１９０３の宛先である場合、Ｎ［１３１１］はＮ［６５２１］をＲ［“５２１”］のエントリノードとして識別することができる。したがって、メッセージ１９０３を、Ｎ［６５２１］（またはＲ［“５２１”］）にルーティングすることができる。次いで、Ｒ［“５２１”］内で、Ｎ［６５２１］は、リング内通信を使用してメッセージ１９０３をＮ［７５２１］にルーティングしようと試みることができる。このように、送信側ノードは、目標近傍域リングの任意のエントリノードを識別することができる場合、メッセージを正確な目標近傍域リングに転送する。例えば、Ｎ［“６５２１”］がＲ［“２１”］のエントリノードを識別することができる場合、Ｎ［“６５２１”］はメッセージ１９０３をＲ［“２１”］に転送する（破線）。
【０２５３】
一方、送信側ノードが（例えば、ローカル知識またはＣＲＳエントリテーブルから）宛先目標近傍域の任意のエントリノードを識別することができない場合、送信側ノードは、そのＣＲＳエントリテーブルを確認して、目標近傍域リングの任意の祖先リングのエントリノードを見つけることができる。例えば、Ｎ［１３１１］がＲ［“１２１”］内のノードにメッセージを送信しようと試みることもできるが、Ｎ［１３１１］はＲ［“１２１”］のエントリノードを識別することはできない場合もある。したがって、Ｎ［１３１１］は、ＣＲＳエントリテーブル１９０４を参照して、Ｒ［“６５２１”］（Ｒ［“２１”］へのエントリノード）を見つけことができる。Ｎ［１３１１］はメッセージをＮ［６５２１］に転送することができ、今度はＮ［６５２１］がメッセージの送信側ノードとなる。
【０２５４】
論理的には、Ｎ［６５２１］もまたＲ［２１］のノードであるので、メッセージ１９０３はここで、Ｒ［“２１”］「にある」ものと見なすことができる。次いで、Ｎ［６５２１］は、Ｒ［２２１］（目標近傍域）へのエントリノードを識別しようと試みることができる。例えば、Ｎ［６５２１］は、ローカル知識、ＣＲＳエントリテーブルを参照することができ、および／またはＲｏｕｔｅＤｏｗｎアルゴリズムを（再帰的に）適用することができる。Ｎ［６５２１］は、Ｎ［３２２１］をＲ［２２１］へのエントリノードとして識別する場合もある。したがって、Ｎ［６５２１］は、メッセージ１９０３をＮ［３２２１］に送信することができる。次いで、Ｎ［３３２１］は、リング内通信を使用してメッセージ１９０３をＲ［２２１］内の適切なノードにルーティングすることができる。
【０２５５】
適切な場合（例えば、図１９Ｂに示される深度よりも大きい深度を持つツリーにおいて）、メッセージは、目標近傍域リングへのエントリノードが識別されるまで、あるいはそれ以上の祖先リングが使用できなくなるまで、目標近傍域リングにさらに近い祖先に渡されることができる。
【０２５６】
送信側ノードはまた、少なくとも要求目標近傍域を含むＥｎｔｒｙ  Ｎｏｄｅ  Ｌｏｏｋｕｐ  Ｒｅｑｕｅｓｔ（エントリノードルックアップ要求）を、例えばフェデレーションのブートストラッピングに使用されるようなエントリノードディレクトリ機構にルーティングすることもできる。Ｅｎｔｒｙ  Ｎｏｄｅ  Ｌｏｏｋｕｐ  Ｒｅｑｕｅｓｔ（エントリノードルックアップ要求）のルーティングは、送信側ノードと目標リングのＬＣＡＲに制限されてもよい。例えば、Ｎ［１３１１］は、Ｌｏｏｋ  Ｕｐ  Ｒｅｑｕｅｓｔ（ルックアップ要求）１９０６をランデブーポイント７６５１にルーティングして、Ｒ［“３１”］のエントリノードを要求することができる。エントリノードディレクトリ機構は、可能なエントリノードのリストを返すことができる。例えば、ランデブーポイント７６５１は、ルックアップ応答１９０７で、（Ｎ［８４３１］を含む）可能なエントリノードのリスト、および目標近傍域のそのランデブーポイントに登録されている少なくともシードノードを返すことができる。
【０２５７】
送信側ノードは、（ランデブーポイントから送信された）Ｌｏｏｋｕｐ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ（ルックアップ応答メッセージ）で識別された任意の新しく発見されたノードを検討し、メッセージＭをそれらのエントリノードのうちの１つに転送する。新しく発見されたノードの検討により、ＣＲＳエントリテーブル、および他のローカルにキャッシュされているノード存在知識は増補されるか、または保持されるようになる。Ｌｏｏｋｕｐ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ（ルックアップ応答メッセージ）はまた、他のノード存在情報も含むことができる。例えば、送信側ノードのＣＲＳエントリテーブルに含む可能性があるので、送信側ノードにとって重要であると認識される特定のエントリノードなどである。
【０２５８】
したがって、１つまたは複数の使用可能な機構が、目標近傍域リング内の少なくとも１つのエントリノードをもたらす場合、メッセージＭは、目標リング内のそれらのエントリノードのうちの少なくとも１つに（元の送信側ノード、目標近傍域の先祖リング内のエントリノード、またはルックアップされたエントリノードのいずれかによって）送信される。メッセージＭは、近傍目標リング内のエントリノードがメッセージＭをＩＤにルーティングする指示（indication）を含むことができる。一方、使用可能な機構がいずれも目標近傍域リングのエントリノードをもたらさない場合、ＲｏｕｔｅＤｏｗｎ要求は、失敗して元の送信側ノードに向けて戻されてもよい。
【０２５９】
一部の実施形態において、発信側ノードは、終端間ＲｏｕｔｅＤｏｗｎ  Ｍｅｓｓａｇｅ  Ｈｅａｄｅｒをメッセージに添付するが、ＲｏｕｔｅＤｏｗｎ  Ｍｅｓｓａｇｅ  Ｈｅａｄｅｒは目標近傍域ＵＲＩを指定する。
【０２６０】
上記の機構のいずれかが、複数の「ネクストホップ」ノードを識別する場合、単一のノードが選択されてもよい。単一のノードを選択する（例えば、均衡を破る）場合、目標近傍域Ｐにより近接するノードが選択され、次いでより高い重みを持つノードが選択され、その後Ｍの宛先ＩＤにより接近するノードが選択されてもよい。機構が選択をもたらさない場合、ノードは無作為に選択されてもよい。複数の候補があるときに、メッセージＭを転送する試行の失敗が発生した場合、転送は、障害のない候補ノードがある限り再度試行することができる。
【０２６１】
逆Ｓｔａｔｕｓ／Ｆａｕｌｔメッセージパスを、アプリケーションメッセージが発信元から中間ノード経由で最終宛先ノードへ渡されるときに、確立することができる。メッセージが宛先に配信されるか、または障害が検出された場合、対応する障害／状態メッセージは、このパスに沿って発信元に向けて送信されることができる。
【０２６２】
図１９Ｃは、リングの近傍域誘導区分ツリー１９００の例の一部を示す区分図である。図１９Ｄは、リングの近傍域誘導区分ツリー１９００の例からのリング１１を示す拡大図である。図２０は、リングのツリー内のノードの副次リングセットを保持する方法２０００を示す例示の流れ図である。方法２０００は、図１９Ｃおよび図１９Ｄにおけるリング、ノード、メッセージ、およびデータに関して説明される。
【０２６３】
方法２０００は、ノードが、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする動作を含む（動作２００１）。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの少なくとも１つの対応するエントリノードを示すように構成される。例えば、Ｎ［１３１１］はＣＲＳエントリテーブル１９０４にアクセスすることができるが、これは副次リングセットエントリを＜副次リング、１〜Ｎエントリノード＞のフォーマットで格納するように構成され、Ｎ［１３１１］の場合、Ｎは何らかの整数である。このように、ＣＲＳエントリテーブル１９０４は、ゼロまたはそれ以上の＜副次リング、エントリノード＞項目を含むことができ、含まれている各項目はＮ［１３１１］の副次リング、およびその副次リングへの１つまたは複数の対応するエントリノードを示す。例えば、図１９Ｃに示されるように、ＣＲＳエントリテーブル１９０４は、ＣＲＳエントリ＜Ｒ［“５１”］、Ｎ［８６５１］、．．．＞を含み、Ｎ［８６５１］がＲ［５１］への１からＮのエントリノードのうちの１つ（Ｎ［１３１１］とＲ［“３１１”］の副次リング）であることを示す。
【０２６４】
方法２０００は、リングのツリーの構成に関連する情報を保持する使用可能なリソースから、副次リングセットエントリテーブル情報を発見する動作を含む（動作２００２）。例えば、Ｎ［１３１１］は、リングのツリー１９００の構成に関連する情報を保持するソースから副次リングセットエントリテーブル情報を発見することができる。前述のように、ＣＲＳエントリテーブル情報の多種多様なソースがノードに使用可能でありうる。例えば、ノードは、例えばローカル構成およびキャッシュ情報などのローカル知識にアクセスすることができ、リングのツリーで状態を伝搬するために使用される、例えばｐｉｎｇメッセージ、更新メッセージ、および更新応答などのランデブープロトコルメッセージに含まれるＣＲＳ関連状態にアクセスすることができ、アプリケーションメッセージに含まれるＣＲＳ関連状態にアクセスすることができ、例えばブロードキャスティング、マルチキャスティング、およびエニーキャスティングなどのリングのツリーで指定された通信パターンを容易にするために使用されるメッセージからＣＲＳ関連状態にアクセスすることができる。
【０２６５】
したがって、図１９Ｃにおいて、Ｎ［１３１１］はローカル構成１９２１にアクセスすることもできる。Ｎ［１３１１］は、ローカル構成１９２１から、Ｎ［１１１１］がＲ［“１１１”］へのエントリノードのうちの少なくとも１つ（Ｎ［１３１１］とＲ［“３１１”］の副次リング）であることを示す、ＣＲＳエントリ＜Ｒ［“１１１”］、Ｎ［１１１１］、．．．＞を発見することができる。Ｎ［１３１１］はまた、アプリケーションメッセージ１９７１を受信することができる。アプリケーションメッセージ１９７１から、Ｎ［１３１１］は、ＣＲＳ情報１９７２を発見することができる。ＣＲＳ情報１９７２は、Ｎ［１３１１］のＣＲＳ内のリングのＣＲＳ状態を含んでいても、含んでいなくてもよい。Ｎ［１３１１］はまた、通信パターン固有メッセージ１９７３を受信することができる。通信パターン固有メッセージ１９７３から、Ｎ［１３１１］は、ＣＲＳ状態１９７４を発見することができる。ＣＲＳ状態１９７４は、Ｎ［１３１１］のＣＲＳ内のリングのＣＲＳ状態を含んでいても、含んでいなくてもよい。
【０２６６】
ここで図１９Ｄを参照すると、Ｎ［１３１１］は、ランデブープロトコルメッセージでＣＲＳ状態を発見し、交換することができる。Ｎ［１１１１］はＲ［“１１１”］のメンバーであり、Ｎ［１２１１］はＲ［“２１１”］のメンバーであり、Ｎ［１３１１］はＲ［“３１１”］のメンバーであるので、ノードＮ［１１１１］、Ｎ［１２１１］、Ｎ［１３１１］の各々はＲ［“１１”］のメンバーでもある。前述のように、共通リングのメンバーであるノードは、ｐｉｎｇメッセージ、更新メッセージ、および更新応答を交換して、ルーティングテーブル情報を保持することができる。したがって、Ｒ［“１１”］のノードは、ｐｉｎｇメッセージ、更新メッセージ、および更新応答を交換して、Ｒ［“１１”］のルーティングテーブル情報を保持することができる。ＣＲＳ状態は、交換されるｐｉｎｇメッセージ、更新メッセージ、および更新応答、さらにノード間のその他のランデブープロトコルおよびアプリケーションメッセージトラフィックに含まれてもよい。
【０２６７】
例えば、Ｎ［Ａ１１］（Ｒ［“１１”］内のＮ［１３１１］の近隣）は、ＣＲＳ状態１９３２を含むｐｉｎｇメッセージ１９３１を、Ｎ［１３１１］に送信することができる。Ｎ［１３１１］は、ＣＲＳ状態１９３２から、Ｎ［１１３１］がＲ［“３１”］へのエントリノード（Ｎ［１３１１］とＲ［“３１１”］の副次リング）であることを示す、ＣＲＳエントリ＜Ｒ［“３１”］、Ｎ［１１３１］＞を発見することができる。ＣＲＳエントリ１９３２は、Ｎ［Ａ１１］のＣＲＳエントリテーブル内のＣＲＳエントリの完全または部分リストであってもよい。Ｎ［１３１１］はまた、ＣＲＳ状態１９３２を含むｐｉｎｇメッセージをその近隣に送信することができる。例えば、Ｎ［１３１１］は、ＣＲＳ状態１９３４を含むｐｉｎｇメッセージ１９４５を、Ｎ［Ｅ１１］（Ｒ［“１１”］内のＮ［１３１１］の近隣）に送信することができる。ＣＲＳエントリ１９３４は、ＣＲＳエントリテーブル１９０４からのＣＲＳエントリの完全または部分リストを含むことができる。
【０２６８】
Ｎ［１３１１］はまた、ＣＲＳ関連情報を含む更新メッセージおよび更新応答を送信および受信することができる。例えば、Ｎ［１３１１］は、ＣＲＳエントリ１９３４を含む更新メッセージ１９３３を、Ｎ［Ｄ１１］（Ｒ［“１１”］内のＮ［１３１１］のルーティングパートナー）に送信することができる。Ｎ［Ｄ１１］は、ＣＲＳエントリ１９３８を含む更新応答１９３７をＮ［１３３１］に送信することによって、応答することができる。ＣＲＳエントリ１９３８は、Ｎ［Ｄ１１］のＣＲＳエントリテーブル内のＣＲＳエントリの完全または部分リストであってもよい。同様に、Ｎ［１３１１］は、ＣＲＳエントリ１９４２を含む更新メッセージ１９４１をＮ［Ｃ１１］（Ｒ［“１１”］内のＮ［１３１１］のルーティングパートナー）から受信することができる。ＣＲＳエントリ１９４２は、Ｎ［Ｃ１１］のＣＲＳエントリテーブル内のＣＲＳエントリの完全または部分リストであってもよい。Ｎ［１３１１］は、ＣＲＳエントリ１９３４を含む更新応答１９４３をＮ［“Ｃ１１”］に送信することによって、応答することができる。
【０２６９】
ノードはまた、例えばエントリノードが連絡をとることができないことを示す表示など、ＣＲＳエントリがもはや有効ではないことを（直接的または間接的に）示す、使用可能なリソースから、副次リングセットエントリテーブル関連情報を受信することもできる。ＣＲＳ関連状態を送信するために使用された任意のリソースはまた、ＣＲＳエントリがもはや有効ではないことを意味すると解釈されうることを示す表示を送信するために使用されることもできる。したがって、随時、ノードは、１つまたは複数のＣＲＳエントリがそのＣＲＳエントリテーブルに追加されるようにするＣＲＳ関連状態、およびもはや適切ではない１つまたは複数のＣＲＳエントリの削除を行わせる指示を受信する場合もある。
【０２７０】
方法２０００は、発見された副次リングセットエントリテーブル情報に基づいて、副次リングセットエントリテーブルを適切な副次リングセットエントリ状態で更新する動作を含む（動作２００３）。適切な副次リングセットエントリ状態は各々、ノードの副次リング、およびノードの副次リングへの少なくとも１つの対応するエントリノードを含む。例えば、Ｎ［１３１１］は、図１９Ｃおよび図１９Ｄにおいて受信された任意のＣＲＳエントリを、ＣＲＳエントリテーブル１９０４に含めることができる。Ｎ［１３１１］はまた、もはや適切ではない可能性があると（例えば、構成、ランデブープロトコルメッセージ、アプリケーションメッセージ、または通信パターン固有メッセージで）示される任意のＣＲＳエントリを、ＣＲＳエントリテーブル１９０４から削除することもできる。したがって、ノードのＣＲＳエントリテーブルは、ランデブーフェデレーションの変化する構造を適切に反映するように更新されることができる。
【０２７１】
図１９Ｅは、リングの近傍域誘導区分ツリー１９００の例を示すもう１つの図である。図１９Ｅに示されるのは、図１９Ｃおよび図１９Ｄにおいて交換されたＣＲＳ状態に基づいて取り込まれた可能性のある、ＣＲＳエントリテーブル１９０４である。図２１は、リングのツリー内の近傍域間通信を送信する方法２１００を示す例示の流れ図である。方法２１００は、図１９Ｆにおけるノード、リング、メッセージ、およびデータに関して説明される。
【０２７２】
方法２１００は、ノードが、メッセージをノードの副次リングに送信すべきことを判別する動作を含む（動作２１０１）。例えば、Ｎ［１３１１］は、メッセージ１９７６をＲ［“２”］に送信すべきであるという指示を受信することができる。メッセージが副次リングに送信されるべきであるという指示は、ルーティング論理の機能、Ｎ［１３１１］におけるアプリケーション、マルチキャスティング機構、ブロードキャスティング機構、エニーキャスティング機構などとして示される別のノードから受信することができる。
【０２７３】
方法２１００は、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスするノードの動作を含む（動作２１０２）。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの少なくとも１つの対応するエントリノードを示すように構成される。例えば、Ｎ［１３１１］は、ＣＲＳエントリテーブル１９０４にアクセスすることができる。ＣＲＳエントリテーブル１９０４内の各ＣＲＳエントリは、Ｎ［１３１１］の副次リング、およびＮ［１３１１］の副次リングへの少なくとも１つの対応するエントリノードを示すことができる。例えば、エントリ＜Ｒ［“１１１”］、Ｎ［１１１１］、．．．＞は、Ｒ［“１１１”］がＮ［１３１１］の副次リングであり、Ｎ［１１１１］がＲ［“１１１”］への少なくとも１つのエントリノードのうちの１つであることを示す。
【０２７４】
方法２１００は、ノードの副次リングセットエントリテーブルから副次リングの少なくとも１つの副次リングセットエントリを識別する動作を含む（動作２１０３）。少なくとも１つの副次リングセットエントリの各々は、副次リングの少なくとも１つのエントリノードを示す。例えば、Ｎ［１３１１］は、ＣＲＳエントリテーブル１０９４から、Ｒ［“２”］のエントリ＜Ｒ［“２”］、Ｎ［１１１２］、．．．＞を識別することができる。エントリ＜Ｒ［“２”］、Ｎ［１１１２］、．．．＞は、Ｎ［１１１２］（および、場合によっては他のノード）がＲ［“２”］のエントリノードであることを示す。
【０２７５】
（例えば、２つ以上のエントリノードがある場合など）識別された副次リングセットエントリに含まれている対応するエントリノードの数に基づいて、方法２１００はまた、副次リングの複数のエントリノードから、エントリノードの適切なサブセット、および場合によっては単一の適切なエントリノードを決定する（resolve）動作を含むこともできる。例えば、適切なエントリノードのサブセットを、発信元と目標近傍域Ｐとの間の近接性に基づいて、ノード重みに基づいて決定することができるか、宛先ＩＤへの近接性に基づいて選択することができるか、または無作為に選択することができる。
【０２７６】
方法２１００は、メッセージを少なくとも１つの示されたエントリノードに送信する動作を含む（動作２１０４）。例えば、Ｎ［１３１１］は、メッセージ１９７６をＮ［１１１２］に送信することができる。メッセージを少なくとも１つのノードに送信することは、複数のノードのすべてのエントリノードに、エントリノードの決定された適切なサブセットの各エントリノードに、または単一の適切なエントリノードに、メッセージを送信することを含むことができる。一部の実施形態において、１つのエントリノードへのメッセージの送信が失敗した場合、１つまたは複数の他のエントリノードを試すことができる。送信側ノードが、失敗の結果として新しいノードを識別することも可能である。
【０２７７】
図２２は、リングのツリー内の近傍域間通信を送信する方法２２００を示す例示の流れ図である。方法２２００は、図１９Ｆおよび図１９Ｇにおけるノード、リング、メッセージ、およびデータに関して説明される。
【０２７８】
方法２２００は、発信元ノードが、メッセージを、リングのツリー内の目標近傍域リングの所定のノードＩＤに最も近接する宛先ノードにルーティングするよう意図することを判別する動作を含む（動作２２０１）。目標近傍域リングは、発信元ノードの副次リング、または発信元ノードの副次リングのサブリングであってもよい。例えば、Ｎ［１３１１］は、ＩＤ３０に向けてメッセージ１９９８をＲ［“１２２１”］（目標近傍域リング）にルーティングすべきであるという指示を受信することができる。メッセージが副次リングまたは副次リングのサブリングに送信されるべきであるという指示を、別のノード、Ｎ［１３１１］に関連するアプリケーション、マルチキャスティング機構、ブロードキャスティング機構、エニーキャスティング機構などから受信することができる。
【０２７９】
方法２２００は、目標近傍域リングおよび目標近傍域リングの先祖リングのうちの少なくとも１つのメンバーノードであることが知られている、１つまたは複数のエントリノードを識別する動作を含む（動作２２０２）。例えば、Ｎ［１３１１］は、ノードＩＤ５６を有するＮ［４１２２１］を、Ｒ［“１２２１”］へのエントリノードとして識別することができる。多種多様な機構を使用して、Ｎ［４１２２１］を識別することができる。Ｎ［１３１１］は、ローカル知識を参照して、近傍域目標リングへのエントリノードを識別しようと試みることができる。例えば、Ｎ［１３１１］は、キャッシュおよび構成１９０２を参照して、Ｒ［“１２２１”］へのエントリノードを識別しようと試みることができる。
【０２８０】
Ｎ［１３１１］はまた、ＣＲＳエントリテーブルを参照して、（例えば、目標近傍域リングへのエントリノードが識別されないとき）近傍域目標リングの先祖リングへのエントリノードを識別することができる。サブリングＲ［“３２１”］が、Ｒ［“２１”］へのエントリノードとしてノードＮ［“４３２１”］を導く場合もある。同様に、Ｒ［“２２２１”］が、Ｒ［“２２１”］へのエントリノードとしてノードＮ［“１２２２１”］を導く場合もある。Ｒ［“１２２１”］へのエントリノードが識別されない場合、Ｎ［１３１１］は、例えばＮ［１２２２１］など、Ｒ［“２２１”］へのエントリノードを識別しようと試みることができる。Ｎ［１３３１］はまた、例えばＮ［４３２１］など、Ｒ［“２１”］へのエントリノードを識別しようと試みることもできる。
【０２８１】
目標近傍域へのエントリノードが識別されない場合、ノードは、指定された目標近傍域の観点からさらなる先祖のエントリノードを識別しようと試みる前に、より近接する先祖リング内のエントリノードを識別しようと試みる場合もある。例えば、Ｒ［“１２２１”］へのエントリノードが識別されない場合、Ｎ［１３１１］は最初に、Ｒ［“２２１”］へのエントリノードを識別しようと試みてもよい。Ｒ［“２２１”］へのエントリノードが識別されない場合、Ｎ［１３１１］は、Ｒ［“２１”］へのエントリノードを識別しようと試みてもよい。
【０２８２】
Ｎ［１３１１］はまた、例えばシードノードなど、ブートストラップ機構を使用することができる。例えば、Ｎ［１３１１］は、エントリノードルックアップ要求を、例えばランデブーポイントＮ［７６５１］のような、既知のランデブーポイントにルーティングして、既知の（登録されている）エントリノード（例えば、シードノード）を要求することができる。ルックアップ要求に応答して、ランデブーポイントは、任意の既知のエントリノードを含むルックアップ応答メッセージを返す（送信する）ことができる。例えば、ルックアップ応答１９９７は、ランデブーポイントＮ［７６５１］からＮ［１３１１］に返されてもよい。ルックアップ応答１９９７は、ランデブーポイントＮ［７６５１］に登録されている任意のエントリノードの位置を含むことができる。
【０２８３】
これらの機構のうちの１つまたは複数は、Ｎ［４２２１］をＲ［“２２１”］へのエントリノードとして識別することができる。
【０２８４】
一部の実施形態において、一部のエントリノード識別機構は、他のエントリノード識別機構の前に使用される。例えば、送信側ノードは、目標リングの先祖リングへのエントリノードを識別しようと試みる前、またはエントリノードルックアップ要求をルーティングする前に、ローカル知識を参照することができる。これらの同じ実施形態において、送信側ノードはまた、エントリノードルックアップ要求をルーティングする前に、目標リングの先祖リングへのエントリノードを識別しようと試みることもできる。しかし、他の実施形態において、エントリノード識別機構は、異なる順序で使用されるか、または省略されてもよい。
【０２８５】
方法２２００は、メッセージを、識別されたエントリノードに送信する動作を含む（動作２２０３）。メッセージは、エントリノードが、目標近傍域リングの示された宛先ノードに最も近接するノードＩＤを有するノードに、該メッセージを送るべきであることを示す。例えば、実線で示されているように、Ｎ［１３１１］は、メッセージ１９９８を、メッセージがノードＩＤ３０に送られるべきであるという指示と共に、Ｎ［４１２２１］（Ｒ［“１２２１”］へのエントリノードであり、ノードＩＤ５６を有する）に送信することができる。Ｎ［４１２２１］は、そのルーティングテーブルおよび／または近隣にアクセスして、認識しているノードＩＤ３０に最も近接するノードＩＤがノードＩＤ２５を有するＮ［６１２２１］であることを判別することができる。同様に、Ｎ［６１２２１］は、そのルーティングテーブルおよび／または近隣にアクセスして、認識しているノードＩＤ３０に最も近接するノードＩＤがノードＩＤ２８を有するＮ［７１２２１］であることを判別することができる。Ｎ［７１２２１］は、そのルーティングテーブルおよび／または近隣を参照して、そのノードＩＤ、すなわちノードＩＤ２８が、ノードＩＤ３０に最も近接する既知のノードＩＤであることを判別して、メッセージを配信することができる。
【０２８６】
以前説明されているルーティングアルゴリズムもまた、Ｒ［“２２１”］内でメッセージ１９９８をルーティングするために使用されることができる。
【０２８７】
メッセージが、先祖リングまたは目標近傍域リングのメンバーである、識別されたエントリノードに送信される場合、方法２２００は、識別されたエントリノードにおいて再帰的に適用されることができる。つまり、先祖リングへの識別されたエントリノードは、目標近傍域リングへのエントリノードを識別しようと試みることができる。例えば、点線で示されているように、方法２２００の適用により、メッセージ１９９８が、エントリノードＮ［１２２２１］（サブリングＲ［“２２２１”］によって導かれるＲ［“２２１”］のエントリノード）に送信されるようになることもある。次いで、Ｎ［１２２２１］（Ｒ［“２２２１”］の観点から）は、Ｒ［“１２２１”］へのエントリノードを識別することができる。したがって、Ｎ［１２２２１］における方法２２００の再帰的な適用により、メッセージ１９９８がＮ［４１２２１］に送信されることが可能になる。
【０２８８】
先祖リング内の識別されたエントリノードが、目標近傍域リングへのエントリノードを認識していない場合、識別されたエントリノードは、目標近傍域により近接する別の先祖リングへのエントリノードを識別しようと試みることができる。次いで、先祖リングへのエントリノードは、メッセージを、目標近傍域リングのより近接する先祖リングのエントリノードに転送することができる。
【０２８９】
例えば、破線で示されているように、方法２２００の適用により、メッセージ１９９８が、エントリノードＮ［４３２１］（サブリングＲ［“３２１”］によって導かれるＲ［“２１”］のエントリノード）に送信されるようになることもある。しかし、Ｎ［４３２１］（Ｒ［“３２１”］の観点から）は、Ｒ［“１２２１”］のエントリノードを識別することができないこともある。したがって、Ｎ［４３２１］（Ｒ［“３２１”］の観点から）は、Ｒ［“２２１”］のエントリノードを識別してもよい。よって、Ｎ［４３２１］における方法２２００の第１の再帰的な適用により、メッセージ１９９８がＮ［１２２２１］に送信されることが可能になる。次いで、Ｎ［１２２２１］における方法２２００の第２の再帰的な適用により、メッセージ１９９８がＮ［４１２２１］に送信されることが可能になる。
【０２９０】
しかし、Ｎ［４３２１］は、Ｒ［“１２２１”］へのエントリノードを識別した場合、メッセージ１９９８をエントリノードに直接送信することができる。したがって、先祖リングへのエントリノードは、メッセージを、必要に応じて、目標近傍域リング、または（通常は転送側エントリノードのＣＲＳにある）目標近傍域リングのより近接する先祖リングのエントリノードに転送することができる。前述のように、より近接する先祖リングへのエントリノードは、次いでメッセージを、必要に応じて、目標近傍域リング、または（通常は転送側の「さらに近接する」エントリノードのＣＲＳにある）目標近傍域リングのさらにより近接する先祖リングに転送することができる。このプロセスは、目標近傍域リングエントリノードに到達するまで、（例えば、方法２２００の再帰的な適用を通じて）繰り返すことができる。
【０２９１】
目標近傍域リングに到達すると、前述のルーティングアルゴリズムを使用して、目標近傍域リング内でメッセージをルーティングすることができる。
【０２９２】
図６および以下の説明は、本発明が実装されうる適切なコンピューティング環境について簡単に概要を説明することを意図している。必須ではないが、本発明は、コンピュータシステムによって実行されるプログラムモジュールなど、コンピュータ実行可能命令の一般的なコンテキストに即して説明される。一般に、プログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連するデータ構造、およびプログラムモジュールは、本明細書において開示される方法の動作を実行するためのプログラムコード手段の例を示す。
【０２９３】
図６を参照すると、本発明を実装する例示的なシステムは、処理装置６２１、システムメモリ６２２、およびシステムメモリ６２２を含む様々なシステムコンポーネントを処理装置６２１に接続するシステムバス６２３を含む、コンピュータシステム６２０の形をとる汎用コンピューティング装置を含む。処理装置６２１は、本発明の特徴を含む、コンピュータシステム６２０の特徴を実施するように設計されたコンピュータ実行可能命令を実行することができる。システムバス６２３は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、様々なタイプのバス構造のいずれかであってもよい。システムメモリは、読み取り専用メモリ（「ＲＯＭ」）６２４およびランダムアクセスメモリ（「ＲＡＭ」）６２５を含む。起動時などにコンピュータシステム６２０内の構成要素間の情報の転送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ；ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）６２６は、ＲＯＭ６２４に格納されていてよい。
【０２９４】
コンピュータシステム６２０はさらに、磁気ハードディスク６３９との間の読み取りまたは書き込みを行うハードディスクドライブ６２７、取り外し可能の磁気ディスク６２９との間の読み取りまたは書き込みを行う磁気ディスクドライブ６２８、ならびに、例えばＣＤ−ＲＯＭまたは他の光媒体など、取り外し可能の光ディスク６３１との間の読み取りまたは書き込みを行う光ディスクドライブ６３０を含むことができる。磁気ハードディスクドライブ６２７、磁気ディスクドライブ６２８、および光ディスクドライブ６３０は、それぞれハードディスクドライブインターフェース６３２、磁気ディスクドライブインターフェース６３３、および光ドライブインターフェース６３４によってシステムバス６２３に接続されている。ドライブおよびその関連するコンピュータ読み取り可能媒体は、コンピュータシステム６２０のコンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性記憶装置を提供する。本明細書に記載の例示的な環境では、磁気ハードディスク６３９、取り外し可能磁気ディスク６２９、および取り外し可能光ディスク６３１を採用しているが、磁気カセット、フラッシュメモリカード、ＤＶＤ（デジタル多用途ディスク）、Ｂｅｒｎｏｕｌｌｉカートリッジ、ＲＡＭ、ＲＯＭなど、データを格納するための他の種類のコンピュータ読み取り可能媒体も使用されることができる。
【０２９５】
１つまたは複数のプログラムモジュールを備えるプログラムコード手段は、オペレーティングシステム６３５、１つまたは複数のアプリケーションプログラム６３６、他のプログラムモジュール６３７、およびプログラムデータ６３８を含む、ハードディスク６３９、磁気ディスク６２９、光ディスク６３１、ＲＯＭ６２４またはＲＡＭ６２５に格納されることができる。ユーザは、キーボード６４０、ポインティングデバイス６４２、または、例えばマイクロフォン、ジョイスティック、ゲームパッド、スキャナなどの他の入力装置（図示せず）を介してコンピュータシステム６２０にコマンドおよび情報を入力することができる。これらのおよび他の入力装置は、システムバス６２３に接続された入出力インターフェース６４６を通じて処理装置６２１に接続されることができる。入出力インターフェース６４６は、例えば、シリアルポートインターフェース、ＰＳ／２インターフェース、パラレルポートインターフェース、ユニバーサルシリアルバス（「ＵＳＢ」）インターフェース、または米国電気電子学会（ＩＥＥＥ）１３９４インターフェース（つまり、ＦｉｒｅＷｉｒｅインターフェース）などの多種多様なインターフェースのいずれかを論理的に表すか、または様々なインターフェースの組合せを論理的に表すこともある。
【０２９６】
モニタ６４７または他の表示装置も、ビデオインターフェース６４８を介してシステムバス６２３に接続される。スピーカー６６９またはその他のオーディオ出力装置も、オーディオインターフェース６４９を介してシステムバス６２３に接続される。例えば、プリンタのような、その他の周辺出力装置（図示せず）もまた、コンピュータシステム６２０に接続されることができる。
【０２９７】
コンピュータシステム６２０は、例えば、オフィス規模またはエンタープライズ規模のコンピュータネットワーク、ホームネットワーク、イントラネット、および／またはインターネットなどのネットワークに接続可能である。コンピュータシステム６２０は、そのようなネットワークを介して、例えばリモートコンピュータシステム、リモートアプリケーション、および／またはリモートデータベースなどの外部ソースとデータを交換することができる。
【０２９８】
コンピュータシステム６２０はネットワークインターフェース６５３を含み、このネットワークインターフェースを介してコンピュータシステム６２０は、外部ソースからのデータ受信および／または外部ソースへのデータ送信を行う。図６に示されるように、ネットワークインターフェース６５３は、リンク６５１を介するリモートコンピュータシステム６８３とのデータの交換を容易にする。ネットワークインターフェース６５３は、例えば、ネットワークインターフェースカードおよび対応するネットワークドライバインターフェース仕様（「ＮＤＩＳ」）スタックなど、１つまたは複数のソフトウェアおよび／またはハードウェアモジュールを論理的に表すことができる。リンク６５１は、ネットワークの一部（例えば、イーサネット（登録商標）セグメント）を表し、リモートコンピュータシステム６８３は、ネットワークのノードを表す。
【０２９９】
同様に、コンピュータシステム６２０は入出力インターフェース６４６を含み、この入出力インターフェースを介してコンピュータシステム６２０は、外部ソースからのデータ受信および／または外部ソースへのデータ送信を行う。入出力インターフェース６４６は、リンク６５９を介してモデム６５４（例えば、標準モデム、ケーブルモデム、またはデジタル加入者線（「ＤＳＬ」）モデム）に接続され、このモデムを介してコンピュータシステム６２０は、外部ソースとの間のデータ受信および／またはデータ送信を行う。図６に示されるように、入出力インターフェース６４６およびモデム６５４は、リンク６５２を介するリモートコンピュータシステム６９３とのデータの交換を容易にする。リンク６５２は、ネットワークの一部を表し、リモートコンピュータシステム６９３は、ネットワークのノードを表す。
【０３００】
図６は、本発明の適切なオペレーティング環境を表すが、本発明の原理は、必要に応じて適切な変更を加え、本発明の原理を実施することができる任意のシステムに採用することができる。図６に示される環境は例示的なものにすぎず、決して、本発明の原理が実施されうる多種多様な環境のごく一部も表すものではない。
【０３０１】
本発明に従って、ノード、アプリケーション層、および他の下位層、さらにルーティングテーブルおよびノードＩＤを含む関連データは、コンピュータシステム６２０に関連付けられている任意のコンピュータ読み取り可能媒体に格納されアクセスされることができる。例えば、そのようなモジュールの一部および関連プログラムデータの一部は、システムメモリ６２２に格納するため、オペレーティングシステム６３５、アプリケーションプログラム６３６、プログラムモジュール６３７、および／またはプログラムデータ６３８に含まれていてもよい。
【０３０２】
例えば、磁気ハードディスク６３９などの大容量記憶装置がコンピュータシステム６２０に接続される場合、そのようなモジュールおよび関連するプログラムデータもまた大容量記憶装置に格納されてもよい。ネットワーク化された環境において、コンピュータシステム６２０に関連して示されるプログラムモジュール、またはその一部分は、リモートコンピュータシステム６８３および／またはリモートコンピュータシステム６９３に関連付けられているシステムメモリおよび／または大容量記憶装置などの、リモート記憶装置に格納されることができる。そのようなモジュールの実行は、前述のように分散された環境において実行されてもよい。
【０３０３】
本発明は、その精神または本質的特質から逸脱することなく、他の特定の形態で具現されることもできる。説明されている実施形態はあらゆる点で、限定的ではなく、あくまでも例示的なものと見なされるべきである。したがって、本発明の範囲は、前述の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲の等価の意味および範囲内に含まれるすべての変更は、それらの範囲内に包括的に含まれるものとする。
【図１】
2009543188.tif 000003
【図２】
2009543188.tif 000004
【図３】
2009543188.tif 000005
【図４】
2009543188.tif 000006
【図５】
2009543188.tif 000007
【図５Ａ】
2009543188.tif 000008
【図６】
2009543188.tif 000009
【図７】
2009543188.tif 000010
【図８】
2009543188.tif 000011
【図９】
2009543188.tif 000012
【図１０】
2009543188.tif 000013
【図１１】
2009543188.tif 000014
【図１２Ａ】
2009543188.tif 000015
【図１２Ｂ】
2009543188.tif 000016
【図１３】
2009543188.tif 000017
【図１４】
2009543188.tif 000018
【図１５】
2009543188.tif 000019
【図１６】
2009543188.tif 000020
【図１７】
2009543188.tif 000021
【図１８】
2009543188.tif 000022
【図１９Ａ】
2009543188.tif 000023
【図１９Ｂ】
2009543188.tif 000024
【図１９Ｃ】
2009543188.tif 000025
【図１９Ｄ】
2009543188.tif 000026
【図１９Ｅ】
2009543188.tif 000027
【図１９Ｆ】
2009543188.tif 000028
【図１９Ｇ】
2009543188.tif 000029
【図２０】
2009543188.tif 000030
【図２１】
2009543188.tif 000031
【図２２】
2009543188.tif 000032
【国際調査報告】
2009543188.tif 000033
2009543188.tif 000034