本発明は、ランデブーフェデレーション内の近傍域間通信を容易にするための方法、システム、およびコンピュータプログラム生成物に及ぶ。一部の実施形態において、ノードの副次リングセットエントリテーブルが保持される。ノードは、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの少なくとも1つの対応するエントリノードを示すように構成される。リングのツリーの構成に関連する情報を保持する使用可能なリソースから副次リングセットエントリテーブル情報が発見される。副次リングセットエントリテーブルは、発見された副次リングセットエントリテーブル情報に基づいて適切な副次リングセットエントリ状態で更新される。適切な副次リングセットエントリ状態は、ノードの副次リング、およびノードの副次リングへの少なくとも1つの対応するエントリノードを含む。
その他の実施形態において、近傍域間通信は、リングのツリー内で送信される。近傍域間通信の1つの実施形態において、ノードが、メッセージをノードの指定された副次リングに送信すべきことが判別される。ノードは、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの対応する少なくとも1つのエントリノードを示すように構成される。指定された副次リングの少なくとも1つの副次リングセットエントリは、ノードの副次リングセットエントリテーブルから識別される。少なくとも1つの副次リングセットエントリの各々は、指定された副次リングの少なくとも1つのエントリノードを示す。メッセージは、示された少なくとも1つのエントリノードに送信される。
近傍域間通信のもう1つの実施形態において、発信元ノードがメッセージを、リングのツリー内の目標近傍域リングの所定のノードIDに最も近接する宛先ノードにルーティングするよう意図することが判別される。目標近傍域リングおよび目標近傍域リングの上位リングのうちの少なくとも1つのメンバーノードであることが知られている1つまたは複数のエントリノードが識別される。メッセージは、識別されたエントリノードに送信される。メッセージは、識別されたエントリノードが、目標近傍域リングの示された宛先ノードに最も近接するノードIDを有するノードにメッセージを帰着させるべきであることを示す。
本発明の範囲内の実施形態は、コンピュータ実行可能命令を保持または記憶し、またはデータ構造を格納するためのコンピュータ読み取り可能媒体も含む。そのようなコンピュータ読み取り可能媒体は、汎用または特殊用途のコンピュータシステムによってアクセスできる任意の使用可能な媒体であってもよい。例えば、そのようなコンピュータ読み取り可能媒体は、RAM、ROM、EPROM、CD−ROMその他の光ディスクストレージ、磁気ディスクストレージその他の磁気記憶装置のような物理記憶媒体、あるいは所望のプログラムコード手段をコンピュータ実行可能命令、コンピュータ読み取り可能命令、またはデータ構造の形態で保持または格納するために使用することができ、汎用または特殊用途コンピュータによってアクセスすることができる、任意の他の媒体を備えることができるが、これらに限定されることはない。
この説明および特許請求の範囲において、「ネットワーク」は、コンピュータシステムおよび/またはモジュール(例えば、ハードウェアおよび/またはソフトウェアモジュール)間の電子データの伝送を可能にする(おそらくは異なる速度の)1つまたは複数のデータリンクとして定義される。情報が、ネットワークまたは別の通信接続(有線、無線、あるいは有線または無線の組合せ)を介してコンピュータシステムに転送または提供される場合、接続は適切にコンピュータ読み取り可能媒体として見なされる。このように、そのような接続は、適正にコンピュータ読み取り可能媒体と称される。上記の組合せも、コンピュータ読み取り可能媒体の範囲内に含まれるべきである。コンピュータ実行可能命令は、例えば、汎用コンピュータシステムまたは特殊用途コンピュータシステムに特定の機能または機能のグループを実行させる命令およびデータを備える。コンピュータ実行可能命令は、例えば、アセンブリ言語またはソースコードのようなバイナリの中間形式の命令であってもよい。一部の実施形態において、例えば特殊用途向け集積回路またはゲートアレイのようなハードウェアモジュールは、本発明の原理を実施するために最適化される。
この説明および以下の特許請求の範囲において、「ノード」は、電子データに対するオペレーションを実行するために共に動作する、1つまたは複数のソフトウェアモジュール、1つまたは複数のハードウェアモジュール、またはその組合せとして定義される。例えば、ノードの定義は、パーソナルコンピュータのハードウェアコンポーネント、およびパーソナルコンピュータのオペレーティングシステムのようなソフトウェアモジュールを含む。モジュールの物理的配置は、重要ではない。ノードは、ネットワークを介して結合された1つまたは複数のコンピュータを含むことができる。同様に、ノードは、(メモリおよびプロセッサのような)内部モジュールが電子データに対するオペレーションを実行するために共に動作する(携帯電話/携帯情報端末「PDA」のような)単一の物理的な装置を含むことができる。さらに、ノードは、例えば、特殊用途向け集積回路を含むルータなど、特殊用途ハードウェアを含むことができる。
本発明が、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、ページャ、ルータ、ゲートウェイ、ブローカ、プロキシ、ファイアウォール、リダイレクタ、ネットワークアドレストランスレータなどを含む、多数のタイプのノード構成でネットワークコンピューティング環境において実施できることを当業者であれば理解するであろう。本発明はまた、ネットワークを通じて(有線データリンク、無線データリンクによるか、または有線と無線のデータリンクの組合せにより)リンクされたローカルおよびリモートノードが共にタスクを実行する分散システム環境において実施することもできる。分散システム環境において、プログラムモジュールは、ローカルおよびリモートの記憶装置に配置することができる。
フェデレーションアーキテクチャ
図1は、フェデレーションインフラストラクチャ100の例を示す。フェデレーションインフラストラクチャ100は、様々なタイプのフェデレーションパートナーシップを形成することができるノード101、102、103を含む。例えば、ノード101、102、103は、ルートノードなしでピアとして相互の間で連合(federate)されてもよい。各ノード101、102、および103はそれぞれ、対応するID171、182、および193を有する。
一般に、ノード101、102、103は、フェデレーションプロトコルを使用してパートナーシップを形成し、情報(例えば、他のノードとの対話に関連する状態情報)を交換することができる。パートナーシップの形成および情報の交換は、リソースへのさらに効率的で信頼性の高いアクセスを容易にする。その他の中間ノード(図示せず)は、ノード101、102、および103(例えば、171から193のIDを有するノード)の間に存在することができる。したがって、例えば、ノード101とノード103の間をルーティングされたメッセージは、その他の中間ノードのうちの1つまたは複数を通過することができる。
フェデレーションインフラストラクチャ100内のノード(その他の中間ノードを含む)は、対応するランデブープロトコルスタックを含むことができる。例えば、ノード101、102、および103はそれぞれ、対応するランデブープロトコルスタック141、142、および143を有する。プロトコルスタック141、142、および143の各々は、アプリケーション層(例えば、アプリケーション121、122、および123)およびその他の下位層(例えば、対応する他の下位層131、132、および133)を含む。ランデブープロトコルスタック内の各層は、リソース要求の対応するリソースとのランデブーに関連する様々な機能に関与する。
例えば、その他の下位層は、チャネル層、ルーティング層、およびファンクション層を含むことができる。一般に、チャネル層は、あるエンドポイントから別のエンドポイントへ(例えば、ノード101からノード103)メッセージを(例えば、WS−ReliableMessagingおよびSimple Object Access Protocol(「SOAP」)を使用して)確実にトランスポートすることに関与する。チャネル層はまた、メッセージングヘッダの確実な着信および発信を処理すること、および確実なメッセージングセッションに関連する状態を保持することに関与する。
一般に、ルーティング層は、宛先に向かう次のホップを計算することに関与する。ルーティング層はまた、アドレッシングおよびルーティングメッセージングヘッダの着信および発信を処理すること、およびルーティング状態を保持することに関与する。一般に、ファンクション層は、参加および離脱(depart)要求、ping、更新、およびその他のメッセージなど、ランデブープロトコルメッセージの発行および処理、ならびにそれらのメッセージへの応答の生成に関与する。ファンクション層は、ルーティング層からの要求メッセージを処理して、対応する応答メッセージがある場合は、ルーティング層を使用して発信元ノードに送信する。ファンクション層はまた、要求メッセージを開始し、ルーティング層を使用して要求メッセージを配信させる。
一般に、アプリケーション層は、ファンクション層から配信された非ランデブープロトコル固有データ(つまり、アプリケーションメッセージ)を処理する。ファンクション層は、アプリケーション層からのアプリケーションデータにアクセスし、アプリケーションデータを取得してランデブープロトコルメッセージに書き込む(つまり、pingおよび更新)。つまり、ファンクション層は、アプリケーションデータがランデブープロトコルメッセージに結合(piggyback)されるようにすることができ、アプリケーションデータが元の受信側ランデブープロトコルノードのアプリケーション層に渡されるようにすることができる。一部の実施形態において、アプリケーションデータは、リソースおよびリソースインタレストを識別するために使用される。したがって、アプリケーション層は、アプリケーション固有の論理と、リソースおよびリソースインタレストを識別する目的で他の下位層との間で受信および送信されたデータを処理する状態を含むことができる。
フェデレーション機構
ノードは、多種多様な機構を使用して連合することができる。第1のフェデレーション機構は、情報を他のすべてのピアノードに転送するピアノードを含む。ノードがフェデレーションインフラストラクチャに参加すべき場合、ノードは、例えばWS−Discoveryなどのブロードキャスト/マルチキャスト発見プロトコルを使用して、その存在を宣言し、他のノードを検出するためにブロードキャスト/マルチキャスト検索(find)を発行する。次いで、ノードはネットワーク上にすでに存在する他のノードとの間に単純転送パートナーシップを確立し、新しく参加するノードとの新しいパートナーシップを受け入れる。その後、ノードは単に、すべてのアプリケーション固有メッセージをそのすべてのパートナーノードに転送する。
第2のフェデレーション機構は、アプリケーション固有メッセージをそれらの宛先に最も効率的に伝送するピアノードを含む。新しいノードがフェデレーションインフラストラクチャに参加すべき場合、新しいノードは、例えばWS−Discoveryなどのブロードキャスト/マルチキャスト発見プロトコルを使用して、その存在を宣言し、ブロードキャスト/マルチキャスト検索を発行して、フェデレーションインフラストラクチャの一部である他のノードを検出する。別のノードを検出すると、新しいノードは他のノードとのパートナーシップを確立する。確立されたパートナーシップから、新しいノードは、すでにフェデレーションインフラストラクチャに参加している他のノードの存在に関して学習する。次いで、この新しいノードは、これらの新たに学習したノードとのパートナーシップを確立して、任意の新しい着信パートナーシップ要求を受け入れる。
特定のアプリケーション固有メッセージのノード出現/離脱およびインタレストの登録はいずれも、フェデレーションインフラストラクチャを通じてフラッディングされ、その結果すべてのノードが、アプリケーション固有メッセージに他のパートナーノードおよびインタレストの登録に関するグローバルな知識を有することになる。そのようなグローバルな知識を使用して、任意のノードは、アプリケーション固有メッセージを、アプリケーション固有メッセージにインタレストを表したノードに直接送信することができる。
第3のフェデレーション機構は、すべてのアプリケーション固有メッセージをそれらの宛先に間接的に転送するピアノードを含む。この第3の機構において、ノードは、例えば128ビットまたは160ビットIDのような識別子(ID)を割り当てられる。所与のアプリケーション固有メッセージのインタレストの登録の保持に関与するノードは、そのIDが、アプリケーション固有メッセージの宛先識別(例えば、URI)をこの128ビットまたは160ビットIDスペースにマッピング(例えば、ハッシング)することによって取得されたものに最も近接するノードであると判別することができる。
この第3の機構において、ノード出現および離脱はファブリック全体にわたってフラッディングされる。一方、特定のアプリケーション固有メッセージのインタレストの登録は、そのような登録情報を保持することに関与すると判別されたノードに転送される。拡張性、ロードバランシング、耐障害性のために、特定のアプリケーション固有メッセージのインタレストの登録を受信するノードは、その近隣セット内にその登録情報を確実にフラッディングすることができる。指定されたノードの近隣セットを、指定されたノードのIDのいずれかの側に所定の範囲内のIDを有するノードのセットであると判別することができる。
第2の機構と同様に、新しく参加するノードは、例えばWS−Discoveryなどのブロードキャスト/マルチキャスト発見プロトコルを使用して、その存在を宣言し、ローカルブロードキャスト/マルチキャスト検索を発行して、すでにフェデレーションインフラストラクチャの一部であるノードを検出する。新しいノードは、発見されたノードとのパートナーシップを確立し、そのパートナーシップを使用してフェデレーションインフラストラクチャに参加している他の新しいノードの存在に関して学習する。次いで、新しいノードはさらに、新たに発見されたノードとのパートナーシップを確立して、任意の新しい着信パートナーシップ要求を受け入れる。新しいノードは、関与しているそのパートナーからの特定のアプリケーション層固有リソースへのインタレストの着信登録を受け入れ、それらをその近隣セットにわたりフラッディングすることができる。したがって、メッセージは一般に、(例えば、新しく参加するノードがパートナーとなっている、またはパートナーノードが認識している)中間ルーティングノードを介して、それらの最終宛先に転送することができる。
着信アプリケーション固有メッセージの受信に応答して、新しいノードは、メッセージ内で指定された宛先の登録情報を保持することに関与しうるパートナーノードに、メッセージを転送する。したがって、この第3の機構を使用する場合、フェデレーションインフラストラクチャ内のすべてのノードは、他のすべてのノードについてのグローバルな知識を備えているが、登録情報はノード間で効率的に区分される。アプリケーション固有メッセージは、それらのアプリケーション固有メッセージのインタレストの登録情報を保持する責任があるパートナーのノードのみを介してそれらの最終宛先に伝送される。したがって、間接化は、処理されるメッセージのインタレストの登録情報のグローバルな知識を有するパートナーノードにのみ転送することによって達成される。これは、すべてのパートナーノードに転送することにより間接化が達成される第1の機構の場合とは対照的である。
第4のフェデレーション機構は、メッセージを他のピアノードにルーティングするピアノードを含む。この第4の機構は、少なくとも、ノード出現/離脱および特定のアプリケーション固有メッセージのインタレストの登録が共に、フラッディングされるのではなく、すべてルーティングされるという点において、第3の機構とは異なる。ルーティングプロトコルは、アプリケーション固有メッセージと、アプリケーション固有メッセージでインタレストを表す登録メッセージとの間のランデブーを保証するように設計される。
図2は、パートナーへの間接的なルーティング要求を容易にするコンピュータアーキテクチャ200の例を示す。コンピュータアーキテクチャ200は、フェデレーションインフラストラクチャに参加している複数のローカル発見範囲にわたり展開する可能性のある様々なタイプのコンピュータシステムおよび装置を表す。
ワークステーション233は、登録されているPnP(プラグアンドプレイ)プロバイダインスタンスを含むことができる。このPnPプロバイダインスタンスの存在をそのパートナーに知らせるため、ワークステーション233は、フェデレーションインフラストラクチャにわたり登録要求201をルーティングする。登録要求201は最初にラップトップ231に転送され、ラップトップ231は登録情報201をメッセージブローカ237に転送し、メッセージブローカ237は登録情報201をメッセージゲートウェイ241に転送する。メッセージゲートウェイ241は、登録情報登録要求201をそのデータベースに保存し、成功メッセージ204をワークステーション233に返す。
続いて、今回実行しているサービスのプロバイダインスタンスである、別の登録されているプロバイダインスタンスが、ワークステーション233内でアクティブになる。今回、ノードは、メッセージゲートウェイ241が登録の責任を負っていることを認識して、登録要求205をメッセージゲートウェイ241に直接転送する。メッセージゲートウェイ241は、登録情報登録要求205をそのデータベースに保存し、成功メッセージ206をワークステーション233に返す。
続いて、プリンタ236(例えば、UPnPプリンタ)が電源オンされ、宣言(announcement)207を送信する。サーバ234は宣言207を検出し、登録要求208をメッセージブローカ237にルーティングする。メッセージブローカ237は、登録要求208をメッセージゲートウェイ241に転送する。メッセージゲートウェイ241は、登録情報登録要求208をそのデータベースに保存し、成功メッセージ210をサーバ234に返す。
続いて、パーソナルコンピュータ242は、ルックアップ要求211を発行してすべての装置を発見する。パーソナルコンピュータ242は、ルックアップ要求211の転送先を認識していないので、ワークステーション243を通じてルックアップ要求211をルーティングする。登録およびルックアップ要求は同じ宛先にルーティングされるので、ルーティングプロトコルは基本的に、2つの要求の間のランデブーを保証し、その結果ワークステーション243は、検索要求211をメッセージゲートウェイ241に転送することになる。メッセージゲートウェイ241は、該メッセージゲートウェイ241が保持している登録情報をルックアップして、検索要求211をワークステーション233およびサーバ234の両方に転送する。ワークステーション233およびサーバ234は、応答メッセージ214および216をパーソナルコンピュータ242にそれぞれ送信する。
この第4の機構は、要求を、要求に指定されている登録のグローバルな知識を有するノード(メッセージゲートウェイ241)に、(フラッディングではなく)ルーティングすることにより機能する。この第4の機構は基本的に、以下でさらに詳細に説明されるように、ルーティングがO(logN)ホップで達成されうることを保証するが、ここでNはフェデレーションインフラストラクチャに参加しているノードの数である。この第4の機構は、ノードパートナーシップと登録情報の両方を効率的に区分するので、インターネットのような、非常に大規模なネットワークに合わせて拡張する。
いくつかのフェデレーション機構について説明してきたが、当業者には、その他のフェデレーション機構が可能であることが、この説明を検討した後明らかとなろう。
フェデレーション内のノード間の関係
したがって、フェデレーションは、情報が体系的かつ効率的に広められ配置されうる動的で拡張性のあるネットワークを形成するために相互の間で協調するノードのセットからなる。ノードは、再帰的、非対称的、推移的、全体的でありノード識別のドメインにわたって定義される2項関係を使用して、ソートされたリストとしてフェデレーションに参加するように編成される。ソートされたリストの両端は結合され、それによりリングを形成する。したがって、リスト内の各ノードは、自身が(モジュロ演算を使用した結果)ソートされたリストの中央にあるものと見なすことができる。さらに、リストは、任意のノードがいずれの方向にもリストをトラバースすることができるように、二重連結される。
各フェデレーションノードには、0から固定された上限までの、固定のIDのセットから(例えば、重複検出を用いた乱数発生器によって)IDを割り当てることができる。したがって、固定上限のIDに1を加えると、ゼロのIDとなる(つまり、リンクリストの最後からリンクリストの最初に戻るように移動する)。加えて、ノード識別の値ドメインからノード自身への1対1のマッピング関数が定義される。
図3は、リンクリスト304の例および対応するリング306を表す。そのようなリングを所与として、以下の関数を定義することができる。
RouteNumerically(V,Msg):ノード識別の値ドメインからの値Vおよびメッセージ「Msg」を与えられ、マッピング関数を使用して識別がVにマップされうるノードXに、メッセージを配信する。
Neighborhood(X,S):近隣は、基数がSと等しいノードXのいずれかの側のノードのセットである。
フェデレーション内のすべてのノードがリングのグローバルな知識を有する場合、RouteNumerically(V,Msg)は、マッピング関数をVに適用することによって識別が得られるノードXにMsgを直接送信することで実施される。代替として、ノードが他のノードについて限られた知識を有する場合(例えば、直接隣接したノードについてのみ)、RouteNumerically(V,Msg)は、宛先ノードXに到達するまで、リングに沿って連続するノードにメッセージを転送することにより実施される。
代替として(および有利なことに)、ノードは、(グローバルな知識を有するかまたは直接隣接するノード間のルーティングを実施する必要なく)分散二分検索を実行するのに十分なリングに関する知識を格納することができる。リング知識の量は、リング知識の保持が各ノードに与える影響は十分に小さいが、ルーティングホップの数が減少することでルーティングパフォーマンスの増大を可能にするように構成可能である。
前述のように、IDを、自然数の十分に大きい有界集合にわたり定義された「<」(小なり)の関係を使用して割り当てることができる。つまりその範囲が0と何らかの固定値の間の数(0と固定値を含む)の有限集合に及ぶ。したがって、フェデレーションに参加しているすべてのノードは、0から何らかの適切に選択された上限まで(0と上限を含む)の間にある自然数を割り当てられる。範囲は厳重なものである必要はなく、ノードに割り当てられている数値間に途切れがあってもよい。ノードに割り当てられている数値は、リング内のその識別としての役割を果たす。マッピング関数は、2つのノード識別の間に含まれる数を、識別がその数値に最も数値的に近接するノードにマップすることにより、数値スペースの途切れを考慮する。
この手法は、多数の利点を備えている。均等に分布した数を各ノードに割り当てることにより、リングのすべてのセグメントが均一に取り込まれる可能性が高まる。さらに、後続、先行、および近隣の計算は、モジュロ演算を使用して効率的に行うことができる。
一部の実施形態において、フェデレーションノードは、(例えば、乱数発生が使用される場合)2つのノードが同じIDを割り当てられる可能性が極めて低くなるように、十分に大きいIDスペース内からIDを割り当てられる。例えば、ノードは、0からbn−1の範囲のIDを割り当てられてもよく、ここで、bは、例えば8または16と等しく、nは、例えば128ビットまたは160ビットと等価の桁と等しい。したがって、ノードは、例えば、0から1640−1(または、約1.461502E48)の範囲からIDを割り当てられてもよい。0から1640−1の範囲は、例えば、インターネット上のすべてのノードに一意のIDを割り当てるのに十分な数のIDを提供する。
したがって、フェデレーション内の各ノードは以下のものを有することができる。
0からbn−1の範囲で均一に分布された数値であるID
以下のもので構成されるルーティングテーブル(すべての演算はbnを法として行われる)
後続ノード(s)
先行ノード(p)
sj.s.id>(id+u/2)、j≧v/2−1、およびpk.p.id<(id−u/2)、およびk≧v/2−1であるような、近隣ノード(pk,...,p1,p,s,s1,...,sj)
r±i=RouteNumerically(id±bi,Msg)であるような、ルーティングノード(r-(n-1),...,r-1,r1,...,rn-1)
ここでbは基数であり、nは桁数のフィールドサイズであり、uは近隣範囲であり、vは近隣サイズであり、演算はbnを法として行われる。良好なルーティング効率および耐障害性のために、uおよびvの値はu=bかつv≧max(log2(N),4)であってもよく、ここでNは、フェデレーションに物理的に参加しているノードの合計数である。Nは、例えば、IDの均一な分布がある場合、長さがbよりも大きいかまたはbと等しいリングセグメント上に存在するノードの数から推定することができる。bおよびnの標準的な値は、b=8または16、およびn=128ビットまたは160ビットと等価の桁である。
したがって、ルーティングノードは、リングにまたがる対数指標(index)を形成することができる。リング上のノードの位置に応じて、例えば、i=(1,2,..,(n−1))として、id±biの集合内の各数値において既存のノードがある場合、正確な対数指標が可能である。しかし、集合内の各数値に既存のノードがないような場合もある。そのような場合には、id±biに最も近接するノードが、ルーティングノードとして選択されてもよい。結果として得られる対数指標は正確ではなく、集合内の一部の数値に対して一意のルーティングノードが十分ではないこともある。
再度図3を参照すると、図3は、ソートされたリスト304および対応するリング306の形態でフェデレーションインフラストラクチャ内のノード間の2項関係の例を示す。ソートされたリスト304のIDスペースは、0から28−1(すなわち255)の範囲である。つまり、b=2、およびn=8である。したがって、図3に示されるノードは、0から255の範囲のIDを割り当てられる。ソートされたリスト304は、再帰的、非対称的、推移的、かつ全体的でノード識別のドメインにわたり定義される2項関係を使用する。ソートされたリスト304の両端は結合され、それによりリング306を形成する。これにより、図3の各ノードは、自身がソートされたリスト304の中央にあるものと見なすことが可能になる。ソートされたリスト304は、任意のノードがいずれの方向にもソートされたリスト304をトラバースすることができるように、二重連結される。ソートされたリスト304(またはリング306)をトラバースする演算は、28を法として行われる。したがって、255(またはソートされたリスト304の最後)+1=0(またはソートされたリスト304の最初)である。
ルーティングテーブルは、ID64の後続がID76(ID64から直接右回りのID)であることを示す。後続は、例えば、新しいノード(例えば、71のIDを持つ)が加わる場合、または既存のノード(例えば、ID76)がフェデレーションインフラストラクチャを離れる場合などに、変化する可能性がある。同様に、ルーティングテーブルは、ID64の先行がID50(ID64から直接左回りのID)であることを示す。先行は、例えば、新しいノード(例えば、59のIDを持つ)が加わる場合、または既存のノード(例えば、ID50)がフェデレーションインフラストラクチャを離れる場合などに、変化する可能性がある。
ルーティングテーブルはさらに、ID64の近隣ノードのセットが、ID83、76、50、および46を有することを示す。近隣ノードのセットは、ID64の指定された範囲(つまり、近隣範囲u)内である指定されたノードの数(つまり、近隣サイズv)であってもよい。例えばV=4およびU=10のような、多種多様な近隣サイズおよび近隣範囲が、近隣ノードのセットを識別するために使用できる可能性がある。近隣セットは、例えば、ノードがフェデレーションインフラストラクチャに加わるかまたはこれを離れる場合、あるいは指定されたノード数または指定された範囲が変更された場合に、変化する可能性がある。
ルーティングテーブルはさらに、ID64が、ID200、2、30、46、50、64、64、64、64、76、83、98、135および200を有するノードにルーティングすることができることを示す。このリストは、i=(1,2,3,4,5,6,7)として、id±2iの集合内の各数値に最も近接するノードを識別することにより生成される。つまり、b=2、かつn=8である。例えば、ID76を有するノードは、64+23、つまり72に最も近接するノードを計算することから識別されてもよい。
ノードは、先行ノード、後続ノード、近隣ノードのセット内の任意のノード、または任意のルーティングノードに、メッセージ(例えば、リソースへのアクセスの要求)を直接ルーティングすることができる。一部の実施形態において、ノードは、数字ルーティング関数を実施して、メッセージをルーティングする。したがって、RouteNumerically(V,Msg)をノードXにおいて実施して、IDが数値的にVに最も近接するフェデレーション内のノードYにMsgを配信し、ノードYのIDをノードXに返すことができる。例えば、ID64を有するノードは、RouteNumerically(243,Msg)を実施して、ID250を有するノードにメッセージがルーティングされるようにすることができる。しかし、ID250はID64のルーティングノードではないので、ID64はメッセージをID2(243に最も近接するルーティングノード)にルーティングすることができる。ID2を有するノードは、RouteNumerically(243,Msg)を実施して、メッセージがID250を有するノードに(直接またはさらに中継ノードを経由して)ルーティングされるようにすることができる。したがって、RouteNumerically関数は、メッセージをより近接の宛先にルーティングする呼び出しごとに、再帰的に呼び出されることがある。
有利なことに、本発明のその他の実施形態は、1つまたは複数の近傍域カテゴリ(例えば、地理的境界、ルーティング特性(例えばIPルーティングホップ)、管理可能ドメイン、組織境界など)の複数の近傍域基準に基づいて、複数のリングの或るリングまたは複数のリングのツリーに、或るリングを区分することを容易にする。リングは、同じタイプの近傍域基準を使用して複数回区分することができることを理解されたい。例えば、リングは、大陸近傍域基準(continent proximity criteria)および国近傍域基準(country proximity criteria)(いずれも地理的境界の近傍域カテゴリ)に基づいて区分されてもよい。
IDは、(乱数発生の結果)IDスペースにわたり均一に分布されるので、環状IDスペースの任意の所定のセグメントが、異なる近傍域クラス(ただし、これらのクラスがほぼ同じ基数を有するという条件で)に属すノードを含む確率が高い。確率は、意味のある統計的動作を得るのに十分なノード数がある場合にさらに高まる。
このようにして、任意の所定のノードの近隣ノードは通常、近傍域の観点から十分に分散される。パブリッシュされたアプリケーション状態は近隣ノードの間で複製することができるので、パブリッシュされた情報も、近傍域の観点から十分に分散することができる。
図4は、近傍ルーティングを容易にするリング400のリングを示す図である。リング401は、マスターまたはルートリングと見なすことができ、リング402、403、および404の各々のすべてのノードを含む。リング402、403、および404は各々、指定された近傍域基準に基づいて区分されるリング401からのノードのサブセットを含む。例えば、リング401は、地理的位置に基づいて区分されてもよく、ここでリング402は北米のノードを含み、リング403はヨーロッパのノードを含み、リング404はアジアのノードを含む。
65,536(216)のIDを含む数値スペースにおいて、ID5,345を有するNorth AmericanノードからID23,345を有するAsianノードへメッセージをルーティングすることは、Asianノードの近隣ノードが識別されるまでリング402内でメッセージをルーティングすることを含むことができる。次いで、近隣ノードは、メッセージをAsianノードにルーティングすることができる。このようにして、単一のホップ(複数ホップに対して)が、North AmericanノードとAsianノードとの間に行われる。したがって、ルーティングは、リソース効率の高い方法で実行される。
図5は、近傍ルーティングを容易にするリングの近傍域誘導区分ツリー(proximity induced partition tree)500の例を示す。示されているように、リングの区分ツリー500は多数のリングを含む。リングは各々、ソートされたリンクリストの区分を表す。各リングは、ソートされたリンクリスト内のIDを有する複数のノードを含む。しかし、可能なノードの数が多いので明確にするために、ノードはリング上で明示的に示されてはいない(例えば区分ツリー500のIDスペースはb=16およびn=40であってもよい)。
区分ツリー500内で、ルートリング501は、基準571(第1の管理ドメイン境界基準)に基づいて、サブリング511、512、513、514を含む複数のサブリングに区分される。例えば、DNS名の各コンポーネントは、右から左に読まれるDNS名に出現する順序に従って誘導されたそれらの間の半順序による近傍域基準を考慮されてもよい。したがって、サブリング511はさらに、基準581(第2の管理ドメイン境界基準)に基づいて、サブリング521、522、および523を含む複数のサブリングに区分することができる。
サブリング522はさらに、基準572(地理的境界基準)に基づいて、サブリング531、532、および533を含む複数のサブリングに区分することができる。位置ベースの近傍域基準は、大陸、国、郵便番号などに従って、半順序にすることができる。郵便番号自体は、階層的に編成されている、つまり、さらに近傍域基準の半順序サブリストをさらに誘導するものと見なすことができる。
サブリング531はさらに、基準573(第1の組織境界基準)に基づいて、サブリング541、542、543、および544を含む複数のサブリングに区分することができる。近傍域基準の半順序リストは、所定の会社が課、部、および製品グループなどに組織的に構造化される方法に従って誘導することができる。したがって、サブリング543はさらに、基準583(第2の組織境界基準)に基づいて、サブリング551、および522を含む複数のサブリングに区分することができる。
区分ツリー500内で、各ノードは、単一のIDを有し、ルートから始まりリーフまでの対応する区分パスに沿ってリングに加わる。例えば、サブリング552に参加している各ノードはまた、サブリング543、531、522、511、およびルート501に参加する。宛先ノード(ID)へのルーティングは、以下のようにRouteProximally関数を実施することにより達成することができる。
RouteProximally(V,Msg,P):ノード識別のドメインからの値Vおよびメッセージ「Msg」を与えられ、メッセージを、近傍域基準Pによって等価であると見なされるノード間で識別がVにマップされうるノードYに配信する。
このように、ルーティングは、宛先ノードが現在のノードとその後続または先行ノードとの間にあるという条件から判別される所定のリング内のルーティングにより、さらなる進行が行われなくなるまで、そのリング内で徐々に宛先ノードに近づいてゆくことによって、達成することができる。この時点において、現在のノードは、参加する次のより大きいリング内のそのパートナーノードを介して、ルーティングを開始する。ルートリングに向かう区分パスに沿って上ることによって宛先ノードに向かって次第に動くこのプロセスは、RouteProximally呼び出しで最初に指定されているように、要求された近傍コンテキスト内で宛先ノードに最も近接するノードに到達した場合に終了する。
ルーティングホップは、宛先ノードが外側に存在するのでその近隣の範囲内でさらなる進行が行われなくなるまで、要求を発信したノードの近傍近隣にとどまることができる。この時点において、近傍域基準は、さらなる進行を行うため、近傍近隣のサイズを増大させるように緩和される。このプロセスは、近傍近隣が、宛先ノード(ID)を含むように十分に拡大されるまで繰り返される。近傍近隣基準の連続的な緩和ごとに行われたルーティングホップは、以前のホップと比較して数値スペースでそれ相応により小さいジャンプを行うが、近傍スペースで場合によってはより大きいジャンプとなる可能性がある。したがって、絶対的に必要な数のそのような(リング間)ホップのみが、宛先に到達するまでに行われる。
パブリッシュされたアプリケーションデータが、宛先ノードの近隣ノード間で複製されるときに、区分ツリーを下がって複製されるので、一部のホップはルックアップメッセージに対して回避される場合もある。
近傍ルーティングを達成するため、各フェデレーションノードは、メンバーとして参加するすべてのリング内のその後続および先行ノード(単一リングの後続および先行と類似する)、つまり近傍先行、近傍後続、および近傍近隣への参照を保持する。ルーティングを効率的にするため、ノードはまた、ルーティングパートナーとしてリングのいずれか半分で飛躍的に増大する距離に最も近いその他のノード(単一リングのルーティングノードと類似する)への参照を保持することもできる。一部の実施形態において、連続する後続または先行ノードのペアの間にあるルーティングパートナーノードは、後続または先行ノードペア間で、それぞれ現在のノードとそれに数値的に最も近接するノードによって共有される同じ最下位リングに参加する。したがって、宛先ノードに向かうルーティングホップは、さらなる進行を行うことが絶対的に必要とされる場合に限り、緩和された近傍域基準の使用に移行する(すなわち、上位のリングに移行する)。その結果、メッセージは、対応するフェデレーションノードと効率的にランデブーすることができる。
一部の実施形態において、ノードは、近傍ルーティング関数を実施し、等価基準関係に基づいてメッセージをルーティングする。したがって、数値Vおよびメッセージ「Msg」を与えられると、ノードは、RouteProximally(V,Msg,P)を実施して、メッセージを、近傍域基準Pによって等価であると見なされるノード間で識別がVにマップされうるノードYに、配信することができる。近傍域基準Pは、近位に等価であると見なされるすべてのノードにとって共通の祖先である、区分ツリー内の最下位リングを識別する。これは、ルートリングからパス区切り文字「/」で区別されることにより識別されるリングまでのパスに沿って見出された近傍基準を連結することによって得られる、ストリングとして表すことができる。例えば、サブリング542を識別する近傍域基準は、「Proximity:/.COM/Corp2/LocationA/Div2」として表されてもよい。区分ツリー500内の各リングは、例えば、その表現ストリングをSHAベースのアルゴリズムでハッシュすることなどによって、一意の数値を割り当てられてもよい。数値0がルートリングに予約されている場合、これはRouteNumerically(V,Msg)≡RouteProximally(V,Msg,0)であると推測することができる。
例えば、サブリング544内のノードは、RouteProximallyを実施して、サブリング531内でより近接するノード(例えば、サブリング513内のノード)を識別することができる。同様に、サブリング531は、RouteProximallyを実施して、サブリング522内でより近接するノードを識別することができる。同様に、サブリング522は、RouteProximallyを実施して、サブリング511内でより近接するノードを識別することができる。同様に、サブリング511は、RouteProximallyを実施して、リング501内でより近接するノードを識別することができる。したがって、RouteProximally関数は、宛先により近接したメッセージをルーティングする呼び出しごとに再帰的に呼び出されることがある。
したがって、近傍域基準が考慮に入れられる場合、最終宛先へのパス上のルーティングホップは、要求を発信するノードの近傍域内にとどまることができるが、宛先ノードに到達するか、または宛先に向けてさらに進行するのにちょうど十分となるように緩和される選択された近傍域基準の下でさらなる進行が行われなくなるまで、数値スペース内で発信元ノードと宛先ノードとの間で大きく進行する。例えば、近傍域基準は、メッセージが、リング531からリング522までルーティングされるのに十分に緩和されてもよい。
近傍域への上記の手法を使用して、パブリッシュされた情報を所定のリングに限定することが可能である。例えば、組織では、組織固有の情報が、(1)組織のドメインの外部のノードへの近隣複製の形態で黙示的に、または(2)そのような情報のルックアップ要求にサービスを提供する形態で明示的に、その信頼ドメインの外部のエンティティに使用できないことを確実にしたい場合もある。第1の態様は、パブリッシュされた情報を指定されたリング内の目標IDに近隣するノード間のみで複製することにより満足される。ノードによって発信されたすべてのメッセージは、ノードがルートリングの方に属すリングを連続的に上ることによってルーティングされるので、組織内で発信されるすべてのルックアップ要求が、組織に限定されているパブリッシュ情報を見つけることができる確率が高まり、それにより黙示的に第2の態様を満足する。
また、組織では、そのドメインの外部のノードと自動的に連合するノードを嫌う。これは、例えば、訪問中の販売担当員が、自分のラップトップコンピュータを顧客の施設内のネットワークに接続するような場合に生じる可能性がある。販売担当者に属すラップトップコンピュータが、そのホームドメインでパブリッシュされた情報を見つけようとする、および/またはその最下位の優先近傍域リングで始まるそのホームドメインのノードと連合しようとすることが理想的である。顧客のドメインでノードを連合することは、通常許可されるべきではない。このシナリオをサポートするには、ホームドメインのシードノードを見つける能力が必要となる。そのようなシードノードは、ホームドメインでパブリッシュされている情報を見つけて、ホームフェデレーションに参加し、パブリッシュされている情報をドメインにわたり選択的にインポートおよびエクスポートするために使用することができる。シードノードは、場合によっては、メッセージゲートウェイとも呼ばれる。
もう一部の実施形態において、エンティティは、ルートリング内のシードノードへの参照をパブリッシュする。シードノードは、(目標IDとして)リングに関連付けられている(その表現ストリングをハッシュすることにより得られる数値のような)一意の数値でパブリッシュすることができる。シードノード情報はさらに、ルートリング内の対応する目標IDへのパス上にある様々なリング内のノードによってオンデマンドでキャッシュされてもよい。そのようなオンデマンドキャッシングは、パフォーマンスの向上と、半静的な情報が極めて頻繁にルックアップされる場合に発生することもあるホットスポットの軽減をもたらす。シードノード情報はまた、DNSのような他の手段を介しても取得することができる。
限定されたパブリッシュ情報の耐障害性を提供するために、各ノードは、参加するすべてのリング内の近隣ノードのセットを保持することができる。以上のことを考慮すると、ノードによって保持される状態は、以下のように要約することができる。
0からbn−1の範囲で均一に分布された数値であるID
以下のもので構成されるルーティングテーブル(すべての演算はbnを法として行われる)
ノードが参加する各リング、例えばリングdについて、
後続ノード(sd)
先行ノード(pd)
sjd.sd.id>(id+u/2)、j≧v/2−1、pkd.pd.id<(id−u/2)、およびk≧v/2−1であるような、近隣ノード(pkd,...,p1d,pd,sd,s1d,...,sjd)
必要に応じてsd<id+bi<sd+1またはpd+1<id−bi<pdとなるr±i=RouteProximally(id±bi,updateMsg,d)であるような、ルーティングノード(r-(n-1),...,r-1,r1,...,rn-1)
ここでbは基数であり、nは桁数のフィールドサイズであり、uは近隣範囲であり、vは近隣サイズである。
リング「d」内の所定のノードによって保持される近隣ノードのサブセットは、その所定のノードが参加している子リング「d+1」内の近隣ノードとして再度表示される可能性があることに留意されたい。そのようなものとして、所定のノードがD*max(u,v)/2として参加するすべてのDリングにわたって所定のノードによって保持される近隣ノードの合計数に、上限を導くことができる。これは、所定のノードへの唯一の参照が保持され、最悪状況の上限は平衡ツリー(balanced tree)の場合である。
リングが複数の対応する兄弟サブリングに区分されるとき、例えば別名割り当て(aliasing)を通じて、指定されたノードが複数の対応する兄弟サブリングのうちの2つ以上に同時に参加することが許可されることに留意されたい。別名割り当ては、例えば様々なサブリングからの異なる状態を指定されたノードに関連付けるために実施されてもよい。したがって、所定のノードの別名(alias)が同じIDを有していたとしても、各別名はそれらに関連付けられている異なった状態を有することができる。別名割り当てにより、指定されたノードは、必ずしもより特定的な近傍域基準の共通の祖先ではない、別個の近傍域基準を有する複数のリングに参加することができる。つまり、指定されたノードは、近傍域ツリーの複数の分岐(branch)に参加することができる。
例えば、二重(dual)NIC(有線および無線)ラップトップは、ラップトップと同じLANセグメントを共有する他の無線および有線ノードと近位等価であると見なされてもよい。しかし、これらの2つの別個の近傍域基準は、例えば、組織メンバーシップに基づく近傍域基準のように、異なるより高位の優先近傍域基準の適用後に限り適用可能である下位基準としてモデル化することができる。ラップトップは同じ組織に属しているので、1)有線内のメンバーシップ、および2)無線LANセグメントのメンバーシップを表す2つのサブリング内の別名割り当てされたノードは、ラップトップが属す組織を表すリング内の単一ノードに結合する。RouteProximallyは、別名割り当ての存在下でいかなる変更も伴うことなく予想通りに機能することを理解されたい。
各近傍リングは、(異なる可能性のある)リングパラメータに従って構成することができる。リングパラメータを使用して、近隣を定義し(例えば、リングパラメータは近隣範囲、近隣サイズ、pingメッセージおよび出発メッセージのタイミングおよびpingおよび出発メッセージの分布パターンを表すことができる)、(例えば、先に説明された前述の第1から第4のフェデレーション機構またはその他のフェデレーション機構からの)特定のフェデレーション機構を示し、または同じ近傍リング内のルーティングパートナー間の通信特性の定義することができる。より一般的であり、複数の異なるフェデレーション機構に適用するリングパラメータも一部あるが、他のリングパラメータはより特定的で、特定のタイプのフェデレーション機構に適用する。
上位レベルの近傍リングを構成するために使用されるリングパラメータは、一部の実施形態において下位レベルの近傍リングによって継承されてもよい。例えば、リング543は、(リング522などから継承される)リング531のリングパラメータの一部を継承する。したがって、リング531に関連付けられている近隣サイズおよび近隣範囲もまた、リング541に関連付けられる。
しかし、継承されたパラメータは変更される可能性があり、および/または近傍リングは様々なリングパラメータに従って個々に構成される可能性がある。例えば、リング511は、膨大な数のノードを含む管理ドメイン向けであり、そのためリング511にとって前述の第4のフェデレーション機構の方がより適している場合もある。一方、リング521は、比較的少数のノードを備える中小企業向けであり、そのためリング521にとって前述の第2のフェデレーション機構の方がより適している場合もある。したがって、リング521に関連付けられているリングパラメータは、リング511に関連付けられているリングパラメータとは異なる値に設定(またはこれに変更されたパラメータを継承)されてもよい。例えば、特定のタイプのフェデレーション機構を示すリングパラメータは、リング511と521との間で異なっていてもよい。同様に、近隣を定義するパラメータは、リング511と521との間で異なっていてもよい。さらに、リング521は、前述の第2のフェデレーション機構に固有である固有パラメータに従って構成することができるが、リング511は、前述の第4のフェデレーション機構に固有である固有パラメータにさらに従って構成される。
したがって、近傍リングは、近傍リング内のノードの特性(例えば、数、含まれるリソースなど)に基づいて柔軟に構成することができる。例えば、管理者は、(例えば、ユーザインターフェース経由など)構成手順を使用して近傍リングのリングパラメータを選択することができる。構成手順は、近傍リング間の継承関係の構成、および例えば、本来ならば継承されたリングパラメータをオーバーライドするような個々の近傍リングの構成を容易にすることができる。
図8は、フェデレーションインフラストラクチャのノードを区分する方法800を示す例示の流れ図である。方法800は、図5における区分ツリー500のリングに関して説明される。方法800は、フェデレーションインフラストラクチャ内のノードに割り当てられているノードIDを含むソートされたリンクリストにアクセスする動作を含む(動作801)。例えば、リング501によって表されるソートされたリンクリストがアクセスされてもよい。ソートされたリンクリストのノードID(リング501で示されるノード)は、フェデレーションインフラストラクチャ(例えば、フェデレーションインフラストラクチャ100)内のノードを表すことができる。
方法800は、ソートされたリンクリストを区分するための複数の異なる近傍域基準を表す近傍域カテゴリにアクセスする動作を含む(動作802)。例えば、ドメイン境界561、地理的境界562、および組織境界563を表す近傍域基準にアクセスすることができる。しかし、信頼ドメイン境界など、他の近傍域基準もまた、アクセスされた近傍域基準で表すことができる。近傍域カテゴリは、以前作成された近傍域基準の半順序リストを含むことができる。リングは、近傍域基準の半順序リストに基づいて区分することができる。
方法800は、第1の近傍域基準に基づいて、ソートされたリンクリストを1つまたは複数の第1のサブリストに区分する動作を含み、1つまたは複数の第1のサブリストの各々は、ソートされたリンクリストからノードIDの少なくともサブセットを含む(動作803)。例えば、リング501は、基準571に基づいて、サブリング511、512、513、および514に区分することができる。サブリング511、512、513、および514は各々、リング501とは異なるノードIDのサブセットを含むことができる。
方法800は、第2の近傍域基準に基づいて、1つまたは複数の第1のサブリストの中から選択された第1のサブリストを1つまたは複数の第2のサブリストに区分する動作を含み、1つまたは複数の第2のサブリストの各々は、第1のサブリストに含まれるノードIDの少なくともサブセットを含む(動作804)。例えば、サブリング511は、基準581に基づいて、サブリング521、522、および523に区分することができる。サブリング521、522、および523は各々、サブリング511とは異なるノードIDのサブセットを含むことができる。
図9は、ノードのルーティングテーブルを取り込む方法900を示す例示の流れ図である。方法900は、図3におけるソートされたリンクリスト304およびリング306に関して説明される。方法900は、先行ノードをルーティングテーブルに挿入する動作を含み、先行ノードは、現行ノードに関してソートされたリンクリストの第1の方向に現行ノードに先行する(動作901)。例えば、ID50を有するノードは、ID64を有するノード(現行ノード)の先行としてルーティングテーブルに挿入することができる。(ソートされたリンクリスト304の最後Aから、ソートされたリンクリスト304の最後Bに向かって)右回り方向321に移動すると、ID50を有するノードは、ID64を有するノードに先行する。先行ノードを挿入することで、現行ノードが先行ノードのパートナーであり、先行ノードが現行ノードのパートナーであるように、現行ノードと先行ノードとの間の対称パートナーシップを確立することができる。
方法900は、後続ノードをルーティングテーブルに挿入する動作を含み、後続ノードは、現行ノードに関してソートされたリンクリストの第1の方向に現行ノードの後に続く(動作902)。例えば、ID76を有するノードは、ID64を有するノード(現行ノード)の後続としてルーティングテーブルに挿入することができる。左回り方向322に移動することで、ID76を有するノードは、ID64を有するノードの後に続く。後続ノードを挿入することで、現行ノードが後続ノードのパートナーであり、後続ノードが現行ノードのパートナーであるように、現行ノードと後続ノードとの間の対称パートナーシップを確立することができる。
方法900は、適切な近隣ノードをルーティングテーブルに挿入する動作を含み、近隣ノードは、近隣範囲および近隣サイズに基づいて第1の方向および第2の相対する方向で、ソートされたリンクリストから識別される(動作903)。例えば、ID83、76、50、および46を有するノードは、ID64を有するノード(現行ノード)の近隣ノードとしてルーティングテーブルに挿入することができる。20の近隣範囲および近隣サイズ4に基づいて、ID83および76を有するノードを右回り方向321で識別することができ、ID50および46を有するノードを左回り方向322で(ソートされたリンクリスト304の最後Bから、ソートされたリンクリスト304の最後Aに移動して)識別することができる。環境によっては、適切な近隣ノードが識別されないような場合もある。近隣ノードを挿入することで、現行ノードが近隣ノードのパートナーであり、近隣ノードが現行ノードのパートナーであるように、現行ノードと近隣ノードとの間の対称パートナーシップを確立することができる。
方法900は、適切なルーティングノードをルーティングテーブルに挿入する動作を含み、ルーティングノードは、フェデレーションインフラストラクチャの基数およびIDスペースのフィールドサイズに基づいて第1の方向および第2の方向に、ソートされたリンクリストから識別され、ルーティングノードは、第1および第2の方向で、ソートされたリンクリストの対数指標を表す(動作904)。例えば、ID200、2、30、46、50、64、64、64、64、64、76、83、98、135、および200を有するノードは、ID64を有するノードのルーティングノードとしてルーティングテーブルに挿入することができる。例えば、基数2および8のフィールドサイズに基づいて、ID64、64、76、83、98、135、および200を有するノードを方向321で識別することができ、ID64、64、50、46、30、2、および200を有するノードを方向322で識別することができる。リング306内に示されるように、ルーティングノードは、右回り方向321および左回り方向322の両方で、ソートされたリンクリスト304の対数指標を表す。ルーティングノードを挿入することで、現行ノードがルーティングノードのパートナーであり、ルーティングノードが現行ノードのパートナーであるように、現行ノードとルーティングノードとの間の対称パートナーシップを確立することができる。
図7は、近傍域基準を考慮に入れるノードルーティングテーブルを取り込む方法700を示す例示の流れ図である。方法700は、図5におけるリングに関して説明される。方法700は、現行ノードが参加する各階層的に区分されたルーティングリングの先行ノードをルーティングテーブルに挿入する動作を含む(動作701)。各先行ノードは、現行ノードが参加する各階層的に区分されたルーティングリング内で第1の方向(例えば、右回り)に現行ノードに先行する。階層的に区分されたルーティングリングは、対応する近傍域基準に従って区分され、双方向のリンクリストの少なくともサブセット(および場合によっては双方向のリンクリスト全体)を含む。例えば、指定されたノードが、ルートリング501、およびサブリング511、522、523、531、および542に参加してもよい。したがって、先行ノードは、リング501、およびサブリング511、522、523、531、および542の各々の中から指定されたノードに対して選択される。
方法700は、現行ノードが参加する各階層的に区分されたルーティングリングの後続ノードをルーティングテーブルに挿入する動作を含む(動作702)。各後続ノードは、現行ノードが参加する各階層的に区分されたルーティングリング内で第1の方向に現行ノードの後に続く。例えば、後続ノードは、リング501、およびサブリング511、522、523、531、および542の各々の中から指定されたノードに対して選択される。
方法700は、現行ノードが参加する各階層的に区分されたルーティングリングの適切な近隣ノードをルーティングテーブルに挿入する動作を含む(動作703)。近隣ノードは、現行ノードが参加する階層的に区分されたルーティングリングからの近隣範囲および近隣サイズに基づいて、第1の方向(例えば、右回り)および第2の相対する方向(例えば、左回り)に識別することができる。例えば、近隣ノードは、リング501、およびサブリング511、522、523、531、および542の各々の中から指定されたノードに対して識別することができる。
方法700は、現行ノードが参加する各階層的に区分されたルーティングリングの適切なルーティングノードをルーティングテーブルに挿入する動作を含む(動作704)。例えば、ルーティングノードは、リング501、およびサブリング511、522、523、531、および542の各々の中から指定されたノードに対して識別することができる。
一部の実施形態において、適切なルーティングノードは、ノードYが参加する、リーフリング(または別名割り当てを使用する実施形態におけるリーフリング)を除く各近傍域リングdに対して挿入される。適切なルーティングノードは、以下の式に基づいて挿入することができる。
Y.sd.id<Y.id+bi<Y.sd+1.idが真である場合、リングdを使用する、または
Y.pd.id<Y.id−bi<Y.pd+1.idが真である場合、リングdを使用する。
リングが以前のステップで識別されていない場合、リード(例えば、リング501)リングをリングdとして使用する。ここで、リングdは、ノードYがzに最も近接するルーティングパートナーを探すべき近傍域リングである。
図10は、メッセージを宛先ノードに向けてルーティングする方法1000を示す例示の流れ図である。方法1000は、図3におけるソートされたリンクリスト304およびリング306に関して説明される。方法1000は、宛先を示す数値と共にメッセージを受信する受信ノードの動作を含む(動作1001)。例えば、ID64を有するノードは、212の宛先を示すメッセージを受信することができる。
方法1000は、受信ノードが、対応する先行ノードよりも宛先から数値的に遠いもの、および対応する後続ノードよりも宛先から数値的に遠いもののうちの少なくとも1つであることを判別する動作を含む(動作1002)。例えば、方向322において、ID64はID50よりも宛先212から遠く、方向321において、ID64はID76よりも宛先212から遠い。方法1000は、宛先が受信ノードに対応するノードの近隣セット内にはないことを判別する動作を含む(動作1003)。例えば、ID64を持つノードは、宛先212が、83、76、50、および46の近隣セット内にはないことを判別することができる。
方法1000は、受信ノードに対応するルーティングテーブルから中間ノードを識別する動作を含み、中間ノードは、対応するルーティングテーブル内の他のルーティングノードよりも宛先に数値的に接近している(動作1004)。例えば、ID64を有するノードは、ID200を有するルーティングノードを、他のルーティングノードよりも宛先212に数値的に近接しているものとして識別することができる。方法1000は、メッセージを中間ノードに送信する動作を含む(動作1005)。例えば、ID64を有するノードは、ID200を有するノードにメッセージを送信することができる。
図11は、近傍域基準に基づいてメッセージを宛先ノードに向けてルーティングする方法1100を示す例示の流れ図である。方法1100は、図4および図5におけるリングに関して説明される。方法1100は、宛先を示す数値および近傍域基準と共にメッセージを受信する受信ノードの動作を含む(動作1101)。近傍域基準は、ノードの1つまたは複数のクラスを定義する。受信ノードは、メッセージを、近傍域基準に基づいてノードの1つまたは複数のクラスの中から選択されたノードの現行クラスの一部として受信する。例えば、ID172を有するノードは、201の宛先を示すメッセージ、および宛先ノードがリング401によって表されるクラスの一部であることを示す近傍域基準を受信することができる。ID172を有するノードは、リング404の一部としてメッセージを受信することができる。
方法1100は、受信ノードが、ノードの選択されたクラス内のノードの中で、対応する先行ノードよりも宛先から数値的に遠いもの、および対応する後続ノードよりも宛先から数値的に遠いもののうちの少なくとも1つであることを判別する動作を含む(動作1102)。例えば、リング404内において、ID172を持つノードは、ID174を持つノードよりも宛先201から右回り方向に遠く、ID153を持つノードよりも宛先201から左回り方向に遠い。
方法1100は、宛先が、近傍域基準によって定義されたノードの1つまたは複数のクラスのいずれかについてノードの受信ノードの近隣セット内にはないことを判別する動作を含む(動作1103)。例えば、ID172を持つノードは、宛先201が、リング404、またはリング401内の対応する近隣セット内にはないことを判別することができる。
方法1100は、受信ノードのルーティングテーブルから中間ノードを識別する動作を含み、中間ノードは、ルーティングテーブル内の他のルーティングノードよりも宛先に数値的に接近している(動作1104)。例えば、ID172を有するノードは、ID194を有するノードを、リング404内の他のルーティングノードよりも宛先201に数値的に近接しているものとして識別することができる。方法1100は、メッセージを中間ノードに送信する動作を含む(動作1105)。例えば、ID172を有するノードは、受信したメッセージを、ID194を有するノードに送信することができる。ID172を有するノードは、受信したメッセージをID194を有するノードに送信して、以前に定義された近傍域基準の半順序リストに従うことができる。
ノード194は、リング404内で可能な限り宛先201に接近することができる。したがって、近傍域は、宛先に向けたルーティングが次のレッグ内のリング401でさらに行われるようにするのに十分に緩和されてもよい。つまり、リング404では宛先に向けてさらなる進行は行うことができないので、ルーティングはリング404からリング401へ移行される。代替として、ID201を持つノードは、リング401内のID194を持つノードの近隣内にあり、それ以上のルーティングをもたらすことはない。したがって、一部の実施形態において、1つ上位のリングに到達するために近傍域基準を緩和することは、さらにルーティングを進めるのに十分である。
しかし、その他の実施形態において、1つ上位のリングへの移行を行わせる近傍域基準の増分緩和は、さらなるルーティングが生じるまで(または、ルートリングに遭遇するまで)続行する。つまり、さらなるルーティングの進行が行われる前に、1つ上位のリングへの複数の移行が生じる。例えば、ここで図5を参照すると、リング531でさらなるルーティングの進行が行われない場合、近傍域基準は、リング511に移行するのに、またはルートリング501に移行するのに十分に緩和されてもよい。
ノードフェーズ
フェデレーションインフラストラクチャに参加しているノードは、様々な動作フェーズで動作することができる。ノードの有効なフェーズ値は、順序付きセットのメンバーとなるように定義することができる。例えば、{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(伝送時においてフェーズ不明)]}は、フェデレーションインフラストラクチャ内の所定のノードのフェーズスペースを表す1つの可能な順序付きセットを定義する。ノードインスタンスは、ノードフェーズ状態を経由して、InsertingからSyncing、Routing、Operatingへと順番に移行する(または進む)ことができる。さらに、一部の実施形態において、ノードインスタンスを、ノードインスタンスが前のノードフェーズ状態に戻ることができないように構成することができる。一部の実施形態において、ノードは、ノードが上るごとに、そのインスタンスIDを進める。
例えば、ノードインスタンスは、RoutingからSyncingへと戻る(またはInsertingに戻る)ことなどを防ぐことができる。したがって、一部の実施形態において、(例えば、(NodeId,InstanceId)によって識別された)所定のノードインスタンスが、特定のノードフェーズ状態(例えば、Operaating)に進んだことが知られている場合、この所定のノードインスタンスが、以前のノードフェーズ状態に戻る(例えば、Routing、Syncing、またはInsertingに戻る)可能性が低い(一部の実施形態においては戻ることはない)ことも知られている。したがって、特定のノードフェーズ状態の前のノードフェーズにある任意のノードインスタンスが、ノードの新しい(および進んだ)インスタンスであるという可能性が極めて高い。
一部の実施形態において、フェーズ情報および対応するId(ノードの上昇に応じて進む)は、共に転送される。したがって、同一のインスタンスに対してより小さいノードフェーズ状態の方が古いものであると判別することができる。さらに、(任意のフェーズ状態値において)より新しいノードインスタンスが知られている場合、より古いインスタンスに関する情報は、期限を経過したものであると見なされる。
時折、ノードは、例えば、最初のスタートアップ時、正常終了を経て、または異常終了(クラッシュ)の結果など、リブートするかまたは相互の通信を失うこともある。したがって、任意のノードフェーズ状態のノードが、リブートするかまたは他のノードとの通信を失う可能性がある。例えば、クラッシュは、Routingフェーズ状態にあるノードをリブートさせる可能性がある。リブートまたは通信を失っている間、ノードがどのノードフェーズ状態にあるのかを判別する方法はないこともある。したがって、ノードがリブートしているとき、またはノードへの通信が失われたとき、[Phase.Unknown Indication]を、ノードのフェーズ状態が現在不明であることを示すように設定することができる。しかし、ノードの以前に示され、および/または検出されたフェーズ状態を保持することができ、失われることはない。
[Phase.Unknown Indication]を使用して、フェーズ状態値が伝送された時点でフェーズ状態が既知であったかどうか(例えば、phase.unknownを設定していないフェーズ値)、またはフェーズ状態が以前表現されたフェーズ状態であり、フェーズ状態値が伝送された時点で該フェーズ状態が不明であったかどうか(例えば、phase.unknownを設定したフェーズ値)を示すことができる。したがって、ノードのフェーズ(そのフェーズ値)は、フェーズ状態値およびphase.unknown表示(indication)を使用して表すことができる。
参加プロトコル
随時、ノードは、既存のフェデレーションに参加、および既存のフェデレーションから離脱することができる。ノードは、フェデレーションへの参加および離脱のための適切なプロトコルを実施することができる。例えば、ノードは、Join()関数を実施して既存のフェデレーションに加わることができる。Join()関数を実施しているノードは、最終動作フェーズ状態に到達する前に、挿入フェーズ状態、同期フェーズ状態、およびルーティングフェーズ状態という3つの順序付きフェーズ状態を経由して移行することができる。その他の実施形態において、これらの特定の順序のフェーズ状態は存在しないが、他のフェーズ状態が定義されていることもある。図12Aは、フェデレーションインフラストラクチャ内のメンバーシップを確立するノードの例を示す。図12Bは、メッセージを交換するフェデレーションインフラストラクチャ内のノードの例を示す。
挿入フェーズ:ノードYは、少なくとも自身のノードIDを含みフェデレーションに対する参加アクションを示す、参加メッセージを発行することにより、このフェーズ状態に入る。参加メッセージは、宛先プロパティを新しく参加するノードの識別に設定されている新しく参加するノード(ノードY)によって送信される、ルーティングされたメッセージであってもよい。このフェーズ状態において、新しく参加するノードは、フェデレーション内でその先行および後続ノードの間に挿入される。挿入フェーズ状態は、以下のアルゴリズムに従って実施することができる(すべての演算はbnを法として行われる)。
IP1。Yは、参加するノードがフェデレーションに参加を望む最下位リングのすでに一部である既存のノードを識別する。これは、DHCPおよび/またはDNSおよび/またはWS−Discoveryまたは(既知の可能性がある)定数を使用して、静的に構成されるか、または動的に発見されてもよい。この既存のフェデレーションノードをEとする。
IP2。Yは、E.RouteNumerically(Y,joinMsg)を呼び出して、ノードYが参加するあらゆる近傍域リング内のY.IdにIDが数値的に最も近接するノードXを判別する。これは、参加メッセージを複数のノードにルーティングすることを含むことができる。
IP3。 数値的な後続(s)および先行(p)ノードを判別する(以下の挿入を行うために必要なデータが、参加メッセージおよびその応答で搬送搬されうることに留意されたい。そのため、それ以上の往復は必要ない)。
ケース1:X.id>Y.id
Y.s=X、Y.p=X.p、X.p.s=Y、およびX.p=Y
ケース2:X.id<Y.id
Y.p=X、Y.s=X.s、X.s.p=Y、およびX.s=Y
参加メッセージに応答して、ノードX(参加メッセージを処理したノード)は、参加応答をノードYに送信することができる。参加応答は、ノードYの先行ノード(Y.p)および後続ノード(Y.s)を示すことができる。ノードYは、参加応答を受信して、その先行および後続ノードを認識するように参加応答を処理することができる。参加応答を処理した後、ノードYは、フェデレーション内の弱いルーティング参加者となる可能性がある。例えば、ノードYは、そこに送信されたメッセージを、その後続または先行ノードのいずれかに単に転送することができる。したがって、ノードYは、フェデレーションインフラストラクチャに挿入されるが、ルーティングおよび近隣テーブルは取り込まれない。この時点に到達する前に、ノードYは、ノードYの活性(liveness)フェーズが挿入フェーズ状態にあることを示す状態メッセージを送信側ノードに返すことによって、メッセージを送信する他のノードに、送信されるメッセージを異なるノード経由でリダイレクトするよう要求する。
一般に、随時、ノードは同期の要求および応答メッセージを交換することができる。同期要求および同期応答メッセージは、送信側の観点から他のノードの活性情報(例えば、ヘッダ)を含むことができる。近隣状態もまた、近隣のアプリケーション層が相互の状態を認識するように、同期の要求および応答メッセージに含まれてもよい。同期の要求および応答メッセージが交換される場合の1つの例は、参加するノードの同期化フェーズ状態の間である。しかし、同期の要求および応答メッセージは、その他の動作フェーズ状態(例えば、Operating Phase状態の間など)でも交換することができる。
図16は、メッセージモデルおよび関連する処理モデル1600の例を示す。図16に示されるように、ノードは同期要求メッセージを送受信することができる。例えば、同期要求メッセージ1601は、新しく挿入されたノード(例えば、ID144を持つ図12Bのノード)からファンクション層1651において受信されてもよい。アプリケーションデータ1602(例えば、ネームスペースサブスクリプション)は、同期要求メッセージ1601に結合することができる。ファンクション層1651は、同期要求メッセージに含まれている任意のアプリケーションデータについてアプリケーション層1652に知らせることができる。例えば、ファンクション層1651は、アプリケーションデータ1602を含む、近隣状態同期イベント1603をアプリケーション層1652に呼び出すことができる。アプリケーションデータ1607を含む同期要求1631も、処理モデル1600における同期要求1601に対する処理と類似した同期要求1631の処理を行う、別のノードに送信することができる。
一部のファンクション層イベント(例えば、同期要求メッセージ1601、同期応答メッセージ1641、またはpingメッセージ1612)に応答して、ファンクション層1651は、アプリケーション層1652の近隣状態要求関数1604を呼び出すことができる。近隣状態要求1604は、近隣に伝搬される必要のある状態を取得するためのアプリケーション層への要求である。近隣状態要求1604に応答して、アプリケーション層1652は、オプションのアプリケーションデータ1607を含む近隣状態1606をファンクション層1651に供給することができる。代替として、アプリケーション層1652は、一部のアプリケーション層イベントに対してオプションのアプリケーションデータ1607を含む近隣状態1606を送信することができる。上記のものと同様の内部機構を使用して、ファンクション層1651は、オプションのアプリケーションデータ1607を含む同期応答メッセージ1608を送信して、アプリケーション層近隣状態を伝搬することができる。
同期フェーズ:参加応答メッセージを処理した後、ノードYは、挿入フェーズ状態から同期(Syncing)フェーズ状態へと移行する。同期フェーズ状態において、新しく挿入されたノードYは、情報を近隣内のノードと同期させる。一般に、ノードYは、同期メッセージを、挿入フェーズ状態で識別された少なくともその先行および後続ノードに送信することができる。同期メッセージを処理するこれらのノードは、これらの処理ノードの対応する近隣およびルーティングパートナーノードを示す同期応答を返すことができる。さらに具体的な例において、同期フェーズ状態は、以下のアルゴリズムに従って実施することができる(すべての演算はbnを法として行われる)。
SP1。ノードYが参加する各近傍リング内のNeighborhood(Y.s)およびNeighborhood(Y.p)ノードの和集合からNeighborhood(Y)を計算する。和集合の計算は、以下のように行うことができる。
sj.s.id>(Y.id+u/2)、j≧v/2−1、pk.p.id<(Y.id−u/2)、かつk≧v/2−1であるような、(sj,...,s1,s,p,p1,...,pk)
SP2。図16を簡単に参照すると、クエリYのローカルアプリケーション層(例えば、アプリケーション層1652)は、近隣状態要求(例えば、近隣状態要求1604)を介して、オプションのアプリケーション固有近隣データ(例えば、アプリケーション固有データ1607)を取得する。
SP3。Yの観点からの各近傍近隣およびルーティングパートナーノードの少なくとも活性状態情報をそれぞれ含む同期メッセージを、少なくとも近傍後続および先行ノードに送信する。SP2を介してアクセスされたオプションのアプリケーション固有近隣データ(例えば、アプリケーションデータ1607)は、同期要求1631に含まれる。
SP3。Yは、SP2で送信された同期メッセージを処理するノードから戻された同期応答メッセージを受信する。例えば、ノードYは、その計算された近隣内の1つまたは複数のノードと同期メッセージ(要求/応答)を交換することができる。同期メッセージが、ノードYの近隣ノードの少なくとも1つおよび場合によっては全部と交換された後、計算された近隣ノードはさらに、同期化されたデータを伝搬するためにメッセージを交換することができる。同期メッセージ(要求または応答)は、そのデータを、例えば近隣のノード内のターゲットノードと事前に同期化するために、ノードによって送信された非ルーティングメッセージであってもよい。
SP4。SP3における同期応答メッセージ(例えば、同期応答メッセージ1641)が受信されると、これらの受信された同期応答メッセージ内に存在するオプションのアプリケーション固有近隣データ(例えばアプリケーションデータ1622)を、近隣状態同期イベント1603を介してYのアプリケーション層1652に提供することができる。
同期フェーズ状態の一部として、近傍後続(例えば、Y.s)および先行(Y.p)ノードは、それらのルーティングテーブルを、新しく挿入されたノード(例えば、Y)と交換する。同期メッセージを受信するノードは、同期応答を送信することによって応答することができる。同期応答は、応答側ノードの観点を除き、同期メッセージと同様のデータを搬送する。同期メッセージおよび同期応答はいずれも、アプリケーションデータを搬送(または結合)することができる。したがって、アプリケーションデータを、同期化フェーズ状態の間に、ノード間で伝搬することができる。同期フェーズ状態が完了すると、ノードは、そこに向けられたメッセージを、単に後続または先行に転送するのではなく、処理することができる。しかし、ノードは、そのルーティングテーブルが取り込まれないので、引き続き弱いルーティング参加者と見なされることがある。
ルーティングフェーズ:同期フェーズ状態が完了した後、ノードは、ルーティングフェーズ状態に移行する。ルーティングフェーズ状態において、新しく同期化されたノード(例えば、ノードY)は、そのルーティングノードを計算する。ルーティングフェーズ状態は、以下のアルゴリズムに従って実施することができる(すべての演算はbnを法として行われる)。
RP1。ルーティングフェーズ状態が平衡化手順(以下で説明)の一部として実行されている場合、後続ノード(Y.s)および先行ノード(Y.p)は、ノードYが参加するあらゆる近傍域リングで活性であることを保証する。いずれかが活性でない場合、考慮中のリング内の近隣ノードの中から次善の後続または先行ノードを選択することにより、失敗したノードの代替ノードを判別する。
RP2。 1≦i≦n−1である場合、
RP2a。 z=Y.id±biを計算する。
RP2b。 リングdが最も特定的な近傍域ではない場合、ノードYが参加し、Y.sd.id<Y.id+bi<Y.sd+1.idまたはY.pd.id<Y.id−bi<Y.pd+1.idの条件を満足する近傍域リングを見つける。それ以外の場合、リングdを最も特定的な近傍域リングにする。リングdは、ノードYがzに最も近接するルーティングパートナーを探すべき近傍域リングである。仮にQを、Y.sd.r±iとY.pd.r±iとの間でzに数値的に最も近接するノードとする。|Q.id−z|がbiの構成可能な割合(通常20%)の範囲内である場合、単にY.r±i=Qとする。Q.idが(Y.sd.id±bi)または(Y.pd.id±bi)のいずれかよりもzに近接している場合、これはノードYが、Y.sdまたはY.pdよりも近傍域リングdにおいてノードQへのよりよいパートナールーティングノードであることを意味する。したがって、updateMsgがまだ送信されていない場合は、これをノードQに送信して、ノードQがr.jにおけるそのパートナールーティングノードとしてノードYを確立することができるように、iおよびノードYをパラメータとして供給する。
RP2c。 このフェーズ状態が平衡化手順の一部として実行されている場合、およびY.sd.r±i.id=Y.pd.r±i.idである場合、(Y.sd.id±bi)と(Y.pd.id±bi)との間の数値範囲には1つのノードしかない。そのノードは、後続(または先行)ノードのルーティングノードr±iによって指し示されるノードである。したがって、単にY.r±i=Y.sd.r±i.iとする。
RP2d。 それ以外の場合、近傍域基準をリングdの近傍域基準に設定されたノードQでRouteProximallyを呼び出すことにより、ルーティングパートナーY.r±iを計算する。これは、Y.r±i=Q.RouteProximally(z,updateMsg,d)を暗示する。
RP3。この時点において、ノードYは、そこに向けられたメッセージを処理できるだけではなく、ルートメッセージも処理することができる。
RP4。まだ行われていない場合、パートナールーティングノードのエンドポイントIDのアプリケーション層から送信された活性通知イベントをサブスクライブする。さらに、もはやパートナールーティングノードではないノードのアプリケーション層で以前確立された、任意の活性イベントサブスクリプションを呼び出す。例えば、サブスクリプションおよび/または呼び出し要求は、対応するアプリケーション(例えば、ネームスペースアプリケーション)のpub−sub(パブリック−サブスクライブ)論理を実施するアプリケーション層(例えば、アプリケーション層121)まで渡されてもよい。その後のアプリケーション固有の活性メッセージ(例えば、ネームスペースサブスクリプションの結果生じたもの)がアプリケーション層において受信されると、通知(イベント)は、処理のために他の下位層(例えば、他の下位層131)まで押し下げられる。
図17は、ファンクション層1751とアプリケーション層1752との間に発生しうる多数の活性インタラクションの例を示す。図17に示されるように、エンドポイントは、例えば、様々なノードを表す(例えば、URLまたはURIによって表される)パブリッシュ/サブスクリプショントピックであり、例えば、フェデレーションインフラストラクチャノードであってもよい。Subscribe To Liveness Event1701は、活性イベント(例えば、パブリッシュ/サブスクライブトピック)をサブスクライブするために、ファンクション層1751からアプリケーション層1752に呼び出すことができる。Revoke Liveness Subscription1702は、活性イベントへのサブスクリプションを呼び出すために、ファンクション層1751からアプリケーション層1752に呼び出すことができる。End Point Down1703は、エンドポイントが停止している可能性があることを示し、ファンクション層1751にオプションの代替エンドポイントを提供するために、アプリケーション層1752からファンクション層1751に送信することができる。End Point Down Event1703は、以前のサブスクリプション(例えば、Subscribe To Liveness Event1701)に基づいて非同期的に送信することができる。
Node Down1704は、ファンクション層1751(または、何らかの他の下位層)が故障した(failed)ノードを検出したことを示し、オプションでアプリケーション層1752に代替ノードを提供するために、ファンクション層1751からアプリケーション層に呼び出すことができる。続いて、アプリケーション層1752は、故障している可能性のあるノードが検出されたことをその他の関係者に伝搬することができる。Node Down Event1704を、ファンクション層1751またはその他の下位層が故障した可能性のあるノードを検出したとき、いつでも非同期的に送信することができる。Send Liveness1706は、(例えば、Node Down Event1704またはその他のアウトオブバンド機構から)ノードが停止していることをアプリケーション層1752が検出したとき、アプリケーション層1752からファンクション層1751に呼び出すことができる。Send Liveness Event1706は、ファンクション層1751に活性メッセージを送信させることができる。Send Liveness Event1706はまた、アプリケーション層1752が、ノードが停止しており(活性のサブスクライブを介して)以前確立されたサブスクリプションに依存していないことを検出すると、いつでも非同期的に呼び出すことができる。
したがって、一部の実施形態において、ファンクション層1751は再帰的に使用される。例えば、ファンクション層1751は、指定されたノード(例えば、上または下の特定のノード)へのインタレストをアプリケーション層1752に示すことができる。アプリケーション層1752は、指定されたノードに関連する通知に対してアプリケーション固有のサブスクリプションを形成することができ、次いで、形成されたサブスクリプションを、その他のフェデレーションノードの適切な対応するアプリケーション層1752に伝達するために、ファンクション層1751を再使用することができる。例えば、フェデレーションノード内のアプリケーション層1752がネームスペースpub/sub動作を実施した場合、ファンクション層1751は、指定されたノードの通知を管理するパブリッシュ/サブスクライブマネージャに、サブスクリプションをルーティングすることができる。このパブリッシュ/サブスクライブマネージャは、関連するフェデレーションノードにおいてアプリケーション1752の少なくとも一部として実装される。したがって、ファンクション層1751は、ファンクション層1751が生成させたサブスクリプションをルーティングするために使用される。同様の再帰的機構はまた、アンサブスクライブするか、または指定されたノードにもはやインタレストがないことを示すために使用することができる。
動作フェーズ:ルーティングフェーズ状態が完了した後、ノードは、動作フェーズ状態に移行する。ノードは、停止する(例えば、リブートする)まで、動作フェーズ状態にとどまることができる。動作フェーズ状態において、ノードは、更新メッセージをルーティングパートナーに適宜送信することができる。更新メッセージ(更新要求および更新応答)は、送信側ノード(例えば、対象となるすべての近傍近隣)の近隣ノード活性情報を含むことができる。この送信される活性情報はまた、送信側の活性情報も含むことができる。更新メッセージは、そのルーティングパートナーノードを定期的に更新するためにノードによって発信された、ルーティングされたメッセージであってもよい。アプリケーションデータは、ルーティングパートナーの更新中にアプリケーションデータが伝搬されるように、更新メッセージで結合することができる。メッセージ宛先は、所望のルーティングインデックスにおいて完全なルーティングパートナーの識別に設定される。このメッセージのMessage IDプロパティは、このメッセージを処理するノードが最新メッセージを判別することができ、このメッセージが近位にルーティングされるように、アプリケーションシーケンス番号を割り当てられる。
更新メッセージを受信するノードは、更新応答で応答することができる。更新応答は、データが応答側ノードの観点からであることを除き、更新メッセージと同様のデータを搬送する。更新メッセージおよび更新応答の交換を通じて、ノードは、ルーティング情報を交換することができる。随時、動作ノードは、ルーティングパートナーを更新することができる。
随時、動作ノードはまた、pingメッセージ(例えば、pingメッセージ1609および1611)を送信することもできる。pingメッセージは、ノードによって送信される単方向メッセージであり、その存在を定期的に宣言し、その近隣/ルーティングノードおよび複製(例えば、結合された)アプリケーションデータに関してその近隣内に情報を広める。
発信元ノードは、その直後の後続近隣ノードまたは直前の先行近隣ノードのうちの1つまたは複数にpingメッセージを送信することができる。したがって、ping分布パターン(つまり、どのノードがpingメッセージを送信されるか)に応じて、発信元ノードに関連する情報が、発信元ノードの近隣内のリングで他のノードに伝搬される。例えば、発信元ノードは、その直前の先行ノードおよび直後の後続ノードのみにpingメッセージを送信することができ、pingメッセージは、発信元ノードの位置(ノードID)からにリングに沿って両方向に発信元の近隣の端まで外側に伝搬する。代替として、発信元ノードは、その先行および後続の両方向に、その近隣のn番目のノードごとにpingメッセージを送信することができる。
pingメッセージを受信する各ノードは、近隣の範囲の観点から、発信元ノードへのそのインタレストを確認する。インタレストがない場合、ノードはpingメッセージを廃棄する。インタレストがある場合、ノードはpingメッセージを処理して、転送に制約がある場合はその指定されているpingパターンに従ってpingメッセージを発信元ノードの近隣に転送する。例えば、pingメッセージを処理した後、受信側ノードは、送信側および発信側ノードがその先行ノードセットにある場合は少なくともその後続ノードに、また送信側および発信側ノードがその後続ノードセットにある場合は少なくともその先行ノードに、pingメッセージを転送することができる。
したがって、pingメッセージの外側への伝搬は、メッセージが発信元ノードの周囲の近隣ノードセットの端に到達したときに停止する。pingメッセージのMessage IDプロパティは、このメッセージを処理するノードが発信元ノードから最新メッセージを判別して処理の重複または不必要な転送を防ぐことができるように、アプリケーションシーケンス番号を割り当てられる。
図16に戻って参照すると、pingメッセージ1609は、ファンクション層1651において近隣ノードから受信することができる。アプリケーションデータ1612(例えば、ネームスペースサブスクリプション)は、pingメッセージ1609に結合することができる。ファンクション層1651は、pingメッセージに含まれている任意のアプリケーションデータについてアプリケーション層1652に知らせることができる。同様に、ファンクション層1651は、同期要求メッセージに含まれている任意のアプリケーションデータについてアプリケーション層1652に知らせることができる。これらのいずれの場合の移動も、アプリケーションデータ1612を含む、近隣状態同期イベント1603をアプリケーション層1652に送信することを介して、達成することができる。
一部のファンクション層イベント(例えば、受信したpingメッセージ1609)に応答して、ファンクション層1651は、近隣状態要求1604をアプリケーション1652に送信することができる。近隣状態要求1604は、近隣にオプションで伝搬される必要のある状態を取得するためにアプリケーション層1652で呼び出される。近隣状態要求1604に応答して、アプリケーション層1652は、オプションのアプリケーションデータ1607を含む近隣状態1606をファンクション層1651に返すことができる。ファンクション層1651は、近隣およびルーティングパートナーノード活性情報、さらにオプションのアプリケーション層近隣状態を伝搬するため、オプションのアプリケーションデータ1607を含むpingメッセージ1611を送信することができる。ファンクション層1651はまた、アプリケーション状態を伝搬するために、オプションのアプリケーションデータ1607を含む同期応答1608を送信することができる。
離脱プロトコル
ノードがフェデレーションから離脱することが適切である場合、ノードは、フェデレーションから正常終了して除去されるようにDepart関数を実施することができる。ノードは、その直前の近傍先行ノードおよび直後の近傍後続ノード、ならびにおそらくは同じ近傍近隣内の他のノードのうちの1つまたは複数に離脱メッセージを送信することにより、既存のフェデレーションを離脱する。したがって、離脱分布パターン(つまり、どのノードが離脱メッセージを送信されるか)に応じて、発信元ノードに関連する情報が、離脱するノードの近隣内のリングで他のノードに伝搬される。離脱メッセージは、正常に離脱するノードによって発信される単方向メッセージであり、少なくとも1つのその近傍近隣内の1つまたは複数の他のノードに、その差し迫った離脱を知らせる。離脱するノードは、pingメッセージの伝搬と類似した方法で、(例えば、その近隣内に)離脱メッセージを伝搬する。例えば、ID30を有するノードは、ID17および40を有するノードに離脱メッセージ1219を送信することができる。次いで、ID30を有するノードは、所定の近傍リングの観点から、自身をフェデレーションインフラストラクチャから外すことができる。ノードは1つの近傍近隣から自身を外すことができるが、属している他のノードを外すことはできないことに留意されたい。
ID17および40を有するノード(つまり、先行および後続ノード)は、ID30を有するノードが外された後にID30に最も近接するノードとなる可能性が高く、ID17および40を有するノードは、ID30を有するノードの離脱について認識させられる。したがって、ID30に配信されるべき今後のメッセージを、ID17および40を有するノードにおいて適切に処理することができる。ID17および40を有するノードは、ID30を有するノードの離脱を、リング1206の他のノードに伝搬することができる。ID30を有するノードがない場合、ID17および40を有するノードはまた、相互を指し示す可能性がある先行および後続ポインタを、再計算することもできる。
離脱メッセージのMessage IDプロパティは、離脱メッセージを処理するノードが、発信側ノードによって送信された一連のpingおよび離脱メッセージの中で最新メッセージを判別することができるように、pingメッセージと同じアプリケーションシーケンス番号を割り当てられる。フェデレーション近傍リングからの正常な離脱はオプションであるが、推奨される。しかし、フェデレーションは、ノードが突然に離脱する場合、自己回復するように設計される。
活性
フェデレーションの存続期間中、ノードは、フェデレーションを保持するために活性情報を交換することができる。活性情報は、Liveness Message Headerの形態で、フェデレーション内で交換される実質的にすべてのメッセージに含まれる。例えば、参加メッセージ、参加応答、同期メッセージ、同期応答、更新メッセージ、更新応答、アプリケーション固有メッセージ、活性メッセージ、およびpingメッセージはすべて、活性情報ヘッダを含むことができる。フェデレーションノードが任意のメッセージまたは応答を送信する場合、ノードは、その他のノードによる処理のための活性情報を含むことができる。活性情報は、活性メッセージの活性情報ヘッダに含まれている。
ノードの活性状態を示す活性情報は、以下のプロパティを使用して表すことができる。
[Node]:活性状態を表しているノードを識別する。ノードは、[Instance ID]をさらに含む[Reference Properties]に基づいて識別することができる。
[Reference Properties]:WSアドレッシング仕様で規定されている要素情報項目。WSアドレッシングは、参照プロパティセットに含めるための[Instance ID]参照プロパティを定義する。
[Instance ID]:ノードの特定のインスタンスを識別する数字。増分ブートカウントを、ノードのインスタンスIDとして使用することができる。
[Phase]:識別されたノードのフェーズを伝達する。
[Phase−State Value] 示されたノードインスタンスが達成したと認識された最高フェーズ状態(挿入、同期、ルーティング、動作)を伝達する。
[Phase.Unknown Indication] 現行フェーズが既知または未知であるかどうかを伝達するインジケータ。
[Freshness]:情報の新しさ、および0からMaxFreshnessまでのその値を伝達する。値が高くなれば、それに応じて情報は新しいものになり、0は情報がないことを示し、MaxFreshnessはプロトコル定義の定数である。
[Color]:ノードが属している近傍域等価クラスを識別する。同じカラー値を持つ2つのノードは、カラー値によって識別された同じ等価クラスに属すので、常に近位に最も接近していると見なされる。より多くのノードがフェデレーションに参加するので、近位等価クラスの数は、時間の経過と共に増大することができる。
[Weight]:ノード容量メトリック、および0からMaxWeightまでのその値の範囲を供給する。これは、大規模計算能力、高いネットワーク帯域幅、長いアップタイムなど、フェデレーションノードの望ましい特性を測定する。値が高くなれば、それに応じて、ノードの能力は高まり、パートナーシップの観点からより望ましくなる。
一部の環境において、ノードの[Node]および[Freshness]プロパティは、[Origin]および[Sender]メッセージヘッダなどのより大きい範囲で黙示的または明示的に伝達され、したがって、活性ヘッダに再度上記のプロパティを含めることは重複することになる。例えば、メッセージの送信者は、その現行のフェーズ、カラー、および重みの情報をそのIDとして伝達する必要があるだけであり、インスタンスIdはメッセージアドレッシングヘッダで供給され、その新しさ(Freshness)が黙示的に示される。
活性状態は、以下のように定義される「<」2項関係に基づいて、少なくとも部分的に順序付けることができる。
「L1<L2」は、以下の場合に真である。
1.「L1.[Node].[Name]=L2.[Node].[Name]」が真であり、以下のうちの1つが、リストされている順序で実行され短絡されたテストで真である。
・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]
2.「L1.[Color]=L2.[Color]」が真であり、以下のうちの1つが、リストされている順序で実行され短絡されたテストで真である。
・L1.[Phase-State] <L2.[Phase-State]
・L1.[Weight] < L2.[Weight]
さらに、指定されたノードが使用不可能になった(例えば、停止した)ことが検出されるかまたは疑われる場合、活性「ダウン(down)」メッセージを、指定されたノードに送信することができる。一例として、アプリケーション層(例えば、アプリケーション層121)が、別のアプリケーション層(例えば、アプリケーション層123)またはその別のアプリケーション層をホスティングするノードが機能停止していることを検出した場合、その検出側アプリケーション層は、例えばメッセージモデルおよび関連する処理モデル1600および/または1760に従って、ノードが停止している可能性があることを、他の下位層(例えば、他の下位層131)に通知することができる。そのような通知は、例えば、ファンクション層1651などの他の下位層に、活性ダウンメッセージを送信させることができる。これは、活性ダウンメッセージの生成に対する刺激の一例にすぎない。
活性ダウンメッセージは、停止していることが疑われるノードに最も接近するノードにルーティングされて配信されるので、指定されたノードの活性ダウンメッセージがその指定されたノードに戻されて配信された場合、その指定されたノードが停止していないか、または指定されたノードが異なるインスタンスである(例えば、異なるインスタンスID)である。一方、活性ダウンメッセージが別のノードに配信された場合、その指定されたノードが停止していることを示す。したがって、活性ダウンメッセージを受信するノードが、自身を、指定されたノードの近傍近隣にあると見なす場合、それは、前述のようにその近傍近隣への指定されたノードの離脱メッセージをたどって、指定されたノードが停止している可能性があること、および受信側ノードがその代替であることを、(例えば、Node Down1704を使用して)そのアプリケーション層に示すことができる。指定されたノードの活性ダウンメッセージは、その目標IDを停止している可能性のあるノードのIDに設定して近位にルーティングすることができる。
平衡化手順
本発明の実施形態は、短期間にフェデレーションに参加および離脱する多数のノードに対応するように設計される。ネットワークのそのような変化は、様々なノードにおいて保持される対数検索ツリーが平衡を失った場合、ルーティングの遅延を引き起こす可能性がある。つまり、リングの一方の側に、他方よりも多くのノードがあるような場合である。最適なルーティング効率を実現するため、フェデレーションに参加しているノードは、特定の基準が満たされたときに平衡化手順を実行する。
例えば、以下の条件のいずれかが真である場合、任意のノードは、平衡化手順を実行して最適なルーティング効率のための平衡化ルーティングテーブルを確保することができる。
・設定された数の前述の活性メッセージが受信された。
・前述の活性メッセージの前回の受信以降、設定された時間数が経過した。
・新しいノードが到達したか、または既存のノードが離脱したという意味で、近隣が変化した。
ルーティングテーブルの平衡化は、単純なプロセスである。例えば、平衡を失ったルーティングテーブルを持つノードは、Joinプロトコルの同期化およびルーティングフェーズ状態を再実行することができる。
動作RP2b、RP2d、およびRP4は、1)数値に最も近接するルーティングノードを見つけること、2)フェデレーションを正常に離れるノードが後に続く離脱プロトコル、および3)活性メッセージを受信するノードが後に続く平衡化手順と相まって、連合するノードがネットワークをかなり迅速かつ多数で参加および離脱するとき、より高速な回復システムをもたらす。
状況メッセージ
状況メッセージは、受信側ノードによって送信側ノードに送信される非ルーティングメッセージであり、送信側ノードが以前受信側ノードに転送した相関関係のあるメッセージのルーティング成功/失敗を知らせる。図18は、要求−応答メッセージ交換パターンのメッセージ形成部分が、リング上のノードにわたりルーティングされる方法の例を示す図である。状況メッセージは、ルーティング状況が報告されている元の相関メッセージを識別するヘッダを含むことができる。したがって、状況メッセージは、メッセージが、あるノードから次のノードへ正常にルーティングされたことを示すためにノード間で使用することができる。例えば、ノード1801からノード1806へのルーティング要求メッセージ1811は、ノード1802、1803、1804、および1805を経由して要求1811を送信することを含む。対応するカスケード成功状況メッセージ(状況1817、1818、1819、1820、および1821)は、それぞれ、ノード1806からノード1805へ、ノード1805からノード1804へ、ノード1804からノード1803へ、ノード1803からノード1802へ、およびノード1802からノード1801へと送信することができる。要求1811に応答して、応答1816は、ノード1807からノード1801へと終端間で送信することができる。応答1816はオプションであり、単方向メッセージ交換パターンにおいてはなくてもよい。
図13は、ノードがフェデレーションインフラストラクチャに参加する方法1300を示す例示の流れ図である。方法1300は、図12Aおよび12Bにおけるリング1206に関して説明される。方法1300は、参加メッセージをフェデレーションインフラストラクチャに発行する動作を含む(動作1301)。例えば、ID144を有するノードは、リング1206を含むフェデレーションインフラストラクチャに参加1201を発行することができる。方法1300は、参加するノードから参加メッセージを受信する動作を含む(動作1308)。例えば、リング1206を含むフェデレーションインフラストラクチャ内の既存のノードは、参加1201を受信することができる。
方法1300は、参加メッセージを処理ノードにルーティングする動作を含む(動作1309)。処理ノードは、参加メッセージがルーティングされる時点においてフェデレーションインフラストラクチャ内の他のアクティブなノードよりも参加ノードのIDに数値的に近接するIDを有するノードとすることができる。例えば、参加1201は、最初にID64を有するノードにおいて受信されて、ID151を有するノードにルーティングする、ID135を有するノードにルーティングされてもよい。
方法1300は、参加するノードの1つまたは複数の先行ノード、ならびに1つまたは複数の後続ノードを計算する動作を含む(動作1310)。例えば、ID151を有するノードは、ID144を有するノードの直前の先行ノードおよび直後の後続ノードを計算することができる。リング1206内で、ID151を有するノードは、ID135を有するノードが直前の先行ノードであり、ID151を有するノードが直後の後続ノードであることを計算することができる。同様の計算を、その他の近傍リングについて行うことができる。
方法1300は、参加するノードの1つまたは複数のルーティングノードを計算する動作を含む(動作1311)。例えば、ID151を有するノードは、ID144を有するノードのルーティングノードを(ID151を有するノードの観点から)計算することができる。リング1206内で、ID151を有するノードは、例えば、ID218および40を有するノードが、ID144を有するノードのルーティングノードであることを計算することができる。同様の計算を、その他の近傍リングについて行うことができる。
方法1300は、参加するノードに参加応答を送信する動作を含む(動作1312)。参加応答は、フェデレーションインフラストラクチャの現行ビューを与えられて処理ノードによって計算されたように、参加するノードの先行および後続の近隣およびルーティングパートナーノードをすべて識別することができる。例えば、参加応答1202は、少なくともID135を有するノードを、ID144を有するノードの直前の先行ノードとして識別することができ、ID151を有するノードを、ID144を有するノードの直後の後続ノードとして識別することができ、ノードID144(新しく参加するノード)についてID151を有するノードにおいて計算された(ID144を有するノードの)任意のルーティングノードを識別することができる。
方法1300は、参加メッセージを処理したフェデレーションノードから参加応答を受信する動作を含む(動作1302)。例えば、ID144を有するノードは、ID151を有するノードから参加応答1202を受信することができる。
方法1300は、直前の近傍先行ノードおよび直後の近傍後続ノードの少なくとも各々に同期要求を送信する動作を含む(動作1303)。例えば、ここで図12Bを参照すると、ID144を有するノードは、ID135および151を有するノードに同期要求1203を送信することができる。同期要求1203は、ID144を有するノードの任意の近隣ノードの識別、および/またはID144を有するノードの任意のルーティングパートナーの識別を含むことができる。
ID135および151を有するノードは、同期要求1203を受信することができる。同期要求1203の受信に応答して、ID135および151を有するノードは、対応するルーティングテーブルからそれらの近隣およびルーティングパートナーノードを識別することができる。ID135および151を有するノードは、同期応答1204内に、それらの識別された近隣およびルーティングパートナーノードの活性情報を含むことができ、ID144を有するノードに同期応答1204を送信することができる。
方法1300は、近傍先行および後続ノードの各々から同期応答を受信する動作を含む(動作1304)。例えば、ID144を有するノードは、ID135および151を有するノードから同期応答1204を受信することができる。同期応答1204は、フェデレーションインフラストラクチャ内のリング1206または他のリング上の1つまたは複数のノードの活性情報を含むことができる。同期応答1204はまた、ID144を有するノードの見込み(prospective)ルーティングパートナーノードを識別することができる。
方法1300は、近隣ノードを計算する動作を含む(動作1305)。例えば、ID144を有するノードは、ID135および151を有するノードの近隣ノードの和集合に基づいて、対応する近隣ノードを計算することができる。近隣ノードは、参加応答メッセージおよび任意の同期応答メッセージの集約されたビューに基づいて計算することができる。
方法1300は、ルーティングノードを計算する動作を含む(動作1306)。例えば、ID144を有するノードは、リング1206のノードの中からルーティングノードを計算することができる。ルーティングパートナーは、参加応答メッセージおよび任意の同期応答メッセージの集約されたビューに基づいて計算することができる。
方法1300は、少なくとも近隣ノード情報を、計算されたルーティングパートナーと交換する動作を含む(動作1307)。例えば、ID144を有するノード、およびID218を有するノード(計算されたルーティングパートナー)は、それらのそれぞれの近隣ノードに対応する状態情報(例えば、インスタンスID、フェーズ状態など)を交換することができる。これらの交換は、上記のルーティングフェーズ状態において説明されている少なくとも各々の一意の計算されたルーティングパートナーまで更新メッセージをソーシング(ルーティング)する、新しく参加するノードによって達成される。更新メッセージを処理するノードは、新しく参加するノードからのこれらの更新メッセージの受信に対して、対応する更新応答メッセージを送信する。更新応答メッセージは、少なくとも自身およびその近隣ノードの活性情報を含む。
方法1300はまた、少なくとも1つの近隣ノードへのルーティングテーブルの初期伝搬を開始する動作を含むことができる。例えば、ID144を有するノードは、計算された近隣およびルーティングパートナーノードをpingメッセージに含むことができ、pingメッセージを、ID174を有するノード(例えば、計算された近隣ノードの1つ)に送信することができる。ID174を有するノードは、pingメッセージを受信して、ID144を有するノードにおいて発信された活性情報で、対応するルーティングテーブルを更新することができる。ID174を有するノードはまた、その対応するルーティングテーブルを第2のpingメッセージに含むことができ、将来のある時点で第2のpingメッセージを、ID144を有するノードに送信することができる。ID144を有するノードは、第2のpingメッセージを受信して、その対応するルーティングテーブルを、第2のpingメッセージに含まれる活性情報内のノード(つまり、ID174を有するノードのルーティングテーブル内のノード)で更新することができる。ID144を有するノードは、リング1206内の他の近隣ノードでpingメッセージの送信を繰り返すことができる。
新しく参加するノードがフェデレーションに参加するとき、新しく参加するノードは、既存のフェデレーションメンバーを見つけることができない場合もあり、そのため単独のメンバーとなる場合もあることを理解されたい。したがって、新しく参加するノードには、先行、後続、または近隣ノードが割り当てられていないこともある。そのため、新しく参加するノードは、あらゆる場合において、最善のルーティングパートナーとしてマップされる。
さらに、方法1300が単独のリング(リング1206)に関して説明されていても、一部の実施形態において、1つのリングに参加するノードは本質的に、1つまたは複数の他のリングにも参加することを理解されたい。例えば、戻って図5を簡単に参照すると、リング551において参加するノードはまた、リング543、531、522、511、および501にも参加する。したがって、方法1300は、複数のリングに参加するように実施されてもよい。その他の実施形態において、方法1300の動作の一部または全部は、複数のリングに参加する場合に繰り返されてもよい。例えば、図5を再度参照すると、1300の動作のうちの1つまたは複数は、ノードがリング551およびリング514の両方に参加する場合(例えば、別名割り当て)繰り返されてもよい。いずれにしても、参加するノードIDに、アクセスし、ソートされたリンクリスト内、および参加するノードが参加すべき階層的に区分された対応するサブリスト内の参加するノードを識別するために使用することができる。受信側ノードは、ソートされたリンクリストおよび区分された各サブリストから識別される。参加メッセージは、ソートされたリンクリストおよび分割された各サブリスト内の処理ノードに(例えば、IDに基づいて)ルーティングされる。参加応答は、ソートされたリンクリストおよび区分された各サブリスト内の処理ノードから受信される。
図14は、ノードがフェデレーションインフラストラクチャ内のメンバーシップを保持する方法1400を示す例示の流れ図である。方法1400は、リング1206に関して説明される。方法1400は、第1のpingメッセージを近隣ノードに送信する動作を含む(動作1401)。第1のpingメッセージは、第1のpingメッセージを送信する現行ノードが近隣ノードの近隣であることを示す。第1のpingメッセージはまた、ルーティングパートナーと、現行ノードの近隣ノードの状態も含むことができる。例えば、ID144を有するノードは、ID151を有するノードにpingメッセージを送信することができる。第1のpingメッセージを受信すると、ID151を有するノードは、ID144を有するノードが、ID151を有するノードの近隣であることを認識させられる。ノード151はまた、この動作の副次作用として、ノード144からの(リング1206上の他のノードの)より新しい活性情報を発見することができる。
pingメッセージは、例えば、pingメッセージが送信されるべき近傍リングに関連付けられている構成状態に基づいて、指定された頻度で定期的に繰り返すことができる。頻度は、構成状態に応じて異なっていてもよい。例えば、WAN用に指定されたping頻度は、LAN用に指定された頻度とは異なっていてもよい。pingメッセージはまた、ping分布パターンに従って送信することができる。発信元ノードのping分布パターンは、pingメッセージが、リング上の両方向の近隣ノードに送信されるべきであることを示すことができる。例えば、ID144を有するノードは、ID135を有するノードの方向、およびID151を有するノードの方向の両方にpingを送信することができる。ping分布のパターンおよび頻度は異なっていてもよい。例えば、近傍域リングごとに異なっていてもよい。
方法1400は、第2のpingメッセージを近隣ノードから受信する動作を含む(動作1402)。第2のpingメッセージは、少なくとも第2のpingメッセージを発信する近隣ノードが現行ノードの近隣であることを現行ノードに示す。第2のpingメッセージはまた、ルーティングパートナーと、発信元近隣ノードについての近隣ノードの状態も含むことができる。例えば、ID151を有するノードは、ID144を有するノードに第2のpingメッセージを送信することができる。第2のpingメッセージを受信すると、ID144を有するノードは、ID151を有するノードが、ID144を有するノードの近隣であることを認識させられる。第2のpingメッセージはまた、リング1206上の他のノードの活性情報を含むことができる。したがって、一般に、pingメッセージは、近隣内で交換することができ、(各近傍メンバーシップについて)近隣メンバーシップと、フェデレーション内のノードの存在の接近する共通の近隣ビューを保持するために使用することができる。
受信されたpingメッセージは、pingが発信された(発信元ノードによって送信された)近傍近隣内の他のノードに定期的に繰り返す/転送することができる。転送されるpingメッセージはまた、ping分布パターンに従って送信することができる。転送側ノードのping分布パターンは、pingメッセージが、発信元ノードから離れる方向の近隣ノードに送信されるべきであることを示すことができる。例えば、ID1151を有するノードは、ID144を有するノードにおいて発信するpingを、ID174を有するノードの方向に転送することができる。ping転送分布パターンは、例えば、近傍域リングごとに異なっていてもよい。
ノードは、対応する間隔でpingメッセージを受信するように構成することができる。予想されるpingメッセージが受信されない場合、ノードは、通信障害であると解釈して、別のノードのPhase.Unknownの表示を、予想されるが少なくとも遅延しているpingメッセージを発信すべきノードに対して、真に設定することができる。
方法1400は、更新要求メッセージを完全なルーティングノードに近位にルーティングする動作を含む(動作1403)。更新要求メッセージは、現行ノードが受信側ルーティングノードのルーティングパートナーとして参加していることを、そのようなルーティングされた更新要求を受信するルーティングノードに示す。更新要求メッセージはまた、少なくとも現行ノードの近隣ノードの識別(例えば、活性情報の形態で)を含むことができる。例えば、ID144を有するノードは、ID208を有するノードに更新メッセージ1216をルーティングすることができる(144から64でオフセットされた完全なルーティングパートナー)。ノード210(以前計算されたルーティングノード)は208に最も接近しているので、これはルーティングされた更新要求を受信して処理する。更新メッセージ1216を受信すると、ID210を有するノードは、ID144を有するノードが、ID210を有するノードのルーティングパートナーであることを認識させられる(または、強調される)。
方法1400は、処理側(受信側)ルーティングノードから更新応答メッセージを受信する動作を含む(動作1404)。更新応答は、処理側ルーティングノードが現行ノードのルーティングパートナーとして参加していることを、現行ノードに示す。更新応答メッセージはまた、少なくとも処理側ルーティングパートナーの近隣ノードの識別も含むことができる。例えば、ID210を有するノードは、ID144を有するノードに更新応答1207を送信することができる。更新応答1207を受信すると、ID144を有するノードは、ID210を有するノードが、ID144を有するノードのルーティングパートナーであることを認識させられる。
方法1400はまた、現行ノードおよび近隣ノードが近隣として参加しており、現行ノードおよび近隣ノードがルーティングパートナーとして参加していることを示すために、ノード情報を適切に更新する動作を含むことができる。例えば、ID144を有するノードは、ID144および141を有するノードが(近傍)近隣に参加していることを示すために、ID151を有するノードに対応するノード情報を更新することができる。同様に、ID144を有するノードは、ID144および210を有するノードがルーティングパートナーとして参加していることを示すために、ID210を有するノードに対応するノード情報を更新することができる。
一部の実施形態において、指定されたノードXにおいて保存されたアプリケーション状態は、信頼できるフラッディングプロトコルを使用してそのNeighborhood(X)ノードの間で複製される。アプリケーション状態の各項目(item)は、割り当てられたオーナーを有しており、該オーナーは、項目を作成したエンドポイントであってもよい。アプリケーション状態の各項目はまた、そのオーナーによって与えられる、割り当てられたタイムスタンプ(シーケンス番号とも呼ばれる)を有する。タイムスタンプは、少なくとも以下の3つのコンポーネントを有する。
・所有するエンティティのインスタンスID(例えば、符号なし整数)。少なくとも単調(>1)増加する必要がある。
・オーナーによって生成された特定のシーケンスを識別するシーケンスID(例えば、URI)。このコンポーネントにより、同じオーナーが複数の独立したシーケンスを生成することができる。
・識別されたアプリケーションシーケンスID内のオフセットを識別する序数(例えば、符号なし整数)。
項目タイムスタンプは、<Instance ID,Sequence ID,およびOffset>の三重項で少なくとも半順序を生成するので、項目タイムスタンプは、複製中に対応する項目に関連付けられている最新の情報を検出するために使用される。複製されている項目に関連付けられているタイムスタンプは、最新のタイムスタンプを検出するため、ローカルのタイムスタンプ(ある場合)と比較される。項目タイムスタンプはまた、作成/更新/削除オペレーションの冪等(idempotent)セマンティックをサポートするために使用される。例えば、アプリケーション状態において既存の項目を更新するよう求める要求をノードが受信した場合、更新は、更新要求に関連付けられているタイムスタンプがローカル項目に関連付けられているタイムスタンプよりも高い場合に限り受け入れられる。ベクトルタイムスタンプに基づく競合解決技法は、項目が単一のオーナーに割り当てられない場合に使用されてもよい。アプリケーション状態の複製は、耐障害性をもたらし、近隣ノードにわたるロードバランシング要求を容易にする。
オプションの動作として、(起点)他のパートナー(ルーティングおよび/またはパートナー)ノードから、予想される更新またはpingを(ある時間が経過した後)検出しなかったノードは、フェーズ状態が不明であると見なして、Phase.Unknown表示を真に設定し、そのように他のサードパーティノードに報告することができる。つまり、更新およびpingの定期的な生成が必要とされる可能性がある。この要件および実際のタイムアウト値は、様々な近傍リングの属性であってもよい。例えば、リングは、(例えば、LANセグメント内の)一部のサブリングについて、より限定的なタイミング要件を有することもでき、ノード障害検出/報告は比較的迅速である。一方、リングは、(例えば、インターネット上の)他のサブリングについて、あまり限定的ではないタイミング要件を有する(またはタイミング要件がない)こともでき、事前のノード障害検出/報告は比較的時間を要する(または存在しない)。
図15は、別のノードの活性情報を発見する方法1500を示す例示の流れ図である。方法1500は、図12Aおよび12Bにおけるリング1206に関して説明される。一般に、例えば、同期1203、同期応答1204、更新1216、更新応答1207などの任意のメッセージは、少なくとも1つの活性ヘッダを含むことができる。一部の実施形態において、活性ヘッダは、あるノードの<ノードID、インスタンスID、フェーズ[phase-state value].[phase.unknown indication]、鮮度値、カラー(近傍域)値、および重み値>を含む。他の実施形態において、活性ヘッダは、<フェーズ[phase-state value].[phase.unknown indication]、鮮度値、カラー(近傍域)値、および重み値>を含む。これらの他の実施形態において、活性ヘッダは、送信側および発信側ノードのノードIDおよびインスタンスIDをすでに含むアドレッシングヘッダを増大させるために使用することができる。アドレッシングヘッダはすでにノードIDおよびインスタンスIDを含むので、この情報は、活性ヘッダから除外されてもよい。
方法1500は、フェデレーションインフラストラクチャに参加しているノードの状態情報を表す活性ヘッダを受信する動作を含む(動作1501)。活性ヘッダは、少なくとも受信された参加ノードID、受信されたノードのインスタンスID、受信されたフェーズ値、および受信された鮮度値を含む。例えば、ID144を有するノードは、ID151を有するノードから同期応答1204内で第1の活性ヘッダを受信することができる。第1の活性ヘッダは、ID174を有するノードの<参加ノードID、インスタンスID、フェーズ値[phase-state value].[phase.unknown indication]、鮮度値、カラー(近傍域)値、および重み値>を含むことができる。フェーズ状態値(例えば、Inserting、Syncing、Routing、Operating)は、第1の鮮度値の時点において、ID174を有するノードの表現されたフェーズを識別する。フェーズ値(例えば、フェーズ状態:[Inserting、Syncing、Routing、Operating]、およびphase.unknown)は、第1の鮮度値によって示された時点において、ID174を有するノードの表現および/または検出されたフェーズ情報を識別する。
しかし、鮮度値は、通信の遅延の理由から無視することができる。鮮度値はまた、時間の経過と共に減衰する可能性がある。鮮度値の減衰曲線は、(不明を含む)様々なフェーズ状態に対して異なる可能性がある(ならびに、線形または対称とはならないこともある)。したがって、様々なノードフェーズにわたり、鮮度値の減衰は非線形および/または非対称であってもよい。
方法1500は、現行ノードにおいて保持される参加ノードの、少なくとも現行インスタンスID、現行フェーズ値、および現行鮮度値にアクセスする動作を含む(動作1502)。例えば、ID144を有するノードは、ID174を有するノードの、以前受信され格納されているインスタンスID、フェーズ値[phase−state value.][phase.unknown indication]、および鮮度値にアクセスすることができる。
方法1500は、少なくとも受信されたインスタンスID、受信されたフェーズ値、および受信された鮮度値を、それぞれ現行ノードにおける現行インスタンスID、現行フェーズ値、および現行鮮度値と比較する動作を含む(動作1503)。例えば、ID144を有するノードは、ID174を有するノードの、以前受信され格納されているインスタンスID、フェーズ値[phase−state value.][phase.unknown indication]、および鮮度値を、活性ヘッダで受信されたインスタンスID、フェーズ値[phase−state value.][phase.unknown indication]、および鮮度値と比較することができる。
ID144を有するノードは、(順に)第1のインスタンスIDがID174を有するノードの現在格納されているインスタンスIDよりも大きいことに基づいて、第1のフェーズ状態値がID174を有するノードの現在格納されているフェーズ状態値よりもさらに進んでいることに基づいて、または第1の鮮度値がID174を有するノードの現在格納されている鮮度値よりも大きい値であることに基づいて、ID174を有するノードの(例えば、ID151を有するノードから受信された)現在の状態情報が新しくないことを判別することができる。ID144を有するノードはまた、少なくとも1つの(現在格納されているかまたは活性ヘッダで受信された)phase.unknownの表示が、フェーズ状態が検出/伝送された時点でフェーズ状態が既知であったことを示すことを判別することができる。
方法1500は、参加するノードの状態情報が、比較に基づいて現行ノードにおいて更新されるべきであるかどうかを判別する動作を含む(動作1504)。例えば、ID174を有するノードの値の比較に基づいて、ID144を有するノードは、ID174を有するノードの状態情報が更新されるべきであると判別することができる。ID174を有するノードの古い状態情報を更新することは、現在格納されている値(例えば、インスタンスID、フェーズ状態値、phase.unknown表示、または鮮度値)を、活性ヘッダに含まれている値と置き換えることを含むことができる。例えば、ID144を有するノードは、ID174を有するノードがさらに進んだフェーズ状態に移行したことを示すために、ID174を有するノードの状態情報を更新することができる。
一部の実施形態において、参加するノードとの通信が失われていることを検出することができる。例えば、ID144を有するノードは、ID151を有するノードとの通信が失われたことを検出することができる。図17を簡単に参照すると、(ID151を有するノードのエンドポイントとの)活性イベント1701の以前のサブスクリプションに応答して、アプリケーション層1752は、(ID151を有するノードのエンドポイントとの)エンドポイントダウンイベント1703をファンクション層1751に送信することができる。これらの実施形態において、そのような検出された活性条件を、前回の既知のフェーズ状態値と共にPhase.Unknown表示が真に設定された活性情報において示すことができる。
方法1500はさらに、フェデレーションインフラストラクチャ内の第2の異なるノードから、第2の活性ヘッダを含むメッセージを受信する動作を含む。例えば、ID144を有するノードは、第2の活性ヘッダを含む状況メッセージを(ID103を有するノード、またはリング1206内の他のノードから)受信することができる。第2の活性ヘッダは、ID174を有するノードの<参加ノードID、第2のインスタンスID、第2のフェーズ値[phase−state value].[phase.unknown indication]、第2の鮮度値、第2のカラー(近傍域)値、および第2の重み値>を含むことができる。第2のフェーズ値(例えば、フェーズ状態:[Inserting、Syncing、Routing、Operating]、およびphase.unknown表示)は、第2の鮮度値の時点におけるID174を有するノードの表現/検出されたフェーズを識別する。
代替として、第1の活性ヘッダを受信した後、ID144を有するノードは、ID174を有するノードと直接に通信しようと試みることができる。通信が成功した場合、ID174を有するノードは、アドレッシングヘッダ内にノードIDおよび第2のインスタンスIDを有し、<第2のフェーズ値、第2の鮮度値、第2のカラー(近傍域)値、および第2の重み値>を含む活性ヘッダを有するメッセージ(例えば、同期応答)を返すことができる。障害が検出された場合、ID144を有するノードは、内部活性状態変更(例えば、鮮度(freshness)=最高(max)、およびphase.unknown表示=真(true))を生成し、状態変更が別のノードから受信されたかのように状態変更を処理する。そのような状態変更は、最高の鮮度値を有する。
方法1500はまた、第2のインスタンスID、第2のフェーズ値、および第2の鮮度値を、それぞれ現行インスタンスID、現行フェーズ値、および現行鮮度値と比較する動作を含むことができる(動作1506)。例えば、ID103を有するノードから状況メッセージを受信した後、ID144を有するノードは、(順に)第2のインスタンスIDが第1のインスタンスIDよりも大きいことに基づいて、第2のフェーズが第1のフェーズ値よりもさらに進んでいることに基づいて、または第2の鮮度値が第1のフェーズ値よりも大きいことに基づいて、ID151を有するノードの現在の状態情報が新しくないことを判別することができる。
方法1500はまた、参加するノードの状態情報が、比較に基づいて更新されるべきであるかどうかを判別する動作を含むことができる。例えば、ID174を有するノードの値の比較に基づいて、ID144を有するノードは、ID174を有するノードの状態情報が更新されるべきであると判別することができる。ID174を有するノードの古い状態情報を更新することは、現在格納されている値(例えば、インスタンスID、フェーズ状態値、phase.unknown表示、または鮮度値)を、第2の活性ヘッダに含まれている値と置き換えることを含むことができる。例えば、ID144を有するノードは、ID174を有するノードがさらに進んだフェーズ状態に移行したことを示すために、ID174を有するノードの状態情報を更新することができる。
一部の実施形態において、フェーズ値は、等しいカラー値というコンテキストの中で比較される。前述のように、ノードは、複数の近傍域リングに参加することができる。複数の近傍域リングへの参加は、(共通のスパインに沿った)より一般的なリングへの参加を意味する、より特定的なリングへの参加の結果として生じる可能性がある。例えば、図5に戻って参照すると、リング532へのノードの参加はまた、ノードがリング522、511、および501に参加することも意味する。したがって、より特定的なリングのカラーはまた、すべての親近傍リングを表す。さらに、前述のように、複数の近傍域リングへの参加は、1つのリング内のノードが(異なるスパインに沿う可能性のある)1つまたは複数の他のリングに別名割り当てされるときに生じる可能性がある。例えば、引き続き図5を参照すると、リング532に参加しているノードを、リング531(またはリング531、522、511、および501への参加を意味するリング541)に別名割り当てすることができる。したがって、1つのリング(例えば、リング531)のカラーは、別のリング(例えば、リング532)のピアカラー(または近傍域)と見なすことができる。
ノードが別名割り当ての方法で複数の近傍域リングに参加する場合、ノードのフェーズ値(例えば、フェーズ状態値および/またはphase.unknown表示)が、様々な近傍域リングの間で異なる可能性が一部ある。したがって、別のノードの状態情報を受信するノードは、現在の状態情報がそのノードおよびカラーに対して更新されるべきであるかどうかを判別する前に、状態情報(カラー)について、対応する近傍域リングを識別する。例えば、ID144を有するノードは、受信された状態情報を現在の状態情報と比較する前に、ID174を有するノードに対応する受信された状態情報の対応する近傍域リングを識別することができる。
適切な近傍域リングを識別することは、受信されたカラー値を、1つまたは複数の現行カラー値と比較することを含むことができる。受信されたカラー値と現行カラー値が等しい場合、例えば現行インスタンスID、現行フェーズ値、および現行鮮度値などの他の状態情報を、例えば受信されたインスタンスID、受信されたフェーズ値、および受信された鮮度値などの対応する受信された状態情報と比較することができる。一方、受信されたカラー値と現行カラー値が異なる場合、さらに比較は行われることはない。
カラー値の間の等価は、様々な方法でもたらすことができる。例えば、カラー値の間の等価は、現行カラー値と受信されたカラー値が、同じ近傍域リング(例えば、リング532)を示す場合に起こり得る。さらに、カラー値の間の等価は、より特定的なカラー値が、対応する親カラー値(例えば、同じスパインに沿った別のリング)と比較される場合に起こり得る。例えば、リング532のカラー値を、リング511(あるいは、リング522または501)のカラー値と比較することで、等価となることができる。このように、子近傍域は、親近傍域であるが、より特定的である。
したがって一般に、フェデレーションインフラストラクチャ内の現在動作可能なノードは、他のノードとの通信が失われているように見える場合であっても、他のノードについての、表現され検出された活性状態情報を交換することができる。
ブートストラップ機構
一般に、ノードがフェデレーションのアクティブなメンバーになるために(例えば、参加)、ノードは、参加しようと意図するリーフリングのすでにアクティブなメンバーである、少なくとも1つの他のノードと通信する必要がある。通信のこの初期形態が使用可能であること確実にするため、フェデレーションは、ブートストラップ機構を使用することができる。ブートストラップ機構は、他のタイプの通信がリーフリングのアクティブメンバーを識別することができない場合、または新しく参加するノードがシードノードのような特殊ノードのセットのうちの少なくとも1つと最初に通信するようセキュリティの制約が求める場合、最後の手段として使用されることができる。つまり、他のタイプの通信が失敗した場合、またはセキュリティ要件に応じて、ブートストラップ機構は、リーフリングのアクティブなメンバーノードを識別するために使用されることができる。
一部の実施形態において、シードノードは、フェデレーションとの通信をブートストラップするために使用される。シードノードは、近傍域相互(間)通信の一部のタイプに、既知のエントリポイントを提供する。シードノードは、インフラストラクチャ障害/回復および一般的なダイナミズムに起因するリング区分の修復を助ける。各リングは、フェデレーションの基本ブートストラッププロパティを提供するために、少なくとも1つの動作可能なシードノードを有することができる。
ピアシードノードは、その近傍域の少なくともすべてのアクティブなシードノードからなる近傍域についてのリング構造(例えば、二重リンクリスト)を保持するために、ピアシードノード間で通信することができる。専用シードノード同期プロトコルを使用して、他のすべてのシードノードの存在(アクティブ)状態についての少なくとも全体的な知識を、各シードノードに提供することができる。アクティブなシードノードは、それがめざす近傍域リーフリング、およびリーフリングの他のすべての祖先リングのメンバーノードである。したがって、シードノードは、例えばシードノードのリーフリングからルートリングまで、近傍域リングのスパイン全体を表すことができる。それゆえ、シードノードは、それらの近傍域リングの各々において、可用性の高い既知のエントリノードとして機能することができる。その結果、シードノードに関する存在状態は、フェデレーション内の様々な形態の通信(例えば、近傍域間通信)にとって有用となりうる。したがって、シードノードは、例えば、参加するノードについての既知の「参加ポイント」として機能すること、セキュアなリング権限として機能すること、インフラストラクチャ区分の回復を支援すること、およびその近傍域の各々に対して安定した「エントリノード」として機能することなど、多くの特殊なプロパティを提供することができる。
存在データを提供するため、シードノードの出現および規則的な離脱を、それらの各近傍域内のランデブーポイントにおける安定したエントリノードとして登録することができる。例えば、登録メッセージは、宛先IDがストリング「Proximity:/」のSHA−1ハッシュである、固定のURIにルーティングされてもよい。一実施形態において、安定したエントリノードとして機能するシードノードは、このような方法で自身を登録するが、選択されたシード以外のノードも同じ方法で、シードノードについて本明細書において説明されている同一または類似のプロトコルで自身を登録することができる、他の実施形態もある。安定したエントリノード(シードノードなど)が登録する場合、安定したエントリノードは、それがメンバーである各リングを示すことができる。このように、この固定URIによって識別されるランデブーポイントにおいて保持される情報は、基本的に、安定したエントリノードおよびそれらの対応するリングメンバーシップのリストである。したがって、任意のノードは、この固定URIによって識別されるランデブーポイントを参照して、使用可能な安定したエントリノードおよびそれらの対応するリングメンバーシップのリストを取得することができる。
一実施形態において、安定したエントリノードは、これらの出現および離脱イベントを直接登録する。別の実施形態において、安定したエントリノードはその隣接した近傍域リング内のランデブーポイントにおいてこれらのイベントを直接登録し、そのランデブーポイントは、登録する/登録解除する安定したエントリノードが属している、残りの各近傍域リング内の他のすべての適切なランデブーポイントの(直接的または間接的な)更新を透過的に容易にする。フェデレーションのアプリケーション状態順序付けおよび伝搬プロパティは、この安定したエントリノードの登録情報を保持して伝搬するために使用されることができる。例えば、信頼できるフラッディングプロトコルは、あるノードの近隣ノードの間で、保存されたアプリケーション状態を複製するために使用されることができる。
安定したエントリノードの存在データのルートリングに向けたプロモーションにより、フェデレーション内の他のノードは、すべての近傍域において少なくとも1つのエントリノードをルックアップすることができる。Entry Node Lookup(エントリノードルックアップ)は、ルックアップを実行するノードのリーフリングと所望の近傍域リングのLowest Common Ancestor Ring(最下位共通祖先リング)(「LCAR」)内の上記で判別されたランデブーポイントに向けて、ノードルックアップメッセージをルーティングすることによって容易にされてもよい。例えば、図5を参照すると、リング541内のノードは、リング533内のノードと通信するよう望むこともある。しかし、リング541内のノードは、リング533内のいかなるノードについても直接の知識を備えていないこともある。したがって、リング541内のノードは、Node Lookup Message(ノードルックアップメッセージ)をリング522(リング541およびリング533のリングのLCAR)に送信することができる。(例えば、そのエントリノードによって発信された登録メッセージによりシステム内に存在することになった)エントリノード存在情報を処理する、リング522内のランデブーポイントノードは、リング533内の少なくとも登録された安定したエントリノードのコンタクト情報と共にLookup Response Message(ルックアップ応答メッセージ)を返すことができる。
一部の実施形態において、安定したエントリノードは、様々な近傍域の存在データを保持するために安定したエントリノードとして特に構成されたシードノードである。他の実施形態において、その他のタイプのノードもまた、様々な近傍域の存在データを保持する安定したエントリノードとして機能することができ、さらにその他の操作を実行するように構成されてもよい。例えば、他の特定のタイプのノードは、可用性が高く、そのため(上記のように登録される)安定したエントリノードとして適切であるように(例えば、管理者によって)構成されてもよい。しかし、他のタイプのノードは、追加のシードノード機能を含まない場合もある(例えば、セキュリティリング権限として信頼することができない)。一部の実施形態において、隣接する近傍域のエントリノード存在状態を保持するランデブーポイントは、1つまたは複数の祖先リング内の安定したエントリノードとして自身を登録することができる。
近傍域間通信
本発明の実施形態はまた、例えば、リングのツリーの異なる近傍域分岐内のノード間のような、近傍域間通信を容易にすることもできる。近傍域間通信は、近位に区分されたリングインフラストラクチャ内で、1つまたは複数の、および場合によってはすべての、近傍域リングに対するおよび/または近傍域間の通信を行うために使用されることができる。ここで図5Aを参照すると、図5Aは、例示の近傍域誘導区分ツリー500を、区分ツリー500の一部をさらに詳細に示して説明する。近傍域間通信は、図5Aにおける様々なノード間で生じてもよい。
図5Aに示されるように、リングの区分ツリー500はさらに、リング513の下に様々なサブリングを含む。追加のサブリングは各々、ソートされたリンクリストの区分を表す。図5について上記で説明されているように、区分ツリー500内で、ルートリング501は、基準571(第1の管理ドメイン境界基準)に基づいて、サブリング511、512、513、および514を含む複数のサブリングに区分される。また、図5について上記で説明されているように、サブリング511はさらに、基準581(第2の管理ドメイン境界基準)に基づいて、サブリング521、522、および523を含む複数のサブリングに区分されることができる。サブリング522の下の他のサブリングはさらに、他の基準に基づいて区分される。
前述のように、区分ツリー500内で、各ノードは、単一のIDを有し、ルートから始まりリーフまでの対応する区分パス(スパイン)に沿ってリングに参加する。例えば、サブリング552に参加する各ノードはまた、サブリング543、531、522、511、およびルート501に参加する。
図5Aにおいて、サブリング513はまた、例えば、州の管轄区域などの他の基準に基づいて、サブリング561および562を含む複数のサブリングにさらに区分されることができる。サブリング562は、例えば、市区町村の管轄区域などの他の基準に基づいて、サブリング571および572を含む複数のサブリングにさらに区分されることができる。このように、図5A内で、近傍域間通信を使用すると、リング541からルートリング501までスパインをさかのぼり、その後ルートリング501からリング572まで降りてくるように通信を行う必要はなく、リング541のロードからリング572のノードへとメッセージを送信することができる。
近傍域間通信を、例えば、リングのツリーで実施される、ブロードキャスティング、マルチキャスティング、またはエニーキャスティングなど、通信パターンの一部として含むことができる。ブロードキャスティングは、リングのツリー内のすべてのアクティブなノードにメッセージを送信することを含むことができる。マルチキャスティングは、リングのツリー内のノードのグループにメッセージを送信することを含むことができる。エニーキャスティングは、リングのツリー内の少なくとも1つのノードにメッセージを送信することを含むことができる。
図19Aは、近傍域間通信を容易にするリングの近傍域誘導区分ツリー1900の例を示す。リングの区分ツリー1900内で、ルートリング1901は、選択された基準(例えば、第1の管理ドメイン境界基準)に基づいて、サブリング1、2、3、および4を含む複数のサブリングに区分される。サブリング1はさらに、サブリング11、21、31、および41に区分される。サブリング11はさらに、サブリング111、211、および311に区分される。サブリング21はさらに、サブリング121、221、321、421、および521に区分される。明確には示されていないが、例えば、サブリング2、3、4、31、および41など、その他のサブリングも、さらに区分されることができる。
リングの近傍域誘導区分ツリー1900のリング番号付け規則は、第1の桁の後の任意の桁がリングの親リングを示すように構成される。例えば、リング「311」の「11」は、リング11がリング311の親リングであることを示す。同様に、リング「41」の「1」は、リング1がリング41の親リングであることを示す。グローバルリング1901は、例えば、リング1、2、3、および4のような、一桁で番号付けされている任意のリングの親リングである。図5Aにおけるリングの近傍域誘導区分ツリー500と同様に、リングの区分ツリー1900は、様々な近傍域基準に基づいて区分されることができる。
説明および添付の特許請求の範囲の中では、注記R[“<番号>”]は、リング番号を示すために使用される。例えば、R[“11”]は、リング11を示す。説明および添付の特許請求の範囲の中では、注記N[<番号>]は、ノード番号を示すために使用される。例えば、N[1311]は、ノード1311を示す。
リングのツリー内の通信を容易にするため、ノードは、リングとそれらのリング内の対応するエントリノードを適合させるエントリテーブルを保持することができる。前述のように、リングの区分ツリー1900の構成に基づいて、親リングはその子リング各々からのすべてのノードを含む。例えば、リング11は、R[“111”]、R[“211”]、およびR[“311”]からのすべてのノードを含む。したがって、リングR[“111”]、R[“211”]、およびR[“311”]内の任意のノードにメッセージを到達させるには、メッセージをリング11に送信することで十分である。ゆえに、一部の実施形態において、ノードのエントリテーブルは、ノードが属しているリングの観点から比較的異なっているリングのエントリまで縮小されることができる。例えば、N[1111]は、R[“21”]−N[1121]のエントリを単に保持することができる。複数の子リングまたはR[“21”]のエントリを保持することは冗長になるからである。
副次リングセットの作成および保持
この説明および添付の特許請求の範囲の中では、指定されたリングの任意のピアリングは、指定されたリングの「副次リング(collateral ring)」として定義される。この説明および添付の特許請求の範囲の中では、指定されたリングの祖先リングの任意のピアリングもまた、指定されたリングの「副次リング」として定義される。指定されたリングの任意の副次リングはまた、指定されたリングに含まれるすべてのノードの副次リングである。
したがって、例えば、図19Aを引き続き参照すると、R[“211”]はR[“111”]のピアであるから、R[“211”]はR[“111”]の副次リングである。R[“211”]はまた、例えばN[1311]のような、R[“111”]に含まれる任意のノードの副次リングでもある。さらに、R[“21”]はR[“11”]のピア(つまり、R[“111”]の祖先)であるから、R[“21”]はR[“111”]の副次リングである。R[“21”]はまた、例えばN[1111]のような、R[“111”]に含まれる任意のノードの副次リングでもある。
この説明および添付の特許請求の範囲の中では、「副次リングセット」(「CRS」)は、指定されたリングまたは指定されたリング内のノードの観点から1つまたは複数の副次リングのセットとして定義される。例えば、図19Aにおいて、R[“221”]の副次リングセット、および、例えばN[8221]のようなR[“221”]の任意のノードは、R[“11”]、R[“121”]、R[“31”]、R[“41”]、R[“2”]、R[“3”]、およびR[“4”]を含む。
したがって、近傍域間通信を容易にするため、ノードは、1つまたは複数の副次リングと、1つまたは複数の副次リングへの1つまたは複数の対応するエントリノードとを含む、CRSエントリテーブルを保持することができる。CRSエントリテーブルは、1つまたは複数の<副次リング、1〜Nエントリノード>項目を含むデータ構造であってもよく、Nは何らかの整数である。例えば、データ構造は、フォーマット<collateral ring_01、entry node_01、entry node_02、...>であってもよく、ここで省略符号はcollateral ring_01への1つまたは複数の追加エントリノードを表す。
CRSエントリテーブルを作成するため、ノードは、ローカル知識、リングのツリー内で状態を伝搬するために使用されるランデブープロトコルメッセージ(例えば、pingメッセージ、更新メッセージ、および更新応答)、アプリケーションメッセージ、およびリングのツリー内で指定された通信パターン(例えば、ブロードキャスティング、マルチキャスティング、およびエニーキャスティング)を容易にするために使用されるメッセージを利用することができる。
ノードは、例えば、ルーティングテーブル情報などの、ノードが参加するリングのすべてのレベルからのローカル知識を使用することができる。例えば、引き続き図19を参照すると、N[1121]は、R[“1”]におけるN[1311]の近隣であってもよい。N[1121]の観点からN[1311]の1つの副次リングは、R[“21”]である。したがって、N[1311]は、ペア(R[“21”]、N[1121])(この場合、単一エントリノードを有する項目)を、N[1311]のCRSエントリテーブルに挿入することができる。このタイプのローカル知識を利用することにより、ノードは、エントリをCRSエントリテーブルに挿入することができる。
ノードは、特に意図されたメッセージに加えて、例えば、近隣およびルーティングパートナー状態情報を伝搬するためなど、本来ならば他の目的のために使用されるメッセージで、それらのCRSエントリテーブル情報を他のノードに伝搬することができる。例えば、ノードは、近隣ノードに送信されるpingメッセージ、およびルーティングパートナーノード間で交換される更新メッセージおよび更新応答にCRSエントリテーブル状態を含むことができる。別のノードからCRSエントリテーブル状態を受信するノードは、受信したCRSエントリテーブル状態を使用して、それらの各自のCRSエントリテーブルを増補および/または保持することができる。
例えば、ノードが、Rendezvous Ping/Updateメッセージを(例えば、ランデブープロトコル層において)その近隣/パートナーノードと交換する場合、該ノードはまた、そのCRSエントリテーブル(の少なくとも一部、および場合によっては全部)を交換し、その近隣/パートナーから受信したCRSエントリテーブル状態を使用して自分自身のテーブルを更新することができる。例えば、N[1311]が、R[“3”]内の任意のノードについて(リング1901のコンテキスト内で)予備知識を持たないと仮定する。しかし、N[1311]は、(R[“1”]内に)近隣N[8221]を有し、N[8221]のCRSエントリテーブルは、エントリ(R[“3”]、N[8223])を有する。少なくともN[1311]およびN[8221]は近隣であるため、N[1311]およびN[8221]は、随時pingメッセージを相互に送信することができる。N[8221]は、N[1311]に送信されるpingメッセージにそのCRSエントリテーブル(の少なくとも一部、および場合によっては全部)を含めることができる。したがって、N[1311]は、N[8221]からpingメッセージを受信し、その後pingメッセージは、N[8221]のCRSエントリテーブルを含めることができる。N[8221]のCRSエントリテーブルから、N[1311]は、項目<R[“3”]、N[8223]、...>を識別して、項目<R[“3”]、N[8223]、...>を自分自身のCRSエントリテーブルに含めることができる。N[1311]はまた、そのCRS内の他のリングの他の項目を識別して、それらの他の項目を自分自身のCRSエントリテーブルに含めることができる。
CRSエントリテーブル状態は、リング内のルーティングパートナー間で交換される更新メッセージおよび更新応答で同様に交換されることができる。また、任意のルーティングプロトコルメッセージを使用して、CRSエントリノードに関して(例えば、活性情報を)学習することができる。また、CRSエントリテーブルの保持を意図された特定のメッセージを使用することもできる。
CRSエントリテーブル状態は、リングのツリー内の指定された通信パターン(例えば、ブロードキャスティング、マルチキャスティング、およびエニーキャスティング)を容易にするメッセージで発見されることもできる。例えば、リングのツリー内のすべてのノードにメッセージをブロードキャストするため、ブロードキャスティングアルゴリズムは、ブロードキャスティングに固有の様々なメッセージのタイプを使用してもよい。これらのブロードキャスト固有のメッセージを送信するノードは、ブロードキャスト固有メッセージ内にCRSエントリテーブル状態を含めることができる。同様に、ノードのグループ内のすべてのノードにメッセージをマルチキャストする場合、マルチキャスティングアルゴリズムは、マルチキャスティングに固有の様々なメッセージのタイプを使用してもよい。これらのマルチキャスト固有のメッセージを送信するノードは、マルチキャスト固有メッセージ内にCRSエントリテーブル状態を含めることができる。同様に、少なくとも1つのノードにメッセージをエニーキャストする場合、エニーキャスティングアルゴリズムは、エニーキャスティングに固有の様々なメッセージのタイプを使用してもよい。これらのエニーキャスト固有のメッセージを送信するノードは、エニーキャスト固有メッセージ内にCRSエントリテーブル状態を含めることができる。通信パターン固有メッセージを受信するノードは、適切なエントリ(例えば、<副次リング、エントリノード>項目)を識別し、それらのエントリから一部または全部の状態を自分自身のCRSエントリテーブルに含めることができる。
CRS状態はまた、アプリケーション間で交換されるアプリケーションコンポーネントメッセージで発見されてもよい。図1を簡単に参照すると、アプリケーション層121、122、および/または123は、CRS状態を含むアプリケーションコンポーネントメッセージを交換することができる。CRS状態を含むアプリケーションコンポーネントメッセージを受信すると、アプリケーション層は、例えば、ランデブープロトコル層のような、対応する他の下位層まで下にCRS状態を転送して、既存のCRS状態を増補することができる。
CRS状態は、提供および/またはハードワイヤードされたアプリケーションであってもよく、リングのツリー内のノードによって構成可能である。
図19Aに戻って参照すると、ノードが同じリングへの複数のエントリノードを認識していることを見出した場合、ノードは、そのリングに対してエントリノードのうちの2つ以上を保持することを決定することができる。一部の実施形態において、ノードは、任意の保持されたエントリノードの中から無作為にエントリノードを選択する。他の実施形態において、ポリシーは、任意の保持されたエントリノードの中からの指定されたエントリノードの選択を補助するために適用される。ポリシーは、選択されるエントリノードが、毎回同じエントリノードであることを示すことができる。代替として、ポリシーは、選択されるエントリノードが、任意の保持されたエントリノードによって異なることを示すことができる。例えば、一部の実施形態において、エントリノードは、負荷が任意の保持されたエントリノード間で均一に分散されうるように、ラウンドロビン方式で選択される。
さらに、複数のエントリノードが保持されるとき、ノードは、例えば、第1の選択されたエントリノードが失敗したか、ビジー状態であるか、または他の何らかの理由により使用可能ではない場合に、別のエントリノードへと効率的に移行することができる。
代替として、ノードは、リングに対して単一のエントリノードを保持してもよい。
随時、ノードは、リングの追加のエントリノードを検出することができる。一部の実施形態において、ノードが単一のエントリノードを保持するか、または追加のエントリノードを格納するメモリが不足している場合、新しく受信されたエントリノードが既存のエントリノードに置き換わるべきかどうかを判別することができる。一部の実施形態において、ノードは、関数を使用して、distance of the entry node(エントリノードの距離)、freshness of the entry node information(エントリ情報の鮮度)、およびweight of the entry node(エントリノードの重み)(例えば、構成プリファレンス)というパラメータで候補エントリノードごとにランクを計算することができる。より高いランクを持つエントリノードが保持される。
CRSエントリテーブルは、完全である場合も、完全でない場合もある。完全CRSエントリテーブルは、ノードのCRS内のリングごとに少なくとも1つのエントリノードを含む。例えば、ノード1311の完全CRSエントリテーブルは、リング111、211、21、31、41、2、3、および4の各々への少なくとも1つのエントリノードを含む。
上記の機構を使用することで、近傍域リング階層内に1つまたは複数のリングおよび/またはノードの観点から、完全CRSエントリテーブルを構築することが可能である。一部の実施形態において、ルーティングテーブル状態情報が単独で、リングのツリー内の各ノードの完全CRSエントリテーブルを形成することがあってもよい。例えば、リングのツリー1900において(例えば、pingメッセージ、更新要求メッセージ、および更新応答メッセージで)伝搬されたルーティングテーブル関連情報は、示されているリングの各々のノードごとに完全CRSエントリテーブルを形成してもよい。
しかし、他の分散ネットワーク環境において、リングの動的な特性および/またはエントリテーブル関連状態の交換における遅延が、完全エントリテーブルの構築を妨げる可能性もある。言い換えれば、これらの他の環境において、ノードまたはリングが常には認識していないリングまたはノードの副次リングセットからの、1つまたは複数のリングがある場合もある。例えば、再度図19Aを参照すると、N[8004]が参加したばかりであり、それ以前はR[“4”]に属していたノードがないと仮定すると、メッセージトラフィック(例えば、Pind/Updateメッセージ)または他のアクティビティによってリングインフラストラクチャ全体にわたるその情報の配信が引き起こされるまで、ほとんどのノードはR[“4”]のエントリノードを有することはない。したがって、(例えば、ノード障害、通信障害、通信遅延、ノード追加など)ネットワークのダイナミズムがあるため、ノードにおいて完全CRSエントリテーブルを保持することは、常に可能であるとは限らない。そのため、多くの環境において、ノードは、ノードのCRS内の全リングよりは少ないリングのエントリノードを含む、部分CRSエントリテーブルを保持する。
CRSエントリテーブルを使用する近傍域間通信
ノードは、CRSエントリテーブルの情報を使用して、(例えば、送信側リングおよび宛先リングのLCARにメッセージをルーティングする必要なく)近傍域間通信を送信することができる。引き続き図19Aを参照すると、CRSエントリテーブルの適切なエントリに基づいて、N[1311](例えば、パブリッシャノード)は、R[“111”]、R[“211”]、R[“21”]、R[“31”]、R[“41”]、R[“2”]、R[“3”]、およびR[“4”]のうちの1つまたは複数に、近傍域間通信を直接送信することができる。例えば、ある時点において、N[1311]のCRSエントリテーブルは、以下のエントリを含むことができる。
R[“2”]:N[1112]
R[“3”]:N[8223]
R[“21”]:N[1121]
R[“31”]:N[1131]
R[“111”]:N[1111]
R[“211”]:N[1211]
これらのエンティティは、R[“111”]、R[“211”]、R[“21”]、R[“31”]、R[“2”]、およびR[“3”]に対する直接通信に使用されることができる。例えば、N[1311]はR[“111”]に通信52を送信することができ、N[1311]はR[“211”]に通信51を送信することができ、N[1311]はR[“21”]に通信53を送信することができ(N[1211]は、R[“21”]およびR[“221”]の両方のメンバーである)、N[1311]はR[“31”]に通信56を送信することができ、N[1311]はR[“2”]に通信57を送信することができ、N[1311]はR[“3”]に通信58を送信することができる。時間の経過に伴って、N[“1311”]は、R[“41”]およびR[“4”]のエントリ(例えば、<副次リング、エントリノード>項目)を識別することができる。これらのエントリは、更新されたローカル知識から、ランデブープロトコルメッセージ(例えば、pingメッセージ、更新メッセージ、および更新応答)に含まれているCRSエントリテーブルから、通信パターン固有メッセージに含まれているCRSエントリテーブル状態を通じて、および、例えばアプリケーションコンポーネントのような他の機構を通じて識別されることができる。
下方ルーティングアルゴリズム
ランデブーフェデレーション(CRSエントリテーブルの有無にかかわらず)において、メッセージが発信されたリーフリングの(またはリーフリング内の)祖先ではない指定された近傍域リング内の所定のノードIDに最も近接するノードに、メッセージがルーティングされるべき場合もある(以下、下方ルーティングと称する)。その1つの例は、発信元リング内のノードが副次リングのエントリノードを認識していない場合に、発信元リング内のノードから副次リングへの近傍域間通信を容易にすることである。図19Bは、リングの近傍域誘導区分ツリー1900の例を示す、もう1つの図である。例えば、ここで図19Bを参照すると、N[1311]が、R[“4”]またはR[“41”]のノードに向けられた通信を送信するものであってもよい。
ランデブーフェデレーションを前提として、以下の関数を定義することができる。
RouteDown(M,P,ID):フェデレーションは、近傍域P内のIDに最も近接するノードにメッセージMを配信することになる。近傍域Pは、発信元ノードのリーフリングの(またはリーフリング内の)祖先ではないフェデレーションの任意の近傍域リング(リーフまたは中間)であってもよい。
一部の実施形態において、メッセージMは、発信元ノードのリーフリングおよび目標近傍域リングPのLCAR内のノードより上にルーティングされることは決してない。例えば、N[1311]からR[“41”]への下方ルーティングを実施するため、R[“1”](R[“311”]とR[“41”]のLCAR)より上にメッセージをルーティングする必要はないことがある。しかし、その他の実施形態において、適切な場合、メッセージはLCARよりも上にルーティングされてもよい。
RouteDown(M,P,ID)関数は、目標近傍域リングPのメンバーであることが知られているエントリノードを識別することを含むことができる。送信側ノードは、多種多様な機構を使用して、目標近傍域リング内のエントリノードを識別することができる。送信側ノードは、発信元ノード(第1の送信側ノード)であってもよい。送信側ノードはまた、メッセージを発信元ノードまたは別の中間ノードから受信して、その後そのメッセージを転送する、中間ノードであってもよい。
送信側ノードは、例えば、構成またはローカルにキャッシュされた情報(例えば、CRSエントリテーブルに加えて)などのローカル知識を使用して、目標近傍域リングのエントリノードを識別することができる。例えば、N[1311]は、リングのツリー1900内のリングに関する構成またはローカルにキャッシュされた情報を含む、キャッシュおよび構成1902にアクセスすることができる。一部の環境において、フェデレーションに関するローカル知識は、フェデレーションの外部の通信機構を通じて(つまり、アウトオブバンドで)取得される。ローカル知識は、正確な目標近傍域リングP内の任意のノードを識別するために使用されることができる。正確な目標近傍域リング内の任意のノードが見つかると、メッセージMを、それらのノードのうちの1つに転送することができる。例えば、N[1311]は、キャッシュおよび構成1902を使用して、N[8004]を識別し、メッセージ1903をR[“4”]に転送することができる。
送信側ノードは、CRSエントリテーブルを使用して、目標近傍域リングP内の任意のエントリノードを見つけることができる。目標近傍域リング内の任意のエントリノードが見つかると、メッセージMを、目標近傍域リングP内のエントリノードに転送することができる。例えば、N[7521]がメッセージ1903の宛先である場合、N[1311]はN[6521]をR[“521”]のエントリノードとして識別することができる。したがって、メッセージ1903を、N[6521](またはR[“521”])にルーティングすることができる。次いで、R[“521”]内で、N[6521]は、リング内通信を使用してメッセージ1903をN[7521]にルーティングしようと試みることができる。このように、送信側ノードは、目標近傍域リングの任意のエントリノードを識別することができる場合、メッセージを正確な目標近傍域リングに転送する。例えば、N[“6521”]がR[“21”]のエントリノードを識別することができる場合、N[“6521”]はメッセージ1903をR[“21”]に転送する(破線)。
一方、送信側ノードが(例えば、ローカル知識またはCRSエントリテーブルから)宛先目標近傍域の任意のエントリノードを識別することができない場合、送信側ノードは、そのCRSエントリテーブルを確認して、目標近傍域リングの任意の祖先リングのエントリノードを見つけることができる。例えば、N[1311]がR[“121”]内のノードにメッセージを送信しようと試みることもできるが、N[1311]はR[“121”]のエントリノードを識別することはできない場合もある。したがって、N[1311]は、CRSエントリテーブル1904を参照して、R[“6521”](R[“21”]へのエントリノード)を見つけことができる。N[1311]はメッセージをN[6521]に転送することができ、今度はN[6521]がメッセージの送信側ノードとなる。
論理的には、N[6521]もまたR[21]のノードであるので、メッセージ1903はここで、R[“21”]「にある」ものと見なすことができる。次いで、N[6521]は、R[221](目標近傍域)へのエントリノードを識別しようと試みることができる。例えば、N[6521]は、ローカル知識、CRSエントリテーブルを参照することができ、および/またはRouteDownアルゴリズムを(再帰的に)適用することができる。N[6521]は、N[3221]をR[221]へのエントリノードとして識別する場合もある。したがって、N[6521]は、メッセージ1903をN[3221]に送信することができる。次いで、N[3321]は、リング内通信を使用してメッセージ1903をR[221]内の適切なノードにルーティングすることができる。
適切な場合(例えば、図19Bに示される深度よりも大きい深度を持つツリーにおいて)、メッセージは、目標近傍域リングへのエントリノードが識別されるまで、あるいはそれ以上の祖先リングが使用できなくなるまで、目標近傍域リングにさらに近い祖先に渡されることができる。
送信側ノードはまた、少なくとも要求目標近傍域を含むEntry Node Lookup Request(エントリノードルックアップ要求)を、例えばフェデレーションのブートストラッピングに使用されるようなエントリノードディレクトリ機構にルーティングすることもできる。Entry Node Lookup Request(エントリノードルックアップ要求)のルーティングは、送信側ノードと目標リングのLCARに制限されてもよい。例えば、N[1311]は、Look Up Request(ルックアップ要求)1906をランデブーポイント7651にルーティングして、R[“31”]のエントリノードを要求することができる。エントリノードディレクトリ機構は、可能なエントリノードのリストを返すことができる。例えば、ランデブーポイント7651は、ルックアップ応答1907で、(N[8431]を含む)可能なエントリノードのリスト、および目標近傍域のそのランデブーポイントに登録されている少なくともシードノードを返すことができる。
送信側ノードは、(ランデブーポイントから送信された)Lookup Response Message(ルックアップ応答メッセージ)で識別された任意の新しく発見されたノードを検討し、メッセージMをそれらのエントリノードのうちの1つに転送する。新しく発見されたノードの検討により、CRSエントリテーブル、および他のローカルにキャッシュされているノード存在知識は増補されるか、または保持されるようになる。Lookup Response Message(ルックアップ応答メッセージ)はまた、他のノード存在情報も含むことができる。例えば、送信側ノードのCRSエントリテーブルに含む可能性があるので、送信側ノードにとって重要であると認識される特定のエントリノードなどである。
したがって、1つまたは複数の使用可能な機構が、目標近傍域リング内の少なくとも1つのエントリノードをもたらす場合、メッセージMは、目標リング内のそれらのエントリノードのうちの少なくとも1つに(元の送信側ノード、目標近傍域の先祖リング内のエントリノード、またはルックアップされたエントリノードのいずれかによって)送信される。メッセージMは、近傍目標リング内のエントリノードがメッセージMをIDにルーティングする指示(indication)を含むことができる。一方、使用可能な機構がいずれも目標近傍域リングのエントリノードをもたらさない場合、RouteDown要求は、失敗して元の送信側ノードに向けて戻されてもよい。
一部の実施形態において、発信側ノードは、終端間RouteDown Message Headerをメッセージに添付するが、RouteDown Message Headerは目標近傍域URIを指定する。
上記の機構のいずれかが、複数の「ネクストホップ」ノードを識別する場合、単一のノードが選択されてもよい。単一のノードを選択する(例えば、均衡を破る)場合、目標近傍域Pにより近接するノードが選択され、次いでより高い重みを持つノードが選択され、その後Mの宛先IDにより接近するノードが選択されてもよい。機構が選択をもたらさない場合、ノードは無作為に選択されてもよい。複数の候補があるときに、メッセージMを転送する試行の失敗が発生した場合、転送は、障害のない候補ノードがある限り再度試行することができる。
逆Status/Faultメッセージパスを、アプリケーションメッセージが発信元から中間ノード経由で最終宛先ノードへ渡されるときに、確立することができる。メッセージが宛先に配信されるか、または障害が検出された場合、対応する障害/状態メッセージは、このパスに沿って発信元に向けて送信されることができる。
図19Cは、リングの近傍域誘導区分ツリー1900の例の一部を示す区分図である。図19Dは、リングの近傍域誘導区分ツリー1900の例からのリング11を示す拡大図である。図20は、リングのツリー内のノードの副次リングセットを保持する方法2000を示す例示の流れ図である。方法2000は、図19Cおよび図19Dにおけるリング、ノード、メッセージ、およびデータに関して説明される。
方法2000は、ノードが、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスする動作を含む(動作2001)。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの少なくとも1つの対応するエントリノードを示すように構成される。例えば、N[1311]はCRSエントリテーブル1904にアクセスすることができるが、これは副次リングセットエントリを<副次リング、1〜Nエントリノード>のフォーマットで格納するように構成され、N[1311]の場合、Nは何らかの整数である。このように、CRSエントリテーブル1904は、ゼロまたはそれ以上の<副次リング、エントリノード>項目を含むことができ、含まれている各項目はN[1311]の副次リング、およびその副次リングへの1つまたは複数の対応するエントリノードを示す。例えば、図19Cに示されるように、CRSエントリテーブル1904は、CRSエントリ<R[“51”]、N[8651]、...>を含み、N[8651]がR[51]への1からNのエントリノードのうちの1つ(N[1311]とR[“311”]の副次リング)であることを示す。
方法2000は、リングのツリーの構成に関連する情報を保持する使用可能なリソースから、副次リングセットエントリテーブル情報を発見する動作を含む(動作2002)。例えば、N[1311]は、リングのツリー1900の構成に関連する情報を保持するソースから副次リングセットエントリテーブル情報を発見することができる。前述のように、CRSエントリテーブル情報の多種多様なソースがノードに使用可能でありうる。例えば、ノードは、例えばローカル構成およびキャッシュ情報などのローカル知識にアクセスすることができ、リングのツリーで状態を伝搬するために使用される、例えばpingメッセージ、更新メッセージ、および更新応答などのランデブープロトコルメッセージに含まれるCRS関連状態にアクセスすることができ、アプリケーションメッセージに含まれるCRS関連状態にアクセスすることができ、例えばブロードキャスティング、マルチキャスティング、およびエニーキャスティングなどのリングのツリーで指定された通信パターンを容易にするために使用されるメッセージからCRS関連状態にアクセスすることができる。
したがって、図19Cにおいて、N[1311]はローカル構成1921にアクセスすることもできる。N[1311]は、ローカル構成1921から、N[1111]がR[“111”]へのエントリノードのうちの少なくとも1つ(N[1311]とR[“311”]の副次リング)であることを示す、CRSエントリ<R[“111”]、N[1111]、...>を発見することができる。N[1311]はまた、アプリケーションメッセージ1971を受信することができる。アプリケーションメッセージ1971から、N[1311]は、CRS情報1972を発見することができる。CRS情報1972は、N[1311]のCRS内のリングのCRS状態を含んでいても、含んでいなくてもよい。N[1311]はまた、通信パターン固有メッセージ1973を受信することができる。通信パターン固有メッセージ1973から、N[1311]は、CRS状態1974を発見することができる。CRS状態1974は、N[1311]のCRS内のリングのCRS状態を含んでいても、含んでいなくてもよい。
ここで図19Dを参照すると、N[1311]は、ランデブープロトコルメッセージでCRS状態を発見し、交換することができる。N[1111]はR[“111”]のメンバーであり、N[1211]はR[“211”]のメンバーであり、N[1311]はR[“311”]のメンバーであるので、ノードN[1111]、N[1211]、N[1311]の各々はR[“11”]のメンバーでもある。前述のように、共通リングのメンバーであるノードは、pingメッセージ、更新メッセージ、および更新応答を交換して、ルーティングテーブル情報を保持することができる。したがって、R[“11”]のノードは、pingメッセージ、更新メッセージ、および更新応答を交換して、R[“11”]のルーティングテーブル情報を保持することができる。CRS状態は、交換されるpingメッセージ、更新メッセージ、および更新応答、さらにノード間のその他のランデブープロトコルおよびアプリケーションメッセージトラフィックに含まれてもよい。
例えば、N[A11](R[“11”]内のN[1311]の近隣)は、CRS状態1932を含むpingメッセージ1931を、N[1311]に送信することができる。N[1311]は、CRS状態1932から、N[1131]がR[“31”]へのエントリノード(N[1311]とR[“311”]の副次リング)であることを示す、CRSエントリ<R[“31”]、N[1131]>を発見することができる。CRSエントリ1932は、N[A11]のCRSエントリテーブル内のCRSエントリの完全または部分リストであってもよい。N[1311]はまた、CRS状態1932を含むpingメッセージをその近隣に送信することができる。例えば、N[1311]は、CRS状態1934を含むpingメッセージ1945を、N[E11](R[“11”]内のN[1311]の近隣)に送信することができる。CRSエントリ1934は、CRSエントリテーブル1904からのCRSエントリの完全または部分リストを含むことができる。
N[1311]はまた、CRS関連情報を含む更新メッセージおよび更新応答を送信および受信することができる。例えば、N[1311]は、CRSエントリ1934を含む更新メッセージ1933を、N[D11](R[“11”]内のN[1311]のルーティングパートナー)に送信することができる。N[D11]は、CRSエントリ1938を含む更新応答1937をN[1331]に送信することによって、応答することができる。CRSエントリ1938は、N[D11]のCRSエントリテーブル内のCRSエントリの完全または部分リストであってもよい。同様に、N[1311]は、CRSエントリ1942を含む更新メッセージ1941をN[C11](R[“11”]内のN[1311]のルーティングパートナー)から受信することができる。CRSエントリ1942は、N[C11]のCRSエントリテーブル内のCRSエントリの完全または部分リストであってもよい。N[1311]は、CRSエントリ1934を含む更新応答1943をN[“C11”]に送信することによって、応答することができる。
ノードはまた、例えばエントリノードが連絡をとることができないことを示す表示など、CRSエントリがもはや有効ではないことを(直接的または間接的に)示す、使用可能なリソースから、副次リングセットエントリテーブル関連情報を受信することもできる。CRS関連状態を送信するために使用された任意のリソースはまた、CRSエントリがもはや有効ではないことを意味すると解釈されうることを示す表示を送信するために使用されることもできる。したがって、随時、ノードは、1つまたは複数のCRSエントリがそのCRSエントリテーブルに追加されるようにするCRS関連状態、およびもはや適切ではない1つまたは複数のCRSエントリの削除を行わせる指示を受信する場合もある。
方法2000は、発見された副次リングセットエントリテーブル情報に基づいて、副次リングセットエントリテーブルを適切な副次リングセットエントリ状態で更新する動作を含む(動作2003)。適切な副次リングセットエントリ状態は各々、ノードの副次リング、およびノードの副次リングへの少なくとも1つの対応するエントリノードを含む。例えば、N[1311]は、図19Cおよび図19Dにおいて受信された任意のCRSエントリを、CRSエントリテーブル1904に含めることができる。N[1311]はまた、もはや適切ではない可能性があると(例えば、構成、ランデブープロトコルメッセージ、アプリケーションメッセージ、または通信パターン固有メッセージで)示される任意のCRSエントリを、CRSエントリテーブル1904から削除することもできる。したがって、ノードのCRSエントリテーブルは、ランデブーフェデレーションの変化する構造を適切に反映するように更新されることができる。
図19Eは、リングの近傍域誘導区分ツリー1900の例を示すもう1つの図である。図19Eに示されるのは、図19Cおよび図19Dにおいて交換されたCRS状態に基づいて取り込まれた可能性のある、CRSエントリテーブル1904である。図21は、リングのツリー内の近傍域間通信を送信する方法2100を示す例示の流れ図である。方法2100は、図19Fにおけるノード、リング、メッセージ、およびデータに関して説明される。
方法2100は、ノードが、メッセージをノードの副次リングに送信すべきことを判別する動作を含む(動作2101)。例えば、N[1311]は、メッセージ1976をR[“2”]に送信すべきであるという指示を受信することができる。メッセージが副次リングに送信されるべきであるという指示は、ルーティング論理の機能、N[1311]におけるアプリケーション、マルチキャスティング機構、ブロードキャスティング機構、エニーキャスティング機構などとして示される別のノードから受信することができる。
方法2100は、ノードの副次リングセットエントリを格納するように構成された副次リングセットエントリテーブルにアクセスするノードの動作を含む(動作2102)。各副次リングセットエントリは、ノードの副次リング、およびノードの副次リングへの少なくとも1つの対応するエントリノードを示すように構成される。例えば、N[1311]は、CRSエントリテーブル1904にアクセスすることができる。CRSエントリテーブル1904内の各CRSエントリは、N[1311]の副次リング、およびN[1311]の副次リングへの少なくとも1つの対応するエントリノードを示すことができる。例えば、エントリ<R[“111”]、N[1111]、...>は、R[“111”]がN[1311]の副次リングであり、N[1111]がR[“111”]への少なくとも1つのエントリノードのうちの1つであることを示す。
方法2100は、ノードの副次リングセットエントリテーブルから副次リングの少なくとも1つの副次リングセットエントリを識別する動作を含む(動作2103)。少なくとも1つの副次リングセットエントリの各々は、副次リングの少なくとも1つのエントリノードを示す。例えば、N[1311]は、CRSエントリテーブル1094から、R[“2”]のエントリ<R[“2”]、N[1112]、...>を識別することができる。エントリ<R[“2”]、N[1112]、...>は、N[1112](および、場合によっては他のノード)がR[“2”]のエントリノードであることを示す。
(例えば、2つ以上のエントリノードがある場合など)識別された副次リングセットエントリに含まれている対応するエントリノードの数に基づいて、方法2100はまた、副次リングの複数のエントリノードから、エントリノードの適切なサブセット、および場合によっては単一の適切なエントリノードを決定する(resolve)動作を含むこともできる。例えば、適切なエントリノードのサブセットを、発信元と目標近傍域Pとの間の近接性に基づいて、ノード重みに基づいて決定することができるか、宛先IDへの近接性に基づいて選択することができるか、または無作為に選択することができる。
方法2100は、メッセージを少なくとも1つの示されたエントリノードに送信する動作を含む(動作2104)。例えば、N[1311]は、メッセージ1976をN[1112]に送信することができる。メッセージを少なくとも1つのノードに送信することは、複数のノードのすべてのエントリノードに、エントリノードの決定された適切なサブセットの各エントリノードに、または単一の適切なエントリノードに、メッセージを送信することを含むことができる。一部の実施形態において、1つのエントリノードへのメッセージの送信が失敗した場合、1つまたは複数の他のエントリノードを試すことができる。送信側ノードが、失敗の結果として新しいノードを識別することも可能である。
図22は、リングのツリー内の近傍域間通信を送信する方法2200を示す例示の流れ図である。方法2200は、図19Fおよび図19Gにおけるノード、リング、メッセージ、およびデータに関して説明される。
方法2200は、発信元ノードが、メッセージを、リングのツリー内の目標近傍域リングの所定のノードIDに最も近接する宛先ノードにルーティングするよう意図することを判別する動作を含む(動作2201)。目標近傍域リングは、発信元ノードの副次リング、または発信元ノードの副次リングのサブリングであってもよい。例えば、N[1311]は、ID30に向けてメッセージ1998をR[“1221”](目標近傍域リング)にルーティングすべきであるという指示を受信することができる。メッセージが副次リングまたは副次リングのサブリングに送信されるべきであるという指示を、別のノード、N[1311]に関連するアプリケーション、マルチキャスティング機構、ブロードキャスティング機構、エニーキャスティング機構などから受信することができる。
方法2200は、目標近傍域リングおよび目標近傍域リングの先祖リングのうちの少なくとも1つのメンバーノードであることが知られている、1つまたは複数のエントリノードを識別する動作を含む(動作2202)。例えば、N[1311]は、ノードID56を有するN[41221]を、R[“1221”]へのエントリノードとして識別することができる。多種多様な機構を使用して、N[41221]を識別することができる。N[1311]は、ローカル知識を参照して、近傍域目標リングへのエントリノードを識別しようと試みることができる。例えば、N[1311]は、キャッシュおよび構成1902を参照して、R[“1221”]へのエントリノードを識別しようと試みることができる。
N[1311]はまた、CRSエントリテーブルを参照して、(例えば、目標近傍域リングへのエントリノードが識別されないとき)近傍域目標リングの先祖リングへのエントリノードを識別することができる。サブリングR[“321”]が、R[“21”]へのエントリノードとしてノードN[“4321”]を導く場合もある。同様に、R[“2221”]が、R[“221”]へのエントリノードとしてノードN[“12221”]を導く場合もある。R[“1221”]へのエントリノードが識別されない場合、N[1311]は、例えばN[12221]など、R[“221”]へのエントリノードを識別しようと試みることができる。N[1331]はまた、例えばN[4321]など、R[“21”]へのエントリノードを識別しようと試みることもできる。
目標近傍域へのエントリノードが識別されない場合、ノードは、指定された目標近傍域の観点からさらなる先祖のエントリノードを識別しようと試みる前に、より近接する先祖リング内のエントリノードを識別しようと試みる場合もある。例えば、R[“1221”]へのエントリノードが識別されない場合、N[1311]は最初に、R[“221”]へのエントリノードを識別しようと試みてもよい。R[“221”]へのエントリノードが識別されない場合、N[1311]は、R[“21”]へのエントリノードを識別しようと試みてもよい。
N[1311]はまた、例えばシードノードなど、ブートストラップ機構を使用することができる。例えば、N[1311]は、エントリノードルックアップ要求を、例えばランデブーポイントN[7651]のような、既知のランデブーポイントにルーティングして、既知の(登録されている)エントリノード(例えば、シードノード)を要求することができる。ルックアップ要求に応答して、ランデブーポイントは、任意の既知のエントリノードを含むルックアップ応答メッセージを返す(送信する)ことができる。例えば、ルックアップ応答1997は、ランデブーポイントN[7651]からN[1311]に返されてもよい。ルックアップ応答1997は、ランデブーポイントN[7651]に登録されている任意のエントリノードの位置を含むことができる。
これらの機構のうちの1つまたは複数は、N[4221]をR[“221”]へのエントリノードとして識別することができる。
一部の実施形態において、一部のエントリノード識別機構は、他のエントリノード識別機構の前に使用される。例えば、送信側ノードは、目標リングの先祖リングへのエントリノードを識別しようと試みる前、またはエントリノードルックアップ要求をルーティングする前に、ローカル知識を参照することができる。これらの同じ実施形態において、送信側ノードはまた、エントリノードルックアップ要求をルーティングする前に、目標リングの先祖リングへのエントリノードを識別しようと試みることもできる。しかし、他の実施形態において、エントリノード識別機構は、異なる順序で使用されるか、または省略されてもよい。
方法2200は、メッセージを、識別されたエントリノードに送信する動作を含む(動作2203)。メッセージは、エントリノードが、目標近傍域リングの示された宛先ノードに最も近接するノードIDを有するノードに、該メッセージを送るべきであることを示す。例えば、実線で示されているように、N[1311]は、メッセージ1998を、メッセージがノードID30に送られるべきであるという指示と共に、N[41221](R[“1221”]へのエントリノードであり、ノードID56を有する)に送信することができる。N[41221]は、そのルーティングテーブルおよび/または近隣にアクセスして、認識しているノードID30に最も近接するノードIDがノードID25を有するN[61221]であることを判別することができる。同様に、N[61221]は、そのルーティングテーブルおよび/または近隣にアクセスして、認識しているノードID30に最も近接するノードIDがノードID28を有するN[71221]であることを判別することができる。N[71221]は、そのルーティングテーブルおよび/または近隣を参照して、そのノードID、すなわちノードID28が、ノードID30に最も近接する既知のノードIDであることを判別して、メッセージを配信することができる。
以前説明されているルーティングアルゴリズムもまた、R[“221”]内でメッセージ1998をルーティングするために使用されることができる。
メッセージが、先祖リングまたは目標近傍域リングのメンバーである、識別されたエントリノードに送信される場合、方法2200は、識別されたエントリノードにおいて再帰的に適用されることができる。つまり、先祖リングへの識別されたエントリノードは、目標近傍域リングへのエントリノードを識別しようと試みることができる。例えば、点線で示されているように、方法2200の適用により、メッセージ1998が、エントリノードN[12221](サブリングR[“2221”]によって導かれるR[“221”]のエントリノード)に送信されるようになることもある。次いで、N[12221](R[“2221”]の観点から)は、R[“1221”]へのエントリノードを識別することができる。したがって、N[12221]における方法2200の再帰的な適用により、メッセージ1998がN[41221]に送信されることが可能になる。
先祖リング内の識別されたエントリノードが、目標近傍域リングへのエントリノードを認識していない場合、識別されたエントリノードは、目標近傍域により近接する別の先祖リングへのエントリノードを識別しようと試みることができる。次いで、先祖リングへのエントリノードは、メッセージを、目標近傍域リングのより近接する先祖リングのエントリノードに転送することができる。
例えば、破線で示されているように、方法2200の適用により、メッセージ1998が、エントリノードN[4321](サブリングR[“321”]によって導かれるR[“21”]のエントリノード)に送信されるようになることもある。しかし、N[4321](R[“321”]の観点から)は、R[“1221”]のエントリノードを識別することができないこともある。したがって、N[4321](R[“321”]の観点から)は、R[“221”]のエントリノードを識別してもよい。よって、N[4321]における方法2200の第1の再帰的な適用により、メッセージ1998がN[12221]に送信されることが可能になる。次いで、N[12221]における方法2200の第2の再帰的な適用により、メッセージ1998がN[41221]に送信されることが可能になる。
しかし、N[4321]は、R[“1221”]へのエントリノードを識別した場合、メッセージ1998をエントリノードに直接送信することができる。したがって、先祖リングへのエントリノードは、メッセージを、必要に応じて、目標近傍域リング、または(通常は転送側エントリノードのCRSにある)目標近傍域リングのより近接する先祖リングのエントリノードに転送することができる。前述のように、より近接する先祖リングへのエントリノードは、次いでメッセージを、必要に応じて、目標近傍域リング、または(通常は転送側の「さらに近接する」エントリノードのCRSにある)目標近傍域リングのさらにより近接する先祖リングに転送することができる。このプロセスは、目標近傍域リングエントリノードに到達するまで、(例えば、方法2200の再帰的な適用を通じて)繰り返すことができる。
目標近傍域リングに到達すると、前述のルーティングアルゴリズムを使用して、目標近傍域リング内でメッセージをルーティングすることができる。
図6および以下の説明は、本発明が実装されうる適切なコンピューティング環境について簡単に概要を説明することを意図している。必須ではないが、本発明は、コンピュータシステムによって実行されるプログラムモジュールなど、コンピュータ実行可能命令の一般的なコンテキストに即して説明される。一般に、プログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連するデータ構造、およびプログラムモジュールは、本明細書において開示される方法の動作を実行するためのプログラムコード手段の例を示す。
図6を参照すると、本発明を実装する例示的なシステムは、処理装置621、システムメモリ622、およびシステムメモリ622を含む様々なシステムコンポーネントを処理装置621に接続するシステムバス623を含む、コンピュータシステム620の形をとる汎用コンピューティング装置を含む。処理装置621は、本発明の特徴を含む、コンピュータシステム620の特徴を実施するように設計されたコンピュータ実行可能命令を実行することができる。システムバス623は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、様々なタイプのバス構造のいずれかであってもよい。システムメモリは、読み取り専用メモリ(「ROM」)624およびランダムアクセスメモリ(「RAM」)625を含む。起動時などにコンピュータシステム620内の構成要素間の情報の転送を助ける基本ルーチンを含む基本入出力システム(BIOS;basic input/output system)626は、ROM624に格納されていてよい。
コンピュータシステム620はさらに、磁気ハードディスク639との間の読み取りまたは書き込みを行うハードディスクドライブ627、取り外し可能の磁気ディスク629との間の読み取りまたは書き込みを行う磁気ディスクドライブ628、ならびに、例えばCD−ROMまたは他の光媒体など、取り外し可能の光ディスク631との間の読み取りまたは書き込みを行う光ディスクドライブ630を含むことができる。磁気ハードディスクドライブ627、磁気ディスクドライブ628、および光ディスクドライブ630は、それぞれハードディスクドライブインターフェース632、磁気ディスクドライブインターフェース633、および光ドライブインターフェース634によってシステムバス623に接続されている。ドライブおよびその関連するコンピュータ読み取り可能媒体は、コンピュータシステム620のコンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性記憶装置を提供する。本明細書に記載の例示的な環境では、磁気ハードディスク639、取り外し可能磁気ディスク629、および取り外し可能光ディスク631を採用しているが、磁気カセット、フラッシュメモリカード、DVD(デジタル多用途ディスク)、Bernoulliカートリッジ、RAM、ROMなど、データを格納するための他の種類のコンピュータ読み取り可能媒体も使用されることができる。
1つまたは複数のプログラムモジュールを備えるプログラムコード手段は、オペレーティングシステム635、1つまたは複数のアプリケーションプログラム636、他のプログラムモジュール637、およびプログラムデータ638を含む、ハードディスク639、磁気ディスク629、光ディスク631、ROM624またはRAM625に格納されることができる。ユーザは、キーボード640、ポインティングデバイス642、または、例えばマイクロフォン、ジョイスティック、ゲームパッド、スキャナなどの他の入力装置(図示せず)を介してコンピュータシステム620にコマンドおよび情報を入力することができる。これらのおよび他の入力装置は、システムバス623に接続された入出力インターフェース646を通じて処理装置621に接続されることができる。入出力インターフェース646は、例えば、シリアルポートインターフェース、PS/2インターフェース、パラレルポートインターフェース、ユニバーサルシリアルバス(「USB」)インターフェース、または米国電気電子学会(IEEE)1394インターフェース(つまり、FireWireインターフェース)などの多種多様なインターフェースのいずれかを論理的に表すか、または様々なインターフェースの組合せを論理的に表すこともある。
モニタ647または他の表示装置も、ビデオインターフェース648を介してシステムバス623に接続される。スピーカー669またはその他のオーディオ出力装置も、オーディオインターフェース649を介してシステムバス623に接続される。例えば、プリンタのような、その他の周辺出力装置(図示せず)もまた、コンピュータシステム620に接続されることができる。
コンピュータシステム620は、例えば、オフィス規模またはエンタープライズ規模のコンピュータネットワーク、ホームネットワーク、イントラネット、および/またはインターネットなどのネットワークに接続可能である。コンピュータシステム620は、そのようなネットワークを介して、例えばリモートコンピュータシステム、リモートアプリケーション、および/またはリモートデータベースなどの外部ソースとデータを交換することができる。
コンピュータシステム620はネットワークインターフェース653を含み、このネットワークインターフェースを介してコンピュータシステム620は、外部ソースからのデータ受信および/または外部ソースへのデータ送信を行う。図6に示されるように、ネットワークインターフェース653は、リンク651を介するリモートコンピュータシステム683とのデータの交換を容易にする。ネットワークインターフェース653は、例えば、ネットワークインターフェースカードおよび対応するネットワークドライバインターフェース仕様(「NDIS」)スタックなど、1つまたは複数のソフトウェアおよび/またはハードウェアモジュールを論理的に表すことができる。リンク651は、ネットワークの一部(例えば、イーサネット(登録商標)セグメント)を表し、リモートコンピュータシステム683は、ネットワークのノードを表す。
同様に、コンピュータシステム620は入出力インターフェース646を含み、この入出力インターフェースを介してコンピュータシステム620は、外部ソースからのデータ受信および/または外部ソースへのデータ送信を行う。入出力インターフェース646は、リンク659を介してモデム654(例えば、標準モデム、ケーブルモデム、またはデジタル加入者線(「DSL」)モデム)に接続され、このモデムを介してコンピュータシステム620は、外部ソースとの間のデータ受信および/またはデータ送信を行う。図6に示されるように、入出力インターフェース646およびモデム654は、リンク652を介するリモートコンピュータシステム693とのデータの交換を容易にする。リンク652は、ネットワークの一部を表し、リモートコンピュータシステム693は、ネットワークのノードを表す。
図6は、本発明の適切なオペレーティング環境を表すが、本発明の原理は、必要に応じて適切な変更を加え、本発明の原理を実施することができる任意のシステムに採用することができる。図6に示される環境は例示的なものにすぎず、決して、本発明の原理が実施されうる多種多様な環境のごく一部も表すものではない。
本発明に従って、ノード、アプリケーション層、および他の下位層、さらにルーティングテーブルおよびノードIDを含む関連データは、コンピュータシステム620に関連付けられている任意のコンピュータ読み取り可能媒体に格納されアクセスされることができる。例えば、そのようなモジュールの一部および関連プログラムデータの一部は、システムメモリ622に格納するため、オペレーティングシステム635、アプリケーションプログラム636、プログラムモジュール637、および/またはプログラムデータ638に含まれていてもよい。
例えば、磁気ハードディスク639などの大容量記憶装置がコンピュータシステム620に接続される場合、そのようなモジュールおよび関連するプログラムデータもまた大容量記憶装置に格納されてもよい。ネットワーク化された環境において、コンピュータシステム620に関連して示されるプログラムモジュール、またはその一部分は、リモートコンピュータシステム683および/またはリモートコンピュータシステム693に関連付けられているシステムメモリおよび/または大容量記憶装置などの、リモート記憶装置に格納されることができる。そのようなモジュールの実行は、前述のように分散された環境において実行されてもよい。
本発明は、その精神または本質的特質から逸脱することなく、他の特定の形態で具現されることもできる。説明されている実施形態はあらゆる点で、限定的ではなく、あくまでも例示的なものと見なされるべきである。したがって、本発明の範囲は、前述の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲の等価の意味および範囲内に含まれるすべての変更は、それらの範囲内に包括的に含まれるものとする。