(57)【要約】      （修正有）【課題】ノード責任が不適当にオーバーラップしないことを保証するためのセーフティ機構とメッセージが１つのターゲットに繰り返して送信される場合にそのメッセージが受け入れられることを保証するためのライブネス機構を提供する。【解決手段】プライマリノードは、プライマリノードおよび他のセカンダリノードを含むノードの複製セット内から選ばれたことが判定され、クライアントデータアクセス要求を受け入れ、処理し、各クライアントデータアクセス要求にクライアントデータアクセス要求が受信された順序で状態を変化させる線形化された処理順序を含むデータシーケンス番号を割り当て、すべての対応するデータシーケンス番号を含む変化するクライアントデータアクセス要求をセカンダリノードに送信し、閾値個数のセカンダリノードから、クライアントデータアクセス要求の受信を示す肯定応答を受信し、アクセス要求を変化させるデータをコミットする。【選択図】図３３
2014116968.tif 000002
【特許請求の範囲】
【請求項１】
両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、フェデレーションインフラストラクチャ内の一貫した複製セットを確立し、維持する方法であって、
ノードのリング内の複数のノードの中から複製セットを確立する行為であって、前記複製セットは、メンバとしてプライマリノードおよび１つまたは複数のセカンダリノードを含む、行為と、
前記複製セットメンバのうちの少なくとも１つに影響する複製セット構成イベントオカレンスを示す表示を受信する行為と、
前記受信された表示に基づいて、前記複製セットが再構成されなければならないことを判定する行為であって、前記再構成は、前記複製セット構成イベントオカレンスに基づいて、前記複製セットからの既存セカンダリノードの除去、前記複製セットへの新しいセカンダリノードの追加、新しいプライマリへの突然の推移、および新しいプライマリへの滑らかな推移のうちの少なくとも１つを含む、行為と、
前記複製セット構成イベントに対応する前記再構成に従って前記複製セットを再構成する行為と
を含むことを特徴とする方法。
【請求項２】
前記複製セット構成イベントは、前記複製セット内のノード障害、前記複製セットからのノード離脱、およびノードが前記複製セットに参加することのうちの少なくとも１つを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記複製セットノードのうちの１つまたは複数によって制御されるデータストレージの一部を維持する行為をさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記プライマリノードがクライアントデータアクセス要求を受信する行為であって、前記クライアントデータアクセス要求は、ノードの複製セット内の少なくとも１つのノードでアクセスされる情報の表示を含む、行為と、
前記プライマリノードが前記受信されたクライアントデータアクセス要求内で示される情報の少なくとも一部にアクセスするのに失敗したことを検出する行為と、
前記プライマリノードに格納された情報が前記クライアントデータアクセス要求に応答してアクセスされるのを防ぐように、前記プライマリノードが前記複製セットからそれ自体を除去する行為と
をさらに含むことを特徴とする請求項３に記載の方法。
【請求項５】
構成状態情報に基づいて、進行中の１つまたは複数の複製セット再構成を検出する行為をさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記複製セットの新しいプライマリノードを選ぶ行為をさらに含むことを特徴とする請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フェデレーションインフラストラクチャ内の一貫性に関する。
【背景技術】
【０００２】
コンピュータシステムおよび関連するテクノロジは、社会の多くの側面に影響する。実
際に、コンピュータシステムの情報を処理する能力は、我々が生活し、働く形を変えてき
た。コンピュータシステムは、今や、一般に、コンピュータシステム出現の前に手作業で
実行されタスク（例えば、ワードプロセッシング、スケジューリング、およびデータベー
ス管理）のホストを実行する。最近では、コンピュータシステムは、お互いおよび他の電
子デバイスに結合されて、有線および無線のコンピュータネットワークを形成し、このネ
ットワーク上で、コンピュータシステムおよび他の電子デバイスが電子データを転送する
ことができる。その結果、コンピュータシステムで実行される多くのタスク（例えば、音
声通信、電子メールへのアクセス、ホームエレクトロニクスの制御、ウェブブラウジング
、および文書の印刷）は、複数のコンピュータシステムおよび／または他の電子デバイス
の間の有線コンピュータネットワークおよび／または無線コンピュータネットワークを介
する電子メッセージの交換を含む。
【０００３】
しかし、コンピュータ化されたタスクを実行するのにネットワークリソースを利用する
ために、コンピュータシステムは、ネットワークリソースを識別し、これにアクセスする
何らかの手段を有しなければならない。したがって、リソースは、通常、リソースを一意
に識別し、あるリソースを他のリソースから区別するのに使用できる一意識別子、例えば
、ネットワークアドレスを割り当てられる。したがって、リソースを利用することが望ま
れるコンピュータシステムは、リソースに対応するネットワークアドレスを使用してその
リソースに接続することができる。しかし、ネットワークリソースへのアクセスは、コン
ピュータシステムがネットワークリソースのネットワークアドレスの以前の知識を有しな
い場合にはむずかしくなり得る。例えば、コンピュータシステムは、そのコンピュータシ
ステム（または別のネットワーク化されたコンピュータシステム）がネットワークプリン
タのネットワークアドレスを知らない限り、ネットワークプリンタで文書を印刷すること
ができない。
【０００４】
したがって、様々な機構（例えば、ドメインネームシステム（「ＤＮＳ」）、アクティ
ブディレクトリ（「ＡＤ」）、分散ファイルシステム（「ＤＦＳ」））が、コンピュータ
システムが以前に未知のリソースを識別する（およびアクセスする）ために開発されてき
た。しかし、異なるコンピュータネットワークを介してアクセス可能なリソース（例えば
、デバイスおよびサービス）の量および多様性に起因して、開発者は、しばしば、様々な
異なるリソース識別機構およびリソースアクセス機構を実施するアプリケーションを開発
することを要求される。異なる機構のそれぞれは、異なるコーディング要件を有し、開発
者に、アプリケーション内で必要になるすべての機能性を提供しない場合がある。
【０００５】
例えば、ＤＮＳは、分散管理アーキテクチャを有する（すなわち、集中管理が不要であ
る）が、ＤＮＳは、十分にダイナミックでも自己管理式でもなく、弱いデータおよびクエ
リモデルをサポートし、固定されたルートのセットを有する。その一方で、ＡＤは、十分
にダイナミックであるが、集中管理を必要とする。さらに、異なる機構の諸態様は、互い
に互換ではない場合がある。例えば、ＤＮＳを使用して識別されるリソースが、ＤＦＳル
ーティングプロトコルと互換でない場合がある。したがって、開発者は、最も適切な機構
を選択し、他の機能の利益を捨てることを強いられる場合がある。
【０００６】
リソースを識別する機構は、ピアツーピアネットワークで特に問題になり得る。ＤＮＳ
は、ルックアップ要求を実施するために特殊なルートサービスのセットに頼る、キーとし
てホスト名および値としてＩＰアドレスを有するルックアップサービスを提供する。さら
に、ＤＮＳは、クライアントがネームサーバ階層をナビゲートすることを可能にするため
の情報（ＮＳレコード）の管理を必要とする。したがって、リソースをネットワーク上で
識別できるようになる前に、そのリソースをＤＮＳに入力しなければならない。より大き
いスケールで、ノードが情報のエントリに頼ってネットワークに頻繁に接続し、切断する
ネットワークは、必ずしも実用的とは限らない。さらに、ＤＮＳは、ホストまたはサービ
スを発見するというタスクに特殊化され、他のタイプのリソースに一般的に適用可能では
ない。
【０００７】
したがって、リソース識別およびアクセスの他の仕組みが、これらの欠点に対処するこ
とを試みて開発されてきた。ＤＮＳより拡張性のある複数の機構は、分散ルックアッププ
ロトコルを含む。これらの機構は、要求を対応するリソースにルーティングし、ルックア
ップ用の情報を格納するために、様々なノード配置およびルーティングアルゴリズムを使
用する。
【０００８】
これらの機構のうちの少なくとも１つは、宛先ノードへメッセージをルーティングする
のに、ネットワーク内の各ノードでローカルマルチレベル近傍マップを利用する。これは
、本質的に、各ノードがノード（近傍マップ内のノード）の対応するツリーの「ルートノ
ード」であるアーキテクチャをもたらす。メッセージは、１桁ずつ宛先ＩＤに増分式にル
ーティングされる（例えば、＊＊＊６ → ＊＊４６ →，＊３４６ → ２３４６、ただし
、＊はワイルドカードを表す）。このタイプの機構のルーティング効率は、Ｏ（ｌｏｇ 
Ｎ）ルーティングホップであり、ノードがＯ（ｌｏｇ Ｎ）サイズのルーティングテーブ
ルを維持することを必要とする。
【０００９】
これらの機構のうちの他の少なくとも１つは、数の線形リングからとられた一意ＩＤを
ノードに割り当てる。ノードは、それに直接に後続するノード（ＩＤ値による）へのポイ
ンタおよびそのＩＤ値が値ＩＤ＋２Lの最も近い後続物であるノードへのポインタを含む
ルーティングテーブルを維持する。このタイプの機構のルーティング効率は、やはりＯ（
ｌｏｇ Ｎ）ルーティングホップであり、ノードがＯ（ｌｏｇ Ｎ）サイズのルーティング
テーブルを維持することを必要とする。
【００１０】
少なくとも１つのさらなる機構は、Ｏ（ｌｏｇ Ｎ1/d）ルーティングホップを必要とし
、ノードがＯ（Ｄ）サイズのルーティングテーブルを維持することを必要とする。したが
って、これらの機構のすべてのルーティング効率は、少なくとも部分的に、システム内の
ノードの個数に依存する。
【００１１】
さらに、ＩＤは（少なくともいくつかの機構について）、リングに沿って均一に分布さ
せることができるので、リング上のノードの間のルーティングがある非効率性をもたらす
可能性が必ずある。例えば、ルーティングホップが、膨大な地理的距離をまたぐ可能性が
あり、より高価なリンクをまたぐ可能性があり、非セキュアドメインを通過する可能性な
どがある。さらに、メッセージルーティングが、複数のホップを伴うときに、そのような
イベントが複数回発生する可能性がある。残念ながら、これらの機構は、お互いに関する
ノードの近接（物理的なまたは他の形の）を考慮に入れていない。例えば、リング上のノ
ード分布に応じて、ニューヨークからボストンへのメッセージのルーティングが、ニュー
ヨークからロンドン、アトランタ、東京を経てボストンへのメッセージのルーティングを
用いる可能性がある。
【００１２】
したがって、少なくとも１つの他の最近の仕組みは、単一のスカラ近接メトリック（例
えば、ＩＰルーティングホップ数または地理的距離）として近接を定義することによって
、近接を考慮に入れる。これらの機構は、ルーティングテーブルエントリの近接ベースの
選択という概念を使用する。ルーティングテーブルエントリごとに多数の「正しい」ノー
ド候補があるので、これらの機構は、候補ノードの中から近さ的に近いノードを選択する
ことを試みる。これらの機構のために、各ノードがそれ自体への所与のＩＰノードを有す
るノードの「距離」を判定することを可能にする関数を提供することができる。メッセー
ジは、より離れたノードへのルーティングの前に宛先に向かって進行するために、より近
い近接内のノードの間でルーティングされる。したがって、一部のリソースを節約するこ
とができ、ルーティングは、より効率的である。
【００１３】
残念ながら、これらの既存の機構は、通常、とりわけ、ノードの間の対称関係（すなわ
ち、第１ノードが、第２ノードがパートナになると考える場合に、第２ノードも、第１ノ
ードをパートナと考える）、リング上での両方向（時計回りおよび反時計回り）でのメッ
セージのルーティング、複数の近接メトリックスに基づくノードのリンクリストのパーテ
ィショニング、および複数の近接メトリックスに基づくメッセージのルーティングを提供
しない。これらの不足は、例えば、ネットワークのすべてのノードにデータをブロードキ
ャストするときなど、ネットワークのノードの間でのデータのダイナミックで分散した効
率的な転送を制限する可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【００１４】
いくつかの環境で、セーフティ機構が、ノード責任が不適当にオーバーラップしないこ
とを保証するのに使用される。例えば、セーフティ機構は、２つの異なるノードが、１つ
のシステムリソース（例えば、１つのメッセージ）またはシステム内の論理アイデンティ
ティの責任を主張しないようにするのに使用することができる。いくつかの環境で、ライ
ブネス機構が、メッセージが１つのターゲットに繰り返して送信される場合にそのメッセ
ージが受け入れられることを保証するのに使用される。残念ながら、多くの既存の非同期
システムは、限られたセーフティ機構およびライブネス機構(liveness mechanisms)のみ
を提供する。例えば、一部の非同期システムは、最終的にのみセーフティおよびライブネ
スを提供する。したがって、これらの非同期システムは、例えば、信頼すべきストレージ
など、様々なタイプのアプリケーションに適切ではない。
【課題を解決するための手段】
【００１５】
本発明は、ランデブフェデレーション（ｒｅｎｄｅｚｖｏｕｓ ｆｅｄｅｒａｔｉｏｎ
）内で維持される複製セット内でデータアクセストランザクションを実行する方法、シス
テム、およびコンピュータプログラム製品におよぶ。いくつかの実施形態で、プライマリ
ノードが、ノードの複製セット内の複数のノードの中から選ばれたことが判定される。プ
ライマリノードは、クライアントデータアクセス要求を受け入れ、処理するように構成さ
れる。複製セットは、プライマリノードおよび他のセカンダリノードを含む。プライマリ
ノードは、クライアントデータアクセス要求を受信し、各データアクセス要求は、複製セ
ット内でプライマリノード上でアクセスされなければならないデータの少なくとも一部を
示す。
【００１６】
プライマリノードは、クライアントデータアクセス要求が受信される順序でクライアン
トデータアクセス要求のそれぞれにデータシーケンス番号を割り当てる。データシーケン
ス番号は、複製セット内のノードのそれぞれが従わなければならない線形化された処理順
序を含む。プライマリノードは、任意の対応するデータシーケンス番号を含むクライアン
トデータアクセス要求のうちの少なくとも１つを、セカンダリノードに送信する。プライ
マリノードは、少なくとも閾値個数のセカンダリノードから、クライアントデータアクセ
ス要求の受信を示す肯定応答を受信する。プライマリノードは、データアクセス要求をコ
ミットする。コミットは、クライアントデータアクセス要求に従ってデータにアクセスす
ることを含む。
【００１７】
この要約は、下の「発明を実施するための形態」でさらに説明される概念の選択物を単
純化された形で導入するために提供される。この要約は、請求される主題の主要な特徴ま
たは本質的特徴を識別することを意図されたものではなく、請求される主題の範囲を判定
する際の助けとして使用されることを意図されたものでもない。
【００１８】
追加の特徴および利益は、次の説明で示され、部分的にはその説明から明白になり、あ
るいは本明細書の教示の実践によって習得することができる。本発明の特徴および利益は
、添付の特許請求の範囲で具体的に指摘される機器および組合せによって実現し、入手す
ることができる。本発明の特徴は、次の説明および添付の特許請求の範囲からより十分に
明らかになり、あるいは、下で示される本発明の実践によって習得することができる。
【００１９】
上で列挙したおよび他の利益および特徴を入手できる形を説明するために、上で短く説
明した主題のより具体的な説明を、添付図面に示された特定の実施形態を参照することに
よって行う。これらの図面が通常の実施形態のみを示し、したがって、範囲において限定
的と考えられてはならないことを理解して、実施形態を、添付図面の使用を介してさらに
具体的かつ詳細に記述し、説明する。
【図面の簡単な説明】
【００２０】
【図１】フェデレーションインフラストラクチャの一例を示す図である。
【図２】パートナへの間接的な要求のルーティングを容易にするコンピューティングアーキテクチャの一例を示す図である。
【図３】ソートされたリストおよび対応するリングの形の、フェデレーションインフラストラクチャ内のノードの間の例示的なバイナリ関係を示す図である。
【図４】近接ルーティングを容易にするリングの例のリングを示す図である。
【図５】近接ルーティングを容易にするリングの例の近接誘導されたパーティションツリーを示す図である。
【図６】本発明の原理に適切なオペレーティング環境を示す図である。
【図７】近接判断基準を考慮に入れるノードルーティングテーブルを移植する方法を示す一例の流れ図である。
【図８】フェデレーションインフラストラクチャのノードをパーティショニングする方法を示す一例の流れ図である。
【図９】ノードルーティングテーブルを移植する方法を示す一例の流れ図である。
【図１０】メッセージを宛先ノードに向かって数値的にルーティングする方法を示す一例の流れ図である。
【図１１】メッセージを宛先ノードに向かって近接ルーティングする方法を示す一例の流れ図である。
【図１２Ａ】既存フェデレーション内でメンバシップを確立するノードの一例を示す図である。
【図１２Ｂ】メッセージを交換するフェデレーションインフラストラクチャ内のノードの一例を示す図である。
【図１３】フェデレーションインフラストラクチャ内でメンバシップを確立する方法を示す一例の流れ図である。
【図１４】フェデレーションインフラストラクチャ内でメンバシップを維持する方法を示す一例の流れ図である。
【図１５】別のノードのライブネス情報を発見する方法を示す一例の流れ図である。
【図１６】メッセージモデルおよび関連する処理モデルの一例を示す図である。
【図１７】機能レイヤとアプリケーションレイヤとの間で発生し得る複数のライブネス相互作用の一例を示す図である。
【図１８】リング上のノードにまたがってルーティングされる要求−応答メッセージ交換パターンの一部を形成するメッセージの一例を示す図である。
【図１９Ａ】あるノードが別の（例えば、対象）ノードを監視することを容易にする例のリングアーキテクチャを示す図である。
【図１９Ｂ】２つのノードがお互いを監視するのを容易にする例のリングアーキテクチャを示す図である。
【図１９Ｃ】相互に監視するノードが、他方のノードが障害について疑われることをそれぞれ報告できるときのアービトレーションを容易にする例のリングアーキテクチャを示す図である。
【図２０】あるノードが別のノードを監視する方法を示す一例の流れ図である。
【図２１】疑われるノード障害の衝突する報告の間でアービトレートする方法を示す一例の流れ図である。
【図２２Ａ】キャッシングされた２ウェイ合意によるメッセージのルーティングを容易にする例のリングアーキテクチャを示す図である。
【図２２Ｂ】複数のキャッシングされた２ウェイ合意によるメッセージのルーティングを容易にする例のリングアーキテクチャを示す図である。
【図２３Ａ】キャッシングされた２ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。
【図２３Ｂ】キャッシングされた２ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。
【図２３Ｃ】キャッシングされた２ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。
【図２３Ｄ】キャッシングされた２ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。
【図２４】キャッシングされた２ウェイ合意に従ってメッセージをルーティングする方法を示す一例の流れ図である。
【図２５】複数のキャッシングされた２ウェイ合意に従ってメッセージをルーティングする方法を示す一例の流れ図である。
【図２６】２ウェイ合意に参加する方法を示す一例の流れ図である。
【図２７】フェデレーション内のノードのリングへのノードの参加を容易にする例のリングアーキテクチャを示す図である。
【図２８】参加するノード、選択された直接に隣接するノード、およびもう１つの直接に隣接するノードの展望からの、参加するノードがノードのリングに参加するときのリング一貫性を維持する方法を示す一例の流れ図である。
【図２９】リービングノード(leaving node)がノードのリングを去るときにリング一貫性を維持する方法を示す一例の流れ図である。
【図３０】ノードのリングに参加する、参加するノードの例示的状態図である。
【図３１】ノードのリングを去る、リービングノードの例示的状態図である。
【図３２】フェデレーション内で複製セットおよびデータ一貫性を維持するのを容易にする例のリングアーキテクチャを示す図である。
【図３３】フェデレーションインフラストラクチャ内で維持される複製セット内でデータアクセストランザクションを実行する方法を示す一例の流れ図である。
【図３４】フェデレーションインフラストラクチャ内で一貫した複製セットを確立し、維持する方法を示す一例の流れ図である。
【図３５】動作の例示的シーケンスを示す図である。
【図３６】フェデレーションインフラストラクチャ内で複製セットからデータにアクセスする例示的システムを示す図である。
【発明を実施するための形態】
【００２１】
本発明は、ランデブフェデレーション内でリソースを割り当て、再生する方法、システ
ム、およびコンピュータプログラム製品におよぶ。いくつかの実施形態で、メッセージは
、宛先ノードに向かってルーティングされる。受信ノードは、ノードのリング上の宛先を
示す宛先識別子と共にメッセージを受信する。宛先識別子は、受信ノードと直接近傍ノー
ドとの間で配置される。直接近傍ノードは、直接先行近傍ノードおよび直接後続近傍ノー
ドの間から選択される。
【００２２】
受信ノードは、受信ノードと直接近傍ノードとの間のキャッシングされた２ウェイ合意
を参照して、メッセージを受信すべき次の適当なノードを決定する。キャッシングされた
２ウェイ合意は、少なくとも、受信ノードと直接近傍ノードとの間での識別子空間の責任
の分割を暗示する。受信ノードは、次の適当なノードの決定に基づいて、次の適当なコン
ポーネントにメッセージを送信する。
【００２３】
他の実施形態では、現行ノードと直接近傍ノードとの間の２ウェイ合意が定式化される
。ノードのリングの構成が変化したことの表示に現行ノードはアクセスする。表示は、少
なくとも現行直接近傍ノードでの変化を示す。現行直接近傍ノードは、現行直接先行ノー
ドと現行直接後続ノードとの間で選択される。この変化は、新しい直接近傍ノードをもた
らす。
【００２４】
表示、現行ノードと新しい直接近傍ノードとの間のリング上の少なくとも非占有識別子
の責任を分割する２ウェイ合意を定式化する必要のさらなる表示。現行ノードおよび新し
い直接近傍ノードは、現行ノードと新しい直接近傍ノードとの間の責任境界に合意する。
責任境界は、現行ノードと新しい直接近傍ノードとの間の非占有識別子の責任を分割する
。現行ノードと責任境界との間の非占有識別子は、現行ノードの責任になる。同様に、責
任境界と新しい直接近傍ノードとの間の非占有識別子は、新しい直接希望ノードの責任で
ある。
【００２５】
本発明の実施形態は、下で詳細に述べるように、コンピュータハードウェアを含む特殊
目的のまたは汎用のコンピュータを含むか利用することができる。本発明の範囲内の実施
形態は、コンピュータ実行可能命令および／またはデータ構造を担持しまたは格納する物
理的なおよび他のコンピュータ可読媒体をも含む。そのようなコンピュータ可読媒体は、
汎用のまたは特殊目的のコンピュータシステムによってアクセスできる任意の使用可能な
媒体とすることができる。コンピュータ実行可能命令を格納するコンピュータ可読媒体は
、物理記憶媒体である。コンピュータ実行可能命令を担持するコンピュータ可読媒体は、
伝送媒体である。したがって、限定ではなく例として、本発明の実施形態は、少なくとも
２つの明瞭に異なる種類のコンピュータ可読媒体すなわち物理記憶媒体および伝送媒体を
含むことができる。
【００２６】
物理記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、もしくは他の光学デ
ィスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、また
は、コンピュータ実行可能命令もしくはデータ構造の形で所望のプログラムコード手段を
格納するのに使用でき、汎用コンピュータまたは特殊目的コンピュータによってアクセス
できる任意の他の媒体を含む。
【００２７】
「ネットワーク」は、コンピュータシステムおよび／またはモジュールおよび／または
他の電子デバイスの間での電子データのトランスポートを可能にする１つまたは複数のデ
ータリンクと定義される。情報がネットワークまたは別の通信接続（有線、無線、または
有線もしくは無線の組合せのいずれであれ）を介してコンピュータに転送されるか提供さ
れるときに、そのコンピュータは、当然、その接続を伝送媒体とみなす。伝送媒体には、
コンピュータ実行可能命令またはデータ構造の形で所望のプログラムコード手段を搬送す
るかトランスポートするのに使用でき、汎用コンピュータまたは特殊目的コンピュータに
よってアクセスできるネットワークおよび／またはデータリンクを含めることができる。
上記の組合せも、コンピュータ可読媒体の範囲に含まれなければならない。
【００２８】
しかし、様々なコンピュータシステムコンポーネントに達するときに、コンピュータ実
行可能命令またはデータ構造の形のプログラムコード手段を、伝送媒体から物理記憶媒体
へ自動的に転送できることを理解されたい。例えば、ネットワークまたはデータリンクを
介して受信されたコンピュータ実行可能命令またはデータ構造を、ネットワークインター
フェースカード内のＲＡＭにバッファリングすることができ、その後、コンピュータシス
テムで最終的にコンピュータシステムＲＡＭおよび／またはより不揮発性の物理記憶媒体
に転送することができる。したがって、物理記憶媒体を、伝送媒体をも（または主に伝送
媒体を）利用するコンピュータシステムコンポーネントに含めることができることを理解
されたい。
【００２９】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、特殊目的コンピュータ、ま
たは特殊目的処理デバイスにある種の機能または機能のグループを実行させる命令および
データを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの
中間フォーマット命令、またはソースコードとすることすらできる。本主題を、構造的特
徴および／または方法論的行為に固有の言葉で説明してきたが、添付の特許請求の範囲で
定義される本主題が、必ずしも説明された特徴または上記行為に限定されないことを理解
されたい。そうではなく、説明された特徴および行為は、特許請求の範囲を実施する例の
形として開示されるものである。
【００３０】
いくつかの実施形態で、例えば、特殊目的集積回路またはゲートアレイなどのハードウ
ェアモジュールが、本発明の原理を実施するために最適化される。
【００３１】
この説明および後続の特許請求の範囲では、「ノード」は、電子データに対する動作を
実行するために一緒に働く、１つまたは複数のソフトウェアモジュール、１つまたは複数
のハードウェアモジュール、あるいはその組合せと定義される。例えば、ノードのこの定
義は、パーソナルコンピュータのハードウェアコンポーネントならびにパーソナルコンピ
ュータのオペレーティングシステムなどのソフトウェアモジュールを含む。モジュールの
物理的レイアウトは、重要ではない。ノードは、ネットワークを介して結合された１つま
たは複数のコンピュータを含むことができる。同様に、ノードは、内部モジュール（メモ
りおよびプロセッサなど）が電子データに対する動作を実行するために一緒に働く、単一
の物理デバイス（携帯電話機または携帯情報端末「ＰＤＡ」など）を含むことができる。
さらに、ノードは、例えば、特殊目的集積回路を含むルータなど、特殊目的ハードウェア
を含むことができる。
【００３２】
本発明を、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドデバイ
ス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラマブルな消
費者エレクトロニクス、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュ
ータ、携帯電話機、ＰＤＡ、ポケットベル、ルータ、ゲートウェイ、ブローカ、プロキシ
、ファイヤウォール、リダイレクタ、ネットワークアドレストランスレータ、および類似
物を含む多数のタイプのノード構成を有するネットワークコンピューティング環境内で実
践できることを、当業者は了解するであろう。本発明は、ネットワークを介してリンクさ
れた（有線データリンク、無線データリンク、または有線データリンクと無線データリン
クとの組合せのいずれかによって）ローカルノードとリモートノードとの両方がタスクを
実行する、分散システム環境で実践することもできる。分散システム環境では、プログラ
ムモジュールを、ローカルメモリストレージデバイスとリモートメモリストレージデバイ
スとの両方に配置することができる。
【００３３】
（フェデレーションアーキテクチャ）
図１に、フェデレーションインフラストラクチャ１００の一例を示す。フェデレーショ
ンインフラストラクチャ１００は、異なるタイプのフェデレーティングパートナーシップ
を形成できるノード１０１、１０２、および１０３を含む。例えば、ノード１０１、１０
２、および１０３を、ルートノードなしでピアとしてお互いの間でフェデレートすること
ができる。ノード１０１、１０２、および１０３のそれぞれは、それぞれ対応するＩＤ１
７１、１８２、および１９３を有する。
【００３４】
一般に、ノード１０１、１０２、および１０３は、フェデレーションプロトコルを使用
して、パートナーシップを形成し、情報（例えば、他のノードとの相互作用に関する状態
情報）を交換することができる。パートナーシップの形成および情報の交換は、より効率
的で信頼できる、リソースへのアクセスを容易にする。他の中間ノード（図示せず）が、
ノード１０１、１０２、および１０３の間に存在することができる（例えば、１７１と１
９３との間のＩＤを有するノード）。したがって、例えば、ノード１０１と１０３との間
でルーティングされるメッセージが、１つまたは複数の他の中間ノードを通過する可能性
がある。
【００３５】
フェデレーションインフラストラクチャ１００内のノード（他の中間ノードを含む）は
、対応するランデブプロトコルスタックを含むことができる。例えば、ノード１０１、１
０２、および１０３は、それぞれ対応するランデブプロトコルスタック１４１、１４２、
および１４３を含む。プロトコルスタック１４１、１４２、および１４３のそれぞれは、
アプリケーションレイヤ（例えば、アプリケーションレイヤ１２１、１２２、および１２
３）および他の下位レイヤ（例えば、対応する他の下位レイヤ１３１、１３２、および１
３３）を含む。ランデブプロトコルスタック内の各レイヤは、リソース要求を対応するリ
ソースにランデブさせることに関連する異なる機能性の責任を負う。
【００３６】
例えば、他の下位レイヤは、チャネルレイヤ、ルーティングレイヤ、および機能レイヤ
を含むことができる。一般に、チャネルレイヤは、あるエンドポイントから別のエンドポ
イントへ（例えば、ノード１０１からノード１０３へ）メッセージを信頼できる形でトラ
ンスポートする（例えば、ＷＳ−ＲｅｌｉａｂｌｅＭｅｓｓａｇｉｎｇおよびＳｉｍｐｌ
ｅ Ｏｂｊｅｃｔ Ａｃｃｅｓｓ Ｐｒｏｔｏｃｏｌ（「ＳＯＡＰ」）を使用して）責任を
負う。チャネルレイヤは、着信および発信の信頼できるメッセージングヘッダを処理し、
信頼できるメッセージングセッションに関係する状態を維持する責任をも負う。
【００３７】
一般に、ルーティングレイヤは、宛先に向かう次のホップを計算する責任を負う。ルー
ティングレイヤは、着信および発信のアドレッシングメッセージヘッダおよびルーティン
グメッセージヘッダを処理し、ルーティング状態を維持する責任をも負う。一般に、機能
レイヤは、参加要求、離脱要求、ｐｉｎｇ、更新、および他のメッセージなどのランデブ
プロトコルメッセージの発行および処理ならびにこれらのメッセージに対する応答の生成
の責任を負う。機能レイヤは、ルーティングレイヤからの要求メッセージを処理し、対応
する応答メッセージがある場合に、その応答メッセージをルーティングレイヤを使用して
起点ノードに送り返す。また、機能レイヤは、要求メッセージを開始し、ルーティングレ
イヤを使用してその応答メッセージを送達させる。
【００３８】
一般に、アプリケーションレイヤは、機能レイヤから送達された非ランデブプロトコル
固有データ（すなわち、アプリケーションメッセージ）を処理する。機能レイヤは、アプ
リケーションレイヤからのアプリケーションデータにアクセスし、ランデブプロトコルメ
ッセージ内のアプリケーションデータをゲットし、プットすることができる（例えば、ｐ
ｉｎｇおよび更新）。すなわち、機能レイヤは、アプリケーションデータをランデブプロ
トコルメッセージにピギーバックさせることができ、アプリケーションデータを、受信ラ
ンデブプロトコルノード内のアプリケーションレイヤに戻して渡させることができる。い
くつかの実施形態で、アプリケーションデータは、リソースおよびリソース関心を識別す
るのに使用される。したがって、アプリケーションレイヤは、リソースおよびリソース関
心を識別するために他の下位レイヤから受け取られ、他の下位レイヤに送られるデータを
処理するアプリケーション固有のロジックおよび状態を含むことができる。
【００３９】
（フェデレーティング機構）
ノードは、様々な異なる機構を使用してフェデレートすることができる。第１のフェデ
レーティング機構は、情報をすべての他のピアノードに転送するピアノードを含む。ある
ノードが、フェデレーションインフラストラクチャに参加するときに、そのノードは、例
えば、ＷＳ−Ｄｉｓｃｏｖｅｒｙなどのブロードキャスト／マルチキャストディスカバリ
プロトコルを利用して、そのプレゼンスをアナウンスし、ブロードキャスト／マルチキャ
ストファインド（ｂｒｏａｄｃａｓｔ／ｍｕｌｔｉｃａｓｔ ｆｉｎｄ）を発行して、他
のノードを検出する。次に、ノードは、ネットワーク上に既に存在する他のノードとの単
純な転送パートナーシップを確立し、新たに参加するノードとの新しいパートナーシップ
を受け入れる。その後、ノードは、単純にすべてのアプリケーション固有メッセージをそ
のパートナノードのすべてに転送する。
【００４０】
第２のフェデレーティング機構は、アプリケーション固有メッセージをその宛先（１つ
または複数）に最も効率的に送信するピアノードを含む。新しいノードがフェデレーショ
ンインフラストラクチャに参加するときに、その新しいノードは、例えば、ＷＳ−Ｄｉｓ
ｃｏｖｅｒｙなどのブロードキャスト／マルチキャストディスカバリプロトコルを利用し
てそのプレゼンスをアナウンスし、ブロードキャスト／マルチキャストファインドを発行
して、フェデレーションインフラストラクチャの一部である他のノードを検出する。別の
ノードを検出したときに、新しいノードは、その別のノードとのパートナーシップを確立
する。確立されたパートナーシップから、新しいノードは、フェデレーションインフラス
トラクチャに既に参加している他のノードのプレゼンスに関して学習する。新しいノード
は、次に、これらの新たに学習されたノードとのパートナーシップを確立し、すべての新
しい着信パートナーシップ要求を受け入れる。
【００４１】
ノード到着／離脱とあるアプリケーション固有メッセージへの関心の登録との両方が、
フェデレーションインフラストラクチャを介してフラッディングされ、すべてのノードが
他のパートナノードおよびアプリケーション固有メッセージへの関心の登録のグローバル
知識を有することをもたらす。そのようなグローバル知識を用いて、すべてのノードが、
アプリケーション固有メッセージへの関心を表したノードに直接にアプリケーション固有
メッセージを送信することができる。
【００４２】
第３のフェデレーティング機構は、すべてのアプリケーション固有メッセージをその宛
先（１つまたは複数）に間接的に転送するピアノードを含む。この第３の機構では、ノー
ドは、例えば、１２８ビットまたは１６０ビットの識別子（ＩＤ）などのＩＤを割り当て
られる。所与のアプリケーション固有メッセージへの関心の登録を維持する責任を負うノ
ードは、そのＩＤが、アプリケーション固有メッセージの宛先アイデンティティ（例えば
、ＵＲＩ）をこの１２８ビットまたは１６０ビットのＩＤにマッピングする（例えば、ハ
ッシュ化する）ことによって入手されるＩＤに最も近いノードになるように決定すること
ができる。
【００４３】
この第３の機構では、ノード到着および離脱は、ファブリック全体にフラッディングさ
れる。その一方で、あるアプリケーション固有メッセージへの関心の登録は、そのような
登録情報を維持する責任を負うと決定されたノードに転送される。スケーラビリティ、ロ
ードバランシング、およびフォールトトレランスのために、あるアプリケーション固有メ
ッセージへの関心の登録を受信するノードは、その近傍セット内でその登録情報を信頼で
きる形でフラッディングすることができる。指定されたノードの近傍セットは、指定され
たノードのＩＤの両側の事前定義の範囲内のＩＤを有するノードのセットになるように決
定することができる。
【００４４】
第２の機構に似て、新たに参加するノードは、例えば、ＷＳ−Ｄｉｓｃｏｖｅｒｙなど
のブロードキャスト／マルチキャストディスカバリプロトコルを利用してそのプレゼンス
をアナウンスし、ローカルブロードキャスト／マルチキャストファインドを発行して、既
にフェデレーションインフラストラクチャの一部であるノードを検出する。新しいノード
は、発見されたノードとのパートナーシップを確立し、そのパートナーシップを使用して
、フェデレーションインフラストラクチャに参加する他の新しいノードのプレゼンスにつ
いて学習する。次に、新しいノードは、新たに発見されたノードとのさらなるパートナー
シップを確立し、新たな着信パートナーシップ要求のすべてを受け入れる。新しいノード
は、それが責任を負う、そのパートナからのあるアプリケーションレイヤ固有リソースへ
の関心の着信登録を受け入れ、これらをその近傍セットにフラッディングすることができ
る。したがって、メッセージを、一般に、仲介ルーティングノード（例えば、新たに参加
するノードがそれとパートナにされたノードまたはパートナノードがそれを知っているノ
ード）を介して最終的な宛先に転送することができる。
【００４５】
着信アプリケーション固有メッセージの受信に応答して、新しいノードは、そのメッセ
ージで指定される宛先の登録情報を維持する責任を負う可能性があるパートナノードにそ
のメッセージを転送する。したがって、この第３の機構を使用するときに、フェデレーシ
ョンインフラストラクチャ内のすべてのノードは、他のすべてのノードのグローバル知識
を有するが、登録情報は、効率的にノードの間でパーティショニングされる。アプリケー
ション固有メッセージは、これらのアプリケーション固有メッセージへの関心の登録情報
を維持する責任を有する可能性があるパートナのノードだけを介して最終的な宛先に送信
される。したがって、インダイレクションは、処理されるメッセージに関する関心の登録
情報のグローバル知識を有するパートナノードのみに転送することによって達成される。
これは、インダイレクションがすべてのパートナノードに転送することによって達成され
る第１の機構と対照的である。
【００４６】
第４のフェデレーティング機構は、メッセージを他のピアノードにルーティングするピ
アノードを含む。この第４の機構は、少なくとも、ノード到着／離脱およびあるアプリケ
ーション固有メッセージへの関心の登録が、すべて、フラッディングされるのではなくル
ーティングされるという点で、第３の機構とは異なる。ルーティングプロトコルは、アプ
リケーション固有メッセージとそれらのアプリケーション固有メッセージへの関心を示す
登録メッセージとの間のランデブを保証するように設計される。
【００４７】
図２に、パートナへの間接的な要求のルーティングを容易にするコンピューティングア
ーキテクチャ２００の一例を示す。コンピューティングアーキテクチャ２００は、フェデ
レーションインフラストラクチャに参加する、潜在的に複数のローカルディスカバリスコ
ープにまたがって広がる複数のタイプのコンピュータおよびデバイスを示す。
【００４８】
ワークステーション２３３は、登録されたＰｎＰプロバイダインスタンスを含むことが
できる。このＰｎＰプロバイダインスタンスのプレゼンスについてそのパートナに知らせ
るために、ワークステーション２３３は、フェデレーションインフラストラクチャを介し
て登録要求２０１をルーティングする。登録要求２０１は、当初に、ラップトップ機２３
１にルーティングされ、ラップトップ機２３１は、登録要求２０１をメッセージブローカ
２３７に転送し、メッセージブローカ２３７は、登録要求２０１をメッセージゲートウェ
イ２４１に転送する。メッセージゲートウェイ２４１は、登録要求２０１内の登録情報を
データベースに保存し、成功メッセージ２０４をワークステーション２３３に返す。
【００４９】
その後、別の登録されたプロバイダインスタンス、今回は動作中サービスの登録された
プロバイダインスタンスが、ワークステーション２３３内で活動状態になる。今回は、ノ
ードは、メッセージゲートウェイ２４１が登録の責任を負うことを知っており、登録要求
２０５をメッセージゲートウェイ２４１に直接に転送する。メッセージゲートウェイ２４
１は、登録要求２０５内の登録情報をデータベースに保存し、成功メッセージ２０６をワ
ークステーション２３３に返す。
【００５０】
その後、プリンタ２３６（例えば、ＵＰｎＰプリンタ）が、電源を入れられ、アナウン
スメント２０７を送信する。サーバ２３４は、アナウンスメント２０７を検出し、登録要
求２０８をメッセージブローカ２３７にルーティングする。メッセージブローカ２３７は
、登録要求２０８をメッセージゲートウェイ２４１に転送する。メッセージゲートウェイ
２４１は、登録要求２０８内の登録情報をデータベースに保存し、成功メッセージ２１０
をサーバ２３４に返す。
【００５１】
その後、パーソナルコンピュータ２４２が、すべてのデバイスを発見するためにルック
アップ要求２１１を発行する。パーソナルコンピュータ２４２は、ルックアップ要求２１
１をどこに転送すべきかを知らないので、ワークステーション２４３を介してルックアッ
プ要求２１１をルーティングする。登録要求およびルックアップ要求は、同一の宛先にル
ーティングされるので、ルーティングプロトコルは、本質的に、この２つの要求の間のラ
ンデブを保証し、ワークステーション２４３がファインド要求２１１をメッセージゲート
ウェイ２４１に転送することをもたらす。メッセージゲートウェイ２４１は、それによっ
て維持される登録情報をルックアップし、ファインド要求２１１をワークステーション２
３３とサーバ２３４との両方に転送する。ワークステーション２３３およびサーバ２３４
は、それぞれ応答メッセージ２１４および２１６をパーソナルコンピュータ２４２に送信
する。
【００５２】
この第４の機構は、要求で指定される登録のグローバル知識を有するノード（メッセー
ジゲートウェイ２４１）に要求をルーティングする（フラッディングではなく）ことによ
って働く。この第４の機構は、以下でさらに詳細に説明するように、本質的に、ルーティ
ングをＯ（ｌｏｇ Ｎ）ホップで達成できることを保証する。ここで、Ｎは、フェデレー
ションインフラストラクチャに参加するノードの個数である。この第４の機構は、ノード
パートナーシップと登録情報との両方を効率的にパーティショニングするので、非常に大
きいネットワークに、インターネットにさえスケーリングされる。
【００５３】
複数のフェデレーション機構を説明したが、この説明を再検討した後に、当業者には、
他のフェデレーション機構が可能であることが明白になるであろう。
【００５４】
（フェデレーション内のノードの間の関係）
したがって、フェデレーションは、情報をシステマティックに効率的に散布でき突き止
めることができるダイナミックでスケーラブルなネットワークを形成するためにそれら自
体の間で協力するノードのセットからなる。ノードは、反射性であり、反対称であり、推
移的であり、全体的であり、ノードアイデンティティのドメインにわたって定義されるバ
イナリ関係を使用して、ソートされたリストとして、フェデレーションに参加するために
編成される。ソートされたリストの両端が、結合され、これによってリングを形成する。
したがって、リスト内の各ノードは、それ自体を、ソートされたリストの中央にあると見
なすことができる（ｍｏｄｕｌｏ演算を使用した結果として）。さらに、このリストは、
二重にリンクされ、その結果、任意のノードが、どちらの方向でもこのリストをトラバー
スできるようになる。
【００５５】
各フェデレートするノードには、０とある固定された上界との間のＩＤの固定されたセ
ットからのＩＤを割り当てることができる（例えば、重複検出を伴う乱数ジェネレータに
よって）。したがって、固定された上界のＩＤに１を加算することは、０のＩＤをもたら
す（すなわち、リンクリストの終りからリンクドリステッドの先頭に戻って移動する。さ
らに、ノードアイデンティティの値ドメインからノード自体への１：１マッピング関数が
、定義される。
【００５６】
図３に、一例としてリンクリスト３０４および対応するリング３０６を示す。そのよう
なリングを与えられて、次の関数を定義することができる。 
ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）：ノードアイデンティティの値ド
メインからの値Ｖおよびメッセージ「Ｍｓｇ」を与えられて、そのアイデンティティがマ
ッピング関数を使用してＶにマッピングされ得るノードＸにメッセージを送達する。 
Ｎｅｉｇｈｂｏｒｈｏｏｄ（Ｘ，Ｓ）：近傍（Ｎｅｉｇｈｂｏｒｈｏｏｄ）は、Ｓと
等しい濃度を有する、ノードＸの両側のノードの集合である。
【００５７】
フェデレーション内のすべてのノードが、リングのグローバル知識を有するときに、Ｒ
ｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）は、そのアイデンティティがＶにマッピ
ング関数を適用することによって入手されるノードＸに直接にＭｓｇを送信することによ
って実施される。その代わりに、ノードが、他のノードの限られた（例えば、直接に隣接
するノードのみの）知識を有するときに、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓ
ｇ）は、メッセージが宛先ノードＸに達するまで、そのメッセージをリングに沿って連続
するノードに転送することによって実施される。
【００５８】
あるいは（有利なことに）、ノードは、分散バイナリサーチを実行するのに十分な、リ
ングに関する知識を格納することができる（グローバル知識を有するか、直接隣接するノ
ードの間のルーティングを実施する必要なしに）。リング知識の量は、構成可能であり、
リング知識の維持が、各ノードに対する十分に小さい影響を有するが、ルーティングホッ
プ数の削減から高められたルーティング性能を可能にするようになっている。
【００５９】
前述のように、ＩＤを、自然数の十分に大きい有界集合（その範囲が、０とある固定さ
れた値との間（両端を含む）の数の有限集合にわたることを意味する）にわたって定義さ
れる「＜」（未満）関係を使用して割り当てることができる。したがって、フェデレーシ
ョンに参加するすべてのノードが、０とある適当に選択された上界との間にある（両端を
含む）自然数を割り当てられる。この範囲は、狭いものである必要はなく、ノードに割り
当てられる数の間にギャップを設けることができる。ノードに割り当てられる数は、リン
グ内でのそのノードのアイデンティティとして働く。マッピング関数は、２つのノードア
イデンティティの間に含まれる数を、そのアイデンティティが数値的にその数に最も近い
ノードにマッピングすることによって、数空間内のギャップを考慮に入れる。
【００６０】
この手法は、複数の利益を有する。各ノードに均一に分布する数を割り当てることによ
って、リングのすべてのセグメントが均一に占められる尤度が高まる。さらに、後続物、
先行物、および近傍の計算を、ｍｏｄｕｌｏ演算を使用して効率的に行うことができる。
【００６１】
いくつかの実施形態で、フェデレートするノードは、２つのノードが同一のＩＤを割り
当てられる可能性が非常に低くなるのに十分に大きいＩＤ空間内からＩＤを割り当てられ
る（例えば、乱数生成が使用されるとき）。例えば、あるノードに、０からｂn-1までの
範囲内のＩＤを割り当てることができ、ここで、ｂは、例えば、８または１６と等しく、
ｎは、例えば、１２８ビットまたは１６０ビットと同等の桁である。したがって、あるノ
ードに、例えば、０から１６40−１（すなわち、約１．４６１５０２Ｅ４８）までの範囲
からＩＤを割り当てることができる。０から１６40−１までの範囲は、例えば、インター
ネット上のすべてのノードに一意ＩＤを割り当てるのに十分な個数のＩＤをもたらすはず
である。
【００６２】
したがって、フェデレーション内の各ノードは、次を有することができる。 
０からｂn-1までの範囲内で均一に分布する数値であるＩＤと、
【００６３】
【表１】
2014116968.tif 000003
【００６４】
からなるルーティングテーブル（すべての演算が、ｍｏｄｕｌｏ ｂnで行われる）。
ここで、ｂは、基数であり、ｎは、桁数単位のフィールドサイズであり、ｕは、近傍範囲
であり、ｖは、近傍サイズであり、演算は、ｍｏｄｕｌｏ ｂnで実行される。よいルーテ
ィング効率およびフォールトトレランスのために、ｕおよびｖの値を、ｕ＝ｂかつｖ≧ｍ
ａｘ（ｌｏｇ2（Ｎ），４）とすることができ、ここで、Ｎは、フェデレーションに物理
的に参加するノードの総数である。Ｎは、例えば、ＩＤの均一な分布があるときに、その
長さがｂ以上であるリングセグメントに存在するノードの個数から推定することができる
。ｂおよびｎの通常の値は、ｂ＝８または１６であり、ｎ＝１２８ビットまたは１６０ビ
ットと同等の桁である。
【００６５】
したがって、ルーティングノードは、リングにまたがる対数インデックスを形成するこ
とができる。リング上のノードの位置に応じて、例えば、ｉｄ±ｂi、ただしｉ＝（１，
２，．．．（ｎ−１））の集合内の各数に既存ノードがあるときに、正確な対数インデッ
クスが可能である。しかし、集合内の各数に既存のノードがない場合がある。この場合に
は、ｉｄ±ｂiに最も近いノードを、ルーティングノードとして選択することができる。
結果の対数インデックスは、正確ではなく、集合内のいくつかの数について一意ルーティ
ングノードを欠く場合すらある。
【００６６】
図３をもう一度参照すると、図３は、ソートされたリスト３０４および対応するリング
３０６の形の、フェデレーションインフラストラクチャ内のノードの間のバイナリ関係の
一例を示す。ソートされたリスト３０４のＩＤ空間は、０から２8−１（すなわち２５５
）までの範囲内にある。すなわち、ｂ＝２かつｎ＝８である。したがって、図３に示され
たノードは、０から２５５までの範囲のＩＤを割り当てられる。ソートされたリスト３０
４は、反射性であり、反対称であり、推移的であり、全体的であり、ノードアイデンティ
ティのドメインにわたって定義されるバイナリ関係を利用する。ソートされたリスト３０
４の両端は、結合され、これによってリング３０６が形成される。これは、図３の各ノー
ドが、それ自体をソートされたリスト３０４の中央にあるとみなすことを可能にする。ソ
ートされたリスト３０４は、二重リンクされ、その結果、任意のノードが、どちらの方向
でもソートされたリスト３０４をトラバースできるようになる。ソートされたリスト３０
４（またはリング３０６）をトラバースするための演算は、ｍｏｄｕｌｏ ２8で実行され
る。したがって、２５５（すなわちソートされたリスト３０４の終り）＋１＝０（すなわ
ち、リスト３０４の始め）である。
【００６７】
このルーティングテーブルは、ＩＤ６４の後続物がＩＤ７６である（ＩＤ６４から直接
に時計回りのＩＤ）ことを示す。後続物は、例えば、新しいノード（例えば、７１のＩＤ
を有する）が参加するか、既存ノード（例えば、ＩＤ７６）がフェデレーションインフラ
ストラクチャを去るときに、変化し得る。同様に、このルーティングテーブルは、ＩＤ６
４の先行物がＩＤ５０である（ＩＤ６４から直接に反時計回りのＩＤ）ことを示す。後続
物は、例えば、新しいノード（例えば、５９のＩＤを有する）が参加するか、既存ノード
（例えば、ＩＤ５０）がフェデレーションインフラストラクチャを去るときに、変化し得
る。
【００６８】
このルーティングテーブルは、さらに、ＩＤ６４に対する近傍ノードのセットが、ＩＤ
８３、７６、５０、および４６を有することを示す。近傍ノードのセットは、ＩＤ６４か
ら指定された範囲（すなわち、近傍範囲ｕ）以内にある指定された個数のノード（すなわ
ち、近傍サイズｖ）とすることができる。様々な異なる近傍サイズおよび近傍範囲、例え
ば、Ｖ＝４およびＵ＝１０を、潜在的に、近傍ノードのセットを識別するのに使用するこ
とができる。近傍セットは、例えば、ノードがフェデレーションインフラストラクチャに
参加するか去るとき、またはノードの指定された個数もしくは指定された範囲が変更され
るときに、変化し得る。
【００６９】
このルーティングテーブルは、さらに、ＩＤ６４が、ＩＤ２、３０、４６、５０、６４
、６４、６４、６４、７６、８３、９８、１３５、および２００を有するノードにルーテ
ィングできることを示す。このリストは、ｉｄ±２i、ただしｉ＝（１，２，３，４，５
，６，７）の集合内の各数に最も近いノードを識別することによって生成される。すなわ
ち、ｂ＝２かつｎ＝８である。例えば、ＩＤ７６を有するノードは、６４＋２3すなわち
７２に最も近いノードを計算することから識別することができる。
【００７０】
ノードは、先行ノード、後続ノード、近傍ノードのセット内の任意のノード、または任
意のルーティングノードに直接にメッセージ（例えば、リソースへのアクセスに関する要
求）をルーティングすることができる。いくつかの実施形態で、ノードは、メッセージを
ルーティングするために数値ルーティング関数を実施する。したがって、ＲｏｕｔｅＮｕ
ｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓｇ）をノードＸで実施して、そのＩＤが数値的にＶに最も
近いフェデレーション内のノードＹにＭｓｇを送達し、ノードＹのＩＤをノードＸに返す
ことができる。例えば、ＩＤ６４を有するノードは、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ
（２４３，Ｍｓｇ）を実施して、ＩＤ２５０を有するノードにメッセージをルーティング
させることができる。しかし、ＩＤ２５０は、ＩＤ６４のルーティングノードではないの
で、ＩＤ６４は、このメッセージをＩＤ２（２４３に最も近いルーティングノード）にル
ーティングすることができる。ＩＤ２を有するノードは、ＲｏｕｔｅＮｕｍｅｒｉｃａｌ
ｌｙ（２４３，Ｍｓｇ）を実施して、ＩＤ２５０を有するノードにメッセージをルーティ
ングさせる（直接にまたはさらなる仲介ノードを介して）ことができる。したがって、Ｒ
ｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ関数が再帰的に呼び出され、各呼出しが、メッセージを
宛先のより近くにルーティングするかもしれない。
【００７１】
（近接）
有利なことに、本発明の他の実施形態は、１つまたは複数の近接カテゴリ（例えば、地
理的境界、ルーティング特性（例えば、ＩＰルーティングホップ数）、管理ドメイン、組
織境界など）の複数の近接判断基準に基づく、リングのリングまたはリングのツリーへの
リングのパーティショニングを容易にする。リングを、同一タイプの近接判断基準を使用
して複数回パーティショニングできることを理解されたい。例えば、あるリングを、大陸
近接判断基準および国近接判断基準（両方が地理的境界近接カテゴリの）に基づいてパー
ティショニングすることができる。
【００７２】
ＩＤを、ＩＤ空間にわたって均一に分布させることができる（乱数生成の結果）ので、
円形ＩＤ空間の任意の所与のセグメントが、異なる近接クラスに属するノードを含む（こ
れらのクラスがほぼ同一の濃度を有するならば）ことの高い確率がある。この確率は、意
味のある統計的挙動を得るのに十分な個数のノードがあるときに、さらに高まる。
【００７３】
したがって、任意の所与のノードの近傍ノードは、通常、近接の観点からはよく分散さ
れている。パブリッシュされるアプリケーション状態を、近傍ノードの間で複製すること
ができるので、パブリッシュされる情報を、近接の観点から同様によく分散させることが
できる。
【００７４】
図４に、近接ルーティングを容易にするリングのリング４００を示す。リング４０１は
、マスタリングまたはルートリングとみなすことができ、リング４０２、４０３、および
４０４のそれぞれのすべてのノードを含む。リング４０２、４０３、および４０４のそれ
ぞれは、指定された近接判断基準に基づいてパーティショニングされた、リング４０１か
らのノードのサブセットを含む。例えば、リング４０１を、地理的位置に基づいてパーテ
ィショニングすることができ、ここで、リング４０２は、北アメリカ内のノードを含み、
リング４０３は、欧州内のノードを含み、リング４０４は、アジア内のノードを含む。
【００７５】
６５５３６（２16）個のＩＤを含む数空間内で、ＩＤ５３４５を有する北アメリカノー
ドからＩＤ２３３４５を有するアジアノードへのメッセージのルーティングは、アジアノ
ードの近傍ノードが識別されるまでそのメッセージをリング４０２内でルーティングする
ことを含むことができる。次に、この近傍ノードが、そのメッセージをそのアジアノード
にルーティングすることができる。したがって、単一ホップ（複数ホップではなく）が、
北アメリカノードとアジアノードとの間で行われる。したがって、ルーティングは、リソ
ース効率のよい形で実行される。
【００７６】
図５に、近接ルーティングを容易にするリングの一例の近接誘導されたパーティション
ツリー５００を示す。図示されているように、リングのパーティションツリー５００は、
複数のリングを含む。リングのそれぞれは、ソートされたリンクリストの１パーティショ
ンを表す。各リングは、ソートされたリンクリスト内のＩＤを有する複数ノードを含む。
しかし、明瞭さのために、潜在的ノードの個数に起因して、ノードは、リング上に明示的
に図示されてはいない（例えば、パーティションツリー５００のＩＤ空間は、ｂ＝１６か
つｎ＝４０である場合がある）。
【００７７】
パーティションツリー５００内で、ルートリング５０１は、判断基準５７１（第１管理
ドメイン境界判断基準）に基づいて、サブリング５１１、５１２、５１３、および５１４
を含む複数のサブリングにパーティショニングされる。例えば、ＤＮＳ名の各コンポーネ
ントを、近接判断基準と考えることができ、それらの間の半順序は、右から左へ読まれる
ＤＮＳ名での出現の順序に従って誘導される。したがって、サブリング５１１を、さらに
、判断基準５８１（第２管理ドメイン境界判断基準）に基づいて、サブリング５２１、５
２２、および５２３を含む複数のサブリングにパーティショニングすることができる。
【００７８】
サブリング５２２を、さらに、判断基準５７２（地理的境界判断基準）に基づいて、サ
ブリング５３１、５３２、および５３３を含む複数のサブリングにパーティショニングす
ることができる。位置ベースの近接判断基準を、大陸、国、郵便番号などの線に沿って半
順序を付けることができる。郵便番号は、それ自体が階層的に編成され、これは、郵便番
号を、近接判断基準の半順序を付けられたサブリストをさらに誘導すると見なすことがで
きることを意味する。
【００７９】
サブリング５３１を、さらに、判断基準５７３（第１組織境界判断基準）に基づいて、
サブリング５４１、５４２、５４３、および５４４を含む複数のサブリングにパーティシ
ョニングすることができる。近接判断基準の半順序を付けられたリストを、部、課、およ
び製品グループなど、所与の会社がどのように組織的に構成されるかの線に沿って誘導す
ることができる。したがって、サブリング５４３を、さらに、判断基準５８３（第２組織
境界判断基準）に基づいて、サブリング５５１および５５２を含む複数のサブリングにパ
ーティショニングすることができる。
【００８０】
パーティションツリー５００内で、各ノードは、単一のＩＤを有し、ルートから始まる
葉への対応するパーティションパスに沿ったリングに参加する。例えば、サブリング５５
２に参加する各ノードは、サブリング５４３、５３１、５２２、および５１１ならびにル
ート５０１にも参加する。宛先ノード（ＩＤ）へのルーティングは、次のように、Ｒｏｕ
ｔｅＰｒｏｘｉｍａｌｌｙ関数を実施することによって達成することができる。
【００８１】
ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，Ｐ）：ノードアイデンティティのドメ
インからの値Ｖおよびメッセージ「Ｍｓｇ」を与えられて、近接判断基準Ｐによって同等
と考えられるノードの間でそのアイデンティティをＶにマッピングできるノードＹにメッ
セージを送達する。
【００８２】
したがって、ルーティングを、所与のリング内でルーティングすることによってさらな
る進行を行えなくなる（宛先ノードが現行ノードとその後続ノードまたは先行ノードとの
間にあるという条件から判定される）まで、そのリング内で宛先ノードのより近くに徐々
に移動することによって達成することができる。この点で、現行ノードは、それが参加す
る次により大きいリング内のパートナノードを介してルーティングを開始する。ルートリ
ングに向かってパーティショニングパスに沿って登ることによって宛先ノードに向かって
徐々に移動するこのプロセスは、宛先ノードに最も近いノードに、ＲｏｕｔｅＰｒｏｘｉ
ｍａｌｌｙ呼出しで最初に指定された要求された近接コンテキスト内で達するときに、打
ち切られる。
【００８３】
ルーティングホップは、宛先ノードがその外に存在するので近傍内でさらなる進行を行
えなくなるまで、要求を発したノードの近接近傍内に残ることができる。さらなる進行を
行えなくなった点で、近接判断基準は、さらなる進行を行うために近接近傍のサイズを増
やすために緩和される。このプロセスは、近接近傍が宛先ノード（ＩＤ）を含むのに十分
に拡がるまで繰り返される。近接近傍判断基準の各連続する緩和の後に行われるルーティ
ングホップは、以前のホップと比較して数空間内で相対的により小さいジャンプを行いな
がら、近接空間内で潜在的により大きいジャンプとすることができる。したがって、絶対
に必要な個数のそのような（リング間）ホップだけが、宛先に達する前に行われる。
【００８４】
パブリッシュされるアプリケーションデータが、宛先ノードの近傍ノードの間で複製さ
れるときに、パーティションツリーを下って複製されるので、いくつかのホップが、ルッ
クアップメッセージについて回避されるかもしれない。
【００８５】
近接ルーティングを達成するために、各フェデレーションノードは、それがメンバとし
て参加するすべてのリング内の後続ノードおよび先行ノード（単一リングに関する後続物
および先行物に類似する）すなわち、近接先行物、近接後続物、および近接近傍への参照
を維持する。ルーティングを効率的にするために、ノードは、リングのいずれかの半分で
指数関数的に増加する距離に最も近い他のノードへの参照を、ルーティングパートナとし
て維持することもできる（単一リングのルーティングノードに類似する）。いくつかの実
施形態で、連続する後続ノードの対の間または連続する先行ノードの対の間にあるルーテ
ィングパートナノードは、現行ノードと、それぞれ後続ノード対または先行ノード対の間
でそれに数値的に最も近いノードとによって共有される同一の最下位のリングに参加する
。したがって、宛先ノードに向かうルーティングホップは、さらなる進行を行うために絶
対に必要であるときに限って、緩和された近接判断基準の使用に推移する（すなわち、よ
り上位のリングへの推移）。したがって、メッセージを、対応するフェデレーションノー
ドと効率的にランデブさせることができる。
【００８６】
いくつかの実施形態で、ノードは、同等性判断基準関係に基づいてメッセージをルーテ
ィングするために近接ルーティング関数を実施する。したがって、数Ｖおよびメッセージ
「Ｍｓｇ」を与えられて、ノードは、近接判断基準Ｐによって同等と考えられるノードの
間でそのアイデンティティをＶにマッピングできるノードＹにメッセージを送達するよう
にＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，Ｐ）を実施することができる。近接判
断基準Ｐは、それによって近接的に同等と考えられるすべてのノードの共通の先祖である
パーティションツリー内の最下位リングを識別する。これは、パスセパレータ文字「／」
によって分離される、ルートリングからそれによって識別されるリングまでの経路に沿っ
て見つかる近接判断基準を連結することによって得られるストリングとして表すことがで
きる。例えば、サブリング５４２を識別する近接判断基準を「Ｐｒｏｘｉｍｉｔｙ：／．
ＣＯＭ／Ｃｏｒｐ２／ＬｏｃａｔｉｏｎＡ／Ｄｉｖ２」と表すことができる。パーティシ
ョンツリー５００内の各リングに、例えば、それを表すストリングをＳＨＡベースのアル
ゴリズムを用いてハッシュ化することによって、一意の数を割り当てることができる。数
０が、ルートリングに予約される場合に、ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｖ，Ｍｓ
ｇ）≡ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ（Ｖ，Ｍｓｇ，０）であると推論することができ
る。
【００８７】
例えば、サブリング５４４内のノードは、サブリング５３１内のより近い（例えば、サ
ブリング５１３内のノードに）ノードを識別するようにＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ
を実施することができる。サブリング５３１は、サブリング５２２内のより近いノードを
識別するようにＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施することができる。同様に、サブ
リング５２２は、サブリング５１１内のより近いノードを識別するようにＲｏｕｔｅＰｒ
ｏｘｉｍａｌｌｙを実施することができる。同様に、サブリング５１１は、リング５０１
内のより近いノードを識別するようにＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを実施することが
できる。したがって、ＲｏｕｔｅＰｒｏｘｉｍａｌｌｙ関数が、再帰的に呼び出され、各
呼出しが、宛先のより近くにメッセージをルーティングするかもしれない。
【００８８】
したがって、近接判断基準を考慮に入れるときに、最終的な宛先へのパス上のルーティ
ングホップは、宛先ノードに達するか、あるいは選択された近接判断基準の下でさらなる
進行を行うことができなくなる（その点で、近接判断基準は、宛先に向かうさらなる進行
を行うのにちょうど十分なだけ緩和される）かのいずれかになるまで、数空間内で起点ノ
ードと宛先ノードとの間で意味のある進行を行いながら、要求を発したノードの近傍内に
残ることができる。例えば、近接判断基準を、メッセージをリング５３１からリング５２
２までルーティングするのに十分に緩和することなどができる。
【００８９】
近接性への上の手法を利用すると、パブリッシュされる情報を所与のリングに閉じ込め
ることが可能である。例えば、組織は、組織固有の情報が（１）彼らのドメインの外部の
ノードへの近接複製の形で暗黙のうちに、または（２）そのような情報に関するルックア
ップ要求にサービスすることという形で明示的に、のいずれかで、彼らの信頼ドメインの
外部のエンティティに使用可能ではないことを保証することを好む可能性がある。第１の
態様は、パブリッシュされる情報を、指定されたリング内のターゲットＩＤの近傍のノー
ドの間だけで複製することによって満足される。あるノードが発するすべてのメッセージ
が、ルートリングに向かってそれが属するリングを連続して登ることによってルーティン
グされるので、ある組織内で発するすべてのルックアップ要求が、それに閉じ込められた
パブリッシュされた情報を突き止めることができ、これによって、暗黙のうちに第２の態
様を満足する、高い尤度がある。
【００９０】
また、組織は、ノードが彼らの信頼ドメインの外部のノードと自動的にフェデレートす
ることを嫌う。これは、例えば、訪問販売員が、彼／彼女のラップトップコンピュータを
顧客の建物内のネットワークに接続するときに発生し得る。理想的には、販売員に属する
ラップトップコンピュータは、そのホームドメイン内でパブリッシュされた情報を突き止
め、かつ／またはその最下位の好ましい近接リングから始まるそのホームドメイン内のノ
ードとフェデレートすることを望む。通常、顧客のドメイン内のノードとフェデレートす
ることは、許可されない。このシナリオをサポートするには、ホームドメイン内のシード
ノード(seed node)を突き止める能力が必要である。そのようなシードノードは、ホーム
ドメイン内でパブリッシュされた情報を突き止めるのに、ホームフェデレーションに参加
するのに、ドメインにまたがってパブリッシュされる情報を選択的にインポートし、エク
スポートするのに、および他のノードによって提出された衝突する異常報告をアービトレ
ートする１つの可能な形として、使用することができる。シードノードは、時々、メッセ
ージゲートウェイとも呼ばれる。
【００９１】
他の実施形態では、エンティティは、ルートリング内でシードノードへの参照をパブリ
ッシュする。シードノードは、リングに関連する（ターゲットＩＤとして）一意の数（そ
れを表すストリングをハッシュ化することによって得られる数など）でパブリッシュする
ことができる。シードノード情報を、さらに、ルートリング内の対応するターゲットＩＤ
へのパス上にある様々なリング内のノードによってオンデマンドキャッシングすることが
できる。そのようなオンデマンドキャッシングは、改善された性能と、準静的情報が非常
に頻繁にルックアップされるときに発生し得るホットスポットの減少とをもたらす。シー
ドノード情報を、ＤＮＳなどの他の手段を介して入手することもできる。
【００９２】
閉じ込められたパブリッシュされた情報のフォールトトレランス（fault tolerance）
を提供するために、各ノードが、それが参加するすべてのリングの近傍ノードのセットを
維持することができる。上記を考慮すると、ノードによって維持される状態を、次のよう
に要約することができる。 
・０からｂn−１までの範囲に均一に分布する数値であるＩＤ。
・次からなるルーティングテーブル（すべての演算はｍｏｄｕｌｏ ｂnで行われる）
○ ノードが参加するリングのそれぞれ、例えば、リングｄについて、
【００９３】
【表２】
2014116968.tif 000004
【００９４】
○ 適当にｓd≦ｉｄ＋ｂi≦ｓd+1またはｐd+1≦ｉｄ−ｂi≦ｐdになるｒ±i＝Ｒｏｕ
ｔｅＰｒｏｘｉｍａｌｌｙ（ｉｄ±ｂi，ｕｐｄａｔｅＭｓｇ，ｄ）になるルーティング
ノード（ｒ-(n-1)，．．．，ｒ-1，ｒ1，．．．，ｒn-1）
ここで、ｂは、基数であり、ｎは、桁数単位のフィールドサイズであり、ｕは、近
傍範囲であり、ｖは、近傍サイズである。
【００９５】
リング「ｄ」内の所与のノードによって維持される近傍ノードのサブセットが、その所
与のノードがやはり参加する子リング「ｄ＋１」内の近傍ノードとしてもう一度現れ得る
ことに留意されたい。したがって、所与のノードが参加するＤ個のリングのすべてにまた
がってその所与のノードによって維持される近傍ノードの総数に対する上界を、Ｄ＊ｍａ
ｘ（ｕ，ｖ）／２として導出することができる。これは、所与のノードに対する１つの参
照だけが保存されることを考慮したものであり、ワーストケース上界は、バランスのとれ
たツリーに関する。
【００９６】
リングが、複数の対応する兄弟サブリングにパーティショニングされるときに、指定さ
れたノードが、例えば、エイリアシング(aliasing)を介して、複数の対応する兄弟サブリ
ングのうちの複数に同時に参加することが許可されることに留意されたい。エイリアシン
グは、例えば、異なるサブリングからの、異なる状態を、指定されたノードに関連付ける
ために実施することができる。したがって、所与のノードのエイリアスは、同一のＩＤを
有するが、各エイリアスは、別個の状態を関連付けられることができる。エイリアスは、
指定されたノードが、必ずしもより特定の近接判断基準の共通の先祖ではない別個の近接
判断基準を有する複数のリングに参加することを可能にする。すなわち、指定されたノー
ドは、近接ツリーの複数の枝に参加することができる。
【００９７】
例えば、二重ＮＩＣ（有線および無線）ラップトップ機を、そのラップトップ機と同一
のＬＡＮセグメントを共有する他の無線ノードと有線ノードとの両方と近接的に同等と考
えることができる。しかし、これらの２つの別個の近接判断基準を、例えば、組織メンバ
シップに基づくものなど、異なるより高い優先順位の近接判断基準の適用の後に限って適
用可能なサブ判断基準としてモデル化することができる。そのラップトップ機は、同一の
組織に属するので、１）有線ＬＡＮセグメント内のメンバシップおよび、２）無線ＬＡＮ
セグメント内のメンバシップを表す２つのサブリング内のエイリアス化されたノードは、
そのラップトップ機が属する組織を表すリング内の単一のノードにマージされる。Ｒｏｕ
ｔｅＰｒｏｘｉｍａｌｌｙが、エイリアシングの存在下でまったく変更なしに期待された
とおりに働くことを理解されたい。
【００９８】
各近接リングを、（潜在的に異なる）リングパラメータに従って構成することができる
。リングパラメータは、近傍を定義する（例えば、リングパラメータは、近傍範囲、近傍
サイズ、ｐｉｎｇメッセージおよびｄｅｐａｒｔメッセージのタイミング、ならびにｐｉ
ｎｇメッセージおよびｄｅｐａｒｔメッセージの分布パターンを表すことができる）か、
特定のフェデレーティング機構を示す（例えば、前述の第１から第４までのフェデレーテ
ィング機構の中からまたは他のフェデレーティング機構の中から）か、同一の近接リング
内のルーティングパターンの間での通信の詳細を定義するのに使用することができる。一
部のリングパラメータは、より一般的とし、複数の異なるフェデレーティング機構に適用
することができるが、他のリングパラメータは、より固有であり、特定のタイプのフェデ
レーティング機構に適用される。
【００９９】
より高いレベルの近接リングを構成するのに使用されるリングパラメータを、いくつか
の実施形態で、より低いレベルの近接リングによって継承することができる。例えば、リ
ング５４３が、リング５３１のリングパラメータ（リング５２２から継承されるなど）の
一部を継承するかもしれない。したがって、リング５３１に関連する近傍サイズおよび近
傍範囲は、リング５４１にも関連する。
【０１００】
しかし、継承されたリングパラメータを変更することができ、および／または、近接リ
ングを異なるリングパラメータに従って個別に構成することができる。例えば、リング５
１１が、多数のノードを含む管理ドメイン用であり、したがって、上記第４のフェデレー
ティング機構が、リング５１１により適当であるかもしれない。その一方で、リング５２
１が、比較的少数のノードを有する小さい会社用であり、したがって、上記第２のフェデ
レーティング機構が、リング５２１により適当であるかもしれない。したがって、リング
５２１に関連するリングパラメータに、リング５１１に関連するリングパラメータと異な
る値をセットすることができる（あるいは、継承されたパラメータをリング５１１に関連
するリングパラメータに変更することができる）。例えば、特定のタイプのフェデレーテ
ィング機構を示すリングパラメータを、リング５１１と５２１との間で異なるものにする
ことができる。同様に、近傍を定義するパラメータを、リング５１１と５２１との間で異
なるものにすることができる。さらに、リング５２１を、上記第２のフェデレーティング
機構に固有の特定のパラメータに従って構成することができるが、リング５１１は、上記
第４のフェデレーティング機構に固有の追加の特定のパラメータに従って構成される。
【０１０１】
したがって、近接リングを、その近接リング内のノードの特性（例えば、個数、含まれ
るリソースなど）に基づいて柔軟に構成することができる。例えば、管理者は、構成プロ
シージャを使用して（例えば、ユーザインターフェースを介して）近接リングのリングパ
ラメータを選択することができる。構成プロシージャは、近接リングの間の継承関係の構
成ならびに例えば、他の形で継承されるリングパラメータをオーバーライドするためなど
の個々の近接リングの構成を容易にすることができる。
【０１０２】
図８に、フェデレーションインフラストラクチャのノードをパーティショニングする方
法８００の一例の流れ図を示す。方法８００を、図５のツリー５００のパーティションの
リングに関して説明する。方法８００は、フェデレーションインフラストラクチャ内のノ
ードに割り当てられたノードＩＤを含むソートされたリンクリストにアクセスする行為（
行為８０１）を含む。例えば、リング５０１によって表されるソートされたリンクリスト
にアクセスすることができる。ソートされたリンクリストのノードＩＤ（リング５０１に
示されたノード）は、フェデレーションインフラストラクチャ（例えば、フェデレーショ
ンインフラストラクチャ１００）内のノードを表すことができる。
【０１０３】
方法８００は、ソートされたリンクリストをパーティショニングするための複数の異な
る近接判断基準を表す近接カテゴリにアクセスする行為（行為８０２）を含む。例えば、
ドメイン境界５６１、地理的境界５６２、および組織境界５６３を表す近接判断基準にア
クセスすることができる。しかし、信頼ドメイン境界などの他の近接判断基準も、アクセ
スされた近接判断基準内で表され得る。近接カテゴリには、近接判断基準の以前に作成さ
れた半順序を付けられたリストを含めることができる。リングを、近接判断基準の半順序
を付けられたリストに基づいてパーティショニングすることができる。
【０１０４】
方法８００は、第１近接判断基準に基づいて、ソートされたリンクリストを１つまたは
複数の第１サブリストにパーティショニングする（１つまたは複数の第１サブリストのそ
れぞれは、ソートされたリンクリストからのノードＩＤの少なくともサブセットを含む）
行為（行為８０３）を含む。例えば、リング５０１を、判断基準５７１に基づいてサブリ
ング５１１、５１２、５１３、および５１４にパーティショニングすることができる。サ
ブリング５１１、５１２、５１３、および５１４のそれぞれが、リング５０１からのノー
ドＩＤの異なるサブセットを含むことができる。
【０１０５】
方法８００は、第２近接判断基準に基づいて、１つまたは複数の第１サブリストの中か
ら選択された第１サブリストを１つまたは複数の第２サブリストにパーティショニングす
る（１つまたは複数の第２サブリストのそれぞれは、第１サブリストに含まれるノードＩ
Ｄの少なくともサブセットを含む）行為（行為８０４）を含む。例えば、サブリング５１
１を、判断基準５８１に基づいてサブリング５２１、５２２、および５２３にパーティシ
ョニングすることができる。サブリング５２１、５２２、および５２３のそれぞれは、サ
ブリング５１１からのノードＩＤの異なるサブセットを含むことができる。
【０１０６】
図９に、ノードのルーティングテーブルを移植する方法９００の一例の流れ図を示す。
方法９００を、図３のソートされたリンクリスト３０４およびリング３０６に関して説明
する。方法９００は、先行ノードをルーティングテーブルに挿入する（先行ノードは、ソ
ートされたリンクリストの第１方向で現行ノードに対して現行ノードに先行する）行為（
行為９０１）を含む。例えば、ＩＤ５０を有するノードを、ＩＤ６４を有するノード（現
行ノード）の先行物としてルーティングテーブルに挿入することができる。時計回りの方
向３２１で（ソートされたリンクリスト３０４の終りＡからソートされたリンクリスト３
０４の終りＢに向かって）移動すると、ＩＤ５０を有するノードは、ＩＤ６４を有するノ
ードに先行する。先行ノードの挿入は、現行ノードと先行ノードとの間に対称パートナー
シップを確立することができ、現行ノードが、先行ノードのパートナになり、先行ノード
が、現行ノードのパートナになる。
【０１０７】
方法９００は、後続ノードをルーティングテーブルに挿入する（後続ノードは、ソート
されたリンクリストの第１方向で現行ノードに対して現行ノードに後続する）行為（行為
９０２）を含む。例えば、ＩＤ７６を有するノードを、ＩＤ６４を有するノード（現行ノ
ード）の後続物としてルーティングテーブルに挿入することができる。反時計回りの方向
３２２で移動すると、ＩＤ７６を有するノードは、ＩＤ６４を有するノードに先行する。
後続ノードの挿入は、現行ノードと後続ノードとの間に対称パートナーシップを確立する
ことができ、現行ノードが、後続ノードのパートナになり、後続ノードが、現行ノードの
パートナになる。
【０１０８】
方法９００は、適当な近傍ノードをルーティングテーブルに挿入する（近傍ノードは、
近傍範囲および近傍サイズに基づいて、第１方向と第２の反対の方向との両方で、ソート
されたリンクリストから識別される）行為（行為９０３）を含む。例えば、ＩＤ８３、７
６、５０、および４６を有するノードを、ＩＤ６４を有するノード（現行ノード）の近傍
ノードとしてルーティングテーブルに挿入することができる。２０の近傍範囲および近傍
サイズ４に基づいて、ＩＤ８３および７６を有するノードを、時計回りの方向３２１で識
別することができ、ＩＤ５０および４６を有するノードを、反時計回りの方向３２２（ソ
ートされたリンクリスト３０４の終りＢからソートされたリンクリスト３０４の終りＡに
向かって移動する）で識別することができる。いくつかの環境で、適当な近傍ノードが識
別されないかもしれない。近傍ノードの挿入は、現行ノードと近傍ノードとの間に対称パ
ートナーシップを確立することができ、現行ノードが、近傍ノードのパートナになり、近
傍ノードが、現行ノードのパートナになる。
【０１０９】
方法９００は、適当なルーティングノードをルーティングテーブルに挿入する（ルーテ
ィングノードは、フェデレーションインフラストラクチャのＩＤ空間の基数およびフィー
ルドサイズに基づいて第１方向と第２方向との両方でソートされたリンクリストから識別
され、ルーティングノードは、第１方向と第２方向との両方でソートされたリンクリスト
の対数インデックスを表す）行為（行為９０４）を含む。例えば、ＩＤ２、３０、４６、
５０、６４、６４、６４、６４、６４、７６、８３、９８、１３５、および２００を有す
るノードを、ＩＤ６４を有するノードのルーティングノードとしてルーティングテーブル
に挿入することができる。基数２および８のフィールドサイズに基づいて、ＩＤ６４、６
４、７６、８３、９８、１３５、および２００を有するノードを、方向３２１で識別する
ことができ、ＩＤ６４、６４、５０、４６、３０、２、および２００を有するノードを、
方向３２２で識別することができる。内側リング３０６に示されているように、ルーティ
ングノードは、時計回りの方向３２１と反時計回りの方向３２２との両方でのソートされ
たリンクリストの対数インデックスを表す。ルーティングノードの挿入は、現行ノードと
ルーティングノードとの間に対称パートナーシップを確立することができ、現行ノードが
、ルーティングノードのパートナになり、ルーティングノードが、現行ノードのパートナ
になる。
【０１１０】
図７に、近接判断基準を考慮に入れるノードルーティングテーブルを移植する方法７０
０の一例の流れ図を示す。方法７００を、図５のリングに関して説明する。方法７００は
、現行ノードが参加する階層的にパーティショニングされたルーティングリングのそれぞ
れの先行ノードをルーティングテーブルに挿入する行為（行為７０１）を含む。各先行ノ
ードは、現行ノードが参加する各階層的にパーティショニングされたルーティングリング
内で第１方向（例えば、時計回り）で現行ノードに先行する。階層的にパーティショニン
グされたルーティングリングは、対応する近接判断基準に従ってパーティショニングされ
、両方向リンクリストの少なくともサブセット（おそらくは両方向リンクリスト全体）を
含む。例えば、指定されたノードが、ルートリング５０１ならびにサブリング５１１、５
２２、５２３、５３１、および５４２に参加するかもしれない。したがって、先行ノード
は、リング５０１ならびにサブリング５１１、５２２、５２３、５３１、および５４２の
それぞれの中から、指定されたノードについて選択される。
【０１１１】
方法７００は、現行ノードが参加する階層的にパーティショニングされたルーティング
リングのそれぞれの後続ノードをルーティングテーブルに挿入する行為（行為７０２）を
含む。各後続ノードは、現行ノードが参加する各階層的にパーティショニングされたルー
ティングリング内で第１方向で現行ノードに後続する。例えば、後続ノードは、リング５
０１ならびにサブリング５１１、５２２、５２３、５３１、および５４２のそれぞれの中
から、指定されたノードについて選択される。
【０１１２】
方法７００は、現行ノードが参加する階層的にパーティショニングされたルーティング
リングのそれぞれの適当な近傍ノードをルーティングテーブルに挿入する行為（行為７０
３）を含む。近傍ノードは、現行ノードが参加する階層的にパーティショニングされたル
ーティングリングから、近傍範囲および近傍サイズに基づいて第１方向（例えば、時計回
り）と第２の反対の方向（例えば、反時計回り）との両方で識別することができる。例え
ば、近傍ノードを、リング５０１ならびにサブリング５１１、５２２、５２３、５３１、
および５４２のそれぞれの中から、指定されたノードについて識別することができる。
【０１１３】
方法７００は、現行ノードが参加する階層的にパーティショニングされたルーティング
リングのそれぞれの適当なルーティングノードをルーティングテーブルに挿入する行為（
行為７０４）を含む。例えば、ルーティングノードを、リング５０１ならびにサブリング
５１１、５２２、５２３、５３１、および５４２のそれぞれの中から、指定されたノード
について識別することができる。
【０１１４】
いくつかの実施形態で、適当なルーティングノードが、ノードＹが参加する葉リング（
または、エイリアシングを利用する実施形態では複数の葉リング）を除く近接リングｄご
とに挿入される。適当なルーティングノードを、次の式に基づいて挿入することができる
。 
Ｙ．ｓd．ｉｄ＜Ｙ．ｉｄ＋ｂi＜Ｙ．ｓd+1．ｉｄが真である場合には、リングｄを
使用し、あるいは、
Ｙ．ｐd．ｉｄ＜Ｙ．ｉｄ−ｂi＜Ｙ．ｐd+1．ｉｄが真である場合には、リングｄを
使用する。
【０１１５】
リングが、前のステップで識別されなかった場合には、リード（例えば、リング５０１
）リングをリングｄとして使用する。今や、リングｄは、ノードＹがｚに最も近いルーテ
ィングパートナをそこで探さなければならない近接リングである。
【０１１６】
図１０は、メッセージを宛先ノードに向かってルーティングする方法１０００の一例の
流れ図を示す。方法１０００を、図３のソートされたリンクリスト３０４およびリング３
０６に関して説明する。方法１０００は、受信ノードが宛先を示す数と一緒にメッセージ
を受信する行為（行為１００１）を含む。例えば、ＩＤ６４を有するノードが、２１２と
いう宛先を示すメッセージを受信することができる。
【０１１７】
方法１０００は、受信ノードが、対応する先行ノードより宛先から数値的に遠いおよび
対応する後続ノードより宛先から数値的に遠い、のうちの少なくとも１つであることを判
定する行為（行為１００２）を含む。例えば、方向３２２で、ＩＤ６４は、ＩＤ５０より
宛先２１２から遠く、方向３２１で、ＩＤ６４は、ＩＤ７６より宛先２１２から遠い。方
法１０００は、宛先が受信ノードに対応するノードの近傍セット内にないことを判定する
行為（行為１００３）を含む。例えば、ＩＤ６４を有するノードは、宛先２１２が８３、
７６、５０、および４６という近傍セット内にないことを判定することができる。
【０１１８】
方法１０００は、受信ノードに対応するルーティングテーブルから、対応するルーティ
ングテーブル内の他のルーティングノードより宛先に数値的に近い中間ノードを識別する
行為（行為１００４）を含む。例えば、ＩＤ６４を有するノードは、他のルーティングノ
ードより宛先２１２に数値的に近いものとしてＩＤ２００を有するルーティングノードを
識別することができる。方法１０００は、中間ノードにメッセージを送信する行為（行為
１００５）を含む。例えば、ＩＤ６４を有するノードは、ＩＤ２００を有するノードにメ
ッセージを送信することができる。
【０１１９】
図１１に、近接判断基準に基づいてメッセージを宛先ノードに向かってルーティングす
る方法１１００の一例の流れ図を示す。方法１１００を、図４および図５のリングに関し
て説明する。方法１１００は、受信ノードが宛先を示す数および近接判断基準と一緒にメ
ッセージを受信する行為（行為１１０１）を含む。近接判断基準は、ノードの１つまたは
複数のクラスを定義する。受信ノードは、近接判断基準に基づいてノードの１つまたは複
数のクラスの中から選択されたノードの現行クラスの一部としてメッセージを受信する。
例えば、ＩＤ１７２を有するノードは、２０１という宛先およびこの宛先ノードがリング
４０１によって表されるクラスの一部であることを示す近接判断基準を示すメッセージを
受信する。ＩＤ１７２を有するノードは、リング４０４の一部としてこのメッセージを受
信することができる。
【０１２０】
方法１１００は、受信ノードが、ノードの選択されたクラス内のノードの中で、対応す
る先行ノードより宛先から数値的に遠いおよび対応する後続ノードより宛先から数値的に
遠い、のうちの少なくとも１つであることを判定する行為（行為１１０２）を含む。例え
ば、リング４０４内で、ＩＤ１７２を有するノードは、時計回りの方向でＩＤ１７４を有
するノードより宛先２０１から遠く、反時計回りの方向でＩＤ１５３を有するノードより
宛先２０１から遠い。
【０１２１】
方法１１００は、宛先が、近接判断基準によって定義されるノードの１つまたは複数の
クラスのいずれかについて受信ノードのノードの近傍セット内にないことを判定する行為
（行為１１０３）を含む。例えば、ＩＤ１７２を有するノードは、宛先２０１がリング４
０４またはリング４０１内の対応する近傍セット内にないことを判定することができる。
【０１２２】
方法１１００は、受信ノードのルーティングテーブルから、ルーティングテーブル内の
他のルーティングノードより宛先に数値的に近い中間ノードを識別する行為（行為１１０
４）を含む。例えば、ＩＤ１７２を有するノードは、リング４０４内の他のルーティング
ノードより宛先２０１に数値的に近いものとして、ＩＤ１９４を有するノードを識別する
ことができる。方法１１００は、中間ノードにメッセージを送信する行為（行為１１０５
）を含む。例えば、ＩＤ１７２を有するノードは、受信されたメッセージをＩＤ１９４を
有するノードに送信することができる。ＩＤ１７２を有するノードは、近接判断基準の以
前に定義された半順序を付けられたリストを尊重するために、受信されたメッセージをＩ
Ｄ１９４を有するノードに送信することができる。
【０１２３】
ノード１９４は、リング４０４内でできる限り宛先２０１に近いものとすることができ
る。したがって、近接を、次のレグ内のリング４０４内で宛先に向かうさらなるルーティ
ングを行うことを可能にするのにちょうど十分に緩和することができる。すなわち、ルー
ティングは、リング４０４上で宛先に向かうさらなる進行を行えないので、リング４０４
からリング４０１に推移される。あるいは、ＩＤ２０１を有するノードが、リング４０１
内のＩＤ１９４を有するノードの近傍内にあり、さらなるルーティングをもたらさないか
もしれない。したがって、いくつかの実施形態で、次に上位のリングに進むための近接判
断基準の緩和は、さらなるルーティングを引き起こすのに十分である。
【０１２４】
しかし、他の実施形態では、次に上位のリングへの推移を引き起こす近接判断基準の増
分緩和が、さらなるルーティングを行えるまで（またはルートリングに出会うまで）継続
される。すなわち、より上位のリングへの複数の推移が、さらなるルーティング進行を行
えるようになる前に発生する。例えば、ここで図５を参照すると、さらなるルーティング
進行をリング５３１で行えないときに、近接判断基準を、リング５１１へまたはルートリ
ング５０１へすら推移するのに十分に緩和することができる。
【０１２５】
（ノードフェーズ）
フェデレーションインフラストラクチャに参加するノードは、異なる動作フェーズで動
作することができる。あるノードの有効なフェーズ値を、順序付きセットのメンバになる
ように定義することができる。例えば、{NodeId}.{InstanceIds}.{Phase Value[Phase-St
ate Values: Inserting, Syncing, Routing, Operating].[Phase.Unknown Indication: p
hase known at time of transmission, phase unknown at time of transmission]}は、
フェデレーションインフラストラクチャ内の所与のノードのフェーズ空間を表す１つの可
能な順序付きセットを定義する。ノードインスタンスは、ノードフェーズ状態を介してＩ
ｎｓｅｒｔｉｎｇ（挿入中）からＳｙｎｃｉｎｇ（同期中）、次にＲｏｕｔｉｎｇ（ルー
ティング中）、次にＯｐｅｒａｔｉｎｇ（動作中）の順番で推移する（または前進する）
ことができる。さらに、いくつかの実施形態で、ノードインスタンスを、ノードインスタ
ンスが以前のノードフェーズ状態に戻って推移しなくなるように構成することができる。
いくつかの実施形態で、ノードは、ノードが発生するたびにそのインスタンスＩＤを進め
る。
【０１２６】
例えば、ノードインスタンスが、ＲｏｕｔｉｎｇからＳｙｎｃｉｎｇに戻って、（また
はＩｎｓｅｒｔｉｎｇに戻って）推移するのを防ぐことができる。したがって、いくつか
の実施形態で、所与のノードインスタンス（例えば、（ＮｏｄｅＩｄ，Ｉｎｓｔａｎｃｅ
Ｉｄ）によって識別される）が、特定のノードフェーズ状態（例えば、Ｏｐｅｒａｔｉｎ
ｇ）に進んだことがわかっているときには、その所与のノードインスタンスが、以前のノ
ードフェーズ状態（例えば、Ｒｏｕｔｉｎｇ、Ｓｙｎｃｉｎｇ、またはＩｎｓｅｒｔｉｎ
ｇ）に戻る可能性が低い（いくつかの実施形態では戻らない）こともわかる。したがって
、特定のノードフェーズ状態の前のノードフェーズにある任意のノードインスタンスが、
そのノードの新しい（前進した）インスタンスであることのかなりの尤度がある。
【０１２７】
いくつかの実施形態で、フェーズ情報および対応するインスタンスＩｄ（ノードが発生
するたびに進む）は、一緒に転送される。したがって、同一インスタンスのより低いノー
ドフェーズ状態はより古いと判定することが可能である。さらに、より新しいノードイン
スタンスが既知である（任意のフェーズ状態値で）ときに、より古いインスタンスに関す
るすべての情報が、期限切れと考えられる。
【０１２８】
時々、ノードは、例えば、最初のスタートアップ時、正常な離脱（graceful departure
）を介して、または異常終了（クラッシュ）の結果として、リブートするかお互いとの通
信を失う可能性がある。したがって、任意のノードフェーズ状態にあるノードが、リブー
トするか他のノードとの通信を失う可能性がある。例えば、クラッシュが、Ｒｏｕｔｉｎ
ｇフェーズ状態にあるノードにリブートさせる可能性がある。リブートまたは通信の消失
の間には、あるノードがどのノードフェーズ状態にあるかを判定する形がない可能性があ
る。したがって、ノードがリブートしつつあるか、ノードへの通信が失われるときに、［
Ｐｈａｓｅ．Ｕｎｋｎｏｗｎ Ｉｎｄｉｃａｔｉｏｎ］をセットして、そのノードのフェ
ーズ状態が現在は未知であることを示すことができる。しかし、そのノードについて以前
に表されたかつ／または検出されたフェーズ状態のすべてが、維持され得、失われない。
【０１２９】
［Ｐｈａｓｅ．Ｕｎｋｎｏｗｎ Ｉｎｄｉｃａｔｉｏｎ］は、フェーズ状態値が送信さ
れたときにフェーズ状態が既知であった（例えば、ｐｈａｓｅ．ｕｎｋｎｏｗｎをセット
されていないフェーズ値）かどうか、またはフェーズ状態が以前に表されたフェーズ状態
であり、フェーズ状態が送信されたときにフェーズ状態が未知であった（例えば、ｐｈａ
ｓｅ．ｕｎｋｎｏｗｎをセットされたフェーズ値）かどうかを示すのに使用することがで
きる。したがって、あるノードのフェーズ（そのフェーズ値）は、フェーズ状態値とｐｈ
ａｓｅ．ｕｎｋｎｏｗｎ表示との両方を使用して表すことができる。
【０１３０】
（参加プロトコル）
時々、ノードは、既存のフェデレーションに参加し、既存フェデレーションから離脱す
ることができる。ノードは、フェデレーションへの参加および離脱のための適当なプロト
コルを実施することができる。例えば、ノードは、既存フェデレーションの一部になるた
めにＪｏｉｎ（）関数を実施することができる。Ｊｏｉｎ（）関数を実施するノードは、
最終的な動作フェーズ状態に達する前に、３つの順序付きフェーズ状態すなわち、挿入中
フェーズ状態、同期中フェーズ状態、およびルーティング中フェーズ状態を介して推移す
ることができる。他の実施形態では、これらの特定の順序付きフェーズ状態が存在しない
が、他のフェーズ状態が定義される場合がある。図１２Ａに、フェデレーションインフラ
ストラクチャ内でメンバシップを確立するノードの一例を示す。図１２Ｂに、メッセージ
を交換するフェデレーションインフラストラクチャ内のノードの一例を示す。
【０１３１】
挿入フェーズ：ノードＹは、少なくともそのノードＩＤを含み、フェデレーションへの
参加アクションを示す参加メッセージを発行することによってこのフェーズ状態に入る。
参加メッセージは、そのｄｅｓｔｉｎａｔｉｏｎプロパティに新たに参加するノードのア
イデンティティをセットされた、新たに参加するノード（ノードＹ）によって送信される
ルーティングされるメッセージとすることができる。このフェーズ状態では、新たに参加
するノードは、フェデレーション内でその先行ノードと後続ノードとの間に挿入される。
この挿入フェーズ状態は、次のアルゴリズムに従って実施することができる（すべての演
算は、ｍｏｄｕｌｏ ｂnで実行される）。
【０１３２】
ＩＰ１Ｙは、既に、参加するノードがそこからフェデレーションに参加することを望む
最下位リングの一部である、既存ノードを識別する。これは、静的に構成するか、ＤＨＣ
Ｐおよび／またはＤＮＳおよび／またはＷＳ−Ｄｉｓｃｏｖｅｒｙまたは（潜在的に周知
の）定数を使用して動的に発見するかのいずれかとすることができる。この既存フェデレ
ーションノードを、Ｅとする。
【０１３３】
ＩＰ２Ｙは、Ｅ．ＲｏｕｔｅＮｕｍｅｒｉｃａｌｌｙ（Ｙ，ｊｏｉｎＭｓｇ）を呼び出
して、そのＩＤがノードＹが参加するすべての近接リング内でＹ．ｉｄに数値的に最も近
いノードＸを判定する。これには、参加メッセージを複数のノードにルーティングするこ
とを含めることができる。
【０１３４】
ＩＰ３数値的に後続するノード（ｓ）および数値的に先行するノード（ｐ）を判定する
（次の挿入を行うのに必要なデータを、参加メッセージおよびその応答内で担持できるこ
とに留意されたい。したがって、必要な追加のラウンドトリップはない）。 
ケース１：Ｘ．ｉｄ＞Ｙ．ｉｄ
Ｙ．ｓ＝Ｘ、Ｙ．ｐ＝Ｘ．ｐ、Ｘ．ｐ．ｓ＝Ｙ、およびＸ．ｐ＝Ｙ
ケース２：Ｘ．ｉｄ＜Ｙ．ｉｄ
Ｙ．ｐ＝Ｘ、Ｙ．ｓ＝Ｘ．ｓ、Ｘ．ｓ．ｐ＝Ｙ、およびＸ．ｓ＝Ｙ
【０１３５】
参加メッセージに応答して、ノードＸ（参加メッセージを処理したノード）は、参加応
答をノードＹに送り返すことができる。参加応答は、ノードＹの先行ノード（Ｙ．ｐ）お
よび後続ノード（Ｙ．ｓ）を示すことができる。ノードＹは、参加応答を受信し、参加応
答を処理して、その先行ノードおよび後続ノードを知ることができる。参加応答を処理し
た後に、ノードＹは、フェデレーション内の弱いルーティング参加者になることができる
。例えば、ノードＹは、単純に、それに送信されたメッセージをその後続ノードまたは先
行ノードのいずれかに転送することができる。したがって、ノードＹは、フェデレーショ
ンインフラストラクチャに挿入されるが、ルーティングテーブルおよび近傍テーブルは、
移植されない。この点に達する前に、ノードＹは、ノードＹのライブネスフェーズが挿入
中フェーズ状態であることを示す状況メッセージを送信ノードに返すことによって、それ
にメッセージを送信する他のノードに、それに送信されたメッセージを異なるノードを介
してリダイレクトするように要求する。
【０１３６】
一般に、時々、ノードは、ｓｙｎｃ（同期）要求メッセージおよびｓｙｎｃ応答メッセ
ージを交換することができる。ｓｙｎｃ要求メッセージおよびｓｙｎｃ応答メッセージは
、送信側の観点からの他のノードに関するライブネス情報（例えば、ヘッダ）を含むこと
ができる。近傍状態をも、ｓｙｎｃ要求メッセージおよびｓｙｎｃ応答メッセージに含め
ることができ、近傍のアプリケーションレイヤが、お互いの状態を知るようになる。ｓｙ
ｎｃ要求メッセージおよびｓｙｎｃ応答メッセージが交換されるときの１つの例が、参加
するノードの同期化中フェーズ状態中である。しかし、ｓｙｎｃ要求メッセージおよびｓ
ｙｎｃ応答メッセージを、他の動作フェーズ状態中（例えば、Ｏｐｅｒａｔｉｎｇフェー
ズ状態にいる間）に交換することができる。
【０１３７】
図１６に、メッセージモデルおよび関連する処理モデル１６００の一例を示す。図１６
に示されているように、ノードは、ｓｙｎｃ要求メッセージを送信し、受信することがで
きる。例えば、ｓｙｎｃ要求メッセージ１６０１を、新たに挿入されたノード（例えば、
ＩＤ１４４を有する図１２Ｂのノード）から、機能レイヤ１６５１で受信することができ
る。アプリケーションデータ１６０２（例えば、名前空間添字）を、ｓｙｎｃ要求メッセ
ージ１６０１内にピギーバックすることができる。機能レイヤ１６５１は、ｓｙｎｃ要求
メッセージ内に含まれるすべてのアプリケーションデータについてアプリケーションレイ
ヤ１６５２に知らせることができる。例えば、機能レイヤ１６５１は、アプリケーション
レイヤ１６５２に対して、アプリケーションデータ１６０２を含む近傍状態ｓｙｎｃイベ
ント１６０３を呼び出すことができる。アプリケーションデータ１６０７を含むｓｙｎｃ
要求１６３１を、別のノードに送信することもでき、この別のノードは、処理モデル１６
００内のｓｙｎｃ要求１６０１に対する処理に似て、ｓｙｎｃ要求１６３１を処理する。
【０１３８】
いくつかの機能レイヤイベント（例えば、ｓｙｎｃ要求メッセージ１６０１、ｓｙｎｃ
応答メッセージ１６４１、またはｐｉｎｇメッセージ１６０９）に応答して、機能レイヤ
１６５１は、アプリケーションレイヤ１６５２内の近傍状態要求機能１６０４を呼び出す
ことができる。近傍状態要求１６０４は、近傍内で伝搬される必要がある状態を入手する
、アプリケーションレイヤに対する要求である。近傍状態要求１６０４に応答して、アプ
リケーションレイヤ１６５２は、オプションのアプリケーションデータ１６０７を含む近
傍状態１６０６を機能レイヤ１６５１に供給することができる。あるいは、アプリケーシ
ョンレイヤ１６５２は、オプションのアプリケーションデータ１６０７を含む近傍状態１
６０６を、あるアプリケーションレイヤイベントに応答して送信することができる。上記
に似た内部機構を使用して、機能レイヤ１６５１は、オプションのアプリケーションデー
タ１６０７を含むｓｙｎｃ応答メッセージ１６０８を送信して、アプリケーションレイヤ
近傍状態を伝搬させることができる。
【０１３９】
同期化フェーズ：参加応答メッセージを処理した後に、ノードＹは、挿入フェーズ状態
から同期化中（Ｓｙｎｃｉｎｇ）フェーズ状態に推移する。同期化中フェーズ状態では、
新たに挿入されたノードＹは、近傍のノードと情報を同期化する。一般に、ノードＹは、
少なくとも挿入フェーズ状態で識別されたその先行ノードおよび後続ノードにｓｙｎｃメ
ッセージを送信することができる。そのｓｙｎｃメッセージを処理するノードは、これら
の処理するノードの対応する近傍およびルーティングパートナノードを示すｓｙｎｃ応答
を返すことができる。より具体的な例では、同期化中フェーズ状態を、次のアルゴリズム
に従って実施することができる（すべての演算は、ｍｏｄｕｌｏ ｂnで実行される）。
【０１４０】
ＳＰ１ノードＹが参加する各近接リング内のＮｅｉｇｈｂｏｒｈｏｏｄ（Ｙ．ｓ）ノー
ドとＮｅｉｇｈｂｏｒｈｏｏｄ（Ｙ．ｐ）ノードとの和集合からＮｅｉｇｈｂｏｒｈｏｏ
ｄ（Ｙ）を計算する。和集合計算は、次のように行うことができる。
【０１４１】
【表３】
2014116968.tif 000005
【０１４２】
ＳＰ２短く図１６を参照すると、近傍状態要求（例えば、近傍状態要求）１６０４を介
してＹのローカルアプリケーションレイヤ（例えば、アプリケーションレイヤ１６５２）
を照会して、オプションのアプリケーション固有近傍データ（例えば、アプリケーション
固有データ１６０７）を入手する。
【０１４３】
ＳＰ３少なくとも近接する後続ノードおよび先行ノードに、少なくともＹの展望からの
各近接近傍およびルーティングパートナのライブネス状態情報を含む同期化メッセージを
送信する。ＳＰ２を介してアクセスされるすべてのオプションのアプリケーション固有近
傍データ（例えば、アプリケーションデータ１６０７）は、ｓｙｎｃ要求１６３１に含ま
れる。
【０１４４】
ＳＰ４Ｙは、ＳＰ２で送信されたｓｙｎｃメッセージを処理するノードから戻るｓｙｎ
ｃ応答メッセージを受信する。例えば、ノードＹは、その計算された近傍内の１つまたは
複数のノードと同期化メッセージ（要求／応答）を交換することができる。同期化メッセ
ージが、ノードＹの近傍ノードのうちの少なくとも１つ、潜在的にはそのすべてと交換さ
れた後に、計算された近傍ノードは、同期化されたデータを伝搬させるためにさらなるメ
ッセージを交換することができる。同期化メッセージ（要求または応答）は、例えば、ノ
ード近傍内にある、ターゲットノードとデータを先を見越して同期化するために、あるノ
ードによって送信されるルーティングされないメッセージとすることができる。
【０１４５】
ＳＰ５ＳＰ４でｓｙｎｃ応答メッセージが受信される（例えば、ｓｙｎｃ応答メッセー
ジ１６４１）ときに、これらの受信されたｓｙｎｃ応答メッセージ内に存在するすべての
オプションのアプリケーション固有近傍データ（例えば、アプリケーションデータ１６２
２）を、近傍状態ｓｙｎｃイベント１６０３を介してＹのアプリケーションレイヤ１６５
２に提供することができる。
【０１４６】
同期化中フェーズ状態の一部として、近接後続ノード（例えば、Ｙ．ｓ）および近接先
行ノード（Ｙ．ｐ）は、それらのルーティングテーブルを新たに挿入されたノード（例え
ば、Ｙ）と交換する。ｓｙｎｃメッセージを受信するノードは、ｓｙｎｃ応答を送信する
ことによって応答することができる。ｓｙｎｃ応答は、応答するノードの展望からのもの
を除いて同期化メッセージに類似するデータを担持する。ｓｙｎｃメッセージとｓｙｎｃ
応答との両方が、アプリケーションデータを担持する（またはピギーバックする）ことが
できる。したがって、アプリケーションデータを、同期化中フェーズ状態中にノードの間
で伝搬させることができる。同期化フェーズ状態が完了したときに、ノードは、そのノー
ド宛のメッセージを後続物または先行物のいずれかに単純に転送するのではなく、そのメ
ッセージを処理することができる。しかし、ノードを、それでも、弱いルーティング参加
者と見なすことができる。というのは、そのルーティングテーブルが移植されていないか
らである。
【０１４７】
ルーティング中フェーズ：同期化中フェーズ状態が完了した後に、ノードは、ルーティ
ング中フェーズ状態に推移する。ルーティング中フェーズ状態では、新たに同期化された
ノード（例えば、ノードＹ）は、そのルーティングノードを計算する。ルーティング中フ
ェーズ状態は、次のアルゴリズムに従って実施することができる（すべての演算は、ｍｏ
ｄｕｌｏ ｂnで実行される）。
【０１４８】
ＲＰ１ルーティング中フェーズ状態が、バランシングプロシージャ（後で説明する）の
一部として実行されている場合には、後続ノード（Ｙ．ｓ）および先行ノード（Ｙ．ｐ）
が、ノードＹが参加するすべての近接リング内でアライブであることを確実にする。いず
れかがアライブではない場合には、検討中のリング内の近傍ノードの中から次に最良の後
続ノードまたは先行ノードを選択することによって、障害を発生したノード（１つまたは
複数）の置換ノードを決定する。 
【０１４９】
ＲＰ２１≦ｉ≦ｎ−１について
ＲＰ２ａ ｚ＝Ｙ．ｉｄ±ｂiを計算する
ＲＰ２ｂ リングｄが最も特定の近接ではない場合には、ノードＹが参加し、条件Ｙ
．ｓd．ｉｄ＜Ｙ．ｉｄ＋ｂi＜Ｙ．ｓd+1．ｉｄまたはＹ．ｐd．ｉｄ＜Ｙ．ｉｄ−ｂi＜
Ｙ．ｐd+1．ｉｄを満足する近接リングｄを見つける。そうでない場合には、リングｄを
最も特定の近接リングにする。リングｄは、ノードＹがｚに最も近いルーティングパート
ナをその中で探さなければならない近接リングである。Ｑが、Ｙ．ｓd．ｒ±iとＹ．ｐd
．ｒ±iとの間でｚに数値的に最も近いノードであるものとする。｜Ｑ．ｉｄ−ｚ｜が、
ｂiの構成可能なパーセンテージ（通常は２０％）以内である場合には、単純にＹ．ｒ±i
＝Ｑにする。Ｑ．ｉｄが、（Ｙ．ｓd．ｉｄ±ｂi）または（Ｙ．ｐd．ｉｄ±ｂi）のいず
れかよりｚに近い場合には、これは、ノードＹが、Ｙ．ｓdまたはＹ．ｐdのいずれかより
よい、近接リングｄ内のノードＱに対するパートナルーティングノードであることを意味
する。したがって、ｕｐｄａｔｅＭｓｇがまだ送信されていない場合には、ノードＱがｒ
-iでのパートナルーティングノードとしてノードＹを確立できるようにするために、パラ
メータとしてｉおよびノードＹを供給して、ｕｐｄａｔｅＭｓｇをノードＱに送信する。
【０１５０】
ＲＰ２ｃこのフェーズ状態が、バランシングプロシージャの一部として実行されつつあ
り、Ｙ．ｓd．ｒ±i．ｉｄ＝＝Ｙ．ｐd．ｒ±i．ｉｄである場合には、（Ｙ．ｓd．ｉｄ
±ｂi）と（Ｙ．ｐd．ｉｄ±ｂi）との間の数値範囲内に１つのノードだけがある。その
ノードは、後続（または先行）ノードのルーティングノードｒ±iによってポイントされ
るノードである。したがって、単純にＹ．ｒ±i＝Ｙ．ｓd．ｒ±i・iにする。
【０１５１】
ＲＰ２ｄそうでない場合には、リングｄの近接判断基準にセットされた近接判断基準を
用いてノードＱに対してＲｏｕｔｅＰｒｏｘｉｍａｌｌｙを呼び出すことによって、ルー
ティングパートナＹ．ｒ±iを計算する。これは、Ｙ．ｒ±i＝Ｑ．ＲｏｕｔｅＰｒｏｘｉ
ｍａｌｌｙ（ｚ，ｕｐｄａｔｅＭｓｇ，ｄ）を暗示する。
【０１５２】
ＲＰ３この点で、ノードＹは、それ宛のメッセージを処理できるだけではなく、メッセ
ージをルーティングすることもできる。
【０１５３】
ＲＰ４パートナルーティングノードのエンドポイントＩＤのアプリケーションレイヤか
ら送信されたライブネス通知イベントへのサブスクライブがまだ行われていない場合には
、それを行う。また、もはやパートナルーティングノードではないノードについてアプリ
ケーションレイヤを用いて以前に確立されたすべてのライブネスイベントサブスクリプシ
ョンを取り消す。例えば、サブスクリプション要求および／または取消要求を、対応する
アプリケーション（例えば、名前空間アプリケーション）のパブサブロジック（ｐｕｂ−
ｓｕｂ ｌｏｇｉｃ）を実施するアプリケーションレイヤ（例えば、アプリケーションレ
イヤ１２１）へ上に渡すことができる。後続のアプリケーション固有ライブネスメッセー
ジ（例えば、名前空間サブスクリプションから生じるもの）が、アプリケーションレイヤ
で受信されるときに、通知（イベント）を、処理のために他の下位レイヤ（例えば、他の
下位レイヤ１３１）へ下にプッシュすることができる。
【０１５４】
図１７に、機能レイヤ１７５１とアプリケーションレイヤ１７５２との間で発生し得る
複数のライブネス相互作用の一例を示す。図１７に示されているように、エンドポイント
は、例えば、様々なノードを表すパブリッシュ／サブスクライブトピック（例えば、ＵＲ
ＬまたはＵＲＩによって表される）であり、例えば、フェデレーションインフラストラク
チャノードとすることができる。Ｓｕｂｓｃｒｉｂｅ Ｔｏ Ｌｉｖｅｎｅｓｓ Ｅｖｅｎ
ｔ（ライブネスイベントへのサブスクライブ）１７０１は、ライブネスイベント（例えば
、パブリッシュ／サブスクライブトピック）にサブスクライブするために機能レイヤ１７
５１からアプリケーションレイヤ１７５２に対して呼び出すことができる。Ｒｅｖｏｋｅ
Ｌｉｖｅｎｅｓｓ Ｓｕｂｓｃｒｉｐｔｉｏｎ（ライブネスサブスクリプション取消）１
７０２は、ライブネスイベントへのサブスクリプションを取り消すために機能レイヤ１７
５１からアプリケーションレイヤ１７５２に対して呼び出すことができる。Ｅｎｄ Ｐｏ
ｉｎｔ Ｄｏｗｎ（エンドポイントダウン）１７０３は、エンドポイントがダウンしてい
る可能性があることを示すためにアプリケーションレイヤ１７５２から機能レイヤ１７５
１に送ることができ、オプションのｒｅｐｌａｃｅｍｅｎｔ（置換）エンドポイントを機
能レイヤ１７５１に与える。Ｅｎｄ Ｐｏｉｎｔ Ｄｏｗｎ ｅｖｅｎｔ １７０３は、以前
のサブスクリプション（例えば、Ｓｕｂｓｃｒｉｂｅ Ｔｏ Ｌｉｖｅｎｅｓｓ Ｅｖｅｎ
ｔ １７０１）に基づいて非同期に送ることができる。
【０１５５】
ＮｏｄｅＤｏｗｎ（ノードダウン）１７０４は、機能レイヤ１７５１（またはある他の
下位レイヤ）が、障害を発生したノードを検出したことを示し、オプションで置換ノード
をアプリケーションレイヤ１７５２に与えるために、機能レイヤ１７５１からアプリケー
ションレイヤ１７５２に対して呼び出すことができる。アプリケーションレイヤ１７５２
は、その後、潜在的に障害を発生しているノードが検出されたことを他の関心を持つ当事
者に伝搬させることができる。Ｎｏｄｅ ｄｏｗｎ ｅｖｅｎｔ １７０４は、機能レイヤ
１７５１またはある他の下位レイヤが潜在的に障害を発生しているノードを検出したとき
に、いつでも非同期に送ることができる。Ｓｅｎｄ ｌｉｖｅｎｅｓｓ（ライブネス送信
）１７０６は、ノードがダウンしていることをアプリケーションレイヤ１７５２が検出す
る（例えば、ｎｏｄｅ ｄｏｗｎ ｅｖｅｎｔ １７０４からまたはある他の帯域外機構か
ら）ときに、アプリケーションレイヤ１７５２から機能レイヤ１７５１に対して呼び出す
ことができる。Ｓｅｎｄ ｌｉｖｅｎｅｓｓ ｅｖｅｎｔ １７０６は、機能レイヤ１７５
１にライブネスメッセージを送らせることができる。Ｓｅｎｄ ｌｉｖｅｎｅｓｓ ｅｖｅ
ｎｔ １７０６は、アプリケーションレイヤ１７５２が、ノードがダウンしていることを
検出するときにいつでも非同期に呼び出すこともでき、以前に確立されたサブスクリプシ
ョン（ライブネスへのサブスクライブを介して）のいずれにも依存しない。
【０１５６】
したがって、いくつかの実施形態で、機能レイヤ１７５１は、再帰的に使用される。例
えば、機能レイヤ１７５１は、指定されたノード（例えば、上または下の特定のノードで
ある）への関心をアプリケーションレイヤ１７５２に示すことができる。アプリケーショ
ンレイヤ１７５２は、指定されたノードに関係する通知に関するアプリケーション固有サ
ブスクリプションを定式化し、その後、機能レイヤ１７５１を再利用して、他のフェデレ
ーションノード内の適当な対応するアプリケーションレイヤ１７５２インスタンスに定式
化されたサブスクリプションを通信することができる。例えば、フェデレーションノード
内のアプリケーションレイヤ１７５２が、名前空間パブ／サブ（ｐｕｂ／ｓｕｂ）挙動を
実施する場合に、機能レイヤ１７５１は、指定されたノードの通知を管理するパブリッシ
ュ／サブスクライブマネージャにサブスクリプションをルーティングすることができ、パ
ブ／サブマネージャは、関係するフェデレーションノード内のアプリケーションレイヤ１
７５２の少なくとも一部として実施される。したがって、機能レイヤ１７５１は、機能レ
イヤ１７５１が生成させたサブスクリプションをルーティングするのに使用される。類似
する再帰機構を、アンサブスクライブするか、もはや指定されたノードへの関心がないこ
とを他の形で示すのに使用することもできる。
【０１５７】
動作中フェーズ：ルーティング中フェーズ状態が完了した後に、ノードは、動作中フェ
ーズ状態に推移する。ノードは、ダウンする（例えば、リブートする）まで、動作中フェ
ーズ状態のままであることができる。動作中フェーズ状態では、ノードは、時々ルーティ
ングパートナに更新メッセージを送信することができる。更新メッセージ（更新要求と更
新応答との両方）には、送信するノードの近傍ノードライブネス情報（例えば、当該のす
べての近接近傍の）を含めることができる。この送信されるライブネス情報には、送信側
のライブネス情報のそれをも含めることができる。更新メッセージは、ルーティングパー
トナノードを周期的に更新するためにノードによって始められるルーティングされるメッ
セージとすることができる。アプリケーションデータを、更新メッセージにピギーバック
することができ、アプリケーションデータを、ルーティングパートナ更新中に伝搬できる
ようになる。メッセージ宛先には、所望のルーティングインデックスでの完全なルーティ
ングパートナのアイデンティティがセットされる。このメッセージのＭｅｓｓａｇｅ Ｉ
Ｄプロパティには、このメッセージを処理するノード（１つまたは複数）が最新のメッセ
ージを判定できるようにするためにアプリケーションシーケンス番号が割り当てられ、こ
のメッセージは、近接的にルーティングされる。
【０１５８】
更新メッセージを受信するノードは、更新応答を応答することができる。更新応答は、
データが応答するノードの展望からであることを除いて、更新メッセージと同一のデータ
を担持する。更新メッセージおよび更新応答の交換を介して、ノードは、ルーティング情
報を交換することができる。時々、動作するノードは、ルーティングパートナを更新する
ことができる。
【０１５９】
時々、動作するノードは、ｐｉｎｇメッセージ（例えば、ｐｉｎｇメッセージ１６０９
および１６１１）を送信することもできる。ｐｉｎｇメッセージは、ノードのプレゼンス
を周期的にアナウンスし、その近傍／ルーティングノードおよび複製（例えば、ピギーバ
ックされた）アプリケーションデータに関してその近傍内で情報を散布するために、ノー
ドによって送信される一方向メッセージである。
【０１６０】
起点ノードは、その直接先行する近傍ノードおよび直接後続する近傍ノードのうちの１
つまたは複数にｐｉｎｇメッセージを送信することができる。したがって、ｐｉｎｇ分布
パターン（すなわち、どのノードがｐｉｎｇメッセージを送信されるか）に応じて、起点
ノードに関係する情報は、リング上で起点ノードの近傍内の他のノードに伝搬される。例
えば、起点ノードは、その直接先行ノードおよび直接後続ノードだけにｐｉｎｇメッセー
ジを送信することができ、このｐｉｎｇメッセージは、起点ノードの位置（ノードＩＤ）
からリングに沿って両方向で起点の近傍の縁まで外向きに伝搬する。あるいは、起点ノー
ドは、先行物方向と後続物方向との両方でｎ個おきのノードにｐｉｎｇメッセージを送信
することができる。
【０１６１】
ｐｉｎｇメッセージを受信する各ノードは、近傍範囲の展望から、そのノードの起点ノ
ードへの関心をチェックする。関心がない場合には、そのノードは、ｐｉｎｇメッセージ
を破棄する。関心がある場合には、そのノードは、ｐｉｎｇメッセージを処理し、ｐｉｎ
ｇメッセージの転送が起点ノードの近傍に制約されている場合には指定されたｐｉｎｇパ
ターンに従って、ｐｉｎｇメッセージを転送する。例えば、ｐｉｎｇメッセージを処理し
た後に、受信ノードは、送信ノードおよび起点ノードが先行ノードセット内にある場合に
は少なくともその後続ノードに、送信ノードおよび起点ノードが後続物セット内にある場
合には少なくともその先行ノードに、ｐｉｎｇメッセージを転送することができる。
【０１６２】
したがって、ｐｉｎｇメッセージの外向きの伝搬は、そのメッセージが起点ノードの周
囲にセットされた近傍ノードの縁に達するときに停止する。ｐｉｎｇメッセージのＭｅｓ
ｓａｇｅ ＩＤプロパティには、このメッセージを処理するノードが起点ノードからの最
新のメッセージを判定し、重複処理を回避するか他の形で不必要な転送を回避することを
可能にするために、アプリケーションシーケンス番号が割り当てられる。
【０１６３】
戻って図１６を参照すると、ｐｉｎｇメッセージ１６０９を、近傍ノードから機能レイ
ヤ１６５１で受信することができる。アプリケーションデータ１６１２（例えば、名前空
間サブスクリプション）を、ｐｉｎｇメッセージ１６０９内にピギーバックすることがで
きる。機能レイヤ１６５１は、ｐｉｎｇメッセージに含まれるすべてのアプリケーション
データについてアプリケーションレイヤ１６５２に知らせることができる。同様に、機能
レイヤ１６５１は、Ｓｙｎｃ要求メッセージに含まれるすべてのアプリケーションデータ
についてアプリケーションレイヤ１６５２に知らせることができる。移転のこれらのケー
スの両方を、アプリケーションデータ１６１２を含む近傍状態ｓｙｎｃイベント１６０３
をアプリケーションレイヤ１６５２に送ることを介して達成することができる。
【０１６４】
ある機能レイヤイベント（例えば、受信されたｐｉｎｇメッセージ１６０９）に応答し
て、機能レイヤ１６５１は、近傍状態要求１６０４をアプリケーションレイヤ１６５２に
送ることができる。近傍状態要求１６０４は、アプリケーションレイヤ１６５２に対して
、オプションで近傍内で伝搬される必要がある状態を入手するために呼び出される。近傍
状態要求１６０４に応答して、アプリケーションレイヤ１６５２は、オプションのアプリ
ケーションデータ１６０７を含む近傍状態１６０６を機能レイヤ１６５１に返すことがで
きる。機能レイヤ１６５１は、オプションのアプリケーションデータ１６０７を含むｐｉ
ｎｇメッセージ１６１１を送信して、近傍およびルーティングパートナノードライブネス
情報ならびにオプションのアプリケーションレイヤ近傍状態を伝搬させることができる。
機能レイヤ１６５１は、オプションのアプリケーションデータ１６０７を含むｓｙｎｃ応
答１６０８を送信して、アプリケーション状態を伝搬させることもできる。
【０１６５】
（離脱プロトコル）
ノードがフェデレーションから離脱することが適当であるときに、そのノードは、フェ
デレーションから正常に除去されるためにＤｅｐａｒｔ関数を実施することができる。ノ
ードは、その直接に近接する先行ノードおよび後続ノードのうちの１つまたは複数と、お
そらくは同一の近接近傍内の他のノードとに離脱メッセージを送信することによって既存
フェデレーションから離脱する。したがって、離脱分布パターン（すなわち、どのノード
が離脱メッセージを送信されるか）に応じて、離脱するノードに関係する情報は、リング
上で離脱するノードの近傍内の他のノードに伝搬される。離脱メッセージは、正常に離脱
するノードの差し迫った離脱についてその近接近傍のうちの少なくとも１つの中の１つま
たは複数の他のノードに知らせるために、その正常に離脱するノードによって始められる
一方向メッセージである。離脱するノードは、ｐｉｎｇメッセージの伝搬に似た形で、離
脱メッセージを伝搬させる（例えば、近傍内で）。例えば、ＩＤ３０を有するノードは、
ＩＤ１７および４０を有するノードに離脱メッセージ１２１９を送信することができる。
次に、ＩＤ３０を有するノードは、所与の近接リングの観点から、フェデレーションイン
フラストラクチャからそれ自体を除去することができる。ノードが、１つの近接近傍から
それ自体を除去するが、それが属する可能性がある他の近接近傍からは除去しないことが
可能であることに留意されたい。
【０１６６】
ＩＤ１７および４０を有するノード（すなわち、先行ノードおよび後続ノード）が、Ｉ
Ｄ３０を有するノードが除去された後にＩＤ３０に最も近いノードになる可能性が高いの
で、ＩＤ１７および４０を有するノードは、ＩＤ３０を有するノードの離脱を知らされる
。したがって、ＩＤ３０に送達されるべき将来のメッセージを、ＩＤ１７および４０を有
するノードで適当に処理することができる。ＩＤ１７および４０を有するノードは、ＩＤ
３０を有するノードの離脱をリング１２０６上の他のノードに伝搬させることができる。
ＩＤ３０を有するノードがない状態で、ＩＤ１７および４０を有するノードは、潜在的に
お互いをポイントする、先行物ポインタおよび後続物ポインタを再計算することもできる
。
【０１６７】
離脱メッセージのＭｅｓｓａｇｅ ＩＤプロパティは、離脱メッセージを処理するノー
ドが起点ノードによって送信された一連のｐｉｎｇメッセージおよび離脱メッセージの中
で最新のメッセージを判定することを可能にするために、Ｐｉｎｇメッセージと同一のア
プリケーションシーケンスＩＤを割り当てられる。フェデレーション近接リングからの正
常な離脱は、オプションであるが推奨される。しかし、フェデレーションは、ノードが突
然に去る場合に自己修復するように設計される。
【０１６８】
（ライブネス）
フェデレーションの寿命中に、ノードは、フェデレーションを維持するためにライブネ
ス情報を交換することができる。ライブネス情報は、ライブネスメッセージヘッダの形で
、フェデレーション内で交換される事実上すべてのメッセージに含めることができる。例
えば、参加メッセージ、参加応答、ｓｙｎｃメッセージ、ｓｙｎｃ応答、更新メッセージ
、更新応答、アプリケーション固有メッセージ、ライブネスメッセージ、およびｐｉｎｇ
メッセージは、すべてがライブネス情報ヘッダを含むことができる。フェデレーションノ
ードが、メッセージまたは応答を送信するときに、そのノードは、他のノードによる処理
のためにライブネス情報を含めることができる。ライブネス情報を、ライブネスメッセー
ジのライブネス情報ヘッダに含めることができる。
【０１６９】
あるノードのライブネス状態を示すライブネス情報は、次のプロパティを使用して表す
ことができる。 
［Ｎｏｄｅ］：そのライブネス情報が表されているノードを識別する。ノードは、［Ｉ
ｎｓｔａｎｃｅ ＩＤ］をさらに含む［Ｒｅｆｅｒｅｎｃｅ Ｐｒｏｐｅｒｔｉｅｓ］に基
づいて識別することができる。 
［Ｒｅｆｅｒｅｎｃｅ Ｐｒｏｐｅｒｔｉｅｓ］：ＷＳ−ａｄｄｒｅｓｓｉｎｇ仕様
で指定された要素情報アイテム。ＷＳ−ａｄｄｒｅｓｓｉｎｇは、参照プロパティセット
内に含めるために［Ｉｎｓｔａｎｃｅ ＩＤ］参照プロパティを定義する。 
［Ｉｎｓｔａｎｃｅ ＩＤ］：ノードの特定のインスタンスを識別する数。増加す
るブートカウントを、ノードのインスタンスＩＤとして使用することができる。 
［Ｐｈａｓｅ］：識別されたノードのフェーズを伝える。 
［Ｐｈａｓｅ−Ｓｔａｔｅ Ｖａｌｕｅ］ 示されたノードインスタンスが達成したこ
とがわかっている最高のフェーズ状態（挿入中、同期化中、ルーティング中、動作中）を
伝える。 
［Ｐｈａｓｅ．Ｕｎｋｎｏｗｎ Ｉｎｄｉｃａｔｉｏｎ］ 現在のフェーズが既知であ
るか未知であるかを伝えるインジケータ。 
［Ｆｒｅｓｈｎｅｓｓ］：情報の新しさを伝え、その値は、０からＭａｘＦｒｅｓｈｎ
ｅｓｓまでの範囲にわたる。この値が大きいほど、情報はより新しく、０は、情報がない
ことを暗示し、ＭａｘＦｒｅｓｈｎｅｓｓは、プロトコル定義の定数である。 
［Ｃｏｌｏｒ］：ノードが属する近接同等性クラスを識別する。同一のカラー値の２つ
ノードは、必ず、近接的に最も近いと考えられる。というのは、それらの両方が、カラー
値によって識別される同一の同等性クラスに属するからである。近接同等性クラスの個数
は、より多くのノードがフェデレーションに参加するので、経時的に増加する可能性があ
る。 
［Ｗｅｉｇｈｔ］：ノード機能メトリックを供給し、その値は、０からＭａｘＷｅｉｇ
ｈｔまでの範囲にわたる。これは、高い計算能力、高いネットワーク帯域幅、および長い
アップタイムなど、フェデレーションノードの望ましい特性を測定する。この値が大きい
ほど、ノードの能力が高く、パートナーシップの展望からそのノードがより望ましいもの
になる。
【０１７０】
いくつかの環境で、あるノードの［Ｎｏｄｅ］プロパティおよび［Ｆｒｅｓｈｎｅｓｓ
］プロパティは、［Ｏｒｉｇｉｎ］メッセージヘッダおよび［Ｓｅｎｄｅｒ］メッセージ
ヘッダなどのより大きいスコープ内で暗黙または明示的のいずれかで伝えられ、したがっ
て、ライブネスヘッダへの上記プロパティの包含は、重複になる。例えば、メッセージの
送信側は、その現在のフェーズ、カラー、および重み情報をそのＩＤとして伝えることだ
けが必要であり、Ｉｎｓｔａｎｃｅ Ｉｄは、メッセージアドレッシングヘッダ内で供給
され、Ｆｒｅｓｈｎｅｓｓは、暗示される。
【０１７１】
ライブネス状態には、次のように定義される「＜」バイナリ関係に基づいて、少なくと
も半順序を付けることができる。 
「Ｌ１＜Ｌ２」は、
１．「Ｌ１．［Ｎｏｄｅ］．［Ｎａｍｅ］＝＝Ｌ２．［Ｎｏｄｅ］．［Ｎａｍｅ］」が
真であり、テストがリストされた順序で実行され、省略される状態で次のうちの１つが真
である
【０１７２】
【表４】
2014116968.tif 000006
【０１７３】
２．または、「Ｌ１．［Ｃｏｌｏｒ］＝＝Ｌ２．［Ｃｏｌｏｒ］」が真であり、テスト
がリストされた順序で実行され、省略される状態で次のうちの１つが真である
【０１７４】
【表５】
2014116968.tif 000007
【０１７５】
場合に真である。
【０１７６】
さらに、ライブネス「ダウン」メッセージを、指定されたノードが使用不能になった（
例えば、ダウンした）ことが検出されるか疑われるときに、その指定されたノードに送信
することができる。例として、アプリケーションレイヤ（例えば、アプリケーションレイ
ヤ１２１）が、別のアプリケーションレイヤ（例えば、アプリケーションレイヤ１２３）
またはその別のアプリケーションレイヤをホストするノードがダウンしていることを検出
するときに、検出するアプリケーションレイヤは、例えば、メッセージモデルおよび関係
する処理モデル１６００および／または１７００に従って、そのノードがダウンしている
ことを他の下位レイヤ（例えば、他の下位レイヤ１３１）に通知することができる。その
ような通知は、例えば、機能レイヤ１６５１などの他の下位レイヤに、ライブネスダウン
メッセージを送信させることができる。これは、ライブネスダウンメッセージの生成に関
する刺激の１つの例にすぎない。
【０１７７】
ライブネスダウンメッセージは、ルーティングされ、したがって、ダウンしていると疑
われるノードに最も近いノードに送達されるので、指定されたノードのライブネスダウン
メッセージが指定されたノードに戻って送達される場合には、指定されたノードが一度も
ダウンしていないか、指定されたノードが異なるインスタンスである（例えば、異なるイ
ンスタンスＩＤを有する）かのいずれかである。その一方で、ライブネスダウンメッセー
ジが、別のノードに送達される場合には、これは、指定されたノードがダウンしているよ
うに見えることを示す。したがって、ライブネスダウンメッセージを受信するノードが、
それ自体を指定されたノードの近接近傍内にあるとみなす場合に、そのノードは、説明さ
れたようにその近接近傍に指定されたノードの離脱メッセージをソーシングすると同時に
、指定されたノードがダウンしている可能性があることおよび受信するノードがその置換
であることをそのアプリケーションレイヤに（例えば、Ｎｏｄｅ Ｄｏｗｎ １７０４を使
用して）示すことができる。指定されたノードのライブネスダウンメッセージを、そのタ
ーゲットＩＤにダウンしている可能性があるノードのＩＤをセットして、近接的にルーテ
ィングすることができる。
【０１７８】
（バランシングプロシージャ）
本発明の実施形態は、短い期間のうちにフェデレーションに参加し、離脱する多数のノ
ードに対処するように設計されている。そのようなネットワーク内の変化は、様々なノー
ドで維持される対数検索ツリーがアンバランスになる場合にルーティング遅延を引き起こ
す可能性がある。すなわち、リングの片側に反対側より多数のノードがある場合である。
最適のルーティング効率を容易にするために、フェデレーションに参加するノードは、あ
る判断基準が満足されるときにバランシングプロシージャを実行する。
【０１７９】
例えば、次の条件のいずれかが真であるときに、任意のノードが、最適のルーティング
効率のためにバランスをとられたルーティングテーブルを保証するためにバランシングプ
ロシージャを実行することができる。 
・構成された個数の上記ライブネスメッセージが受信された。
・最後の上記ライブネスメッセージの受信以降に構成された長さの時間が経過した。
・いくつかの新しいノードが到着したまたはいくつかの既存ノードが離脱したという意
味で近傍が変化した。
【０１８０】
ルーティングテーブルのバランシングは、単純なプロセスである。例えば、アンバラン
スなルーティングテーブルを有するノードは、参加プロトコルの同期化フェーズ状態およ
びルーティングフェーズ状態を再実行することができる。
【０１８１】
１）ある数に最も近いルーティングノードを見つけること、２）フェデレーションを正
常に去るノードが従う離脱プロトコル、および３）ライブネスメッセージを受信するノー
ドが従うバランシングプロシージャと組み合わされた行為ＲＰ２ｂ、ＲＰ２ｄ、およびＲ
Ｐ４は、フェデレートするノードが比較的すばやく多数でネットワークに参加し、離脱す
るときに、より高速に修復するシステムをもたらす。
【０１８２】
（状況メッセージ）
状況メッセージは、送信側ノードが以前に受信側ノードに転送した相関するメッセージ
のルーティング成功／失敗を知らせるために送信側ノードによって受信側ノードに送信さ
れる、ルーティングされないメッセージである。図１８に、要求−応答メッセージ交換パ
ターンの一部を形成するメッセージがリング上のノードにまたがってどのようにルーティ
ングされるかの一例を示す。状況メッセージは、そのルーティング状況が報告されつつあ
るオリジナルの相関されたメッセージを識別するヘッダを含むことができる。したがって
、状況メッセージをノードの間で使用して、メッセージがあるノードから次のノードに成
功してルーティングされたことを示すことができる。例えば、ノード１８０１からノード
１８０６への要求メッセージ１８１１のルーティングは、ノード１８０２、１８０３、１
８０４、および１８０５を介して要求１８１１を送信することを含む。対応するカスケー
ドする成功状況メッセージ（状況１８１７、１８１８、１９１９、１８２０、および１８
２１）を、それぞれ、ノード１８０６からノード１８０５へ、ノード１８０５からノード
１８０４へ、ノード１８０４からノード１８０３へ、ノード１８０３からノード１８０２
へ、およびノード１８０２からノード１８０１へ送信することができる。要求１８１１に
応答して、応答１８１６を、ノード１８０６からノード１８０１へエンドツーエンドで送
信することができる。応答１８１６は、オプションであり、一方向メッセージ交換パター
ンには存在しない場合がある。
【０１８３】
図１３に、ノードがフェデレーションインフラストラクチャに参加する方法１３００の
一例の流れ図を示す。方法１３００を、図１２Ａおよび１２Ｂのリング１２０６に関して
説明する。方法１３００は、参加メッセージをフェデレーションインフラストラクチャに
発行する行為（行為１３０１）を含む。例えば、ＩＤ１４４を有するノードは、リング１
２０６を含むフェデレーションインフラストラクチャに参加１２０１を発行することがで
きる。方法１３００は、参加するノードから参加メッセージを受信する行為（行為１３０
８）を含む。例えば、リング１２０６を含むフェデレーションインフラストラクチャ内の
既存ノードが、参加１２０１を受信することができる。
【０１８４】
方法１３００は、参加メッセージを処理ノードにルーティングする行為（行為１３０９
）を含む。処理ノードは、参加メッセージがルーティングされつつあるときにフェデレー
ションインフラストラクチャ内の他のアクティブノードより参加するノードのＩＤに数値
的に近いＩＤを有するノードとすることができる。例えば、参加１２０１を、当初にＩＤ
６４を有するノードで受信し、ＩＤ１３５を有するノードにルーティングし、ＩＤ１５１
を有するノードにルーティングすることができる。
【０１８５】
方法１３００は、参加するノードの１つまたは複数の先行ノードおよび１つまたは複数
の後続ノードを計算する行為（行為１３１０）を含む。例えば、ＩＤ１５１を有するノー
ドが、ＩＤ１４４を有するノードの直接の先行ノードおよび直接の後続ノードを計算する
ことができる。リング１２０６内で、ＩＤ１５１を有するノードは、ＩＤ１３５を有する
ノードが直接の先行ノードであり、ＩＤ１５１を有するノードが直接の後続ノードである
ことを計算することができる。類似する計算を、他の近接リングについて行うことができ
る。
【０１８６】
方法１３００は、参加するノードの１つまたは複数のルーティングノードを計算する行
為（行為１３１１）を含む。例えば、ＩＤ１５１を有するノードが、ＩＤ１４４を有する
ノードのルーティングノードを（ＩＤ１５１を有するノードの展望から）計算することが
できる。リング１２０６内で、ＩＤ１５１を有するノードが、例えば、ＩＤ２１８および
４０を有するノードがＩＤ１４４を有するノードのルーティングノードであることを計算
することができる。類似する計算を、他の近接リングについて行うことができる。
【０１８７】
方法１３００は、参加するノードに参加応答を送信する行為（行為１３１２）を含む。
参加応答は、フェデレーションインフラストラクチャの現在のビューを与えられて処理ノ
ードによって計算された、参加するノードのすべての先行近傍ノードおよび後続近傍ノー
ドとルーティングパートナノードとを識別することができる。例えば、参加応答１２０２
は、少なくともＩＤ１４４を有するノードの直接の先行ノードとしてＩＤ１３５を有する
ノードを識別することができ、ＩＤ１４４を有するノードの直接の後続ノードとしてＩＤ
１５１を有するノードを識別することができ、ノードＩＤ１４４（新たに参加するノード
）のためにＩＤ１５１を有するノードで計算されたすべてのルーティングノード（ＩＤ１
４４を有するノードの）を識別することができる。
【０１８８】
方法１３００は、参加メッセージを処理したフェデレーションノードから参加応答を受
信する行為（行為１３０２）を含む。例えば、ＩＤ１４４を有するノードが、ＩＤ１５１
を有するノードから参加応答１２０２を受信することができる。
【０１８９】
方法１３００は、少なくとも直接の近接先行ノードおよび直接の近接後続ノードのそれ
ぞれにｓｙｎｃ要求を送信する行為（行為１３０３）を含む。例えば、ここで図１２Ｂを
参照すると、ＩＤ１４４を有するノードは、ＩＤ１３５および１５１を有するノードにｓ
ｙｎｃ要求１２０３を送信することができる。ｓｙｎｃ要求１２０３は、ＩＤ１４４を有
するノードのすべての近傍ノードの識別および／またはＩＤ１４４を有するノードのすべ
てのルーティングパートナの識別を含むことができる。
【０１９０】
ＩＤ１３５および１５１を有するノードは、ｓｙｎｃ要求１２０３を受信することがで
きる。ｓｙｎｃ要求１２０３の受信に応答して、ＩＤ１３５および１５１を有するノード
は、対応するルーティングテーブルからその近傍およびルーティングパートナノードを識
別することができる。ＩＤ１３５および１５１を有するノードは、その識別された近傍お
よびルーティングパートナノードのライブネス情報をｓｙｎｃ応答１２０４に含め、送信
ｓｙｎｃ応答１２０４をＩＤ１４４を有するノードに送信することができる。
【０１９１】
方法１３００は、近接先行ノードおよび近接後続ノードのそれぞれからｓｙｎｃ応答を
受信する行為（行為１３０４）を含む。例えば、ＩＤ１４４を有するノードは、ＩＤ１３
５および１５１を有するノードからｓｙｎｃ応答１２０４を受信することができる。ｓｙ
ｎｃ応答１２０４は、フェデレーションインフラストラクチャ内のリング１２０６または
他のリング上の１つまたは複数のノードのライブネス情報を含むことができる。ｓｙｎｃ
応答１２０４は、ＩＤ１４４を有するノードのすべての見込みのあるルーティングパート
ナノードを識別することもできる。
【０１９２】
方法１３００は、近傍ノードを計算する行為（行為１３０５）を含む。例えば、ＩＤ１
４４を有するノードは、ＩＤ１３５および１５１を有するノードの近傍ノードの和集合に
基づいて、対応する近傍ノードを計算することができる。近傍ノードを、参加応答メッセ
ージおよびすべてのｓｙｎｃ応答メッセージの要約されたビューに基づいて計算すること
ができる。
【０１９３】
方法１３００は、ルーティングノードを計算する行為（行為１３０６）を含む。例えば
、ＩＤ１４４を有するノードは、リング１２０６のノードの中からルーティングノードを
計算することができる。ルーティングパートナを、参加応答メッセージおよびすべてのｓ
ｙｎｃ応答メッセージの要約されたビューに基づいて計算することができる。
【０１９４】
方法１３００は、少なくとも近傍ノード情報を計算されたルーティングパートナと交換
する行為（行為１３０７）を含む。例えば、ＩＤ１４４を有するノードおよびＩＤ２１８
を有するノード（計算されたルーティングパートナ）は、それらの各々の近傍ノードに対
応する状態情報（例えば、インスタンスＩＤ、フェーズ状態など）を交換することができ
る。これらの交換は、新たに参加するノードが、上のルーティング中フェーズ状態で説明
したように少なくとも各一意の計算されたルーティングパートナに更新メッセージをソー
シング（ルーティング）することによって達成される。更新メッセージを処理するノード
は、新たに参加するノードからの更新メッセージの受信に応答して、対応する更新応答メ
ッセージを送信する。更新応答は、少なくとも、それ自体およびその近傍ノードのライブ
ネス情報を含む。
【０１９５】
方法１３００は、少なくとも１つの近傍ノードへのルーティングテーブルの初期伝搬を
開始する行為をも含めることができる。例えば、ＩＤ１４４を有するノードは、ｐｉｎｇ
メッセージに計算された近傍ノードおよびルーティングパートナノードを含め、そのｐｉ
ｎｇメッセージをＩＤ１７４を有するノード（例えば、計算された近傍ノードのうちの１
つ）に送信することができる。ＩＤ１７４を有するノードは、このｐｉｎｇメッセージを
受信し、ＩＤ１４４を有するノードで始められたライブネス情報を用いて、対応するルー
ティングテーブルを更新することができる。ＩＤ１７４を有するノードは、第２のｐｉｎ
ｇメッセージにその対応するルーティングテーブルを含め、ある将来の時点でこの第２の
ｐｉｎｇメッセージをＩＤ１４４を有するノードに送信することもできる。ＩＤ１４４を
有するノードは、この第２のｐｉｎｇメッセージを受信し、この第２のｐｉｎｇメッセー
ジに含まれるライブネス情報内のノード（すなわち、ＩＤ１７４を有するノードのルーテ
ィングテーブル内のノード）を用いてその対応するルーティングテーブルを更新すること
ができる。ＩＤ１４４を有するノードは、リング１２０６内の他の近傍ノードに関してｐ
ｉｎｇメッセージの送信を繰り返すことができる。
【０１９６】
新たに参加するノードがフェデレーションに参加するときに、新たに参加するノードが
、既存のフェデレーションメンバを見つけることができず、したがって単独のメンバにな
る場合があることを理解されたい。したがって、新たに参加するノードに割り当てられる
先行ノード、後続ノード、または近傍ノードがない場合がある。したがって、この新たに
参加するノードは、すべてのケースで最良のルーティングパートナとしてマッピングされ
る。
【０１９７】
さらに、方法１３００を、単一のリング（リング１２０６）に関して説明したが、いく
つかの実施形態で、あるリングに参加するノードが、本質的に、１つまたは複数の他のリ
ングにも参加することを理解されたい。例えば、図５に戻って簡単に参照すると、リング
５５１に参加するノードは、本質的に、リング５４３、５３１、５２２、５１１、および
５０１にも参加する。したがって、方法１３００を、複数のリングに参加するために実施
することができる。他の実施形態では、方法１３００の行為の一部またはすべてを、複数
のリングに参加するときに繰り返すことができる。例えば、もう一度図５を参照すると、
方法１３００の行為のうちの１つまたは複数を、ノードがリング５５１とリング５１４と
の両方に参加するときに（例えば、エイリアシング）、繰り返すことができる。どの場合
でも、参加するノードのＩＤにアクセスし、これを使用して、ソートされたリンクリスト
ならびに参加するノードが参加しようとしている対応する階層的にパーティショニングさ
れたサブリスト内で、その参加するノードを識別することができる。受信ノードは、ソー
トされたリンクリストおよび各パーティショニングされたサブリストから識別される。参
加メッセージは、ソートされたリンクリストおよび各パーティショニングされたサブリス
ト内の処理ノードにルーティングされる（例えば、ＩＤに基づいて）。参加応答は、ソー
トされたリンクリストおよび各パーティショニングされたサブリスト内の処理ノードから
受信される。
【０１９８】
図１４に、ノードがフェデレーションインフラストラクチャ内でメンバシップを維持す
る方法１４００の一例の流れ図を示す。方法１４００を、リング１２０６に関して説明す
る。方法１４００は、近傍ノードに第１のｐｉｎｇメッセージを送信する行為（行為１４
０１）を含む。第１のｐｉｎｇメッセージは、第１のｐｉｎｇメッセージを送信する現行
ノードが近傍ノードの近傍であることを示す。第１のｐｉｎｇメッセージは、現行ノード
のルーティングパートナおよび近傍ノードの状態をも含むことができる。例えば、ＩＤ１
４４を有するノードが、ＩＤ１５１を有するノードにｐｉｎｇメッセージを送信すること
ができる。第１のｐｉｎｇメッセージ受信したときに、ＩＤ１５１を有するノードは、Ｉ
Ｄ１４１を有するノードがＩＤ１５１を有するノードの近傍であることを知らされる。ノ
ード１５１は、この行為の副次的効果として、ノード１４４からより新しいライブネス情
報（リング１２０６上の他のノードの）を発見することもできる。
【０１９９】
ｐｉｎｇメッセージを、例えば、ｐｉｎｇメッセージがそこに送信される近接リングに
関連する構成状態に基づいて、指定された頻度で周期的に繰り返すことができる。この頻
度は、構成状態に依存して変化し得る。例えば、ＷＡＮについて指定されるｐｉｎｇ頻度
を、ＬＡＮについて指定される頻度と異なるものとすることができる。ｐｉｎｇメッセー
ジを、ｐｉｎｇ分布パターンに従って送信することもできる。始めるノードのｐｉｎｇ分
布パターンは、ｐｉｎｇメッセージがリング上で両方向で近傍ノードに送信されなければ
ならないことを示すことができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１３５を
有するノードの方向とＩＤ１５１を有するノードの方向との両方でｐｉｎｇを送信するこ
とができる。ｐｉｎｇ分布パターンおよび頻度は、変更することができる。例えば、近接
リングごとに変更することができる。
【０２００】
方法１４００は、近傍ノードから第２のｐｉｎｇメッセージを受信する行為（行為１４
０２）を含む。第２のｐｉｎｇメッセージは、少なくとも、第２のｐｉｎｇメッセージを
生み出す近傍ノードが現行ノードの近傍であることを現行ノードに示す。第２のｐｉｎｇ
メッセージは、当該生み出す近傍ノードのルーティングパートナおよび近傍ノードの状態
をも含むことができる。例えば、ＩＤ１５１を有するノードが、ＩＤ１４４を有するノー
ドに第２のｐｉｎｇメッセージを送信することができる。この第２のｐｉｎｇメッセージ
を受信したときに、ＩＤ１４４を有するノードは、ＩＤ１５１を有するノードがＩＤ１４
４を有するノードの近傍であることを知らされる。この第２のｐｉｎｇメッセージは、リ
ング１２０６上の他のノードのライブネス情報をも含むことができる。したがって、一般
に、ｐｉｎｇメッセージを、近傍内で交換することができ、近傍メンバシップ（近接メン
バシップごとに）およびフェデレーション内のノードプレゼンスの近似された共通の近傍
ビューを維持するのに使用することができる。
【０２０１】
受信されたｐｉｎｇメッセージを、周期的に繰り返す／ｐｉｎｇが生み出された（生み
出すノードによって送信された）近接近傍内の他のノードに転送することができる。転送
されるｐｉｎｇメッセージを、ｐｉｎｇ分布パターンに従って送信することもできる。転
送するノードのｐｉｎｇ分布パターンは、ｐｉｎｇメッセージが、生み出すノードから離
れる方向で近傍ノードに送信されなければならないことを示すことができる。例えば、Ｉ
Ｄ１５１を有するノードは、ＩＤ１４４を有するノードで生み出すｐｉｎｇをＩＤ１７４
を有するノードの方向で転送することができる。ｐｉｎｇ転送分布パターンは、例えば、
近接リングごとに変更することができる。
【０２０２】
ノードを、対応するインターバルでｐｉｎｇメッセージを受信するように構成すること
ができる。期待されるｐｉｎｇメッセージが受信されないときに、ノードは、通信障害を
解釈し、期待されるが少なくとも遅れたｐｉｎｇメッセージを生み出さなければならなか
ったノードについて、別のノードのｐｈａｓｅ．ｕｎｋｎｏｗｎ ｉｎｄｉｃａｔｉｏｎ
に真をセットすることができる。
【０２０３】
方法１４００は、完全なルーティングノードに更新要求メッセージを近接ルーティング
する行為（行為１４０３）を含む。この更新要求メッセージは、そのようなルーティング
された更新要求を受信するルーティングノードに、現行ノードが受信するルーティングノ
ードのルーティングパートナとして参加しようとしていることを示す。この更新要求メッ
セージは、少なくとも現行ノードの近傍ノードのアイデンティティをも（例えば、ライブ
ネス情報の形で）含む。例えば、ＩＤ１４４を有するノードは、更新メッセージ１２１６
を、ＩＤ２０８を有するノード（１４４から６４だけオフセットされた完全なルーティン
グパートナ）にルーティングすることができる。ノード２１０（以前に計算されたルーテ
ィングノード）は、２０８に最も近いので、このルーティングされた更新要求を受信し、
処理する。更新メッセージ１２１６を受信したときに、ＩＤ２１０を有するノードは、Ｉ
Ｄ１４４を有するノードがＩＤ２１０を有するノードのルーティングパートナであること
を知らされる（または強化される）。
【０２０４】
方法１４００は、処理する（受信する）ルーティングノードから更新応答メッセージを
受信する行為（行為１４０４）を含む。この更新応答は、処理するルーティングノードが
現行ノードのルーティングパートナとして参加しようとしていることを現行ノードに示す
。この更新応答メッセージは、少なくとも処理するルーティングパートナの近傍ノードの
アイデンティティをも含む。例えば、ＩＤ２１０を有するノードは、ＩＤ１４４を有する
ノードに更新応答１２０７を送信することができる。更新応答１２０７を受信したときに
、ＩＤ１４４を有するノードは、ＩＤ２１０を有するノードがＩＤ１４４を有するノード
のルーティングパートナであることを知らされる。
【０２０５】
方法１４００は、現行ノードおよび近傍ノードが近傍として参加しようとしていること
と、現行ノードおよび近傍ノードがルーティングパートナとして参加しようとしているこ
ととを示すためにノード情報を適宜更新する行為をも含むことができる。例えば、ＩＤ１
４４を有するノードは、ＩＤ１４４および１４１を有するノードが（近接）近傍に参加し
ようとしていることを示すためにＩＤ１５１を有するノードに対応するノード情報を更新
することができる。同様に、ＩＤ１４４を有するノードは、ＩＤ１４４および２１０を有
するノードがルーティングパートナとして参加しようとしていることを示すために、ＩＤ
２１０を有するノードに対応するノード情報を更新することができる。
【０２０６】
いくつかの実施形態で、指定されたノードＸで保存されるアプリケーション状態は、信
頼できるフラッディングプロトコルを使用してそのＮｅｉｇｈｂｏｒｈｏｏｄ（Ｘ）ノー
ドの間で複製される。アプリケーション状態内の各アイテムは、割り当てられたオーナー
を有し、このオーナーは、そのアイテムを作成したエンドポイントとすることができる。
アプリケーション状態内の各アイテムは、そのオーナーによって与えられる関連するタイ
ムスタンプ（別名シーケンス番号）をも有する。タイムスタンプは、次の少なくとも３つ
のコンポーネントを有する。 
○ 所有するエンティティのインスタンスＩＤ（例えば、未割り当ての整数）。少なく
とも単調に（＞１）増加しなければならない
○ オーナーによって生成された特定のシーケンスを識別するシーケンスＩＤ（例えば
、ＵＲＩ）。このコンポーネントは、同一のオーナーが複数の独立のシーケンスを生成す
ることを可能にする
○ 識別されたアプリケーションシーケンスＩＤ内のオフセットを識別する序数（例え
ば、未割り当ての整数）。
【０２０７】
アイテムタイムスタンプは、＜インスタンスＩＤ、シーケンスＩＤ、およびオフセット
＞の３つ組を用いて少なくとも半順序を生成するので、複製中に対応するアイテムに関連
する最新情報を検出するのに使用される。複製されるアイテムに関連するタイムスタンプ
は、最新のアイテムを検出するために、ローカルタイムスタンプが存在する場合にそのロ
ーカルタイムスタンプと比較される。アイテムタイムスタンプは、作成／更新／削除動作
の等羃セマンティックスをサポートするのにも使用される。例えば、あるノードが、アプ
リケーション状態内の既存アイテムを更新する要求を受信するときに、その更新は、更新
要求に関連するタイムスタンプがローカルアイテムに関連するタイムスタンプより新しい
場合に限って受け入れられる。ベクトルタイムスタンプに基づく衝突解決技法を、アイテ
ムを単一のオーナーに割り当てることができない場合に利用することができる。アプリケ
ーション状態複製は、フォールトトレランスを実現し、近傍ノードにまたがるロードバラ
ンシング要求を容易にする。
【０２０８】
オプションの挙動として、（起点）他のパートナ（ルーティングおよび／またはパート
ナ）ノードから期待される更新またはｐｉｎｇを検出しない（ある時間期間の後に）ノー
ドは、フェーズ状態を未知と考え、ｐｈａｓｅ．ｕｎｋｎｏｗｎ表示に真をセットし、こ
れをそのようなものとして他のサードパーティノードに報告することができる。言い換え
ると、更新およびｐｉｎｇの周期的生成を要求することができる。この要件および実際の
タイムアウト値は、様々な近接リングの属性とすることができる。例えば、あるリングが
、いくつかのサブリング（例えば、ＬＡＮセグメント内）についてより厳密なタイミング
要件を有することができ、障害検出／報告は、比較的すばやい。その一方で、あるリング
が、他のサブリング（例えば、インターネット上）についてより厳密でないタイミング要
件を有することができ（あるいは、タイミング要件を有しないことすらでき）、先を見越
したノード障害検出／報告は、比較的長い（または存在しない）。
【０２０９】
図１５に、別のノードのライブネス情報を発見する方法１５００の一例の流れ図を示す
。方法１５００を、図１２Ａおよび１２Ｂのリング１２０６に関して説明する。一般に、
例えば、ｓｙｎｃ １２０３、ｓｙｎｃ応答１２０４、更新１２１６、更新応答１２０７
などの任意のメッセージに、少なくとも１つのライブネスヘッダを含めることができる。
いくつかの実施形態で、ライブネスヘッダは、あるノードの＜ノードＩＤ、インスタンス
ＩＤ、フェーズ［ｐｈａｓｅ−ｓｔａｔｅ ｖａｌｕｅ］．［ｐｈａｓｅ．ｕｎｋｎｏｗ
ｎ ｉｎｄｉｃａｔｉｏｎ］、フレッシュネス値、カラー（近接）値、および重み値＞を
含む。他の実施形態では、ライブネスヘッダは、＜フェーズ［ｐｈａｓｅ−ｓｔａｔｅ 
ｖａｌｕｅ］．［ｐｈａｓｅ．ｕｎｋｎｏｗｎ ｉｎｄｉｃａｔｉｏｎ］、フレッシュネ
ス値、カラー（近接）値、および重み値＞を含む。これらの他の実施形態では、ライブネ
スヘッダを使用して、既に送信側および起点ノードのノードＩＤおよびインスタンスＩＤ
を含むアドレッシングヘッダを増補することができる。アドレッシングヘッダは、既にノ
ードＩＤおよびインスタンスＩＤを含むので、この情報を、ライブネスヘッダから省略す
ることができる。
【０２１０】
方法１５００は、フェデレーションインフラストラクチャに参加するノードの状態情報
を表すライブネスヘッダを受信する行為（行為１５０１）を含む。ライブネスヘッダは、
少なくとも、受信された参加するノードのＩＤ、受信されたノードのインスタンスＩＤ、
受信されたフェーズ値、および受信されたフレッシュネス値を含む。例えば、ＩＤ１４４
を有するノードは、ＩＤ１５１を有するノードからｓｙｎｃ応答１２０４内で第１ライブ
ネスヘッダを受信することができる。第１ライブネスヘッダは、ＩＤ１７４を有するノー
ドの＜参加するノードのＩＤ、インスタンスＩＤ、フェーズ値［ｐｈａｓｅ−ｓｔａｔｅ
ｖａｌｕｅ］．［ｐｈａｓｅ．ｕｎｋｎｏｗｎ ｉｎｄｉｃａｔｉｏｎ］、フレッシュネ
ス値、カラー（近接）値、および重み値＞を含むことができる。フェーズ状態値（例えば
、Ｉｎｓｅｒｔｉｎｇ、Ｓｙｎｃｉｎｇ、Ｒｏｕｔｉｎｇ、Ｏｐｅｒａｔｉｎｇ）は、第
１フレッシュネス値のときのＩＤ１７４を有するノードの表されたフェーズを識別する。
フェーズ値（例えば、フェーズ状態：［Ｉｎｓｅｒｔｉｎｇ，Ｓｙｎｃｉｎｇ，Ｒｏｕｔ
ｉｎｇ，Ｏｐｅｒａｔｉｎｇ］、およびｐｈａｓｅ．ｕｎｋｎｏｗｎ）は、第１フレッシ
ュネス値によって識別されるときのＩＤ１７４を有するノードの表されたおよび／または
検出されたフェーズ情報を識別する。
【０２１１】
しかし、フレッシュネス値を、通信遅延に起因して割引して考えることができる。フレ
ッシュネス値が、時間の経過に伴って減衰することもできる。フレッシュネス値の減衰曲
線は、異なるフェーズ状態（未知を含む）について異なるものとすることができる（また
、線形または対称ではないものとすることができる）。したがって、異なるノードフェー
ズにまたがって、フレッシュネス値の減衰を、非線形および／または非対称とすることが
できる。
【０２１２】
方法１５００は、現行ノードで維持される参加するノードの、少なくとも現行インスタ
ンスＩＤ、現行フェーズ値、および現行フレッシュネス値にアクセスする行為（行為１５
０２）を含む。例えば、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードの以前
に受信され格納されたインスタンスＩＤ、フェーズ値［ｐｈａｓｅ−ｓａｔｅ ｖａｌｕ
ｅ．］［ｐｈａｓｅ．ｕｎｋｎｏｗｎ ｉｎｄｉｃａｔｉｏｎ］、およびフレッシュネス
値にアクセスすることができる。
【０２１３】
方法１５００は、少なくとも、受信されたインスタンスＩＤ、受信されたフェーズ値、
および受信されたフレッシュネス値を、それぞれ現行ノードにある現行インスタンスＩＤ
、現行フェーズ値、および現行フレッシュネス値と比較する行為（行為１５０３）を含む
。例えば、ＩＤ１４４を有するノードは、ＩＤ１７４を有するノードの以前に受信され格
納されたインスタンスＩＤ、フェーズ値［ｐｈａｓｅ−ｓａｔｅ ｖａｌｕｅ．］［ｐｈ
ａｓｅ．ｕｎｋｎｏｗｎ ｉｎｄｉｃａｔｉｏｎ］、およびフレッシュネス値を、ライブ
ネスヘッダ内で受信されたインスタンスＩＤ、フェーズ値［ｐｈａｓｅ−ｓａｔｅ ｖａ
ｌｕｅ．］［ｐｈａｓｅ．ｕｎｋｎｏｗｎ ｉｎｄｉｃａｔｉｏｎ］、およびフレッシュ
ネス値と比較することができる。
【０２１４】
ＩＤ１４４を有するノードは、（順番に）第１インスタンスＩＤがＩＤ１７４を有する
ノードの現在格納されているインスタンスＩＤよりより大きいことに基づいて、第１フェ
ーズ状態値がＩＤ１７４を有するノードの現在格納されているフェーズ状態値より進んで
いることに基づいて、または第１フレッシュネス値がＩＤ１７４を有するノードについて
現在格納されているフレッシュネス値より大きいことに基づいて、ＩＤ１７４を有するノ
ードの現行状態情報（例えば、ＩＤ１５１を有するノードから受信された）が古いことを
判定することができる。ＩＤ１４４を有するノードは、フェーズ状態が検出／送信された
ときにフェーズ状態が既知であったことを少なくとも１つのｐｈａｓｅ．ｕｎｋｏｗｎ表
示（現在格納されているまたはライブネスヘッダ内で受信された、のいずれか）が示すこ
とを判定することもできる。
【０２１５】
方法１５００は、比較に基づいて、参加するノードの状態情報が現行ノードで更新され
なければならないかどうかを判定する行為（行為１５０４）を含む。例えば、ＩＤ１７４
を有するノードの値の比較に基づいて、ＩＤ１４４を有するノードは、ＩＤ１７４を有す
るノードの状態情報を更新しなければならないと判定することができる。ＩＤ１７４を有
するノードの古い状態情報の更新には、現在格納されている値（例えば、インスタンスＩ
Ｄ、フェーズ状態値、ｐｈａｓｅ．ｕｎｋｎｏｗｎ表示、またはフレッシュネス値）を、
ライブネスヘッダ内に含まれる値に置換することを含めることができる。例えば、ＩＤ１
４４を有するノードは、ＩＤ１７４を有するノードの状態情報を更新して、ＩＤ１７４を
有するノードがより進んだフェーズ状態に推移したことを示すことができる。
【０２１６】
いくつかの実施形態で、参加するノードとの通信が失われている可能性があることを検
出することができる。例えば、ＩＤ１４４を有するノードは、ＩＤ１５１を有するノード
との通信が失われたことを検出することができる。図１７を簡潔に参照すると、以前のラ
イブネスイベントに関するサブスクリプション１７０１（ＩＤ１５１を有するノードのエ
ンドポイントを有する）に応答して、アプリケーションレイヤ１７５２は、ｅｎｄｐｏｉ
ｎｔ ｄｏｗｎ ｅｖｅｎｔ １７０３（ＩＤ１５１を有するノードのエンドポイントを有
する）を機能レイヤ１７５１に送ることができる。これらの実施形態では、そのような検
出されたライブネス条件を、最後の既知のフェーズ状態値と一緒に、真をセットされたＰ
ｈａｓｅ．Ｕｎｋｎｏｗｎインジケータを用いてライブネス情報内で示すことができる。
【０２１７】
方法１５００は、さらに、フェデレーションインフラストラクチャ内の第２の異なるノ
ードから第２のライブネスヘッダを含むメッセージを受信する行為を含むことができる。
例えば、ＩＤ１４４を有するノードは、第２のライブネスヘッダを含む状況メッセージを
受信することができる（ＩＤ１０３を有するノードまたはリング１２０６の他のノードか
ら）。第２のライブネスヘッダは、ＩＤ１７４を有するノードの＜参加するノードのＩＤ
、第２のインスタンスＩＤ、第２のフェーズ値［ｐｈａｓｅ−ｓｔａｔｅ ｖａｌｕｅ］
．［ｐｈａｓｅ．ｕｎｋｎｏｗｎ ｉｎｄｉｃａｔｉｏｎ］、第２のフレッシュネス値、
第２のカラー（近接）値、および第２の重み値＞を含むことができる。第２のフェーズ値
（例えば、フェーズ状態：［Ｉｎｓｅｒｔｉｎｇ，Ｓｙｎｃｉｎｇ，Ｒｏｕｔｉｎｇ，Ｏ
ｐｅｒａｔｉｎｇ］およびｐｈａｓｅ．ｕｎｋｎｏｗｎ表示）は、第２のフレッシュネス
値のときのＩＤ１７４を有するノードの表された／検出されたフェーズを識別する。
【０２１８】
あるいは、第１ライブネスヘッダの受信の後に、ＩＤ１４４を有するノードが、ＩＤ１
７４を有するノードと直接に通信することを試みることができる。通信が成功である場合
には、ＩＤ１７４を有するノードは、アドレッシングヘッダ内にノードＩＤおよび第２イ
ンスタンスＩＤを有し、＜第２フェーズ値、第２フレッシュネス値、第２カラー（近接）
値、および第２重み値＞を含むライブネスヘッダを有するメッセージ（例えば、ｓｙｎｃ
応答）を返すことができる。障害が検出される場合には、ＩＤ１４４を有するノードは、
内部ライブネス状態変化を生成し（例えば、フレッシュネス＝最大値およびｐｈａｓｅ．
ｕｎｋｎｏｗｎ表示＝真）、その状態変化が別のノードから受信されたかのように、その
状態変化を処理する。そのような状態変化は、最大のフレッシュネス値を有する。
【０２１９】
方法１５００は、第２インスタンスＩＤ、第２フェーズ値、および第２フレッシュネス
値を、それぞれ現行インスタンスＩＤ、現行フェーズ値、および現行フレッシュネス値と
比較する行為（行為１５０６）をも含むことができる。例えば、ＩＤ１０３を有するノー
ドから状況メッセージを受信した後に、ＩＤ１４４を有するノードは、（順番に）第２イ
ンスタンスＩＤが第１インスタンスＩＤより大きいこと、第２フェーズが第１フェーズ値
より進んでいること、または第２フレッシュネス値が第１フェーズ値より大きいことに基
づいて、ＩＤ１５１を有するノードの現行状態情報が古いと判定することができる。
【０２２０】
方法１５００は、比較に基づいて、特定のノードの状態情報を更新しなければならない
かどうかを判定する行為をも含むことができる。例えば、ＩＤ１７４を有するノードの値
の比較に基づいて、ＩＤ１４４を有するノードが、ＩＤ１７４を有するノードの状態情報
を更新しなければならないと判定することができる。ＩＤ１７４を有するノードの古い状
態情報の更新には、現在格納されている値（例えば、インスタンスＩＤ、フェーズ状態値
、ｐｈａｓｅ．ｕｎｋｎｏｗｎ表示、またはフレッシュネス値）を、第２ライブネスヘッ
ダに含まれる値に置換することを含めることができる。例えば、ＩＤ１４４を有するノー
ドは、ＩＤ１７４を有するノードの状態情報を更新して、ＩＤ１７４を有するノードがよ
り進んだフェーズ状態に推移したことを示すことができる。
【０２２１】
いくつかの実施形態で、フェーズ値は、等しいカラー値(color value)のコンテキスト
内で比較される。前述のように、１つのノードが複数の近接リングに参加することができ
る。複数の近接リングへの参加は、より全般的なリングへの参加を暗示するより特定のリ
ングへの参加（共通の背骨に沿った）の結果として発生し得る。例えば、図５に戻り参照
すると、リング５３２へのあるノードの参加は、そのノードがリング５２２、５１１、お
よび５０１に参加することをも暗示する。したがって、より特定のリングのカラーは、す
べての親近接リングをも表す。また、前述のように、複数の近接リングへの参加は、ある
リング内のノードが１つまたは複数の他のリング（潜在的に異なる背骨に沿った）にエイ
リアス化されるときに発生し得る。例えば、まだ図５を参照すると、リング５３２に参加
するノードを、リング５３１に（または、リング５３１、５２２、５１１、および５０１
への参加を暗示するリング５４１にさえ）エイリアス化することができる。したがって、
あるリング（例えば、リング５３１）のカラーを、別のリング（例えば、リング５３２）
のピアカラー（または近接）と見なすことができる。
【０２２２】
あるノードが、エイリアス化された形で複数の近接リングに参加するときには、そのノ
ードのフェーズ値（例えば、フェーズ状態値および／またはｐｈａｓｅ．ｕｎｋｎｏｗｎ
表示）が、異なる近接リングの間で異なる、多少の可能性がある。したがって、別のノー
ドの状態情報を受信するノードは、現行状態情報がそのノードおよびカラーについて更新
されなければならないかどうかを判定する前に、状態情報（カラー）について対応する近
接リングを識別する。例えば、ＩＤ１４４を有するノードは、受信した状態情報を現行状
態情報と比較する前に、ＩＤ１７４を有するノードに対応する受信された状態情報の対応
する近接リングを識別する。
【０２２３】
適当な近接リングを識別することは、受信されたカラー値を１つまたは複数の現行カラ
ー値と比較することを含むことができる。受信されたカラー値と現行カラー値とが等しい
ときには、例えば、現行インスタンスＩＤ、現行フェーズ値、および現行フレッシュネス
値などの他の状態情報を、例えば、受信されたインスタンスＩＤ、受信されたフェーズ値
、および受信されたフレッシュネス値などの対応する受信された状態情報と比較すること
ができる。その一方で、受信されたカラー値と現行カラー値とが異なるときには、さらな
る比較は行われない。
【０２２４】
カラー値の間の等しさは、様々な形で生じることができる。例えば、カラー値の間の等
しさは、現行カラー値と受信されたカラー値とが同一の近接リング（例えば、リング５３
２）を示すときに、生じる可能性がある。さらに、カラー値の間の等しさは、より特定の
カラー値が対応する親カラー値（例えば、同一の背骨に沿った別のリング）と比較される
ときに、生じる可能性がある。例えば、リング５３２のカラー値をリング５１１（または
リング５２２もしくは５０１）のカラー値と比較することが、等しさをもたらすことがで
きる。したがって、子近接は、親近接であるが、より特定的である。
【０２２５】
したがって、一般に、フェデレーションインフラストラクチャ内の現在の動作ノードは
、他のノードとの通信が失われたように見えるときであっても、それらの他のノードの表
されたライブネス状態情報および検出されたライブネス状態情報を交換することができる
。
【０２２６】
（ブートストラッピング機構）
一般に、ノードがフェデレーションのアクティブメンバになる（例えば、参加する）た
めには、ノードは、既にそれが参加するつもりの葉リングのアクティブメンバである少な
くとも１つの他のノードと通信しなければならない。この最初の形の通信が使用可能であ
ることを保証するのを助けるために、フェデレーションは、ブートストラッピング機構を
利用することができる。ブートストラッピング機構は、他のタイプの通信が葉リングのア
クティブメンバを識別できないか、セキュリティ制約が、新たに参加するノードがシード
ノードなどの特殊なノードのセットのうちの少なくとも１つと最初に通信することを要求
するときに、最後の手段として使用することができる。すなわち、他のタイプの通信が失
敗するときまたはセキュリティ要件のゆえに、ブートストラッピング機構を使用して、葉
リングのアクティブメンバノードを識別することができる。
【０２２７】
いくつかの実施形態で、シードノードは、フェデレーションとの通信をブートストラッ
プするのに使用される。シードノードは、あるタイプのクロス（インター）近接通信の周
知の入口点を提供する。シードノードは、インフラストラクチャ障害／回復および全般的
なダイナミズムに起因するリングパーティションを修復するのを助ける。各リングは、フ
ェデレーションに基本的なブートストラッピングプロパティを提供するために、少なくと
も１つの動作可能なシードノードを有することができる。
【０２２８】
ピアシードノードは、それら自体の間で通信して、近接の少なくともすべてのアクティ
ブシードノードからなるその近接のリング構造（例えば、二重リンクリスト）を維持する
。専用のシードノード同期化プロトコルが、各シードノードに少なくともすべての他のシ
ードノードのプレゼンス（アクティブ）状態の総合的知識を与えるのに使用される。アク
ティブシードノードは、そのホームである近接葉リングならびにその葉リングのすべての
他の先祖リングのメンバノードである。したがって、シードノードは、例えば、そのシー
ドノードの葉リングからルートリングへの、近接リングの背骨全体を表すことができる。
したがって、シードノードは、これらの近接リングのそれぞれにおける非常に使用可能で
あり周知のエントリノードとして機能することができる。その結果、シードノードに関す
るプレゼンス状態を、フェデレーション内の様々な形の通信（例えば、近接間通信）に有
用とすることができる。したがって、シードノードは、例えば、参加するノードの周知の
「参加ポイント」として働く、セキュアリングオーソリティとして働く、インフラストラ
クチャパーティションを修復するのを助ける、およびその近接のそれぞれの安定した「エ
ントリノード」として働くなど、複数の特殊なプロパティを提供することができる。
【０２２９】
プレゼンスデータを提供するために、シードノードの到着および秩序だった離脱を、そ
の近接のそれぞれのランデブポイントで安定したエントリノードとして登録することがで
きる。例えば、登録メッセージを、その宛先ＩＤがストリング「Ｐｒｏｘｉｍｉｔｙ：／
」のＳＨＡ−１ハッシュである固定ＵＲＩにルーティングすることができる。一実施形態
で、安定したエントリノードとして働くシードノードは、この形でそれら自体を登録する
が、選択された非シードノードも同一の形で、シードノードについて本明細書で説明する
ものと同一であるか類似するプロトコルを用いてそれら自体を登録できる、他の実施形態
がある。安定したエントリノード（シードノードなど）が登録するときに、安定したエン
トリノードは、それがそのメンバである各リングを示すことができる。したがって、この
固定ＵＲＩによって識別されるランデブポイントで維持される情報は、本質的に、安定し
たエントリノードおよびそれに対応するリングメンバシップのリストである。したがって
、すべてのノードが、使用可能な安定したエントリノードおよびそのリングメンバシップ
のリストを入手するために、この固定ＵＲＩによって識別されるランデブポイントを参照
することができる。
【０２３０】
一実施形態で、安定したエントリノードは、これらの到着イベントおよび離脱イベント
を直接に登録する。もう１つの実施形態で、安定したエントリノードは、これらのイベン
トをその直接の近接リング内のランデブポイントで直接に登録し、そのランデブポイント
は、安定したエントリノードの登録／登録解除が属する残りの近接リングのそれぞれでの
すべての他の適当なランデブポイントの更新を透過的に容易にする（直接または間接に）
。フェデレーションのアプリケーション状態シーケンシングプロパティおよびアプリケー
ション状態伝搬プロパティを使用して、この安定したエントリノード登録情報を維持し、
伝搬させることができる。例えば、信頼できるフラッディングプロトコルを使用して、あ
るノードの近傍ノードの間で、保存されたアプリケーション状態を複製することができる
。
【０２３１】
安定したエントリノードのプレゼンスデータのルートリングに向かう昇進は、フェデレ
ーション内の他のノードがすべての近接内の少なくとも１つのエントリノードをルックア
ップすることを可能にする。エントリノードルックアップは、ノードルックアップメッセ
ージを、ルックアップを実行するノードの葉リングおよび所望の近接リングの最下位共通
先祖リング(Lowest Common Ancestor Ring、「ＬＣＡＲ」）内の上で判定されたランデブ
ポイントに向かってルーティングすることによって容易にすることができる。例えば、図
５を参照すると、リング５４１内のノードが、リング５３３内のノードと通信することを
望む場合がある。しかし、リング５４１内のノードは、リング５３３内のどのノードの直
接の知識も有しない可能性がある。したがって、リング５４１内のノードは、ノードルッ
クアップメッセージをリング５２２（リング５４１およびリング５３３のリングのＬＡＣ
Ｒ）に送信することができる。エントリノードプレゼンス情報（例えば、そのエントリノ
ードによって始められた登録メッセージのゆえにシステム内に存在するようにされた）を
処理するリング５２２内のランデブポイントノードは、少なくともリング５３３内の登録
された安定したエントリノードの連絡情報を伴うルックアップ応答メッセージを返すこと
ができる。
【０２３２】
いくつかの実施形態で、安定したエントリノードは、様々な近接のプレゼンスデータを
維持する安定したエントリノードとして特に構成されたシードノードである。他の実施形
態では、他のタイプのノードが、様々な近接のプレゼンスデータを維持する安定したエン
トリノードとして機能することもでき、他の動作を実行するようにも構成され得る。例え
ば、ある種の他のタイプのノードを、高度に利用可能であり、したがって安定したエント
リノードとして適切である（すなわち、上で説明されたように登録される）ものとして構
成する（例えば、管理者によって）ことができる。しかし、他のタイプのノードが、追加
のシードノード機能性を含まない場合がある（例えば、セキュリティリングオーソリティ
としては信頼されない場合がある）。いくつかの実施形態で、その直接近接のエントリノ
ードプレゼンス状態を維持するランデブポイントは、それら自体を１つまたは複数の先祖
リング内の安定したエントリノードとして登録することができる。
【０２３３】
（ノード監視）
図１９Ａに、あるノードが別のノードを監視することを容易にする一例のリングアーキ
テクチャ１９００を示す。図示されているように、リングアーキテクチャは、少なくとも
リング１９０１（および任意の個数の他のより高いおよび／またはより低いレベルのリン
グ（図示せず））を含む。リング１９０１を、図３のリング３０６に類似して構成するこ
とができる。しかし、監視は、図４、５、１２Ａ、および１２Ｂのリングのいずれをも含
む、ノードの任意のリングで発生し得る。図１９Ａは、対象ノード１９０２（ＩＤ＝８３
を有する）およびモニタノード１９０３（ＩＤ＝２を有する）の拡大図を示す。図示の環
境では、モニタノード１９０３は、対象ノード１９０２を監視する。しかし、リング１９
０１上の任意のリングを、リング１９０１上の任意の他のノードを監視するように構成す
ることができる。
【０２３４】
図２０に、あるノードが別のノードを監視する方法２０００の一例の流れ図を示す。方
法２０００を、図１９Ａに示されたデータおよびコンポーネントに関して説明する。
【０２３５】
方法２０００は、対象ノードが対象ノードの監視に使用される対象側タイムトゥリブ（
ｔｉｍｅ−ｔｏ−ｌｉｖｅ）持続時間値を生成する行為（行為２００１）を含む。例えば
、対象ノード１９０２は、タイムトゥリブ（ＴＴＬ）持続時間値１９１３を確立すること
ができる。ＴＴＬ持続時間値１９１３は、対象ノード１９０２が、モニタノード１９０３
との監視関係がアクティブであると仮定できる持続時間を示す。
【０２３６】
方法２０００は、対象ノードが確立要求をモニタノードに送信する行為（確立要求は、
モニタノードが対象ノードを監視することを対象ノードが要求することを示し、確立要求
は、対象側タイムトゥリブ持続時間値を含む）（行為２００２）を含む。例えば、対象ノ
ード１９０２は、ＴＴＬ持続時間値１９１３を含む確立要求１９２２をモニタノード１９
０３に送信することができる。
【０２３７】
方法２０００は、対象ノードが、対象側タイムトゥリブ持続時間値および確立要求が送
信された時刻に基づいて既存対象側タイムトゥダイ（ｔｉｍｅ−ｔｏ−ｄｉｅ）時間を確
立する行為（モニタノードからの確立許可の受信の前に既存対象側タイムトゥダイ時間に
達する対象ノードクロックは、対象ノードが障害状態に推移しなければならないことの表
示である）（行為２００３）を含む。例えば、対象ノード１９０２は、ＴＴＬ持続時間値
１９１３と確立要求１９２２がモニタノード１９０３に送信された時刻とに基づいて対象
側タイムトゥダイ時間１９１７を確立することができる。対象側タイムトゥダイ時間１９
１７は、対象ノード１９０２に対する相対的な時間とすることができる。対象ノード１９
０２のクロックが、モニタノード１９０３からの確立許可の受信の前に対象側タイムトゥ
ダイ時間１９１７に達する場合に、対象ノード１９０２は、障害状態に推移しなければな
らない。いくつかの実施形態で、対象ノード１９０２のクロックが、モニタノード１９０
３からの確立許可の受信の前に対象側タイムトゥダイ時間１９１７に達するときに、障害
状態が引き起こされる。他の実施形態では、他のアクティビティが、対象ノード１９０２
を障害状態に推移させるために発生する。
【０２３８】
方法２０００は、モニタノードが、対象ノードから確立要求を受信する行為（確立要求
は、監視ノードが対象ノードを監視することを対象ノードが要求することを示し、確立要
求は、少なくとも対象側タイムトゥリブ持続時間値を含み、対象側タイムトゥリブ持続時
間値は、対象ノードで対象側タイムトゥダイ時間を決定するのに使用され、モニタノード
からの確立許可の受信の前に対象側タイムトゥダイ時間に達する対象ノードクロックは、
対象ノードが障害状態に推移しなければならないことの表示である）（行為２００４）を
含む。例えば、モニタノード１９０３は、ＴＴＬ持続時間値１９１３を含む確立要求１９
２２を対象ノード１９０２から受信することができる。ＴＴＬ持続時間値１９１３は、対
象ノード１９０２で対象側タイムトゥダイ時間１９１７を確立するのに使用される。
【０２３９】
方法２０００は、モニタノードが対象側タイムトゥリブ持続時間値からモニタ側タイム
トゥリブ持続時間値を導出する行為（行為２００５）を含む。例えば、モニタノード１９
０３は、ＴＴＬ持続時間値１９１３を使用してＴＴＬ持続時間値１９１９を導出すること
ができる。いくつかの実施形態で、モニタノード１９０３は、ＴＴＬ持続時間値１９１３
をコピーして、ＴＴＬ持続時間値１９１９を導出する。これらの実施形態では、ＴＴＬ値
持続時間１９１３とＴＴＬ持続時間値１９１９とが等しい。他の実施形態では、モニタノ
ード１９０３は、ＴＴＬ持続時間値１９１３を変更して、ＴＴＬ持続時間値１９１９を導
出する。これら他の実施形態では、ＴＴＬ持続時間値１９１３とＴＴＬ持続時間値１９１
９とが異なる。例えば、モニタノード１９０３は、ＴＴＬ持続時間値１９１３の値を増や
して、ＴＴＬ持続時間値１９１９がＴＴＬ持続時間値１９１３より長くなるようにＴＴＬ
持続時間値１９１９を導出することができる。
【０２４０】
方法２０００は、モニタノードが、モニタ側タイムトゥリブ持続時間値および確立要求
が受信された時刻に基づいてモニタ側タイムトゥダイ時間を確立する行為（対象ノードか
らの更新要求の受信の前にモニタ側タイムトゥダイ時間に達するモニタノードクロックは
、対象ノードの疑われる障害を示す）（行為２００６）を含む。例えば、モニタノード１
９０３は、ＴＴＬ持続時間値１９１９と時確立要求１９２２が受信された時刻とに基づい
てモニタ側タイムトゥダイ時間１９１４を確立する。モニタ側タイムトゥダイ時間１９１
４は、モニタノード１９０３に対する相対的な時間とすることができる。モニタノード１
９０３のクロックが、対象ノード１９０２からの更新要求の受信の前にモニタ側タイムト
ゥダイ時間１９１４に達する場合に、モニタノード１９０３は、障害について対象ノード
１９０２を疑う。
【０２４１】
方法２０００は、モニタノードが、モニタノードが対象ノードを監視することに合意し
たことを対象ノードに示すために、確立許可を対象ノードに送信する行為（行為２００７
）を含む。例えば、モニタノード１９０３は、確立許可１９２３を対象ノード１９０２に
送信することができる。方法２０００は、対象ノードが、監視ノードから確立許可を受信
する行為（確立許可は、モニタノードが対象ノードを監視することを示す）（行為２００
８）を含む。例えば、対象ノード１９０２は、モニタノード１９０３から確立許可１９２
３を受信することができる。一般に、確立許可１９２３は、モニタノード１９０３が対象
ノード１９０２を監視することに合意したことを示す。いくつかの実施形態で、確立許可
メッセージは、モニタ側ＴＴＬ持続時間値を含むことができる。例えば、確立許可１９２
３がＴＴＬ持続時間値１９１９を含むかもしれない。
【０２４２】
その代わりに、モニタノードは、モニタノードが対象ノードを監視することに合意しな
かったことを対象ノードに示すために、対象ノードに確立拒否を送信することができる。
例えば、確立要求１９２２の受信に応答して、モニタノード１９０３は、その代わりに（
破線によって示されるように）確立拒否１９３１を対象ノード１９０２に送信することが
できる。対象ノードは、モニタノードから送信された確立拒否を受信することができる。
例えば、対象ノード１９０２は、モニタノード１９０３から確立拒否１９３１を受信する
ことができる。確立拒否１９３１は、一般に、モニタノード１９０３が対象ノード１９０
２を監視することに合意しなかったことを対象ノード１９０２に示す。
【０２４３】
時々（および、リングアーキテクチャ１９９０内の他の動作の実行の間に混ぜ合わされ
て）、対象ノードが、監視ノードとの確立された監視合意を更新することができる。一般
に、対象ノードは、新しい許可が受信されるまで、既存の合意を有効なままにする（現行
対象側タイムトゥダイ時間）。しかし、対象ノードは、新しいＴＴＬ持続時間値を生成し
、更新されたタイムトゥダイがどうなるかを導出することができる。次に、対象ノードは
、新しいＴＴＬ持続時間値をモニタノードに送信する。モニタノードは、新しいＴＴＬ持
続時間値を受信する。適当なときに、モニタノードは、更新要求を許可し、更新許可を対
象に送り返す。対象ノードは、更新許可を受信する。更新許可の受信に応答して、対象は
、新しい現行タイムトゥダイ時間として更新されたタイムトゥダイ時間を使用して、更新
合意を実施する。確立された監視合意の更新の例は、方法２０００の残りの行為で説明す
る。
【０２４４】
方法２０００は、対象ノードが、対象ノードクロックが対象側タイムトゥダイ時間に達
する前に、モニタノードに更新要求を送信する行為（行為２００９）を含む。例えば、対
象ノード１９０２は、対象ノード１９０２のクロックが対象側タイムトゥダイ時間１９１
７に達する前に、ＴＴＬ持続時間値１９１３を含む更新要求１９１５をモニタノード１９
０３に送信することができる。いくつかの実施形態で、更新要求１９１５は、対象側ＴＴ
Ｌ持続時間値を含まない。これらの実施形態では、ＴＴＬ持続時間値１９１３の継続され
る使用を推論することができる。他の実施形態では、ＴＴＬ持続時間値１９１３が、更新
要求１９１５に明示的に含まれる。もう１つの実施形態では、異なる対象側ＴＴＬ持続時
間値が、更新要求１９１５に含まれる。新しい対象側ＴＴＬ持続時間値を、対象ノード１
９０２の構成変更および／またはリング１９０１内の他所での更新変更（例えば、変更さ
れたネットワーク条件）に応答して、対象ノード１９０２によって生成し、使用すること
ができる。
【０２４５】
ノード１９０２は、更新要求１９１５に応答する対応する更新許可が受信される場合に
、更新された対象側タイムトゥダイ時間がどうなるかを計算することもできる。この計算
は、少なくとも、更新要求１９１５が送信された時刻と、更新要求１９１５に関係付けら
れるかこれに関連する対象側ＴＴＬ持続時間値とに基づくものとすることができる。
【０２４６】
方法２０００は、モニタノードが、確立許可メッセージの送信の後、モニタノードクロ
ックがモニタ側タイムトゥダイ時間に達する前に、対象ノードから更新要求を受信する行
為（更新要求は、対象ノードが障害を発生していないことを示す）（行為２０１０）を含
む。例えば、モニタノード１９０３は、確立許可１９２３の送信の後、モニタノード１９
０３のクロックがモニタ側タイムトゥダイ時間１９１４に達する前に、更新要求１９１５
を受信することができる。更新要求１９１５の受信は、対象ノード１９０２が障害を発生
していないことをモニタノード１９０３に示すことができる。
【０２４７】
方法２０００は、モニタノードが対象ノードに更新要求を許可する行為をも含むことが
できる。例えば、モニタノード１９０３は、更新要求１９１５を許可することができる。
【０２４８】
方法２０００は、モニタノードが、少なくとも更新要求が受信されたことに応答し、そ
の時刻に基づいて、更新されたモニタ側タイムトゥダイ時間を確立する行為（対象ノード
からのもう１つの更新要求の前に更新されたモニタ側タイムトゥダイ時間に達するモニタ
ノードクロックは、対象ノードの疑われる障害を示す）（行為２０１２）を含む。例えば
、モニタノード１９０３は、更新要求１９１５が受信されたことに応答し、その時刻と、
更新要求１９１５に関係付けられまたはこれに潜在的に含まれる暗示されまたは示された
モニタＴＴＬ持続時間値とに基づいて、更新されたモニタ側タイムトゥダイ時間１９２１
を確立することができる。更新されたモニタ側タイムトゥダイ時間１９２１は、モニタノ
ード１９０３に対する相対的な時間とすることができる。更新されたモニタ側タイムトゥ
ダイ時間１９２１を、モニタ側タイムトゥダイ時間１９１４の後とすることができる。し
かし、モニタ側タイムトゥダイ時間１９１４が、更新されたモニタ側タイムトゥダイ時間
１９２１を確立する前に発生したという要件はない。したがって、更新されたモニタ側タ
イムトゥダイ時間１９２１が、実際にモニタ側タイムトゥダイ時間１９１４の前（または
これと同一）であることも可能である。モニタノード１９０３のクロックが、対象ノード
１９０２から別の更新要求を受信する前に更新されたモニタ側タイムトゥダイ時間１９２
１に達する場合には、モニタノード１９０３は、障害について対象ノード１９０２を疑う
。
【０２４９】
対象側ＴＴＬ持続時間値が、更新要求１９１５に含まれない（したがって、ＴＴＬ持続
時間値１９１３が推論される）場合、または更新要求がＴＴＬ持続時間値１９１３を明示
的に含む場合に、モニタノード１９０３は、ＴＴＬ持続時間値１９１９を使用して、更新
されたモニタ側タイムトゥダイ時間１９２１を確立することもできる。その一方で、ＴＴ
Ｌ持続時間値１９１３以外の対象側ＴＴＬ持続時間値が、更新要求１９１５内に明示的に
含まれる場合には、モニタノード１９０３は、その、他の明示的に含まれる対象側ＴＴＬ
持続時間値を使用して、新しいモニタ側ＴＴＬ持続時間値を導出することができる。次に
、新しいモニタ側ＴＴＬ持続時間値から、モニタノード１９０３は、更新されたモニタ側
タイムトゥダイ時間１９２１を確立することができる。
【０２５０】
方法２０００は、モニタノードが、モニタノードが対象ノードの監視を継続することに
合意したことを対象ノードに示すために、対象ノードに更新許可を送信する行為（行為２
０１３）を含む。例えば、モニタノード１９０３は、更新許可１９２７を対象ノード１９
０２に送信することができる。方法２０００は、対象ノードが、対応する更新要求の送信
の後、対象ノードクロックが対象側タイムトゥダイ時間に達する前に、モニタノードから
更新許可を受信する行為（更新許可メッセージは、モニタノードが対象ノードの監視を継
続することを示す）（行為２０１４）を含む。例えば、対象ノード１９０２は、更新要求
１９１５の送信の後、対象ノード１９０２のクロックが対象側タイムトゥダイ時間１９１
７に達する前に、モニタノード１９０３から更新許可１９２７を受信することができる。
一般に、更新許可１９２７は、モニタノード１９０３が対象ノード１９０２の監視を継続
することに合意することを示す。
【０２５１】
その代わりに、モニタノードは、モニタノードが対象ノードの監視にもはや合意しない
ことを対象ノードに示すために、対象ノードに更新拒否を送信することができる。例えば
、更新要求１９１５の受信に応答して、モニタノード１９０３は、その代わりに（破線に
よって示されるように）更新拒否１９３３を対象ノード１９０２に送信することができる
。対象ノードは、モニタノードから送信された更新拒否を受信することができる。例えば
、対象ノード１９０２は、モニタノード１９０３から更新拒否１９３３を受信することが
できる。更新拒否１９３３は、一般に、モニタノード１９０３が対象ノード１９０２の監
視にもはや合意しないことを対象ノード１９０２に示す。
【０２５２】
方法２０００は、対象ノードが、更新許可の受信に応答して、以前に計算された更新さ
れた対象側タイムトゥダイ時間に推移すること（モニタノードからのもう１つの更新許可
の受信の前に更新された対象側タイムトゥダイ時間に達する対象ノードクロックは、対象
ノードが障害状態に推移しなければならないことの表示である）（行為２０１５）を含む
。例えば、対象ノード１９０２は、対応する更新許可メッセージが受信されるときに、更
新された対象側タイムトゥダイ時間１９５２に推移することができる。更新された対象側
タイムトゥダイ時間１９５２は、更新要求１９１５がモニタノード１９０３に送信された
時刻付近に計算済みとすることができる。更新された対象側タイムトゥダイ時間１９５２
は、対応する更新要求１９１５が送信された時刻と、更新要求１９１５に関係付けられま
たは関連するＴＴＬ持続時間とに基づいて計算済みとすることができる。更新された対象
側タイムトゥダイ時間１９５２は、対象ノード１９０２に対する相対的な時間（例えば、
対象側タイムトゥダイ時間１９１７の後、前、またはこれと等しい）とすることができる
。
【０２５３】
ＴＴＬ値１９１３が、それでも適当なＴＴＬ値である場合に、対象ノード１９０２は、
ＴＴＬ持続時間値１９１３を使用して、更新された対象側タイムトゥダイ時間１９５２を
確立することもできる。もう１つのＴＴＬ持続時間値が生成された場合には、対象ノード
１９０２は、そのもう１つの生成されたＴＴＬ持続時間値を使用して、更新された対象側
タイムトゥダイ時間１９５２を確立することもできる。
【０２５４】
現行対象側タイムトゥダイ時間（１９１７または１９５２のいずれか）の確立の後に、
対象ノード１９０２のクロックが、モニタノード１９０３からもう１つの更新許可を受信
する前に現行対象側タイムトゥダイ時間に達するかもしれない。これは、対象ノード１９
０２とモニタノード１９０３との間の通信エラーから生じる可能性がある。例えば、対象
ノード１９０２が、更新許可１９２７を受信した後、対象ノード１９０２のクロックが更
新された対象側タイムトゥダイ時間１９５２に達する前に、もう１つの更新要求を送信す
る場合がある。しかし、通信障害に起因して、そのもう１つの更新要求は、モニタノード
１９０３に到達しない。その代わりに、そのもう１つの更新要求が、モニタノード１９０
３で受信される可能性があるが、モニタノード１９０３からの対応する更新許可が、通信
エラーに起因して対象ノード１９０２に到達しない。どちらの場合でも、対象ノード１９
０２のクロックは、そのもう１つの更新要求に応答する対応する更新許可を受信する前に
、現行対象側タイムトゥダイ時間に達する可能性がある。
【０２５５】
その代わりに、対象ノード１９０２が誤動作している可能性があり、対象ノード１９０
２が、対象ノード１９０２のクロックが更新された対象側タイムトゥダイ時間１９５２に
達する前にモニタノード１９０３にもう１つの更新要求を送信できなくなる。
【０２５６】
しかし、更新要求が送信されようとされまいと、更新許可が、対象ノード１９０２のク
ロックが現行の対象側タイムトゥダイ時間１９５２に達する前に受信されない場合には、
対象ノード１９０２は、障害状態に推移する。
【０２５７】
戻ってモニタノード１９０３を参照すると、モニタノード１９０３のクロックが、もう
１つの更新要求を対象ノード１９０２から受信する前に（対象ノード１９０２での誤動作
またはリング１９０１での通信エラーのいずれかに起因して）モニタ側タイムトゥダイ時
間（１９１４または１９２１のいずれか）に達するかもしれない。その結果、モニタノー
ド１９０３は、障害について対象ノード１９０２を疑う。モニタノード１９０３は、別の
ノードでの疑われる障害の検出を示すタイムアウト状態に推移することができる。
【０２５８】
他の実施形態では、ノードの対が、お互いを監視することができる。したがって、第１
ノードが第２ノードを監視することができ、第２ノードも第１ノードを監視することがで
きる。例えば、各ノードは、他方のノードとの通信を介して、対象ノード側とモニタノー
ド側との両方の方法２０００を実施することができる。
【０２５９】
図１９Ｂに、２つのノードがお互いを監視するのを容易にする一例のリングアーキテク
チャ１９００を示す。
【０２６０】
ノード１９７１は、ノード１９７１を監視するのに使用されるＴＴＬ持続時間値１９２
９を生成することができる。ノード１９７１は、ＴＴＬ持続時間値１９２９を含む確立要
求１９６２をノード１９７２に送信することができる。ノード１９７１は、ＴＴＬ持続時
間値１９２９に基づいて対象側タイムトゥダイ時間１９７３を確立することもできる。ノ
ード１９７２は、ＴＴＬ持続時間値１９２９を含む確立要求１９６２をノード１９７１か
ら受信することができる。ノード１９７２は、ＴＴＬ持続時間値１９２９からＴＴＬ持続
時間値１９４９を導出することができる。ノード１９７２は、ＴＴＬ持続時間値１９４９
に基づいてモニタ側タイムトゥダイ時間１９３９を確立することができる。ノード１９７
２は、確立許可１９７４をノード１９７１に送信することができる。ノード１９７１は、
ノード１９７２から確立許可１９７４を受信することができる。
【０２６１】
並行して、ノード１９７２は、ノード１９７２を監視するのに使用されるＴＴＬ持続時
間値１９７５を生成することができる。ノード１９７２は、ＴＴＬ持続時間値１９７５を
含む確立要求１９２６をノード１９７１に送信することができる。ノード１９７２は、Ｔ
ＴＬ持続時間値１９７５に基づいて対象側タイムトゥダイ時間１９３５を確立することも
できる。ノード１９７１は、ＴＴＬ持続時間値１９７５を含む確立要求１９２６をノード
１９７２から受信することができる。ノード１９７１は、ＴＴＬ持続時間値１９７５から
ＴＴＬ持続時間値１９５３を導出することができる。ノード１９７１は、ＴＴＬ持続時間
値１９５３に基づいてモニタ側タイムトゥダイ時間１９３７を確立することができる。ノ
ード１９７１は、許可メッセージ１９７６をノード１９７２に送信することができる。ノ
ード１９７２は、ノード１９７１から許可メッセージ１９７６を受信することができる。
【０２６２】
その代わりに、ノード１９７１および１９７２のいずれかが、他方のノードからの確立
要求を拒否することができる。例えば、ノード１９７１が、確立要求１９６２を拒否する
ことができる。同様に、ノード１９７２が、確立要求１９２６を拒否することができる。
いずれかのノードが確立要求を拒否するときに、そのノードは、他方のノードに確立拒否
（例えば、確立拒否１９３１に似た）を送信することができる。これは、他方のノードに
、監視合意が確立されなかったことを示す。
【０２６３】
その後、ノード１９７１およびノード１９７２は、前述のように更新要求および更新許
可（ならびに更新拒否１９３３に似た更新拒否）を交換することができる。したがって、
ノード１９７１およびノード１９７２のそれぞれが、対象ノードとモニタノードとの両方
である。図１９Ｂに示されたＴＴＬ持続時間値およびタイムトゥダイ時間に基づいて、様
々なイベントが、監視関係が確立されている間および／またはその後に発生し得る。
【０２６４】
ノード１９７１のクロックが、ノード１９７２から更新許可を受信する前に対象側タイ
ムトゥダイ時間１９７３に達する場合に、ノード１９７１は、障害状態に推移する。ノー
ド１９７２のクロックが、ノード１９７１から更新要求を受信する前にモニタ側タイムト
ゥダイ時間１９３９に達する場合に、ノード１９７２は、障害についてノード１９７１を
疑う。
【０２６５】
ノード１９７２のクロックが、ノード１９７１から更新許可を受信する前に対象側タイ
ムトゥダイ時間１９３５に達する場合に、ノード１９７２は、障害状態に推移する。ノー
ド１９７１のクロックが、ノード１９７２から更新要求を受信する前にモニタ側タイムト
ゥダイ時間１９３７に達する場合に、ノード１９７１は、障害についてノード１９７２を
疑う。
【０２６６】
（ノード障害のアービトレーション）
様々な異なるタイプの通信エラーおよびノード誤動作に起因して、ノードの対の各ノー
ドが他方のノードの障害を疑う可能性が存在する。さらに、各ノードは、それが正しく機
能していることを疑うことができる。
【０２６７】
いくつかのリングアーキテクチャで、リソースの諸部分は、単一のノードが所与の瞬間
にあるリソースを制御するように構成される。さらに、いくつかのリソースの必要な可用
性も、あるノードによる本質的に一定の制御が必要になるように高くすることができる。
したがって、あるノードが障害を発生するときに、様々なリソースの制御を、別のノード
に転送する必要がある場合がある。したがって、ノードの対の１つのノードが、障害につ
いて他方のノードを疑うときに、アービトレーション機構を使用して、少なくとも、どち
らのノードが障害を有したまたは有するに違いないかを判定することができる。
【０２６８】
例えば、対の各ノードが、障害について他方のノードを疑うときに、各ノードは、タイ
ムアウト状態に推移し、その疑いをアービトレーションファシリティに報告することがで
きる。タイムアウト状態であるときに、各ノードでのある種の他の処理を、アービトレー
ションの結果が受け取られるまでサスペンドさせることができる。アービトレーションフ
ァシリティは、ノードに戻って報告して、そのノードがアクティブのままになるべきであ
るかどうかを示すことができる。例えば、アービトレーションファシリティは、アクティ
ブのままになるべき報告するノードに、受入メッセージを送信することができる。アービ
トレーションファシリティは、障害状態に推移すべき報告するノードに、否定メッセージ
を送信することができる。受入メッセージを受信するノードは、アクティブのままである
ことができる。受入メッセージを受信しない（例えば、ネットワーク条件に起因して）ノ
ードまたは否定メッセージを受信するノードは、障害状態に推移する。
【０２６９】
図１９Ｃに、相互に監視するノードが、他方のノードが障害について疑われることをそ
れぞれ報告できるときのアービトレーションを容易にする例のリングアーキテクチャ１９
００を示す。図１９Ｃは、ノード１９８１（ＩＤ＝９８を有する）、モニタノード１９８
２（ＩＤ＝６４を有する）、およびアービトレータ１９８３の拡大図を示す。
【０２７０】
いくつかの実施形態で、アービトレータ１９８３は、リング１９０１のメンバでもある
。他の実施形態では、アービトレータ１９８３は、リング１９０１の先祖のメンバである
が、リング１９０１のメンバではない。さらなる実施形態では、アービトレータ１９８３
は、リング１９０１を含むリング階層の外部にある。例えば、アービトレータ１９８３を
、ノードの別々のアービトレーションフェデレーションリングに含めることができる。ア
ービトレーションフェデレーション内のノードを、リング１９０１およびその先祖のノー
ドのアービトレータとして構成することができる。
【０２７１】
いくつかの実施形態で、アービトレータ１９８３は、ノード１９８１および１９８２に
ついてアービトレートするためにノード１９７１およびノード１９８２によって相互に合
意される。他の実施形態で、アービトレータ１９８３は、別のエンティティによって、ノ
ード１９８１および１９８２についてアービトレートするために割り当てられる。この別
のエンティティは、リング１９０１を含むリング階層の内部のノード（例えば、シードノ
ード）または例えば、人間の管理者とすることができる。例えば、この他のノードを、リ
ング１９０１のメンバとするか、リング１９０１の先祖のメンバであるがリング１９０１
のメンバではないものとすることができる。その代わりに、この別のエンティティを、リ
ング１９０１を含むリング階層の外部とすることができる。例えば、この別のエンティテ
ィを、別々のアービトレーションフェデレーションリングのメンバであるノードとするこ
とができる。
【０２７２】
アービトレータ１９８３は、リング１９０１を含むリング階層の変化する知識を有する
ことができる。例えば、アービトレータ１９８３は、リング１９０１を含むリング階層の
グローバル知識を有することができる。その代わりに、アービトレータ１９８３が、リン
グ１９０１を含むリング階層に含まれるリングのあるサブセットの知識を有することがで
きる。他の実施形態では、アービトレータ１９８３は、ノード１９８１および１９８２を
含む（潜在的にはこれらだけを含む）リング１９０１内のノードのサブセットの知識を有
する。
【０２７３】
アービトレータ１９８３を、ノード１９８１および１９８２を含むがこれらに限定はさ
れない任意の個数のノード対についてアービトレートするように構成することができる。
いくつかの実施形態で、アービトレーション機構は、疑われるノード障害の報告の受信の
前に、それがアービトレートするノードの知識を有しない。したがって、ノードの対が、
アービトレータ１９８３を使用することに合意した、またはアービトレータ１９８３がノ
ードの対に関してアービトレートするために割り当てられたが、アービトレータ１９８３
は、ノードの対の１つのノードに関する疑われるノード障害の報告を受信する前に、合意
または割り当てをまったく知らない場合がある。
【０２７４】
アービトレーションは、衝突する障害報告を提示するノードの間でアービトレートする
ことを含むことができる。例えば、第１ノードが第２ノードを監視しており、第２ノード
も第１ノードを監視しているときに、各ノードが、他方のノードが障害について疑われる
と報告するかもしれない。疑われる障害は、本明細書において既に説明したものを含む事
実上すべての障害検出機構を使用して検出することができる。
【０２７５】
障害発生ノードリスト１９４７は、疑われる障害を発生したノードとして報告されたノ
ードのリストを含むことができる。ノードは、他のノードを疑われる障害を発生したノー
ドとしてアービトレータ１９８３に報告することができ、適当なときに、アービトレータ
１９８３は、報告されたノードを障害発生ノードリスト１９４７に含めることができる。
アービトレータ１９８３は、適当な時間期間の後（例えば、継続される衝突の可能性が不
可能である将来のとき）に、障害を発生したノードを障害発生ノードリスト１９４７から
除去することができる。例えば、障害発生ノードリスト１９４７のエントリを、それらが
障害発生ノードリスト１９４７に挿入された後のリカバリタイムインターバル１９４２に
除去することができる。リカバリタイムインターバル１９４２は、障害を発生していると
言われたノードが実際に障害を発生することを保証するのに十分に長くすることができる
。
【０２７６】
図２１は、疑われるノード障害の衝突する報告の間でアービトレートする方法２１００
の一例の流れ図を示す。方法２１００を、図１９Ｃに示されたコンポーネントおよびデー
タに関して説明する。
【０２７７】
方法２１００は、第１ノードが、第２ノードが障害について疑われることの報告をアー
ビトレーションファシリティに送信する行為（行為２１０１）を含む。例えば、ノード１
９８１が、報告１９３４をアービトレータ１９８３に送信することができる。方法２１０
０は、アービトレータが、第２ノードが障害について疑われることの報告を第１ノードか
ら受信する行為（行為２１０２）を含む。例えば、アービトレータ１９８３が、ノード１
９８１から報告１９３４を受信することができる。
【０２７８】
方法２１００は、アービトレータが、第１ノードからの報告の受信の前の指定されたリ
カバリタイムインターバル内に、他のノードが障害について第１ノードを疑わなかったこ
とを判定する行為（行為２１０３）を含む。例えば、アービトレータ１９８３は、リカバ
リタイムインターバル１９４２内（その後には、アービトレータ１９８３が、いずれにせ
よ障害発生ノードリスト１９４７からノード１９８１を除去しているはずである）に他の
ノードが障害についてノード１９８１を疑わなかったことを判定することができる。
【０２７９】
方法２１００は、アービトレータが、第２ノードが障害状態であることをリストに記録
する行為（行為２１０５）を含む。例えば、アービトレータ１９８３は、ノード１９８２
（ＩＤ＝６４）が障害状態であることを障害発生ノードリスト１９４７に記録することが
できる。
【０２８０】
方法２１００は、アービトレータが、最大応答タイムインターバル以内に第１ノードに
受入メッセージを送信する行為（受入メッセージは、その後に第２ノードが障害状態に推
移することが保証される時間期間を示す障害時間値を含む）（行為２１０４）を含む。例
えば、アービトレータ１９８３は、報告１９３４の受信から最大応答タイムインターバル
１９４３以内に、ノード１９８１に受入メッセージ１９８４を送信することができる。受
入メッセージ１９８４は、ノード１９８２が障害状態に推移済みであることが保証される
ときを示す障害タイムインターバル１９３６を含む。一般に、最大応答タイムインターバ
ルは、その後に、アービトレーションファシリティ（アービトレータ１９８３）がアービ
トレーションの要求（例えば、報告１９３４または１９３８）に回答しないとリクエスタ
（例えば、ノード１９８１または１９８２）が仮定するとき点を表す。最大応答タイムイ
ンターバルが、アービトレーションの要求を送信した後にリクエスタで満了するときに、
そのリクエスタは、明示的な否定メッセージが受信された場合に実行される動作に類似す
る（潜在的に同一の）動作を実行する。
【０２８１】
方法２１００は、第１ノードが、最大応答タイムインターバル以内にアービトレーショ
ンファシリティから受入メッセージを受信する行為（受入メッセージは、その後に第２ノ
ードが障害状態に推移することが保証される時間期間を示す時間値を含む）（行為２１０
６）を含む。例えば、ノード１９８１は、障害タイムインターバル１９３６を含む受入メ
ッセージ１９８４をアービトレータ１９８３から受信することができる。障害タイムイン
ターバル１９３６は、ノード１９８２が障害状態に推移済みであることが保証される時間
を示す。したがって、障害タイムインターバル１９３６の満了の後に、ノード１９８１は
、以前にノード１９８２によって制御された１つまたは複数のリングリソースの制御を請
求することを試みることができる。
【０２８２】
方法２１００は、第１ノードが、時間期間の満了の後に、以前に第２ノードによって制
御された１つまたは複数のリングリソースの制御を請求する行為（行為２１０７）を含む
。例えば、ノード１９８１は、障害タイムインターバル１９３６の満了の後に、以前にノ
ード１９８２によって制御されたリング１９０１内の１つまたは複数のリングリソースの
制御を請求することができる。
【０２８３】
請求されるリングリソースは、障害状態への推移の前にノード１９８２によって制御さ
れたリングリソースに応じて変化し得る。例えば、ノード１９８１は、ノード１９８２の
メッセージルーティング責任（例えば、リング１９０１上のアイデンティティの範囲に向
けられたメッセージを受信する責任）、ノード１９８２のすべてのシードノード責任、ノ
ード１９８２のすべてのアービトレーション責任などを引き受けることができる。
【０２８４】
第１ノードが第２ノードを報告したときまたはその後に、第２ノードも、障害について
第１ノードを疑う場合がある。例えば、ノード１９８２も、障害についてノード１９８１
を疑うかもしれない。
【０２８５】
方法２１００は、第２ノードが、第１ノードが障害について疑われることの報告をアー
ビトレーションファシリティに送信する行為（行為２１０８）を含む。例えば、ノード１
９８２が、ノード１９８１が障害について疑われることの報告１９３８をアービトレータ
１９８３に送信することができる。方法２１００は、アービトレータが、第１ノードが障
害について疑われることの報告を第２ノードから受信する行為（第２ノードからの報告は
、第１ノードからの報告の受信の後の指定されたリカバリタイムインターバル以内に受信
される）（行為２１０９）を含む。例えば、アービトレータ１９８３は、報告１９３４の
受信からリカバリタイムインターバル１９４２以内に、ノード１９８１が障害について疑
われることの報告１９３８をノード１９８２から受信することができる。
【０２８６】
方法２１００は、アービトレータが、第２ノードが障害状態に推移すべきであることを
判定するためにリストを参照する行為（行為２１１０）を含む。例えば、アービトレータ
１９８３は、ノード１９８２（ＩＤ＝６４）が障害状態に推移すべきであることを判定す
るために、障害発生ノードリスト１９４７を参照することができる。
【０２８７】
方法２１００は、第２ノードに障害状態に推移させるために第２ノードに否定メッセー
ジを送信する行為（行為２１１１）を含む。例えば、アービトレータ１９８３は、ノード
１９８２に障害状態に推移させるためにノード１９８２に否定メッセージ１９８５を送信
することができる。方法２１００は、第２ノードがアービトレーションファシリティから
否定メッセージを受信する行為（行為２１１２）を含む。例えば、ノード１９８２は、ア
ービトレータ１９８３から否定メッセージ１９８５を受信することができる。
【０２８８】
方法２１００は、第２ノードが障害状態に推移する行為（行為２１１３）を含む。例え
ば、ノード１９８２は、否定メッセージ１９８５の受信に応答して障害状態に推移するこ
とができる。障害発生の後に、ノード１９８２は、その後、リング１９０１への再参加を
試みることができる。
【０２８９】
（キャッシングされた合意に従うルーティング）
いくつかの実施形態で、メッセージは、キャッシングされたルーティング合意に従って
ルーティングされる。例えば、リングの隣接ノードは、隣接ノードの間の非占有識別子の
範囲に関する責任の分割に合意することができる。識別子は、任意の個数の理由から非占
有とすることができる。例えば、識別子は、その識別子が未割り当て（すなわち、ノード
に割り当てられていない識別子）なので非占有である場合がある。割り当てられた識別子
（すなわち、ノードに割り当てられている識別子）について、識別子は、対応するノード
が故意にシャットダウンされたので、あるいは、ノードが、例えば、通信障害またはノー
ド障害に起因してなどの理由で他の形で到達不能なので、非占有である場合がある。
【０２９０】
ノードの間のルーティング合意は、隣接ノードの責任になるべき非占有識別子のいずれ
かに関するメッセージを受け入れ、その非占有識別子に関するメッセージを送達すること
をノードが許可される前に、確立し、キャッシングすることができる。キャッシングされ
たルーティング合意への参照は、そうでなければどのノードが特定の非占有識別子の責任
を負うかを判定するために発生する可能性がある（潜在的に）隣接するノードの間のすべ
ての通信を大幅に減らす。
【０２９１】
キャッシングされたルーティング合意は、構成可能なルールに従ってまたは固定された
方法論に従って、任意の形で非占有識別子の範囲を分割することができる。いくつかの実
施形態で、あるリング上の隣接ノードの間の識別子の範囲は、本質的に半分に分割される
。これは、非占有識別子が、その非占有識別子の責任を負うノードからより遠くなる尤度
を下げる。
【０２９２】
隣接ノードの間に偶数個の非占有識別子があるときには、隣接ノードの間の中点は、非
占有識別子の間にある。したがって、非占有識別子の責任を、隣接ノードの中点で分割す
ることができる。したがって、各隣接ノードに、等しい個数の非占有識別子の責任を割り
当てることができる。
【０２９３】
その一方で、隣接ノードの間に奇数個の非占有識別子があるときには、隣接ノードの間
の中点は、非占有識別子にある。したがって、非占有識別子の責任を、中点である非占有
識別子のいずれかの側で分割することができる。したがって、一方の隣接ノードに、他方
の隣接ノードより１つ多い非占有識別子の責任を割り当てることができる。
【０２９４】
例えば、ここで図２２Ａを参照すると、図２２Ａは、ノード間のキャッシングされた２
ウェイ合意によるメッセージのルーティングを容易にする一例のリングアーキテクチャ２
２００を示す。図示されているように、ノード２２０１、２２０２、２２０３、２２６１
、２２６２、および２２６３を含む（これらに限定はされない）様々なノード（リング２
２５０上の正方形として図示）が、リング２２５０に含まれる。各ノードは、リング２２
５０上でのその位置を示す、対応するＩＤ（括弧内に図示）を有する。例えば、ノード２
２０１はＩＤ＝６４を有し、ノード２２０２はＩＤ＝３０を有する。
【０２９５】
図示されたノードの間に、非占有識別子の複数の範囲がある。例えば、非占有識別子範
囲２２１１は、ノード２２０２と２２０１との間の非占有識別子３１から６３までを表す
。
【０２９６】
図示されているように、ノード２２０１および２２０２は、２ウェイ合意２２２３を確
立し、キャッシングしている。例えば、以前の通信を介して、ノード２２０１および２２
０２は、ＩＤ＝６４とＩＤ＝３０との間に現在散在する他のノードがないと判定すること
ができる。したがって、ノード２２０１および２２０２は、さらに、これらがリング２２
５０上で互いに隣接すると判定することができる。したがって、ノード２２０１および２
２０２は、ノード２２０２が非占有識別子範囲２２１１のある部分の責任を負い、ノード
２２０１が非占有識別子範囲２２１１の残りの部分の責任を負うように、非占有識別子範
囲２２１１（すなわち、非占有識別子３１から６３まで）の責任を分割することができる
。各ノードは、それに割り当てられたＩＤの責任をも負う。すなわち、ノード２２０２は
、ＩＤ＝３０の責任を負い、ノード２２０１は、ＩＤ＝６４の責任を負う。
【０２９７】
したがって、責任境界２２１３（非占有識別子４７と非占有識別子４８との間）によっ
て示されているように、ノード２２０２（ＩＤ＝３０）は、それ自体ならびに非占有識別
子３１から４７までの責任を負い、ノード２２０１（ＩＤ＝６４）は、それ自体ならびに
非占有識別子４８から６３までの責任を負う。ノード２２０１と２２０２との間の中点は
、非占有識別子４７であるが、ノード２２０２は、各非占有識別子が単一ノードの責任に
なるように、非占有識別子４７の責任を割り当てられる。したがって、前述のように、責
任境界が非占有識別子に位置するときには、隣接ノードのうちの１つに、その非占有識別
子の単独の責任を割り当てることができる。
【０２９８】
図２４に、キャッシングされた２ウェイ合意に従ってメッセージをルーティングする方
法２４００の一例の流れ図を示す。方法２４００を、図２２Ａのリングアーキテクチャ２
２００に示されたノードおよびメッセージに関して説明する。
【０２９９】
方法２４００は、受信ノードがノードのリング上の宛先を示す宛先識別子と一緒にメッ
セージを受信する行為（宛先識別子は、受信ノードと直接近傍ノードのうちの１つとの間
に位置する）（行為２４０１）を含む。例えば、ノード２２０１が、ＩＤ＝５５への送達
について示されたメッセージ２２５１を受信することができる。その代わりに、ノード２
２０１が、ＩＤ＝３９への送達について示されたメッセージ２２５２を受信することがで
きる。メッセージ２２５１および２２５２は、リング２２５０内の別のノードから（イン
トラリング通信）、リングアーキテクチャ２２００の別のリング内のノードから（インタ
ーリング通信）、または非リング通信を介して受信することができる。
【０３００】
方法２４００は、受信ノードが、メッセージを受信すべき次の適当なノードを判定する
ために受信ノードと直接近傍ノードとの間のキャッシングされた２ウェイ合意を参照する
行為（行為２４０２）を含む。２ウェイ合意は、少なくとも、受信ノードと直接近傍ノー
ドとの間の識別子空間の責任の分割を暗示する。例えば、ノード２２０１が、キャッシン
グされた２ウェイ合意２２２３を参照して、メッセージ２２５１を処理すべき次の適当な
ノードを判定することができる。キャッシングされた２ウェイ合意２２２３は、ノード２
２０１（ＩＤ＝６４）が非占有識別子５５の責任を負うことを示すので、ノード２２０１
は、それがメッセージ２２５１を処理すべき適当なノードであると判定する。同様に、ノ
ード２２０１は、キャッシングされた２ウェイ合意２２２３を参照して、メッセージ２２
５２を処理すべき次の適当なノードを判定することができる。キャッシングされた２ウェ
イ合意２２２３は、ノード２２０２（ＩＤ＝３０）が非占有識別子３９の責任を負うこと
を示すので、ノード２２０１は、ノード２２０２が、メッセージ２２５２を処理すべき次
の適当なノードであると判定する。
【０３０１】
方法２４００は、次の適当なノードの判定に基づいて、次の適当なコンポーネントにメ
ッセージを送信する行為（行為２４０３）を含む。例えば、ノード２２０１は、キャッシ
ングされた２ウェイ合意２２２３が、ノード２２０１が非占有識別子５５の責任を負うこ
とを示すので、非占有識別子５５に対応するそのリソースハンドラインスタンスにメッセ
ージ２２５１を供給することができる。その代わりに、ノード２２０１は、キャッシング
された２ウェイ合意２２２３が、ノード２２０２が非占有識別子３９の責任を負うことを
示すので、ノード２２０２にメッセージ２２５２を供給することができる。その後、ノー
ド２２０２は、非占有識別子３９に対応するそのリソースハンドラインスタンスにメッセ
ージ２２５２を供給することができる。
【０３０２】
識別子が、キャッシングされた２ウェイ合意に含まれないときには、ノードは、宛先に
向かう進行を行うためにルーティングテーブル（例えば、図３に示された）を参照するこ
とができる。例えば、ノード２２０１は、ＩＤ＝２０３への送達について示されたメッセ
ージ２２５３を、ノード２２６１（ＩＤ＝２００）に送信することができる。次に、ノー
ド２２６１は、その隣接ノードに関するすべてのキャッシングされた２ウェイ合意を参照
して、識別子２０３の責任を負うノードを判定することができる。
【０３０３】
いくつかの実施形態で、複数の２ウェイ合意が、所与のノードの展望から、所与のノー
ドと、その所与のノードの直接先行ノードと、その所与のノードの直接後続ノードとの間
の３ウェイ合意を本質的に表すことができる。図２２Ｂに、複数のキャッシングされた２
ウェイ合意によるメッセージのルーティングを容易にする例のリングアーキテクチャ２２
００を示す。
【０３０４】
前述のように、ノード２２０１および２２０２は、キャッシングされた２ウェイ合意２
２２３を確立することができる。同様に、ノード２２０１および２２０３は、非占有識別
子範囲２２１２（すなわち、非占有識別子６５から１０１まで）の責任を分割するために
キャッシングされた２ウェイ合意２２２４を確立することができる。したがって、以前の
通信を介して、ノード２２０１および２２０３は、ＩＤ＝６５とＩＤ＝１０１との間に現
在散在する他のノードがないと判定することができる。したがって、ノード２２０１およ
び２２０３は、さらに、リング２２５０上でお互いに隣接すると判定することができる。
したがって、ノード２２０１および２２０３は、ノード２２０３が非占有識別子範囲２２
１２の一部の責任を負い、ノード２２０１が非占有識別子範囲２２１２の残りの部分の責
任を負うように非占有識別子範囲２２１２を分割することができる。したがって、２ウェ
イ合意２２２４内に示されているように、ノード２２０１（ＩＤ＝６４）は、それ自体な
らびに非占有識別子６５から８２までの責任を負い、ノード２２０３（ＩＤ＝１０１）は
、それ自体ならびに非占有識別子８３から１００までの責任を負う。
【０３０５】
ノード２２０１の展望から、キャッシングされた２ウェイ合意２２２３とキャッシング
された２ウェイ合意２２２４との組合せは、本質的に３ウェイ合意２２７３を表す。すな
わち、ノード２２０１は、ノード２２０１とノード２２０２との間の識別子空間の一部の
責任を負い、ノード２２０１とノード２２０３との間の識別子空間の一部の責任を負う。
識別子の括弧で括られた範囲は、ノード２２０１のいずれかの側でのキャッシングされた
２ウェイ合意２２２３および２２２４からの責任の範囲（すなわち、４７から６４までお
よび６４から８２まで）を示す。
【０３０６】
図２５に、複数のキャッシングされた２ウェイ合意に従ってメッセージをルーティング
する方法２５００の一例の流れ図を示す。方法２５００を、図２５Ｂのリングアーキテク
チャ２２００に示されたノードおよびメッセージに関して説明する。
【０３０７】
方法２５００は、受信ノードがノードのリング上の宛先を示す宛先識別子と一緒にメッ
セージを受信する行為（行為２５０１）を含む。例えば、ノード２２０１は、それぞれＩ
Ｄ＝５５、ＩＤ＝３９、ＩＤ＝２０３、ＩＤ＝７４、およびＩＤ＝９４への送達について
示されたメッセージ２２５１、２２５２、２２５３、２２５４、および２２５６のいずれ
をも受信することができる。メッセージ２２５１、２２５２、２２５３、２２５４、およ
び２２５６は、リング２２５０内の別のノードから（イントラリング(intra-ring)通信）
、リングアーキテクチャ２２００内の別のリング内のノードから（インターリング(inter
-ring)通信）、または非リング通信を介して受信することができる。
【０３０８】
方法２５００は、受信ノードが、メッセージを受信すべき次の適当なノードを判定する
ために先行ノードとの第１のキャッシングされた２ウェイ合意および後続ノードとの第２
のキャッシングされた２ウェイ合意を参照する行為（行為２５０２）を含む。第１および
第２のキャッシングされた２ウェイ合意は、少なくとも、先行ノードと後続ノードとの間
の識別子空間に関する責任の分割を暗示する。例えば、ノード２２０１は、メッセージ２
２５１、２２５２、２２５３、２２５４、および２２５６のいずれかを受信すべき次の適
当なノードを判定するために、キャッシングされた３ウェイ合意２２２３および２２２４
を参照することができる。
【０３０９】
キャッシングされた２ウェイ合意２２２３は、ノード２２０２（ＩＤ＝３０）が非占有
識別子３９の責任を負うことを示すので、ノード２２０１は、ノード２２０２がメッセー
ジ２２５２を処理すべき次の適当なノードであると判定する。キャッシングされた２ウェ
イ合意２２２３は、ノード２２０１（ＩＤ＝６４）が非占有識別子５５の責任を負うこと
を示すので、ノード２２０１は、それがメッセージ２２５１を処理すべき次の適当なノー
ドであると判定する。キャッシングされた２ウェイ合意２２２４は、ノード２２０１（Ｉ
Ｄ＝６４）が非占有識別子７４の責任を負うことを示すので、ノード２２０１は、それが
メッセージ２２５４を処理すべき次の適当なノードであると判定する。キャッシングされ
た２ウェイ合意２２２４は、ノード２２０３（ＩＤ＝１０１）が非占有識別子９４の責任
を負うことを示すので、ノード２２０１は、ノード２２０３がメッセージ２２５６を処理
すべき次の適当なノードであると判定する。
【０３１０】
方法２５００は、次の適当なノードの判定に基づいて、次の適当なコンポーネントにメ
ッセージを送信する行為（行為２５０３）を含む。例えば、ノード２２０１は、メッセー
ジ２２５１、２２５２、２２５３、２２５４、および２２５６を処理すべき次の適当なノ
ードの判定に基づいて、リング２２５０上の次の適当なコンポーネントにメッセージ２２
５１、２２５２、２２５３、２２５４、および２２５６を送信することができる。
【０３１１】
例えば、ノード２２０１は、キャッシングされた２ウェイ合意２２２３が、ノード２２
０２が非占有識別子３９の責任を負うことを示すので、メッセージ２２５２をノード２２
０２に供給することができる。その後、ノード２２０２は、非占有識別子３９に対応する
そのリソースハンドラインスタンスにメッセージ２２５２を供給することができる。ノー
ド２２０１は、キャッシングされた２ウェイ合意２２２３が、ノード２２０１が非占有識
別子５５の責任を負うことを示すので、非占有識別子５５に対応するそのリソースハンド
ラインスタンスにメッセージ２２５１を供給することができる。ノード２２０１は、キャ
ッシングされた２ウェイ合意２２２４が、ノード２２０１が非占有識別子７４の責任を負
うことを示すので、非占有識別子７４に対応するそのリソースハンドラインスタンスにメ
ッセージ２２５４を供給することができる。ノード２２０１は、キャッシングされた２ウ
ェイ合意２２２４が、ノード２２０３が非占有識別子９４の責任を負うことを示すので、
メッセージ２２５６をノード２２０３に供給することができる。その後、ノード２２０３
は、非占有識別子９４に対応するそのリソースハンドラインスタンスにメッセージ２２５
６を供給することができる。
【０３１２】
識別子が、複数のキャッシングされた２ウェイ合意のキャッシングされたいずれにも含
まれないときには、ノードは、宛先に向かう進行を行うためにルーティングテーブル（例
えば、図３に示された）を参照することができる。例えば、ノード２２０１は、ＩＤ＝２
０３への送達について示されたメッセージ２２５３を、ノード２２６１（ＩＤ＝２００）
に送信することができる。次に、ノード２２６１は、その先行ノードおよび／または後続
ノードに関するすべてのキャッシングされた２ウェイ合意を参照して、メッセージ２２５
３を受信すべき次の適当なコンポーネントを判定することができる。
【０３１３】
（キャッシングされた合意の定式化）
リングを、時々、例えば、新しいノードがリングに参加するときまたは既存ノードがリ
ングから離脱するときに（例えば、正常な除去を介して、ノード監視の結果として、アー
ビトレータへの参照を介してなど）、再構成することができる。ノードが、リングの構成
が変化したことを検出するときに、そのノードは、隣接ノードとのキャッシングされたル
ーティング合意を再定式化することができる。合意再定式化中に、ノードは、合意を再定
式化するためのメッセージを除いて、すべての受信されたメッセージをキューイングする
ことができる。合意の定式化が完了した後に、ノードは、その合意に従ってメッセージを
処理することができる。
【０３１４】
リングの再構成は、複数のルーティング合意を再定式化させる可能性がある。例えば、
ノードがリングを離脱するときに、離脱するノードの両側の直接に隣接するノードは、以
前には離脱するノードの責任であった非占有識別子の範囲の合意を形成することができる
（したがって、潜在的に追加の非占有識別子の責任を得る）。この再定式化は、離脱する
ノードからの非占有識別子の範囲の一部の責任を、各直接に隣接するノードの非占有識別
子の範囲に結合する。すなわち、各直接に隣接するノードは、離脱するノードの非占有識
別子の範囲および離脱するノードの識別子の一部の責任を得る。
【０３１５】
図２３Ａから２３Ｄに、キャッシングされた２ウェイ合意を定式化するのを容易にする
例のリングアーキテクチャ２３００を示す。図２３Ａに示されているように、ノード２３
０１および２３０２は、責任境界２３１３（非占有識別子４７と非占有識別子４８との間
）で非占有識別子範囲２３１２（すなわち、非占有識別子３１から６３まで）の責任を分
割するキャッシングされた２ウェイ合意２３２３を定式化している。同様に、ノード２３
０２および２３６２は、責任境界２３３３（非占有識別子１４と１５との間）で非占有識
別子範囲２３１１（すなわち、非占有識別子２５５から２９まで）の責任を分割するキャ
ッシングされた２ウェイ合意２３４３を定式化している。
【０３１６】
キャッシングされた２ウェイ合意２３２３および２３４３の定式化の後のあるときに、
ノード２３０２は、リング２３５０を去ることができる（例えば、正常な除去を介して、
ノード監視の結果として、アービトレータからの命令に基づいてなど）。ここで図２３Ｂ
を参照すると、ノード２３０２がリング２３５０を去った後に、以前にノード２３０２の
責任であった非占有識別子の責任を負うノードはない。非占有識別子範囲２３１３（現在
は非占有の識別子３０を含む、非占有識別子１５から４７まで）は、ノード２３０２がリ
ング２３５０を去る前に責任を負っていた非占有識別子の範囲を表す。
【０３１７】
ノード２３０２がリング２３５０を去ることに応答して、ノード２３０１および２３６
２は、新しい直接近傍ノードを識別することを試みる。ノード２３６２は、新しい直接後
続ノード（すなわち、ノード２３６２に対して相対的にノード２３０２と同一の方向での
直接近傍ノード）を識別することを試みる。ノード２３０１は、新しい直接先行ノード（
すなわち、ノード２３０１に対して相対的にノード２３０２と同一の方向での直接近傍ノ
ード）を識別することを試みる。図２３Ｂでは、ノード２３６２は、その新しい直接後続
物としてノード２３０１を識別し、ノード２３０１は、その新しい直接先行物としてノー
ド２３６２を識別する。
【０３１８】
新しい直接近傍ノードを識別したときに、ノード２３６２および２３０１は、非占有識
別子範囲２３１４（現在は非占有の識別子３０を含む、非占有識別子２５５から６３まで
）の責任を分割するキャッシングされた２ウェイ合意２３６３を定式化する。非占有識別
子範囲２３１４は、非占有識別子範囲２３１３を含み、この非占有識別子範囲２３１３は
、以前にはノード２３０２の責任であった。したがって、非占有識別子範囲２３１３の一
部を、ノード２３０２がリング２３５０から離脱した後に、ノード２３６２またはノード
２３０１のいずれかの責任にすることができる。
【０３１９】
したがって、責任境界２３５３（非占有識別子３１と非占有識別子３２との間）によっ
て示されるように、ノード２３６２（ＩＤ＝２５４）およびノード２３０１（ＩＤ＝３０
）は、キャッシングされた２ウェイ合意２３６３を定式化する。キャッシングされた２ウ
ェイ合意２３６３に従って、ノード２３６２（ＩＤ＝２５４）は、それ自体ならびに非占
有識別子２５５から３１までの責任を負い、ノード２３０１（ＩＤ＝６４）は、それ自体
ならびに識別子範囲３２から６３までの責任を負う。ノード２３０１と２３６２との間の
中点は、非占有識別子３１であるが、ノード２３６２は、各非占有識別子が単一のノード
の責任になるように、非占有識別子３１の責任を割り当てられる。
【０３２０】
ノード２３０２の離脱とキャッシングされた２ウェイ合意２３６３の定式化との間の時
間中に、ノード２３０１および２３６２は、２５５と６３との間の範囲内の識別子への送
達について示されたメッセージを処理しない。そうではなく、ノード２３０１および２３
６２は、キャッシングされた２ウェイ合意２３６３の定式化に関するメッセージを除いて
、すべてのメッセージをキューイングする。キャッシングされた２ウェイ合意２３６３の
定式化が完了した後に、ノード２３０１および２３６２は、キャッシングされた２ウェイ
合意２３６３に従ってそれらのメッセージを処理することができる。
【０３２１】
新しいノードが２つの既存ノードの間でリングに参加するときには、各既存ノードは、
新しいノードとのルーティング合意を定式化することができる（したがって、潜在的に、
非占有識別子の一部の責任を放棄する）。この定式化は、本質的に、既存ノードが責任を
負う非占有識別子の範囲を、参加するノードと既存ノードとの間で分割することができる
。すなわち、各既存ノードは、潜在的に、参加するノードに、既存ノードの非占有識別子
の一部の責任を与える。
【０３２２】
ここで図２３Ｃを参照すると、キャッシングされた２ウェイ合意２３６３の定式化の後
のあるときに、ノード２３０４（ＩＤ＝４４）が、リング２３５０に参加することができ
る。ノード２３０４がリング２３５０に参加した後に、ノード２３６２は、その直接後続
物としてノード２３０４を検出することができる。同様に、ノード２３０１は、その直接
先行物としてノード２３０４を検出することができる。検出のそれぞれに応答して、非占
有識別子範囲２３１４が、本質的に、非占有識別子範囲２３１５（非占有識別子２５５か
ら４３まで）および非占有識別子範囲２３１６（非占有識別子４５から６３まで）に分割
される。その後、新しいキャッシングされた２ウェイ合意を定式化して、非占有識別子範
囲２３１５および２３１６の責任を分割することができる。
【０３２３】
ここで図２３Ｄを参照すると、新しい直接後続ノードとしてノード２３０４を識別した
後に、ノード２３６２およびノード２３０４は、非占有識別子範囲２３１５（非占有識別
子２５５から４３まで）の責任を分割するキャッシングされた２ウェイ合意２３９４を定
式化する。非占有識別子範囲２３１５は、非占有識別子範囲２３１４の一部を含み、非占
有識別子範囲２３１４は、以前にはノード２３６２の責任であったが、このケースでは、
非占有識別子範囲２３１４の一部が、ノード２３０１の責任であった。したがって、非占
有識別子範囲２３１４のうちでノード２３６２またはノード２３０１のいずれかの責任で
あった部分を、ノード２３０４がリング２３５０に参加するときにノード２３０４の責任
にすることができる。
【０３２４】
したがって、責任境界２３９３（非占有識別子２３と非占有識別子２４との間）によっ
て示されるように、ノード２３６２（ＩＤ＝２５４）およびノード２３０４（ＩＤ＝４４
）は、キャッシングされた２ウェイ合意２３９４を定式化する。キャッシングされた２ウ
ェイ合意２３９４に従って、ノード２３６２（ＩＤ＝２５４）は、それ自体ならびに非占
有識別子２５５から２３までの責任を負い、ノード２３０４（ＩＤ＝４４）は、それ自体
ならびに非占有識別子２４から４３までの責任を負う。ノード２３０４と２３６２との間
の中点は、非占有識別子２３であるが、ノード２３６２は、各非占有識別子が単一のノー
ドの責任になるように、非占有識別子２３の責任を割り当てられる。
【０３２５】
同様に、新しい直接先行ノードとしてノード２３０４を識別したときに、ノード２３０
１および２３０４は、非占有識別子範囲２３１６（非占有識別子４５から６４まで）の責
任を分割するキャッシングされた２ウェイ合意２３８３を定式化する。非占有識別子範囲
２３１６は、以前にはノード２３０１の責任であった非占有識別子範囲２３１４の一部を
含む。したがって、非占有識別子範囲２３１４のうちでノード２３０１の責任であった部
分を、ノード２３０４がリング２３５０に参加するときにノード２３０４の責任にするこ
とができる。
【０３２６】
したがって、責任境界２３７３（非占有識別子５４と非占有識別子５５との間）によっ
て示されるように、ノード２３０４（ＩＤ＝４４）およびノード２３０１（ＩＤ＝６４）
は、キャッシングされた２ウェイ合意２３８３を定式化する。キャッシングされた２ウェ
イ合意２３８３に従って、ノード２３０４（ＩＤ＝４４）は、それ自体ならびに非占有識
別子４５から５４までの責任を負い、ノード２３０１（ＩＤ＝６４）は、それ自体ならび
に識別子範囲５５から６３までの責任を負う。ノード２３０１と２３０４との間の中点は
、非占有識別子５４であるが、ノード２３０４は、各非占有識別子が単一のノードの責任
になるように、非占有識別子５４の責任を割り当てられる。
【０３２７】
ノード２３０４の参加とキャッシングされた２ウェイ合意２３９４の定式化との間の時
間中に、ノード２３６２および２３０４は、２５５と４３との間の範囲内の識別子への送
達について示されたメッセージを処理しない。そうではなく、ノード２３６２および２３
０４は、キャッシングされた２ウェイ合意２３９４の定式化に関するメッセージを除くす
べてのメッセージをキューイングする。キャッシングされた２ウェイ合意２３９４の定式
化が完了した後に、ノード２３６２および２３０４は、キャッシングされた２ウェイ合意
２３９４に従ってこれらのメッセージを処理することができる。
【０３２８】
同様に、ノード２３０４の参加とキャッシングされた２ウェイ合意２３８３の定式化と
の間の時間中に、ノード２３０４および２３０１は、４５と６３との間の範囲内の識別子
への送達について示されたメッセージを処理しない。そうではなく、ノード２３０４およ
び２３０１は、キャッシングされた２ウェイ合意２３８３の定式化に関するメッセージを
除くすべてのメッセージをキューイングする。キャッシングされた２ウェイ合意２３８３
の定式化が完了した後に、ノード２３０４および２３０１は、キャッシングされた２ウェ
イ合意２３８３に従ってこれらのメッセージを処理することができる。
【０３２９】
ノード２３０４の展望から、キャッシングされた２ウェイ合意２３９４とキャッシング
された２ウェイ合意２３８３との組合せは、本質的に、ノード２３０４とノード２３６２
と２３０１との間の対応する３ウェイ合意（図示せず）を表すことができる。ノード２３
０４の展望から、対応する表される３ウェイ合意は、ＩＤ＝２５４を含み、これからＩＤ
＝６４まででこれを含む（割当済みおよび非占有）識別子の責任を定義する。
【０３３０】
図２６に、２ウェイ合意に参加する方法２６００の一例の流れ図を示す。方法２６００
を、図２３Ａから２３Ｄまでのノードおよび合意に関して述べる。
【０３３１】
方法２６００は、現行ノードが、ノードのリングの構成が変化したことの表示にアクセ
スする行為（この表示は、少なくとも現行ノードと直接近傍ノードとの間のそのリング上
の非占有識別子に関する責任を分割する２ウェイ合意を定式化する必要を示す）（行為２
６０１）を含む。例えば、図２３Ａおよび２３Ｂを参照すると、ノード２３０１および／
またはノード２３６２は、例えば、ノード２３０２から、ノード２３０２の監視を介して
、またはアービトレータから、ノード２３０２がリング２３５０から離脱したことの表示
にアクセスすることができる。ノード２３０２がリング２３５０から離脱することの表示
は、ノード２３０１および／またはノード２３６２に、非占有識別子範囲２３１４（非占
有識別子２５５から６３まで）の責任を分割する２ウェイ合意を定式化する必要を示す。
【０３３２】
その代わりに、図２３Ｃおよび２３Ｄを参照すると、ノード２３０１は、ノード２３０
４がリング２３５０に参加することの表示（例えば、ノード２３０４の参加プロセスの一
部として送信される）にアクセスすることができる。ノード２３０４がリング２３５０に
参加することの表示は、ノード２３０１に、非占有識別子範囲２３１６（非占有識別子４
５から６３まで）の責任を分割する２ウェイ合意を定式化する必要を示す。同様に、ノー
ド２３６２は、ノード２３０４がリング２３５０に参加したことの表示（例えば、ノード
２３０４の参加プロセスの一部として送信される）にアクセスすることができる。ノード
２３０４がリング２３５０に参加することの表示は、ノード２３６２に、非占有識別子範
囲２３１５（非占有識別子２５５から４３まで）の責任を分割する２ウェイ合意を定式化
する必要を示す。
【０３３３】
方法２６００は、現行ノードおよび直接近傍ノードが、現行ノードと直接近傍ノードと
の間の責任境界に合意するすなわち、現行ノードと直接近傍ノードとの間の非占有識別子
の責任を分割する行為（行為２６０２）を含む。現行ノードと責任境界との間の非占有識
別子は、現行ノードの責任であり、責任境界と直接近傍ノードとの間の非占有識別子は、
直接近傍ノードの責任である。
【０３３４】
例えば、図２３Ｂを参照すると、ノード２３０１およびノード２３６２は、責任境界２
３５３に合意することができ、責任境界２３５３は、本質的に非占有識別子３１と３２と
の間にある。したがって、ノード２３０１と責任境界２３５３との間の非占有識別子（す
なわち、非占有識別子３２から６３まで）は、ノード２３０１の責任である。同様に、責
任境界２３５３とノード２３６２との間の非占有識別子（すなわち、非占有識別子２５５
から３１まで）は、ノード２３６２の責任である。
【０３３５】
図２３Ｄを参照すると、ノード２３０１およびノード２３０４は、責任境界２３７３に
合意することができ、責任境界２３７３は、本質的に非占有識別子５４と５５との間にあ
る。したがって、ノード２３０１と責任境界２３７３との間の非占有識別子（すなわち、
識別子５５から６３まで）は、ノード２３０１の責任である。同様に、責任境界２３７３
とノード２３０４との間の非占有識別子（すなわち、非占有識別子４５から５４まで）は
、ノード２３０４の責任である。
【０３３６】
引き続き図２３Ｄを参照すると、ノード２３０４およびノード２３６２は、責任境界２
３９３に合意することができ、責任境界２３９３は、本質的に非占有識別子２３と２４と
の間にある。したがって、ノード２３０４と責任境界２３９３との間の識別子（すなわち
、非占有識別子２４から４３まで）は、ノード２３０４の責任である。同様に、責任境界
２３９３とノード２３６２との間の非占有識別子（すなわち、非占有識別子２５５から２
３まで）は、ノード２３６２の責任である。
【０３３７】
図６および次の議論は、本発明を実施できる適切なオペレーティング環境の短い全般的
な説明を提供することを意図されたものである。必要ではないが、本発明を、プログラム
モジュールなど、コンピュータシステムによって実行されるコンピュータ実行可能命令の
全般的な文脈で説明する。一般に、プログラムモジュールは、特定のタスクを実行するか
特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、
データ構造、および類似物を含む。コンピュータ実行可能命令、関連するデータ構造、お
よびプログラムモジュールは、本明細書で開示される方法の行為を実行するプログラムコ
ード手段の一例を提示する。
【０３３８】
図６を参照すると、本発明を実施する一例のシステムは、処理ユニット６２１、システ
ムメモリ６２２、およびシステムメモリ６２２を含む様々なシステムコンポーネントを処
理ユニット６２１に結合するシステムバス６２３を含むコンピュータシステム６２０の形
の汎用コンピューティングデバイスを含む。処理ユニット６２１は、本発明の特徴を含む
、コンピュータシステム６２０の特徴を実施するように設計されたコンピュータ実行可能
命令を実行することができる。システムバス６２３は、メモリバスもしくはメモリコント
ローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバス
を含む複数のタイプのバス構造のいずれにもすることができる。システムメモリは、読み
取り専用メモリ（「ＲＯＭ」）６２４およびランダムアクセスメモリ（「ＲＡＭ」）６２
５を含む。スタートアップ中などにコンピュータシステム６２０内の要素の間で情報を転
送するのを助ける基本ルーチンを含む基本入出力システム（「ＢＩＯＳ」）６２６を、Ｒ
ＯＭ６２４に格納することができる。
【０３３９】
コンピュータシステム６２０には、磁気ハードディスク６３９から読み取り、これに書
き込む磁気ハードディスクドライブ６２７、リムーバブル磁気ディスク６２９から読み取
り、またはこれに書き込む磁気ディスクドライブ６２８、例えば、ＣＤ−ＲＯＭまたは他
の光学媒体などのリムーバブル光学ディスク６３１から読み取り、またはこれに書き込む
光ディスクドライブ６３０をも含めることができる。磁気ハードディスクドライブ６２７
、磁気ディスクドライブ６２８、および光ディスクドライブ６３０は、それぞれハードデ
ィスクドライブインターフェース６３２、磁気ディスクドライブインターフェース６３３
、および光ドライブインターフェース６３４によってシステムバス６２３に接続される。
ドライブおよびそれらに関連するコンピュータ可読媒体は、コンピュータシステム６２０
のコンピュータ実行可能命令、データ構造、プログラムモジュール、および他のデータの
不揮発性ストレージをもたらす。本明細書で説明する例の環境は、磁気ハードディスク６
３９、リムーバブル磁気ディスク６２９、およびリムーバブル光学ディスク６３１を使用
するが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイ
カートリッジ、ＲＡＭ、ＲＯＭ、および類似物を含む、データを格納するための他のタイ
プのコンピュータ可読媒体を使用することができる。
【０３４０】
オペレーティングシステム６３５、１つまたは複数のアプリケーションプログラム６３
６、他のプログラムモジュール６３７、およびプログラムデータ６３８を含む１つまたは
複数のプログラムモジュールを含むプログラムコード手段を、ハードディスク６３９、磁
気ディスク６２９、光学ディスク６３１、ＲＯＭ６２４、またはＲＡＭ６２５に格納する
ことができる。ユーザは、キーボード６４０、ポインティングデバイス６４２、または例
えばマイクロホン、ジョイスティック、ゲームパッド、スキャナ、もしくは類似物などの
他の入力デバイス（図示せず）を介してコンピュータシステム６２０にコマンドおよび情
報を入力することができる。上記および他の入力デバイスを、システムバス６２３に結合
された入出力インターフェース６４６を介して処理ユニット６２１に接続することができ
る。入出力インターフェース６４６は、例えば、シリアルポートインターフェース、ＰＳ
／２インターフェース、パラレルポートインターフェース、Ｕｎｉｖｅｒｓａｌ Ｓｅｒ
ｉａｌ Ｂｕｓ（「ＵＳＢ」）インターフェース、または電気電子技術者協会（「ＩＥＥ
Ｅ」）１３９４インターフェース（すなわち、ＦｉｒｅＷｉｒｅインターフェース）など
の様々な異なるインターフェースのいずれかを論理的に表し、あるいは、異なるインター
フェースの組合せを論理的に表すことすらできる。
【０３４１】
モニタ６４７または他のディスプレイデバイスも、ビデオインターフェース６４８を介
してシステムバス６２３に接続される。スピーカ６６９または他のオーディオ出力デバイ
スも、オーディオインターフェース６４９を介してシステムバス６２３に接続される。例
えば、プリンタなどの他の周辺出力デバイス（図示せず）をコンピュータシステム６２０
に接続することもできる。
【０３４２】
コンピュータシステム６２０は、例えば、オフィス全体または企業全体のコンピュータ
ネットワーク、ホームネットワーク、イントラネット、および／またはインターネットな
どのネットワークに接続可能である。コンピュータシステム６２０は、そのようなネット
ワークを介して、例えば、リモートコンピュータシステム、リモートアプリケーション、
および／またはリモートデータベースなどの外部リソースとデータを交換することができ
る。
【０３４３】
コンピュータシステム６２０は、ネットワークインターフェース６５３を含み、このネ
ットワークインターフェース６５３を介して、コンピュータシステム６２０は、外部ソー
スからデータを受信し、かつ／または外部ソースにデータを送信する。図６に示されてい
るように、ネットワークインターフェース６５３は、リンク６５１を介するリモートコン
ピュータシステム６８３とのデータの交換を容易にする。ネットワークインターフェース
６５３は、例えば、ネットワークインターフェースカードおよび対応するネットワークド
ライバインターフェース仕様（「ＮＤＩＳ」）スタックなど、１つまたは複数のソフトウ
ェアおよび／またはハードウェアモジュールを論理的に表すことができる。リンク６５１
は、ネットワークの一部（例えば、イーサネット（登録商標）セグメント）を表し、リモ
ートコンピュータシステム６８３は、ネットワークのノードを表す。
【０３４４】
同様に、コンピュータシステム６２０は、入出力インターフェース６４６を含み、この
入出力インターフェース６４６を介して、コンピュータシステム６２０は、外部ソースか
らデータを受け取り、かつ／または外部ソースにデータを送る。入出力インターフェース
６４６は、リンク６５９を介してモデム６５４（例えば、標準モデム、ケーブルモデム、
またはデジタル加入者回線（「ＤＳＬ」）モデム）に結合され、このモデム６５４を介し
て、コンピュータシステム６２０は、外部ソースからデータを受信し、および／または外
部ソースにデータを送信する。図６に示されているように、入出力インターフェース６４
６およびモデム６５４は、リンク６５２を介するリモートコンピュータシステム６９３と
のデータの交換を容易にする。リンク６５２は、ネットワークの一部を表し、リモートコ
ンピュータシステム６９３は、ネットワークのノードを表す。
【０３４５】
図６は、本発明に適切なオペレーティング環境を表すが、本発明の原理は、必要な場合
に適切な変更を伴って本発明の原理を実施できるすべてのシステムで使用することができ
る。図６に示された環境は、例示的にすぎず、決して、本発明の原理を実施できる様々な
環境の小さい部分すら表さない。
【０３４６】
本発明によれば、ノード、アプリケーションレイヤ、および他の下位レイヤ、ならびに
ルーティングテーブルおよびノードＩＤを含む関連するデータを、コンピュータシステム
６２０に関連するコンピュータ可読媒体のいずれにも格納し、それからアクセスすること
ができる。例えば、そのようなモジュールの諸部分および関連するプログラムデータの諸
部分を、システムメモリ６２２での格納のために、オペレーティングシステム６３５、ア
プリケーションプログラム６３６、プログラムモジュール６３７、および／またはプログ
ラムデータ６３８に含めることができる。
【０３４７】
例えば磁気ハードディスク６３９などの大容量記憶デバイスが、コンピュータシステム
６２０に結合されるときに、そのようなモジュールおよび関連するプログラムデータを、
その大容量記憶デバイスに格納することもできる。ネットワーク化された環境では、コン
ピュータシステム６２０に関係して図示されたプログラムモジュールまたはその諸部分を
、リモートコンピュータシステム６８３および／またはリモートコンピュータシステム６
９３に関連するシステムメモリおよび／または大容量記憶デバイスなどのリモートメモリ
ストレージデバイスに格納することができる。そのようなモジュールの実行を、前述のよ
うに分散環境内で実行することができる。
【０３４８】
（ノードのリングの参加および離脱）
図２７に、本発明の原理を使用できるリングアーキテクチャ２７００を示す。リングア
ーキテクチャ２７００は、ノードのリング２７０５を含む。いくつかの実施形態で、ノー
ドのリング２７０５は、上記図２３Ｃのリング２３５０に類似するかこれと同一とするこ
とができる。ノードのリング２７０５は、参加するノード２７１０を含むことができ、こ
の参加するノード２７１０は、直接に隣接するノード１（２７２０）と直接に隣接するノ
ード２（２７３０）との間でリングに参加することを試みている可能性がある。いくつか
の実施形態で、参加するノード２７１０は、図２３Ｃで説明したものに類似する形でノー
ドのリング２７０５に参加することができ、図２３Ｃでは、参加するノードは、ノード２
３０１と２３６２との間でキャッシングされた合意に基づいて識別子範囲を判定する。ノ
ードの参加中にリング一貫性を維持する方法を、下でおよび図２７のノードおよびデータ
アイテムを参照してさらに詳細に説明する。
【０３４９】
図２８に、参加するノードがノードのリングに参加するときのリング一貫性を維持する
方法２８００の一例の流れ図を示す。いくつかの実施形態で、方法２８００は、複数のサ
ブ方法を組み込み、各サブ方法は、異なるノードの観点から生じる。これから、方法２８
００を、環境２７００のコンポーネントおよびデータならびに図３０の状態図３０００を
頻繁に参照して説明する。
【０３５０】
方法２８００は、参加するノードが、リング上の複数の他のノードの近傍を検出する行
為（近傍は、少なくとも直接に隣接する先行ノードおよび直接に隣接する後続ノードを含
む）（行為２８０５）を含む。いくつかの場合に、参加するノード２７１０は、リング２
７０５上の複数の他のノードの近傍を検出し、かつ／または確立することができ、ここで
、近傍は、直接に隣接するノード２７２０および他の直接に隣接するノード２７３０を含
む。状態図３０００内など、いくつかの実施形態で、参加するノード３００５は、ステッ
プ１で導入メッセージ（例えば、導入３００６）を送信することによって近傍を確立する
。そのような導入メッセージを受信する各ノードは、状態図のステップ２で肯定応答（Ａ
ＣＫ）メッセージ（例えば、ＡＣＫ ３００７）を応答することができる。導入３００６
は、参加するノードを識別するのに使用される情報の１つまたは複数の部分を含み、参加
するノード３００５がリング２７０５に参加するつもりであることを示すことができる。
【０３５１】
参加するノードを、参加するノード３００５によって戻って受信されるＡＣＫメッセー
ジから、どのノードがリング上でそれに最も近いかを判定するように構成することができ
る。例えば、各ＡＣＫメッセージは、リング上のノード位置を示す識別子範囲および／ま
たは位置識別子と、ノードが責任を有する範囲とを含むことができる。したがって、状態
図３０００で、参加するノード３００５は、直接に隣接するノード３（３０１０）が、参
加するノードの直接に隣接する先行ノードであり、直接に隣接するノード５（３０１５）
が、参加するノードの直接に隣接する後続ノードであることを判定することができる。さ
らに、参加するノード３００５は、隣接ノード１（３０２０）および隣接ノード２（３０
２５）が、参加するノードと同一リング上にあるが、必ずしも参加するノードの直接に最
も近いノードではないことを判定することができる。したがって、近傍確立３０５０を、
例示的状態図３０００に従って達成することができる。
【０３５２】
方法２８００は、参加するノードが、直接に隣接する先行ノードおよび直接に隣接する
後続ノードの中から選択された直接に隣接するノードのうちの１つに、参加するノードが
参加するノードと選択された直接に隣接するノードとの間のｉｄ区間の一部のｉｄ区間オ
ーナーシップをとる意図を示す行為（行為２８１０）を含む。例えば、参加するノード２
７１０は、直接に隣接するノード１（２７２０）および直接に隣接するノード２（２７３
０）の中から選択された直接に隣接するノード１（２７２０）に、参加するノード２７１
０が、参加するノード２７１０と選択された直接に隣接するノード２７２０との間のｉｄ
空間の一部のｉｄ空間オーナーシップをとる意図を示すことができる。上記のように、ｉ
ｄ空間は、所与のノードが責任を負う識別子範囲（非占有または他の）を含むことができ
る。例えば、ｉｄ空間は、所与のノードが責任を負うノード識別子の数値範囲を含むこと
ができる。
【０３５３】
状態図３０００内などのいくつかの実施形態で、参加するノード３００５が、直接に隣
接する先行ノードおよび直接に隣接する後続ノードの中から選択された直接に隣接するノ
ードのうちの１つに、参加するノードが参加するノード３００５と選択された直接に隣接
するノード３０１０との間のｉｄ区間の一部のｉｄ区間オーナーシップをとる意図を示す
行為は、直接に隣接する先行ノード３０１０および直接に隣接する後続ノード３０１５の
中から選択された直接に隣接するノード３０１０に、トークン要求３０３１を送信する行
為を含み、このトークン要求は、そのノード識別子を有するノードだけが応答できるよう
にするノード識別子と、第１タイムトゥリブ持続時間値３０３１とを含み、第１タイムト
ゥリブ持続時間値は、参加するノード３００５が、選択された直接に隣接するノードとの
監視関係がアクティブであると仮定できる持続時間を示す。
【０３５４】
いくつかの場合に、トークン要求メッセージ３０３１は、参加するノード３００５の期
待されるオーナーシップ範囲の更新された状況を示すマーカーを含む。タイムトゥリブ値
（ＴＴＬ）および関係監視は、実質的に図２０の方法２０００で説明したものと同一とす
ることができる。
【０３５５】
方法２８００は、参加するノードが、選択された直接に隣接するノードを監視する意図
を示す行為（行為２８１５）を含む。例えば、参加するノード２７１０が、監視表示２７
１２で示された直接に隣接するノード１（２７２０）を監視する意図を示すことができる
。そのような監視関係では、参加するノード２７１０は、ある範囲のノード識別子を監視
することに合意することができる。いくつかの場合に、範囲は、直接に隣接するノード２
７２０と直接に隣接するノード２７３０との識別子の間の識別子を含むことができる。図
２７には示されていないが、いくつかの実施形態で、監視表示２７１２およびｉｄ空間オ
ーナーシップ表示を、単一のメッセージに組み合わせることができる。
【０３５６】
方法２８００は、第１の選択された直接に隣接するノードが、参加するノードが参加す
るノードと第１の選択された直接に隣接するノードとの間のｉｄ空間の一部のｉｄ空間オ
ーナーシップをとる意図を示す表示を参加するノードから受信する行為（行為２８２０）
を含む。例えば、直接に隣接するノード１（２７２０）は、参加するノード２７１０が、
参加するノードとノード２７２０との間のｉｄ空間の一部のｉｄ空間オーナーシップをと
ることの参加するノード２７１０の意図を示す表示（例えば、ｉｄ空間オーナーシップ表
示２７１１）を参加するノード２７１０から受信することができる。
【０３５７】
方法２８００は、第１の選択された直接に隣接するノードが、参加するノードの、選択
された直接に隣接するノードを監視する意図の表示を参加するノードから受信する行為（
行為２８２５）を含む。例えば、直接に隣接するノード１（２７２０）は、参加するノー
ドの、直接に隣接するノード２７２０を監視する意図の表示（例えば、監視表示２７１２
）を参加するノード２７１０から受信することができる。
【０３５８】
方法２８００は、第１の選択された直接に隣接するノードが、参加するノードと第１の
選択された直接に隣接するノードとの間のｉｄ空間の一部のｉｄ空間オーナーシップをと
ることの参加するノードの意図の受入を示す表示を参加するノードに送信する行為（行為
２８３０）を含む。例えば、直接に隣接するノード１（２７２０）は、参加するノード２
７１０と直接に隣接するノード２７２０との間のｉｄ空間の一部のｉｄ空間オーナーシッ
プをとることの参加するノードの意図の受入を示すｉｄ空間オーナーシップ受入２７７３
（例えば、ｉｄ空間オーナーシップ受入２７７３）を送信することができる。
【０３５９】
方法２８００は、第１の選択された直接に隣接するノードが、選択された直接に隣接す
るノードを監視することの参加するノードの意図の受入を示す第２表示を参加するノード
に送信する行為（行為２８３１）を含む。例えば、直接に隣接するノード１（２７２０）
は、選択された直接に隣接するノード２７２０を監視することの参加するノード２７１０
の意図の受入を示す監視受入２７８３を送信することができる。
【０３６０】
方法２８００は、第１の選択された直接に隣接するノードが、参加するノードを監視す
ることの第１の選択された直接に隣接するノードの意図を示す第３表示を参加するノード
に送信する行為（行為２８３２）を含む。例えば、直接に隣接するノード１（２７２０）
は、参加するノード２７１０を監視することの第１の選択された直接に隣接するノード２
７２０の意図を示す監視表示２７９３を参加するノード２７１０に送信することができる
。いくつかの実施形態で、第１、第２、および第３の表示を、単一の表示に組み合わせる
ことができる。それに加えてまたはその代わりに、第１、第２、および第３の表示の任意
の組合せを、単一の組合せに組み合わせることができる（例えば、第１および第３または
第２および第３）。
【０３６１】
方法２８００は、参加するノードが、参加するノードと選択された直接に隣接するノー
ドとの間のｉｄ空間の一部のｉｄ空間オーナーシップをとることの参加するノードの意図
の受入を示す第１表示を選択された直接に隣接するノードから受信する行為（行為２８３
５）を含む。例えば、参加するノード２７１０は、参加するノード２７１０と直接に隣接
するノード２７２０との間のｉｄ空間の一部のｉｄ空間オーナーシップをとることの参加
するノードの意図の受入を示すｉｄ空間オーナーシップ受入２７７３を直接に隣接するノ
ード１（２７２０）から受信することができる。
【０３６２】
方法２８００は、参加するノードが、選択された直接に隣接するノードを監視すること
の参加するノードの意図の受入を示す第２表示を選択された直接に隣接するノードから受
信する行為（行為２８３６）を含む。例えば、参加するノード２７１０は、選択された直
接に隣接するノード２７２０を監視することの参加するノードの意図の受入を示す監視受
入２７８３を選択された直接に隣接するノード２７２０から受信することができる。
【０３６３】
方法２８００は、参加するノードが、参加するノードを監視することの第１の選択され
た直接に隣接するノードの意図を示す第３表示を選択された直接に隣接するノードから受
信する行為（行為２８３７）を含む。例えば、参加するノード２７１０は、参加するノー
ド２７１０を監視することの選択された直接に隣接するノードの意図を示す監視表示２７
９３を選択された直接に隣接するノード２７２０から受信することができる。いくつかの
場合に、第１、第２、および第３の表示を、単一の表示に組み合わせることができる。そ
れに加えてまたはその代わりに、第１、第２、および第３の表示の任意の組合せを、単一
の組合せに組み合わせることができる。
【０３６４】
状態図３０００内などのいくつかの実施形態で、参加するノード３００５が、参加する
ノードと選択された直接に隣接するノードとの間のｉｄ空間の一部のｉｄ空間オーナーシ
ップをとることの参加するノードの意図の受入を示し、参加するノード３００５を監視す
ることの選択された直接に隣接するノード３０１０の意図を示す表示を選択された直接に
隣接するノード３０１０から受信する行為は、選択された直接に隣接するノード３０１０
から第１トークン転送３０３２を受信する行為を含み、第１トークン転送は、参加するノ
ード３００５と選択された直接に隣接するノード３０１０との間のノードのリング内の非
占有ノード識別子の参加するノードのオーナーシップ範囲と、第２タイムトゥリブ持続時
間値３０３２（選択された直接に隣接するノードが、参加するノード３００５との監視関
係がアクティブであると仮定できる持続時間を示す）と、選択された直接に隣接するノー
ド３０１０が参加するノードを監視することを示す第１確立許可とを含む。
【０３６５】
方法２８００は、参加するノードが、参加するノードを監視することの選択された直接
に隣接するノードの意図の受入を示す行為（行為２８４０）を含む。例えば、参加するノ
ード２７１０は、参加するノード２７１０を監視することの第１の選択された直接に隣接
するノード１（２７２０）の意図の受入を監視合意２７１４で示すことができる。状態図
３０００内などのいくつかの実施形態で、参加するノード３００５が、参加するノード３
００５を監視することの選択された直接に隣接するノード３０１０の意図の受入を示す行
為は、参加するノード３００５を監視することの選択された直接に隣接するノードの意図
を肯定応答する肯定応答メッセージ３０３３を選択された直接に隣接するノード３０１０
に送信する行為を含む。
【０３６６】
もう一度図２７および２８を参照すると、方法２８００は、第１の選択された直接に隣
接するノードが、参加するノード２７１０を監視することの第１の選択された直接に隣接
するノードの意図の受入を示す表示を参加するノード２７１０から受信する行為（行為２
８４５）を含む。例えば、直接に隣接するノード２７２０は、直接に隣接するノード２７
２０との一方向監視関係への参加に合意することの合意（例えば、監視合意２７１４）を
参加するノード２７１０から受信することができる。
【０３６７】
いくつかの実施形態で、選択された直接に隣接するノード２７２０は、それに加えてま
たはその代わりに、第２の選択された直接に隣接するノードとのすべての監視関係を終了
することの第１ノードの意図を第２の選択された直接に隣接するノードに示す行為と、第
１の選択された直接に隣接するノードとのすべての監視関係を終了することの第２ノード
の意図を示す表示を第２の選択された直接に隣接するノードから受信する行為と、第２の
ノードの終了する意図を肯定応答する行為とを実行することができる。例えば、直接に隣
接するノード１（２７２０）は、直接に隣接するノード２（２７３０）に、ノード２（２
７３０）とのすべての監視関係を終了することのノード１の意図を示すことができる。直
接に隣接するノード１（２７２０）は、ノード１とのすべての監視関係を終了することの
ノード２の意図を示す表示をノード２（２７３０）から受信することもできる。直接に隣
接するノード１（２７２０）は、ノード２の終了する意図を肯定応答することもできる。
【０３６８】
状態図３０００内などのいくつかの場合に、直接に隣接するノード３（３０１０）を、
状態図のステップ５（３０３４）でノード５（３０１５）とのすべての監視関係を終了す
ることのノード３の意図を直接に隣接するノード５（３０１５）に示すように構成するこ
とができる。直接に隣接するノード３（３０１０）は、状態図のステップ６（３０３５）
で、ノード３とのすべての監視関係を終了することのノード５の意図を示す表示をノード
５（３０１５）から受信することもできる。これは、いくつかの実施形態で３０３４を肯
定応答するように働くこともできる。直接に隣接するノード３（３０１０）は、状態図の
ステップ７（３０３６）で、ノード５の終了する意図を肯定応答することもできる。状態
図３０００のステップ（１〜８）が、直列にまたは並列に発生し得ることに留意されたい
。したがって、いくつかの実施形態で、例えば（５）というラベルを付けられたすべての
ステップが、同時に発生することができ、他のステップが、直列に発生することができる
。直列または並列に実行されるステップの任意の組合せが可能である。
【０３６９】
いくつかの実施形態で、方法２８００は、参加するノードから導入メッセージ（参加す
るノードによって所有されるものとして示されるノード識別子の期待されるオーナーシッ
プ範囲を含む）を受信するオプションの行為と、参加するノードに肯定応答メッセージ（
参加するノードによって識別されるノード識別子の範囲が、選択された隣接するノードの
ノード識別子の範囲と一貫することの表示を含む）を送信するオプションの行為とをも含
む。いくつかの場合に、ノード識別子の範囲は、導入メッセージおよび肯定応答メッセー
ジのどちらにも含まれないものとすることができる。そうではなく、ノード識別子の範囲
を、メッセージを送信したか受信したノードによる受信または送信のときに計算すること
ができる。
【０３７０】
方法２８００は、直接に隣接する先行ノードおよび直接に隣接する後続ノードの中から
選択された他の直接に隣接するノードが、参加するノードと第１の選択された直接に隣接
するノードとの間のｉｄ空間の一部のｉｄ空間オーナーシップを参加するノードに示す行
為（行為２８５０）を含む。例えば、直接に隣接するノード１（２７２０）および直接に
隣接するノード２（２７３０）の中から選択された直接に隣接するノード２（２７３０）
は、参加するノード２７１０と直接に隣接するノード２７３０との間のｉｄ空間の一部の
ｉｄ空間オーナーシップを表示するｉｄ空間オーナーシップ表示２７８４を参加するノー
ド２７１０に示すことができる。
【０３７１】
方法２８００は、他の直接に隣接するノードが、参加するノードを監視することの、他
の直接に隣接するノードの意図を示す行為（行為２８５１）を含む。例えば、直接に隣接
するノード２（２７３０）が、参加するノード２７１０を監視することのノード２の意図
（２７９４）を示すことができる。
【０３７２】
方法２８００は、参加するノードが、参加するノードと他の直接に隣接するノードとの
間のｉｄ空間の一部のｉｄ空間オーナーシップを示す表示を他の直接に隣接するノードか
ら受信する行為（行為２８５５）を含む。例えば、参加するノード２７１０は、参加する
ノード２７１０と直接に隣接するノード２７３０との間のｉｄ空間の一部のｉｄ空間オー
ナーシップを示すｉｄ空間オーナーシップ表示２７８４を直接に隣接するノード２（２７
３０）から受信することができる。
【０３７３】
方法２８００は、参加するノードが、参加するノードを監視することの他の直接に隣接
するノードの意図を示す表示を他の直接に隣接するノードから受信する行為（行為２８５
６）を含む。例えば、参加するノード２７１０は、参加するノード２７１０を監視するこ
との他の直接に隣接するノードの意図を示す監視表示２７９４を他の直接に隣接するノー
ド２７３０から受信することができる。
【０３７４】
状態図３０００内などのいくつかの実施形態で、参加するノード３００５が、参加する
ノード３００５と他の直接に隣接するノード３０１５との間のｉｄ空間の一部のｉｄ空間
オーナーシップを示す表示および参加するノードを監視することの他の直接に隣接するノ
ードの意図を示す表示を他の直接に隣接するノード３０１５から受信する行為は、第３タ
イムトゥリブ持続時間値３０３７を受信する行為を含み、第３タイムトゥリブ持続時間値
は、他の直接に隣接するノード３０１５が、参加するノード３００５との監視関係がアク
ティブであると仮定できる持続時間を示す。いくつかの実施形態で、参加するノードは、
ステップ６で他の直接に隣接するノード３０１５から第２トークン転送３０３７を受信し
、第２トークン転送は、参加するノード３００５と他の直接に隣接するノード３０１５と
の間の非占有ノード識別子の参加するノードのオーナーシップ範囲を含む。他の場合に、
オーナーシップ範囲は、参加するノードまたは他の直接に隣接するノードのいずれかまた
はこの両方によって計算することができる。
【０３７５】
もう一度図２７および２８を参照すると、方法２８００は、参加するノードが、参加す
るノードと他の直接に隣接するノードとの間のｉｄ空間の一部のｉｄ空間オーナーシップ
を確立することの参加するノードの意図を他の直接に隣接するノードに示す行為（行為２
８６０）を含む。例えば、参加するノード２７１０は、参加するノード２７１０と直接に
隣接するノード２７３０との間のｉｄ空間の一部のｉｄ空間オーナーシップを確立するこ
との参加するノード２７１０の意図を直接に隣接するノード２（２７３０）に示す（例え
ば、ｉｄ空間オーナーシップ表示２７２１で）ことができる。
【０３７６】
状態図３０００内などのいくつかの実施形態で、参加するノード３００５が、参加する
ノード３００５と他の直接に隣接するノード３０１５との間のｉｄ空間の一部のｉｄ空間
オーナーシップを確立することの参加するノードの意図を他の直接に隣接するノード３０
１５に示す行為は、参加するノード３００５と他の直接に隣接するノード３０１５との間
で第２オーナーシップ範囲を確立する確立要求（ステップ７の３０３８）を送信する行為
を含み、確立要求３０３８は、第４タイムトゥリブ持続時間３０３８（参加するノード３
００５が、他の直接に隣接するノード３０１５との監視関係がアクティブであると仮定で
きる持続時間を示す）と、参加するノードが他の直接に隣接するノード３０１５を監視す
ることを示す第３確立許可とを含む。いくつかの実施形態で、確立要求３０３８は、参加
するノード３００５と他の直接に隣接するノード３０１５との間の第２オーナーシップ範
囲の表示を表すこともできる。他の場合に、上記のように、この範囲を、ノードのリング
２７０５上のノードの任意の直接に隣接する対によって計算することができる。
【０３７７】
方法２８００は、参加するノードが、他の直接に隣接するノードを監視する意図を表示
する行為（行為２８６５）を含む。例えば、参加するノード２７１０は、直接に隣接する
ノード２（２７３０）を監視する意図を表示する（例えば、監視表示２７２２を介して）
ことができる。状態図３０００内などのいくつかの実施形態で、参加するノード３００５
が、参加するノード３００５と他の直接に隣接するノード３０１５との間のｉｄ空間の一
部のｉｄ空間オーナーシップを確立することの参加するノードの意図を他の直接に隣接す
るノード３０１５に示す行為は、参加するノード３００５と他の直接に隣接するノード３
０１５との間の第２オーナーシップ範囲を確立する確立要求３０３８を送信する行為を含
み、確立要求３０３８は、参加するノードと他の直接に隣接するノードとの間の第２オー
ナーシップ範囲と、第４タイムトゥリブ持続時間３０３８（参加するノードが、他の直接
に隣接するノードとの監視関係がアクティブであると仮定できる持続時間を示す）と、参
加するノードが他の直接に隣接するノードを監視することを示す第３確立許可３０３８と
を含む。
【０３７８】
方法２８００は、他の直接に隣接するノードが、参加するノードと第１の選択された直
接に隣接するノードとの間のｉｄ空間の一部のｉｄ空間オーナーシップを確立することの
参加するノードの意図の表示を受信する行為（行為２８７０）を含む。例えば、直接に隣
接するノード２（２７３０）は、参加するノード２７１０と直接に隣接するノード２７３
０との間のｉｄ空間の一部のｉｄ空間オーナーシップを確立することの参加するノードの
意図を示すｉｄ空間オーナーシップ表示２７２１を受信することができる。
【０３７９】
方法２８００は、他の直接に隣接するノードが、第１の選択された直接に隣接するノー
ドを監視することの参加するノードの意図の表示を受信する行為（行為２８７５）を含む
。例えば、直接に隣接するノード２（２７３０）は、直接に隣接するノード２７３０を監
視することの参加するノードの意図を示す監視表示２７２２を受信することができる。
【０３８０】
方法２８００は、他の直接に隣接するノードが、参加するノードを監視する、その他の
ノードの意図を参加するノードに示す行為（行為２８８０）を含む。例えば、直接に隣接
するノード２（２７３０）は、参加するノード２７１０を監視することの直接に隣接する
ノードの意図を参加するノード２７１０に示す（例えば、監視表示２７９４を介して）こ
とができる。
【０３８１】
いくつかの場合に、直接に隣接するノード２（２７３０）は、それに加えてまたはその
代わりに、第１の選択された直接に隣接するノードとのすべての監視関係を終了すること
の第２ノードの意図を示す表示を第２の選択された直接に隣接するノードから受信する行
為と、第２の選択された直接に隣接するノードとのすべての監視関係を終了することの第
１ノードの意図を第２の選択された直接に隣接するノードに示す行為と、第１ノードの終
了する意図を肯定応答する肯定応答を受信する行為とを実行することができる。他の直接
に隣接するノードは、第２の選択された直接に隣接するノードからの表示を肯定応答する
こともできる。例えば、直接に隣接するノード２（２７３０）は、直接に隣接するノード
１（２７２０）から、ノード２とのすべての監視関係を終了することのノード１の意図を
示す表示を受信することができる。ノード２（２７３０）は、ノード２の終了する意図を
肯定応答する肯定応答（状態図３０００の３０３６）を受信することもできる。ノード２
（２７３０）は、ノード１（２７２０）からの表示を肯定応答することもできる。
【０３８２】
方法２８００は、参加するノードが、参加するノードを監視することの他の直接に隣接
するノードの意図を示す表示を他の直接に隣接するノードから受信する行為（行為２８８
５）を含む。例えば、参加するノード２７１０は、参加するノード２７１０を監視するこ
との他の直接に隣接するノードの意図を示す監視表示２７９４を直接に隣接するノード２
（２７３０）（例えば、監視）から受信することができる。状態図３０００内などのいく
つかの実施形態で、参加するノードが、参加するノードを監視することの他の直接に隣接
するノードの意図を示す表示を他の直接に隣接するノードから受信する行為は、確立要求
に関する第４確立許可（例えば、ステップ８の３０３９）を受信する行為を含み、第４確
立許可は、他の隣接するノード３０１５が参加するノード３００５を監視することを示す
。
【０３８３】
さらに、参加するノード２７１０は、リング上のノードのうちの少なくとも１つ（例え
ば、直接に隣接するノード１（２７２０））から否定応答（ＮＡＫ）メッセージを受信す
る場合があり、ここで、ＮＡＫメッセージは、ＮＡＫ送信側の、リングのビューの表示を
含む。ＮＡＫ送信側の、近傍のビューを使用することによって、参加するノード２７１０
は、ＮＡＫ送信側の、リングのビューに基づいて、その近傍のビューを更新することがで
きる。
【０３８４】
図２９に、リービングノードがノードのリングを去るときにリング一貫性を維持する方
法２９００の一例の流れ図を示す。方法２９００を、環境２７００のコンポーネントおよ
びデータならびに図３１の状態図３１００を頻繁に参照して説明する。
【０３８５】
方法２９００は、第１の選択された直接に隣接するノードが、ノードのリングを去ると
いうリービングノードの行為の表示を受信する行為（行為２９１０）を含む。例えば、直
接に隣接するノード３（３１１０）は、リング上の任意のノードから（例えば、リービン
グノード４（３１０５）から）、ノードのリングを去るというリービングノード３１０５
の行為を示す表示を受信することができる。いくつかの場合に、リービングノード３１０
５は、表示が受信されるときにノードのリングを既に去っている場合がある。あるいは、
リービングノード３１０５が、去る過程にあるまたはノードのリングを去ることを計画し
ているのいずれかである場合がある。いくつかの実施形態で、第１の選択された直接に隣
接するノード３１１０が、リービングノード３１０５がノードのリングを去ろうとしてい
ることの表示を受信する行為は、第１の選択された直接に隣接するノード３１１０が、リ
ービングノード３１０５から離脱メッセージ３１２１を受信すること（状態図３１００の
ステップ１）を含み、この離脱メッセージは、リービングノード３１０５によって所有さ
れるものとして示されたノード識別子のオーナーシップ範囲を含むことができる。他の実
施形態では、直接に隣接するノード３１１０は、基礎になるバスおよび／またはネットワ
ークなど、ノードのリングの外のノードから表示（例えば、去る表示３１２１）を受信す
ることができる。
【０３８６】
方法２９００は、第１の選択された直接に隣接するノードが、リービングノードと第１
の選択された直接に隣接するノードとの間のｉｄ空間の一部のリービングノードのｉｄ空
間オーナーシップを引き受ける意図を示す表示を第２の選択された直接に隣接するノード
に送信する行為（行為２９２０）を含む。例えば、直接に隣接するノード３（３１１０）
は、リービングノード３１０５と直接に隣接するノード３１１０との間のｉｄ空間の一部
のリービングノードのｉｄ空間オーナーシップを引き受ける意図を示す表示（例えば、確
立およびＴＴＬ３１２２）を直接に隣接するノード５（３１１５）に送信することができ
る。
【０３８７】
方法２９００は、第１の選択された直接に隣接するノードが、第１の選択された直接に
隣接するノードと第２の選択された直接に隣接するノードとの間での少なくとも一方向監
視関係の確立を示す表示を第２の選択された直接に隣接するノードに送信する行為（行為
２９２５）を含む。例えば、直接に隣接するノード３（３１１０）は、直接に隣接するノ
ード３（３１１０）と直接に隣接するノード５（３１１５）との間での少なくとも一方向
監視関係の確立を示す表示（例えば、確立およびＴＴＬ３１２２）を直接に隣接するノー
ド５（３１１５）に送信することができる。
【０３８８】
状態図３１００内などのいくつかの実施形態では、第１の選択された直接に隣接するノ
ードが、リービングノードと第１の選択された直接に隣接するノードとの間のｉｄ空間の
一部のリービングノードのｉｄ空間オーナーシップを引き受ける意図を示す表示を第２の
選択された直接に隣接するノードに送信する行為は、第１の選択された直接に隣接するノ
ード３１１０が、第１の選択された直接に隣接するノード３１１０と第２の選択された直
接に隣接するノード３１１５との間でオーナーシップ範囲を確立するために第１確立要求
３１２２を（例えば、状態図３１００のステップ２で）第２の選択された直接に隣接する
ノード３１１５に送信する行為（第１確立要求は、第１タイムトゥリブ持続時間３１２２
を含み、第１タイムトゥリブ持続時間は、第１の選択された直接に隣接するノード３１１
０が、第２の選択された直接に隣接するノード３１１５との監視関係がアクティブである
と仮定できる持続時間を示す）と、第１隣接ノード３１１０が、第１確立要求３１２２の
第１確立許可３１２３を（例えば、状態図３１００のステップ３で）受信する行為（第１
確立許可３１２３は、第２隣接ノード３１１５が第１の選択された直接に隣接するノード
３１１０を監視することを示す）とを含む。
【０３８９】
方法２９００は、第１の選択された直接に隣接するノードが、リービングノードとの間
のｉｄ空間の一部のｉｄ空間オーナーシップを引き受けることの第１ノードの意図の受入
を示す表示を第２の選択された直接に隣接するノードから受信する行為（行為２９３０）
を含む。例えば、直接に隣接するノード３（３１１０）は、リービングノード３１０５と
第１の選択された直接に隣接するノードとの間のｉｄ空間の一部のｉｄ空間オーナーシッ
プを引き受けることの直接に隣接するノード５の意図の受入を示す表示（例えば、確立お
よびＴＴＬ３１２４）を直接に隣接するノード５（３１１５）から受信することができる
。
【０３９０】
方法２９００は、第１の選択された直接に隣接するノードが、第２の選択された直接に
隣接するノードと第１の選択された直接に隣接するノードとの間での一方向監視関係の確
立を示す表示を第２の選択された直接に隣接するノードから受信する行為（行為２９３５
）を含む。例えば、直接に隣接するノード３１１０は、直接に隣接するノード３１１５と
直接に隣接するノード３１１０との間の一方向監視関係の確立を示す。
【０３９１】
状態図３１００内などのいくつかの実施形態では、第１の選択された直接に隣接するノ
ードが、リービングノードと第１の選択された直接に隣接するノードとの間のｉｄ空間の
一部のｉｄ空間オーナーシップを引き受ける第１ノードの意図の受入を示し、第２の選択
された直接に隣接するノードと第１の選択された直接に隣接するノードとの間の一方向監
視関係の確立を示す表示を第２の選択された直接に隣接するノードから受信する行為は、
第１隣接ノード３１１０が、第１隣接ノード３１１０と第２隣接ノード３１１５との間で
オーナーシップ範囲を確立するために第２隣接ノード３１１５から第２確立要求を受信す
る（例えば、状態図３１００のステップ２で）行為（第２確立要求は、第２タイムトゥリ
ブ持続時間３１２４を含み、第２タイムトゥリブ持続時間は、第２隣接ノード３１１５が
、第１隣接ノード３１１０との監視関係がアクティブであると仮定できる持続時間を示す
）と、第１隣接ノード３１１０が、第２確立要求の第２確立許可３１２３を送信する（例
えば、状態図３１００のステップ３で）行為（第２確立許可は、第１隣接ノード３１１０
が第２隣接ノード３１１５を監視することを示す）とを含む。
【０３９２】
（データ一貫性）
図３２に、本発明の原理を使用できるリングアーキテクチャ３２００を示す。リングア
ーキテクチャ３２００は、ノードのリング３２０５を含む。いくつかの実施形態で、ノー
ドのリング３２０５は、上記、図２３Ｃのリング２３５０および／または図２７のリング
２７０５に類似するか同一とすることができる。データ一貫性を維持する方法を、図３２
のノードおよびデータアイテムに関して下でさらに詳細に説明する。
【０３９３】
図３３に、フェデレーションインフラストラクチャ内の複製セット内でデータアクセス
トランザクションを実行する方法３３００の流れ図を示す。方法３３００を、これから、
環境３２００のコンポーネントおよびデータを頻繁に参照して説明する。
【０３９４】
いくつかの実施形態で、方法３３００は、ノードの複製セット内の複数のノードの中か
らプライマリノードを選ぶ行為（行為３３１０）を含む。例えば、プライマリノード３２
１１を、ノードの複製セット３２１０内の複数のノードの中から選ぶことができる。デー
タ一貫性を維持するのを助けるために、複製セットを作成して、データの１つまたは複数
の部分を複製するか写しを作ることができる。したがって、ノードがリングを去る（障害
または滑らかな離脱のいずれかによって）ときに、他のノードは、離脱するノードによっ
て保持された情報をも含む。いくつかの場合に、複製セット内の各ノードは、１）複製セ
ットのアイデンティティ、２）構成シーケンス番号（ＣＳＮ）、３）複製セットのメンバ
シップおよびプライマリノードがどれであるか、４）最後に使用されたシーケンス番号（
ＬＳＮ）、および５）複製セットに格納されたデータを含むことができる。１〜３で表さ
れる状態情報を、複製セットの「構成状態」と呼ぶことができ、４〜５で表される状態情
報を、複製セットに「格納されるデータ」と呼ぶことができる。
【０３９５】
ルーティング一貫性およびリング一貫性に関して上で提供された原理、記述、および説
明が、リーダー選出（すなわち、プライマリノードを選ぶこと）に関して適用可能である
ことに留意されたい。例えば、リング内でｉｄ空間オーナーシップを維持する原理を、本
明細書で述べるようにプライマリノードおよびセカンダリノードに適用することができる
。一般に、プライマリノードおよびセカンダリノードのプロパティは、上のセクションで
説明された他のノードのいずれかまたはすべてと一貫する。
【０３９６】
いくつかの実施形態で、複製セット３２１０を、そのプライマリ（プライマリノード３
２１１）として働く単一のノードを用いて作成することができる。プライマリノード３２
１１は、そのＬＳＮおよびＣＳＮを０に初期化し、メンバとしてそれ自体のみを含む複製
メンバシップを初期化することができる。その後、複製セット３２１０を、下でより詳細
に説明する様々な再構成アルゴリズムを使用してノードを複製セットに追加することによ
って、所望のサイズまで拡大することができる。いくつかの場合に、複製セット内の、プ
ライマリノードではないすべてのノードを、セカンダリノードと称する。ＬＳＮを、書き
込み動作と再構成動作との両方の間で全順序を作成するために増分することができる。Ｃ
ＳＮは、複製セット内の最新の構成変化をポイントすることができる。したがって、この
場合に、ＣＳＮは、ＬＳＮシーケンスを共有する。ＬＳＮシーケンス内のギャップは、通
常、データ消失を示し、したがって、回避されなければならない。
【０３９７】
方法３３００は、プライマリノードがノードの複製セット内の複数のノードの中から選
ばれているかどうかを判定する行為（プライマリノードは、クライアントデータアクセス
要求を受け入れ、処理するように構成され、複製セットは、選ばれたプライマリノードと
１つまたは複数のセカンダリノードとを含む）（行為３３２０）を含む。例えば、プライ
マリノード３２１１は、それがノードの複製セット３２１０内の複数のノードの中から選
ばれていることを判定することができ、プライマリノード３２１１は、クライアントデー
タアクセス要求３２１５を受け入れ、処理するように構成され、複製セット３２１０は、
プライマリノード３２１１とセカンダリノード３２１２とを含む。
【０３９８】
いくつかの場合に、フォールトトレランスを高めるために複数のセカンダリノード（す
なわち、同一データを格納するより多くのセカンダリノード）を追加することが望ましい
場合がある。追加されるセカンダリノードの個数は、許容できる同時障害の最大個数に基
づいて決定することができる。したがって許容できる同時障害の最大個数が、例えば３で
ある場合に、少なくとも４つのセカンダリノードを有し、その結果、少なくとも１つのノ
ードが、３つの他のノードが障害を発生した後であってもまだ複製セットの一部になるよ
うにすることが望ましい場合がある。いくつかの場合に、複製セットのメンバになるセカ
ンダリノードの個数は、プライマリノードの近傍内のメンバの個数に対応する。
【０３９９】
いくつかの場合に、許容可能な同時障害のこの最大個数を、セカンダリノードの閾値個
数に関係付けることができる。そのようなセカンダリノードの閾値個数を、クォーラムと
称する場合がある。データアクセス要求３２１５がデータ書き込み要求であるときに、セ
カンダリノードの閾値個数を、書き込みクォーラムと称する場合がある。同様に、データ
アクセス要求３２１５がデータ読み取り要求であるときに、セカンダリノードの閾値個数
を、読み取りクォーラムと称する場合がある。したがって、読み取りクォーラムおよび書
き込みクォーラムは、所与の個数の許容可能な同時障害について完全なフォールトトレラ
ンスを提供するのに必要なノードの最小限の閾値個数を表すことができる。
【０４００】
方法３３００は、プライマリノードが１つまたは複数のクライアントデータアクセス要
求を受信する行為（各データアクセス要求は、複製セット内のセカンダリノードのうちの
少なくとも１つでアクセスされるべきデータの少なくとも一部を示す）（行為３３３０）
を含む。例えば、プライマリノード３２１１は、クライアント３２５０からクライアント
データアクセス要求３２１５を受信することができ、要求３２１５は、複製セット３２１
０内のセカンダリノード３２１２でアクセスされるべきデータの少なくとも一部を示す。
データアクセス要求３２１５は、例えば、複製セット内のノードのうちの少なくとも１つ
に書き込まれるファイルを含む。それに加えてまたはその代わりに、データアクセス要求
３２１５は、複製セット内のノードのうちの少なくとも１つから読み取られ、取り出され
るファイルの名前を含むことができる。プライマリノード３２１１は、着信データ要求を
管理し、複製セットに対応する構成状態情報を含む適当な情報をセカンダリノード３２１
２に送信する。データの部分は、ノードのデータシーケンス番号（ＤＳＮ）、ＬＳＮ、Ｃ
ＳＮ、プライマリノードアイデンティティ、またはセカンダリノードアイデンティティを
含む、複製セット自体に関する制御情報のセットを含むこともできる。
【０４０１】
方法３３００は、プライマリノードが、クライアントデータアクセス要求が受信された
順序で状態を変化させるクライアントデータアクセス要求のそれぞれにデータシーケンス
番号（ＤＳＮ）を割り当てる行為（データシーケンス番号は、複製セット内のノードのそ
れぞれが従う線形化された処理順序を含む）（行為３３４０）を含む。例えば、プライマ
リノード３２１１は、要求が受信された順序で状態を変化させる各クライアントデータア
クセス要求３２１５にＤＳＮを割り当てることができる。ＤＳＮは、複製セット３２１０
内のノードのそれぞれが従う線形化された処理順序を含むことができる。いくつかの場合
に、線形化された処理順序を、図３５に示されているように、動作のシーケンス３５０１
と称する場合がある。要求が状態を変化させない場合には、プライマリノード３２１１は
、クライアントデータアクセス要求へのデータシーケンス番号の割り当てを省略すること
ができる。
【０４０２】
動作のシーケンス３５０１は、データシーケンス番号（ＤＳＮ３５０５）に従って、そ
れらが受信された順序で配置された複数の動作を含むことができる。例えば、プライマリ
ノード３２１１は、第１動作を表すためにＯＰ1を、第２動作を表すためにＯＰ2を、およ
びＯＰnによって表されるように完全に、割り当てることができる。ＯＰn+1は、最後に使
用されたシーケンス番号（ＬＳＮ３５１５）を表すことができる。上で述べたように、Ｌ
ＳＮ３５１５を増分して、書き込み動作と再構成動作との両方の間で全順序を作成するこ
とができる。ＣＳＮ３５１０は、複製セット３２１０内の最新の構成変化をポイントする
ことができる。いくつかの場合に、ＣＳＮ３５１０は、ＬＳＮシーケンスを共有すること
ができる。ＬＳＮシーケンス内のギャップは、動作のシーケンス３５０１が従われなかっ
たことを示し、これは、しばしばデータ消失をもたらす。
【０４０３】
方法３３００は、プライマリノードが、対応するデータシーケンス番号を含むクライア
ントデータアクセス要求のうちの少なくとも１つをセカンダリノードのうちの少なくとも
１つに送信する行為（行為３３５０）を含む。例えば、プライマリノード３２１１は、す
べての割り当てられたＤＳＮ３２１６を含むクライアントデータアクセス要求３２１５を
セカンダリノード３２１２に送信することができる。いくつかの場合に、クライアントデ
ータアクセス要求を、書き込みクォーラム(quorum)または読み取りクォーラムなどのクォ
ーラムに送ることができる。クォーラムは、期待される情報およびさらにプライマリノー
ドが知らない他のデータアクセス要求の表示を応答することができる。例えば、セカンダ
リノードは、プライマリノード３２１１が選ばれる前に他のトランザクションを処理済み
である場合があり、あるいは、プライマリが知らないあるトランザクションを割り当てら
れている場合がある。したがって、この情報を、プライマリノード３２１１に送信するこ
とができ、この情報は、プライマリノードの動作のシーケンス３５０１を更新するのに使
用することができる。いくつかの場合に、このプロセスは、下でさらに詳細に説明するよ
うに、複製セット再構成中にのみ発生する。
【０４０４】
方法３３００は、プライマリノードが、少なくとも閾値個数のセカンダリノードから、
クライアントデータアクセス要求の受信を示す肯定応答を受信する行為（行為３３６０）
を含む。例えば、プライマリノード３２１１は、閾値個数のセカンダリノード（例えば、
読み取りクォーラムまたは書き込みクォーラム）から、クライアントデータアクセス要求
３２１５の受信を肯定応答する肯定応答メッセージ３２２０を受信することができる。肯
定応答３２２０は、さらに、メッセージを送信したセカンダリノードが、そのデータアク
セスキュー（すなわち、動作のシーケンス３５０１）にクライアントデータアクセス要求
３２１５を挿入したことを示すことができる。いくつかの場合に、プライマリノード３２
１１は、複製セット内のすべてのノードからまたはそのクォーラムからそのような肯定応
答メッセージを受信することができる。肯定応答は、それに加えてまたはその代わりに、
クライアントデータアクセス要求の受入または拒否を示すことができる。
【０４０５】
方法３３００は、プライマリノードが、データアクセス要求をコミットする行為（コミ
ットは、クライアントデータアクセス要求に従ってデータにアクセスすることを含む）（
行為３３７０）を含む。例えば、プライマリノード３２１１は、データアクセス要求３２
１５を単一フェーズでコミットすることができ、このコミットは、クライアントデータア
クセス要求３２１５に従ってデータにアクセスすることを含む。したがって、データアク
セス要求が書き込み要求である場合には、プライマリノード３２１１は、書き込み要求を
単一フェーズでコミットすることができる。単一フェーズでのコミットは、コミットクエ
リを送信し、セカンダリノードのそれぞれから受信することなく行うことができる。単一
フェーズでのコミットを、非ブロッキングトランザクションと称する場合がある。上記複
製セット内の障害検出が完全なので、プライマリノードは、コミットクエリを送信し、セ
カンダリノードのそれぞれから受信する必要がない。
【０４０６】
いくつかの実施形態で、プライマリノード３２１１は、クライアントデータアクセス要
求３２１５を第２複製セットに送信することができる。第２複製セットは、プライマリノ
ードの近傍とは異なる近傍内にあるものとすることができる。いくつかの場合に、プライ
マリノードの近傍は、複製セットと同一のノードを含む。プライマリノード３２１１は、
複製セット３２１０がクライアントデータアクセス要求３２１５の第１部分を処理するこ
とを要求し、第２複製セットがそのデータアクセス要求の異なる部分を処理することを要
求することができる。しかし、そのような実施形態は、２フェーズコミットプロセスを使
用するはずである。例えば、このプロセスは、クライアントデータアクセス要求３２１５
の第１部分に対応する応答を複製セット３２１０から受信することを含むことができる。
このプロセスは、そのデータアクセス要求の第２の異なる部分に対応する応答を第２複製
セットから受信することをも含むことができる。応答を組み合わせることができ、組み合
わされた応答に基づいて、最新のデータアクセス応答を生成することができる。
【０４０７】
例示的実施形態では、プライマリノード３２１１は、次のようにクライアントデータ書
き込み要求に応答することができる。１）プライマリ３２１１は、アプリケーション一貫
性制約に対して要求を認証検査する。プライマリ３２１１が違反を判定する場合には、プ
ライマリ３２１１は、アプリケーション一貫性違反の障害状況をクライアント３２５０に
応答し、下のステップ（７）にスキップする。２）プライマリ３２１１は、プライマリの
ＬＳＮを原子的に増分することによって得ることができるシーケンス番号を書き込み動作
に割り当てる。この例では、所与の書き込み動作に関連するシーケンス番号を、そのＤＳ
Ｎと称する。３）プライマリ３２１１は、ＤＳＮ、ＣＳＮ、および書き込むべきデータを
すべてのセカンダリノードに通信し、書き込みクォーラムのセカンダリノードが応答する
のを待つ（変形手法は、プライマリが、書き込むべきデータを書き込みクォーラムだけに
送信することとすることができる）。
【０４０８】
４）書き込みクォーラムのセカンダリノードから肯定応答を聞いた後に、プライマリ３
２１１は、書き込み動作をローカルに実行し、書き込み動作がコミットされると考えられ
る点にある。プライマリ３２１１は、成功の状況をクライアントに戻って応答し、下のス
テップ（７）にスキップする。５）プライマリ３２１１が、書き込みクォーラムのセカン
ダリノードから肯定応答を得ることができない場合には、プライマリ３２１１は、障害を
発生したセカンダリノードを除去するために再構成動作を開始する。６）プライマリ３２
１１が、書き込み動作をローカルに実行することができない場合には、プライマリ３２１
１は、新しいプライマリに推移するために再構成動作を開始し、それ自体を複製セット３
２１０から除去し、ステップ（７）にスキップする。７）プライマリ３２１１は、次の着
信クライアントデータアクセス要求を待つ。他の実施形態が、可能であり、上記のように
より多数またはより少数のステップを含むことができることに留意されたい。
【０４０９】
例示的実施形態では、セカンダリノード３２１２は、次の形でデータ書き込み要求を処
理することができる。１）セカンダリは、着信書き込み動作で指定されるＣＳＮをそのＣ
ＳＮと比較する。指定されたＣＳＮがそのＣＳＮ未満である場合に、セカンダリは、その
要求を無視し、下のステップ（４）にスキップする。セカンダリノード３２１２は、指定
されたＣＮＳがそのＣＳＮを超えることができないとアサートする。というのは、そのよ
うな条件が、再構成が不完全な障害ディテクタを用いて達成されたことを暗示するからで
ある。２）セカンダリノード３２１２は、着信書き込みデータ要求のＤＳＮをそのＬＳＮ
と比較する。ＤＳＮが、その（ＬＳＮ＋１）未満である場合に、セカンダリノード３２１
２は、その書き込みデータ要求を無視する。ＤＳＮが、その（ＬＳＮ＋１）を超える場合
に、セカンダリノード３２１２は、そのデータ書き込み要求をバッファリングし、下のス
テップ（４）にスキップする。そうではない場合に、セカンダリノード３２１２は、その
ＬＳＮを原子的に増分し、そのデータ書き込み要求を受け入れ、肯定応答３２２０を送り
返す。セカンダリノード３２１２が、ローカル障害に起因して要求を受け入れることがで
きない場合には、セカンダリノード３２１２は、セカンダリとしてのそのノードを複製セ
ットから除去するために再構成を開始するようにプライマリに要求する。３）セカンダリ
ノード３２１２は、現在バッファリングされている動作のそれぞれを調べ終えるまで、そ
れらを調べ、処理し、そのＤＳＮがセカンダリの本明細書で説明するＬＳＮ値の範囲内で
あるものをすべて受け入れ、したがってプライマリによって確立された全順序を保存する
。４）セカンダリノード３２１２は、プライマリ３２１１からの次のデータアクセス要求
を待つ。処理の行為は、関連するデータを安定したストレージファシリティに書き込むこ
とを含むことができる。
【０４１０】
データベースセッティングでは、書き込みトランザクションを実行する例示的方法は、
次のとおりである。１）「アボート」を含む「コミット」の前の動作について、プライマ
リ３２１１は、単純に、その動作をローカルに実行し、下のステップ（６）にスキップす
る。２）「コミット」について、プライマリ３２１１は、トランザクションをローカルに
準備することによってトランザクション順序を判定する。このステップは、データベース
一貫性制約に対してトランザクションの認証検査をも行う。ローカル準備に失敗する場合
には、障害状況をクライアント３２５０に戻って応答し、下のステップ（６）にスキップ
する。３）プライマリノード３２１１は、「コミット」要求と共に、前の例のステップ（
２）〜（３）で指定されたセカンダリノード３２１２にトランザクションを転送する。４
）プライマリノード３２１１は、書き込みクォーラムのセカンダリノードから肯定応答を
得た後に、トランザクションをローカルにコミットし、クライアント３２５０に成功を報
告する。５）プライマリノード３２１１は、書き込みクォーラムのセカンダリノードから
肯定応答を得ることができない場合に、ローカルに準備されたトランザクションをアボー
トし、障害を発生したセカンダリノードを除去するために再構成動作を開始する。６）プ
ライマリ３２１１は、次の着信クライアントデータアクセス要求３２１５を待つ。
【０４１１】
図３４に、フェデレーションインフラストラクチャ内で一貫した複製セットを確立し、
維持する方法３４００の一例の流れ図を示す。方法３４００を、これから、環境３２００
のコンポーネントおよびデータを頻繁に参照して説明する。
【０４１２】
方法３４００は、ノードのリング内の複数のノードの中から複製セットを確立する行為
（複製セットは、メンバとしてプライマリノードおよび１つまたは複数のセカンダリノー
ドを含む）（行為３４１０）を含む。例えば、複製セット３２１０を、ノード３２１１、
３２１２およびノードのリング３２０５上の他のノードの中から確立することができる。
複製セット３２１０に、メンバとしてプライマリノード３２１１およびセカンダリノード
３２１２を含めることができる。いくつかの場合に、複製セット３２１０の境界を、セカ
ンダリノードもメンバである、プライマリの近傍と同一とすることができる。
【０４１３】
方法３４００は、複製セットメンバのうちの少なくとも１つに影響する複製セット構成
イベントオカレンス(replica set configuration event occurrence)を示す表示を受信す
ること（行為３４２０）をも含む。例えば、複製セット３２１０内のノード３２１１およ
び３２１２のいずれもが、プライマリノード３２１１およびセカンダリノード３２１２の
うちの少なくとも１つに影響する複製セット構成イベントオカレンスの表示を受信するこ
とができる。複製セット構成イベントには、複製セット内のノード障害、複製セットから
のノード離脱、またはノードが複製セットに参加することを含めることができる。再構成
を引き起こす、複製セットのノードに影響する他のイベントも、可能である。いくつかの
場合に、そのような構成イベントは、クライアントデータアクセス要求中に発生し得る。
【０４１４】
方法３４００は、受信された表示に基づいて、複製セットを再構成しなければならない
ことを判定する行為（再構成は、複製セット構成イベントオカレンスに基づいて、複製セ
ットからの既存セカンダリノードの除去、複製セットへの新しいセカンダリノードの追加
、新しいプライマリへの突然の推移、および新しいプライマリへの滑らかな推移のうちの
少なくとも１つを含む）（行為３４３０）を含む。例えば、受信された表示に基づいて、
複製セット３２１０内のノードのうちの１つが、複製セット３２１０を再構成しなければ
ならないと判定することができる。再構成には、発生した構成イベントに応じて、複製セ
ットからの既存セカンダリノードの除去、複製セットへの新しいセカンダリノードの追加
、新しいプライマリへの突然の推移、および新しいプライマリへの滑らかな推移のうちの
少なくとも１つを含めることができる。
【０４１５】
複製セットを再構成し、新しいプライマリノードに推移する一例の方法およびアルゴリ
ズムが、以下に含まれる。複製セット再構成の一例は、一般に、１）新しいプライマリへ
の突然の推移、２）新しいプライマリへの滑らかな推移、３）セカンダリノードの除去、
および４）セカンダリノードの追加を含む４つのケースをカバーする。この４つの一般的
な一例のそれぞれは、独立に発生し得、少なくともいくつかの実施形態で、既存のプライ
マリの置換を伴わない。
【０４１６】
方法３４００は、複製セット構成イベントに対応する再構成に従って複製セットを再構
成する行為（行為３４４０）を含む。例えば、複製セット３２１０を、複製セット構成イ
ベントに対応する再構成に従って再構成することができる。したがって、複製セット構成
イベントがノード障害である場合に、複製セット３２１０を、セカンダリの追加、セカン
ダリの除去、または新しいプライマリへの推移によって再構成することができる。同様に
、複製セット構成イベントがノード参加であるときに、複製セット３２１０を、上記の方
法のいずれかに従って再構成することができる。いくつかの場合に、ある再構成方法が、
ある再構成イベントに対応することができる。この対応は、ユーザによって構成すること
ができ、あるいは自動的とすることができる。
【０４１７】
いくつかの場合に、プライマリノード３２１１は、構成状態情報に基づいて、１つまた
は複数の複製セット再構成が進行しているのを検出することができる。上で示したように
、再構成プロセス中には、新しいプライマリノードを、複製セットについて選ぶことがで
きる。上記実施形態によれば、リング３２０５内のノードは、新しいプライマリノードの
情報がリング上の他のノードに関して最新であることを保証するために、新しいプライマ
リノードと通信することができる。
【０４１８】
いくつかの実施形態で、上で図３４を参照して説明したものに類似するかこれと同一の
一貫した複製セットを使用して、データにアクセスし、データを格納することができる。
例えば、複製セット３２１０を、複製セットノードのうちの１つまたは複数（例えば、セ
カンダリノード３２１２）上のデータストレージの一部を維持するように構成することが
できる。プライマリノード３２１１は、クライアントデータアクセス要求３２１５を受信
することができる。要求３２１５には、ノードの複製セット３２１０内の少なくとも１つ
のノード上でアクセスされる情報の表示を含めることができる。プライマリノードは、要
求を直接に処理するか、あるいは要求をセカンダリノードに渡すかのいずれかを行うこと
ができる。プライマリノード３２１１が、受信されたクライアントデータアクセス要求３
２１５内で示される情報の少なくとも一部へのアクセスに失敗したことを検出した場合に
は、プライマリノード３２１１は、それ自体を複製セットから除去することができ、その
結果、プライマリノード３２１１に格納された情報は、クライアントデータアクセス要求
に応答してアクセスされるのを防がれるようになる。これは、失効した若しくは古い情報
を返す可能性を除去し、クライアントデータアクセス要求３２１５に応答して返されるす
べての情報が最新であることを保証する。
【０４１９】
いくつかの実施形態によれば、新しいプライマリへの突然の推移は、次の形で発生し得
る。既存プライマリが障害を発生するときに、新しいプライマリが、上で述べた方法によ
る信頼できるリーダー選出アルゴリズムを使用して選ばれる。任意のクライアント動作を
受け入れる前に、新しいプライマリは、複製セットから古いプライマリを除去するために
、次の構成変更を実行することができる。１）新しいプライマリは、それが複製セット状
態の知識を有するかどうかを知るためにチェックすることができる。新しいプライマリは
、この知識を有しない場合に、複製セットのすべてのメンバが障害を発生したと暗黙のう
ちに判定し、下のステップ（９）にスキップする。２）新しいプライマリは、複製セット
のすべてのノードに連絡して、すべての既存セカンダリノードに連絡し終えることに関す
るフィックスポイントに達するまで、それらのＣＳＮおよびＬＳＮを判定する。このステ
ップで収集された情報を使用して、新しいプライマリは、最も古いＣＳＮ、最も新しいＣ
ＳＮ、および最も新しいＬＳＮを判定する。最も古いＣＳＮおよび最も新しいＣＳＮが、
いくつか（またはほとんど）の場合に同一である可能性があることに留意されたい。最も
古いＣＳＮおよび最も新しいＣＳＮが異なるときには、再構成動作の途中でのプライマリ
の障害が示される。その場合に、最も古いＣＳＮより大きいＣＳＮを有するすべての複製
は、確実に、最新データを有する。したがって、このステップの終りに、新しいプライマ
リは、最も古いＣＳＮおよび最も新しいＣＳＮが異なるときに、最新データを既に有する
。そうでない場合に、新しいプライマリは、最も新しいＣＳＮの前に書き込まれたデータ
だけを有し、ステップ（３）でのチェックは、新しいプライマリが最も新しいＣＳＮを過
ぎて書き込まれたデータをも有することを保証する。
【０４２０】
３）最も古いＣＳＮおよび最も新しいＣＳＮが同一であり、新しいプライマリが、読み
取りクォーラムのセカンダリノードと連絡することができない場合には、データ消失の可
能性があり、新しいプライマリは、下のステップ（９）にスキップする。いくつかの場合
に、読み取りクォーラムが書き込みクォーラムと交差することが非常に有利である（また
は必要でさえある）可能性がある。サイズベースのクォーラムについて、読み取りクォー
ラムは、（ｎ−ｗ）より大きい任意のセットであり、ここで、ｎは、ＣＳＮで指定される
複製ノードの個数であり、ｗは、書き込みクォーラムである。
【０４２１】
４）新しいプライマリは、セカンダリノードの報告されたＬＳＮと上のステップ（２）
で判定された最新のＬＳＮとの間の動作をそれらのセカンダリノードに送信することによ
って、セカンダリノードをその構成においてデータに関して最新にすることを試みる。最
も古いＣＳＮの後、最新のＣＳＮまでの不完全な再構成動作を、このステップで、短縮さ
れた無効な再構成動作として送信することができる。５）新しいプライマリは、最新のＣ
ＳＮを有する構成から、障害を発生したプライマリ（例えば、プライマリ３２１１）およ
びセカンダリノード（例えば、セカンダリノード３２１２）を除去した後に、新しい複製
構成をローカルに構築し、最新のＬＳＮをそのＬＳＮにし、そのＬＳＮを増分することに
よって得られたＣＳＮをその新しい構成に割り当てる。６）新しいプライマリは、新しい
複製構成をすべてのセカンダリノードに通信する。
【０４２２】
７）新しいプライマリが、上のステップ（６）で送信された再構成動作に応答して、す
べてのセカンダリノードから成功状況を得ることができないか、いずれかのセカンダリか
ら障害状況を聞く場合に、新しいプライマリは、上のステップ（２）〜（６）を再実行す
る。８）少なくともいくつか（またはすべて）のセカンダリノードから成功状況を聞いた
後に、新しいプライマリは、下のステップ（１０）にスキップする。９）新しいプライマ
リは、データセンタのベルを鳴らす、ポケットベルメッセージを送信するなど、ディザス
タリカバリを実行するためのステップを行う。いくつかの場合に、複製セットは、手動介
入を使用することによってのみ復元することができる。１０）新しいプライマリは、この
時点でクライアント動作の処理を再開する。上のステップ（２）で、新しいプライマリは
、古いプライマリが障害を発生したときに複製セットに追加される過程にあった新しいセ
カンダリノードを発見する可能性がある。フィックスポイントは、新しいプライマリが新
しい構成の一部と考えるセカンダリノードの安定したセットを取り込むことを意味する。
新しいセカンダリノードをも処理する突然のプライマリ推移の前後の最適化を除去する場
合には、このフィックスポイント計算を除去することができる。
【０４２３】
いくつかの実施形態によれば、新しいプライマリへの滑らかな推移は、次の形で発生し
得る。既存プライマリから新しいプライマリへの推移は、複製セットへの新しいセカンダ
リの追加（下で説明する）に非常に似ている。新しいプライマリは、複製セット内の現行
セカンダリであってもなくてもよい。この例では、潜在的な新しいプライマリは、このア
ルゴリズムに従って複製セットの一部になる。１）新しいプライマリは、それにデータを
転送するために、複製セット内の１つまたは複数の既存セカンダリに連絡し、２）新しい
プライマリは、それと同時に、新しい動作をそれに転送するために既存プライマリ（例え
ば、プライマリ３２１１）に連絡する。
【０４２４】
３）新しいプライマリから受信された新しい動作のＤＳＮが、セカンダリから受信され
たデータより大きい場合には、新しいプライマリによって送信された新しい書き込み動作
を、セカンダリによって受信されたデータとマージする。４）上のステップ（１）で新し
いプライマリによって連絡されたすべてのセカンダリノードが、データ転送が完了したこ
とを報告した後に、新しいプライマリは、既存プライマリ３２１１に連絡して、新しいプ
ライマリを複製セットの現行プライマリにするための構成変更を開始する。５）ステップ
（４）で送信された再構成要求に対する応答として既存プライマリから成功状況を受信し
た後に、新しいプライマリは、複製セットのプライマリの役割を引き受け、６）ステップ
（５）の再構成要求まで、新しいプライマリは、それが受信するすべてのクライアント動
作を既存プライマリに転送する。
【０４２５】
いくつかの実施形態によれば、セカンダリノードを除去するプロセスは、次の形で発生
し得る。完全な障害ディテクタ（上で図１４および１９に関して説明した）が、既存セカ
ンダリ３２１２が障害を発生したことをリングノードのうちの１つ（例えば、プライマリ
ノード３２１１）に報告するとき、または既存セカンダリが、それ自体を複製セット３２
１０から自発的に除去するために他のノードのうちの１つ（例えば、プライマリ）に連絡
するときに、ノードのうちの１つ（例えば、プライマリ）は、次のアルゴリズムを用いて
、複製セットからセカンダリを除去することができる。この例では、１）プライマリは、
着信クライアント動作（例えば、３２１５）の処理をブロックし、これらをバッファリン
グするか、クライアント（例えば３２５０）に後で再試行するように求めるかのいずれか
を行い、２）プライマリは、障害を発生したセカンダリを複製セットメンバシップから除
去することによって新しい複製構成をインストールし、そのＬＳＮを原子的に増分するこ
とによって新しい構成にＣＳＮを割り当てる。いくつかの場合に、これは、再構成動作が
、データ動作と同一のシーケンスストリーム内にあることを意味する。３）プライマリは
、すべてのセカンダリノードに新しい構成を通信し、４）少なくともいくつか（またはす
べて）のセカンダリノードから成功状況を聞いた後に、プライマリは、クライアント動作
の処理を再開する。
【０４２６】
そのような再構成プロセス中に、再構成されるセカンダリは、次のように振る舞うこと
ができる。１）セカンダリは、再構成動作のＣＳＮをそのＬＳＮと比較する。ＣＳＮが（
ＬＳＮ＋１）未満の場合には、セカンダリは、プライマリに傷害状況を送信し、下のステ
ップ（３）にスキップする。ＣＳＮが（ＬＳＮ＋１）と等しい場合には、セカンダリは、
そのＬＳＮを原子的に増分し、再構成動作を受け入れ、成功状況を送り返す。そうでない
場合には、セカンダリは、再構成動作をバッファリングし、下のステップ（３）にスキッ
プし、２）セカンダリは、現在バッファリングされている動作のうちの少なくともいくつ
か（またはすべて）を調べるまで、それらを調べ、処理し、３）セカンダリは、プライマ
リからの次の動作要求を待つ。
【０４２７】
障害ディテクタの完全さは、古い再構成および新しい再構成が同時には存在しないこと
を保証する。いくつかの実施形態で、全体的な仮定は、フェイルストップ（ｆａｉｌ−ｓ
ｔｏｐ）障害を検出するのに使用できる完全な障害ディテクタが存在することである。こ
の意味での「完全な」の使用は、ノードインスタンス（ノードの存在のそのインスタンス
）が実際に永久的に使用不能にならない限り、障害ディテクタが、そのノードインスタン
スが使用不能になったことを絶対に報告しないという仮定を取り込む。上で述べたように
、障害検出は、上記リング一貫性プロパティおよびルーティング一貫性プロパティという
概念と密接に関係し、これに頼ることができる。古い再構成および新しい再構成が同時に
は存在しないので、これは、複製セット状態が、複製セットメンバの外部に存在しないこ
とを暗示する。というのは、複製セットノードが、それが障害を発生した後またはそれが
自発的にそれ自体を除去した後のいずれかに限って複製セットから除去されるからである
。このプロパティは、複製セットのすべてのメンバが障害を発生した状態を識別するのに
有用である。というのは、新たに選ばれるプライマリが、この状態の下で複製セット状態
へのアクセスを有しないことを認識するからである。
【０４２８】
この例では、プライマリが、再構成動作が完了するまで着信動作の処理をブロックする
ので、これは、オペレータが、不可視になった再構成動作を無視することを可能にする。
再構成動作は、それを開始したプライマリが再構成プロセス自体の間に障害を発生し、障
害を発生したプライマリによって連絡されたセカンダリノードもその後に障害を発生する
ときに、不可視になり得る。このプロパティは、複製セットの既存セカンダリノードの間
で単一のＣＳＮを見つける新たに選択されたプライマリが、それが見つけたＣＳＮがシス
テム全体を観察する託宣展望から実際に最新のＣＳＮであることまたは、後で不可視にな
った、より後の再構成動作の後にデータ動作が開始されなかったことのいずれかを確信す
ることを可能にする。したがって、新たに選ばれたプライマリが、新しいプライマリへの
突然の推移に関する例で説明したように、既存セカンダリノードの間でそのプライマリが
見つけた最新ＣＳＮに基づいてデータ消失を判定することが、安全である。
【０４２９】
再構成動作がデータ動作と同一のシーケンス内にあることができることを考慮すると、
少なくともいくつか（またはすべて）のセカンダリノードが、再構成動作の終りにデータ
に関して最新にされる（これらのすべてが同一のＬＳＮを有することを意味する）。書き
込みクォーラムの存在下で、このプロパティは、新に選ばれたプライマリが、既存セカン
ダリノードの間で見つけた最新ＣＳＮに基づいてデータ消失を判定することを安全にする
。
【０４３０】
いくつかの実施形態によれば、セカンダリノードを追加するプロセスは、次の形で発生
し得る。この例では、新しいセカンダリは、次のアルゴリズムに従って、複製セットの一
部になる。１）セカンダリノードは、それにデータを転送するために、複製セット内の１
つまたは複数の既存セカンダリノードに連絡し、２）セカンダリノードは、同時に、新し
い動作をそれに転送するためにプライマリ（例えば、３２１１）に連絡し、３）プライマ
リから受信された新しい動作のＤＳＮが、セカンダリから受信されたデータより大きい場
合には、セカンダリノードは、プライマリによって送信された新しい書き込み動作をセカ
ンダリから受信したデータとマージし、４）上のステップ（１）で新しいセカンダリによ
って連絡された少なくともいくつか（またはすべて）のセカンダリノードが、データ転送
が完了したことを報告した後に、セカンダリノードは、プライマリに連絡して、複製セッ
トにそれ自体を追加するための構成変更を開始する。
【０４３１】
この例を継続すると、新しいセカンダリを複製セットに追加するためにプライマリが従
うアルゴリズムは、次のとおりである。１）新しいセカンダリからの最初の要求に応答し
て、プライマリは、まだ複製セットの一部ではないが、新しいセカンダリになるはずのも
のへの新しい動作の転送を開始し、２）新しいセカンダリからの後続の再構成要求に応答
して、プライマリは、新しい構成が既存セカンダリを除去するのではなく新しいセカンダ
リを追加するという相違を伴う、上記「セカンダリノードの除去」の一例で述べたものと
実質的に同一のステップを使用する再構成動作を開始することができる。
【０４３２】
図３６に、フェデレーションインフラストラクチャ内で複製セットからのデータにアク
セスする環境３６００を示す。環境３６００は、複数のモジュールを含むデータアクセス
システム３６１０を含む。一般に、以下で説明する各モジュールは、リング実施態様（例
えば、ノードのリング３２０５）内に存在し、近傍および／または複製セットを構成する
ノード、より一般的にはノードのリング配置を構成するノードおよびそのようなノードの
リング配置内のアクティブノードになることを試みるデバイスにまたがる分散アルゴリズ
ムとして実施され得る。このシステムは、リング上の複数のノードの近傍を確立するよう
に構成された近傍確立モジュール３６２０を含み、この近傍は、少なくとも、直接に隣接
する先行ノードおよび直接に隣接する後続ノードを含む。ノードのリング３２０５には、
直接に隣接するノード１（３６０８）と直接に隣接するノード２（３６０９）との間でリ
ングに参加することを試みることができる、参加するノード３６０６を含めることができ
る。いくつかの実施形態で、参加するノード３６０６は、参加するノードがノード２３０
１と２３６２との間でのキャッシングされた合意に基づいて識別子範囲を判定する図２３
Ｃで説明したものに類似する形でノードのリング３６０５に参加することができる。
【０４３３】
このシステムは、さらに、確立された近傍の外の参加するノードが、ノードのリング内
の確立された近傍に参加する意図を示したことを判定するように構成された意図判定モジ
ュール３６２５を含む。意図判定モジュール３６２５は、ノードの近傍の確立を示す近傍
表示３６２１を近傍確立モジュール３６２０から受け取ることができる。近傍には、直接
に隣接するノード１（３６０８）、参加するノード３６０６、および直接に隣接するノー
ド２（３６０９）を含めることができる。意図判定モジュール３６２５は、参加するノー
ドの参加する意図３６２６を一貫性維持モジュール３６３０に送ることができる。
【０４３４】
一貫性維持モジュール３６３０を、複数のノード内の各ノードが近傍内のｉｄ空間の一
部のｉｄ空間オーナーシップをとるように、確立された近傍内の一貫性を維持するように
構成することができる。上記見出し「ノードのリングの参加および離脱」において説明し
たように、近傍内の一貫性は、参加するノード３６０６がノードのリング３６０５に参加
するときに維持することができる。一貫性維持モジュール３６３０は、一貫性表示３６３
１を選出判定モジュール３６３５に送ることができる。いくつかの実施形態で、リングの
ｉｄ空間内の所与のｉｄで維持されるすべての状態一貫性について、そのプライマリノー
ドが任意の所与の瞬間にそのｉｄを所有するリングノードである状態の単位について形成
された複製セットがあることに留意されたい。ｉｄ空間オーナーシップは、所与のｉｄに
ついてノードの間で移動する（一貫して）ので、その所有するノードで格納される（また
は、これによって制御される）サービス状態の任意の単位の対応するプライマリさもその
ように移動する。この実施形態では、ｉｄ空間オーナーシップおよびプライマリさは、同
時の形で転送される。
【０４３５】
選出判定モジュールは、複数のノード内のノードの１つが、プライマリノードによって
向けられるクライアントデータアクセス要求に応答するように構成されたノードの複製セ
ットにまたがる責任を有するプライマリノードになるために選ばれたことを判定するよう
に構成され得る。プライマリノード選出に関して上記のように、選出判定モジュールは、
プライマリノードが複製セット（確立された近傍内のすべてのノードを含むことができる
）について選ばれたことを判定し、どのノードがプライマリになるために選ばれたかの表
示（３６３６）を要求受信モジュールに送ることができる。上記のように、そのようなリ
ーダー選出は、本論文で前に定義したリング一貫性およびルーティング一貫性（少なくと
も部分的に完全な障害ディテクタ機構を形成する監視合意を含む）の原理に従うことがで
きる。
【０４３６】
要求受信モジュール３６４０を、クライアント３６１５から１つまたは複数のクライア
ントデータアクセス要求を受信するように構成することができ、各データアクセス要求３
６４１は、複製セット内のノードのうちの少なくとも１つでアクセスされるデータの少な
くとも一部を示す。要求受信モジュール３６４０は、プライマリノード表示３６３６をも
受け取ることができる。プライマリノード表示３６３６およびデータアクセス要求３６４
１を、データアクセスモジュール３６４５への３６４１Ａおよび３６３６Ａに組み合わせ
ることができる（あるいは、それぞれを別々に送ることができる（図示せず））。データ
アクセスモジュール３６４５を、通信３６０７を介してノードのリング３６０５内の１つ
または複数のノードと通信し、クライアントデータアクセス要求３６４１内で示されたデ
ータにアクセスするように構成することができる。したがって、システム全体をインスタ
ンス化することができ、ここで、ノードがノードのリング３６０５に参加し、去ることが
でき、一貫性が維持され、プライマリノードが選ばれ、データが信頼できる形でアクセス
される。このシステム内の説明されたモジュールのそれぞれは、これらの機能ならびに上
のセクションでより詳細に説明した、各モジュールに対応する他の機能を実行することが
できる。
【０４３７】
いくつかの実施形態で、アクセスされるデータは、サービスを含む。例えば、参加する
ノード３６０６は、クライアント３６１５がアクセスを望むサービスを提供することがで
きる。例えば、サービスを、電子メールアプリケーションとすることができる。クライア
ント３６１５は、アクセスされるデータを示すことができ、データアクセスシステム３６
１０は、参加するノードがデータアクセスシステムによって維持されるリングおよびデー
タの一貫性に起因してリングを去るかどうかにかかわりなく、データにアクセスするよう
に構成され得る。他の場合に、提供されるサービスを、ロックマネージャ、データストレ
ージシステム、プロデューサ−コンシューマキュー、または任意の他のサービスとするこ
とができる。システムが、データベースなどのデータにアクセスするのに使用される場合
に、システム３６１０を、複製セット内のデータの原子性、一貫性、独立性、および永続
性（ＡＣＩＤ）プロパティのそれぞれを維持するように構成することができる。したがっ
て、どのノードが実際にデータを含むか、どのノードがノードのリングに参加しまたは去
るか、あるいはデータを含むかなりの個数のノードが障害を発生したかどうかにかかわり
なく、一貫した信頼できるデータアクセスを提供するように構成できるシステムが提示さ
れる。
【０４３８】
いくつかの場合に、サービスによって公開される動作を、状態を変化させる動作および
状態を変化させない動作にパーティショニングすることができる。ストレージサービスの
場合に、状態を変化させる動作を、「書き込み」と呼ぶことができ、状態を変化させない
動作を、「読み取り」と呼ぶことができる。ロックマネージャサービスの場合に、状態を
変化させる動作を、「獲得」および「解放」と称し、状態を変化させない動作を、「クエ
リ」と称する。プロデューサ−コンシューマキュー（時々分散計算に使用される）の場合
に、状態を変化させる動作を、「エンキュー」および「デキュー」と称し、状態を変化さ
せない動作を、「ピーク」と称する。したがって、本明細書のいくつかの実施形態で、用
語「書き込み」は、状態を変化させるすべての動作を取り込み、用語「読み取り」は、状
態を変化させないすべての動作を取り込む。
【０４３９】
いくつかの場合に、読み取り動作は、プライマリノード３２１１によってローカルに処
理される。読み取りを、クライアントが要求した状態が存在しないので、プライマリにな
るはずのもので満足することができない場合には、その状態は、セカンダリノードのどれ
にも（保証されて）存在はしない。いくつかの実施形態で、書き込み動作を、プライマリ
ノード３２１１を介して順序付けることができる。その場合に、プライマリノード３２１
１は、少なくとも書き込みクォーラムのセカンダリノードが、それらがクライアント供給
の状態をそれら自体で書き込んだことを肯定応答するまで、実際にはその状態をローカル
に書き込まない可能性がある。その肯定応答の後に、プライマリノード３２１１は、実際
に状態をローカルに書き込む（または書き込むことを試みる）。再構成は、いくつかの実
施形態で、複製セットメンバ（プライマリノードまたはセカンダリノード）が要求された
状態を書き込むことができないときに、いつでも発生し得る。その場合に、ノードは、そ
れ自体を複製セットから除去することによって、複製セット内で再構成を開始することが
できる。さらに、応答していない任意のセカンダリノードは、障害を発生し（これは、完
全な障害ディテクタのゆえに保証される）、プライマリノードは、複製セットからそのセ
カンダリノードを除去することによって再構成をトリガする。いくつかの場合に、これは
、プライマリノードに複製セットのプライマリであることを停止させない。
【０４４０】
データアクセスシステム３６１０を、クライアントデータ書き込み要求に従ってデータ
を書き込むように構成することができる。したがって、データアクセス要求３６４１（ま
たはデータアクセス要求３２１５）が書き込み要求であるか、書き込み要求を含む場合に
、プライマリノード３２１１は、クライアントデータ書き込み要求で示されるデータをセ
カンダリノード内のデータストアに書き込むようにセカンダリノード３２１２に指示する
ことができる。いくつかの場合に、プライマリノードは、書き込み要求を２フェーズで１
つまたは複数のセカンダリノード３２１２に複製する。この変形の利益は、書き込みクォ
ーラムが複製セット３２１０内のすべてのセカンダリノードからなる場合に、読み取り動
作をセカンダリによってサービスすることが可能になることである。いくつかの場合に、
セカンダリノードおよびプライマリノードでの書き込み動作は、データをノードのそれぞ
れに個別に使用可能な安定したストレージに書き込むなど、追加ロジックをトリガするこ
とができる。
【０４４１】
データアクセスシステム３６１０を、クライアントデータ読み取り要求に従ってデータ
を読み取るように構成することができる。したがって、データアクセス要求３６４１（ま
たはデータアクセス要求３２１５）が、読み取り要求であるか読み取り要求を含む場合に
、プライマリノード３２１１またはセカンダリノード３２１２のいずれかを、読み取り要
求を直接に処理するように構成することができる。いくつかの場合に、プライマリノード
３２１１が、要求内で示されるデータを読み取るようにセカンダリノードに要求すること
は、不必要である。他の場合に、セカンダリは、データを読み取り、クライアントデータ
読み取り要求に自律的に応答することができるものとすることができる。
【０４４２】
本発明を、その趣旨または本質的特性から逸脱せずに他の特定の形で実施することがで
きる。説明された実施形態は、すべての面で、例示的であって制限的ではないと考えられ
なければならない。したがって、本発明の範囲は、前述の説明ではなく添付の特許請求の
範囲によって示される。特許請求の範囲の同等性の意味および範囲に含まれるすべての変
更が、その範囲に含まれなければならない。
【図１】
2014116968.tif 000008
【図２】
2014116968.tif 000009
【図３】
2014116968.tif 000010
【図４】
2014116968.tif 000011
【図５】
2014116968.tif 000012
【図６】
2014116968.tif 000013
【図７】
2014116968.tif 000014
【図８】
2014116968.tif 000015
【図９】
2014116968.tif 000016
【図１０】
2014116968.tif 000017
【図１１】
2014116968.tif 000018
【図１２Ａ】
2014116968.tif 000019
【図１２Ｂ】
2014116968.tif 000020
【図１３】
2014116968.tif 000021
【図１４】
2014116968.tif 000022
【図１５】
2014116968.tif 000023
【図１６】
2014116968.tif 000024
【図１７】
2014116968.tif 000025
【図１８】
2014116968.tif 000026
【図１９Ａ】
2014116968.tif 000027
【図１９Ｂ】
2014116968.tif 000028
【図１９Ｃ】
2014116968.tif 000029
【図２０】
2014116968.tif 000030
【図２１】
2014116968.tif 000031
【図２２Ａ】
2014116968.tif 000032
【図２２Ｂ】
2014116968.tif 000033
【図２３Ａ】
2014116968.tif 000034
【図２３Ｂ】
2014116968.tif 000035
【図２３Ｃ】
2014116968.tif 000036
【図２３Ｄ】
2014116968.tif 000037
【図２４】
2014116968.tif 000038
【図２５】
2014116968.tif 000039
【図２６】
2014116968.tif 000040
【図２７】
2014116968.tif 000041
【図２８】
2014116968.tif 000042
【図２９】
2014116968.tif 000043
【図３０】
2014116968.tif 000044
【図３１】
2014116968.tif 000045
【図３２】
2014116968.tif 000046
【図３３】
2014116968.tif 000047
【図３４】
2014116968.tif 000048
【図３５】
2014116968.tif 000049
【図３６】
2014116968.tif 000050