JP2010509871A - フェデレーションインフラストラクチャ内の一貫性 - Google Patents

フェデレーションインフラストラクチャ内の一貫性 Download PDF

Info

Publication number
JP2010509871A
JP2010509871A JP2009536478A JP2009536478A JP2010509871A JP 2010509871 A JP2010509871 A JP 2010509871A JP 2009536478 A JP2009536478 A JP 2009536478A JP 2009536478 A JP2009536478 A JP 2009536478A JP 2010509871 A JP2010509871 A JP 2010509871A
Authority
JP
Japan
Prior art keywords
node
directly adjacent
nodes
act
ring
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009536478A
Other languages
English (en)
Inventor
エル.ハシャ リチャード
シュン ルー
キルスナ アール.カキバヤ ゴパラ
マルキ ダリア
チョウ リドン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2010509871A publication Critical patent/JP2010509871A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/142Reconfiguring to eliminate the error
    • G06F11/1425Reconfiguring to eliminate the error by reconfiguration of node membership
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/184Distributed file systems implemented as replicated file system
    • G06F16/1844Management specifically adapted to replicated file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1044Group management mechanisms 
    • H04L67/1046Joining mechanisms

Abstract

いくつかの実施形態で、プライマリノードがノードの複製セット内の複数のノードの間から選ばれたことが判定される。プライマリノードは、クライアントデータアクセス要求を受け入れ、処理する。複製セットは、プライマリノードおよび他のセカンダリノードを含む。プライマリノードは、クライアントデータアクセス要求を受信する。プライマリノードは、クライアントデータアクセス要求が受信された順序で状態を変化させる各クライアントデータアクセス要求にデータシーケンス番号を割り当てる。データシーケンス番号は、複製セット内のノードのそれぞれによって従われる線形化された処理順序を含む。プライマリノードは、すべての対応するデータシーケンス番号を含む変化するクライアントデータアクセス要求をセカンダリノードに送信する。プライマリノードは、閾値個数のセカンダリノードから、クライアントデータアクセス要求の受信を示す肯定応答を受信する。プライマリノードは、アクセス要求を変化させるデータをコミットする。

Description

本発明は、フェデレーションインフラストラクチャ内の一貫性に関する。
コンピュータシステムおよび関連するテクノロジは、社会の多くの側面に影響する。実際に、コンピュータシステムの情報を処理する能力は、我々が生活し、働く形を変えてきた。コンピュータシステムは、今や、一般に、コンピュータシステム出現の前に手作業で実行されタスク(例えば、ワードプロセッシング、スケジューリング、およびデータベース管理)のホストを実行する。最近では、コンピュータシステムは、お互いおよび他の電子デバイスに結合されて、有線および無線のコンピュータネットワークを形成し、このネットワーク上で、コンピュータシステムおよび他の電子デバイスが電子データを転送することができる。その結果、コンピュータシステムで実行される多くのタスク(例えば、音声通信、電子メールへのアクセス、ホームエレクトロニクスの制御、ウェブブラウジング、および文書の印刷)は、複数のコンピュータシステムおよび/または他の電子デバイスの間の有線コンピュータネットワークおよび/または無線コンピュータネットワークを介する電子メッセージの交換を含む。
しかし、コンピュータ化されたタスクを実行するのにネットワークリソースを利用するために、コンピュータシステムは、ネットワークリソースを識別し、これにアクセスする何らかの手段を有しなければならない。したがって、リソースは、通常、リソースを一意に識別し、あるリソースを他のリソースから区別するのに使用できる一意識別子、例えば、ネットワークアドレスを割り当てられる。したがって、リソースを利用することが望まれるコンピュータシステムは、リソースに対応するネットワークアドレスを使用してそのリソースに接続することができる。しかし、ネットワークリソースへのアクセスは、コンピュータシステムがネットワークリソースのネットワークアドレスの以前の知識を有しない場合にはむずかしくなり得る。例えば、コンピュータシステムは、そのコンピュータシステム(または別のネットワーク化されたコンピュータシステム)がネットワークプリンタのネットワークアドレスを知らない限り、ネットワークプリンタで文書を印刷することができない。
したがって、様々な機構(例えば、ドメインネームシステム(「DNS」)、アクティブディレクトリ(「AD」)、分散ファイルシステム(「DFS」))が、コンピュータシステムが以前に未知のリソースを識別する(およびアクセスする)ために開発されてきた。しかし、異なるコンピュータネットワークを介してアクセス可能なリソース(例えば、デバイスおよびサービス)の量および多様性に起因して、開発者は、しばしば、様々な異なるリソース識別機構およびリソースアクセス機構を実施するアプリケーションを開発することを要求される。異なる機構のそれぞれは、異なるコーディング要件を有し、開発者に、アプリケーション内で必要になるすべての機能性を提供しない場合がある。
例えば、DNSは、分散管理アーキテクチャを有する(すなわち、集中管理が不要である)が、DNSは、十分にダイナミックでも自己管理式でもなく、弱いデータおよびクエリモデルをサポートし、固定されたルートのセットを有する。その一方で、ADは、十分にダイナミックであるが、集中管理を必要とする。さらに、異なる機構の諸態様は、互いに互換ではない場合がある。例えば、DNSを使用して識別されるリソースが、DFSルーティングプロトコルと互換でない場合がある。したがって、開発者は、最も適切な機構を選択し、他の機能の利益を捨てることを強いられる場合がある。
リソースを識別する機構は、ピアツーピアネットワークで特に問題になり得る。DNSは、ルックアップ要求を実施するために特殊なルートサービスのセットに頼る、キーとしてホスト名および値としてIPアドレスを有するルックアップサービスを提供する。さらに、DNSは、クライアントがネームサーバ階層をナビゲートすることを可能にするための情報(NSレコード)の管理を必要とする。したがって、リソースをネットワーク上で識別できるようになる前に、そのリソースをDNSに入力しなければならない。より大きいスケールで、ノードが情報のエントリに頼ってネットワークに頻繁に接続し、切断するネットワークは、必ずしも実用的とは限らない。さらに、DNSは、ホストまたはサービスを発見するというタスクに特殊化され、他のタイプのリソースに一般的に適用可能ではない。
したがって、リソース識別およびアクセスの他の仕組みが、これらの欠点に対処することを試みて開発されてきた。DNSより拡張性のある複数の機構は、分散ルックアッププロトコルを含む。これらの機構は、要求を対応するリソースにルーティングし、ルックアップ用の情報を格納するために、様々なノード配置およびルーティングアルゴリズムを使用する。
これらの機構のうちの少なくとも1つは、宛先ノードへメッセージをルーティングするのに、ネットワーク内の各ノードでローカルマルチレベル近傍マップを利用する。これは、本質的に、各ノードがノード(近傍マップ内のノード)の対応するツリーの「ルートノード」であるアーキテクチャをもたらす。メッセージは、1桁ずつ宛先IDに増分式にルーティングされる(例えば、***6 → **46 →,*346 → 2346、ただし、*はワイルドカードを表す)。このタイプの機構のルーティング効率は、O(log N)ルーティングホップであり、ノードがO(log N)サイズのルーティングテーブルを維持することを必要とする。
これらの機構のうちの他の少なくとも1つは、数の線形リングからとられた一意IDをノードに割り当てる。ノードは、それに直接に後続するノード(ID値による)へのポインタおよびそのID値が値ID+2Lの最も近い後続物であるノードへのポインタを含むルーティングテーブルを維持する。このタイプの機構のルーティング効率は、やはりO(log N)ルーティングホップであり、ノードがO(log N)サイズのルーティングテーブルを維持することを必要とする。
少なくとも1つのさらなる機構は、O(log N1/d)ルーティングホップを必要とし、ノードがO(D)サイズのルーティングテーブルを維持することを必要とする。したがって、これらの機構のすべてのルーティング効率は、少なくとも部分的に、システム内のノードの個数に依存する。
さらに、IDは(少なくともいくつかの機構について)、リングに沿って均一に分布させることができるので、リング上のノードの間のルーティングがある非効率性をもたらす可能性が必ずある。例えば、ルーティングホップが、膨大な地理的距離をまたぐ可能性があり、より高価なリンクをまたぐ可能性があり、非セキュアドメインを通過する可能性などがある。さらに、メッセージルーティングが、複数のホップを伴うときに、そのようなイベントが複数回発生する可能性がある。残念ながら、これらの機構は、お互いに関するノードの近接(物理的なまたは他の形の)を考慮に入れていない。例えば、リング上のノード分布に応じて、ニューヨークからボストンへのメッセージのルーティングが、ニューヨークからロンドン、アトランタ、東京を経てボストンへのメッセージのルーティングを用いる可能性がある。
したがって、少なくとも1つの他の最近の仕組みは、単一のスカラ近接メトリック(例えば、IPルーティングホップ数または地理的距離)として近接を定義することによって、近接を考慮に入れる。これらの機構は、ルーティングテーブルエントリの近接ベースの選択という概念を使用する。ルーティングテーブルエントリごとに多数の「正しい」ノード候補があるので、これらの機構は、候補ノードの中から近さ的に近いノードを選択することを試みる。これらの機構のために、各ノードがそれ自体への所与のIPノードを有するノードの「距離」を判定することを可能にする関数を提供することができる。メッセージは、より離れたノードへのルーティングの前に宛先に向かって進行するために、より近い近接内のノードの間でルーティングされる。したがって、一部のリソースを節約することができ、ルーティングは、より効率的である。
残念ながら、これらの既存の機構は、通常、とりわけ、ノードの間の対称関係(すなわち、第1ノードが、第2ノードがパートナになると考える場合に、第2ノードも、第1ノードをパートナと考える)、リング上での両方向(時計回りおよび反時計回り)でのメッセージのルーティング、複数の近接メトリックスに基づくノードのリンクリストのパーティショニング、および複数の近接メトリックスに基づくメッセージのルーティングを提供しない。これらの不足は、例えば、ネットワークのすべてのノードにデータをブロードキャストするときなど、ネットワークのノードの間でのデータのダイナミックで分散した効率的な転送を制限する可能性がある。
いくつかの環境で、セーフティ機構が、ノード責任が不適当にオーバーラップしないことを保証するのに使用される。例えば、セーフティ機構は、2つの異なるノードが、1つのシステムリソース(例えば、1つのメッセージ)またはシステム内の論理アイデンティティの責任を主張しないようにするのに使用することができる。いくつかの環境で、ライブネス機構が、メッセージが1つのターゲットに繰り返して送信される場合にそのメッセージが受け入れられることを保証するのに使用される。残念ながら、多くの既存の非同期システムは、限られたセーフティ機構およびライブネス機構(liveness mechanisms)のみを提供する。例えば、一部の非同期システムは、最終的にのみセーフティおよびライブネスを提供する。したがって、これらの非同期システムは、例えば、信頼すべきストレージなど、様々なタイプのアプリケーションに適切ではない。
本発明は、ランデブフェデレーション(rendezvous federation)内で維持される複製セット内でデータアクセストランザクションを実行する方法、システム、およびコンピュータプログラム製品におよぶ。いくつかの実施形態で、プライマリノードが、ノードの複製セット内の複数のノードの中から選ばれたことが判定される。プライマリノードは、クライアントデータアクセス要求を受け入れ、処理するように構成される。複製セットは、プライマリノードおよび他のセカンダリノードを含む。プライマリノードは、クライアントデータアクセス要求を受信し、各データアクセス要求は、複製セット内でプライマリノード上でアクセスされなければならないデータの少なくとも一部を示す。
プライマリノードは、クライアントデータアクセス要求が受信される順序でクライアントデータアクセス要求のそれぞれにデータシーケンス番号を割り当てる。データシーケンス番号は、複製セット内のノードのそれぞれが従わなければならない線形化された処理順序を含む。プライマリノードは、任意の対応するデータシーケンス番号を含むクライアントデータアクセス要求のうちの少なくとも1つを、セカンダリノードに送信する。プライマリノードは、少なくとも閾値個数のセカンダリノードから、クライアントデータアクセス要求の受信を示す肯定応答を受信する。プライマリノードは、データアクセス要求をコミットする。コミットは、クライアントデータアクセス要求に従ってデータにアクセスすることを含む。
この要約は、下の「発明を実施するための形態」でさらに説明される概念の選択物を単純化された形で導入するために提供される。この要約は、請求される主題の主要な特徴または本質的特徴を識別することを意図されたものではなく、請求される主題の範囲を判定する際の助けとして使用されることを意図されたものでもない。
追加の特徴および利益は、次の説明で示され、部分的にはその説明から明白になり、あるいは本明細書の教示の実践によって習得することができる。本発明の特徴および利益は、添付の特許請求の範囲で具体的に指摘される機器および組合せによって実現し、入手することができる。本発明の特徴は、次の説明および添付の特許請求の範囲からより十分に明らかになり、あるいは、下で示される本発明の実践によって習得することができる。
上で列挙したおよび他の利益および特徴を入手できる形を説明するために、上で短く説明した主題のより具体的な説明を、添付図面に示された特定の実施形態を参照することによって行う。これらの図面が通常の実施形態のみを示し、したがって、範囲において限定的と考えられてはならないことを理解して、実施形態を、添付図面の使用を介してさらに具体的かつ詳細に記述し、説明する。
フェデレーションインフラストラクチャの一例を示す図である。 パートナへの間接的な要求のルーティングを容易にするコンピューティングアーキテクチャの一例を示す図である。 ソートされたリストおよび対応するリングの形の、フェデレーションインフラストラクチャ内のノードの間の例示的なバイナリ関係を示す図である。 近接ルーティングを容易にするリングの例のリングを示す図である。 近接ルーティングを容易にするリングの例の近接誘導されたパーティションツリーを示す図である。 本発明の原理に適切なオペレーティング環境を示す図である。 近接判断基準を考慮に入れるノードルーティングテーブルを移植する方法を示す一例の流れ図である。 フェデレーションインフラストラクチャのノードをパーティショニングする方法を示す一例の流れ図である。 ノードルーティングテーブルを移植する方法を示す一例の流れ図である。 メッセージを宛先ノードに向かって数値的にルーティングする方法を示す一例の流れ図である。 メッセージを宛先ノードに向かって近接ルーティングする方法を示す一例の流れ図である。 既存フェデレーション内でメンバシップを確立するノードの一例を示す図である。 メッセージを交換するフェデレーションインフラストラクチャ内のノードの一例を示す図である。 フェデレーションインフラストラクチャ内でメンバシップを確立する方法を示す一例の流れ図である。 フェデレーションインフラストラクチャ内でメンバシップを維持する方法を示す一例の流れ図である。 別のノードのライブネス情報を発見する方法を示す一例の流れ図である。 メッセージモデルおよび関連する処理モデルの一例を示す図である。 機能レイヤとアプリケーションレイヤとの間で発生し得る複数のライブネス相互作用の一例を示す図である。 リング上のノードにまたがってルーティングされる要求−応答メッセージ交換パターンの一部を形成するメッセージの一例を示す図である。 あるノードが別の(例えば、対象)ノードを監視することを容易にする例のリングアーキテクチャを示す図である。 2つのノードがお互いを監視するのを容易にする例のリングアーキテクチャを示す図である。 相互に監視するノードが、他方のノードが障害について疑われることをそれぞれ報告できるときのアービトレーションを容易にする例のリングアーキテクチャを示す図である。 あるノードが別のノードを監視する方法を示す一例の流れ図である。 疑われるノード障害の衝突する報告の間でアービトレートする方法を示す一例の流れ図である。 キャッシングされた2ウェイ合意によるメッセージのルーティングを容易にする例のリングアーキテクチャを示す図である。 複数のキャッシングされた2ウェイ合意によるメッセージのルーティングを容易にする例のリングアーキテクチャを示す図である。 キャッシングされた2ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。 キャッシングされた2ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。 キャッシングされた2ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。 キャッシングされた2ウェイ合意を定式化するのを容易にする例のリングアーキテクチャを示す図である。 キャッシングされた2ウェイ合意に従ってメッセージをルーティングする方法を示す一例の流れ図である。 複数のキャッシングされた2ウェイ合意に従ってメッセージをルーティングする方法を示す一例の流れ図である。 2ウェイ合意に参加する方法を示す一例の流れ図である。 フェデレーション内のノードのリングへのノードの参加を容易にする例のリングアーキテクチャを示す図である。 参加するノード、選択された直接に隣接するノード、およびもう1つの直接に隣接するノードの展望からの、参加するノードがノードのリングに参加するときのリング一貫性を維持する方法を示す一例の流れ図である。 リービングノード(leaving node)がノードのリングを去るときにリング一貫性を維持する方法を示す一例の流れ図である。 ノードのリングに参加する、参加するノードの例示的状態図である。 ノードのリングを去る、リービングノードの例示的状態図である。 フェデレーション内で複製セットおよびデータ一貫性を維持するのを容易にする例のリングアーキテクチャを示す図である。 フェデレーションインフラストラクチャ内で維持される複製セット内でデータアクセストランザクションを実行する方法を示す一例の流れ図である。 フェデレーションインフラストラクチャ内で一貫した複製セットを確立し、維持する方法を示す一例の流れ図である。 動作の例示的シーケンスを示す図である。 フェデレーションインフラストラクチャ内で複製セットからデータにアクセスする例示的システムを示す図である。
本発明は、ランデブフェデレーション内でリソースを割り当て、再生する方法、システム、およびコンピュータプログラム製品におよぶ。いくつかの実施形態で、メッセージは、宛先ノードに向かってルーティングされる。受信ノードは、ノードのリング上の宛先を示す宛先識別子と共にメッセージを受信する。宛先識別子は、受信ノードと直接近傍ノードとの間で配置される。直接近傍ノードは、直接先行近傍ノードおよび直接後続近傍ノードの間から選択される。
受信ノードは、受信ノードと直接近傍ノードとの間のキャッシングされた2ウェイ合意を参照して、メッセージを受信すべき次の適当なノードを決定する。キャッシングされた2ウェイ合意は、少なくとも、受信ノードと直接近傍ノードとの間での識別子空間の責任の分割を暗示する。受信ノードは、次の適当なノードの決定に基づいて、次の適当なコンポーネントにメッセージを送信する。
他の実施形態では、現行ノードと直接近傍ノードとの間の2ウェイ合意が定式化される。ノードのリングの構成が変化したことの表示に現行ノードはアクセスする。表示は、少なくとも現行直接近傍ノードでの変化を示す。現行直接近傍ノードは、現行直接先行ノードと現行直接後続ノードとの間で選択される。この変化は、新しい直接近傍ノードをもたらす。
表示、現行ノードと新しい直接近傍ノードとの間のリング上の少なくとも非占有識別子の責任を分割する2ウェイ合意を定式化する必要のさらなる表示。現行ノードおよび新しい直接近傍ノードは、現行ノードと新しい直接近傍ノードとの間の責任境界に合意する。責任境界は、現行ノードと新しい直接近傍ノードとの間の非占有識別子の責任を分割する。現行ノードと責任境界との間の非占有識別子は、現行ノードの責任になる。同様に、責任境界と新しい直接近傍ノードとの間の非占有識別子は、新しい直接希望ノードの責任である。
本発明の実施形態は、下で詳細に述べるように、コンピュータハードウェアを含む特殊目的のまたは汎用のコンピュータを含むか利用することができる。本発明の範囲内の実施形態は、コンピュータ実行可能命令および/またはデータ構造を担持しまたは格納する物理的なおよび他のコンピュータ可読媒体をも含む。そのようなコンピュータ可読媒体は、汎用のまたは特殊目的のコンピュータシステムによってアクセスできる任意の使用可能な媒体とすることができる。コンピュータ実行可能命令を格納するコンピュータ可読媒体は、物理記憶媒体である。コンピュータ実行可能命令を担持するコンピュータ可読媒体は、伝送媒体である。したがって、限定ではなく例として、本発明の実施形態は、少なくとも2つの明瞭に異なる種類のコンピュータ可読媒体すなわち物理記憶媒体および伝送媒体を含むことができる。
物理記憶媒体は、RAM、ROM、EEPROM、CD−ROM、もしくは他の光学ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または、コンピュータ実行可能命令もしくはデータ構造の形で所望のプログラムコード手段を格納するのに使用でき、汎用コンピュータまたは特殊目的コンピュータによってアクセスできる任意の他の媒体を含む。
「ネットワーク」は、コンピュータシステムおよび/またはモジュールおよび/または他の電子デバイスの間での電子データのトランスポートを可能にする1つまたは複数のデータリンクと定義される。情報がネットワークまたは別の通信接続(有線、無線、または有線もしくは無線の組合せのいずれであれ)を介してコンピュータに転送されるか提供されるときに、そのコンピュータは、当然、その接続を伝送媒体とみなす。伝送媒体には、コンピュータ実行可能命令またはデータ構造の形で所望のプログラムコード手段を搬送するかトランスポートするのに使用でき、汎用コンピュータまたは特殊目的コンピュータによってアクセスできるネットワークおよび/またはデータリンクを含めることができる。上記の組合せも、コンピュータ可読媒体の範囲に含まれなければならない。
しかし、様々なコンピュータシステムコンポーネントに達するときに、コンピュータ実行可能命令またはデータ構造の形のプログラムコード手段を、伝送媒体から物理記憶媒体へ自動的に転送できることを理解されたい。例えば、ネットワークまたはデータリンクを介して受信されたコンピュータ実行可能命令またはデータ構造を、ネットワークインターフェースカード内のRAMにバッファリングすることができ、その後、コンピュータシステムで最終的にコンピュータシステムRAMおよび/またはより不揮発性の物理記憶媒体に転送することができる。したがって、物理記憶媒体を、伝送媒体をも(または主に伝送媒体を)利用するコンピュータシステムコンポーネントに含めることができることを理解されたい。
コンピュータ実行可能命令は、例えば、汎用コンピュータ、特殊目的コンピュータ、または特殊目的処理デバイスにある種の機能または機能のグループを実行させる命令およびデータを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間フォーマット命令、またはソースコードとすることすらできる。本主題を、構造的特徴および/または方法論的行為に固有の言葉で説明してきたが、添付の特許請求の範囲で定義される本主題が、必ずしも説明された特徴または上記行為に限定されないことを理解されたい。そうではなく、説明された特徴および行為は、特許請求の範囲を実施する例の形として開示されるものである。
いくつかの実施形態で、例えば、特殊目的集積回路またはゲートアレイなどのハードウェアモジュールが、本発明の原理を実施するために最適化される。
この説明および後続の特許請求の範囲では、「ノード」は、電子データに対する動作を実行するために一緒に働く、1つまたは複数のソフトウェアモジュール、1つまたは複数のハードウェアモジュール、あるいはその組合せと定義される。例えば、ノードのこの定義は、パーソナルコンピュータのハードウェアコンポーネントならびにパーソナルコンピュータのオペレーティングシステムなどのソフトウェアモジュールを含む。モジュールの物理的レイアウトは、重要ではない。ノードは、ネットワークを介して結合された1つまたは複数のコンピュータを含むことができる。同様に、ノードは、内部モジュール(メモりおよびプロセッサなど)が電子データに対する動作を実行するために一緒に働く、単一の物理デバイス(携帯電話機または携帯情報端末「PDA」など)を含むことができる。さらに、ノードは、例えば、特殊目的集積回路を含むルータなど、特殊目的ハードウェアを含むことができる。
本発明を、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラマブルな消費者エレクトロニクス、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話機、PDA、ポケットベル、ルータ、ゲートウェイ、ブローカ、プロキシ、ファイヤウォール、リダイレクタ、ネットワークアドレストランスレータ、および類似物を含む多数のタイプのノード構成を有するネットワークコンピューティング環境内で実践できることを、当業者は了解するであろう。本発明は、ネットワークを介してリンクされた(有線データリンク、無線データリンク、または有線データリンクと無線データリンクとの組合せのいずれかによって)ローカルノードとリモートノードとの両方がタスクを実行する、分散システム環境で実践することもできる。分散システム環境では、プログラムモジュールを、ローカルメモリストレージデバイスとリモートメモリストレージデバイスとの両方に配置することができる。
(フェデレーションアーキテクチャ)
図1に、フェデレーションインフラストラクチャ100の一例を示す。フェデレーションインフラストラクチャ100は、異なるタイプのフェデレーティングパートナーシップを形成できるノード101、102、および103を含む。例えば、ノード101、102、および103を、ルートノードなしでピアとしてお互いの間でフェデレートすることができる。ノード101、102、および103のそれぞれは、それぞれ対応するID171、182、および193を有する。
一般に、ノード101、102、および103は、フェデレーションプロトコルを使用して、パートナーシップを形成し、情報(例えば、他のノードとの相互作用に関する状態情報)を交換することができる。パートナーシップの形成および情報の交換は、より効率的で信頼できる、リソースへのアクセスを容易にする。他の中間ノード(図示せず)が、ノード101、102、および103の間に存在することができる(例えば、171と193との間のIDを有するノード)。したがって、例えば、ノード101と103との間でルーティングされるメッセージが、1つまたは複数の他の中間ノードを通過する可能性がある。
フェデレーションインフラストラクチャ100内のノード(他の中間ノードを含む)は、対応するランデブプロトコルスタックを含むことができる。例えば、ノード101、102、および103は、それぞれ対応するランデブプロトコルスタック141、142、および143を含む。プロトコルスタック141、142、および143のそれぞれは、アプリケーションレイヤ(例えば、アプリケーションレイヤ121、122、および123)および他の下位レイヤ(例えば、対応する他の下位レイヤ131、132、および133)を含む。ランデブプロトコルスタック内の各レイヤは、リソース要求を対応するリソースにランデブさせることに関連する異なる機能性の責任を負う。
例えば、他の下位レイヤは、チャネルレイヤ、ルーティングレイヤ、および機能レイヤを含むことができる。一般に、チャネルレイヤは、あるエンドポイントから別のエンドポイントへ(例えば、ノード101からノード103へ)メッセージを信頼できる形でトランスポートする(例えば、WS−ReliableMessagingおよびSimple Object Access Protocol(「SOAP」)を使用して)責任を負う。チャネルレイヤは、着信および発信の信頼できるメッセージングヘッダを処理し、信頼できるメッセージングセッションに関係する状態を維持する責任をも負う。
一般に、ルーティングレイヤは、宛先に向かう次のホップを計算する責任を負う。ルーティングレイヤは、着信および発信のアドレッシングメッセージヘッダおよびルーティングメッセージヘッダを処理し、ルーティング状態を維持する責任をも負う。一般に、機能レイヤは、参加要求、離脱要求、ping、更新、および他のメッセージなどのランデブプロトコルメッセージの発行および処理ならびにこれらのメッセージに対する応答の生成の責任を負う。機能レイヤは、ルーティングレイヤからの要求メッセージを処理し、対応する応答メッセージがある場合に、その応答メッセージをルーティングレイヤを使用して起点ノードに送り返す。また、機能レイヤは、要求メッセージを開始し、ルーティングレイヤを使用してその応答メッセージを送達させる。
一般に、アプリケーションレイヤは、機能レイヤから送達された非ランデブプロトコル固有データ(すなわち、アプリケーションメッセージ)を処理する。機能レイヤは、アプリケーションレイヤからのアプリケーションデータにアクセスし、ランデブプロトコルメッセージ内のアプリケーションデータをゲットし、プットすることができる(例えば、pingおよび更新)。すなわち、機能レイヤは、アプリケーションデータをランデブプロトコルメッセージにピギーバックさせることができ、アプリケーションデータを、受信ランデブプロトコルノード内のアプリケーションレイヤに戻して渡させることができる。いくつかの実施形態で、アプリケーションデータは、リソースおよびリソース関心を識別するのに使用される。したがって、アプリケーションレイヤは、リソースおよびリソース関心を識別するために他の下位レイヤから受け取られ、他の下位レイヤに送られるデータを処理するアプリケーション固有のロジックおよび状態を含むことができる。
(フェデレーティング機構)
ノードは、様々な異なる機構を使用してフェデレートすることができる。第1のフェデレーティング機構は、情報をすべての他のピアノードに転送するピアノードを含む。あるノードが、フェデレーションインフラストラクチャに参加するときに、そのノードは、例えば、WS−Discoveryなどのブロードキャスト/マルチキャストディスカバリプロトコルを利用して、そのプレゼンスをアナウンスし、ブロードキャスト/マルチキャストファインド(broadcast/multicast find)を発行して、他のノードを検出する。次に、ノードは、ネットワーク上に既に存在する他のノードとの単純な転送パートナーシップを確立し、新たに参加するノードとの新しいパートナーシップを受け入れる。その後、ノードは、単純にすべてのアプリケーション固有メッセージをそのパートナノードのすべてに転送する。
第2のフェデレーティング機構は、アプリケーション固有メッセージをその宛先(1つまたは複数)に最も効率的に送信するピアノードを含む。新しいノードがフェデレーションインフラストラクチャに参加するときに、その新しいノードは、例えば、WS−Discoveryなどのブロードキャスト/マルチキャストディスカバリプロトコルを利用してそのプレゼンスをアナウンスし、ブロードキャスト/マルチキャストファインドを発行して、フェデレーションインフラストラクチャの一部である他のノードを検出する。別のノードを検出したときに、新しいノードは、その別のノードとのパートナーシップを確立する。確立されたパートナーシップから、新しいノードは、フェデレーションインフラストラクチャに既に参加している他のノードのプレゼンスに関して学習する。新しいノードは、次に、これらの新たに学習されたノードとのパートナーシップを確立し、すべての新しい着信パートナーシップ要求を受け入れる。
ノード到着/離脱とあるアプリケーション固有メッセージへの関心の登録との両方が、フェデレーションインフラストラクチャを介してフラッディングされ、すべてのノードが他のパートナノードおよびアプリケーション固有メッセージへの関心の登録のグローバル知識を有することをもたらす。そのようなグローバル知識を用いて、すべてのノードが、アプリケーション固有メッセージへの関心を表したノードに直接にアプリケーション固有メッセージを送信することができる。
第3のフェデレーティング機構は、すべてのアプリケーション固有メッセージをその宛先(1つまたは複数)に間接的に転送するピアノードを含む。この第3の機構では、ノードは、例えば、128ビットまたは160ビットの識別子(ID)などのIDを割り当てられる。所与のアプリケーション固有メッセージへの関心の登録を維持する責任を負うノードは、そのIDが、アプリケーション固有メッセージの宛先アイデンティティ(例えば、URI)をこの128ビットまたは160ビットのIDにマッピングする(例えば、ハッシュ化する)ことによって入手されるIDに最も近いノードになるように決定することができる。
この第3の機構では、ノード到着および離脱は、ファブリック全体にフラッディングされる。その一方で、あるアプリケーション固有メッセージへの関心の登録は、そのような登録情報を維持する責任を負うと決定されたノードに転送される。スケーラビリティ、ロードバランシング、およびフォールトトレランスのために、あるアプリケーション固有メッセージへの関心の登録を受信するノードは、その近傍セット内でその登録情報を信頼できる形でフラッディングすることができる。指定されたノードの近傍セットは、指定されたノードのIDの両側の事前定義の範囲内のIDを有するノードのセットになるように決定することができる。
第2の機構に似て、新たに参加するノードは、例えば、WS−Discoveryなどのブロードキャスト/マルチキャストディスカバリプロトコルを利用してそのプレゼンスをアナウンスし、ローカルブロードキャスト/マルチキャストファインドを発行して、既にフェデレーションインフラストラクチャの一部であるノードを検出する。新しいノードは、発見されたノードとのパートナーシップを確立し、そのパートナーシップを使用して、フェデレーションインフラストラクチャに参加する他の新しいノードのプレゼンスについて学習する。次に、新しいノードは、新たに発見されたノードとのさらなるパートナーシップを確立し、新たな着信パートナーシップ要求のすべてを受け入れる。新しいノードは、それが責任を負う、そのパートナからのあるアプリケーションレイヤ固有リソースへの関心の着信登録を受け入れ、これらをその近傍セットにフラッディングすることができる。したがって、メッセージを、一般に、仲介ルーティングノード(例えば、新たに参加するノードがそれとパートナにされたノードまたはパートナノードがそれを知っているノード)を介して最終的な宛先に転送することができる。
着信アプリケーション固有メッセージの受信に応答して、新しいノードは、そのメッセージで指定される宛先の登録情報を維持する責任を負う可能性があるパートナノードにそのメッセージを転送する。したがって、この第3の機構を使用するときに、フェデレーションインフラストラクチャ内のすべてのノードは、他のすべてのノードのグローバル知識を有するが、登録情報は、効率的にノードの間でパーティショニングされる。アプリケーション固有メッセージは、これらのアプリケーション固有メッセージへの関心の登録情報を維持する責任を有する可能性があるパートナのノードだけを介して最終的な宛先に送信される。したがって、インダイレクションは、処理されるメッセージに関する関心の登録情報のグローバル知識を有するパートナノードのみに転送することによって達成される。これは、インダイレクションがすべてのパートナノードに転送することによって達成される第1の機構と対照的である。
第4のフェデレーティング機構は、メッセージを他のピアノードにルーティングするピアノードを含む。この第4の機構は、少なくとも、ノード到着/離脱およびあるアプリケーション固有メッセージへの関心の登録が、すべて、フラッディングされるのではなくルーティングされるという点で、第3の機構とは異なる。ルーティングプロトコルは、アプリケーション固有メッセージとそれらのアプリケーション固有メッセージへの関心を示す登録メッセージとの間のランデブを保証するように設計される。
図2に、パートナへの間接的な要求のルーティングを容易にするコンピューティングアーキテクチャ200の一例を示す。コンピューティングアーキテクチャ200は、フェデレーションインフラストラクチャに参加する、潜在的に複数のローカルディスカバリスコープにまたがって広がる複数のタイプのコンピュータおよびデバイスを示す。
ワークステーション233は、登録されたPnPプロバイダインスタンスを含むことができる。このPnPプロバイダインスタンスのプレゼンスについてそのパートナに知らせるために、ワークステーション233は、フェデレーションインフラストラクチャを介して登録要求201をルーティングする。登録要求201は、当初に、ラップトップ機231にルーティングされ、ラップトップ機231は、登録要求201をメッセージブローカ237に転送し、メッセージブローカ237は、登録要求201をメッセージゲートウェイ241に転送する。メッセージゲートウェイ241は、登録要求201内の登録情報をデータベースに保存し、成功メッセージ204をワークステーション233に返す。
その後、別の登録されたプロバイダインスタンス、今回は動作中サービスの登録されたプロバイダインスタンスが、ワークステーション233内で活動状態になる。今回は、ノードは、メッセージゲートウェイ241が登録の責任を負うことを知っており、登録要求205をメッセージゲートウェイ241に直接に転送する。メッセージゲートウェイ241は、登録要求205内の登録情報をデータベースに保存し、成功メッセージ206をワークステーション233に返す。
その後、プリンタ236(例えば、UPnPプリンタ)が、電源を入れられ、アナウンスメント207を送信する。サーバ234は、アナウンスメント207を検出し、登録要求208をメッセージブローカ237にルーティングする。メッセージブローカ237は、登録要求208をメッセージゲートウェイ241に転送する。メッセージゲートウェイ241は、登録要求208内の登録情報をデータベースに保存し、成功メッセージ210をサーバ234に返す。
その後、パーソナルコンピュータ242が、すべてのデバイスを発見するためにルックアップ要求211を発行する。パーソナルコンピュータ242は、ルックアップ要求211をどこに転送すべきかを知らないので、ワークステーション243を介してルックアップ要求211をルーティングする。登録要求およびルックアップ要求は、同一の宛先にルーティングされるので、ルーティングプロトコルは、本質的に、この2つの要求の間のランデブを保証し、ワークステーション243がファインド要求211をメッセージゲートウェイ241に転送することをもたらす。メッセージゲートウェイ241は、それによって維持される登録情報をルックアップし、ファインド要求211をワークステーション233とサーバ234との両方に転送する。ワークステーション233およびサーバ234は、それぞれ応答メッセージ214および216をパーソナルコンピュータ242に送信する。
この第4の機構は、要求で指定される登録のグローバル知識を有するノード(メッセージゲートウェイ241)に要求をルーティングする(フラッディングではなく)ことによって働く。この第4の機構は、以下でさらに詳細に説明するように、本質的に、ルーティングをO(log N)ホップで達成できることを保証する。ここで、Nは、フェデレーションインフラストラクチャに参加するノードの個数である。この第4の機構は、ノードパートナーシップと登録情報との両方を効率的にパーティショニングするので、非常に大きいネットワークに、インターネットにさえスケーリングされる。
複数のフェデレーション機構を説明したが、この説明を再検討した後に、当業者には、他のフェデレーション機構が可能であることが明白になるであろう。
(フェデレーション内のノードの間の関係)
したがって、フェデレーションは、情報をシステマティックに効率的に散布でき突き止めることができるダイナミックでスケーラブルなネットワークを形成するためにそれら自体の間で協力するノードのセットからなる。ノードは、反射性であり、反対称であり、推移的であり、全体的であり、ノードアイデンティティのドメインにわたって定義されるバイナリ関係を使用して、ソートされたリストとして、フェデレーションに参加するために編成される。ソートされたリストの両端が、結合され、これによってリングを形成する。したがって、リスト内の各ノードは、それ自体を、ソートされたリストの中央にあると見なすことができる(modulo演算を使用した結果として)。さらに、このリストは、二重にリンクされ、その結果、任意のノードが、どちらの方向でもこのリストをトラバースできるようになる。
各フェデレートするノードには、0とある固定された上界との間のIDの固定されたセットからのIDを割り当てることができる(例えば、重複検出を伴う乱数ジェネレータによって)。したがって、固定された上界のIDに1を加算することは、0のIDをもたらす(すなわち、リンクリストの終りからリンクドリステッドの先頭に戻って移動する。さらに、ノードアイデンティティの値ドメインからノード自体への1:1マッピング関数が、定義される。
図3に、一例としてリンクリスト304および対応するリング306を示す。そのようなリングを与えられて、次の関数を定義することができる。
RouteNumerically(V,Msg):ノードアイデンティティの値ドメインからの値Vおよびメッセージ「Msg」を与えられて、そのアイデンティティがマッピング関数を使用してVにマッピングされ得るノードXにメッセージを送達する。
Neighborhood(X,S):近傍(Neighborhood)は、Sと等しい濃度を有する、ノードXの両側のノードの集合である。
フェデレーション内のすべてのノードが、リングのグローバル知識を有するときに、RouteNumerically(V,Msg)は、そのアイデンティティがVにマッピング関数を適用することによって入手されるノードXに直接にMsgを送信することによって実施される。その代わりに、ノードが、他のノードの限られた(例えば、直接に隣接するノードのみの)知識を有するときに、RouteNumerically(V,Msg)は、メッセージが宛先ノードXに達するまで、そのメッセージをリングに沿って連続するノードに転送することによって実施される。
あるいは(有利なことに)、ノードは、分散バイナリサーチを実行するのに十分な、リングに関する知識を格納することができる(グローバル知識を有するか、直接隣接するノードの間のルーティングを実施する必要なしに)。リング知識の量は、構成可能であり、リング知識の維持が、各ノードに対する十分に小さい影響を有するが、ルーティングホップ数の削減から高められたルーティング性能を可能にするようになっている。
前述のように、IDを、自然数の十分に大きい有界集合(その範囲が、0とある固定された値との間(両端を含む)の数の有限集合にわたることを意味する)にわたって定義される「<」(未満)関係を使用して割り当てることができる。したがって、フェデレーションに参加するすべてのノードが、0とある適当に選択された上界との間にある(両端を含む)自然数を割り当てられる。この範囲は、狭いものである必要はなく、ノードに割り当てられる数の間にギャップを設けることができる。ノードに割り当てられる数は、リング内でのそのノードのアイデンティティとして働く。マッピング関数は、2つのノードアイデンティティの間に含まれる数を、そのアイデンティティが数値的にその数に最も近いノードにマッピングすることによって、数空間内のギャップを考慮に入れる。
この手法は、複数の利益を有する。各ノードに均一に分布する数を割り当てることによって、リングのすべてのセグメントが均一に占められる尤度が高まる。さらに、後続物、先行物、および近傍の計算を、modulo演算を使用して効率的に行うことができる。
いくつかの実施形態で、フェデレートするノードは、2つのノードが同一のIDを割り当てられる可能性が非常に低くなるのに十分に大きいID空間内からIDを割り当てられる(例えば、乱数生成が使用されるとき)。例えば、あるノードに、0からbn-1までの範囲内のIDを割り当てることができ、ここで、bは、例えば、8または16と等しく、nは、例えば、128ビットまたは160ビットと同等の桁である。したがって、あるノードに、例えば、0から1640−1(すなわち、約1.461502E48)までの範囲からIDを割り当てることができる。0から1640−1までの範囲は、例えば、インターネット上のすべてのノードに一意IDを割り当てるのに十分な個数のIDをもたらすはずである。
したがって、フェデレーション内の各ノードは、次を有することができる。
0からbn-1までの範囲内で均一に分布する数値であるIDと、
Figure 2010509871
からなるルーティングテーブル(すべての演算が、modulo bnで行われる)。
ここで、bは、基数であり、nは、桁数単位のフィールドサイズであり、uは、近傍範囲であり、vは、近傍サイズであり、演算は、modulo bnで実行される。よいルーティング効率およびフォールトトレランスのために、uおよびvの値を、u=bかつv≧max(log2(N),4)とすることができ、ここで、Nは、フェデレーションに物理的に参加するノードの総数である。Nは、例えば、IDの均一な分布があるときに、その長さがb以上であるリングセグメントに存在するノードの個数から推定することができる。bおよびnの通常の値は、b=8または16であり、n=128ビットまたは160ビットと同等の桁である。
したがって、ルーティングノードは、リングにまたがる対数インデックスを形成することができる。リング上のノードの位置に応じて、例えば、id±bi、ただしi=(1,2,...(n−1))の集合内の各数に既存ノードがあるときに、正確な対数インデックスが可能である。しかし、集合内の各数に既存のノードがない場合がある。この場合には、id±biに最も近いノードを、ルーティングノードとして選択することができる。結果の対数インデックスは、正確ではなく、集合内のいくつかの数について一意ルーティングノードを欠く場合すらある。
図3をもう一度参照すると、図3は、ソートされたリスト304および対応するリング306の形の、フェデレーションインフラストラクチャ内のノードの間のバイナリ関係の一例を示す。ソートされたリスト304のID空間は、0から28−1(すなわち255)までの範囲内にある。すなわち、b=2かつn=8である。したがって、図3に示されたノードは、0から255までの範囲のIDを割り当てられる。ソートされたリスト304は、反射性であり、反対称であり、推移的であり、全体的であり、ノードアイデンティティのドメインにわたって定義されるバイナリ関係を利用する。ソートされたリスト304の両端は、結合され、これによってリング306が形成される。これは、図3の各ノードが、それ自体をソートされたリスト304の中央にあるとみなすことを可能にする。ソートされたリスト304は、二重リンクされ、その結果、任意のノードが、どちらの方向でもソートされたリスト304をトラバースできるようになる。ソートされたリスト304(またはリング306)をトラバースするための演算は、modulo 28で実行される。したがって、255(すなわちソートされたリスト304の終り)+1=0(すなわち、リスト304の始め)である。
このルーティングテーブルは、ID64の後続物がID76である(ID64から直接に時計回りのID)ことを示す。後続物は、例えば、新しいノード(例えば、71のIDを有する)が参加するか、既存ノード(例えば、ID76)がフェデレーションインフラストラクチャを去るときに、変化し得る。同様に、このルーティングテーブルは、ID64の先行物がID50である(ID64から直接に反時計回りのID)ことを示す。後続物は、例えば、新しいノード(例えば、59のIDを有する)が参加するか、既存ノード(例えば、ID50)がフェデレーションインフラストラクチャを去るときに、変化し得る。
このルーティングテーブルは、さらに、ID64に対する近傍ノードのセットが、ID83、76、50、および46を有することを示す。近傍ノードのセットは、ID64から指定された範囲(すなわち、近傍範囲u)以内にある指定された個数のノード(すなわち、近傍サイズv)とすることができる。様々な異なる近傍サイズおよび近傍範囲、例えば、V=4およびU=10を、潜在的に、近傍ノードのセットを識別するのに使用することができる。近傍セットは、例えば、ノードがフェデレーションインフラストラクチャに参加するか去るとき、またはノードの指定された個数もしくは指定された範囲が変更されるときに、変化し得る。
このルーティングテーブルは、さらに、ID64が、ID2、30、46、50、64、64、64、64、76、83、98、135、および200を有するノードにルーティングできることを示す。このリストは、id±2i、ただしi=(1,2,3,4,5,6,7)の集合内の各数に最も近いノードを識別することによって生成される。すなわち、b=2かつn=8である。例えば、ID76を有するノードは、64+23すなわち72に最も近いノードを計算することから識別することができる。
ノードは、先行ノード、後続ノード、近傍ノードのセット内の任意のノード、または任意のルーティングノードに直接にメッセージ(例えば、リソースへのアクセスに関する要求)をルーティングすることができる。いくつかの実施形態で、ノードは、メッセージをルーティングするために数値ルーティング関数を実施する。したがって、RouteNumerically(V,Msg)をノードXで実施して、そのIDが数値的にVに最も近いフェデレーション内のノードYにMsgを送達し、ノードYのIDをノードXに返すことができる。例えば、ID64を有するノードは、RouteNumerically(243,Msg)を実施して、ID250を有するノードにメッセージをルーティングさせることができる。しかし、ID250は、ID64のルーティングノードではないので、ID64は、このメッセージをID2(243に最も近いルーティングノード)にルーティングすることができる。ID2を有するノードは、RouteNumerically(243,Msg)を実施して、ID250を有するノードにメッセージをルーティングさせる(直接にまたはさらなる仲介ノードを介して)ことができる。したがって、RouteNumerically関数が再帰的に呼び出され、各呼出しが、メッセージを宛先のより近くにルーティングするかもしれない。
近接)
有利なことに、本発明の他の実施形態は、1つまたは複数の近接カテゴリ(例えば、地理的境界、ルーティング特性(例えば、IPルーティングホップ数)、管理ドメイン、組織境界など)の複数の近接判断基準に基づく、リングのリングまたはリングのツリーへのリングのパーティショニングを容易にする。リングを、同一タイプの近接判断基準を使用して複数回パーティショニングできることを理解されたい。例えば、あるリングを、大陸近接判断基準および国近接判断基準(両方が地理的境界近接カテゴリの)に基づいてパーティショニングすることができる。
IDを、ID空間にわたって均一に分布させることができる(乱数生成の結果)ので、円形ID空間の任意の所与のセグメントが、異なる近接クラスに属するノードを含む(これらのクラスがほぼ同一の濃度を有するならば)ことの高い確率がある。この確率は、意味のある統計的挙動を得るのに十分な個数のノードがあるときに、さらに高まる。
したがって、任意の所与のノードの近傍ノードは、通常、近接の観点からはよく分散されている。パブリッシュされるアプリケーション状態を、近傍ノードの間で複製することができるので、パブリッシュされる情報を、近接の観点から同様によく分散させることができる。
図4に、近接ルーティングを容易にするリングのリング400を示す。リング401は、マスタリングまたはルートリングとみなすことができ、リング402、403、および404のそれぞれのすべてのノードを含む。リング402、403、および404のそれぞれは、指定された近接判断基準に基づいてパーティショニングされた、リング401からのノードのサブセットを含む。例えば、リング401を、地理的位置に基づいてパーティショニングすることができ、ここで、リング402は、北アメリカ内のノードを含み、リング403は、欧州内のノードを含み、リング404は、アジア内のノードを含む。
65536(216)個のIDを含む数空間内で、ID5345を有する北アメリカノードからID23345を有するアジアノードへのメッセージのルーティングは、アジアノードの近傍ノードが識別されるまでそのメッセージをリング402内でルーティングすることを含むことができる。次に、この近傍ノードが、そのメッセージをそのアジアノードにルーティングすることができる。したがって、単一ホップ(複数ホップではなく)が、北アメリカノードとアジアノードとの間で行われる。したがって、ルーティングは、リソース効率のよい形で実行される。
図5に、近接ルーティングを容易にするリングの一例の近接誘導されたパーティションツリー500を示す。図示されているように、リングのパーティションツリー500は、複数のリングを含む。リングのそれぞれは、ソートされたリンクリストの1パーティションを表す。各リングは、ソートされたリンクリスト内のIDを有する複数ノードを含む。しかし、明瞭さのために、潜在的ノードの個数に起因して、ノードは、リング上に明示的に図示されてはいない(例えば、パーティションツリー500のID空間は、b=16かつn=40である場合がある)。
パーティションツリー500内で、ルートリング501は、判断基準571(第1管理ドメイン境界判断基準)に基づいて、サブリング511、512、513、および514を含む複数のサブリングにパーティショニングされる。例えば、DNS名の各コンポーネントを、近接判断基準と考えることができ、それらの間の半順序は、右から左へ読まれるDNS名での出現の順序に従って誘導される。したがって、サブリング511を、さらに、判断基準581(第2管理ドメイン境界判断基準)に基づいて、サブリング521、522、および523を含む複数のサブリングにパーティショニングすることができる。
サブリング522を、さらに、判断基準572(地理的境界判断基準)に基づいて、サブリング531、532、および533を含む複数のサブリングにパーティショニングすることができる。位置ベースの近接判断基準を、大陸、国、郵便番号などの線に沿って半順序を付けることができる。郵便番号は、それ自体が階層的に編成され、これは、郵便番号を、近接判断基準の半順序を付けられたサブリストをさらに誘導すると見なすことができることを意味する。
サブリング531を、さらに、判断基準573(第1組織境界判断基準)に基づいて、サブリング541、542、543、および544を含む複数のサブリングにパーティショニングすることができる。近接判断基準の半順序を付けられたリストを、部、課、および製品グループなど、所与の会社がどのように組織的に構成されるかの線に沿って誘導することができる。したがって、サブリング543を、さらに、判断基準583(第2組織境界判断基準)に基づいて、サブリング551および552を含む複数のサブリングにパーティショニングすることができる。
パーティションツリー500内で、各ノードは、単一のIDを有し、ルートから始まる葉への対応するパーティションパスに沿ったリングに参加する。例えば、サブリング552に参加する各ノードは、サブリング543、531、522、および511ならびにルート501にも参加する。宛先ノード(ID)へのルーティングは、次のように、RouteProximally関数を実施することによって達成することができる。
RouteProximally(V,Msg,P):ノードアイデンティティのドメインからの値Vおよびメッセージ「Msg」を与えられて、近接判断基準Pによって同等と考えられるノードの間でそのアイデンティティをVにマッピングできるノードYにメッセージを送達する。
したがって、ルーティングを、所与のリング内でルーティングすることによってさらなる進行を行えなくなる(宛先ノードが現行ノードとその後続ノードまたは先行ノードとの間にあるという条件から判定される)まで、そのリング内で宛先ノードのより近くに徐々に移動することによって達成することができる。この点で、現行ノードは、それが参加する次により大きいリング内のパートナノードを介してルーティングを開始する。ルートリングに向かってパーティショニングパスに沿って登ることによって宛先ノードに向かって徐々に移動するこのプロセスは、宛先ノードに最も近いノードに、RouteProximally呼出しで最初に指定された要求された近接コンテキスト内で達するときに、打ち切られる。
ルーティングホップは、宛先ノードがその外に存在するので近傍内でさらなる進行を行えなくなるまで、要求を発したノードの近接近傍内に残ることができる。さらなる進行を行えなくなった点で、近接判断基準は、さらなる進行を行うために近接近傍のサイズを増やすために緩和される。このプロセスは、近接近傍が宛先ノード(ID)を含むのに十分に拡がるまで繰り返される。近接近傍判断基準の各連続する緩和の後に行われるルーティングホップは、以前のホップと比較して数空間内で相対的により小さいジャンプを行いながら、近接空間内で潜在的により大きいジャンプとすることができる。したがって、絶対に必要な個数のそのような(リング間)ホップだけが、宛先に達する前に行われる。
パブリッシュされるアプリケーションデータが、宛先ノードの近傍ノードの間で複製されるときに、パーティションツリーを下って複製されるので、いくつかのホップが、ルックアップメッセージについて回避されるかもしれない。
近接ルーティングを達成するために、各フェデレーションノードは、それがメンバとして参加するすべてのリング内の後続ノードおよび先行ノード(単一リングに関する後続物および先行物に類似する)すなわち、近接先行物、近接後続物、および近接近傍への参照を維持する。ルーティングを効率的にするために、ノードは、リングのいずれかの半分で指数関数的に増加する距離に最も近い他のノードへの参照を、ルーティングパートナとして維持することもできる(単一リングのルーティングノードに類似する)。いくつかの実施形態で、連続する後続ノードの対の間または連続する先行ノードの対の間にあるルーティングパートナノードは、現行ノードと、それぞれ後続ノード対または先行ノード対の間でそれに数値的に最も近いノードとによって共有される同一の最下位のリングに参加する。したがって、宛先ノードに向かうルーティングホップは、さらなる進行を行うために絶対に必要であるときに限って、緩和された近接判断基準の使用に推移する(すなわち、より上位のリングへの推移)。したがって、メッセージを、対応するフェデレーションノードと効率的にランデブさせることができる。
いくつかの実施形態で、ノードは、同等性判断基準関係に基づいてメッセージをルーティングするために近接ルーティング関数を実施する。したがって、数Vおよびメッセージ「Msg」を与えられて、ノードは、近接判断基準Pによって同等と考えられるノードの間でそのアイデンティティをVにマッピングできるノードYにメッセージを送達するようにRouteProximally(V,Msg,P)を実施することができる。近接判断基準Pは、それによって近接的に同等と考えられるすべてのノードの共通の先祖であるパーティションツリー内の最下位リングを識別する。これは、パスセパレータ文字「/」によって分離される、ルートリングからそれによって識別されるリングまでの経路に沿って見つかる近接判断基準を連結することによって得られるストリングとして表すことができる。例えば、サブリング542を識別する近接判断基準を「Proximity:/.COM/Corp2/LocationA/Div2」と表すことができる。パーティションツリー500内の各リングに、例えば、それを表すストリングをSHAベースのアルゴリズムを用いてハッシュ化することによって、一意の数を割り当てることができる。数0が、ルートリングに予約される場合に、RouteNumerically(V,Msg)≡RouteProximally(V,Msg,0)であると推論することができる。
例えば、サブリング544内のノードは、サブリング531内のより近い(例えば、サブリング513内のノードに)ノードを識別するようにRouteProximallyを実施することができる。サブリング531は、サブリング522内のより近いノードを識別するようにRouteProximallyを実施することができる。同様に、サブリング522は、サブリング511内のより近いノードを識別するようにRouteProximallyを実施することができる。同様に、サブリング511は、リング501内のより近いノードを識別するようにRouteProximallyを実施することができる。したがって、RouteProximally関数が、再帰的に呼び出され、各呼出しが、宛先のより近くにメッセージをルーティングするかもしれない。
したがって、近接判断基準を考慮に入れるときに、最終的な宛先へのパス上のルーティングホップは、宛先ノードに達するか、あるいは選択された近接判断基準の下でさらなる進行を行うことができなくなる(その点で、近接判断基準は、宛先に向かうさらなる進行を行うのにちょうど十分なだけ緩和される)かのいずれかになるまで、数空間内で起点ノードと宛先ノードとの間で意味のある進行を行いながら、要求を発したノードの近傍内に残ることができる。例えば、近接判断基準を、メッセージをリング531からリング522までルーティングするのに十分に緩和することなどができる。
近接性への上の手法を利用すると、パブリッシュされる情報を所与のリングに閉じ込めることが可能である。例えば、組織は、組織固有の情報が(1)彼らのドメインの外部のノードへの近接複製の形で暗黙のうちに、または(2)そのような情報に関するルックアップ要求にサービスすることという形で明示的に、のいずれかで、彼らの信頼ドメインの外部のエンティティに使用可能ではないことを保証することを好む可能性がある。第1の態様は、パブリッシュされる情報を、指定されたリング内のターゲットIDの近傍のノードの間だけで複製することによって満足される。あるノードが発するすべてのメッセージが、ルートリングに向かってそれが属するリングを連続して登ることによってルーティングされるので、ある組織内で発するすべてのルックアップ要求が、それに閉じ込められたパブリッシュされた情報を突き止めることができ、これによって、暗黙のうちに第2の態様を満足する、高い尤度がある。
また、組織は、ノードが彼らの信頼ドメインの外部のノードと自動的にフェデレートすることを嫌う。これは、例えば、訪問販売員が、彼/彼女のラップトップコンピュータを顧客の建物内のネットワークに接続するときに発生し得る。理想的には、販売員に属するラップトップコンピュータは、そのホームドメイン内でパブリッシュされた情報を突き止め、かつ/またはその最下位の好ましい近接リングから始まるそのホームドメイン内のノードとフェデレートすることを望む。通常、顧客のドメイン内のノードとフェデレートすることは、許可されない。このシナリオをサポートするには、ホームドメイン内のシードノード(seed node)を突き止める能力が必要である。そのようなシードノードは、ホームドメイン内でパブリッシュされた情報を突き止めるのに、ホームフェデレーションに参加するのに、ドメインにまたがってパブリッシュされる情報を選択的にインポートし、エクスポートするのに、および他のノードによって提出された衝突する異常報告をアービトレートする1つの可能な形として、使用することができる。シードノードは、時々、メッセージゲートウェイとも呼ばれる。
他の実施形態では、エンティティは、ルートリング内でシードノードへの参照をパブリッシュする。シードノードは、リングに関連する(ターゲットIDとして)一意の数(それを表すストリングをハッシュ化することによって得られる数など)でパブリッシュすることができる。シードノード情報を、さらに、ルートリング内の対応するターゲットIDへのパス上にある様々なリング内のノードによってオンデマンドキャッシングすることができる。そのようなオンデマンドキャッシングは、改善された性能と、準静的情報が非常に頻繁にルックアップされるときに発生し得るホットスポットの減少とをもたらす。シードノード情報を、DNSなどの他の手段を介して入手することもできる。
閉じ込められたパブリッシュされた情報のフォールトトレランス(fault tolerance)を提供するために、各ノードが、それが参加するすべてのリングの近傍ノードのセットを維持することができる。上記を考慮すると、ノードによって維持される状態を、次のように要約することができる。
・ 0からbn−1までの範囲に均一に分布する数値であるID。
・ 次からなるルーティングテーブル(すべての演算はmodulo bnで行われる)
○ ノードが参加するリングのそれぞれ、例えば、リングdについて、
Figure 2010509871
○ 適当にsd≦id+bi≦sd+1またはpd+1≦id−bi≦pdになるr±i=RouteProximally(id±bi,updateMsg,d)になるルーティングノード(r-(n-1),...,r-1,r1,...,rn-1
ここで、bは、基数であり、nは、桁数単位のフィールドサイズであり、uは、近傍範囲であり、vは、近傍サイズである。
リング「d」内の所与のノードによって維持される近傍ノードのサブセットが、その所与のノードがやはり参加する子リング「d+1」内の近傍ノードとしてもう一度現れ得ることに留意されたい。したがって、所与のノードが参加するD個のリングのすべてにまたがってその所与のノードによって維持される近傍ノードの総数に対する上界を、D*max(u,v)/2として導出することができる。これは、所与のノードに対する1つの参照だけが保存されることを考慮したものであり、ワーストケース上界は、バランスのとれたツリーに関する。
リングが、複数の対応する兄弟サブリングにパーティショニングされるときに、指定されたノードが、例えば、エイリアシング(aliasing)を介して、複数の対応する兄弟サブリングのうちの複数に同時に参加することが許可されることに留意されたい。エイリアシングは、例えば、異なるサブリングからの、異なる状態を、指定されたノードに関連付けるために実施することができる。したがって、所与のノードのエイリアスは、同一のIDを有するが、各エイリアスは、別個の状態を関連付けられることができる。エイリアスは、指定されたノードが、必ずしもより特定の近接判断基準の共通の先祖ではない別個の近接判断基準を有する複数のリングに参加することを可能にする。すなわち、指定されたノードは、近接ツリーの複数の枝に参加することができる。
例えば、二重NIC(有線および無線)ラップトップ機を、そのラップトップ機と同一のLANセグメントを共有する他の無線ノードと有線ノードとの両方と近接的に同等と考えることができる。しかし、これらの2つの別個の近接判断基準を、例えば、組織メンバシップに基づくものなど、異なるより高い優先順位の近接判断基準の適用の後に限って適用可能なサブ判断基準としてモデル化することができる。そのラップトップ機は、同一の組織に属するので、1)有線LANセグメント内のメンバシップおよび、2)無線LANセグメント内のメンバシップを表す2つのサブリング内のエイリアス化されたノードは、そのラップトップ機が属する組織を表すリング内の単一のノードにマージされる。RouteProximallyが、エイリアシングの存在下でまったく変更なしに期待されたとおりに働くことを理解されたい。
各近接リングを、(潜在的に異なる)リングパラメータに従って構成することができる。リングパラメータは、近傍を定義する(例えば、リングパラメータは、近傍範囲、近傍サイズ、pingメッセージおよびdepartメッセージのタイミング、ならびにpingメッセージおよびdepartメッセージの分布パターンを表すことができる)か、特定のフェデレーティング機構を示す(例えば、前述の第1から第4までのフェデレーティング機構の中からまたは他のフェデレーティング機構の中から)か、同一の近接リング内のルーティングパターンの間での通信の詳細を定義するのに使用することができる。一部のリングパラメータは、より一般的とし、複数の異なるフェデレーティング機構に適用することができるが、他のリングパラメータは、より固有であり、特定のタイプのフェデレーティング機構に適用される。
より高いレベルの近接リングを構成するのに使用されるリングパラメータを、いくつかの実施形態で、より低いレベルの近接リングによって継承することができる。例えば、リング543が、リング531のリングパラメータ(リング522から継承されるなど)の一部を継承するかもしれない。したがって、リング531に関連する近傍サイズおよび近傍範囲は、リング541にも関連する。
しかし、継承されたリングパラメータを変更することができ、および/または、近接リングを異なるリングパラメータに従って個別に構成することができる。例えば、リング511が、多数のノードを含む管理ドメイン用であり、したがって、上記第4のフェデレーティング機構が、リング511により適当であるかもしれない。その一方で、リング521が、比較的少数のノードを有する小さい会社用であり、したがって、上記第2のフェデレーティング機構が、リング521により適当であるかもしれない。したがって、リング521に関連するリングパラメータに、リング511に関連するリングパラメータと異なる値をセットすることができる(あるいは、継承されたパラメータをリング511に関連するリングパラメータに変更することができる)。例えば、特定のタイプのフェデレーティング機構を示すリングパラメータを、リング511と521との間で異なるものにすることができる。同様に、近傍を定義するパラメータを、リング511と521との間で異なるものにすることができる。さらに、リング521を、上記第2のフェデレーティング機構に固有の特定のパラメータに従って構成することができるが、リング511は、上記第4のフェデレーティング機構に固有の追加の特定のパラメータに従って構成される。
したがって、近接リングを、その近接リング内のノードの特性(例えば、個数、含まれるリソースなど)に基づいて柔軟に構成することができる。例えば、管理者は、構成プロシージャを使用して(例えば、ユーザインターフェースを介して)近接リングのリングパラメータを選択することができる。構成プロシージャは、近接リングの間の継承関係の構成ならびに例えば、他の形で継承されるリングパラメータをオーバーライドするためなどの個々の近接リングの構成を容易にすることができる。
図8に、フェデレーションインフラストラクチャのノードをパーティショニングする方法800の一例の流れ図を示す。方法800を、図5のツリー500のパーティションのリングに関して説明する。方法800は、フェデレーションインフラストラクチャ内のノードに割り当てられたノードIDを含むソートされたリンクリストにアクセスする行為(行為801)を含む。例えば、リング501によって表されるソートされたリンクリストにアクセスすることができる。ソートされたリンクリストのノードID(リング501に示されたノード)は、フェデレーションインフラストラクチャ(例えば、フェデレーションインフラストラクチャ100)内のノードを表すことができる。
方法800は、ソートされたリンクリストをパーティショニングするための複数の異なる近接判断基準を表す近接カテゴリにアクセスする行為(行為802)を含む。例えば、ドメイン境界561、地理的境界562、および組織境界563を表す近接判断基準にアクセスすることができる。しかし、信頼ドメイン境界などの他の近接判断基準も、アクセスされた近接判断基準内で表され得る。近接カテゴリには、近接判断基準の以前に作成された半順序を付けられたリストを含めることができる。リングを、近接判断基準の半順序を付けられたリストに基づいてパーティショニングすることができる。
方法800は、第1近接判断基準に基づいて、ソートされたリンクリストを1つまたは複数の第1サブリストにパーティショニングする(1つまたは複数の第1サブリストのそれぞれは、ソートされたリンクリストからのノードIDの少なくともサブセットを含む)行為(行為803)を含む。例えば、リング501を、判断基準571に基づいてサブリング511、512、513、および514にパーティショニングすることができる。サブリング511、512、513、および514のそれぞれが、リング501からのノードIDの異なるサブセットを含むことができる。
方法800は、第2近接判断基準に基づいて、1つまたは複数の第1サブリストの中から選択された第1サブリストを1つまたは複数の第2サブリストにパーティショニングする(1つまたは複数の第2サブリストのそれぞれは、第1サブリストに含まれるノードIDの少なくともサブセットを含む)行為(行為804)を含む。例えば、サブリング511を、判断基準581に基づいてサブリング521、522、および523にパーティショニングすることができる。サブリング521、522、および523のそれぞれは、サブリング511からのノードIDの異なるサブセットを含むことができる。
図9に、ノードのルーティングテーブルを移植する方法900の一例の流れ図を示す。方法900を、図3のソートされたリンクリスト304およびリング306に関して説明する。方法900は、先行ノードをルーティングテーブルに挿入する(先行ノードは、ソートされたリンクリストの第1方向で現行ノードに対して現行ノードに先行する)行為(行為901)を含む。例えば、ID50を有するノードを、ID64を有するノード(現行ノード)の先行物としてルーティングテーブルに挿入することができる。時計回りの方向321で(ソートされたリンクリスト304の終りAからソートされたリンクリスト304の終りBに向かって)移動すると、ID50を有するノードは、ID64を有するノードに先行する。先行ノードの挿入は、現行ノードと先行ノードとの間に対称パートナーシップを確立することができ、現行ノードが、先行ノードのパートナになり、先行ノードが、現行ノードのパートナになる。
方法900は、後続ノードをルーティングテーブルに挿入する(後続ノードは、ソートされたリンクリストの第1方向で現行ノードに対して現行ノードに後続する)行為(行為902)を含む。例えば、ID76を有するノードを、ID64を有するノード(現行ノード)の後続物としてルーティングテーブルに挿入することができる。反時計回りの方向322で移動すると、ID76を有するノードは、ID64を有するノードに先行する。後続ノードの挿入は、現行ノードと後続ノードとの間に対称パートナーシップを確立することができ、現行ノードが、後続ノードのパートナになり、後続ノードが、現行ノードのパートナになる。
方法900は、適当な近傍ノードをルーティングテーブルに挿入する(近傍ノードは、近傍範囲および近傍サイズに基づいて、第1方向と第2の反対の方向との両方で、ソートされたリンクリストから識別される)行為(行為903)を含む。例えば、ID83、76、50、および46を有するノードを、ID64を有するノード(現行ノード)の近傍ノードとしてルーティングテーブルに挿入することができる。20の近傍範囲および近傍サイズ4に基づいて、ID83および76を有するノードを、時計回りの方向321で識別することができ、ID50および46を有するノードを、反時計回りの方向322(ソートされたリンクリスト304の終りBからソートされたリンクリスト304の終りAに向かって移動する)で識別することができる。いくつかの環境で、適当な近傍ノードが識別されないかもしれない。近傍ノードの挿入は、現行ノードと近傍ノードとの間に対称パートナーシップを確立することができ、現行ノードが、近傍ノードのパートナになり、近傍ノードが、現行ノードのパートナになる。
方法900は、適当なルーティングノードをルーティングテーブルに挿入する(ルーティングノードは、フェデレーションインフラストラクチャのID空間の基数およびフィールドサイズに基づいて第1方向と第2方向との両方でソートされたリンクリストから識別され、ルーティングノードは、第1方向と第2方向との両方でソートされたリンクリストの対数インデックスを表す)行為(行為904)を含む。例えば、ID2、30、46、50、64、64、64、64、64、76、83、98、135、および200を有するノードを、ID64を有するノードのルーティングノードとしてルーティングテーブルに挿入することができる。基数2および8のフィールドサイズに基づいて、ID64、64、76、83、98、135、および200を有するノードを、方向321で識別することができ、ID64、64、50、46、30、2、および200を有するノードを、方向322で識別することができる。内側リング306に示されているように、ルーティングノードは、時計回りの方向321と反時計回りの方向322との両方でのソートされたリンクリストの対数インデックスを表す。ルーティングノードの挿入は、現行ノードとルーティングノードとの間に対称パートナーシップを確立することができ、現行ノードが、ルーティングノードのパートナになり、ルーティングノードが、現行ノードのパートナになる。
図7に、近接判断基準を考慮に入れるノードルーティングテーブルを移植する方法700の一例の流れ図を示す。方法700を、図5のリングに関して説明する。方法700は、現行ノードが参加する階層的にパーティショニングされたルーティングリングのそれぞれの先行ノードをルーティングテーブルに挿入する行為(行為701)を含む。各先行ノードは、現行ノードが参加する各階層的にパーティショニングされたルーティングリング内で第1方向(例えば、時計回り)で現行ノードに先行する。階層的にパーティショニングされたルーティングリングは、対応する近接判断基準に従ってパーティショニングされ、両方向リンクリストの少なくともサブセット(おそらくは両方向リンクリスト全体)を含む。例えば、指定されたノードが、ルートリング501ならびにサブリング511、522、523、531、および542に参加するかもしれない。したがって、先行ノードは、リング501ならびにサブリング511、522、523、531、および542のそれぞれの中から、指定されたノードについて選択される。
方法700は、現行ノードが参加する階層的にパーティショニングされたルーティングリングのそれぞれの後続ノードをルーティングテーブルに挿入する行為(行為702)を含む。各後続ノードは、現行ノードが参加する各階層的にパーティショニングされたルーティングリング内で第1方向で現行ノードに後続する。例えば、後続ノードは、リング501ならびにサブリング511、522、523、531、および542のそれぞれの中から、指定されたノードについて選択される。
方法700は、現行ノードが参加する階層的にパーティショニングされたルーティングリングのそれぞれの適当な近傍ノードをルーティングテーブルに挿入する行為(行為703)を含む。近傍ノードは、現行ノードが参加する階層的にパーティショニングされたルーティングリングから、近傍範囲および近傍サイズに基づいて第1方向(例えば、時計回り)と第2の反対の方向(例えば、反時計回り)との両方で識別することができる。例えば、近傍ノードを、リング501ならびにサブリング511、522、523、531、および542のそれぞれの中から、指定されたノードについて識別することができる。
方法700は、現行ノードが参加する階層的にパーティショニングされたルーティングリングのそれぞれの適当なルーティングノードをルーティングテーブルに挿入する行為(行為704)を含む。例えば、ルーティングノードを、リング501ならびにサブリング511、522、523、531、および542のそれぞれの中から、指定されたノードについて識別することができる。
いくつかの実施形態で、適当なルーティングノードが、ノードYが参加する葉リング(または、エイリアシングを利用する実施形態では複数の葉リング)を除く近接リングdごとに挿入される。適当なルーティングノードを、次の式に基づいて挿入することができる。
Y.sd.id<Y.id+bi<Y.sd+1.idが真である場合には、リングdを使用し、あるいは、
Y.pd.id<Y.id−bi<Y.pd+1.idが真である場合には、リングdを使用する。
リングが、前のステップで識別されなかった場合には、リード(例えば、リング501)リングをリングdとして使用する。今や、リングdは、ノードYがzに最も近いルーティングパートナをそこで探さなければならない近接リングである。
図10は、メッセージを宛先ノードに向かってルーティングする方法1000の一例の流れ図を示す。方法1000を、図3のソートされたリンクリスト304およびリング306に関して説明する。方法1000は、受信ノードが宛先を示す数と一緒にメッセージを受信する行為(行為1001)を含む。例えば、ID64を有するノードが、212という宛先を示すメッセージを受信することができる。
方法1000は、受信ノードが、対応する先行ノードより宛先から数値的に遠いおよび対応する後続ノードより宛先から数値的に遠い、のうちの少なくとも1つであることを判定する行為(行為1002)を含む。例えば、方向322で、ID64は、ID50より宛先212から遠く、方向321で、ID64は、ID76より宛先212から遠い。方法1000は、宛先が受信ノードに対応するノードの近傍セット内にないことを判定する行為(行為1003)を含む。例えば、ID64を有するノードは、宛先212が83、76、50、および46という近傍セット内にないことを判定することができる。
方法1000は、受信ノードに対応するルーティングテーブルから、対応するルーティングテーブル内の他のルーティングノードより宛先に数値的に近い中間ノードを識別する行為(行為1004)を含む。例えば、ID64を有するノードは、他のルーティングノードより宛先212に数値的に近いものとしてID200を有するルーティングノードを識別することができる。方法1000は、中間ノードにメッセージを送信する行為(行為1005)を含む。例えば、ID64を有するノードは、ID200を有するノードにメッセージを送信することができる。
図11に、近接判断基準に基づいてメッセージを宛先ノードに向かってルーティングする方法1100の一例の流れ図を示す。方法1100を、図4および図5のリングに関して説明する。方法1100は、受信ノードが宛先を示す数および近接判断基準と一緒にメッセージを受信する行為(行為1101)を含む。近接判断基準は、ノードの1つまたは複数のクラスを定義する。受信ノードは、近接判断基準に基づいてノードの1つまたは複数のクラスの中から選択されたノードの現行クラスの一部としてメッセージを受信する。例えば、ID172を有するノードは、201という宛先およびこの宛先ノードがリング401によって表されるクラスの一部であることを示す近接判断基準を示すメッセージを受信する。ID172を有するノードは、リング404の一部としてこのメッセージを受信することができる。
方法1100は、受信ノードが、ノードの選択されたクラス内のノードの中で、対応する先行ノードより宛先から数値的に遠いおよび対応する後続ノードより宛先から数値的に遠い、のうちの少なくとも1つであることを判定する行為(行為1102)を含む。例えば、リング404内で、ID172を有するノードは、時計回りの方向でID174を有するノードより宛先201から遠く、反時計回りの方向でID153を有するノードより宛先201から遠い。
方法1100は、宛先が、近接判断基準によって定義されるノードの1つまたは複数のクラスのいずれかについて受信ノードのノードの近傍セット内にないことを判定する行為(行為1103)を含む。例えば、ID172を有するノードは、宛先201がリング404またはリング401内の対応する近傍セット内にないことを判定することができる。
方法1100は、受信ノードのルーティングテーブルから、ルーティングテーブル内の他のルーティングノードより宛先に数値的に近い中間ノードを識別する行為(行為1104)を含む。例えば、ID172を有するノードは、リング404内の他のルーティングノードより宛先201に数値的に近いものとして、ID194を有するノードを識別することができる。方法1100は、中間ノードにメッセージを送信する行為(行為1105)を含む。例えば、ID172を有するノードは、受信されたメッセージをID194を有するノードに送信することができる。ID172を有するノードは、近接判断基準の以前に定義された半順序を付けられたリストを尊重するために、受信されたメッセージをID194を有するノードに送信することができる。
ノード194は、リング404内でできる限り宛先201に近いものとすることができる。したがって、近接を、次のレグ内のリング404内で宛先に向かうさらなるルーティングを行うことを可能にするのにちょうど十分に緩和することができる。すなわち、ルーティングは、リング404上で宛先に向かうさらなる進行を行えないので、リング404からリング401に推移される。あるいは、ID201を有するノードが、リング401内のID194を有するノードの近傍内にあり、さらなるルーティングをもたらさないかもしれない。したがって、いくつかの実施形態で、次に上位のリングに進むための近接判断基準の緩和は、さらなるルーティングを引き起こすのに十分である。
しかし、他の実施形態では、次に上位のリングへの推移を引き起こす近接判断基準の増分緩和が、さらなるルーティングを行えるまで(またはルートリングに出会うまで)継続される。すなわち、より上位のリングへの複数の推移が、さらなるルーティング進行を行えるようになる前に発生する。例えば、ここで図5を参照すると、さらなるルーティング進行をリング531で行えないときに、近接判断基準を、リング511へまたはルートリング501へすら推移するのに十分に緩和することができる。
(ノードフェーズ)
フェデレーションインフラストラクチャに参加するノードは、異なる動作フェーズで動作することができる。あるノードの有効なフェーズ値を、順序付きセットのメンバになるように定義することができる。例えば、{NodeId}.{InstanceIds}.{Phase Value[Phase-State Values: Inserting, Syncing, Routing, Operating].[Phase.Unknown Indication: phase known at time of transmission, phase unknown at time of transmission]}は、フェデレーションインフラストラクチャ内の所与のノードのフェーズ空間を表す1つの可能な順序付きセットを定義する。ノードインスタンスは、ノードフェーズ状態を介してInserting(挿入中)からSyncing(同期中)、次にRouting(ルーティング中)、次にOperating(動作中)の順番で推移する(または前進する)ことができる。さらに、いくつかの実施形態で、ノードインスタンスを、ノードインスタンスが以前のノードフェーズ状態に戻って推移しなくなるように構成することができる。いくつかの実施形態で、ノードは、ノードが発生するたびにそのインスタンスIDを進める。
例えば、ノードインスタンスが、RoutingからSyncingに戻って、(またはInsertingに戻って)推移するのを防ぐことができる。したがって、いくつかの実施形態で、所与のノードインスタンス(例えば、(NodeId,InstanceId)によって識別される)が、特定のノードフェーズ状態(例えば、Operating)に進んだことがわかっているときには、その所与のノードインスタンスが、以前のノードフェーズ状態(例えば、Routing、Syncing、またはInserting)に戻る可能性が低い(いくつかの実施形態では戻らない)こともわかる。したがって、特定のノードフェーズ状態の前のノードフェーズにある任意のノードインスタンスが、そのノードの新しい(前進した)インスタンスであることのかなりの尤度がある。
いくつかの実施形態で、フェーズ情報および対応するインスタンスId(ノードが発生するたびに進む)は、一緒に転送される。したがって、同一インスタンスのより低いノードフェーズ状態はより古いと判定することが可能である。さらに、より新しいノードインスタンスが既知である(任意のフェーズ状態値で)ときに、より古いインスタンスに関するすべての情報が、期限切れと考えられる。
時々、ノードは、例えば、最初のスタートアップ時、正常な離脱(graceful departure)を介して、または異常終了(クラッシュ)の結果として、リブートするかお互いとの通信を失う可能性がある。したがって、任意のノードフェーズ状態にあるノードが、リブートするか他のノードとの通信を失う可能性がある。例えば、クラッシュが、Routingフェーズ状態にあるノードにリブートさせる可能性がある。リブートまたは通信の消失の間には、あるノードがどのノードフェーズ状態にあるかを判定する形がない可能性がある。したがって、ノードがリブートしつつあるか、ノードへの通信が失われるときに、[Phase.Unknown Indication]をセットして、そのノードのフェーズ状態が現在は未知であることを示すことができる。しかし、そのノードについて以前に表されたかつ/または検出されたフェーズ状態のすべてが、維持され得、失われない。
[Phase.Unknown Indication]は、フェーズ状態値が送信されたときにフェーズ状態が既知であった(例えば、phase.unknownをセットされていないフェーズ値)かどうか、またはフェーズ状態が以前に表されたフェーズ状態であり、フェーズ状態が送信されたときにフェーズ状態が未知であった(例えば、phase.unknownをセットされたフェーズ値)かどうかを示すのに使用することができる。したがって、あるノードのフェーズ(そのフェーズ値)は、フェーズ状態値とphase.unknown表示との両方を使用して表すことができる。
(参加プロトコル)
時々、ノードは、既存のフェデレーションに参加し、既存フェデレーションから離脱することができる。ノードは、フェデレーションへの参加および離脱のための適当なプロトコルを実施することができる。例えば、ノードは、既存フェデレーションの一部になるためにJoin()関数を実施することができる。Join()関数を実施するノードは、最終的な動作フェーズ状態に達する前に、3つの順序付きフェーズ状態すなわち、挿入中フェーズ状態、同期中フェーズ状態、およびルーティング中フェーズ状態を介して推移することができる。他の実施形態では、これらの特定の順序付きフェーズ状態が存在しないが、他のフェーズ状態が定義される場合がある。図12Aに、フェデレーションインフラストラクチャ内でメンバシップを確立するノードの一例を示す。図12Bに、メッセージを交換するフェデレーションインフラストラクチャ内のノードの一例を示す。
挿入フェーズ:ノードYは、少なくともそのノードIDを含み、フェデレーションへの参加アクションを示す参加メッセージを発行することによってこのフェーズ状態に入る。参加メッセージは、そのdestinationプロパティに新たに参加するノードのアイデンティティをセットされた、新たに参加するノード(ノードY)によって送信されるルーティングされるメッセージとすることができる。このフェーズ状態では、新たに参加するノードは、フェデレーション内でその先行ノードと後続ノードとの間に挿入される。この挿入フェーズ状態は、次のアルゴリズムに従って実施することができる(すべての演算は、modulo bnで実行される)。
IP1 Yは、既に、参加するノードがそこからフェデレーションに参加することを望む最下位リングの一部である、既存ノードを識別する。これは、静的に構成するか、DHCPおよび/またはDNSおよび/またはWS−Discoveryまたは(潜在的に周知の)定数を使用して動的に発見するかのいずれかとすることができる。この既存フェデレーションノードを、Eとする。
IP2 Yは、E.RouteNumerically(Y,joinMsg)を呼び出して、そのIDがノードYが参加するすべての近接リング内でY.idに数値的に最も近いノードXを判定する。これには、参加メッセージを複数のノードにルーティングすることを含めることができる。
IP3 数値的に後続するノード(s)および数値的に先行するノード(p)を判定する(次の挿入を行うのに必要なデータを、参加メッセージおよびその応答内で担持できることに留意されたい。したがって、必要な追加のラウンドトリップはない)。
ケース1:X.id>Y.id
Y.s=X、Y.p=X.p、X.p.s=Y、およびX.p=Y
ケース2:X.id<Y.id
Y.p=X、Y.s=X.s、X.s.p=Y、およびX.s=Y
参加メッセージに応答して、ノードX(参加メッセージを処理したノード)は、参加応答をノードYに送り返すことができる。参加応答は、ノードYの先行ノード(Y.p)および後続ノード(Y.s)を示すことができる。ノードYは、参加応答を受信し、参加応答を処理して、その先行ノードおよび後続ノードを知ることができる。参加応答を処理した後に、ノードYは、フェデレーション内の弱いルーティング参加者になることができる。例えば、ノードYは、単純に、それに送信されたメッセージをその後続ノードまたは先行ノードのいずれかに転送することができる。したがって、ノードYは、フェデレーションインフラストラクチャに挿入されるが、ルーティングテーブルおよび近傍テーブルは、移植されない。この点に達する前に、ノードYは、ノードYのライブネスフェーズが挿入中フェーズ状態であることを示す状況メッセージを送信ノードに返すことによって、それにメッセージを送信する他のノードに、それに送信されたメッセージを異なるノードを介してリダイレクトするように要求する。
一般に、時々、ノードは、sync(同期)要求メッセージおよびsync応答メッセージを交換することができる。sync要求メッセージおよびsync応答メッセージは、送信側の観点からの他のノードに関するライブネス情報(例えば、ヘッダ)を含むことができる。近傍状態をも、sync要求メッセージおよびsync応答メッセージに含めることができ、近傍のアプリケーションレイヤが、お互いの状態を知るようになる。sync要求メッセージおよびsync応答メッセージが交換されるときの1つの例が、参加するノードの同期化中フェーズ状態中である。しかし、sync要求メッセージおよびsync応答メッセージを、他の動作フェーズ状態中(例えば、Operatingフェーズ状態にいる間)に交換することができる。
図16に、メッセージモデルおよび関連する処理モデル1600の一例を示す。図16に示されているように、ノードは、sync要求メッセージを送信し、受信することができる。例えば、sync要求メッセージ1601を、新たに挿入されたノード(例えば、ID144を有する図12Bのノード)から、機能レイヤ1651で受信することができる。アプリケーションデータ1602(例えば、名前空間添字)を、sync要求メッセージ1601内にピギーバックすることができる。機能レイヤ1651は、sync要求メッセージ内に含まれるすべてのアプリケーションデータについてアプリケーションレイヤ1652に知らせることができる。例えば、機能レイヤ1651は、アプリケーションレイヤ1652に対して、アプリケーションデータ1602を含む近傍状態syncイベント1603を呼び出すことができる。アプリケーションデータ1607を含むsync要求1631を、別のノードに送信することもでき、この別のノードは、処理モデル1600内のsync要求1601に対する処理に似て、sync要求1631を処理する。
いくつかの機能レイヤイベント(例えば、sync要求メッセージ1601、sync応答メッセージ1641、またはpingメッセージ1609)に応答して、機能レイヤ1651は、アプリケーションレイヤ1652内の近傍状態要求機能1604を呼び出すことができる。近傍状態要求1604は、近傍内で伝搬される必要がある状態を入手する、アプリケーションレイヤに対する要求である。近傍状態要求1604に応答して、アプリケーションレイヤ1652は、オプションのアプリケーションデータ1607を含む近傍状態1606を機能レイヤ1651に供給することができる。あるいは、アプリケーションレイヤ1652は、オプションのアプリケーションデータ1607を含む近傍状態1606を、あるアプリケーションレイヤイベントに応答して送信することができる。上記に似た内部機構を使用して、機能レイヤ1651は、オプションのアプリケーションデータ1607を含むsync応答メッセージ1608を送信して、アプリケーションレイヤ近傍状態を伝搬させることができる。
同期化フェーズ:参加応答メッセージを処理した後に、ノードYは、挿入フェーズ状態から同期化中(Syncing)フェーズ状態に推移する。同期化中フェーズ状態では、新たに挿入されたノードYは、近傍のノードと情報を同期化する。一般に、ノードYは、少なくとも挿入フェーズ状態で識別されたその先行ノードおよび後続ノードにsyncメッセージを送信することができる。そのsyncメッセージを処理するノードは、これらの処理するノードの対応する近傍およびルーティングパートナノードを示すsync応答を返すことができる。より具体的な例では、同期化中フェーズ状態を、次のアルゴリズムに従って実施することができる(すべての演算は、modulo bnで実行される)。
SP1 ノードYが参加する各近接リング内のNeighborhood(Y.s)ノードとNeighborhood(Y.p)ノードとの和集合からNeighborhood(Y)を計算する。和集合計算は、次のように行うことができる。
Figure 2010509871
SP2 短く図16を参照すると、近傍状態要求(例えば、近傍状態要求)1604を介してYのローカルアプリケーションレイヤ(例えば、アプリケーションレイヤ1652)を照会して、オプションのアプリケーション固有近傍データ(例えば、アプリケーション固有データ1607)を入手する。
SP3 少なくとも近接する後続ノードおよび先行ノードに、少なくともYの展望からの各近接近傍およびルーティングパートナのライブネス状態情報を含む同期化メッセージを送信する。SP2を介してアクセスされるすべてのオプションのアプリケーション固有近傍データ(例えば、アプリケーションデータ1607)は、sync要求1631に含まれる。
SP4 Yは、SP2で送信されたsyncメッセージを処理するノードから戻るsync応答メッセージを受信する。例えば、ノードYは、その計算された近傍内の1つまたは複数のノードと同期化メッセージ(要求/応答)を交換することができる。同期化メッセージが、ノードYの近傍ノードのうちの少なくとも1つ、潜在的にはそのすべてと交換された後に、計算された近傍ノードは、同期化されたデータを伝搬させるためにさらなるメッセージを交換することができる。同期化メッセージ(要求または応答)は、例えば、ノード近傍内にある、ターゲットノードとデータを先を見越して同期化するために、あるノードによって送信されるルーティングされないメッセージとすることができる。
SP5 SP4でsync応答メッセージが受信される(例えば、sync応答メッセージ1641)ときに、これらの受信されたsync応答メッセージ内に存在するすべてのオプションのアプリケーション固有近傍データ(例えば、アプリケーションデータ1622)を、近傍状態syncイベント1603を介してYのアプリケーションレイヤ1652に提供することができる。
同期化中フェーズ状態の一部として、近接後続ノード(例えば、Y.s)および近接先行ノード(Y.p)は、それらのルーティングテーブルを新たに挿入されたノード(例えば、Y)と交換する。syncメッセージを受信するノードは、sync応答を送信することによって応答することができる。sync応答は、応答するノードの展望からのものを除いて同期化メッセージに類似するデータを担持する。syncメッセージとsync応答との両方が、アプリケーションデータを担持する(またはピギーバックする)ことができる。したがって、アプリケーションデータを、同期化中フェーズ状態中にノードの間で伝搬させることができる。同期化フェーズ状態が完了したときに、ノードは、そのノード宛のメッセージを後続物または先行物のいずれかに単純に転送するのではなく、そのメッセージを処理することができる。しかし、ノードを、それでも、弱いルーティング参加者と見なすことができる。というのは、そのルーティングテーブルが移植されていないからである。
ルーティング中フェーズ:同期化中フェーズ状態が完了した後に、ノードは、ルーティング中フェーズ状態に推移する。ルーティング中フェーズ状態では、新たに同期化されたノード(例えば、ノードY)は、そのルーティングノードを計算する。ルーティング中フェーズ状態は、次のアルゴリズムに従って実施することができる(すべての演算は、modulo bnで実行される)。
RP1 ルーティング中フェーズ状態が、バランシングプロシージャ(後で説明する)の一部として実行されている場合には、後続ノード(Y.s)および先行ノード(Y.p)が、ノードYが参加するすべての近接リング内でアライブであることを確実にする。いずれかがアライブではない場合には、検討中のリング内の近傍ノードの中から次に最良の後続ノードまたは先行ノードを選択することによって、障害を発生したノード(1つまたは複数)の置換ノードを決定する。
RP2 1≦i≦n−1について
RP2a z=Y.id±biを計算する
RP2b リングdが最も特定の近接ではない場合には、ノードYが参加し、条件Y.sd.id<Y.id+bi<Y.sd+1.idまたはY.pd.id<Y.id−bi<Y.pd+1.idを満足する近接リングdを見つける。そうでない場合には、リングdを最も特定の近接リングにする。リングdは、ノードYがzに最も近いルーティングパートナをその中で探さなければならない近接リングである。Qが、Y.sd.r±iとY.pd.r±iとの間でzに数値的に最も近いノードであるものとする。|Q.id−z|が、biの構成可能なパーセンテージ(通常は20%)以内である場合には、単純にY.r±i=Qにする。Q.idが、(Y.sd.id±bi)または(Y.pd.id±bi)のいずれかよりzに近い場合には、これは、ノードYが、Y.sdまたはY.pdのいずれかよりよい、近接リングd内のノードQに対するパートナルーティングノードであることを意味する。したがって、updateMsgがまだ送信されていない場合には、ノードQがr-iでのパートナルーティングノードとしてノードYを確立できるようにするために、パラメータとしてiおよびノードYを供給して、updateMsgをノードQに送信する。
RP2c このフェーズ状態が、バランシングプロシージャの一部として実行されつつあり、Y.sd.r±i.id==Y.pd.r±i.idである場合には、(Y.sd.id±bi)と(Y.pd.id±bi)との間の数値範囲内に1つのノードだけがある。そのノードは、後続(または先行)ノードのルーティングノードr±iによってポイントされるノードである。したがって、単純にY.r±i=Y.sd.r±i・iにする。
RP2d そうでない場合には、リングdの近接判断基準にセットされた近接判断基準を用いてノードQに対してRouteProximallyを呼び出すことによって、ルーティングパートナY.r±iを計算する。これは、Y.r±i=Q.RouteProximally(z,updateMsg,d)を暗示する。
RP3 この点で、ノードYは、それ宛のメッセージを処理できるだけではなく、メッセージをルーティングすることもできる。
RP4 パートナルーティングノードのエンドポイントIDのアプリケーションレイヤから送信されたライブネス通知イベントへのサブスクライブがまだ行われていない場合には、それを行う。また、もはやパートナルーティングノードではないノードについてアプリケーションレイヤを用いて以前に確立されたすべてのライブネスイベントサブスクリプションを取り消す。例えば、サブスクリプション要求および/または取消要求を、対応するアプリケーション(例えば、名前空間アプリケーション)のパブサブロジック(pub−sub logic)を実施するアプリケーションレイヤ(例えば、アプリケーションレイヤ121)へ上に渡すことができる。後続のアプリケーション固有ライブネスメッセージ(例えば、名前空間サブスクリプションから生じるもの)が、アプリケーションレイヤで受信されるときに、通知(イベント)を、処理のために他の下位レイヤ(例えば、他の下位レイヤ131)へ下にプッシュすることができる。
図17に、機能レイヤ1751とアプリケーションレイヤ1752との間で発生し得る複数のライブネス相互作用の一例を示す。図17に示されているように、エンドポイントは、例えば、様々なノードを表すパブリッシュ/サブスクライブトピック(例えば、URLまたはURIによって表される)であり、例えば、フェデレーションインフラストラクチャノードとすることができる。Subscribe To Liveness Event(ライブネスイベントへのサブスクライブ)1701は、ライブネスイベント(例えば、パブリッシュ/サブスクライブトピック)にサブスクライブするために機能レイヤ1751からアプリケーションレイヤ1752に対して呼び出すことができる。Revoke Liveness Subscription(ライブネスサブスクリプション取消)1702は、ライブネスイベントへのサブスクリプションを取り消すために機能レイヤ1751からアプリケーションレイヤ1752に対して呼び出すことができる。End Point Down(エンドポイントダウン)1703は、エンドポイントがダウンしている可能性があることを示すためにアプリケーションレイヤ1752から機能レイヤ1751に送ることができ、オプションのreplacement(置換)エンドポイントを機能レイヤ1751に与える。End Point Down event 1703は、以前のサブスクリプション(例えば、Subscribe To Liveness Event 1701)に基づいて非同期に送ることができる。
Node Down(ノードダウン)1704は、機能レイヤ1751(またはある他の下位レイヤ)が、障害を発生したノードを検出したことを示し、オプションで置換ノードをアプリケーションレイヤ1752に与えるために、機能レイヤ1751からアプリケーションレイヤ1752に対して呼び出すことができる。アプリケーションレイヤ1752は、その後、潜在的に障害を発生しているノードが検出されたことを他の関心を持つ当事者に伝搬させることができる。Node down event 1704は、機能レイヤ1751またはある他の下位レイヤが潜在的に障害を発生しているノードを検出したときに、いつでも非同期に送ることができる。Send liveness(ライブネス送信)1706は、ノードがダウンしていることをアプリケーションレイヤ1752が検出する(例えば、node down event 1704からまたはある他の帯域外機構から)ときに、アプリケーションレイヤ1752から機能レイヤ1751に対して呼び出すことができる。Send liveness event 1706は、機能レイヤ1751にライブネスメッセージを送らせることができる。Send liveness event 1706は、アプリケーションレイヤ1752が、ノードがダウンしていることを検出するときにいつでも非同期に呼び出すこともでき、以前に確立されたサブスクリプション(ライブネスへのサブスクライブを介して)のいずれにも依存しない。
したがって、いくつかの実施形態で、機能レイヤ1751は、再帰的に使用される。例えば、機能レイヤ1751は、指定されたノード(例えば、上または下の特定のノードである)への関心をアプリケーションレイヤ1752に示すことができる。アプリケーションレイヤ1752は、指定されたノードに関係する通知に関するアプリケーション固有サブスクリプションを定式化し、その後、機能レイヤ1751を再利用して、他のフェデレーションノード内の適当な対応するアプリケーションレイヤ1752インスタンスに定式化されたサブスクリプションを通信することができる。例えば、フェデレーションノード内のアプリケーションレイヤ1752が、名前空間パブ/サブ(pub/sub)挙動を実施する場合に、機能レイヤ1751は、指定されたノードの通知を管理するパブリッシュ/サブスクライブマネージャにサブスクリプションをルーティングすることができ、パブ/サブマネージャは、関係するフェデレーションノード内のアプリケーションレイヤ1752の少なくとも一部として実施される。したがって、機能レイヤ1751は、機能レイヤ1751が生成させたサブスクリプションをルーティングするのに使用される。類似する再帰機構を、アンサブスクライブするか、もはや指定されたノードへの関心がないことを他の形で示すのに使用することもできる。
動作中フェーズ:ルーティング中フェーズ状態が完了した後に、ノードは、動作中フェーズ状態に推移する。ノードは、ダウンする(例えば、リブートする)まで、動作中フェーズ状態のままであることができる。動作中フェーズ状態では、ノードは、時々ルーティングパートナに更新メッセージを送信することができる。更新メッセージ(更新要求と更新応答との両方)には、送信するノードの近傍ノードライブネス情報(例えば、当該のすべての近接近傍の)を含めることができる。この送信されるライブネス情報には、送信側のライブネス情報のそれをも含めることができる。更新メッセージは、ルーティングパートナノードを周期的に更新するためにノードによって始められるルーティングされるメッセージとすることができる。アプリケーションデータを、更新メッセージにピギーバックすることができ、アプリケーションデータを、ルーティングパートナ更新中に伝搬できるようになる。メッセージ宛先には、所望のルーティングインデックスでの完全なルーティングパートナのアイデンティティがセットされる。このメッセージのMessage IDプロパティには、このメッセージを処理するノード(1つまたは複数)が最新のメッセージを判定できるようにするためにアプリケーションシーケンス番号が割り当てられ、このメッセージは、近接的にルーティングされる。
更新メッセージを受信するノードは、更新応答を応答することができる。更新応答は、データが応答するノードの展望からであることを除いて、更新メッセージと同一のデータを担持する。更新メッセージおよび更新応答の交換を介して、ノードは、ルーティング情報を交換することができる。時々、動作するノードは、ルーティングパートナを更新することができる。
時々、動作するノードは、pingメッセージ(例えば、pingメッセージ1609および1611)を送信することもできる。pingメッセージは、ノードのプレゼンスを周期的にアナウンスし、その近傍/ルーティングノードおよび複製(例えば、ピギーバックされた)アプリケーションデータに関してその近傍内で情報を散布するために、ノードによって送信される一方向メッセージである。
起点ノードは、その直接先行する近傍ノードおよび直接後続する近傍ノードのうちの1つまたは複数にpingメッセージを送信することができる。したがって、ping分布パターン(すなわち、どのノードがpingメッセージを送信されるか)に応じて、起点ノードに関係する情報は、リング上で起点ノードの近傍内の他のノードに伝搬される。例えば、起点ノードは、その直接先行ノードおよび直接後続ノードだけにpingメッセージを送信することができ、このpingメッセージは、起点ノードの位置(ノードID)からリングに沿って両方向で起点の近傍の縁まで外向きに伝搬する。あるいは、起点ノードは、先行物方向と後続物方向との両方でn個おきのノードにpingメッセージを送信することができる。
pingメッセージを受信する各ノードは、近傍範囲の展望から、そのノードの起点ノードへの関心をチェックする。関心がない場合には、そのノードは、pingメッセージを破棄する。関心がある場合には、そのノードは、pingメッセージを処理し、pingメッセージの転送が起点ノードの近傍に制約されている場合には指定されたpingパターンに従って、pingメッセージを転送する。例えば、pingメッセージを処理した後に、受信ノードは、送信ノードおよび起点ノードが先行ノードセット内にある場合には少なくともその後続ノードに、送信ノードおよび起点ノードが後続物セット内にある場合には少なくともその先行ノードに、pingメッセージを転送することができる。
したがって、pingメッセージの外向きの伝搬は、そのメッセージが起点ノードの周囲にセットされた近傍ノードの縁に達するときに停止する。pingメッセージのMessage IDプロパティには、このメッセージを処理するノードが起点ノードからの最新のメッセージを判定し、重複処理を回避するか他の形で不必要な転送を回避することを可能にするために、アプリケーションシーケンス番号が割り当てられる。
戻って図16を参照すると、pingメッセージ1609を、近傍ノードから機能レイヤ1651で受信することができる。アプリケーションデータ1612(例えば、名前空間サブスクリプション)を、pingメッセージ1609内にピギーバックすることができる。機能レイヤ1651は、pingメッセージに含まれるすべてのアプリケーションデータについてアプリケーションレイヤ1652に知らせることができる。同様に、機能レイヤ1651は、Sync要求メッセージに含まれるすべてのアプリケーションデータについてアプリケーションレイヤ1652に知らせることができる。移転のこれらのケースの両方を、アプリケーションデータ1612を含む近傍状態syncイベント1603をアプリケーションレイヤ1652に送ることを介して達成することができる。
ある機能レイヤイベント(例えば、受信されたpingメッセージ1609)に応答して、機能レイヤ1651は、近傍状態要求1604をアプリケーションレイヤ1652に送ることができる。近傍状態要求1604は、アプリケーションレイヤ1652に対して、オプションで近傍内で伝搬される必要がある状態を入手するために呼び出される。近傍状態要求1604に応答して、アプリケーションレイヤ1652は、オプションのアプリケーションデータ1607を含む近傍状態1606を機能レイヤ1651に返すことができる。機能レイヤ1651は、オプションのアプリケーションデータ1607を含むpingメッセージ1611を送信して、近傍およびルーティングパートナノードライブネス情報ならびにオプションのアプリケーションレイヤ近傍状態を伝搬させることができる。機能レイヤ1651は、オプションのアプリケーションデータ1607を含むsync応答1608を送信して、アプリケーション状態を伝搬させることもできる。
(離脱プロトコル)
ノードがフェデレーションから離脱することが適当であるときに、そのノードは、フェデレーションから正常に除去されるためにDepart関数を実施することができる。ノードは、その直接に近接する先行ノードおよび後続ノードのうちの1つまたは複数と、おそらくは同一の近接近傍内の他のノードとに離脱メッセージを送信することによって既存フェデレーションから離脱する。したがって、離脱分布パターン(すなわち、どのノードが離脱メッセージを送信されるか)に応じて、離脱するノードに関係する情報は、リング上で離脱するノードの近傍内の他のノードに伝搬される。離脱メッセージは、正常に離脱するノードの差し迫った離脱についてその近接近傍のうちの少なくとも1つの中の1つまたは複数の他のノードに知らせるために、その正常に離脱するノードによって始められる一方向メッセージである。離脱するノードは、pingメッセージの伝搬に似た形で、離脱メッセージを伝搬させる(例えば、近傍内で)。例えば、ID30を有するノードは、ID17および40を有するノードに離脱メッセージ1219を送信することができる。次に、ID30を有するノードは、所与の近接リングの観点から、フェデレーションインフラストラクチャからそれ自体を除去することができる。ノードが、1つの近接近傍からそれ自体を除去するが、それが属する可能性がある他の近接近傍からは除去しないことが可能であることに留意されたい。
ID17および40を有するノード(すなわち、先行ノードおよび後続ノード)が、ID30を有するノードが除去された後にID30に最も近いノードになる可能性が高いので、ID17および40を有するノードは、ID30を有するノードの離脱を知らされる。したがって、ID30に送達されるべき将来のメッセージを、ID17および40を有するノードで適当に処理することができる。ID17および40を有するノードは、ID30を有するノードの離脱をリング1206上の他のノードに伝搬させることができる。ID30を有するノードがない状態で、ID17および40を有するノードは、潜在的にお互いをポイントする、先行物ポインタおよび後続物ポインタを再計算することもできる。
離脱メッセージのMessage IDプロパティは、離脱メッセージを処理するノードが起点ノードによって送信された一連のpingメッセージおよび離脱メッセージの中で最新のメッセージを判定することを可能にするために、Pingメッセージと同一のアプリケーションシーケンスIDを割り当てられる。フェデレーション近接リングからの正常な離脱は、オプションであるが推奨される。しかし、フェデレーションは、ノードが突然に去る場合に自己修復するように設計される。
(ライブネス)
フェデレーションの寿命中に、ノードは、フェデレーションを維持するためにライブネス情報を交換することができる。ライブネス情報は、ライブネスメッセージヘッダの形で、フェデレーション内で交換される事実上すべてのメッセージに含めることができる。例えば、参加メッセージ、参加応答、syncメッセージ、sync応答、更新メッセージ、更新応答、アプリケーション固有メッセージ、ライブネスメッセージ、およびpingメッセージは、すべてがライブネス情報ヘッダを含むことができる。フェデレーションノードが、メッセージまたは応答を送信するときに、そのノードは、他のノードによる処理のためにライブネス情報を含めることができる。ライブネス情報を、ライブネスメッセージのライブネス情報ヘッダに含めることができる。
あるノードのライブネス状態を示すライブネス情報は、次のプロパティを使用して表すことができる。
[Node]:そのライブネス情報が表されているノードを識別する。ノードは、[Instance ID]をさらに含む[Reference Properties]に基づいて識別することができる。
[Reference Properties]:WS−addressing仕様で指定された要素情報アイテム。WS−addressingは、参照プロパティセット内に含めるために[Instance ID]参照プロパティを定義する。
[Instance ID]:ノードの特定のインスタンスを識別する数。増加するブートカウントを、ノードのインスタンスIDとして使用することができる。
[Phase]:識別されたノードのフェーズを伝える。
[Phase−State Value] 示されたノードインスタンスが達成したことがわかっている最高のフェーズ状態(挿入中、同期化中、ルーティング中、動作中)を伝える。
[Phase.Unknown Indication] 現在のフェーズが既知であるか未知であるかを伝えるインジケータ。
[Freshness]:情報の新しさを伝え、その値は、0からMaxFreshnessまでの範囲にわたる。この値が大きいほど、情報はより新しく、0は、情報がないことを暗示し、MaxFreshnessは、プロトコル定義の定数である。
[Color]:ノードが属する近接同等性クラスを識別する。同一のカラー値の2つノードは、必ず、近接的に最も近いと考えられる。というのは、それらの両方が、カラー値によって識別される同一の同等性クラスに属するからである。近接同等性クラスの個数は、より多くのノードがフェデレーションに参加するので、経時的に増加する可能性がある。
[Weight]:ノード機能メトリックを供給し、その値は、0からMaxWeightまでの範囲にわたる。これは、高い計算能力、高いネットワーク帯域幅、および長いアップタイムなど、フェデレーションノードの望ましい特性を測定する。この値が大きいほど、ノードの能力が高く、パートナーシップの展望からそのノードがより望ましいものになる。
いくつかの環境で、あるノードの[Node]プロパティおよび[Freshness]プロパティは、[Origin]メッセージヘッダおよび[Sender]メッセージヘッダなどのより大きいスコープ内で暗黙または明示的のいずれかで伝えられ、したがって、ライブネスヘッダへの上記プロパティの包含は、重複になる。例えば、メッセージの送信側は、その現在のフェーズ、カラー、および重み情報をそのIDとして伝えることだけが必要であり、Instance Idは、メッセージアドレッシングヘッダ内で供給され、Freshnessは、暗示される。
ライブネス状態には、次のように定義される「<」バイナリ関係に基づいて、少なくとも半順序を付けることができる。
「L1<L2」は、
1.「L1.[Node].[Name]==L2.[Node].[Name]」が真であり、テストがリストされた順序で実行され、省略される状態で次のうちの1つが真である
Figure 2010509871
2.または、「L1.[Color]==L2.[Color]」が真であり、テストがリストされた順序で実行され、省略される状態で次のうちの1つが真である
Figure 2010509871
場合に真である。
さらに、ライブネス「ダウン」メッセージを、指定されたノードが使用不能になった(例えば、ダウンした)ことが検出されるか疑われるときに、その指定されたノードに送信することができる。例として、アプリケーションレイヤ(例えば、アプリケーションレイヤ121)が、別のアプリケーションレイヤ(例えば、アプリケーションレイヤ123)またはその別のアプリケーションレイヤをホストするノードがダウンしていることを検出するときに、検出するアプリケーションレイヤは、例えば、メッセージモデルおよび関係する処理モデル1600および/または1700に従って、そのノードがダウンしていることを他の下位レイヤ(例えば、他の下位レイヤ131)に通知することができる。そのような通知は、例えば、機能レイヤ1651などの他の下位レイヤに、ライブネスダウンメッセージを送信させることができる。これは、ライブネスダウンメッセージの生成に関する刺激の1つの例にすぎない。
ライブネスダウンメッセージは、ルーティングされ、したがって、ダウンしていると疑われるノードに最も近いノードに送達されるので、指定されたノードのライブネスダウンメッセージが指定されたノードに戻って送達される場合には、指定されたノードが一度もダウンしていないか、指定されたノードが異なるインスタンスである(例えば、異なるインスタンスIDを有する)かのいずれかである。その一方で、ライブネスダウンメッセージが、別のノードに送達される場合には、これは、指定されたノードがダウンしているように見えることを示す。したがって、ライブネスダウンメッセージを受信するノードが、それ自体を指定されたノードの近接近傍内にあるとみなす場合に、そのノードは、説明されたようにその近接近傍に指定されたノードの離脱メッセージをソーシングすると同時に、指定されたノードがダウンしている可能性があることおよび受信するノードがその置換であることをそのアプリケーションレイヤに(例えば、Node Down 1704を使用して)示すことができる。指定されたノードのライブネスダウンメッセージを、そのターゲットIDにダウンしている可能性があるノードのIDをセットして、近接的にルーティングすることができる。
(バランシングプロシージャ)
本発明の実施形態は、短い期間のうちにフェデレーションに参加し、離脱する多数のノードに対処するように設計されている。そのようなネットワーク内の変化は、様々なノードで維持される対数検索ツリーがアンバランスになる場合にルーティング遅延を引き起こす可能性がある。すなわち、リングの片側に反対側より多数のノードがある場合である。最適のルーティング効率を容易にするために、フェデレーションに参加するノードは、ある判断基準が満足されるときにバランシングプロシージャを実行する。
例えば、次の条件のいずれかが真であるときに、任意のノードが、最適のルーティング効率のためにバランスをとられたルーティングテーブルを保証するためにバランシングプロシージャを実行することができる。
・ 構成された個数の上記ライブネスメッセージが受信された。
・ 最後の上記ライブネスメッセージの受信以降に構成された長さの時間が経過した。
・ いくつかの新しいノードが到着したまたはいくつかの既存ノードが離脱したという意味で近傍が変化した。
ルーティングテーブルのバランシングは、単純なプロセスである。例えば、アンバランスなルーティングテーブルを有するノードは、参加プロトコルの同期化フェーズ状態およびルーティングフェーズ状態を再実行することができる。
1)ある数に最も近いルーティングノードを見つけること、2)フェデレーションを正常に去るノードが従う離脱プロトコル、および3)ライブネスメッセージを受信するノードが従うバランシングプロシージャと組み合わされた行為RP2b、RP2d、およびRP4は、フェデレートするノードが比較的すばやく多数でネットワークに参加し、離脱するときに、より高速に修復するシステムをもたらす。
(状況メッセージ)
状況メッセージは、送信側ノードが以前に受信側ノードに転送した相関するメッセージのルーティング成功/失敗を知らせるために送信側ノードによって受信側ノードに送信される、ルーティングされないメッセージである。図18に、要求−応答メッセージ交換パターンの一部を形成するメッセージがリング上のノードにまたがってどのようにルーティングされるかの一例を示す。状況メッセージは、そのルーティング状況が報告されつつあるオリジナルの相関されたメッセージを識別するヘッダを含むことができる。したがって、状況メッセージをノードの間で使用して、メッセージがあるノードから次のノードに成功してルーティングされたことを示すことができる。例えば、ノード1801からノード1806への要求メッセージ1811のルーティングは、ノード1802、1803、1804、および1805を介して要求1811を送信することを含む。対応するカスケードする成功状況メッセージ(状況1817、1818、1919、1820、および1821)を、それぞれ、ノード1806からノード1805へ、ノード1805からノード1804へ、ノード1804からノード1803へ、ノード1803からノード1802へ、およびノード1802からノード1801へ送信することができる。要求1811に応答して、応答1816を、ノード1806からノード1801へエンドツーエンドで送信することができる。応答1816は、オプションであり、一方向メッセージ交換パターンには存在しない場合がある。
図13に、ノードがフェデレーションインフラストラクチャに参加する方法1300の一例の流れ図を示す。方法1300を、図12Aおよび12Bのリング1206に関して説明する。方法1300は、参加メッセージをフェデレーションインフラストラクチャに発行する行為(行為1301)を含む。例えば、ID144を有するノードは、リング1206を含むフェデレーションインフラストラクチャに参加1201を発行することができる。方法1300は、参加するノードから参加メッセージを受信する行為(行為1308)を含む。例えば、リング1206を含むフェデレーションインフラストラクチャ内の既存ノードが、参加1201を受信することができる。
方法1300は、参加メッセージを処理ノードにルーティングする行為(行為1309)を含む。処理ノードは、参加メッセージがルーティングされつつあるときにフェデレーションインフラストラクチャ内の他のアクティブノードより参加するノードのIDに数値的に近いIDを有するノードとすることができる。例えば、参加1201を、当初にID64を有するノードで受信し、ID135を有するノードにルーティングし、ID151を有するノードにルーティングすることができる。
方法1300は、参加するノードの1つまたは複数の先行ノードおよび1つまたは複数の後続ノードを計算する行為(行為1310)を含む。例えば、ID151を有するノードが、ID144を有するノードの直接の先行ノードおよび直接の後続ノードを計算することができる。リング1206内で、ID151を有するノードは、ID135を有するノードが直接の先行ノードであり、ID151を有するノードが直接の後続ノードであることを計算することができる。類似する計算を、他の近接リングについて行うことができる。
方法1300は、参加するノードの1つまたは複数のルーティングノードを計算する行為(行為1311)を含む。例えば、ID151を有するノードが、ID144を有するノードのルーティングノードを(ID151を有するノードの展望から)計算することができる。リング1206内で、ID151を有するノードが、例えば、ID218および40を有するノードがID144を有するノードのルーティングノードであることを計算することができる。類似する計算を、他の近接リングについて行うことができる。
方法1300は、参加するノードに参加応答を送信する行為(行為1312)を含む。参加応答は、フェデレーションインフラストラクチャの現在のビューを与えられて処理ノードによって計算された、参加するノードのすべての先行近傍ノードおよび後続近傍ノードとルーティングパートナノードとを識別することができる。例えば、参加応答1202は、少なくともID144を有するノードの直接の先行ノードとしてID135を有するノードを識別することができ、ID144を有するノードの直接の後続ノードとしてID151を有するノードを識別することができ、ノードID144(新たに参加するノード)のためにID151を有するノードで計算されたすべてのルーティングノード(ID144を有するノードの)を識別することができる。
方法1300は、参加メッセージを処理したフェデレーションノードから参加応答を受信する行為(行為1302)を含む。例えば、ID144を有するノードが、ID151を有するノードから参加応答1202を受信することができる。
方法1300は、少なくとも直接の近接先行ノードおよび直接の近接後続ノードのそれぞれにsync要求を送信する行為(行為1303)を含む。例えば、ここで図12Bを参照すると、ID144を有するノードは、ID135および151を有するノードにsync要求1203を送信することができる。sync要求1203は、ID144を有するノードのすべての近傍ノードの識別および/またはID144を有するノードのすべてのルーティングパートナの識別を含むことができる。
ID135および151を有するノードは、sync要求1203を受信することができる。sync要求1203の受信に応答して、ID135および151を有するノードは、対応するルーティングテーブルからその近傍およびルーティングパートナノードを識別することができる。ID135および151を有するノードは、その識別された近傍およびルーティングパートナノードのライブネス情報をsync応答1204に含め、送信sync応答1204をID144を有するノードに送信することができる。
方法1300は、近接先行ノードおよび近接後続ノードのそれぞれからsync応答を受信する行為(行為1304)を含む。例えば、ID144を有するノードは、ID135および151を有するノードからsync応答1204を受信することができる。sync応答1204は、フェデレーションインフラストラクチャ内のリング1206または他のリング上の1つまたは複数のノードのライブネス情報を含むことができる。sync応答1204は、ID144を有するノードのすべての見込みのあるルーティングパートナノードを識別することもできる。
方法1300は、近傍ノードを計算する行為(行為1305)を含む。例えば、ID144を有するノードは、ID135および151を有するノードの近傍ノードの和集合に基づいて、対応する近傍ノードを計算することができる。近傍ノードを、参加応答メッセージおよびすべてのsync応答メッセージの要約されたビューに基づいて計算することができる。
方法1300は、ルーティングノードを計算する行為(行為1306)を含む。例えば、ID144を有するノードは、リング1206のノードの中からルーティングノードを計算することができる。ルーティングパートナを、参加応答メッセージおよびすべてのsync応答メッセージの要約されたビューに基づいて計算することができる。
方法1300は、少なくとも近傍ノード情報を計算されたルーティングパートナと交換する行為(行為1307)を含む。例えば、ID144を有するノードおよびID218を有するノード(計算されたルーティングパートナ)は、それらの各々の近傍ノードに対応する状態情報(例えば、インスタンスID、フェーズ状態など)を交換することができる。これらの交換は、新たに参加するノードが、上のルーティング中フェーズ状態で説明したように少なくとも各一意の計算されたルーティングパートナに更新メッセージをソーシング(ルーティング)することによって達成される。更新メッセージを処理するノードは、新たに参加するノードからの更新メッセージの受信に応答して、対応する更新応答メッセージを送信する。更新応答は、少なくとも、それ自体およびその近傍ノードのライブネス情報を含む。
方法1300は、少なくとも1つの近傍ノードへのルーティングテーブルの初期伝搬を開始する行為をも含めることができる。例えば、ID144を有するノードは、pingメッセージに計算された近傍ノードおよびルーティングパートナノードを含め、そのpingメッセージをID174を有するノード(例えば、計算された近傍ノードのうちの1つ)に送信することができる。ID174を有するノードは、このpingメッセージを受信し、ID144を有するノードで始められたライブネス情報を用いて、対応するルーティングテーブルを更新することができる。ID174を有するノードは、第2のpingメッセージにその対応するルーティングテーブルを含め、ある将来の時点でこの第2のpingメッセージをID144を有するノードに送信することもできる。ID144を有するノードは、この第2のpingメッセージを受信し、この第2のpingメッセージに含まれるライブネス情報内のノード(すなわち、ID174を有するノードのルーティングテーブル内のノード)を用いてその対応するルーティングテーブルを更新することができる。ID144を有するノードは、リング1206内の他の近傍ノードに関してpingメッセージの送信を繰り返すことができる。
新たに参加するノードがフェデレーションに参加するときに、新たに参加するノードが、既存のフェデレーションメンバを見つけることができず、したがって単独のメンバになる場合があることを理解されたい。したがって、新たに参加するノードに割り当てられる先行ノード、後続ノード、または近傍ノードがない場合がある。したがって、この新たに参加するノードは、すべてのケースで最良のルーティングパートナとしてマッピングされる。
さらに、方法1300を、単一のリング(リング1206)に関して説明したが、いくつかの実施形態で、あるリングに参加するノードが、本質的に、1つまたは複数の他のリングにも参加することを理解されたい。例えば、図5に戻って簡単に参照すると、リング551に参加するノードは、本質的に、リング543、531、522、511、および501にも参加する。したがって、方法1300を、複数のリングに参加するために実施することができる。他の実施形態では、方法1300の行為の一部またはすべてを、複数のリングに参加するときに繰り返すことができる。例えば、もう一度図5を参照すると、方法1300の行為のうちの1つまたは複数を、ノードがリング551とリング514との両方に参加するときに(例えば、エイリアシング)、繰り返すことができる。どの場合でも、参加するノードのIDにアクセスし、これを使用して、ソートされたリンクリストならびに参加するノードが参加しようとしている対応する階層的にパーティショニングされたサブリスト内で、その参加するノードを識別することができる。受信ノードは、ソートされたリンクリストおよび各パーティショニングされたサブリストから識別される。参加メッセージは、ソートされたリンクリストおよび各パーティショニングされたサブリスト内の処理ノードにルーティングされる(例えば、IDに基づいて)。参加応答は、ソートされたリンクリストおよび各パーティショニングされたサブリスト内の処理ノードから受信される。
図14に、ノードがフェデレーションインフラストラクチャ内でメンバシップを維持する方法1400の一例の流れ図を示す。方法1400を、リング1206に関して説明する。方法1400は、近傍ノードに第1のpingメッセージを送信する行為(行為1401)を含む。第1のpingメッセージは、第1のpingメッセージを送信する現行ノードが近傍ノードの近傍であることを示す。第1のpingメッセージは、現行ノードのルーティングパートナおよび近傍ノードの状態をも含むことができる。例えば、ID144を有するノードが、ID151を有するノードにpingメッセージを送信することができる。第1のpingメッセージ受信したときに、ID151を有するノードは、ID141を有するノードがID151を有するノードの近傍であることを知らされる。ノード151は、この行為の副次的効果として、ノード144からより新しいライブネス情報(リング1206上の他のノードの)を発見することもできる。
pingメッセージを、例えば、pingメッセージがそこに送信される近接リングに関連する構成状態に基づいて、指定された頻度で周期的に繰り返すことができる。この頻度は、構成状態に依存して変化し得る。例えば、WANについて指定されるping頻度を、LANについて指定される頻度と異なるものとすることができる。pingメッセージを、ping分布パターンに従って送信することもできる。始めるノードのping分布パターンは、pingメッセージがリング上で両方向で近傍ノードに送信されなければならないことを示すことができる。例えば、ID144を有するノードは、ID135を有するノードの方向とID151を有するノードの方向との両方でpingを送信することができる。ping分布パターンおよび頻度は、変更することができる。例えば、近接リングごとに変更することができる。
方法1400は、近傍ノードから第2のpingメッセージを受信する行為(行為1402)を含む。第2のpingメッセージは、少なくとも、第2のpingメッセージを生み出す近傍ノードが現行ノードの近傍であることを現行ノードに示す。第2のpingメッセージは、当該生み出す近傍ノードのルーティングパートナおよび近傍ノードの状態をも含むことができる。例えば、ID151を有するノードが、ID144を有するノードに第2のpingメッセージを送信することができる。この第2のpingメッセージを受信したときに、ID144を有するノードは、ID151を有するノードがID144を有するノードの近傍であることを知らされる。この第2のpingメッセージは、リング1206上の他のノードのライブネス情報をも含むことができる。したがって、一般に、pingメッセージを、近傍内で交換することができ、近傍メンバシップ(近接メンバシップごとに)およびフェデレーション内のノードプレゼンスの近似された共通の近傍ビューを維持するのに使用することができる。
受信されたpingメッセージを、周期的に繰り返す/pingが生み出された(生み出すノードによって送信された)近接近傍内の他のノードに転送することができる。転送されるpingメッセージを、ping分布パターンに従って送信することもできる。転送するノードのping分布パターンは、pingメッセージが、生み出すノードから離れる方向で近傍ノードに送信されなければならないことを示すことができる。例えば、ID151を有するノードは、ID144を有するノードで生み出すpingをID174を有するノードの方向で転送することができる。ping転送分布パターンは、例えば、近接リングごとに変更することができる。
ノードを、対応するインターバルでpingメッセージを受信するように構成することができる。期待されるpingメッセージが受信されないときに、ノードは、通信障害を解釈し、期待されるが少なくとも遅れたpingメッセージを生み出さなければならなかったノードについて、別のノードのphase.unknown indicationに真をセットすることができる。
方法1400は、完全なルーティングノードに更新要求メッセージを近接ルーティングする行為(行為1403)を含む。この更新要求メッセージは、そのようなルーティングされた更新要求を受信するルーティングノードに、現行ノードが受信するルーティングノードのルーティングパートナとして参加しようとしていることを示す。この更新要求メッセージは、少なくとも現行ノードの近傍ノードのアイデンティティをも(例えば、ライブネス情報の形で)含む。例えば、ID144を有するノードは、更新メッセージ1216を、ID208を有するノード(144から64だけオフセットされた完全なルーティングパートナ)にルーティングすることができる。ノード210(以前に計算されたルーティングノード)は、208に最も近いので、このルーティングされた更新要求を受信し、処理する。更新メッセージ1216を受信したときに、ID210を有するノードは、ID144を有するノードがID210を有するノードのルーティングパートナであることを知らされる(または強化される)。
方法1400は、処理する(受信する)ルーティングノードから更新応答メッセージを受信する行為(行為1404)を含む。この更新応答は、処理するルーティングノードが現行ノードのルーティングパートナとして参加しようとしていることを現行ノードに示す。この更新応答メッセージは、少なくとも処理するルーティングパートナの近傍ノードのアイデンティティをも含む。例えば、ID210を有するノードは、ID144を有するノードに更新応答1207を送信することができる。更新応答1207を受信したときに、ID144を有するノードは、ID210を有するノードがID144を有するノードのルーティングパートナであることを知らされる。
方法1400は、現行ノードおよび近傍ノードが近傍として参加しようとしていることと、現行ノードおよび近傍ノードがルーティングパートナとして参加しようとしていることとを示すためにノード情報を適宜更新する行為をも含むことができる。例えば、ID144を有するノードは、ID144および141を有するノードが(近接)近傍に参加しようとしていることを示すためにID151を有するノードに対応するノード情報を更新することができる。同様に、ID144を有するノードは、ID144および210を有するノードがルーティングパートナとして参加しようとしていることを示すために、ID210を有するノードに対応するノード情報を更新することができる。
いくつかの実施形態で、指定されたノードXで保存されるアプリケーション状態は、信頼できるフラッディングプロトコルを使用してそのNeighborhood(X)ノードの間で複製される。アプリケーション状態内の各アイテムは、割り当てられたオーナーを有し、このオーナーは、そのアイテムを作成したエンドポイントとすることができる。アプリケーション状態内の各アイテムは、そのオーナーによって与えられる関連するタイムスタンプ(別名シーケンス番号)をも有する。タイムスタンプは、次の少なくとも3つのコンポーネントを有する。
○ 所有するエンティティのインスタンスID(例えば、未割り当ての整数)。少なくとも単調に(>1)増加しなければならない
○ オーナーによって生成された特定のシーケンスを識別するシーケンスID(例えば、URI)。このコンポーネントは、同一のオーナーが複数の独立のシーケンスを生成することを可能にする
○ 識別されたアプリケーションシーケンスID内のオフセットを識別する序数(例えば、未割り当ての整数)。
アイテムタイムスタンプは、<インスタンスID、シーケンスID、およびオフセット>の3つ組を用いて少なくとも半順序を生成するので、複製中に対応するアイテムに関連する最新情報を検出するのに使用される。複製されるアイテムに関連するタイムスタンプは、最新のアイテムを検出するために、ローカルタイムスタンプが存在する場合にそのローカルタイムスタンプと比較される。アイテムタイムスタンプは、作成/更新/削除動作の等羃セマンティックスをサポートするのにも使用される。例えば、あるノードが、アプリケーション状態内の既存アイテムを更新する要求を受信するときに、その更新は、更新要求に関連するタイムスタンプがローカルアイテムに関連するタイムスタンプより新しい場合に限って受け入れられる。ベクトルタイムスタンプに基づく衝突解決技法を、アイテムを単一のオーナーに割り当てることができない場合に利用することができる。アプリケーション状態複製は、フォールトトレランスを実現し、近傍ノードにまたがるロードバランシング要求を容易にする。
オプションの挙動として、(起点)他のパートナ(ルーティングおよび/またはパートナ)ノードから期待される更新またはpingを検出しない(ある時間期間の後に)ノードは、フェーズ状態を未知と考え、phase.unknown表示に真をセットし、これをそのようなものとして他のサードパーティノードに報告することができる。言い換えると、更新およびpingの周期的生成を要求することができる。この要件および実際のタイムアウト値は、様々な近接リングの属性とすることができる。例えば、あるリングが、いくつかのサブリング(例えば、LANセグメント内)についてより厳密なタイミング要件を有することができ、障害検出/報告は、比較的すばやい。その一方で、あるリングが、他のサブリング(例えば、インターネット上)についてより厳密でないタイミング要件を有することができ(あるいは、タイミング要件を有しないことすらでき)、先を見越したノード障害検出/報告は、比較的長い(または存在しない)。
図15に、別のノードのライブネス情報を発見する方法1500の一例の流れ図を示す。方法1500を、図12Aおよび12Bのリング1206に関して説明する。一般に、例えば、sync 1203、sync応答1204、更新1216、更新応答1207などの任意のメッセージに、少なくとも1つのライブネスヘッダを含めることができる。いくつかの実施形態で、ライブネスヘッダは、あるノードの<ノードID、インスタンスID、フェーズ[phase−state value].[phase.unknown indication]、フレッシュネス値、カラー(近接)値、および重み値>を含む。他の実施形態では、ライブネスヘッダは、<フェーズ[phase−state value].[phase.unknown indication]、フレッシュネス値、カラー(近接)値、および重み値>を含む。これらの他の実施形態では、ライブネスヘッダを使用して、既に送信側および起点ノードのノードIDおよびインスタンスIDを含むアドレッシングヘッダを増補することができる。アドレッシングヘッダは、既にノードIDおよびインスタンスIDを含むので、この情報を、ライブネスヘッダから省略することができる。
方法1500は、フェデレーションインフラストラクチャに参加するノードの状態情報を表すライブネスヘッダを受信する行為(行為1501)を含む。ライブネスヘッダは、少なくとも、受信された参加するノードのID、受信されたノードのインスタンスID、受信されたフェーズ値、および受信されたフレッシュネス値を含む。例えば、ID144を有するノードは、ID151を有するノードからsync応答1204内で第1ライブネスヘッダを受信することができる。第1ライブネスヘッダは、ID174を有するノードの<参加するノードのID、インスタンスID、フェーズ値[phase−state value].[phase.unknown indication]、フレッシュネス値、カラー(近接)値、および重み値>を含むことができる。フェーズ状態値(例えば、Inserting、Syncing、Routing、Operating)は、第1フレッシュネス値のときのID174を有するノードの表されたフェーズを識別する。フェーズ値(例えば、フェーズ状態:[Inserting,Syncing,Routing,Operating]、およびphase.unknown)は、第1フレッシュネス値によって識別されるときのID174を有するノードの表されたおよび/または検出されたフェーズ情報を識別する。
しかし、フレッシュネス値を、通信遅延に起因して割引して考えることができる。フレッシュネス値が、時間の経過に伴って減衰することもできる。フレッシュネス値の減衰曲線は、異なるフェーズ状態(未知を含む)について異なるものとすることができる(また、線形または対称ではないものとすることができる)。したがって、異なるノードフェーズにまたがって、フレッシュネス値の減衰を、非線形および/または非対称とすることができる。
方法1500は、現行ノードで維持される参加するノードの、少なくとも現行インスタンスID、現行フェーズ値、および現行フレッシュネス値にアクセスする行為(行為1502)を含む。例えば、ID144を有するノードは、ID174を有するノードの以前に受信され格納されたインスタンスID、フェーズ値[phase−sate value.][phase.unknown indication]、およびフレッシュネス値にアクセスすることができる。
方法1500は、少なくとも、受信されたインスタンスID、受信されたフェーズ値、および受信されたフレッシュネス値を、それぞれ現行ノードにある現行インスタンスID、現行フェーズ値、および現行フレッシュネス値と比較する行為(行為1503)を含む。例えば、ID144を有するノードは、ID174を有するノードの以前に受信され格納されたインスタンスID、フェーズ値[phase−sate value.][phase.unknown indication]、およびフレッシュネス値を、ライブネスヘッダ内で受信されたインスタンスID、フェーズ値[phase−sate value.][phase.unknown indication]、およびフレッシュネス値と比較することができる。
ID144を有するノードは、(順番に)第1インスタンスIDがID174を有するノードの現在格納されているインスタンスIDよりより大きいことに基づいて、第1フェーズ状態値がID174を有するノードの現在格納されているフェーズ状態値より進んでいることに基づいて、または第1フレッシュネス値がID174を有するノードについて現在格納されているフレッシュネス値より大きいことに基づいて、ID174を有するノードの現行状態情報(例えば、ID151を有するノードから受信された)が古いことを判定することができる。ID144を有するノードは、フェーズ状態が検出/送信されたときにフェーズ状態が既知であったことを少なくとも1つのphase.unkown表示(現在格納されているまたはライブネスヘッダ内で受信された、のいずれか)が示すことを判定することもできる。
方法1500は、比較に基づいて、参加するノードの状態情報が現行ノードで更新されなければならないかどうかを判定する行為(行為1504)を含む。例えば、ID174を有するノードの値の比較に基づいて、ID144を有するノードは、ID174を有するノードの状態情報を更新しなければならないと判定することができる。ID174を有するノードの古い状態情報の更新には、現在格納されている値(例えば、インスタンスID、フェーズ状態値、phase.unknown表示、またはフレッシュネス値)を、ライブネスヘッダ内に含まれる値に置換することを含めることができる。例えば、ID144を有するノードは、ID174を有するノードの状態情報を更新して、ID174を有するノードがより進んだフェーズ状態に推移したことを示すことができる。
いくつかの実施形態で、参加するノードとの通信が失われている可能性があることを検出することができる。例えば、ID144を有するノードは、ID151を有するノードとの通信が失われたことを検出することができる。図17を簡潔に参照すると、以前のライブネスイベントに関するサブスクリプション1701(ID151を有するノードのエンドポイントを有する)に応答して、アプリケーションレイヤ1752は、endpoint down event 1703(ID151を有するノードのエンドポイントを有する)を機能レイヤ1751に送ることができる。これらの実施形態では、そのような検出されたライブネス条件を、最後の既知のフェーズ状態値と一緒に、真をセットされたPhase.Unknownインジケータを用いてライブネス情報内で示すことができる。
方法1500は、さらに、フェデレーションインフラストラクチャ内の第2の異なるノードから第2のライブネスヘッダを含むメッセージを受信する行為を含むことができる。例えば、ID144を有するノードは、第2のライブネスヘッダを含む状況メッセージを受信することができる(ID103を有するノードまたはリング1206の他のノードから)。第2のライブネスヘッダは、ID174を有するノードの<参加するノードのID、第2のインスタンスID、第2のフェーズ値[phase−state value].[phase.unknown indication]、第2のフレッシュネス値、第2のカラー(近接)値、および第2の重み値>を含むことができる。第2のフェーズ値(例えば、フェーズ状態:[Inserting,Syncing,Routing,Operating]およびphase.unknown表示)は、第2のフレッシュネス値のときのID174を有するノードの表された/検出されたフェーズを識別する。
あるいは、第1ライブネスヘッダの受信の後に、ID144を有するノードが、ID174を有するノードと直接に通信することを試みることができる。通信が成功である場合には、ID174を有するノードは、アドレッシングヘッダ内にノードIDおよび第2インスタンスIDを有し、<第2フェーズ値、第2フレッシュネス値、第2カラー(近接)値、および第2重み値>を含むライブネスヘッダを有するメッセージ(例えば、sync応答)を返すことができる。障害が検出される場合には、ID144を有するノードは、内部ライブネス状態変化を生成し(例えば、フレッシュネス=最大値およびphase.unknown表示=真)、その状態変化が別のノードから受信されたかのように、その状態変化を処理する。そのような状態変化は、最大のフレッシュネス値を有する。
方法1500は、第2インスタンスID、第2フェーズ値、および第2フレッシュネス値を、それぞれ現行インスタンスID、現行フェーズ値、および現行フレッシュネス値と比較する行為(行為1506)をも含むことができる。例えば、ID103を有するノードから状況メッセージを受信した後に、ID144を有するノードは、(順番に)第2インスタンスIDが第1インスタンスIDより大きいこと、第2フェーズが第1フェーズ値より進んでいること、または第2フレッシュネス値が第1フェーズ値より大きいことに基づいて、ID151を有するノードの現行状態情報が古いと判定することができる。
方法1500は、比較に基づいて、特定のノードの状態情報を更新しなければならないかどうかを判定する行為をも含むことができる。例えば、ID174を有するノードの値の比較に基づいて、ID144を有するノードが、ID174を有するノードの状態情報を更新しなければならないと判定することができる。ID174を有するノードの古い状態情報の更新には、現在格納されている値(例えば、インスタンスID、フェーズ状態値、phase.unknown表示、またはフレッシュネス値)を、第2ライブネスヘッダに含まれる値に置換することを含めることができる。例えば、ID144を有するノードは、ID174を有するノードの状態情報を更新して、ID174を有するノードがより進んだフェーズ状態に推移したことを示すことができる。
いくつかの実施形態で、フェーズ値は、等しいカラー値(color value)のコンテキスト内で比較される。前述のように、1つのノードが複数の近接リングに参加することができる。複数の近接リングへの参加は、より全般的なリングへの参加を暗示するより特定のリングへの参加(共通の背骨に沿った)の結果として発生し得る。例えば、図5に戻り参照すると、リング532へのあるノードの参加は、そのノードがリング522、511、および501に参加することをも暗示する。したがって、より特定のリングのカラーは、すべての親近接リングをも表す。また、前述のように、複数の近接リングへの参加は、あるリング内のノードが1つまたは複数の他のリング(潜在的に異なる背骨に沿った)にエイリアス化されるときに発生し得る。例えば、まだ図5を参照すると、リング532に参加するノードを、リング531に(または、リング531、522、511、および501への参加を暗示するリング541にさえ)エイリアス化することができる。したがって、あるリング(例えば、リング531)のカラーを、別のリング(例えば、リング532)のピアカラー(または近接)と見なすことができる。
あるノードが、エイリアス化された形で複数の近接リングに参加するときには、そのノードのフェーズ値(例えば、フェーズ状態値および/またはphase.unknown表示)が、異なる近接リングの間で異なる、多少の可能性がある。したがって、別のノードの状態情報を受信するノードは、現行状態情報がそのノードおよびカラーについて更新されなければならないかどうかを判定する前に、状態情報(カラー)について対応する近接リングを識別する。例えば、ID144を有するノードは、受信した状態情報を現行状態情報と比較する前に、ID174を有するノードに対応する受信された状態情報の対応する近接リングを識別する。
適当な近接リングを識別することは、受信されたカラー値を1つまたは複数の現行カラー値と比較することを含むことができる。受信されたカラー値と現行カラー値とが等しいときには、例えば、現行インスタンスID、現行フェーズ値、および現行フレッシュネス値などの他の状態情報を、例えば、受信されたインスタンスID、受信されたフェーズ値、および受信されたフレッシュネス値などの対応する受信された状態情報と比較することができる。その一方で、受信されたカラー値と現行カラー値とが異なるときには、さらなる比較は行われない。
カラー値の間の等しさは、様々な形で生じることができる。例えば、カラー値の間の等しさは、現行カラー値と受信されたカラー値とが同一の近接リング(例えば、リング532)を示すときに、生じる可能性がある。さらに、カラー値の間の等しさは、より特定のカラー値が対応する親カラー値(例えば、同一の背骨に沿った別のリング)と比較されるときに、生じる可能性がある。例えば、リング532のカラー値をリング511(またはリング522もしくは501)のカラー値と比較することが、等しさをもたらすことができる。したがって、子近接は、親近接であるが、より特定的である。
したがって、一般に、フェデレーションインフラストラクチャ内の現在の動作ノードは、他のノードとの通信が失われたように見えるときであっても、それらの他のノードの表されたライブネス状態情報および検出されたライブネス状態情報を交換することができる。
(ブートストラッピング機構)
一般に、ノードがフェデレーションのアクティブメンバになる(例えば、参加する)ためには、ノードは、既にそれが参加するつもりの葉リングのアクティブメンバである少なくとも1つの他のノードと通信しなければならない。この最初の形の通信が使用可能であることを保証するのを助けるために、フェデレーションは、ブートストラッピング機構を利用することができる。ブートストラッピング機構は、他のタイプの通信が葉リングのアクティブメンバを識別できないか、セキュリティ制約が、新たに参加するノードがシードノードなどの特殊なノードのセットのうちの少なくとも1つと最初に通信することを要求するときに、最後の手段として使用することができる。すなわち、他のタイプの通信が失敗するときまたはセキュリティ要件のゆえに、ブートストラッピング機構を使用して、葉リングのアクティブメンバノードを識別することができる。
いくつかの実施形態で、シードノードは、フェデレーションとの通信をブートストラップするのに使用される。シードノードは、あるタイプのクロス(インター)近接通信の周知の入口点を提供する。シードノードは、インフラストラクチャ障害/回復および全般的なダイナミズムに起因するリングパーティションを修復するのを助ける。各リングは、フェデレーションに基本的なブートストラッピングプロパティを提供するために、少なくとも1つの動作可能なシードノードを有することができる。
ピアシードノードは、それら自体の間で通信して、近接の少なくともすべてのアクティブシードノードからなるその近接のリング構造(例えば、二重リンクリスト)を維持する。専用のシードノード同期化プロトコルが、各シードノードに少なくともすべての他のシードノードのプレゼンス(アクティブ)状態の総合的知識を与えるのに使用される。アクティブシードノードは、そのホームである近接葉リングならびにその葉リングのすべての他の先祖リングのメンバノードである。したがって、シードノードは、例えば、そのシードノードの葉リングからルートリングへの、近接リングの背骨全体を表すことができる。したがって、シードノードは、これらの近接リングのそれぞれにおける非常に使用可能であり周知のエントリノードとして機能することができる。その結果、シードノードに関するプレゼンス状態を、フェデレーション内の様々な形の通信(例えば、近接間通信)に有用とすることができる。したがって、シードノードは、例えば、参加するノードの周知の「参加ポイント」として働く、セキュアリングオーソリティとして働く、インフラストラクチャパーティションを修復するのを助ける、およびその近接のそれぞれの安定した「エントリノード」として働くなど、複数の特殊なプロパティを提供することができる。
プレゼンスデータを提供するために、シードノードの到着および秩序だった離脱を、その近接のそれぞれのランデブポイントで安定したエントリノードとして登録することができる。例えば、登録メッセージを、その宛先IDがストリング「Proximity:/」のSHA−1ハッシュである固定URIにルーティングすることができる。一実施形態で、安定したエントリノードとして働くシードノードは、この形でそれら自体を登録するが、選択された非シードノードも同一の形で、シードノードについて本明細書で説明するものと同一であるか類似するプロトコルを用いてそれら自体を登録できる、他の実施形態がある。安定したエントリノード(シードノードなど)が登録するときに、安定したエントリノードは、それがそのメンバである各リングを示すことができる。したがって、この固定URIによって識別されるランデブポイントで維持される情報は、本質的に、安定したエントリノードおよびそれに対応するリングメンバシップのリストである。したがって、すべてのノードが、使用可能な安定したエントリノードおよびそのリングメンバシップのリストを入手するために、この固定URIによって識別されるランデブポイントを参照することができる。
一実施形態で、安定したエントリノードは、これらの到着イベントおよび離脱イベントを直接に登録する。もう1つの実施形態で、安定したエントリノードは、これらのイベントをその直接の近接リング内のランデブポイントで直接に登録し、そのランデブポイントは、安定したエントリノードの登録/登録解除が属する残りの近接リングのそれぞれでのすべての他の適当なランデブポイントの更新を透過的に容易にする(直接または間接に)。フェデレーションのアプリケーション状態シーケンシングプロパティおよびアプリケーション状態伝搬プロパティを使用して、この安定したエントリノード登録情報を維持し、伝搬させることができる。例えば、信頼できるフラッディングプロトコルを使用して、あるノードの近傍ノードの間で、保存されたアプリケーション状態を複製することができる。
安定したエントリノードのプレゼンスデータのルートリングに向かう昇進は、フェデレーション内の他のノードがすべての近接内の少なくとも1つのエントリノードをルックアップすることを可能にする。エントリノードルックアップは、ノードルックアップメッセージを、ルックアップを実行するノードの葉リングおよび所望の近接リングの最下位共通先祖リング(Lowest Common Ancestor Ring、「LCAR」)内の上で判定されたランデブポイントに向かってルーティングすることによって容易にすることができる。例えば、図5を参照すると、リング541内のノードが、リング533内のノードと通信することを望む場合がある。しかし、リング541内のノードは、リング533内のどのノードの直接の知識も有しない可能性がある。したがって、リング541内のノードは、ノードルックアップメッセージをリング522(リング541およびリング533のリングのLACR)に送信することができる。エントリノードプレゼンス情報(例えば、そのエントリノードによって始められた登録メッセージのゆえにシステム内に存在するようにされた)を処理するリング522内のランデブポイントノードは、少なくともリング533内の登録された安定したエントリノードの連絡情報を伴うルックアップ応答メッセージを返すことができる。
いくつかの実施形態で、安定したエントリノードは、様々な近接のプレゼンスデータを維持する安定したエントリノードとして特に構成されたシードノードである。他の実施形態では、他のタイプのノードが、様々な近接のプレゼンスデータを維持する安定したエントリノードとして機能することもでき、他の動作を実行するようにも構成され得る。例えば、ある種の他のタイプのノードを、高度に利用可能であり、したがって安定したエントリノードとして適切である(すなわち、上で説明されたように登録される)ものとして構成する(例えば、管理者によって)ことができる。しかし、他のタイプのノードが、追加のシードノード機能性を含まない場合がある(例えば、セキュリティリングオーソリティとしては信頼されない場合がある)。いくつかの実施形態で、その直接近接のエントリノードプレゼンス状態を維持するランデブポイントは、それら自体を1つまたは複数の先祖リング内の安定したエントリノードとして登録することができる。
(ノード監視)
図19Aに、あるノードが別のノードを監視することを容易にする一例のリングアーキテクチャ1900を示す。図示されているように、リングアーキテクチャは、少なくともリング1901(および任意の個数の他のより高いおよび/またはより低いレベルのリング(図示せず))を含む。リング1901を、図3のリング306に類似して構成することができる。しかし、監視は、図4、5、12A、および12Bのリングのいずれをも含む、ノードの任意のリングで発生し得る。図19Aは、対象ノード1902(ID=83を有する)およびモニタノード1903(ID=2を有する)の拡大図を示す。図示の環境では、モニタノード1903は、対象ノード1902を監視する。しかし、リング1901上の任意のリングを、リング1901上の任意の他のノードを監視するように構成することができる。
図20に、あるノードが別のノードを監視する方法2000の一例の流れ図を示す。方法2000を、図19Aに示されたデータおよびコンポーネントに関して説明する。
方法2000は、対象ノードが対象ノードの監視に使用される対象側タイムトゥリブ(time−to−live)持続時間値を生成する行為(行為2001)を含む。例えば、対象ノード1902は、タイムトゥリブ(TTL)持続時間値1913を確立することができる。TTL持続時間値1913は、対象ノード1902が、モニタノード1903との監視関係がアクティブであると仮定できる持続時間を示す。
方法2000は、対象ノードが確立要求をモニタノードに送信する行為(確立要求は、モニタノードが対象ノードを監視することを対象ノードが要求することを示し、確立要求は、対象側タイムトゥリブ持続時間値を含む)(行為2002)を含む。例えば、対象ノード1902は、TTL持続時間値1913を含む確立要求1922をモニタノード1903に送信することができる。
方法2000は、対象ノードが、対象側タイムトゥリブ持続時間値および確立要求が送信された時刻に基づいて既存対象側タイムトゥダイ(time−to−die)時間を確立する行為(モニタノードからの確立許可の受信の前に既存対象側タイムトゥダイ時間に達する対象ノードクロックは、対象ノードが障害状態に推移しなければならないことの表示である)(行為2003)を含む。例えば、対象ノード1902は、TTL持続時間値1913と確立要求1922がモニタノード1903に送信された時刻とに基づいて対象側タイムトゥダイ時間1917を確立することができる。対象側タイムトゥダイ時間1917は、対象ノード1902に対する相対的な時間とすることができる。対象ノード1902のクロックが、モニタノード1903からの確立許可の受信の前に対象側タイムトゥダイ時間1917に達する場合に、対象ノード1902は、障害状態に推移しなければならない。いくつかの実施形態で、対象ノード1902のクロックが、モニタノード1903からの確立許可の受信の前に対象側タイムトゥダイ時間1917に達するときに、障害状態が引き起こされる。他の実施形態では、他のアクティビティが、対象ノード1902を障害状態に推移させるために発生する。
方法2000は、モニタノードが、対象ノードから確立要求を受信する行為(確立要求は、監視ノードが対象ノードを監視することを対象ノードが要求することを示し、確立要求は、少なくとも対象側タイムトゥリブ持続時間値を含み、対象側タイムトゥリブ持続時間値は、対象ノードで対象側タイムトゥダイ時間を決定するのに使用され、モニタノードからの確立許可の受信の前に対象側タイムトゥダイ時間に達する対象ノードクロックは、対象ノードが障害状態に推移しなければならないことの表示である)(行為2004)を含む。例えば、モニタノード1903は、TTL持続時間値1913を含む確立要求1922を対象ノード1902から受信することができる。TTL持続時間値1913は、対象ノード1902で対象側タイムトゥダイ時間1917を確立するのに使用される。
方法2000は、モニタノードが対象側タイムトゥリブ持続時間値からモニタ側タイムトゥリブ持続時間値を導出する行為(行為2005)を含む。例えば、モニタノード1903は、TTL持続時間値1913を使用してTTL持続時間値1919を導出することができる。いくつかの実施形態で、モニタノード1903は、TTL持続時間値1913をコピーして、TTL持続時間値1919を導出する。これらの実施形態では、TTL値持続時間1913とTTL持続時間値1919とが等しい。他の実施形態では、モニタノード1903は、TTL持続時間値1913を変更して、TTL持続時間値1919を導出する。これら他の実施形態では、TTL持続時間値1913とTTL持続時間値1919とが異なる。例えば、モニタノード1903は、TTL持続時間値1913の値を増やして、TTL持続時間値1919がTTL持続時間値1913より長くなるようにTTL持続時間値1919を導出することができる。
方法2000は、モニタノードが、モニタ側タイムトゥリブ持続時間値および確立要求が受信された時刻に基づいてモニタ側タイムトゥダイ時間を確立する行為(対象ノードからの更新要求の受信の前にモニタ側タイムトゥダイ時間に達するモニタノードクロックは、対象ノードの疑われる障害を示す)(行為2006)を含む。例えば、モニタノード1903は、TTL持続時間値1919と時確立要求1922が受信された時刻とに基づいてモニタ側タイムトゥダイ時間1914を確立する。モニタ側タイムトゥダイ時間1914は、モニタノード1903に対する相対的な時間とすることができる。モニタノード1903のクロックが、対象ノード1902からの更新要求の受信の前にモニタ側タイムトゥダイ時間1914に達する場合に、モニタノード1903は、障害について対象ノード1902を疑う。
方法2000は、モニタノードが、モニタノードが対象ノードを監視することに合意したことを対象ノードに示すために、確立許可を対象ノードに送信する行為(行為2007)を含む。例えば、モニタノード1903は、確立許可1923を対象ノード1902に送信することができる。方法2000は、対象ノードが、監視ノードから確立許可を受信する行為(確立許可は、モニタノードが対象ノードを監視することを示す)(行為2008)を含む。例えば、対象ノード1902は、モニタノード1903から確立許可1923を受信することができる。一般に、確立許可1923は、モニタノード1903が対象ノード1902を監視することに合意したことを示す。いくつかの実施形態で、確立許可メッセージは、モニタ側TTL持続時間値を含むことができる。例えば、確立許可1923がTTL持続時間値1919を含むかもしれない。
その代わりに、モニタノードは、モニタノードが対象ノードを監視することに合意しなかったことを対象ノードに示すために、対象ノードに確立拒否を送信することができる。例えば、確立要求1922の受信に応答して、モニタノード1903は、その代わりに(破線によって示されるように)確立拒否1931を対象ノード1902に送信することができる。対象ノードは、モニタノードから送信された確立拒否を受信することができる。例えば、対象ノード1902は、モニタノード1903から確立拒否1931を受信することができる。確立拒否1931は、一般に、モニタノード1903が対象ノード1902を監視することに合意しなかったことを対象ノード1902に示す。
時々(および、リングアーキテクチャ1990内の他の動作の実行の間に混ぜ合わされて)、対象ノードが、監視ノードとの確立された監視合意を更新することができる。一般に、対象ノードは、新しい許可が受信されるまで、既存の合意を有効なままにする(現行対象側タイムトゥダイ時間)。しかし、対象ノードは、新しいTTL持続時間値を生成し、更新されたタイムトゥダイがどうなるかを導出することができる。次に、対象ノードは、新しいTTL持続時間値をモニタノードに送信する。モニタノードは、新しいTTL持続時間値を受信する。適当なときに、モニタノードは、更新要求を許可し、更新許可を対象に送り返す。対象ノードは、更新許可を受信する。更新許可の受信に応答して、対象は、新しい現行タイムトゥダイ時間として更新されたタイムトゥダイ時間を使用して、更新合意を実施する。確立された監視合意の更新の例は、方法2000の残りの行為で説明する。
方法2000は、対象ノードが、対象ノードクロックが対象側タイムトゥダイ時間に達する前に、モニタノードに更新要求を送信する行為(行為2009)を含む。例えば、対象ノード1902は、対象ノード1902のクロックが対象側タイムトゥダイ時間1917に達する前に、TTL持続時間値1913を含む更新要求1915をモニタノード1903に送信することができる。いくつかの実施形態で、更新要求1915は、対象側TTL持続時間値を含まない。これらの実施形態では、TTL持続時間値1913の継続される使用を推論することができる。他の実施形態では、TTL持続時間値1913が、更新要求1915に明示的に含まれる。もう1つの実施形態では、異なる対象側TTL持続時間値が、更新要求1915に含まれる。新しい対象側TTL持続時間値を、対象ノード1902の構成変更および/またはリング1901内の他所での更新変更(例えば、変更されたネットワーク条件)に応答して、対象ノード1902によって生成し、使用することができる。
ノード1902は、更新要求1915に応答する対応する更新許可が受信される場合に、更新された対象側タイムトゥダイ時間がどうなるかを計算することもできる。この計算は、少なくとも、更新要求1915が送信された時刻と、更新要求1915に関係付けられるかこれに関連する対象側TTL持続時間値とに基づくものとすることができる。
方法2000は、モニタノードが、確立許可メッセージの送信の後、モニタノードクロックがモニタ側タイムトゥダイ時間に達する前に、対象ノードから更新要求を受信する行為(更新要求は、対象ノードが障害を発生していないことを示す)(行為2010)を含む。例えば、モニタノード1903は、確立許可1923の送信の後、モニタノード1903のクロックがモニタ側タイムトゥダイ時間1914に達する前に、更新要求1915を受信することができる。更新要求1915の受信は、対象ノード1902が障害を発生していないことをモニタノード1903に示すことができる。
方法2000は、モニタノードが対象ノードに更新要求を許可する行為をも含むことができる。例えば、モニタノード1903は、更新要求1915を許可することができる。
方法2000は、モニタノードが、少なくとも更新要求が受信されたことに応答し、その時刻に基づいて、更新されたモニタ側タイムトゥダイ時間を確立する行為(対象ノードからのもう1つの更新要求の前に更新されたモニタ側タイムトゥダイ時間に達するモニタノードクロックは、対象ノードの疑われる障害を示す)(行為2012)を含む。例えば、モニタノード1903は、更新要求1915が受信されたことに応答し、その時刻と、更新要求1915に関係付けられまたはこれに潜在的に含まれる暗示されまたは示されたモニタTTL持続時間値とに基づいて、更新されたモニタ側タイムトゥダイ時間1921を確立することができる。更新されたモニタ側タイムトゥダイ時間1921は、モニタノード1903に対する相対的な時間とすることができる。更新されたモニタ側タイムトゥダイ時間1921を、モニタ側タイムトゥダイ時間1914の後とすることができる。しかし、モニタ側タイムトゥダイ時間1914が、更新されたモニタ側タイムトゥダイ時間1921を確立する前に発生したという要件はない。したがって、更新されたモニタ側タイムトゥダイ時間1921が、実際にモニタ側タイムトゥダイ時間1914の前(またはこれと同一)であることも可能である。モニタノード1903のクロックが、対象ノード1902から別の更新要求を受信する前に更新されたモニタ側タイムトゥダイ時間1921に達する場合には、モニタノード1903は、障害について対象ノード1902を疑う。
対象側TTL持続時間値が、更新要求1915に含まれない(したがって、TTL持続時間値1913が推論される)場合、または更新要求がTTL持続時間値1913を明示的に含む場合に、モニタノード1903は、TTL持続時間値1919を使用して、更新されたモニタ側タイムトゥダイ時間1921を確立することもできる。その一方で、TTL持続時間値1913以外の対象側TTL持続時間値が、更新要求1915内に明示的に含まれる場合には、モニタノード1903は、その、他の明示的に含まれる対象側TTL持続時間値を使用して、新しいモニタ側TTL持続時間値を導出することができる。次に、新しいモニタ側TTL持続時間値から、モニタノード1903は、更新されたモニタ側タイムトゥダイ時間1921を確立することができる。
方法2000は、モニタノードが、モニタノードが対象ノードの監視を継続することに合意したことを対象ノードに示すために、対象ノードに更新許可を送信する行為(行為2013)を含む。例えば、モニタノード1903は、更新許可1927を対象ノード1902に送信することができる。方法2000は、対象ノードが、対応する更新要求の送信の後、対象ノードクロックが対象側タイムトゥダイ時間に達する前に、モニタノードから更新許可を受信する行為(更新許可メッセージは、モニタノードが対象ノードの監視を継続することを示す)(行為2014)を含む。例えば、対象ノード1902は、更新要求1915の送信の後、対象ノード1902のクロックが対象側タイムトゥダイ時間1917に達する前に、モニタノード1903から更新許可1927を受信することができる。一般に、更新許可1927は、モニタノード1903が対象ノード1902の監視を継続することに合意することを示す。
その代わりに、モニタノードは、モニタノードが対象ノードの監視にもはや合意しないことを対象ノードに示すために、対象ノードに更新拒否を送信することができる。例えば、更新要求1915の受信に応答して、モニタノード1903は、その代わりに(破線によって示されるように)更新拒否1933を対象ノード1902に送信することができる。対象ノードは、モニタノードから送信された更新拒否を受信することができる。例えば、対象ノード1902は、モニタノード1903から更新拒否1933を受信することができる。更新拒否1933は、一般に、モニタノード1903が対象ノード1902の監視にもはや合意しないことを対象ノード1902に示す。
方法2000は、対象ノードが、更新許可の受信に応答して、以前に計算された更新された対象側タイムトゥダイ時間に推移すること(モニタノードからのもう1つの更新許可の受信の前に更新された対象側タイムトゥダイ時間に達する対象ノードクロックは、対象ノードが障害状態に推移しなければならないことの表示である)(行為2015)を含む。例えば、対象ノード1902は、対応する更新許可メッセージが受信されるときに、更新された対象側タイムトゥダイ時間1952に推移することができる。更新された対象側タイムトゥダイ時間1952は、更新要求1915がモニタノード1903に送信された時刻付近に計算済みとすることができる。更新された対象側タイムトゥダイ時間1952は、対応する更新要求1915が送信された時刻と、更新要求1915に関係付けられまたは関連するTTL持続時間とに基づいて計算済みとすることができる。更新された対象側タイムトゥダイ時間1952は、対象ノード1902に対する相対的な時間(例えば、対象側タイムトゥダイ時間1917の後、前、またはこれと等しい)とすることができる。
TTL値1913が、それでも適当なTTL値である場合に、対象ノード1902は、TTL持続時間値1913を使用して、更新された対象側タイムトゥダイ時間1952を確立することもできる。もう1つのTTL持続時間値が生成された場合には、対象ノード1902は、そのもう1つの生成されたTTL持続時間値を使用して、更新された対象側タイムトゥダイ時間1952を確立することもできる。
現行対象側タイムトゥダイ時間(1917または1952のいずれか)の確立の後に、対象ノード1902のクロックが、モニタノード1903からもう1つの更新許可を受信する前に現行対象側タイムトゥダイ時間に達するかもしれない。これは、対象ノード1902とモニタノード1903との間の通信エラーから生じる可能性がある。例えば、対象ノード1902が、更新許可1927を受信した後、対象ノード1902のクロックが更新された対象側タイムトゥダイ時間1952に達する前に、もう1つの更新要求を送信する場合がある。しかし、通信障害に起因して、そのもう1つの更新要求は、モニタノード1903に到達しない。その代わりに、そのもう1つの更新要求が、モニタノード1903で受信される可能性があるが、モニタノード1903からの対応する更新許可が、通信エラーに起因して対象ノード1902に到達しない。どちらの場合でも、対象ノード1902のクロックは、そのもう1つの更新要求に応答する対応する更新許可を受信する前に、現行対象側タイムトゥダイ時間に達する可能性がある。
その代わりに、対象ノード1902が誤動作している可能性があり、対象ノード1902が、対象ノード1902のクロックが更新された対象側タイムトゥダイ時間1952に達する前にモニタノード1903にもう1つの更新要求を送信できなくなる。
しかし、更新要求が送信されようとされまいと、更新許可が、対象ノード1902のクロックが現行の対象側タイムトゥダイ時間1952に達する前に受信されない場合には、対象ノード1902は、障害状態に推移する。
戻ってモニタノード1903を参照すると、モニタノード1903のクロックが、もう1つの更新要求を対象ノード1902から受信する前に(対象ノード1902での誤動作またはリング1901での通信エラーのいずれかに起因して)モニタ側タイムトゥダイ時間(1914または1921のいずれか)に達するかもしれない。その結果、モニタノード1903は、障害について対象ノード1902を疑う。モニタノード1903は、別のノードでの疑われる障害の検出を示すタイムアウト状態に推移することができる。
他の実施形態では、ノードの対が、お互いを監視することができる。したがって、第1ノードが第2ノードを監視することができ、第2ノードも第1ノードを監視することができる。例えば、各ノードは、他方のノードとの通信を介して、対象ノード側とモニタノード側との両方の方法2000を実施することができる。
図19Bに、2つのノードがお互いを監視するのを容易にする一例のリングアーキテクチャ1900を示す。
ノード1971は、ノード1971を監視するのに使用されるTTL持続時間値1929を生成することができる。ノード1971は、TTL持続時間値1929を含む確立要求1962をノード1972に送信することができる。ノード1971は、TTL持続時間値1929に基づいて対象側タイムトゥダイ時間1973を確立することもできる。ノード1972は、TTL持続時間値1929を含む確立要求1962をノード1971から受信することができる。ノード1972は、TTL持続時間値1929からTTL持続時間値1949を導出することができる。ノード1972は、TTL持続時間値1949に基づいてモニタ側タイムトゥダイ時間1939を確立することができる。ノード1972は、確立許可1974をノード1971に送信することができる。ノード1971は、ノード1972から確立許可1974を受信することができる。
並行して、ノード1972は、ノード1972を監視するのに使用されるTTL持続時間値1975を生成することができる。ノード1972は、TTL持続時間値1975を含む確立要求1926をノード1971に送信することができる。ノード1972は、TTL持続時間値1975に基づいて対象側タイムトゥダイ時間1935を確立することもできる。ノード1971は、TTL持続時間値1975を含む確立要求1926をノード1972から受信することができる。ノード1971は、TTL持続時間値1975からTTL持続時間値1953を導出することができる。ノード1971は、TTL持続時間値1953に基づいてモニタ側タイムトゥダイ時間1937を確立することができる。ノード1971は、許可メッセージ1976をノード1972に送信することができる。ノード1972は、ノード1971から許可メッセージ1976を受信することができる。
その代わりに、ノード1971および1972のいずれかが、他方のノードからの確立要求を拒否することができる。例えば、ノード1971が、確立要求1962を拒否することができる。同様に、ノード1972が、確立要求1926を拒否することができる。いずれかのノードが確立要求を拒否するときに、そのノードは、他方のノードに確立拒否(例えば、確立拒否1931に似た)を送信することができる。これは、他方のノードに、監視合意が確立されなかったことを示す。
その後、ノード1971およびノード1972は、前述のように更新要求および更新許可(ならびに更新拒否1933に似た更新拒否)を交換することができる。したがって、ノード1971およびノード1972のそれぞれが、対象ノードとモニタノードとの両方である。図19Bに示されたTTL持続時間値およびタイムトゥダイ時間に基づいて、様々なイベントが、監視関係が確立されている間および/またはその後に発生し得る。
ノード1971のクロックが、ノード1972から更新許可を受信する前に対象側タイムトゥダイ時間1973に達する場合に、ノード1971は、障害状態に推移する。ノード1972のクロックが、ノード1971から更新要求を受信する前にモニタ側タイムトゥダイ時間1939に達する場合に、ノード1972は、障害についてノード1971を疑う。
ノード1972のクロックが、ノード1971から更新許可を受信する前に対象側タイムトゥダイ時間1935に達する場合に、ノード1972は、障害状態に推移する。ノード1971のクロックが、ノード1972から更新要求を受信する前にモニタ側タイムトゥダイ時間1937に達する場合に、ノード1971は、障害についてノード1972を疑う。
(ノード障害のアービトレーション)
様々な異なるタイプの通信エラーおよびノード誤動作に起因して、ノードの対の各ノードが他方のノードの障害を疑う可能性が存在する。さらに、各ノードは、それが正しく機能していることを疑うことができる。
いくつかのリングアーキテクチャで、リソースの諸部分は、単一のノードが所与の瞬間にあるリソースを制御するように構成される。さらに、いくつかのリソースの必要な可用性も、あるノードによる本質的に一定の制御が必要になるように高くすることができる。したがって、あるノードが障害を発生するときに、様々なリソースの制御を、別のノードに転送する必要がある場合がある。したがって、ノードの対の1つのノードが、障害について他方のノードを疑うときに、アービトレーション機構を使用して、少なくとも、どちらのノードが障害を有したまたは有するに違いないかを判定することができる。
例えば、対の各ノードが、障害について他方のノードを疑うときに、各ノードは、タイムアウト状態に推移し、その疑いをアービトレーションファシリティに報告することができる。タイムアウト状態であるときに、各ノードでのある種の他の処理を、アービトレーションの結果が受け取られるまでサスペンドさせることができる。アービトレーションファシリティは、ノードに戻って報告して、そのノードがアクティブのままになるべきであるかどうかを示すことができる。例えば、アービトレーションファシリティは、アクティブのままになるべき報告するノードに、受入メッセージを送信することができる。アービトレーションファシリティは、障害状態に推移すべき報告するノードに、否定メッセージを送信することができる。受入メッセージを受信するノードは、アクティブのままであることができる。受入メッセージを受信しない(例えば、ネットワーク条件に起因して)ノードまたは否定メッセージを受信するノードは、障害状態に推移する。
図19Cに、相互に監視するノードが、他方のノードが障害について疑われることをそれぞれ報告できるときのアービトレーションを容易にする例のリングアーキテクチャ1900を示す。図19Cは、ノード1981(ID=98を有する)、モニタノード1982(ID=64を有する)、およびアービトレータ1983の拡大図を示す。
いくつかの実施形態で、アービトレータ1983は、リング1901のメンバでもある。他の実施形態では、アービトレータ1983は、リング1901の先祖のメンバであるが、リング1901のメンバではない。さらなる実施形態では、アービトレータ1983は、リング1901を含むリング階層の外部にある。例えば、アービトレータ1983を、ノードの別々のアービトレーションフェデレーションリングに含めることができる。アービトレーションフェデレーション内のノードを、リング1901およびその先祖のノードのアービトレータとして構成することができる。
いくつかの実施形態で、アービトレータ1983は、ノード1981および1982についてアービトレートするためにノード1971およびノード1982によって相互に合意される。他の実施形態で、アービトレータ1983は、別のエンティティによって、ノード1981および1982についてアービトレートするために割り当てられる。この別のエンティティは、リング1901を含むリング階層の内部のノード(例えば、シードノード)または例えば、人間の管理者とすることができる。例えば、この他のノードを、リング1901のメンバとするか、リング1901の先祖のメンバであるがリング1901のメンバではないものとすることができる。その代わりに、この別のエンティティを、リング1901を含むリング階層の外部とすることができる。例えば、この別のエンティティを、別々のアービトレーションフェデレーションリングのメンバであるノードとすることができる。
アービトレータ1983は、リング1901を含むリング階層の変化する知識を有することができる。例えば、アービトレータ1983は、リング1901を含むリング階層のグローバル知識を有することができる。その代わりに、アービトレータ1983が、リング1901を含むリング階層に含まれるリングのあるサブセットの知識を有することができる。他の実施形態では、アービトレータ1983は、ノード1981および1982を含む(潜在的にはこれらだけを含む)リング1901内のノードのサブセットの知識を有する。
アービトレータ1983を、ノード1981および1982を含むがこれらに限定はされない任意の個数のノード対についてアービトレートするように構成することができる。いくつかの実施形態で、アービトレーション機構は、疑われるノード障害の報告の受信の前に、それがアービトレートするノードの知識を有しない。したがって、ノードの対が、アービトレータ1983を使用することに合意した、またはアービトレータ1983がノードの対に関してアービトレートするために割り当てられたが、アービトレータ1983は、ノードの対の1つのノードに関する疑われるノード障害の報告を受信する前に、合意または割り当てをまったく知らない場合がある。
アービトレーションは、衝突する障害報告を提示するノードの間でアービトレートすることを含むことができる。例えば、第1ノードが第2ノードを監視しており、第2ノードも第1ノードを監視しているときに、各ノードが、他方のノードが障害について疑われると報告するかもしれない。疑われる障害は、本明細書において既に説明したものを含む事実上すべての障害検出機構を使用して検出することができる。
障害発生ノードリスト1947は、疑われる障害を発生したノードとして報告されたノードのリストを含むことができる。ノードは、他のノードを疑われる障害を発生したノードとしてアービトレータ1983に報告することができ、適当なときに、アービトレータ1983は、報告されたノードを障害発生ノードリスト1947に含めることができる。アービトレータ1983は、適当な時間期間の後(例えば、継続される衝突の可能性が不可能である将来のとき)に、障害を発生したノードを障害発生ノードリスト1947から除去することができる。例えば、障害発生ノードリスト1947のエントリを、それらが障害発生ノードリスト1947に挿入された後のリカバリタイムインターバル1942に除去することができる。リカバリタイムインターバル1942は、障害を発生していると言われたノードが実際に障害を発生することを保証するのに十分に長くすることができる。
図21は、疑われるノード障害の衝突する報告の間でアービトレートする方法2100の一例の流れ図を示す。方法2100を、図19Cに示されたコンポーネントおよびデータに関して説明する。
方法2100は、第1ノードが、第2ノードが障害について疑われることの報告をアービトレーションファシリティに送信する行為(行為2101)を含む。例えば、ノード1981が、報告1934をアービトレータ1983に送信することができる。方法2100は、アービトレータが、第2ノードが障害について疑われることの報告を第1ノードから受信する行為(行為2102)を含む。例えば、アービトレータ1983が、ノード1981から報告1934を受信することができる。
方法2100は、アービトレータが、第1ノードからの報告の受信の前の指定されたリカバリタイムインターバル内に、他のノードが障害について第1ノードを疑わなかったことを判定する行為(行為2103)を含む。例えば、アービトレータ1983は、リカバリタイムインターバル1942内(その後には、アービトレータ1983が、いずれにせよ障害発生ノードリスト1947からノード1981を除去しているはずである)に他のノードが障害についてノード1981を疑わなかったことを判定することができる。
方法2100は、アービトレータが、第2ノードが障害状態であることをリストに記録する行為(行為2105)を含む。例えば、アービトレータ1983は、ノード1982(ID=64)が障害状態であることを障害発生ノードリスト1947に記録することができる。
方法2100は、アービトレータが、最大応答タイムインターバル以内に第1ノードに受入メッセージを送信する行為(受入メッセージは、その後に第2ノードが障害状態に推移することが保証される時間期間を示す障害時間値を含む)(行為2104)を含む。例えば、アービトレータ1983は、報告1934の受信から最大応答タイムインターバル1943以内に、ノード1981に受入メッセージ1984を送信することができる。受入メッセージ1984は、ノード1982が障害状態に推移済みであることが保証されるときを示す障害タイムインターバル1936を含む。一般に、最大応答タイムインターバルは、その後に、アービトレーションファシリティ(アービトレータ1983)がアービトレーションの要求(例えば、報告1934または1938)に回答しないとリクエスタ(例えば、ノード1981または1982)が仮定するとき点を表す。最大応答タイムインターバルが、アービトレーションの要求を送信した後にリクエスタで満了するときに、そのリクエスタは、明示的な否定メッセージが受信された場合に実行される動作に類似する(潜在的に同一の)動作を実行する。
方法2100は、第1ノードが、最大応答タイムインターバル以内にアービトレーションファシリティから受入メッセージを受信する行為(受入メッセージは、その後に第2ノードが障害状態に推移することが保証される時間期間を示す時間値を含む)(行為2106)を含む。例えば、ノード1981は、障害タイムインターバル1936を含む受入メッセージ1984をアービトレータ1983から受信することができる。障害タイムインターバル1936は、ノード1982が障害状態に推移済みであることが保証される時間を示す。したがって、障害タイムインターバル1936の満了の後に、ノード1981は、以前にノード1982によって制御された1つまたは複数のリングリソースの制御を請求することを試みることができる。
方法2100は、第1ノードが、時間期間の満了の後に、以前に第2ノードによって制御された1つまたは複数のリングリソースの制御を請求する行為(行為2107)を含む。例えば、ノード1981は、障害タイムインターバル1936の満了の後に、以前にノード1982によって制御されたリング1901内の1つまたは複数のリングリソースの制御を請求することができる。
請求されるリングリソースは、障害状態への推移の前にノード1982によって制御されたリングリソースに応じて変化し得る。例えば、ノード1981は、ノード1982のメッセージルーティング責任(例えば、リング1901上のアイデンティティの範囲に向けられたメッセージを受信する責任)、ノード1982のすべてのシードノード責任、ノード1982のすべてのアービトレーション責任などを引き受けることができる。
第1ノードが第2ノードを報告したときまたはその後に、第2ノードも、障害について第1ノードを疑う場合がある。例えば、ノード1982も、障害についてノード1981を疑うかもしれない。
方法2100は、第2ノードが、第1ノードが障害について疑われることの報告をアービトレーションファシリティに送信する行為(行為2108)を含む。例えば、ノード1982が、ノード1981が障害について疑われることの報告1938をアービトレータ1983に送信することができる。方法2100は、アービトレータが、第1ノードが障害について疑われることの報告を第2ノードから受信する行為(第2ノードからの報告は、第1ノードからの報告の受信の後の指定されたリカバリタイムインターバル以内に受信される)(行為2109)を含む。例えば、アービトレータ1983は、報告1934の受信からリカバリタイムインターバル1942以内に、ノード1981が障害について疑われることの報告1938をノード1982から受信することができる。
方法2100は、アービトレータが、第2ノードが障害状態に推移すべきであることを判定するためにリストを参照する行為(行為2110)を含む。例えば、アービトレータ1983は、ノード1982(ID=64)が障害状態に推移すべきであることを判定するために、障害発生ノードリスト1947を参照することができる。
方法2100は、第2ノードに障害状態に推移させるために第2ノードに否定メッセージを送信する行為(行為2111)を含む。例えば、アービトレータ1983は、ノード1982に障害状態に推移させるためにノード1982に否定メッセージ1985を送信することができる。方法2100は、第2ノードがアービトレーションファシリティから否定メッセージを受信する行為(行為2112)を含む。例えば、ノード1982は、アービトレータ1983から否定メッセージ1985を受信することができる。
方法2100は、第2ノードが障害状態に推移する行為(行為2113)を含む。例えば、ノード1982は、否定メッセージ1985の受信に応答して障害状態に推移することができる。障害発生の後に、ノード1982は、その後、リング1901への再参加を試みることができる。
(キャッシングされた合意に従うルーティング)
いくつかの実施形態で、メッセージは、キャッシングされたルーティング合意に従ってルーティングされる。例えば、リングの隣接ノードは、隣接ノードの間の非占有識別子の範囲に関する責任の分割に合意することができる。識別子は、任意の個数の理由から非占有とすることができる。例えば、識別子は、その識別子が未割り当て(すなわち、ノードに割り当てられていない識別子)なので非占有である場合がある。割り当てられた識別子(すなわち、ノードに割り当てられている識別子)について、識別子は、対応するノードが故意にシャットダウンされたので、あるいは、ノードが、例えば、通信障害またはノード障害に起因してなどの理由で他の形で到達不能なので、非占有である場合がある。
ノードの間のルーティング合意は、隣接ノードの責任になるべき非占有識別子のいずれかに関するメッセージを受け入れ、その非占有識別子に関するメッセージを送達することをノードが許可される前に、確立し、キャッシングすることができる。キャッシングされたルーティング合意への参照は、そうでなければどのノードが特定の非占有識別子の責任を負うかを判定するために発生する可能性がある(潜在的に)隣接するノードの間のすべての通信を大幅に減らす。
キャッシングされたルーティング合意は、構成可能なルールに従ってまたは固定された方法論に従って、任意の形で非占有識別子の範囲を分割することができる。いくつかの実施形態で、あるリング上の隣接ノードの間の識別子の範囲は、本質的に半分に分割される。これは、非占有識別子が、その非占有識別子の責任を負うノードからより遠くなる尤度を下げる。
隣接ノードの間に偶数個の非占有識別子があるときには、隣接ノードの間の中点は、非占有識別子の間にある。したがって、非占有識別子の責任を、隣接ノードの中点で分割することができる。したがって、各隣接ノードに、等しい個数の非占有識別子の責任を割り当てることができる。
その一方で、隣接ノードの間に奇数個の非占有識別子があるときには、隣接ノードの間の中点は、非占有識別子にある。したがって、非占有識別子の責任を、中点である非占有識別子のいずれかの側で分割することができる。したがって、一方の隣接ノードに、他方の隣接ノードより1つ多い非占有識別子の責任を割り当てることができる。
例えば、ここで図22Aを参照すると、図22Aは、ノード間のキャッシングされた2ウェイ合意によるメッセージのルーティングを容易にする一例のリングアーキテクチャ2200を示す。図示されているように、ノード2201、2202、2203、2261、2262、および2263を含む(これらに限定はされない)様々なノード(リング2250上の正方形として図示)が、リング2250に含まれる。各ノードは、リング2250上でのその位置を示す、対応するID(括弧内に図示)を有する。例えば、ノード2201はID=64を有し、ノード2202はID=30を有する。
図示されたノードの間に、非占有識別子の複数の範囲がある。例えば、非占有識別子範囲2211は、ノード2202と2201との間の非占有識別子31から63までを表す。
図示されているように、ノード2201および2202は、2ウェイ合意2223を確立し、キャッシングしている。例えば、以前の通信を介して、ノード2201および2202は、ID=64とID=30との間に現在散在する他のノードがないと判定することができる。したがって、ノード2201および2202は、さらに、これらがリング2250上で互いに隣接すると判定することができる。したがって、ノード2201および2202は、ノード2202が非占有識別子範囲2211のある部分の責任を負い、ノード2201が非占有識別子範囲2211の残りの部分の責任を負うように、非占有識別子範囲2211(すなわち、非占有識別子31から63まで)の責任を分割することができる。各ノードは、それに割り当てられたIDの責任をも負う。すなわち、ノード2202は、ID=30の責任を負い、ノード2201は、ID=64の責任を負う。
したがって、責任境界2213(非占有識別子47と非占有識別子48との間)によって示されているように、ノード2202(ID=30)は、それ自体ならびに非占有識別子31から47までの責任を負い、ノード2201(ID=64)は、それ自体ならびに非占有識別子48から63までの責任を負う。ノード2201と2202との間の中点は、非占有識別子47であるが、ノード2202は、各非占有識別子が単一ノードの責任になるように、非占有識別子47の責任を割り当てられる。したがって、前述のように、責任境界が非占有識別子に位置するときには、隣接ノードのうちの1つに、その非占有識別子の単独の責任を割り当てることができる。
図24に、キャッシングされた2ウェイ合意に従ってメッセージをルーティングする方法2400の一例の流れ図を示す。方法2400を、図22Aのリングアーキテクチャ2200に示されたノードおよびメッセージに関して説明する。
方法2400は、受信ノードがノードのリング上の宛先を示す宛先識別子と一緒にメッセージを受信する行為(宛先識別子は、受信ノードと直接近傍ノードのうちの1つとの間に位置する)(行為2401)を含む。例えば、ノード2201が、ID=55への送達について示されたメッセージ2251を受信することができる。その代わりに、ノード2201が、ID=39への送達について示されたメッセージ2252を受信することができる。メッセージ2251および2252は、リング2250内の別のノードから(イントラリング通信)、リングアーキテクチャ2200の別のリング内のノードから(インターリング通信)、または非リング通信を介して受信することができる。
方法2400は、受信ノードが、メッセージを受信すべき次の適当なノードを判定するために受信ノードと直接近傍ノードとの間のキャッシングされた2ウェイ合意を参照する行為(行為2402)を含む。2ウェイ合意は、少なくとも、受信ノードと直接近傍ノードとの間の識別子空間の責任の分割を暗示する。例えば、ノード2201が、キャッシングされた2ウェイ合意2223を参照して、メッセージ2251を処理すべき次の適当なノードを判定することができる。キャッシングされた2ウェイ合意2223は、ノード2201(ID=64)が非占有識別子55の責任を負うことを示すので、ノード2201は、それがメッセージ2251を処理すべき適当なノードであると判定する。同様に、ノード2201は、キャッシングされた2ウェイ合意2223を参照して、メッセージ2252を処理すべき次の適当なノードを判定することができる。キャッシングされた2ウェイ合意2223は、ノード2202(ID=30)が非占有識別子39の責任を負うことを示すので、ノード2201は、ノード2202が、メッセージ2252を処理すべき次の適当なノードであると判定する。
方法2400は、次の適当なノードの判定に基づいて、次の適当なコンポーネントにメッセージを送信する行為(行為2403)を含む。例えば、ノード2201は、キャッシングされた2ウェイ合意2223が、ノード2201が非占有識別子55の責任を負うことを示すので、非占有識別子55に対応するそのリソースハンドラインスタンスにメッセージ2251を供給することができる。その代わりに、ノード2201は、キャッシングされた2ウェイ合意2223が、ノード2202が非占有識別子39の責任を負うことを示すので、ノード2202にメッセージ2252を供給することができる。その後、ノード2202は、非占有識別子39に対応するそのリソースハンドラインスタンスにメッセージ2252を供給することができる。
識別子が、キャッシングされた2ウェイ合意に含まれないときには、ノードは、宛先に向かう進行を行うためにルーティングテーブル(例えば、図3に示された)を参照することができる。例えば、ノード2201は、ID=203への送達について示されたメッセージ2253を、ノード2261(ID=200)に送信することができる。次に、ノード2261は、その隣接ノードに関するすべてのキャッシングされた2ウェイ合意を参照して、識別子203の責任を負うノードを判定することができる。
いくつかの実施形態で、複数の2ウェイ合意が、所与のノードの展望から、所与のノードと、その所与のノードの直接先行ノードと、その所与のノードの直接後続ノードとの間の3ウェイ合意を本質的に表すことができる。図22Bに、複数のキャッシングされた2ウェイ合意によるメッセージのルーティングを容易にする例のリングアーキテクチャ2200を示す。
前述のように、ノード2201および2202は、キャッシングされた2ウェイ合意2223を確立することができる。同様に、ノード2201および2203は、非占有識別子範囲2212(すなわち、非占有識別子65から101まで)の責任を分割するためにキャッシングされた2ウェイ合意2224を確立することができる。したがって、以前の通信を介して、ノード2201および2203は、ID=65とID=101との間に現在散在する他のノードがないと判定することができる。したがって、ノード2201および2203は、さらに、リング2250上でお互いに隣接すると判定することができる。したがって、ノード2201および2203は、ノード2203が非占有識別子範囲2212の一部の責任を負い、ノード2201が非占有識別子範囲2212の残りの部分の責任を負うように非占有識別子範囲2212を分割することができる。したがって、2ウェイ合意2224内に示されているように、ノード2201(ID=64)は、それ自体ならびに非占有識別子65から82までの責任を負い、ノード2203(ID=101)は、それ自体ならびに非占有識別子83から100までの責任を負う。
ノード2201の展望から、キャッシングされた2ウェイ合意2223とキャッシングされた2ウェイ合意2224との組合せは、本質的に3ウェイ合意2273を表す。すなわち、ノード2201は、ノード2201とノード2202との間の識別子空間の一部の責任を負い、ノード2201とノード2203との間の識別子空間の一部の責任を負う。識別子の括弧で括られた範囲は、ノード2201のいずれかの側でのキャッシングされた2ウェイ合意2223および2224からの責任の範囲(すなわち、47から64までおよび64から82まで)を示す。
図25に、複数のキャッシングされた2ウェイ合意に従ってメッセージをルーティングする方法2500の一例の流れ図を示す。方法2500を、図25Bのリングアーキテクチャ2200に示されたノードおよびメッセージに関して説明する。
方法2500は、受信ノードがノードのリング上の宛先を示す宛先識別子と一緒にメッセージを受信する行為(行為2501)を含む。例えば、ノード2201は、それぞれID=55、ID=39、ID=203、ID=74、およびID=94への送達について示されたメッセージ2251、2252、2253、2254、および2256のいずれをも受信することができる。メッセージ2251、2252、2253、2254、および2256は、リング2250内の別のノードから(イントラリング(intra-ring)通信)、リングアーキテクチャ2200内の別のリング内のノードから(インターリング(inter-ring)通信)、または非リング通信を介して受信することができる。
方法2500は、受信ノードが、メッセージを受信すべき次の適当なノードを判定するために先行ノードとの第1のキャッシングされた2ウェイ合意および後続ノードとの第2のキャッシングされた2ウェイ合意を参照する行為(行為2502)を含む。第1および第2のキャッシングされた2ウェイ合意は、少なくとも、先行ノードと後続ノードとの間の識別子空間に関する責任の分割を暗示する。例えば、ノード2201は、メッセージ2251、2252、2253、2254、および2256のいずれかを受信すべき次の適当なノードを判定するために、キャッシングされた3ウェイ合意2223および2224を参照することができる。
キャッシングされた2ウェイ合意2223は、ノード2202(ID=30)が非占有識別子39の責任を負うことを示すので、ノード2201は、ノード2202がメッセージ2252を処理すべき次の適当なノードであると判定する。キャッシングされた2ウェイ合意2223は、ノード2201(ID=64)が非占有識別子55の責任を負うことを示すので、ノード2201は、それがメッセージ2251を処理すべき次の適当なノードであると判定する。キャッシングされた2ウェイ合意2224は、ノード2201(ID=64)が非占有識別子74の責任を負うことを示すので、ノード2201は、それがメッセージ2254を処理すべき次の適当なノードであると判定する。キャッシングされた2ウェイ合意2224は、ノード2203(ID=101)が非占有識別子94の責任を負うことを示すので、ノード2201は、ノード2203がメッセージ2256を処理すべき次の適当なノードであると判定する。
方法2500は、次の適当なノードの判定に基づいて、次の適当なコンポーネントにメッセージを送信する行為(行為2503)を含む。例えば、ノード2201は、メッセージ2251、2252、2253、2254、および2256を処理すべき次の適当なノードの判定に基づいて、リング2250上の次の適当なコンポーネントにメッセージ2251、2252、2253、2254、および2256を送信することができる。
例えば、ノード2201は、キャッシングされた2ウェイ合意2223が、ノード2202が非占有識別子39の責任を負うことを示すので、メッセージ2252をノード2202に供給することができる。その後、ノード2202は、非占有識別子39に対応するそのリソースハンドラインスタンスにメッセージ2252を供給することができる。ノード2201は、キャッシングされた2ウェイ合意2223が、ノード2201が非占有識別子55の責任を負うことを示すので、非占有識別子55に対応するそのリソースハンドラインスタンスにメッセージ2251を供給することができる。ノード2201は、キャッシングされた2ウェイ合意2224が、ノード2201が非占有識別子74の責任を負うことを示すので、非占有識別子74に対応するそのリソースハンドラインスタンスにメッセージ2254を供給することができる。ノード2201は、キャッシングされた2ウェイ合意2224が、ノード2203が非占有識別子94の責任を負うことを示すので、メッセージ2256をノード2203に供給することができる。その後、ノード2203は、非占有識別子94に対応するそのリソースハンドラインスタンスにメッセージ2256を供給することができる。
識別子が、複数のキャッシングされた2ウェイ合意のキャッシングされたいずれにも含まれないときには、ノードは、宛先に向かう進行を行うためにルーティングテーブル(例えば、図3に示された)を参照することができる。例えば、ノード2201は、ID=203への送達について示されたメッセージ2253を、ノード2261(ID=200)に送信することができる。次に、ノード2261は、その先行ノードおよび/または後続ノードに関するすべてのキャッシングされた2ウェイ合意を参照して、メッセージ2253を受信すべき次の適当なコンポーネントを判定することができる。
(キャッシングされた合意の定式化)
リングを、時々、例えば、新しいノードがリングに参加するときまたは既存ノードがリングから離脱するときに(例えば、正常な除去を介して、ノード監視の結果として、アービトレータへの参照を介してなど)、再構成することができる。ノードが、リングの構成が変化したことを検出するときに、そのノードは、隣接ノードとのキャッシングされたルーティング合意を再定式化することができる。合意再定式化中に、ノードは、合意を再定式化するためのメッセージを除いて、すべての受信されたメッセージをキューイングすることができる。合意の定式化が完了した後に、ノードは、その合意に従ってメッセージを処理することができる。
リングの再構成は、複数のルーティング合意を再定式化させる可能性がある。例えば、ノードがリングを離脱するときに、離脱するノードの両側の直接に隣接するノードは、以前には離脱するノードの責任であった非占有識別子の範囲の合意を形成することができる(したがって、潜在的に追加の非占有識別子の責任を得る)。この再定式化は、離脱するノードからの非占有識別子の範囲の一部の責任を、各直接に隣接するノードの非占有識別子の範囲に結合する。すなわち、各直接に隣接するノードは、離脱するノードの非占有識別子の範囲および離脱するノードの識別子の一部の責任を得る。
図23Aから23Dに、キャッシングされた2ウェイ合意を定式化するのを容易にする例のリングアーキテクチャ2300を示す。図23Aに示されているように、ノード2301および2302は、責任境界2313(非占有識別子47と非占有識別子48との間)で非占有識別子範囲2312(すなわち、非占有識別子31から63まで)の責任を分割するキャッシングされた2ウェイ合意2323を定式化している。同様に、ノード2302および2362は、責任境界2333(非占有識別子14と15との間)で非占有識別子範囲2311(すなわち、非占有識別子255から29まで)の責任を分割するキャッシングされた2ウェイ合意2343を定式化している。
キャッシングされた2ウェイ合意2323および2343の定式化の後のあるときに、ノード2302は、リング2350を去ることができる(例えば、正常な除去を介して、ノード監視の結果として、アービトレータからの命令に基づいてなど)。ここで図23Bを参照すると、ノード2302がリング2350を去った後に、以前にノード2302の責任であった非占有識別子の責任を負うノードはない。非占有識別子範囲2313(現在は非占有の識別子30を含む、非占有識別子15から47まで)は、ノード2302がリング2350を去る前に責任を負っていた非占有識別子の範囲を表す。
ノード2302がリング2350を去ることに応答して、ノード2301および2362は、新しい直接近傍ノードを識別することを試みる。ノード2362は、新しい直接後続ノード(すなわち、ノード2362に対して相対的にノード2302と同一の方向での直接近傍ノード)を識別することを試みる。ノード2301は、新しい直接先行ノード(すなわち、ノード2301に対して相対的にノード2302と同一の方向での直接近傍ノード)を識別することを試みる。図23Bでは、ノード2362は、その新しい直接後続物としてノード2301を識別し、ノード2301は、その新しい直接先行物としてノード2362を識別する。
新しい直接近傍ノードを識別したときに、ノード2362および2301は、非占有識別子範囲2314(現在は非占有の識別子30を含む、非占有識別子255から63まで)の責任を分割するキャッシングされた2ウェイ合意2363を定式化する。非占有識別子範囲2314は、非占有識別子範囲2313を含み、この非占有識別子範囲2313は、以前にはノード2302の責任であった。したがって、非占有識別子範囲2313の一部を、ノード2302がリング2350から離脱した後に、ノード2362またはノード2301のいずれかの責任にすることができる。
したがって、責任境界2353(非占有識別子31と非占有識別子32との間)によって示されるように、ノード2362(ID=254)およびノード2301(ID=30)は、キャッシングされた2ウェイ合意2363を定式化する。キャッシングされた2ウェイ合意2363に従って、ノード2362(ID=254)は、それ自体ならびに非占有識別子255から31までの責任を負い、ノード2301(ID=64)は、それ自体ならびに識別子範囲32から63までの責任を負う。ノード2301と2362との間の中点は、非占有識別子31であるが、ノード2362は、各非占有識別子が単一のノードの責任になるように、非占有識別子31の責任を割り当てられる。
ノード2302の離脱とキャッシングされた2ウェイ合意2363の定式化との間の時間中に、ノード2301および2362は、255と63との間の範囲内の識別子への送達について示されたメッセージを処理しない。そうではなく、ノード2301および2362は、キャッシングされた2ウェイ合意2363の定式化に関するメッセージを除いて、すべてのメッセージをキューイングする。キャッシングされた2ウェイ合意2363の定式化が完了した後に、ノード2301および2362は、キャッシングされた2ウェイ合意2363に従ってそれらのメッセージを処理することができる。
新しいノードが2つの既存ノードの間でリングに参加するときには、各既存ノードは、新しいノードとのルーティング合意を定式化することができる(したがって、潜在的に、非占有識別子の一部の責任を放棄する)。この定式化は、本質的に、既存ノードが責任を負う非占有識別子の範囲を、参加するノードと既存ノードとの間で分割することができる。すなわち、各既存ノードは、潜在的に、参加するノードに、既存ノードの非占有識別子の一部の責任を与える。
ここで図23Cを参照すると、キャッシングされた2ウェイ合意2363の定式化の後のあるときに、ノード2304(ID=44)が、リング2350に参加することができる。ノード2304がリング2350に参加した後に、ノード2362は、その直接後続物としてノード2304を検出することができる。同様に、ノード2301は、その直接先行物としてノード2304を検出することができる。検出のそれぞれに応答して、非占有識別子範囲2314が、本質的に、非占有識別子範囲2315(非占有識別子255から43まで)および非占有識別子範囲2316(非占有識別子45から63まで)に分割される。その後、新しいキャッシングされた2ウェイ合意を定式化して、非占有識別子範囲2315および2316の責任を分割することができる。
ここで図23Dを参照すると、新しい直接後続ノードとしてノード2304を識別した後に、ノード2362およびノード2304は、非占有識別子範囲2315(非占有識別子255から43まで)の責任を分割するキャッシングされた2ウェイ合意2394を定式化する。非占有識別子範囲2315は、非占有識別子範囲2314の一部を含み、非占有識別子範囲2314は、以前にはノード2362の責任であったが、このケースでは、非占有識別子範囲2314の一部が、ノード2301の責任であった。したがって、非占有識別子範囲2314のうちでノード2362またはノード2301のいずれかの責任であった部分を、ノード2304がリング2350に参加するときにノード2304の責任にすることができる。
したがって、責任境界2393(非占有識別子23と非占有識別子24との間)によって示されるように、ノード2362(ID=254)およびノード2304(ID=44)は、キャッシングされた2ウェイ合意2394を定式化する。キャッシングされた2ウェイ合意2394に従って、ノード2362(ID=254)は、それ自体ならびに非占有識別子255から23までの責任を負い、ノード2304(ID=44)は、それ自体ならびに非占有識別子24から43までの責任を負う。ノード2304と2362との間の中点は、非占有識別子23であるが、ノード2362は、各非占有識別子が単一のノードの責任になるように、非占有識別子23の責任を割り当てられる。
同様に、新しい直接先行ノードとしてノード2304を識別したときに、ノード2301および2304は、非占有識別子範囲2316(非占有識別子45から64まで)の責任を分割するキャッシングされた2ウェイ合意2383を定式化する。非占有識別子範囲2316は、以前にはノード2301の責任であった非占有識別子範囲2314の一部を含む。したがって、非占有識別子範囲2314のうちでノード2301の責任であった部分を、ノード2304がリング2350に参加するときにノード2304の責任にすることができる。
したがって、責任境界2373(非占有識別子54と非占有識別子55との間)によって示されるように、ノード2304(ID=44)およびノード2301(ID=64)は、キャッシングされた2ウェイ合意2383を定式化する。キャッシングされた2ウェイ合意2383に従って、ノード2304(ID=44)は、それ自体ならびに非占有識別子45から54までの責任を負い、ノード2301(ID=64)は、それ自体ならびに識別子範囲55から63までの責任を負う。ノード2301と2304との間の中点は、非占有識別子54であるが、ノード2304は、各非占有識別子が単一のノードの責任になるように、非占有識別子54の責任を割り当てられる。
ノード2304の参加とキャッシングされた2ウェイ合意2394の定式化との間の時間中に、ノード2362および2304は、255と43との間の範囲内の識別子への送達について示されたメッセージを処理しない。そうではなく、ノード2362および2304は、キャッシングされた2ウェイ合意2394の定式化に関するメッセージを除くすべてのメッセージをキューイングする。キャッシングされた2ウェイ合意2394の定式化が完了した後に、ノード2362および2304は、キャッシングされた2ウェイ合意2394に従ってこれらのメッセージを処理することができる。
同様に、ノード2304の参加とキャッシングされた2ウェイ合意2383の定式化との間の時間中に、ノード2304および2301は、45と63との間の範囲内の識別子への送達について示されたメッセージを処理しない。そうではなく、ノード2304および2301は、キャッシングされた2ウェイ合意2383の定式化に関するメッセージを除くすべてのメッセージをキューイングする。キャッシングされた2ウェイ合意2383の定式化が完了した後に、ノード2304および2301は、キャッシングされた2ウェイ合意2383に従ってこれらのメッセージを処理することができる。
ノード2304の展望から、キャッシングされた2ウェイ合意2394とキャッシングされた2ウェイ合意2383との組合せは、本質的に、ノード2304とノード2362と2301との間の対応する3ウェイ合意(図示せず)を表すことができる。ノード2304の展望から、対応する表される3ウェイ合意は、ID=254を含み、これからID=64まででこれを含む(割当済みおよび非占有)識別子の責任を定義する。
図26に、2ウェイ合意に参加する方法2600の一例の流れ図を示す。方法2600を、図23Aから23Dまでのノードおよび合意に関して述べる。
方法2600は、現行ノードが、ノードのリングの構成が変化したことの表示にアクセスする行為(この表示は、少なくとも現行ノードと直接近傍ノードとの間のそのリング上の非占有識別子に関する責任を分割する2ウェイ合意を定式化する必要を示す)(行為2601)を含む。例えば、図23Aおよび23Bを参照すると、ノード2301および/またはノード2362は、例えば、ノード2302から、ノード2302の監視を介して、またはアービトレータから、ノード2302がリング2350から離脱したことの表示にアクセスすることができる。ノード2302がリング2350から離脱することの表示は、ノード2301および/またはノード2362に、非占有識別子範囲2314(非占有識別子255から63まで)の責任を分割する2ウェイ合意を定式化する必要を示す。
その代わりに、図23Cおよび23Dを参照すると、ノード2301は、ノード2304がリング2350に参加することの表示(例えば、ノード2304の参加プロセスの一部として送信される)にアクセスすることができる。ノード2304がリング2350に参加することの表示は、ノード2301に、非占有識別子範囲2316(非占有識別子45から63まで)の責任を分割する2ウェイ合意を定式化する必要を示す。同様に、ノード2362は、ノード2304がリング2350に参加したことの表示(例えば、ノード2304の参加プロセスの一部として送信される)にアクセスすることができる。ノード2304がリング2350に参加することの表示は、ノード2362に、非占有識別子範囲2315(非占有識別子255から43まで)の責任を分割する2ウェイ合意を定式化する必要を示す。
方法2600は、現行ノードおよび直接近傍ノードが、現行ノードと直接近傍ノードとの間の責任境界に合意するすなわち、現行ノードと直接近傍ノードとの間の非占有識別子の責任を分割する行為(行為2602)を含む。現行ノードと責任境界との間の非占有識別子は、現行ノードの責任であり、責任境界と直接近傍ノードとの間の非占有識別子は、直接近傍ノードの責任である。
例えば、図23Bを参照すると、ノード2301およびノード2362は、責任境界2353に合意することができ、責任境界2353は、本質的に非占有識別子31と32との間にある。したがって、ノード2301と責任境界2353との間の非占有識別子(すなわち、非占有識別子32から63まで)は、ノード2301の責任である。同様に、責任境界2353とノード2362との間の非占有識別子(すなわち、非占有識別子255から31まで)は、ノード2362の責任である。
図23Dを参照すると、ノード2301およびノード2304は、責任境界2373に合意することができ、責任境界2373は、本質的に非占有識別子54と55との間にある。したがって、ノード2301と責任境界2373との間の非占有識別子(すなわち、識別子55から63まで)は、ノード2301の責任である。同様に、責任境界2373とノード2304との間の非占有識別子(すなわち、非占有識別子45から54まで)は、ノード2304の責任である。
引き続き図23Dを参照すると、ノード2304およびノード2362は、責任境界2393に合意することができ、責任境界2393は、本質的に非占有識別子23と24との間にある。したがって、ノード2304と責任境界2393との間の識別子(すなわち、非占有識別子24から43まで)は、ノード2304の責任である。同様に、責任境界2393とノード2362との間の非占有識別子(すなわち、非占有識別子255から23まで)は、ノード2362の責任である。
図6および次の議論は、本発明を実施できる適切なオペレーティング環境の短い全般的な説明を提供することを意図されたものである。必要ではないが、本発明を、プログラムモジュールなど、コンピュータシステムによって実行されるコンピュータ実行可能命令の全般的な文脈で説明する。一般に、プログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造、および類似物を含む。コンピュータ実行可能命令、関連するデータ構造、およびプログラムモジュールは、本明細書で開示される方法の行為を実行するプログラムコード手段の一例を提示する。
図6を参照すると、本発明を実施する一例のシステムは、処理ユニット621、システムメモリ622、およびシステムメモリ622を含む様々なシステムコンポーネントを処理ユニット621に結合するシステムバス623を含むコンピュータシステム620の形の汎用コンピューティングデバイスを含む。処理ユニット621は、本発明の特徴を含む、コンピュータシステム620の特徴を実施するように設計されたコンピュータ実行可能命令を実行することができる。システムバス623は、メモリバスもしくはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む複数のタイプのバス構造のいずれにもすることができる。システムメモリは、読み取り専用メモリ(「ROM」)624およびランダムアクセスメモリ(「RAM」)625を含む。スタートアップ中などにコンピュータシステム620内の要素の間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム(「BIOS」)626を、ROM624に格納することができる。
コンピュータシステム620には、磁気ハードディスク639から読み取り、これに書き込む磁気ハードディスクドライブ627、リムーバブル磁気ディスク629から読み取り、またはこれに書き込む磁気ディスクドライブ628、例えば、CD−ROMまたは他の光学媒体などのリムーバブル光学ディスク631から読み取り、またはこれに書き込む光ディスクドライブ630をも含めることができる。磁気ハードディスクドライブ627、磁気ディスクドライブ628、および光ディスクドライブ630は、それぞれハードディスクドライブインターフェース632、磁気ディスクドライブインターフェース633、および光ドライブインターフェース634によってシステムバス623に接続される。ドライブおよびそれらに関連するコンピュータ可読媒体は、コンピュータシステム620のコンピュータ実行可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージをもたらす。本明細書で説明する例の環境は、磁気ハードディスク639、リムーバブル磁気ディスク629、およびリムーバブル光学ディスク631を使用するが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイカートリッジ、RAM、ROM、および類似物を含む、データを格納するための他のタイプのコンピュータ可読媒体を使用することができる。
オペレーティングシステム635、1つまたは複数のアプリケーションプログラム636、他のプログラムモジュール637、およびプログラムデータ638を含む1つまたは複数のプログラムモジュールを含むプログラムコード手段を、ハードディスク639、磁気ディスク629、光学ディスク631、ROM624、またはRAM625に格納することができる。ユーザは、キーボード640、ポインティングデバイス642、または例えばマイクロホン、ジョイスティック、ゲームパッド、スキャナ、もしくは類似物などの他の入力デバイス(図示せず)を介してコンピュータシステム620にコマンドおよび情報を入力することができる。上記および他の入力デバイスを、システムバス623に結合された入出力インターフェース646を介して処理ユニット621に接続することができる。入出力インターフェース646は、例えば、シリアルポートインターフェース、PS/2インターフェース、パラレルポートインターフェース、Universal Serial Bus(「USB」)インターフェース、または電気電子技術者協会(「IEEE」)1394インターフェース(すなわち、FireWireインターフェース)などの様々な異なるインターフェースのいずれかを論理的に表し、あるいは、異なるインターフェースの組合せを論理的に表すことすらできる。
モニタ647または他のディスプレイデバイスも、ビデオインターフェース648を介してシステムバス623に接続される。スピーカ669または他のオーディオ出力デバイスも、オーディオインターフェース649を介してシステムバス623に接続される。例えば、プリンタなどの他の周辺出力デバイス(図示せず)をコンピュータシステム620に接続することもできる。
コンピュータシステム620は、例えば、オフィス全体または企業全体のコンピュータネットワーク、ホームネットワーク、イントラネット、および/またはインターネットなどのネットワークに接続可能である。コンピュータシステム620は、そのようなネットワークを介して、例えば、リモートコンピュータシステム、リモートアプリケーション、および/またはリモートデータベースなどの外部リソースとデータを交換することができる。
コンピュータシステム620は、ネットワークインターフェース653を含み、このネットワークインターフェース653を介して、コンピュータシステム620は、外部ソースからデータを受信し、かつ/または外部ソースにデータを送信する。図6に示されているように、ネットワークインターフェース653は、リンク651を介するリモートコンピュータシステム683とのデータの交換を容易にする。ネットワークインターフェース653は、例えば、ネットワークインターフェースカードおよび対応するネットワークドライバインターフェース仕様(「NDIS」)スタックなど、1つまたは複数のソフトウェアおよび/またはハードウェアモジュールを論理的に表すことができる。リンク651は、ネットワークの一部(例えば、イーサネット(登録商標)セグメント)を表し、リモートコンピュータシステム683は、ネットワークのノードを表す。
同様に、コンピュータシステム620は、入出力インターフェース646を含み、この入出力インターフェース646を介して、コンピュータシステム620は、外部ソースからデータを受け取り、かつ/または外部ソースにデータを送る。入出力インターフェース646は、リンク659を介してモデム654(例えば、標準モデム、ケーブルモデム、またはデジタル加入者回線(「DSL」)モデム)に結合され、このモデム654を介して、コンピュータシステム620は、外部ソースからデータを受信し、および/または外部ソースにデータを送信する。図6に示されているように、入出力インターフェース646およびモデム654は、リンク652を介するリモートコンピュータシステム693とのデータの交換を容易にする。リンク652は、ネットワークの一部を表し、リモートコンピュータシステム693は、ネットワークのノードを表す。
図6は、本発明に適切なオペレーティング環境を表すが、本発明の原理は、必要な場合に適切な変更を伴って本発明の原理を実施できるすべてのシステムで使用することができる。図6に示された環境は、例示的にすぎず、決して、本発明の原理を実施できる様々な環境の小さい部分すら表さない。
本発明によれば、ノード、アプリケーションレイヤ、および他の下位レイヤ、ならびにルーティングテーブルおよびノードIDを含む関連するデータを、コンピュータシステム620に関連するコンピュータ可読媒体のいずれにも格納し、それからアクセスすることができる。例えば、そのようなモジュールの諸部分および関連するプログラムデータの諸部分を、システムメモリ622での格納のために、オペレーティングシステム635、アプリケーションプログラム636、プログラムモジュール637、および/またはプログラムデータ638に含めることができる。
例えば磁気ハードディスク639などの大容量記憶デバイスが、コンピュータシステム620に結合されるときに、そのようなモジュールおよび関連するプログラムデータを、その大容量記憶デバイスに格納することもできる。ネットワーク化された環境では、コンピュータシステム620に関係して図示されたプログラムモジュールまたはその諸部分を、リモートコンピュータシステム683および/またはリモートコンピュータシステム693に関連するシステムメモリおよび/または大容量記憶デバイスなどのリモートメモリストレージデバイスに格納することができる。そのようなモジュールの実行を、前述のように分散環境内で実行することができる。
(ノードのリングの参加および離脱)
図27に、本発明の原理を使用できるリングアーキテクチャ2700を示す。リングアーキテクチャ2700は、ノードのリング2705を含む。いくつかの実施形態で、ノードのリング2705は、上記図23Cのリング2350に類似するかこれと同一とすることができる。ノードのリング2705は、参加するノード2710を含むことができ、この参加するノード2710は、直接に隣接するノード1(2720)と直接に隣接するノード2(2730)との間でリングに参加することを試みている可能性がある。いくつかの実施形態で、参加するノード2710は、図23Cで説明したものに類似する形でノードのリング2705に参加することができ、図23Cでは、参加するノードは、ノード2301と2362との間でキャッシングされた合意に基づいて識別子範囲を判定する。ノードの参加中にリング一貫性を維持する方法を、下でおよび図27のノードおよびデータアイテムを参照してさらに詳細に説明する。
図28に、参加するノードがノードのリングに参加するときのリング一貫性を維持する方法2800の一例の流れ図を示す。いくつかの実施形態で、方法2800は、複数のサブ方法を組み込み、各サブ方法は、異なるノードの観点から生じる。これから、方法2800を、環境2700のコンポーネントおよびデータならびに図30の状態図3000を頻繁に参照して説明する。
方法2800は、参加するノードが、リング上の複数の他のノードの近傍を検出する行為(近傍は、少なくとも直接に隣接する先行ノードおよび直接に隣接する後続ノードを含む)(行為2805)を含む。いくつかの場合に、参加するノード2710は、リング2705上の複数の他のノードの近傍を検出し、かつ/または確立することができ、ここで、近傍は、直接に隣接するノード2720および他の直接に隣接するノード2730を含む。状態図3000内など、いくつかの実施形態で、参加するノード3005は、ステップ1で導入メッセージ(例えば、導入3006)を送信することによって近傍を確立する。そのような導入メッセージを受信する各ノードは、状態図のステップ2で肯定応答(ACK)メッセージ(例えば、ACK 3007)を応答することができる。導入3006は、参加するノードを識別するのに使用される情報の1つまたは複数の部分を含み、参加するノード3005がリング2705に参加するつもりであることを示すことができる。
参加するノードを、参加するノード3005によって戻って受信されるACKメッセージから、どのノードがリング上でそれに最も近いかを判定するように構成することができる。例えば、各ACKメッセージは、リング上のノード位置を示す識別子範囲および/または位置識別子と、ノードが責任を有する範囲とを含むことができる。したがって、状態図3000で、参加するノード3005は、直接に隣接するノード3(3010)が、参加するノードの直接に隣接する先行ノードであり、直接に隣接するノード5(3015)が、参加するノードの直接に隣接する後続ノードであることを判定することができる。さらに、参加するノード3005は、隣接ノード1(3020)および隣接ノード2(3025)が、参加するノードと同一リング上にあるが、必ずしも参加するノードの直接に最も近いノードではないことを判定することができる。したがって、近傍確立3050を、例示的状態図3000に従って達成することができる。
方法2800は、参加するノードが、直接に隣接する先行ノードおよび直接に隣接する後続ノードの中から選択された直接に隣接するノードのうちの1つに、参加するノードが参加するノードと選択された直接に隣接するノードとの間のid区間の一部のid区間オーナーシップをとる意図を示す行為(行為2810)を含む。例えば、参加するノード2710は、直接に隣接するノード1(2720)および直接に隣接するノード2(2730)の中から選択された直接に隣接するノード1(2720)に、参加するノード2710が、参加するノード2710と選択された直接に隣接するノード2720との間のid空間の一部のid空間オーナーシップをとる意図を示すことができる。上記のように、id空間は、所与のノードが責任を負う識別子範囲(非占有または他の)を含むことができる。例えば、id空間は、所与のノードが責任を負うノード識別子の数値範囲を含むことができる。
状態図3000内などのいくつかの実施形態で、参加するノード3005が、直接に隣接する先行ノードおよび直接に隣接する後続ノードの中から選択された直接に隣接するノードのうちの1つに、参加するノードが参加するノード3005と選択された直接に隣接するノード3010との間のid区間の一部のid区間オーナーシップをとる意図を示す行為は、直接に隣接する先行ノード3010および直接に隣接する後続ノード3015の中から選択された直接に隣接するノード3010に、トークン要求3031を送信する行為を含み、このトークン要求は、そのノード識別子を有するノードだけが応答できるようにするノード識別子と、第1タイムトゥリブ持続時間値3031とを含み、第1タイムトゥリブ持続時間値は、参加するノード3005が、選択された直接に隣接するノードとの監視関係がアクティブであると仮定できる持続時間を示す。
いくつかの場合に、トークン要求メッセージ3031は、参加するノード3005の期待されるオーナーシップ範囲の更新された状況を示すマーカーを含む。タイムトゥリブ値(TTL)および関係監視は、実質的に図20の方法2000で説明したものと同一とすることができる。
方法2800は、参加するノードが、選択された直接に隣接するノードを監視する意図を示す行為(行為2815)を含む。例えば、参加するノード2710が、監視表示2712で示された直接に隣接するノード1(2720)を監視する意図を示すことができる。そのような監視関係では、参加するノード2710は、ある範囲のノード識別子を監視することに合意することができる。いくつかの場合に、範囲は、直接に隣接するノード2720と直接に隣接するノード2730との識別子の間の識別子を含むことができる。図27には示されていないが、いくつかの実施形態で、監視表示2712およびid空間オーナーシップ表示を、単一のメッセージに組み合わせることができる。
方法2800は、第1の選択された直接に隣接するノードが、参加するノードが参加するノードと第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップをとる意図を示す表示を参加するノードから受信する行為(行為2820)を含む。例えば、直接に隣接するノード1(2720)は、参加するノード2710が、参加するノードとノード2720との間のid空間の一部のid空間オーナーシップをとることの参加するノード2710の意図を示す表示(例えば、id空間オーナーシップ表示2711)を参加するノード2710から受信することができる。
方法2800は、第1の選択された直接に隣接するノードが、参加するノードの、選択された直接に隣接するノードを監視する意図の表示を参加するノードから受信する行為(行為2825)を含む。例えば、直接に隣接するノード1(2720)は、参加するノードの、直接に隣接するノード2720を監視する意図の表示(例えば、監視表示2712)を参加するノード2710から受信することができる。
方法2800は、第1の選択された直接に隣接するノードが、参加するノードと第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップをとることの参加するノードの意図の受入を示す表示を参加するノードに送信する行為(行為2830)を含む。例えば、直接に隣接するノード1(2720)は、参加するノード2710と直接に隣接するノード2720との間のid空間の一部のid空間オーナーシップをとることの参加するノードの意図の受入を示すid空間オーナーシップ受入2773(例えば、id空間オーナーシップ受入2773)を送信することができる。
方法2800は、第1の選択された直接に隣接するノードが、選択された直接に隣接するノードを監視することの参加するノードの意図の受入を示す第2表示を参加するノードに送信する行為(行為2831)を含む。例えば、直接に隣接するノード1(2720)は、選択された直接に隣接するノード2720を監視することの参加するノード2710の意図の受入を示す監視受入2783を送信することができる。
方法2800は、第1の選択された直接に隣接するノードが、参加するノードを監視することの第1の選択された直接に隣接するノードの意図を示す第3表示を参加するノードに送信する行為(行為2832)を含む。例えば、直接に隣接するノード1(2720)は、参加するノード2710を監視することの第1の選択された直接に隣接するノード2720の意図を示す監視表示2793を参加するノード2710に送信することができる。いくつかの実施形態で、第1、第2、および第3の表示を、単一の表示に組み合わせることができる。それに加えてまたはその代わりに、第1、第2、および第3の表示の任意の組合せを、単一の組合せに組み合わせることができる(例えば、第1および第3または第2および第3)。
方法2800は、参加するノードが、参加するノードと選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップをとることの参加するノードの意図の受入を示す第1表示を選択された直接に隣接するノードから受信する行為(行為2835)を含む。例えば、参加するノード2710は、参加するノード2710と直接に隣接するノード2720との間のid空間の一部のid空間オーナーシップをとることの参加するノードの意図の受入を示すid空間オーナーシップ受入2773を直接に隣接するノード1(2720)から受信することができる。
方法2800は、参加するノードが、選択された直接に隣接するノードを監視することの参加するノードの意図の受入を示す第2表示を選択された直接に隣接するノードから受信する行為(行為2836)を含む。例えば、参加するノード2710は、選択された直接に隣接するノード2720を監視することの参加するノードの意図の受入を示す監視受入2783を選択された直接に隣接するノード2720から受信することができる。
方法2800は、参加するノードが、参加するノードを監視することの第1の選択された直接に隣接するノードの意図を示す第3表示を選択された直接に隣接するノードから受信する行為(行為2837)を含む。例えば、参加するノード2710は、参加するノード2710を監視することの選択された直接に隣接するノードの意図を示す監視表示2793を選択された直接に隣接するノード2720から受信することができる。いくつかの場合に、第1、第2、および第3の表示を、単一の表示に組み合わせることができる。それに加えてまたはその代わりに、第1、第2、および第3の表示の任意の組合せを、単一の組合せに組み合わせることができる。
状態図3000内などのいくつかの実施形態で、参加するノード3005が、参加するノードと選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップをとることの参加するノードの意図の受入を示し、参加するノード3005を監視することの選択された直接に隣接するノード3010の意図を示す表示を選択された直接に隣接するノード3010から受信する行為は、選択された直接に隣接するノード3010から第1トークン転送3032を受信する行為を含み、第1トークン転送は、参加するノード3005と選択された直接に隣接するノード3010との間のノードのリング内の非占有ノード識別子の参加するノードのオーナーシップ範囲と、第2タイムトゥリブ持続時間値3032(選択された直接に隣接するノードが、参加するノード3005との監視関係がアクティブであると仮定できる持続時間を示す)と、選択された直接に隣接するノード3010が参加するノードを監視することを示す第1確立許可とを含む。
方法2800は、参加するノードが、参加するノードを監視することの選択された直接に隣接するノードの意図の受入を示す行為(行為2840)を含む。例えば、参加するノード2710は、参加するノード2710を監視することの第1の選択された直接に隣接するノード1(2720)の意図の受入を監視合意2714で示すことができる。状態図3000内などのいくつかの実施形態で、参加するノード3005が、参加するノード3005を監視することの選択された直接に隣接するノード3010の意図の受入を示す行為は、参加するノード3005を監視することの選択された直接に隣接するノードの意図を肯定応答する肯定応答メッセージ3033を選択された直接に隣接するノード3010に送信する行為を含む。
もう一度図27および28を参照すると、方法2800は、第1の選択された直接に隣接するノードが、参加するノード2710を監視することの第1の選択された直接に隣接するノードの意図の受入を示す表示を参加するノード2710から受信する行為(行為2845)を含む。例えば、直接に隣接するノード2720は、直接に隣接するノード2720との一方向監視関係への参加に合意することの合意(例えば、監視合意2714)を参加するノード2710から受信することができる。
いくつかの実施形態で、選択された直接に隣接するノード2720は、それに加えてまたはその代わりに、第2の選択された直接に隣接するノードとのすべての監視関係を終了することの第1ノードの意図を第2の選択された直接に隣接するノードに示す行為と、第1の選択された直接に隣接するノードとのすべての監視関係を終了することの第2ノードの意図を示す表示を第2の選択された直接に隣接するノードから受信する行為と、第2のノードの終了する意図を肯定応答する行為とを実行することができる。例えば、直接に隣接するノード1(2720)は、直接に隣接するノード2(2730)に、ノード2(2730)とのすべての監視関係を終了することのノード1の意図を示すことができる。直接に隣接するノード1(2720)は、ノード1とのすべての監視関係を終了することのノード2の意図を示す表示をノード2(2730)から受信することもできる。直接に隣接するノード1(2720)は、ノード2の終了する意図を肯定応答することもできる。
状態図3000内などのいくつかの場合に、直接に隣接するノード3(3010)を、状態図のステップ5(3034)でノード5(3015)とのすべての監視関係を終了することのノード3の意図を直接に隣接するノード5(3015)に示すように構成することができる。直接に隣接するノード3(3010)は、状態図のステップ6(3035)で、ノード3とのすべての監視関係を終了することのノード5の意図を示す表示をノード5(3015)から受信することもできる。これは、いくつかの実施形態で3034を肯定応答するように働くこともできる。直接に隣接するノード3(3010)は、状態図のステップ7(3036)で、ノード5の終了する意図を肯定応答することもできる。状態図3000のステップ(1〜8)が、直列にまたは並列に発生し得ることに留意されたい。したがって、いくつかの実施形態で、例えば(5)というラベルを付けられたすべてのステップが、同時に発生することができ、他のステップが、直列に発生することができる。直列または並列に実行されるステップの任意の組合せが可能である。
いくつかの実施形態で、方法2800は、参加するノードから導入メッセージ(参加するノードによって所有されるものとして示されるノード識別子の期待されるオーナーシップ範囲を含む)を受信するオプションの行為と、参加するノードに肯定応答メッセージ(参加するノードによって識別されるノード識別子の範囲が、選択された隣接するノードのノード識別子の範囲と一貫することの表示を含む)を送信するオプションの行為とをも含む。いくつかの場合に、ノード識別子の範囲は、導入メッセージおよび肯定応答メッセージのどちらにも含まれないものとすることができる。そうではなく、ノード識別子の範囲を、メッセージを送信したか受信したノードによる受信または送信のときに計算することができる。
方法2800は、直接に隣接する先行ノードおよび直接に隣接する後続ノードの中から選択された他の直接に隣接するノードが、参加するノードと第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを参加するノードに示す行為(行為2850)を含む。例えば、直接に隣接するノード1(2720)および直接に隣接するノード2(2730)の中から選択された直接に隣接するノード2(2730)は、参加するノード2710と直接に隣接するノード2730との間のid空間の一部のid空間オーナーシップを表示するid空間オーナーシップ表示2784を参加するノード2710に示すことができる。
方法2800は、他の直接に隣接するノードが、参加するノードを監視することの、他の直接に隣接するノードの意図を示す行為(行為2851)を含む。例えば、直接に隣接するノード2(2730)が、参加するノード2710を監視することのノード2の意図(2794)を示すことができる。
方法2800は、参加するノードが、参加するノードと他の直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを示す表示を他の直接に隣接するノードから受信する行為(行為2855)を含む。例えば、参加するノード2710は、参加するノード2710と直接に隣接するノード2730との間のid空間の一部のid空間オーナーシップを示すid空間オーナーシップ表示2784を直接に隣接するノード2(2730)から受信することができる。
方法2800は、参加するノードが、参加するノードを監視することの他の直接に隣接するノードの意図を示す表示を他の直接に隣接するノードから受信する行為(行為2856)を含む。例えば、参加するノード2710は、参加するノード2710を監視することの他の直接に隣接するノードの意図を示す監視表示2794を他の直接に隣接するノード2730から受信することができる。
状態図3000内などのいくつかの実施形態で、参加するノード3005が、参加するノード3005と他の直接に隣接するノード3015との間のid空間の一部のid空間オーナーシップを示す表示および参加するノードを監視することの他の直接に隣接するノードの意図を示す表示を他の直接に隣接するノード3015から受信する行為は、第3タイムトゥリブ持続時間値3037を受信する行為を含み、第3タイムトゥリブ持続時間値は、他の直接に隣接するノード3015が、参加するノード3005との監視関係がアクティブであると仮定できる持続時間を示す。いくつかの実施形態で、参加するノードは、ステップ6で他の直接に隣接するノード3015から第2トークン転送3037を受信し、第2トークン転送は、参加するノード3005と他の直接に隣接するノード3015との間の非占有ノード識別子の参加するノードのオーナーシップ範囲を含む。他の場合に、オーナーシップ範囲は、参加するノードまたは他の直接に隣接するノードのいずれかまたはこの両方によって計算することができる。
もう一度図27および28を参照すると、方法2800は、参加するノードが、参加するノードと他の直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを確立することの参加するノードの意図を他の直接に隣接するノードに示す行為(行為2860)を含む。例えば、参加するノード2710は、参加するノード2710と直接に隣接するノード2730との間のid空間の一部のid空間オーナーシップを確立することの参加するノード2710の意図を直接に隣接するノード2(2730)に示す(例えば、id空間オーナーシップ表示2721で)ことができる。
状態図3000内などのいくつかの実施形態で、参加するノード3005が、参加するノード3005と他の直接に隣接するノード3015との間のid空間の一部のid空間オーナーシップを確立することの参加するノードの意図を他の直接に隣接するノード3015に示す行為は、参加するノード3005と他の直接に隣接するノード3015との間で第2オーナーシップ範囲を確立する確立要求(ステップ7の3038)を送信する行為を含み、確立要求3038は、第4タイムトゥリブ持続時間3038(参加するノード3005が、他の直接に隣接するノード3015との監視関係がアクティブであると仮定できる持続時間を示す)と、参加するノードが他の直接に隣接するノード3015を監視することを示す第3確立許可とを含む。いくつかの実施形態で、確立要求3038は、参加するノード3005と他の直接に隣接するノード3015との間の第2オーナーシップ範囲の表示を表すこともできる。他の場合に、上記のように、この範囲を、ノードのリング2705上のノードの任意の直接に隣接する対によって計算することができる。
方法2800は、参加するノードが、他の直接に隣接するノードを監視する意図を表示する行為(行為2865)を含む。例えば、参加するノード2710は、直接に隣接するノード2(2730)を監視する意図を表示する(例えば、監視表示2722を介して)ことができる。状態図3000内などのいくつかの実施形態で、参加するノード3005が、参加するノード3005と他の直接に隣接するノード3015との間のid空間の一部のid空間オーナーシップを確立することの参加するノードの意図を他の直接に隣接するノード3015に示す行為は、参加するノード3005と他の直接に隣接するノード3015との間の第2オーナーシップ範囲を確立する確立要求3038を送信する行為を含み、確立要求3038は、参加するノードと他の直接に隣接するノードとの間の第2オーナーシップ範囲と、第4タイムトゥリブ持続時間3038(参加するノードが、他の直接に隣接するノードとの監視関係がアクティブであると仮定できる持続時間を示す)と、参加するノードが他の直接に隣接するノードを監視することを示す第3確立許可3038とを含む。
方法2800は、他の直接に隣接するノードが、参加するノードと第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを確立することの参加するノードの意図の表示を受信する行為(行為2870)を含む。例えば、直接に隣接するノード2(2730)は、参加するノード2710と直接に隣接するノード2730との間のid空間の一部のid空間オーナーシップを確立することの参加するノードの意図を示すid空間オーナーシップ表示2721を受信することができる。
方法2800は、他の直接に隣接するノードが、第1の選択された直接に隣接するノードを監視することの参加するノードの意図の表示を受信する行為(行為2875)を含む。例えば、直接に隣接するノード2(2730)は、直接に隣接するノード2730を監視することの参加するノードの意図を示す監視表示2722を受信することができる。
方法2800は、他の直接に隣接するノードが、参加するノードを監視する、その他のノードの意図を参加するノードに示す行為(行為2880)を含む。例えば、直接に隣接するノード2(2730)は、参加するノード2710を監視することの直接に隣接するノードの意図を参加するノード2710に示す(例えば、監視表示2794を介して)ことができる。
いくつかの場合に、直接に隣接するノード2(2730)は、それに加えてまたはその代わりに、第1の選択された直接に隣接するノードとのすべての監視関係を終了することの第2ノードの意図を示す表示を第2の選択された直接に隣接するノードから受信する行為と、第2の選択された直接に隣接するノードとのすべての監視関係を終了することの第1ノードの意図を第2の選択された直接に隣接するノードに示す行為と、第1ノードの終了する意図を肯定応答する肯定応答を受信する行為とを実行することができる。他の直接に隣接するノードは、第2の選択された直接に隣接するノードからの表示を肯定応答することもできる。例えば、直接に隣接するノード2(2730)は、直接に隣接するノード1(2720)から、ノード2とのすべての監視関係を終了することのノード1の意図を示す表示を受信することができる。ノード2(2730)は、ノード2の終了する意図を肯定応答する肯定応答(状態図3000の3036)を受信することもできる。ノード2(2730)は、ノード1(2720)からの表示を肯定応答することもできる。
方法2800は、参加するノードが、参加するノードを監視することの他の直接に隣接するノードの意図を示す表示を他の直接に隣接するノードから受信する行為(行為2885)を含む。例えば、参加するノード2710は、参加するノード2710を監視することの他の直接に隣接するノードの意図を示す監視表示2794を直接に隣接するノード2(2730)(例えば、監視)から受信することができる。状態図3000内などのいくつかの実施形態で、参加するノードが、参加するノードを監視することの他の直接に隣接するノードの意図を示す表示を他の直接に隣接するノードから受信する行為は、確立要求に関する第4確立許可(例えば、ステップ8の3039)を受信する行為を含み、第4確立許可は、他の隣接するノード3015が参加するノード3005を監視することを示す。
さらに、参加するノード2710は、リング上のノードのうちの少なくとも1つ(例えば、直接に隣接するノード1(2720))から否定応答(NAK)メッセージを受信する場合があり、ここで、NAKメッセージは、NAK送信側の、リングのビューの表示を含む。NAK送信側の、近傍のビューを使用することによって、参加するノード2710は、NAK送信側の、リングのビューに基づいて、その近傍のビューを更新することができる。
図29に、リービングノードがノードのリングを去るときにリング一貫性を維持する方法2900の一例の流れ図を示す。方法2900を、環境2700のコンポーネントおよびデータならびに図31の状態図3100を頻繁に参照して説明する。
方法2900は、第1の選択された直接に隣接するノードが、ノードのリングを去るというリービングノードの行為の表示を受信する行為(行為2910)を含む。例えば、直接に隣接するノード3(3110)は、リング上の任意のノードから(例えば、リービングノード4(3105)から)、ノードのリングを去るというリービングノード3105の行為を示す表示を受信することができる。いくつかの場合に、リービングノード3105は、表示が受信されるときにノードのリングを既に去っている場合がある。あるいは、リービングノード3105が、去る過程にあるまたはノードのリングを去ることを計画しているのいずれかである場合がある。いくつかの実施形態で、第1の選択された直接に隣接するノード3110が、リービングノード3105がノードのリングを去ろうとしていることの表示を受信する行為は、第1の選択された直接に隣接するノード3110が、リービングノード3105から離脱メッセージ3121を受信すること(状態図3100のステップ1)を含み、この離脱メッセージは、リービングノード3105によって所有されるものとして示されたノード識別子のオーナーシップ範囲を含むことができる。他の実施形態では、直接に隣接するノード3110は、基礎になるバスおよび/またはネットワークなど、ノードのリングの外のノードから表示(例えば、去る表示3121)を受信することができる。
方法2900は、第1の選択された直接に隣接するノードが、リービングノードと第1の選択された直接に隣接するノードとの間のid空間の一部のリービングノードのid空間オーナーシップを引き受ける意図を示す表示を第2の選択された直接に隣接するノードに送信する行為(行為2920)を含む。例えば、直接に隣接するノード3(3110)は、リービングノード3105と直接に隣接するノード3110との間のid空間の一部のリービングノードのid空間オーナーシップを引き受ける意図を示す表示(例えば、確立およびTTL3122)を直接に隣接するノード5(3115)に送信することができる。
方法2900は、第1の選択された直接に隣接するノードが、第1の選択された直接に隣接するノードと第2の選択された直接に隣接するノードとの間での少なくとも一方向監視関係の確立を示す表示を第2の選択された直接に隣接するノードに送信する行為(行為2925)を含む。例えば、直接に隣接するノード3(3110)は、直接に隣接するノード3(3110)と直接に隣接するノード5(3115)との間での少なくとも一方向監視関係の確立を示す表示(例えば、確立およびTTL3122)を直接に隣接するノード5(3115)に送信することができる。
状態図3100内などのいくつかの実施形態では、第1の選択された直接に隣接するノードが、リービングノードと第1の選択された直接に隣接するノードとの間のid空間の一部のリービングノードのid空間オーナーシップを引き受ける意図を示す表示を第2の選択された直接に隣接するノードに送信する行為は、第1の選択された直接に隣接するノード3110が、第1の選択された直接に隣接するノード3110と第2の選択された直接に隣接するノード3115との間でオーナーシップ範囲を確立するために第1確立要求3122を(例えば、状態図3100のステップ2で)第2の選択された直接に隣接するノード3115に送信する行為(第1確立要求は、第1タイムトゥリブ持続時間3122を含み、第1タイムトゥリブ持続時間は、第1の選択された直接に隣接するノード3110が、第2の選択された直接に隣接するノード3115との監視関係がアクティブであると仮定できる持続時間を示す)と、第1隣接ノード3110が、第1確立要求3122の第1確立許可3123を(例えば、状態図3100のステップ3で)受信する行為(第1確立許可3123は、第2隣接ノード3115が第1の選択された直接に隣接するノード3110を監視することを示す)とを含む。
方法2900は、第1の選択された直接に隣接するノードが、リービングノードとの間のid空間の一部のid空間オーナーシップを引き受けることの第1ノードの意図の受入を示す表示を第2の選択された直接に隣接するノードから受信する行為(行為2930)を含む。例えば、直接に隣接するノード3(3110)は、リービングノード3105と第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを引き受けることの直接に隣接するノード5の意図の受入を示す表示(例えば、確立およびTTL3124)を直接に隣接するノード5(3115)から受信することができる。
方法2900は、第1の選択された直接に隣接するノードが、第2の選択された直接に隣接するノードと第1の選択された直接に隣接するノードとの間での一方向監視関係の確立を示す表示を第2の選択された直接に隣接するノードから受信する行為(行為2935)を含む。例えば、直接に隣接するノード3110は、直接に隣接するノード3115と直接に隣接するノード3110との間の一方向監視関係の確立を示す。
状態図3100内などのいくつかの実施形態では、第1の選択された直接に隣接するノードが、リービングノードと第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを引き受ける第1ノードの意図の受入を示し、第2の選択された直接に隣接するノードと第1の選択された直接に隣接するノードとの間の一方向監視関係の確立を示す表示を第2の選択された直接に隣接するノードから受信する行為は、第1隣接ノード3110が、第1隣接ノード3110と第2隣接ノード3115との間でオーナーシップ範囲を確立するために第2隣接ノード3115から第2確立要求を受信する(例えば、状態図3100のステップ2で)行為(第2確立要求は、第2タイムトゥリブ持続時間3124を含み、第2タイムトゥリブ持続時間は、第2隣接ノード3115が、第1隣接ノード3110との監視関係がアクティブであると仮定できる持続時間を示す)と、第1隣接ノード3110が、第2確立要求の第2確立許可3123を送信する(例えば、状態図3100のステップ3で)行為(第2確立許可は、第1隣接ノード3110が第2隣接ノード3115を監視することを示す)とを含む。
(データ一貫性)
図32に、本発明の原理を使用できるリングアーキテクチャ3200を示す。リングアーキテクチャ3200は、ノードのリング3205を含む。いくつかの実施形態で、ノードのリング3205は、上記、図23Cのリング2350および/または図27のリング2705に類似するか同一とすることができる。データ一貫性を維持する方法を、図32のノードおよびデータアイテムに関して下でさらに詳細に説明する。
図33に、フェデレーションインフラストラクチャ内の複製セット内でデータアクセストランザクションを実行する方法3300の流れ図を示す。方法3300を、これから、環境3200のコンポーネントおよびデータを頻繁に参照して説明する。
いくつかの実施形態で、方法3300は、ノードの複製セット内の複数のノードの中からプライマリノードを選ぶ行為(行為3310)を含む。例えば、プライマリノード3211を、ノードの複製セット3210内の複数のノードの中から選ぶことができる。データ一貫性を維持するのを助けるために、複製セットを作成して、データの1つまたは複数の部分を複製するか写しを作ることができる。したがって、ノードがリングを去る(障害または滑らかな離脱のいずれかによって)ときに、他のノードは、離脱するノードによって保持された情報をも含む。いくつかの場合に、複製セット内の各ノードは、1)複製セットのアイデンティティ、2)構成シーケンス番号(CSN)、3)複製セットのメンバシップおよびプライマリノードがどれであるか、4)最後に使用されたシーケンス番号(LSN)、および5)複製セットに格納されたデータを含むことができる。1〜3で表される状態情報を、複製セットの「構成状態」と呼ぶことができ、4〜5で表される状態情報を、複製セットに「格納されるデータ」と呼ぶことができる。
ルーティング一貫性およびリング一貫性に関して上で提供された原理、記述、および説明が、リーダー選出(すなわち、プライマリノードを選ぶこと)に関して適用可能であることに留意されたい。例えば、リング内でid空間オーナーシップを維持する原理を、本明細書で述べるようにプライマリノードおよびセカンダリノードに適用することができる。一般に、プライマリノードおよびセカンダリノードのプロパティは、上のセクションで説明された他のノードのいずれかまたはすべてと一貫する。
いくつかの実施形態で、複製セット3210を、そのプライマリ(プライマリノード3211)として働く単一のノードを用いて作成することができる。プライマリノード3211は、そのLSNおよびCSNを0に初期化し、メンバとしてそれ自体のみを含む複製メンバシップを初期化することができる。その後、複製セット3210を、下でより詳細に説明する様々な再構成アルゴリズムを使用してノードを複製セットに追加することによって、所望のサイズまで拡大することができる。いくつかの場合に、複製セット内の、プライマリノードではないすべてのノードを、セカンダリノードと称する。LSNを、書き込み動作と再構成動作との両方の間で全順序を作成するために増分することができる。CSNは、複製セット内の最新の構成変化をポイントすることができる。したがって、この場合に、CSNは、LSNシーケンスを共有する。LSNシーケンス内のギャップは、通常、データ消失を示し、したがって、回避されなければならない。
方法3300は、プライマリノードがノードの複製セット内の複数のノードの中から選ばれているかどうかを判定する行為(プライマリノードは、クライアントデータアクセス要求を受け入れ、処理するように構成され、複製セットは、選ばれたプライマリノードと1つまたは複数のセカンダリノードとを含む)(行為3320)を含む。例えば、プライマリノード3211は、それがノードの複製セット3210内の複数のノードの中から選ばれていることを判定することができ、プライマリノード3211は、クライアントデータアクセス要求3215を受け入れ、処理するように構成され、複製セット3210は、プライマリノード3211とセカンダリノード3212とを含む。
いくつかの場合に、フォールトトレランスを高めるために複数のセカンダリノード(すなわち、同一データを格納するより多くのセカンダリノード)を追加することが望ましい場合がある。追加されるセカンダリノードの個数は、許容できる同時障害の最大個数に基づいて決定することができる。したがって許容できる同時障害の最大個数が、例えば3である場合に、少なくとも4つのセカンダリノードを有し、その結果、少なくとも1つのノードが、3つの他のノードが障害を発生した後であってもまだ複製セットの一部になるようにすることが望ましい場合がある。いくつかの場合に、複製セットのメンバになるセカンダリノードの個数は、プライマリノードの近傍内のメンバの個数に対応する。
いくつかの場合に、許容可能な同時障害のこの最大個数を、セカンダリノードの閾値個数に関係付けることができる。そのようなセカンダリノードの閾値個数を、クォーラムと称する場合がある。データアクセス要求3215がデータ書き込み要求であるときに、セカンダリノードの閾値個数を、書き込みクォーラムと称する場合がある。同様に、データアクセス要求3215がデータ読み取り要求であるときに、セカンダリノードの閾値個数を、読み取りクォーラムと称する場合がある。したがって、読み取りクォーラムおよび書き込みクォーラムは、所与の個数の許容可能な同時障害について完全なフォールトトレランスを提供するのに必要なノードの最小限の閾値個数を表すことができる。
方法3300は、プライマリノードが1つまたは複数のクライアントデータアクセス要求を受信する行為(各データアクセス要求は、複製セット内のセカンダリノードのうちの少なくとも1つでアクセスされるべきデータの少なくとも一部を示す)(行為3330)を含む。例えば、プライマリノード3211は、クライアント3250からクライアントデータアクセス要求3215を受信することができ、要求3215は、複製セット3210内のセカンダリノード3212でアクセスされるべきデータの少なくとも一部を示す。データアクセス要求3215は、例えば、複製セット内のノードのうちの少なくとも1つに書き込まれるファイルを含む。それに加えてまたはその代わりに、データアクセス要求3215は、複製セット内のノードのうちの少なくとも1つから読み取られ、取り出されるファイルの名前を含むことができる。プライマリノード3211は、着信データ要求を管理し、複製セットに対応する構成状態情報を含む適当な情報をセカンダリノード3212に送信する。データの部分は、ノードのデータシーケンス番号(DSN)、LSN、CSN、プライマリノードアイデンティティ、またはセカンダリノードアイデンティティを含む、複製セット自体に関する制御情報のセットを含むこともできる。
方法3300は、プライマリノードが、クライアントデータアクセス要求が受信された順序で状態を変化させるクライアントデータアクセス要求のそれぞれにデータシーケンス番号(DSN)を割り当てる行為(データシーケンス番号は、複製セット内のノードのそれぞれが従う線形化された処理順序を含む)(行為3340)を含む。例えば、プライマリノード3211は、要求が受信された順序で状態を変化させる各クライアントデータアクセス要求3215にDSNを割り当てることができる。DSNは、複製セット3210内のノードのそれぞれが従う線形化された処理順序を含むことができる。いくつかの場合に、線形化された処理順序を、図35に示されているように、動作のシーケンス3501と称する場合がある。要求が状態を変化させない場合には、プライマリノード3211は、クライアントデータアクセス要求へのデータシーケンス番号の割り当てを省略することができる。
動作のシーケンス3501は、データシーケンス番号(DSN3505)に従って、それらが受信された順序で配置された複数の動作を含むことができる。例えば、プライマリノード3211は、第1動作を表すためにOP1を、第2動作を表すためにOP2を、およびOPnによって表されるように完全に、割り当てることができる。OPn+1は、最後に使用されたシーケンス番号(LSN3515)を表すことができる。上で述べたように、LSN3515を増分して、書き込み動作と再構成動作との両方の間で全順序を作成することができる。CSN3510は、複製セット3210内の最新の構成変化をポイントすることができる。いくつかの場合に、CSN3510は、LSNシーケンスを共有することができる。LSNシーケンス内のギャップは、動作のシーケンス3501が従われなかったことを示し、これは、しばしばデータ消失をもたらす。
方法3300は、プライマリノードが、対応するデータシーケンス番号を含むクライアントデータアクセス要求のうちの少なくとも1つをセカンダリノードのうちの少なくとも1つに送信する行為(行為3350)を含む。例えば、プライマリノード3211は、すべての割り当てられたDSN3216を含むクライアントデータアクセス要求3215をセカンダリノード3212に送信することができる。いくつかの場合に、クライアントデータアクセス要求を、書き込みクォーラム(quorum)または読み取りクォーラムなどのクォーラムに送ることができる。クォーラムは、期待される情報およびさらにプライマリノードが知らない他のデータアクセス要求の表示を応答することができる。例えば、セカンダリノードは、プライマリノード3211が選ばれる前に他のトランザクションを処理済みである場合があり、あるいは、プライマリが知らないあるトランザクションを割り当てられている場合がある。したがって、この情報を、プライマリノード3211に送信することができ、この情報は、プライマリノードの動作のシーケンス3501を更新するのに使用することができる。いくつかの場合に、このプロセスは、下でさらに詳細に説明するように、複製セット再構成中にのみ発生する。
方法3300は、プライマリノードが、少なくとも閾値個数のセカンダリノードから、クライアントデータアクセス要求の受信を示す肯定応答を受信する行為(行為3360)を含む。例えば、プライマリノード3211は、閾値個数のセカンダリノード(例えば、読み取りクォーラムまたは書き込みクォーラム)から、クライアントデータアクセス要求3215の受信を肯定応答する肯定応答メッセージ3220を受信することができる。肯定応答3220は、さらに、メッセージを送信したセカンダリノードが、そのデータアクセスキュー(すなわち、動作のシーケンス3501)にクライアントデータアクセス要求3215を挿入したことを示すことができる。いくつかの場合に、プライマリノード3211は、複製セット内のすべてのノードからまたはそのクォーラムからそのような肯定応答メッセージを受信することができる。肯定応答は、それに加えてまたはその代わりに、クライアントデータアクセス要求の受入または拒否を示すことができる。
方法3300は、プライマリノードが、データアクセス要求をコミットする行為(コミットは、クライアントデータアクセス要求に従ってデータにアクセスすることを含む)(行為3370)を含む。例えば、プライマリノード3211は、データアクセス要求3215を単一フェーズでコミットすることができ、このコミットは、クライアントデータアクセス要求3215に従ってデータにアクセスすることを含む。したがって、データアクセス要求が書き込み要求である場合には、プライマリノード3211は、書き込み要求を単一フェーズでコミットすることができる。単一フェーズでのコミットは、コミットクエリを送信し、セカンダリノードのそれぞれから受信することなく行うことができる。単一フェーズでのコミットを、非ブロッキングトランザクションと称する場合がある。上記複製セット内の障害検出が完全なので、プライマリノードは、コミットクエリを送信し、セカンダリノードのそれぞれから受信する必要がない。
いくつかの実施形態で、プライマリノード3211は、クライアントデータアクセス要求3215を第2複製セットに送信することができる。第2複製セットは、プライマリノードの近傍とは異なる近傍内にあるものとすることができる。いくつかの場合に、プライマリノードの近傍は、複製セットと同一のノードを含む。プライマリノード3211は、複製セット3210がクライアントデータアクセス要求3215の第1部分を処理することを要求し、第2複製セットがそのデータアクセス要求の異なる部分を処理することを要求することができる。しかし、そのような実施形態は、2フェーズコミットプロセスを使用するはずである。例えば、このプロセスは、クライアントデータアクセス要求3215の第1部分に対応する応答を複製セット3210から受信することを含むことができる。このプロセスは、そのデータアクセス要求の第2の異なる部分に対応する応答を第2複製セットから受信することをも含むことができる。応答を組み合わせることができ、組み合わされた応答に基づいて、最新のデータアクセス応答を生成することができる。
例示的実施形態では、プライマリノード3211は、次のようにクライアントデータ書き込み要求に応答することができる。1)プライマリ3211は、アプリケーション一貫性制約に対して要求を認証検査する。プライマリ3211が違反を判定する場合には、プライマリ3211は、アプリケーション一貫性違反の障害状況をクライアント3250に応答し、下のステップ(7)にスキップする。2)プライマリ3211は、プライマリのLSNを原子的に増分することによって得ることができるシーケンス番号を書き込み動作に割り当てる。この例では、所与の書き込み動作に関連するシーケンス番号を、そのDSNと称する。3)プライマリ3211は、DSN、CSN、および書き込むべきデータをすべてのセカンダリノードに通信し、書き込みクォーラムのセカンダリノードが応答するのを待つ(変形手法は、プライマリが、書き込むべきデータを書き込みクォーラムだけに送信することとすることができる)。
4)書き込みクォーラムのセカンダリノードから肯定応答を聞いた後に、プライマリ3211は、書き込み動作をローカルに実行し、書き込み動作がコミットされると考えられる点にある。プライマリ3211は、成功の状況をクライアントに戻って応答し、下のステップ(7)にスキップする。5)プライマリ3211が、書き込みクォーラムのセカンダリノードから肯定応答を得ることができない場合には、プライマリ3211は、障害を発生したセカンダリノードを除去するために再構成動作を開始する。6)プライマリ3211が、書き込み動作をローカルに実行することができない場合には、プライマリ3211は、新しいプライマリに推移するために再構成動作を開始し、それ自体を複製セット3210から除去し、ステップ(7)にスキップする。7)プライマリ3211は、次の着信クライアントデータアクセス要求を待つ。他の実施形態が、可能であり、上記のようにより多数またはより少数のステップを含むことができることに留意されたい。
例示的実施形態では、セカンダリノード3212は、次の形でデータ書き込み要求を処理することができる。1)セカンダリは、着信書き込み動作で指定されるCSNをそのCSNと比較する。指定されたCSNがそのCSN未満である場合に、セカンダリは、その要求を無視し、下のステップ(4)にスキップする。セカンダリノード3212は、指定されたCNSがそのCSNを超えることができないとアサートする。というのは、そのような条件が、再構成が不完全な障害ディテクタを用いて達成されたことを暗示するからである。2)セカンダリノード3212は、着信書き込みデータ要求のDSNをそのLSNと比較する。DSNが、その(LSN+1)未満である場合に、セカンダリノード3212は、その書き込みデータ要求を無視する。DSNが、その(LSN+1)を超える場合に、セカンダリノード3212は、そのデータ書き込み要求をバッファリングし、下のステップ(4)にスキップする。そうではない場合に、セカンダリノード3212は、そのLSNを原子的に増分し、そのデータ書き込み要求を受け入れ、肯定応答3220を送り返す。セカンダリノード3212が、ローカル障害に起因して要求を受け入れることができない場合には、セカンダリノード3212は、セカンダリとしてのそのノードを複製セットから除去するために再構成を開始するようにプライマリに要求する。3)セカンダリノード3212は、現在バッファリングされている動作のそれぞれを調べ終えるまで、それらを調べ、処理し、そのDSNがセカンダリの本明細書で説明するLSN値の範囲内であるものをすべて受け入れ、したがってプライマリによって確立された全順序を保存する。4)セカンダリノード3212は、プライマリ3211からの次のデータアクセス要求を待つ。処理の行為は、関連するデータを安定したストレージファシリティに書き込むことを含むことができる。
データベースセッティングでは、書き込みトランザクションを実行する例示的方法は、次のとおりである。1)「アボート」を含む「コミット」の前の動作について、プライマリ3211は、単純に、その動作をローカルに実行し、下のステップ(6)にスキップする。2)「コミット」について、プライマリ3211は、トランザクションをローカルに準備することによってトランザクション順序を判定する。このステップは、データベース一貫性制約に対してトランザクションの認証検査をも行う。ローカル準備に失敗する場合には、障害状況をクライアント3250に戻って応答し、下のステップ(6)にスキップする。3)プライマリノード3211は、「コミット」要求と共に、前の例のステップ(2)〜(3)で指定されたセカンダリノード3212にトランザクションを転送する。4)プライマリノード3211は、書き込みクォーラムのセカンダリノードから肯定応答を得た後に、トランザクションをローカルにコミットし、クライアント3250に成功を報告する。5)プライマリノード3211は、書き込みクォーラムのセカンダリノードから肯定応答を得ることができない場合に、ローカルに準備されたトランザクションをアボートし、障害を発生したセカンダリノードを除去するために再構成動作を開始する。6)プライマリ3211は、次の着信クライアントデータアクセス要求3215を待つ。
図34に、フェデレーションインフラストラクチャ内で一貫した複製セットを確立し、維持する方法3400の一例の流れ図を示す。方法3400を、これから、環境3200のコンポーネントおよびデータを頻繁に参照して説明する。
方法3400は、ノードのリング内の複数のノードの中から複製セットを確立する行為(複製セットは、メンバとしてプライマリノードおよび1つまたは複数のセカンダリノードを含む)(行為3410)を含む。例えば、複製セット3210を、ノード3211、3212およびノードのリング3205上の他のノードの中から確立することができる。複製セット3210に、メンバとしてプライマリノード3211およびセカンダリノード3212を含めることができる。いくつかの場合に、複製セット3210の境界を、セカンダリノードもメンバである、プライマリの近傍と同一とすることができる。
方法3400は、複製セットメンバのうちの少なくとも1つに影響する複製セット構成イベントオカレンス(replica set configuration event occurrence)を示す表示を受信すること(行為3420)をも含む。例えば、複製セット3210内のノード3211および3212のいずれもが、プライマリノード3211およびセカンダリノード3212のうちの少なくとも1つに影響する複製セット構成イベントオカレンスの表示を受信することができる。複製セット構成イベントには、複製セット内のノード障害、複製セットからのノード離脱、またはノードが複製セットに参加することを含めることができる。再構成を引き起こす、複製セットのノードに影響する他のイベントも、可能である。いくつかの場合に、そのような構成イベントは、クライアントデータアクセス要求中に発生し得る。
方法3400は、受信された表示に基づいて、複製セットを再構成しなければならないことを判定する行為(再構成は、複製セット構成イベントオカレンスに基づいて、複製セットからの既存セカンダリノードの除去、複製セットへの新しいセカンダリノードの追加、新しいプライマリへの突然の推移、および新しいプライマリへの滑らかな推移のうちの少なくとも1つを含む)(行為3430)を含む。例えば、受信された表示に基づいて、複製セット3210内のノードのうちの1つが、複製セット3210を再構成しなければならないと判定することができる。再構成には、発生した構成イベントに応じて、複製セットからの既存セカンダリノードの除去、複製セットへの新しいセカンダリノードの追加、新しいプライマリへの突然の推移、および新しいプライマリへの滑らかな推移のうちの少なくとも1つを含めることができる。
複製セットを再構成し、新しいプライマリノードに推移する一例の方法およびアルゴリズムが、以下に含まれる。複製セット再構成の一例は、一般に、1)新しいプライマリへの突然の推移、2)新しいプライマリへの滑らかな推移、3)セカンダリノードの除去、および4)セカンダリノードの追加を含む4つのケースをカバーする。この4つの一般的な一例のそれぞれは、独立に発生し得、少なくともいくつかの実施形態で、既存のプライマリの置換を伴わない。
方法3400は、複製セット構成イベントに対応する再構成に従って複製セットを再構成する行為(行為3440)を含む。例えば、複製セット3210を、複製セット構成イベントに対応する再構成に従って再構成することができる。したがって、複製セット構成イベントがノード障害である場合に、複製セット3210を、セカンダリの追加、セカンダリの除去、または新しいプライマリへの推移によって再構成することができる。同様に、複製セット構成イベントがノード参加であるときに、複製セット3210を、上記の方法のいずれかに従って再構成することができる。いくつかの場合に、ある再構成方法が、ある再構成イベントに対応することができる。この対応は、ユーザによって構成することができ、あるいは自動的とすることができる。
いくつかの場合に、プライマリノード3211は、構成状態情報に基づいて、1つまたは複数の複製セット再構成が進行しているのを検出することができる。上で示したように、再構成プロセス中には、新しいプライマリノードを、複製セットについて選ぶことができる。上記実施形態によれば、リング3205内のノードは、新しいプライマリノードの情報がリング上の他のノードに関して最新であることを保証するために、新しいプライマリノードと通信することができる。
いくつかの実施形態で、上で図34を参照して説明したものに類似するかこれと同一の一貫した複製セットを使用して、データにアクセスし、データを格納することができる。例えば、複製セット3210を、複製セットノードのうちの1つまたは複数(例えば、セカンダリノード3212)上のデータストレージの一部を維持するように構成することができる。プライマリノード3211は、クライアントデータアクセス要求3215を受信することができる。要求3215には、ノードの複製セット3210内の少なくとも1つのノード上でアクセスされる情報の表示を含めることができる。プライマリノードは、要求を直接に処理するか、あるいは要求をセカンダリノードに渡すかのいずれかを行うことができる。プライマリノード3211が、受信されたクライアントデータアクセス要求3215内で示される情報の少なくとも一部へのアクセスに失敗したことを検出した場合には、プライマリノード3211は、それ自体を複製セットから除去することができ、その結果、プライマリノード3211に格納された情報は、クライアントデータアクセス要求に応答してアクセスされるのを防がれるようになる。これは、失効した若しくは古い情報を返す可能性を除去し、クライアントデータアクセス要求3215に応答して返されるすべての情報が最新であることを保証する。
いくつかの実施形態によれば、新しいプライマリへの突然の推移は、次の形で発生し得る。既存プライマリが障害を発生するときに、新しいプライマリが、上で述べた方法による信頼できるリーダー選出アルゴリズムを使用して選ばれる。任意のクライアント動作を受け入れる前に、新しいプライマリは、複製セットから古いプライマリを除去するために、次の構成変更を実行することができる。1)新しいプライマリは、それが複製セット状態の知識を有するかどうかを知るためにチェックすることができる。新しいプライマリは、この知識を有しない場合に、複製セットのすべてのメンバが障害を発生したと暗黙のうちに判定し、下のステップ(9)にスキップする。2)新しいプライマリは、複製セットのすべてのノードに連絡して、すべての既存セカンダリノードに連絡し終えることに関するフィックスポイントに達するまで、それらのCSNおよびLSNを判定する。このステップで収集された情報を使用して、新しいプライマリは、最も古いCSN、最も新しいCSN、および最も新しいLSNを判定する。最も古いCSNおよび最も新しいCSNが、いくつか(またはほとんど)の場合に同一である可能性があることに留意されたい。最も古いCSNおよび最も新しいCSNが異なるときには、再構成動作の途中でのプライマリの障害が示される。その場合に、最も古いCSNより大きいCSNを有するすべての複製は、確実に、最新データを有する。したがって、このステップの終りに、新しいプライマリは、最も古いCSNおよび最も新しいCSNが異なるときに、最新データを既に有する。そうでない場合に、新しいプライマリは、最も新しいCSNの前に書き込まれたデータだけを有し、ステップ(3)でのチェックは、新しいプライマリが最も新しいCSNを過ぎて書き込まれたデータをも有することを保証する。
3)最も古いCSNおよび最も新しいCSNが同一であり、新しいプライマリが、読み取りクォーラムのセカンダリノードと連絡することができない場合には、データ消失の可能性があり、新しいプライマリは、下のステップ(9)にスキップする。いくつかの場合に、読み取りクォーラムが書き込みクォーラムと交差することが非常に有利である(または必要でさえある)可能性がある。サイズベースのクォーラムについて、読み取りクォーラムは、(n−w)より大きい任意のセットであり、ここで、nは、CSNで指定される複製ノードの個数であり、wは、書き込みクォーラムである。
4)新しいプライマリは、セカンダリノードの報告されたLSNと上のステップ(2)で判定された最新のLSNとの間の動作をそれらのセカンダリノードに送信することによって、セカンダリノードをその構成においてデータに関して最新にすることを試みる。最も古いCSNの後、最新のCSNまでの不完全な再構成動作を、このステップで、短縮された無効な再構成動作として送信することができる。5)新しいプライマリは、最新のCSNを有する構成から、障害を発生したプライマリ(例えば、プライマリ3211)およびセカンダリノード(例えば、セカンダリノード3212)を除去した後に、新しい複製構成をローカルに構築し、最新のLSNをそのLSNにし、そのLSNを増分することによって得られたCSNをその新しい構成に割り当てる。6)新しいプライマリは、新しい複製構成をすべてのセカンダリノードに通信する。
7)新しいプライマリが、上のステップ(6)で送信された再構成動作に応答して、すべてのセカンダリノードから成功状況を得ることができないか、いずれかのセカンダリから障害状況を聞く場合に、新しいプライマリは、上のステップ(2)〜(6)を再実行する。8)少なくともいくつか(またはすべて)のセカンダリノードから成功状況を聞いた後に、新しいプライマリは、下のステップ(10)にスキップする。9)新しいプライマリは、データセンタのベルを鳴らす、ポケットベルメッセージを送信するなど、ディザスタリカバリを実行するためのステップを行う。いくつかの場合に、複製セットは、手動介入を使用することによってのみ復元することができる。10)新しいプライマリは、この時点でクライアント動作の処理を再開する。上のステップ(2)で、新しいプライマリは、古いプライマリが障害を発生したときに複製セットに追加される過程にあった新しいセカンダリノードを発見する可能性がある。フィックスポイントは、新しいプライマリが新しい構成の一部と考えるセカンダリノードの安定したセットを取り込むことを意味する。新しいセカンダリノードをも処理する突然のプライマリ推移の前後の最適化を除去する場合には、このフィックスポイント計算を除去することができる。
いくつかの実施形態によれば、新しいプライマリへの滑らかな推移は、次の形で発生し得る。既存プライマリから新しいプライマリへの推移は、複製セットへの新しいセカンダリの追加(下で説明する)に非常に似ている。新しいプライマリは、複製セット内の現行セカンダリであってもなくてもよい。この例では、潜在的な新しいプライマリは、このアルゴリズムに従って複製セットの一部になる。1)新しいプライマリは、それにデータを転送するために、複製セット内の1つまたは複数の既存セカンダリに連絡し、2)新しいプライマリは、それと同時に、新しい動作をそれに転送するために既存プライマリ(例えば、プライマリ3211)に連絡する。
3)新しいプライマリから受信された新しい動作のDSNが、セカンダリから受信されたデータより大きい場合には、新しいプライマリによって送信された新しい書き込み動作を、セカンダリによって受信されたデータとマージする。4)上のステップ(1)で新しいプライマリによって連絡されたすべてのセカンダリノードが、データ転送が完了したことを報告した後に、新しいプライマリは、既存プライマリ3211に連絡して、新しいプライマリを複製セットの現行プライマリにするための構成変更を開始する。5)ステップ(4)で送信された再構成要求に対する応答として既存プライマリから成功状況を受信した後に、新しいプライマリは、複製セットのプライマリの役割を引き受け、6)ステップ(5)の再構成要求まで、新しいプライマリは、それが受信するすべてのクライアント動作を既存プライマリに転送する。
いくつかの実施形態によれば、セカンダリノードを除去するプロセスは、次の形で発生し得る。完全な障害ディテクタ(上で図14および19に関して説明した)が、既存セカンダリ3212が障害を発生したことをリングノードのうちの1つ(例えば、プライマリノード3211)に報告するとき、または既存セカンダリが、それ自体を複製セット3210から自発的に除去するために他のノードのうちの1つ(例えば、プライマリ)に連絡するときに、ノードのうちの1つ(例えば、プライマリ)は、次のアルゴリズムを用いて、複製セットからセカンダリを除去することができる。この例では、1)プライマリは、着信クライアント動作(例えば、3215)の処理をブロックし、これらをバッファリングするか、クライアント(例えば3250)に後で再試行するように求めるかのいずれかを行い、2)プライマリは、障害を発生したセカンダリを複製セットメンバシップから除去することによって新しい複製構成をインストールし、そのLSNを原子的に増分することによって新しい構成にCSNを割り当てる。いくつかの場合に、これは、再構成動作が、データ動作と同一のシーケンスストリーム内にあることを意味する。3)プライマリは、すべてのセカンダリノードに新しい構成を通信し、4)少なくともいくつか(またはすべて)のセカンダリノードから成功状況を聞いた後に、プライマリは、クライアント動作の処理を再開する。
そのような再構成プロセス中に、再構成されるセカンダリは、次のように振る舞うことができる。1)セカンダリは、再構成動作のCSNをそのLSNと比較する。CSNが(LSN+1)未満の場合には、セカンダリは、プライマリに傷害状況を送信し、下のステップ(3)にスキップする。CSNが(LSN+1)と等しい場合には、セカンダリは、そのLSNを原子的に増分し、再構成動作を受け入れ、成功状況を送り返す。そうでない場合には、セカンダリは、再構成動作をバッファリングし、下のステップ(3)にスキップし、2)セカンダリは、現在バッファリングされている動作のうちの少なくともいくつか(またはすべて)を調べるまで、それらを調べ、処理し、3)セカンダリは、プライマリからの次の動作要求を待つ。
障害ディテクタの完全さは、古い再構成および新しい再構成が同時には存在しないことを保証する。いくつかの実施形態で、全体的な仮定は、フェイルストップ(fail−stop)障害を検出するのに使用できる完全な障害ディテクタが存在することである。この意味での「完全な」の使用は、ノードインスタンス(ノードの存在のそのインスタンス)が実際に永久的に使用不能にならない限り、障害ディテクタが、そのノードインスタンスが使用不能になったことを絶対に報告しないという仮定を取り込む。上で述べたように、障害検出は、上記リング一貫性プロパティおよびルーティング一貫性プロパティという概念と密接に関係し、これに頼ることができる。古い再構成および新しい再構成が同時には存在しないので、これは、複製セット状態が、複製セットメンバの外部に存在しないことを暗示する。というのは、複製セットノードが、それが障害を発生した後またはそれが自発的にそれ自体を除去した後のいずれかに限って複製セットから除去されるからである。このプロパティは、複製セットのすべてのメンバが障害を発生した状態を識別するのに有用である。というのは、新たに選ばれるプライマリが、この状態の下で複製セット状態へのアクセスを有しないことを認識するからである。
この例では、プライマリが、再構成動作が完了するまで着信動作の処理をブロックするので、これは、オペレータが、不可視になった再構成動作を無視することを可能にする。再構成動作は、それを開始したプライマリが再構成プロセス自体の間に障害を発生し、障害を発生したプライマリによって連絡されたセカンダリノードもその後に障害を発生するときに、不可視になり得る。このプロパティは、複製セットの既存セカンダリノードの間で単一のCSNを見つける新たに選択されたプライマリが、それが見つけたCSNがシステム全体を観察する託宣展望から実際に最新のCSNであることまたは、後で不可視になった、より後の再構成動作の後にデータ動作が開始されなかったことのいずれかを確信することを可能にする。したがって、新たに選ばれたプライマリが、新しいプライマリへの突然の推移に関する例で説明したように、既存セカンダリノードの間でそのプライマリが見つけた最新CSNに基づいてデータ消失を判定することが、安全である。
再構成動作がデータ動作と同一のシーケンス内にあることができることを考慮すると、少なくともいくつか(またはすべて)のセカンダリノードが、再構成動作の終りにデータに関して最新にされる(これらのすべてが同一のLSNを有することを意味する)。書き込みクォーラムの存在下で、このプロパティは、新に選ばれたプライマリが、既存セカンダリノードの間で見つけた最新CSNに基づいてデータ消失を判定することを安全にする。
いくつかの実施形態によれば、セカンダリノードを追加するプロセスは、次の形で発生し得る。この例では、新しいセカンダリは、次のアルゴリズムに従って、複製セットの一部になる。1)セカンダリノードは、それにデータを転送するために、複製セット内の1つまたは複数の既存セカンダリノードに連絡し、2)セカンダリノードは、同時に、新しい動作をそれに転送するためにプライマリ(例えば、3211)に連絡し、3)プライマリから受信された新しい動作のDSNが、セカンダリから受信されたデータより大きい場合には、セカンダリノードは、プライマリによって送信された新しい書き込み動作をセカンダリから受信したデータとマージし、4)上のステップ(1)で新しいセカンダリによって連絡された少なくともいくつか(またはすべて)のセカンダリノードが、データ転送が完了したことを報告した後に、セカンダリノードは、プライマリに連絡して、複製セットにそれ自体を追加するための構成変更を開始する。
この例を継続すると、新しいセカンダリを複製セットに追加するためにプライマリが従うアルゴリズムは、次のとおりである。1)新しいセカンダリからの最初の要求に応答して、プライマリは、まだ複製セットの一部ではないが、新しいセカンダリになるはずのものへの新しい動作の転送を開始し、2)新しいセカンダリからの後続の再構成要求に応答して、プライマリは、新しい構成が既存セカンダリを除去するのではなく新しいセカンダリを追加するという相違を伴う、上記「セカンダリノードの除去」の一例で述べたものと実質的に同一のステップを使用する再構成動作を開始することができる。
図36に、フェデレーションインフラストラクチャ内で複製セットからのデータにアクセスする環境3600を示す。環境3600は、複数のモジュールを含むデータアクセスシステム3610を含む。一般に、以下で説明する各モジュールは、リング実施態様(例えば、ノードのリング3205)内に存在し、近傍および/または複製セットを構成するノード、より一般的にはノードのリング配置を構成するノードおよびそのようなノードのリング配置内のアクティブノードになることを試みるデバイスにまたがる分散アルゴリズムとして実施され得る。このシステムは、リング上の複数のノードの近傍を確立するように構成された近傍確立モジュール3620を含み、この近傍は、少なくとも、直接に隣接する先行ノードおよび直接に隣接する後続ノードを含む。ノードのリング3205には、直接に隣接するノード1(3608)と直接に隣接するノード2(3609)との間でリングに参加することを試みることができる、参加するノード3606を含めることができる。いくつかの実施形態で、参加するノード3606は、参加するノードがノード2301と2362との間でのキャッシングされた合意に基づいて識別子範囲を判定する図23Cで説明したものに類似する形でノードのリング3605に参加することができる。
このシステムは、さらに、確立された近傍の外の参加するノードが、ノードのリング内の確立された近傍に参加する意図を示したことを判定するように構成された意図判定モジュール3625を含む。意図判定モジュール3625は、ノードの近傍の確立を示す近傍表示3621を近傍確立モジュール3620から受け取ることができる。近傍には、直接に隣接するノード1(3608)、参加するノード3606、および直接に隣接するノード2(3609)を含めることができる。意図判定モジュール3625は、参加するノードの参加する意図3626を一貫性維持モジュール3630に送ることができる。
一貫性維持モジュール3630を、複数のノード内の各ノードが近傍内のid空間の一部のid空間オーナーシップをとるように、確立された近傍内の一貫性を維持するように構成することができる。上記見出し「ノードのリングの参加および離脱」において説明したように、近傍内の一貫性は、参加するノード3606がノードのリング3605に参加するときに維持することができる。一貫性維持モジュール3630は、一貫性表示3631を選出判定モジュール3635に送ることができる。いくつかの実施形態で、リングのid空間内の所与のidで維持されるすべての状態一貫性について、そのプライマリノードが任意の所与の瞬間にそのidを所有するリングノードである状態の単位について形成された複製セットがあることに留意されたい。id空間オーナーシップは、所与のidについてノードの間で移動する(一貫して)ので、その所有するノードで格納される(または、これによって制御される)サービス状態の任意の単位の対応するプライマリさもそのように移動する。この実施形態では、id空間オーナーシップおよびプライマリさは、同時の形で転送される。
選出判定モジュールは、複数のノード内のノードの1つが、プライマリノードによって向けられるクライアントデータアクセス要求に応答するように構成されたノードの複製セットにまたがる責任を有するプライマリノードになるために選ばれたことを判定するように構成され得る。プライマリノード選出に関して上記のように、選出判定モジュールは、プライマリノードが複製セット(確立された近傍内のすべてのノードを含むことができる)について選ばれたことを判定し、どのノードがプライマリになるために選ばれたかの表示(3636)を要求受信モジュールに送ることができる。上記のように、そのようなリーダー選出は、本論文で前に定義したリング一貫性およびルーティング一貫性(少なくとも部分的に完全な障害ディテクタ機構を形成する監視合意を含む)の原理に従うことができる。
要求受信モジュール3640を、クライアント3615から1つまたは複数のクライアントデータアクセス要求を受信するように構成することができ、各データアクセス要求3641は、複製セット内のノードのうちの少なくとも1つでアクセスされるデータの少なくとも一部を示す。要求受信モジュール3640は、プライマリノード表示3636をも受け取ることができる。プライマリノード表示3636およびデータアクセス要求3641を、データアクセスモジュール3645への3641Aおよび3636Aに組み合わせることができる(あるいは、それぞれを別々に送ることができる(図示せず))。データアクセスモジュール3645を、通信3607を介してノードのリング3605内の1つまたは複数のノードと通信し、クライアントデータアクセス要求3641内で示されたデータにアクセスするように構成することができる。したがって、システム全体をインスタンス化することができ、ここで、ノードがノードのリング3605に参加し、去ることができ、一貫性が維持され、プライマリノードが選ばれ、データが信頼できる形でアクセスされる。このシステム内の説明されたモジュールのそれぞれは、これらの機能ならびに上のセクションでより詳細に説明した、各モジュールに対応する他の機能を実行することができる。
いくつかの実施形態で、アクセスされるデータは、サービスを含む。例えば、参加するノード3606は、クライアント3615がアクセスを望むサービスを提供することができる。例えば、サービスを、電子メールアプリケーションとすることができる。クライアント3615は、アクセスされるデータを示すことができ、データアクセスシステム3610は、参加するノードがデータアクセスシステムによって維持されるリングおよびデータの一貫性に起因してリングを去るかどうかにかかわりなく、データにアクセスするように構成され得る。他の場合に、提供されるサービスを、ロックマネージャ、データストレージシステム、プロデューサ−コンシューマキュー、または任意の他のサービスとすることができる。システムが、データベースなどのデータにアクセスするのに使用される場合に、システム3610を、複製セット内のデータの原子性、一貫性、独立性、および永続性(ACID)プロパティのそれぞれを維持するように構成することができる。したがって、どのノードが実際にデータを含むか、どのノードがノードのリングに参加しまたは去るか、あるいはデータを含むかなりの個数のノードが障害を発生したかどうかにかかわりなく、一貫した信頼できるデータアクセスを提供するように構成できるシステムが提示される。
いくつかの場合に、サービスによって公開される動作を、状態を変化させる動作および状態を変化させない動作にパーティショニングすることができる。ストレージサービスの場合に、状態を変化させる動作を、「書き込み」と呼ぶことができ、状態を変化させない動作を、「読み取り」と呼ぶことができる。ロックマネージャサービスの場合に、状態を変化させる動作を、「獲得」および「解放」と称し、状態を変化させない動作を、「クエリ」と称する。プロデューサ−コンシューマキュー(時々分散計算に使用される)の場合に、状態を変化させる動作を、「エンキュー」および「デキュー」と称し、状態を変化させない動作を、「ピーク」と称する。したがって、本明細書のいくつかの実施形態で、用語「書き込み」は、状態を変化させるすべての動作を取り込み、用語「読み取り」は、状態を変化させないすべての動作を取り込む。
いくつかの場合に、読み取り動作は、プライマリノード3211によってローカルに処理される。読み取りを、クライアントが要求した状態が存在しないので、プライマリになるはずのもので満足することができない場合には、その状態は、セカンダリノードのどれにも(保証されて)存在はしない。いくつかの実施形態で、書き込み動作を、プライマリノード3211を介して順序付けることができる。その場合に、プライマリノード3211は、少なくとも書き込みクォーラムのセカンダリノードが、それらがクライアント供給の状態をそれら自体で書き込んだことを肯定応答するまで、実際にはその状態をローカルに書き込まない可能性がある。その肯定応答の後に、プライマリノード3211は、実際に状態をローカルに書き込む(または書き込むことを試みる)。再構成は、いくつかの実施形態で、複製セットメンバ(プライマリノードまたはセカンダリノード)が要求された状態を書き込むことができないときに、いつでも発生し得る。その場合に、ノードは、それ自体を複製セットから除去することによって、複製セット内で再構成を開始することができる。さらに、応答していない任意のセカンダリノードは、障害を発生し(これは、完全な障害ディテクタのゆえに保証される)、プライマリノードは、複製セットからそのセカンダリノードを除去することによって再構成をトリガする。いくつかの場合に、これは、プライマリノードに複製セットのプライマリであることを停止させない。
データアクセスシステム3610を、クライアントデータ書き込み要求に従ってデータを書き込むように構成することができる。したがって、データアクセス要求3641(またはデータアクセス要求3215)が書き込み要求であるか、書き込み要求を含む場合に、プライマリノード3211は、クライアントデータ書き込み要求で示されるデータをセカンダリノード内のデータストアに書き込むようにセカンダリノード3212に指示することができる。いくつかの場合に、プライマリノードは、書き込み要求を2フェーズで1つまたは複数のセカンダリノード3212に複製する。この変形の利益は、書き込みクォーラムが複製セット3210内のすべてのセカンダリノードからなる場合に、読み取り動作をセカンダリによってサービスすることが可能になることである。いくつかの場合に、セカンダリノードおよびプライマリノードでの書き込み動作は、データをノードのそれぞれに個別に使用可能な安定したストレージに書き込むなど、追加ロジックをトリガすることができる。
データアクセスシステム3610を、クライアントデータ読み取り要求に従ってデータを読み取るように構成することができる。したがって、データアクセス要求3641(またはデータアクセス要求3215)が、読み取り要求であるか読み取り要求を含む場合に、プライマリノード3211またはセカンダリノード3212のいずれかを、読み取り要求を直接に処理するように構成することができる。いくつかの場合に、プライマリノード3211が、要求内で示されるデータを読み取るようにセカンダリノードに要求することは、不必要である。他の場合に、セカンダリは、データを読み取り、クライアントデータ読み取り要求に自律的に応答することができるものとすることができる。
本発明を、その趣旨または本質的特性から逸脱せずに他の特定の形で実施することができる。説明された実施形態は、すべての面で、例示的であって制限的ではないと考えられなければならない。したがって、本発明の範囲は、前述の説明ではなく添付の特許請求の範囲によって示される。特許請求の範囲の同等性の意味および範囲に含まれるすべての変更が、その範囲に含まれなければならない。

Claims (45)

  1. 両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、参加するノードがノードの前記リングに参加するときにリング一貫性を維持する方法であって、
    参加するノードが、前記リング上の複数の他のノードの近傍を検出する行為であって、前記近傍は、少なくとも直接に隣接する先行ノードおよび直接に隣接する後続ノードを含む、行為と、
    前記参加するノードが、前記直接に隣接する先行ノードおよび直接に隣接する後続ノードの中から選択された直接に隣接するノードのうちの1つに、前記参加するノードと前記選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップをとることの前記参加するノードの意図を示す行為と、
    前記参加するノードが、前記選択された直接に隣接するノードを監視する意図を示す行為と、
    前記参加するノードが、前記参加するノードと前記選択された直接に隣接するノードとの間の前記id空間の一部のid空間オーナーシップをとることの前記参加するノードの意図の受け入れを示す第1表示を前記選択された直接に隣接するノードから受信する行為と、
    前記参加するノードが、前記選択された直接に隣接するノードを監視することの前記参加するノードの意図の受け入れを示す第2表示を前記選択された直接に隣接するノードから受信する行為と、
    前記参加するノードが、前記参加するノードを監視することの第1の選択された直接に隣接するノードの意図を示す第3表示を前記選択された直接に隣接するノードから受信する行為と、
    前記参加するノードが、前記参加するノードを監視することの前記選択された直接に隣接するノードの意図の受け入れを示す行為と
    を含むことを特徴とする方法。
  2. 前記参加するノードが、前記参加するノードと前記他の直接に隣接するノードとの間のid空間の前記一部のid空間オーナーシップを示す表示を前記他の直接に隣接するノードから受信する行為と、
    前記参加するノードが、前記参加するノードを監視することの前記他の直接に隣接するノードの意図を示す表示を前記他の直接に隣接するノードから受信する行為と、
    前記参加するノードが、前記参加するノードと前記他の直接に隣接するノードとの間の前記id空間の一部のid空間オーナーシップを確立することの前記参加するノードの意図を前記他の直接に隣接するノードに示す行為と、
    前記参加するノードが、前記他の直接に隣接するノードを監視する意図を示す行為と、
    前記参加するノードが、前記参加するノードを監視することの前記他の直接に隣接するノードの意図を示す表示を前記他の直接に隣接するノードから受信する行為と
    をさらに含むことを特徴とする請求項1に記載の方法。
  3. 前記参加するノードが、前記直接に隣接する先行ノードおよび直接に隣接する後続ノードの中から選択された前記直接に隣接するノードのうちの1つに、前記参加するノードと前記選択された直接に隣接するノードとの間の前記id空間の一部のid空間オーナーシップをとることの前記参加するノードの前記意図を示す前記行為は、前記直接に隣接する先行ノードおよび直接に隣接する後続ノードの中からの選択された直接に隣接するノードにトークン要求を送信する行為を含み、前記トークン要求は、
    ノード識別子であって、前記ノード識別子を有するノードだけが応答できるようにする、ノード識別子と、
    第1タイムトゥリブ持続時間値であって、前記第1タイムトゥリブ持続時間値は、前記参加するノードが前記選択された直接に隣接するノードとの監視関係がアクティブであると仮定できる持続時間を示す、第1タイムトゥリブ持続時間値と
    を含むことを特徴とする請求項1に記載の方法。
  4. 前記第1、第2、および第3の表示は、単一の表示に組み合わされることを特徴とする請求項1に記載の方法。
  5. 前記単一の表示を受信することは、前記選択された直接に隣接するノードから第1トークン転送を受信する行為を含み、前記第1トークン転送は、
    前記参加するノードと前記選択された直接に隣接するノードとの間のノードの前記リング内の非占有ノード識別子の、前記参加するノードのオーナーシップ範囲と、
    第2タイムトゥリブ持続時間値であって、前記第2タイムトゥリブ持続時間値は、前記選択された直接に隣接するノードが前記参加するノードとの監視関係がアクティブであると仮定できる持続時間を示す、第2タイムトゥリブ持続時間値と、
    前記選択された直接に隣接するノードが前記参加するノードを監視することを示す第1確立許可と
    を含むことを特徴とする請求項4に記載の方法。
  6. 前記参加するノードが、前記参加するノードを監視することの前記選択された直接に隣接するノードの意図の受け入れを示す前記行為は、前記選択された直接に隣接するノードに肯定応答メッセージを送信する行為を含み、前記肯定応答メッセージは、
    前記参加するノードと前記選択された直接に隣接するノードとの間の第1オーナーシップ範囲と、
    前記参加するノードが前記選択された直接に隣接するノードを監視することを示す第2確立許可と
    を含むことを特徴とする請求項1に記載の方法。
  7. 前記参加するノードが、前記参加するノードと前記他の直接に隣接するノードとの間のid空間の前記一部のid空間オーナーシップを示し、前記参加するノードを監視することの前記他の直接に隣接するノードの意図を示す表示を前記他の直接に隣接するノードから受信する前記行為は、前記他の直接に隣接するノードから第2トークン転送を受信する行為を含み、前記第2トークン転送は、
    第3タイムトゥリブ持続時間値であって、前記第3タイムトゥリブ持続時間値は、前記他の直接に隣接するノードが前記参加するノードとの監視関係がアクティブであると仮定できる持続時間を示す、第3タイムトゥリブ持続時間値
    を含むことを特徴とする請求項2に記載の方法。
  8. 前記参加するノードが、前記参加するノードと前記他の直接に隣接するノードとの間の前記id空間の一部のid空間オーナーシップを確立することの前記参加するノードの前記意図を前記他の直接に隣接するノードに示す行為の前記行為は、前記参加するノードと前記他の直接に隣接するノードとの間で第2オーナーシップ範囲を確立する確立要求を送信する行為を含み、前記確立要求は、
    第4タイムトゥリブ持続時間であって、前記第4タイムトゥリブ持続時間は、前記参加するノードが前記他の直接に隣接するノードとの監視関係がアクティブであると仮定できる持続時間を示す、第4タイムトゥリブ持続時間と、
    前記参加するノードが前記他の直接に隣接するノードを監視することを示す第3確立許可と
    を含むことを特徴とする請求項7に記載の方法。
  9. 前記参加するノードが、前記参加するノードを監視することの前記他の直接に隣接するノードの意図を示す表示を前記他の直接に隣接するノードから受信する前記行為は、前記確立要求の第4確立許可を受信する行為を含み、前記第4確立許可は、前記他の隣接するノードが前記参加するノードを監視することを示すことを特徴とする請求項7に記載の方法。
  10. 前記参加するノードが、前記リング上の前記ノードのうちの少なくとも1つから否定応答(NAK)メッセージを受信する行為であって、前記NAKメッセージは、前記リングの前記NAK送信側のビューの表示を含む、行為と、
    前記リングの前記NAK送信側のビューに基づいて前記近傍の前記参加するノードのビューを更新する行為と
    をさらに含むことを特徴とする請求項1に記載の方法。
  11. 両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、ノードの前記リングは、第1の選択された直接に隣接するノードおよび第2の選択された直接に隣接するノードを含み、参加するノードが前記第1の直接に隣接するノードと前記第2の直接に隣接するノードとの間でノードの前記リングに参加するときにリング一貫性を維持する方法であって、
    第1の選択された直接に隣接するノードが、前記参加するノードと前記第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップをとることの前記参加するノードの意図を示す表示を前記参加するノードから受信する行為と、
    前記第1の選択された直接に隣接するノードが、選択された直接に隣接するノードを監視することの前記参加するノードの意図の表示を前記参加するノードから受信する行為と、
    前記第1の選択された直接に隣接するノードが、前記参加するノードと前記第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップをとることの前記参加するノードの意図の受け入れを示す第1表示を前記参加するノードに送信する行為と、
    前記第1の選択された直接に隣接するノードが、前記選択された直接に隣接するノードを監視することの前記参加するノードの意図の受入を示す第2表示を前記参加するノードに送信する行為と、
    前記第1の選択された直接に隣接するノードが、前記参加するノードを監視することの前記第1の選択された直接に隣接するノードの意図を示す第3表示を前記参加するノードに送信する行為と、
    前記第1の選択された直接に隣接するノードが、前記参加するノードを監視することの前記第1の選択された直接に隣接するノードの意図の受入を示す表示を前記参加するノードから受信する行為と
    を含むことを特徴とする方法。
  12. 前記第1の選択された直接に隣接するノードが、第2の選択された直接に隣接するノードとのすべての監視関係を終了することの前記第1ノードの意図を前記第2の選択された直接に隣接するノードに示す行為と、
    前記第1の選択された直接に隣接するノードが、前記第1の選択された直接に隣接するノードとのすべての監視関係を終了することの前記第2ノードの意図を示す表示を前記第2の選択された直接に隣接するノードから受信する行為と、
    前記第1の選択された直接に隣接するノードが、終了することの前記第2ノードの意図を肯定応答する行為と
    をさらに含むことを特徴とする請求項11に記載の方法。
  13. 前記参加するノードから導入メッセージを受信する行為であって、前記導入メッセージは、前記参加するノードによって所有されるものとして示されるノード識別子の期待されるオーナーシップ範囲を含む、行為と、
    前記参加するノードに肯定応答メッセージを送信する行為であって、前記肯定応答メッセージは、前記参加するノードによって識別されるノード識別子の範囲が前記選択された直接に隣接するノードのノード識別子の範囲と一貫することの表示を含む、行為と
    をさらに含むことを特徴とする請求項11に記載の方法。
  14. 両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、ノードの前記リングは、第1の選択された直接に隣接するノードおよび第2の選択された直接に隣接するノードを含み、参加するノードが前記第1の直接に隣接するノードと前記第2の直接に隣接するノードとの間でノードの前記リングに参加するときにリング一貫性を維持する方法であって、
    直接に隣接する先行ノードおよび直接に隣接する後続ノードの中から選択された第1の選択された直接に隣接するノードが、前記参加するノードと前記第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを前記参加するノードに示す行為と、
    前記第1の選択された直接に隣接するノードが、前記参加するノードを監視することの前記第1の選択された直接に隣接するノードの意図を示す行為と、
    前記第1の選択された直接に隣接するノードが、前記参加するノードと前記第1の選択された直接に隣接するノードとの間のid空間の一部のid空間オーナーシップを確立することの前記参加するノードの意図の表示を受信する行為と、
    前記第1の選択された直接に隣接するノードが、前記第1の選択された直接に隣接するノードを監視することの前記参加するノードの意図の表示を受信する行為と、
    前記第1の選択された直接に隣接するノードが、前記参加するノードを監視することの前記第1の選択されたノードの意図を前記参加するノードに示す行為と
    を含むことを特徴とする方法。
  15. 前記第1の選択された直接に隣接するノードが、前記第1の選択された直接に隣接するノードとのすべての監視関係を終了することの前記第2ノードの意図を示す表示を第2の選択された直接に隣接するノードから受信する行為と、
    前記第1の選択された直接に隣接するノードが、前記第2の選択された直接に隣接するノードとのすべての監視関係を終了することの前記第1ノードの意図を前記第2の選択された直接に隣接するノードに示す行為と、
    前記第1の選択された直接に隣接するノードが、終了することの前記第1ノードの意図を肯定応答する肯定応答を受信する行為と
    をさらに含むことを特徴とする請求項14に記載の方法。
  16. 両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、ノードの前記リングは、リービングノード、第1の選択された直接に隣接するノード、および第2の選択された直接に隣接するノードを含み、前記第1および第2のノードは、前記リング上で前記リービングノードに直接に隣接し、前記リービングノードがノードの前記リングを去るときにリング一貫性を維持する方法であって、
    前記第1の選択された直接に隣接するノードが、ノードの前記リングを去る前記リービングノードの行為の表示を受信する行為と、
    前記第1の選択された直接に隣接するノードが、前記リービングノードと前記第1の選択された直接に隣接するノードとの間のid空間の一部の前記リービングノードのid空間オーナーシップを引き受ける意図を示す表示を前記第2の選択された直接に隣接するノードに送信する行為と、
    前記第1の選択された直接に隣接するノードが、前記第1の選択された直接に隣接するノードと前記第2の選択された直接に隣接するノードとの間の少なくとも一方向監視関係の確立を示す表示を前記第2の選択された直接に隣接するノードに送信する行為と、
    前記第1の選択された直接に隣接するノードが、前記リービングノードと前記第1の選択された直接に隣接するノードとの間の前記id空間の一部のid空間オーナーシップを引き受けることの前記第1ノードの意図の受入を示す表示を前記第2の選択された直接に隣接するノードから受信する行為と、
    前記第1の選択された直接に隣接するノードが、前記第2の選択された直接に隣接するノードと前記第1の選択された直接に隣接するノードとの間の少なくとも一方向監視関係の確立を示す表示を前記第2の選択された直接に隣接するノードから受信する行為と
    を含むことを特徴とする方法。
  17. 前記第1の選択された直接に隣接するノードが、ノードの前記リングを去る前記リービングノードの行為の表示を受信する前記行為は、前記第1の選択された直接に隣接するノードが、ノードの前記リング上のノードのうちの少なくとも1つから離脱メッセージを受信することを含み、前記離脱メッセージは、前記リービングノードによって所有されるものとして示されるノード識別子のオーナーシップ範囲を含むことを特徴とする請求項16に記載の方法。
  18. 前記第1の選択された直接に隣接するノードが、前記リービングノードとの間のid空間の一部の前記リービングノードのid空間オーナーシップを引き受ける意図を示す表示を前記第2の選択された直接に隣接するノードに送信する前記行為は、
    前記第1の選択された直接に隣接するノードが、前記第1の選択された直接に隣接するノードと前記第2の選択された直接に隣接するノードとの間でオーナーシップ範囲を確立するために第1確立要求を前記第2の選択された直接に隣接するノードに送信する行為であって、前記第1確立要求は、第1タイムトゥリブ持続時間を含み、前記第1タイムトゥリブ持続時間は、前記第1の選択された直接に隣接するノードが、前記第2の選択された直接に隣接するノードとの監視関係がアクティブであると仮定できる持続時間を示す、行為と、
    前記第1の隣接するノードが、前記第1確立要求の第1確立許可を受信する行為であって、前記第1確立許可は、前記第2の隣接するノードが前記第1の選択された直接に隣接するノードを監視することを示す、行為と
    を含むことを特徴とする請求項17に記載の方法。
  19. 前記第1の選択された直接に隣接するノードが、前記リービングノードとの間の前記id空間の一部のid空間オーナーシップを引き受けることの前記第1ノードの意図の受入を示す表示を前記第2の選択された直接に隣接するノードから受信する前記行為は、
    前記第1の隣接するノードが、前記第1の隣接するノードと前記第2の隣接するノードとの間でオーナーシップ範囲を確立するために前記第2の隣接するノードから第2確立要求を受信する行為であって、前記第2確立要求は、第2タイムトゥリブ持続時間を含み、前記第2タイムトゥリブ持続時間は、前記第2の隣接するノードが前記第1の隣接するノードとの監視関係がアクティブであると仮定できる持続時間を示す、行為と、
    前記第1の隣接するノードが、前記第2確立要求の第2確立許可を送信する行為であって、前記第2確立許可は、前記第1の隣接するノードが前記第2の隣接するノードを監視することを示す、行為と
    を含むことを特徴とする請求項18に記載の方法。
  20. 両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、フェデレーションインフラストラクチャ内で維持される複製セット内でデータアクセストランザクションを実行する方法であって、
    プライマリノードがノードの複製セット内の複数のノードの中から選ばれたことを判定する行為であって、前記プライマリノードは、クライアントデータアクセス要求を受け入れ、処理するように構成され、前記複製セットは、前記プライマリノードおよび1つまたは複数のセカンダリノードを含む、行為と、
    前記プライマリノードが、1つまたは複数のクライアントデータアクセス要求を受信する行為であって、各データアクセス要求は、前記複製セット内で少なくとも前記プライマリノード上でアクセスされるデータの少なくとも一部を示す、行為と、
    前記プライマリノードが、前記クライアントデータアクセス要求が受信される順序で状態を変化させる前記クライアントデータアクセス要求のそれぞれにデータシーケンス番号を割り当てる行為であって、前記データシーケンス番号は、前記複製セット内の前記ノードのそれぞれによって従われる線形化された処理順序を含む、行為と、
    前記プライマリノードが、任意の対応するデータシーケンス番号を含む前記クライアントデータアクセス要求のうちの少なくとも1つを前記セカンダリノードのうちの少なくとも1つに送信する行為と、
    前記プライマリノードが、少なくとも閾値個数のセカンダリノードから、前記クライアントデータアクセス要求の受信を示す肯定応答を受信する行為と、
    前記プライマリノードが、前記データアクセス要求をコミットする行為であって、前記コミットは、前記クライアントデータアクセス要求に従ってデータにアクセスすることを含む、行為と
    を含むことを特徴とする方法。
  21. 前記プライマリノードは、前記データアクセス要求を単一フェーズでコミットすることを特徴とする請求項20に記載の方法。
  22. ノードの前記複製セット内の複数のノードの間からプライマリノードを選ぶ行為をさらに含むことを特徴とする請求項20に記載の方法。
  23. 許容可能な同時障害の最大個数に基づいて、前記複製セットのメンバになるセカンダリノードの個数を判定する行為をさらに含むことを特徴とする請求項20に記載の方法。
  24. 前記肯定応答は、前記クライアントデータアクセス要求の受入または拒否のうちの少なくとも1つを示すことを特徴とする請求項20に記載の方法。
  25. 前記閾値個数のセカンダリノードは、クォーラムを表すことを特徴とする請求項20に記載の方法。
  26. プライマリになるはずのノードが、前記プライマリになるはずのノードが知らないすべてのトランザクションを判定するために前記クォーラムのセカンダリノードに要求を送信する行為をさらに含むことを特徴とする請求項25に記載の方法。
  27. 前記クォーラムの各メンバが、少なくとも、LSNによって順序付けられる各メンバのデータアクセスキューに前記クライアントデータアクセス要求を挿入したことの表示を前記クォーラムの各メンバから受信することをさらに含むことを特徴とする請求項25に記載の方法。
  28. データの一部は、LSN、CSN、DSN、プライマリノードアイデンティティ、およびセカンダリノードアイデンティティのうちの少なくとも1つを含む、前記複製セット自体に関する制御情報のセットを含むことを特徴とする請求項20に記載の方法。
  29. 前記データアクセス要求を単一フェーズでコミットすることは、前記セカンダリノードのいずれかに関してコミットクエリを送信することおよび受信することを伴わずに前記データにアクセスすることを含むことを特徴とする請求項20に記載の方法。
  30. 前記クライアントデータアクセス要求を第2複製セットに送信する行為をさらに含み、前記第2複製セットは、前記プライマリノードの近傍とは異なる近傍内にあることを特徴とする請求項20に記載の方法。
  31. 前記複製セットは、前記クライアントデータアクセス要求の第1部分を処理することを要求され、前記第2複製セットは、前記データアクセス要求の第2の異なる部分を処理することを要求されることを特徴とする請求項30に記載の方法。
  32. 前記クライアントデータアクセス要求の前記第1部分に対応する前記複製セットからの応答を受信する行為と、
    前記データアクセス要求の前記第2の異なる部分に対応する前記第2複製セットからの応答を受信する行為と、
    前記応答を組み合わせる行為と、
    前記組み合わされた応答に基づいて、最新のデータアクセス応答を生成する行為と
    をさらに含むことを特徴とする請求項31に記載の方法。
  33. 両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、フェデレーションインフラストラクチャ内の複製セットからデータにアクセスするシステムであって、
    前記リング上の複数のノードの近傍を確立するように構成された近傍確立モジュールであって、前記近傍は、少なくとも直接に隣接する先行ノードおよび直接に隣接する後続ノードを含む、近傍確立モジュールと、
    前記確立された近傍の外の参加するノードが、ノードの前記リング内の前記確立された近傍に参加する意図を示したことを判定するように構成された意図判定モジュールと、
    前記複数のノード内の各ノードが前記近傍内のid空間の一部のid空間オーナーシップをとるように、前記確立された近傍内の一貫性を維持するように構成された一貫性維持モジュールと、
    前記複数のノード内の前記ノードの1つが、プライマリノードによって向けられるクライアントデータアクセス要求に応答するように構成されたノードの複製セットにまたがる責任を有する前記プライマリノードになるために選ばれたことを判定するように構成された選出判定モジュールと、
    1つまたは複数のクライアントデータアクセス要求を受信するように構成された要求受信モジュールであって、各データアクセス要求は、前記複製セット内の前記ノードのうちの少なくとも1つでアクセスされるデータの少なくとも一部を示す、要求受信モジュールと、
    前記クライアントデータアクセス要求内で示されるデータにアクセスするように構成されたデータアクセスモジュールと
    を含むことを特徴とするシステム。
  34. 前記データアクセスモジュールは、クライアントデータ書き込み要求に従ってデータを書き込むように構成されることを特徴とする請求項33に記載のシステム。
  35. 前記プライマリノードは、セカンダリノードに、前記クライアントデータ書き込み要求内で示される前記データを前記セカンダリノードによって管理されるデータストアに書き込むように指示することを特徴とする請求項34に記載のシステム。
  36. 前記プライマリノードは、前記書き込み要求を1つまたは複数のセカンダリノードに2フェーズで複製することを特徴とする請求項34に記載のシステム。
  37. 前記データアクセスモジュールは、クライアントデータ読み取り要求に従ってデータを読み取るように構成されることを特徴とする請求項33に記載のシステム。
  38. 前記クライアントデータ読み取り要求は、セカンダリノードによって直接に処理されることを特徴とする請求項37に記載のシステム。
  39. プライマリの前記確立された近傍は、そのプライマリの複製セットのセカンダリノードのセットであることを特徴とする請求項33に記載のシステム。
  40. 両方向ルーティング用に構成されたノードのリングのフェデレーションインフラストラクチャ内で、フェデレーションインフラストラクチャ内の一貫した複製セットを確立し、維持する方法であって、
    ノードのリング内の複数のノードの中から複製セットを確立する行為であって、前記複製セットは、メンバとしてプライマリノードおよび1つまたは複数のセカンダリノードを含む、行為と、
    前記複製セットメンバのうちの少なくとも1つに影響する複製セット構成イベントオカレンスを示す表示を受信する行為と、
    前記受信された表示に基づいて、前記複製セットが再構成されなければならないことを判定する行為であって、前記再構成は、前記複製セット構成イベントオカレンスに基づいて、前記複製セットからの既存セカンダリノードの除去、前記複製セットへの新しいセカンダリノードの追加、新しいプライマリへの突然の推移、および新しいプライマリへの滑らかな推移のうちの少なくとも1つを含む、行為と、
    前記複製セット構成イベントに対応する前記再構成に従って前記複製セットを再構成する行為と
    を含むことを特徴とする方法。
  41. 前記複製セット構成イベントは、前記複製セット内のノード障害、前記複製セットからのノード離脱、およびノードが前記複製セットに参加することのうちの少なくとも1つを含むことを特徴とする請求項40に記載の方法。
  42. 前記複製セットノードのうちの1つまたは複数によって制御されるデータストレージの一部を維持する行為をさらに含むことを特徴とする請求項40に記載の方法。
  43. 前記プライマリノードがクライアントデータアクセス要求を受信する行為であって、前記クライアントデータアクセス要求は、ノードの複製セット内の少なくとも1つのノードでアクセスされる情報の表示を含む、行為と、
    前記プライマリノードが前記受信されたクライアントデータアクセス要求内で示される情報の少なくとも一部にアクセスするのに失敗したことを検出する行為と、
    前記プライマリノードに格納された情報が前記クライアントデータアクセス要求に応答してアクセスされるのを防ぐように、前記プライマリノードが前記複製セットからそれ自体を除去する行為と
    をさらに含むことを特徴とする請求項42に記載の方法。
  44. 構成状態情報に基づいて、進行中の1つまたは複数の複製セット再構成を検出する行為をさらに含むことを特徴とする請求項40に記載の方法。
  45. 前記複製セットの新しいプライマリノードを選ぶ行為をさらに含むことを特徴とする請求項40に記載の方法。
JP2009536478A 2006-11-09 2007-11-08 フェデレーションインフラストラクチャ内の一貫性 Pending JP2010509871A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US86513606P 2006-11-09 2006-11-09
US11/936,556 US8090880B2 (en) 2006-11-09 2007-11-07 Data consistency within a federation infrastructure
US11/936,589 US20080288659A1 (en) 2006-11-09 2007-11-07 Maintaining consistency within a federation infrastructure
PCT/US2007/084058 WO2008060938A2 (en) 2006-11-09 2007-11-08 Consistency within a federation infrastructure

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013013645A Division JP5498594B2 (ja) 2006-11-09 2013-01-28 フェデレーションインフラストラクチャ内の一貫性

Publications (1)

Publication Number Publication Date
JP2010509871A true JP2010509871A (ja) 2010-03-25

Family

ID=40028660

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2009536478A Pending JP2010509871A (ja) 2006-11-09 2007-11-08 フェデレーションインフラストラクチャ内の一貫性
JP2013013645A Expired - Fee Related JP5498594B2 (ja) 2006-11-09 2013-01-28 フェデレーションインフラストラクチャ内の一貫性
JP2014009137A Expired - Fee Related JP5798644B2 (ja) 2006-11-09 2014-01-22 フェデレーションインフラストラクチャ内の一貫性

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2013013645A Expired - Fee Related JP5498594B2 (ja) 2006-11-09 2013-01-28 フェデレーションインフラストラクチャ内の一貫性
JP2014009137A Expired - Fee Related JP5798644B2 (ja) 2006-11-09 2014-01-22 フェデレーションインフラストラクチャ内の一貫性

Country Status (6)

Country Link
US (3) US20080288659A1 (ja)
EP (1) EP2095248B1 (ja)
JP (3) JP2010509871A (ja)
KR (1) KR101455420B1 (ja)
CN (2) CN101535977B (ja)
WO (1) WO2008060938A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015534150A (ja) * 2012-08-22 2015-11-26 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境で高可用性(ha)ネットワーク通信をサポートするためのシステムおよび方法
US11243980B2 (en) 2017-03-15 2022-02-08 International Business Machines Corporation Monotonic transactions in a multi-master database with loosely coupled nodes

Families Citing this family (214)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7047301B2 (en) * 2000-01-31 2006-05-16 F5 Networks, Inc. Method and system for enabling persistent access to virtual servers by an LDNS server
WO2003058483A1 (en) 2002-01-08 2003-07-17 Seven Networks, Inc. Connection architecture for a mobile network
US8468126B2 (en) 2005-08-01 2013-06-18 Seven Networks, Inc. Publishing data in an information community
US7853563B2 (en) 2005-08-01 2010-12-14 Seven Networks, Inc. Universal data aggregation
US7917468B2 (en) 2005-08-01 2011-03-29 Seven Networks, Inc. Linking of personal information management data
US8782654B2 (en) 2004-03-13 2014-07-15 Adaptive Computing Enterprises, Inc. Co-allocating a reservation spanning different compute resources types
US20070266388A1 (en) 2004-06-18 2007-11-15 Cluster Resources, Inc. System and method for providing advanced reservations in a compute environment
US8176490B1 (en) 2004-08-20 2012-05-08 Adaptive Computing Enterprises, Inc. System and method of interfacing a workload manager and scheduler with an identity manager
WO2006045102A2 (en) 2004-10-20 2006-04-27 Seven Networks, Inc. Method and apparatus for intercepting events in a communication system
US8010082B2 (en) 2004-10-20 2011-08-30 Seven Networks, Inc. Flexible billing architecture
US8014321B2 (en) 2004-10-22 2011-09-06 Microsoft Corporation Rendezvousing resource requests with corresponding resources
US20080288659A1 (en) * 2006-11-09 2008-11-20 Microsoft Corporation Maintaining consistency within a federation infrastructure
US20110082928A1 (en) * 2004-10-22 2011-04-07 Microsoft Corporation Maintaining consistency within a federation infrastructure
US8549180B2 (en) 2004-10-22 2013-10-01 Microsoft Corporation Optimizing access to federation infrastructure-based resources
US8392515B2 (en) * 2004-10-22 2013-03-05 Microsoft Corporation Subfederation creation and maintenance in a federation infrastructure
CA2586763C (en) 2004-11-08 2013-12-17 Cluster Resources, Inc. System and method of providing system jobs within a compute environment
US7706781B2 (en) 2004-11-22 2010-04-27 Seven Networks International Oy Data security in a mobile e-mail service
FI117152B (fi) 2004-12-03 2006-06-30 Seven Networks Internat Oy Sähköpostiasetusten käyttöönotto matkaviestimelle
US8863143B2 (en) 2006-03-16 2014-10-14 Adaptive Computing Enterprises, Inc. System and method for managing a hybrid compute environment
US7877703B1 (en) 2005-03-14 2011-01-25 Seven Networks, Inc. Intelligent rendering of information in a limited display environment
US9231886B2 (en) 2005-03-16 2016-01-05 Adaptive Computing Enterprises, Inc. Simple integration of an on-demand compute environment
EP3203374B1 (en) 2005-04-07 2021-11-24 III Holdings 12, LLC On-demand access to compute resources
US8438633B1 (en) 2005-04-21 2013-05-07 Seven Networks, Inc. Flexible real-time inbox access
WO2006136660A1 (en) 2005-06-21 2006-12-28 Seven Networks International Oy Maintaining an ip connection in a mobile network
US8584145B1 (en) 2010-08-06 2013-11-12 Open Invention Network, Llc System and method for dynamic transparent consistent application-replication of multi-process multi-threaded applications
US8621275B1 (en) 2010-08-06 2013-12-31 Open Invention Network, Llc System and method for event-driven live migration of multi-process applications
US7769395B2 (en) 2006-06-20 2010-08-03 Seven Networks, Inc. Location-based operations and messaging
US7778282B2 (en) * 2006-12-18 2010-08-17 Microsoft Corporation Propagation of conflict knowledge
US8150800B2 (en) * 2007-03-28 2012-04-03 Netapp, Inc. Advanced clock synchronization technique
US8015427B2 (en) * 2007-04-23 2011-09-06 Netapp, Inc. System and method for prioritization of clock rates in a multi-core processor
US8693494B2 (en) 2007-06-01 2014-04-08 Seven Networks, Inc. Polling
US8805425B2 (en) 2007-06-01 2014-08-12 Seven Networks, Inc. Integrated messaging
IES20080508A2 (en) * 2007-06-22 2008-12-10 Tenoware R & D Ltd Network distributed file system
US8041773B2 (en) 2007-09-24 2011-10-18 The Research Foundation Of State University Of New York Automatic clustering for self-organizing grids
US8572429B2 (en) * 2007-10-09 2013-10-29 Cleversafe, Inc. Optimistic data writing in a dispersed storage network
US20090132716A1 (en) * 2007-11-15 2009-05-21 Junqueira Flavio P Fault-tolerant distributed services methods and systems
US8364181B2 (en) 2007-12-10 2013-01-29 Seven Networks, Inc. Electronic-mail filtering for mobile devices
US8793305B2 (en) 2007-12-13 2014-07-29 Seven Networks, Inc. Content delivery to a mobile device from a content service
US9002828B2 (en) 2007-12-13 2015-04-07 Seven Networks, Inc. Predictive content delivery
US8107921B2 (en) 2008-01-11 2012-01-31 Seven Networks, Inc. Mobile virtual network operator
US7934117B2 (en) * 2008-01-25 2011-04-26 Microsoft Corporation Routing token transfer and recovery protocol in rendezvous federation
US8862657B2 (en) 2008-01-25 2014-10-14 Seven Networks, Inc. Policy based content service
US20090193338A1 (en) 2008-01-28 2009-07-30 Trevor Fiatal Reducing network and battery consumption during content delivery and playback
US8417775B2 (en) * 2008-02-27 2013-04-09 Microsoft Corporation Neighborhood maintenance in the federation
US9021071B2 (en) 2008-06-09 2015-04-28 International Business Machines Corporation Methods of federating applications providing modular data
US8787947B2 (en) 2008-06-18 2014-07-22 Seven Networks, Inc. Application discovery on mobile devices
US8078158B2 (en) 2008-06-26 2011-12-13 Seven Networks, Inc. Provisioning applications for a mobile device
US8099571B1 (en) 2008-08-06 2012-01-17 Netapp, Inc. Logical block replication with deduplication
US8909759B2 (en) 2008-10-10 2014-12-09 Seven Networks, Inc. Bandwidth measurement
US8443062B2 (en) * 2008-10-23 2013-05-14 Microsoft Corporation Quorum based transactionally consistent membership management in distributed storage systems
US7934118B2 (en) * 2008-10-24 2011-04-26 Microsoft Corporation Failure notification in rendezvous federation
US8275912B2 (en) * 2008-10-24 2012-09-25 Microsoft Corporation Bootstrap rendezvous federation
US9158579B1 (en) 2008-11-10 2015-10-13 Netapp, Inc. System having operation queues corresponding to operation execution time
US8903973B1 (en) 2008-11-10 2014-12-02 Tanium Inc. Parallel distributed network management
US8904039B1 (en) 2008-11-10 2014-12-02 Tanium Inc. Large-scale network querying and reporting
US8086729B1 (en) * 2008-11-10 2011-12-27 Tanium Inc. Distributed statistical detection of network problems and causes
US8477638B2 (en) * 2008-12-02 2013-07-02 Cisco Technology, Inc. Latency enhancements for multicast traffic over spatial reuse protocol (SRP)
US8307085B2 (en) * 2010-03-16 2012-11-06 Microsoft Corporation Storing state of distributed architecture in external store
US8655848B1 (en) 2009-04-30 2014-02-18 Netapp, Inc. Unordered idempotent logical replication operations
US8321380B1 (en) 2009-04-30 2012-11-27 Netapp, Inc. Unordered idempotent replication operations
US8135025B2 (en) * 2009-06-03 2012-03-13 Microsoft Corporation Asynchronous communication in an unstable network
US8671072B1 (en) 2009-09-14 2014-03-11 Netapp, Inc. System and method for hijacking inodes based on replication operations received in an arbitrary order
US8473690B1 (en) 2009-10-30 2013-06-25 Netapp, Inc. Using logical block addresses with generation numbers as data fingerprints to provide cache coherency
US10877695B2 (en) 2009-10-30 2020-12-29 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
US11720290B2 (en) 2009-10-30 2023-08-08 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
US8799367B1 (en) 2009-10-30 2014-08-05 Netapp, Inc. Using logical block addresses with generation numbers as data fingerprints for network deduplication
US8621268B2 (en) * 2009-11-25 2013-12-31 Cleversafe, Inc. Write threshold utilization in a dispersed storage system
US8832281B2 (en) * 2010-01-08 2014-09-09 Tangome, Inc. Utilizing resources of a peer-to-peer computer environment
US9832104B2 (en) * 2010-02-11 2017-11-28 Microsoft Technology Licensing, Llc Reliable broadcast in a federation of nodes
JP5735637B2 (ja) * 2010-05-11 2015-06-17 エルジー エレクトロニクス インコーポレイティド 共存方式におけるマスタ機器選出方法
FR2960369B1 (fr) * 2010-05-20 2013-03-01 Bull Sas Procede d'optimisation de routage dans un cluster comprenant des liens de communication statiques et programme d'ordinateur mettant en oeuvre ce procede
US8352658B2 (en) 2010-05-27 2013-01-08 Microsoft Corporation Fabric based lock manager service
US8341368B2 (en) 2010-06-07 2012-12-25 International Business Machines Corporation Automatic reallocation of structured external storage structures
US8838910B2 (en) 2010-06-07 2014-09-16 International Business Machines Corporation Multi-part aggregated variable in structured external storage
WO2012005557A2 (ko) 2010-07-09 2012-01-12 엘지전자 주식회사 상호공존 방식에서 대표 기기 선출 방법
CA2806557C (en) 2010-07-26 2014-10-07 Michael Luna Mobile application traffic optimization
PL3407673T3 (pl) 2010-07-26 2020-05-18 Seven Networks, Llc Koordynacja ruchu w sieci komórkowej pomiędzy różnymi aplikacjami
US8838783B2 (en) 2010-07-26 2014-09-16 Seven Networks, Inc. Distributed caching for resource and mobile network traffic management
GB2495877B (en) 2010-07-26 2013-10-02 Seven Networks Inc Distributed implementation of dynamic wireless traffic policy
WO2012031301A1 (en) 2010-09-03 2012-03-08 Jackson Robert Lewis Jr Sparse dynamic selection trees
US10630570B2 (en) 2010-09-17 2020-04-21 Oracle International Corporation System and method for supporting well defined subnet topology in a middleware machine environment
US8724645B2 (en) * 2010-09-28 2014-05-13 Microsoft Corporation Performing computations in a distributed infrastructure
US9069842B2 (en) * 2010-09-28 2015-06-30 The Mitre Corporation Accessing documents using predictive word sequences
US9201890B2 (en) * 2010-10-04 2015-12-01 Dell Products L.P. Storage optimization manager
US8589732B2 (en) * 2010-10-25 2013-11-19 Microsoft Corporation Consistent messaging with replication
US8166164B1 (en) 2010-11-01 2012-04-24 Seven Networks, Inc. Application and network-based long poll request detection and cacheability assessment therefor
US9060032B2 (en) 2010-11-01 2015-06-16 Seven Networks, Inc. Selective data compression by a distributed traffic management system to reduce mobile data traffic and signaling traffic
US8843153B2 (en) 2010-11-01 2014-09-23 Seven Networks, Inc. Mobile traffic categorization and policy for network use optimization while preserving user experience
US8326985B2 (en) 2010-11-01 2012-12-04 Seven Networks, Inc. Distributed management of keep-alive message signaling for mobile network resource conservation and optimization
US8484314B2 (en) 2010-11-01 2013-07-09 Seven Networks, Inc. Distributed caching in a wireless network of content delivered for a mobile application over a long-held request
WO2012060996A2 (en) 2010-11-01 2012-05-10 Michael Luna Caching adapted for mobile application behavior and network conditions
US9330196B2 (en) 2010-11-01 2016-05-03 Seven Networks, Llc Wireless traffic management system cache optimization using http headers
WO2012060995A2 (en) 2010-11-01 2012-05-10 Michael Luna Distributed caching in a wireless network of content delivered for a mobile application over a long-held request
WO2012071384A2 (en) 2010-11-22 2012-05-31 Michael Luna Optimization of resource polling intervals to satisfy mobile device requests
GB2495463B (en) 2010-11-22 2013-10-09 Seven Networks Inc Aligning data transfer to optimize connections established for transmission over a wireless network
US9710344B1 (en) 2010-12-13 2017-07-18 Amazon Technologies, Inc. Locality based quorum eligibility
US8473775B1 (en) * 2010-12-14 2013-06-25 Amazon Technologies, Inc. Locality based quorums
US8996463B2 (en) 2012-07-26 2015-03-31 Mongodb, Inc. Aggregation framework system architecture and method
US9881034B2 (en) 2015-12-15 2018-01-30 Mongodb, Inc. Systems and methods for automating management of distributed databases
US10698775B2 (en) 2016-05-31 2020-06-30 Mongodb, Inc. Method and apparatus for reading and writing committed data
US10713280B2 (en) 2010-12-23 2020-07-14 Mongodb, Inc. Systems and methods for managing distributed database deployments
US11544288B2 (en) 2010-12-23 2023-01-03 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10997211B2 (en) 2010-12-23 2021-05-04 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US9740762B2 (en) 2011-04-01 2017-08-22 Mongodb, Inc. System and method for optimizing data migration in a partitioned database
US11615115B2 (en) 2010-12-23 2023-03-28 Mongodb, Inc. Systems and methods for managing distributed database deployments
US9805108B2 (en) 2010-12-23 2017-10-31 Mongodb, Inc. Large distributed database clustering systems and methods
US10366100B2 (en) 2012-07-26 2019-07-30 Mongodb, Inc. Aggregation framework system architecture and method
US10346430B2 (en) 2010-12-23 2019-07-09 Mongodb, Inc. System and method for determining consensus within a distributed database
US8572031B2 (en) 2010-12-23 2013-10-29 Mongodb, Inc. Method and apparatus for maintaining replica sets
US10614098B2 (en) 2010-12-23 2020-04-07 Mongodb, Inc. System and method for determining consensus within a distributed database
US10262050B2 (en) 2015-09-25 2019-04-16 Mongodb, Inc. Distributed database systems and methods with pluggable storage engines
US10977277B2 (en) 2010-12-23 2021-04-13 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US10740353B2 (en) 2010-12-23 2020-08-11 Mongodb, Inc. Systems and methods for managing distributed database deployments
CN102014076B (zh) * 2010-12-24 2012-04-18 北京航天测控技术有限公司 一种PCIe重试缓冲区及其实现方法
GB2501416B (en) 2011-01-07 2018-03-21 Seven Networks Llc System and method for reduction of mobile network traffic used for domain name system (DNS) queries
US9063852B2 (en) * 2011-01-28 2015-06-23 Oracle International Corporation System and method for use with a data grid cluster to support death detection
US8625424B2 (en) * 2011-02-23 2014-01-07 Hp Ventures A/S Method and system for routing information in a network
US8554951B2 (en) 2011-03-08 2013-10-08 Rackspace Us, Inc. Synchronization and ordering of multiple accessess in a distributed system
US8712975B2 (en) 2011-03-08 2014-04-29 Rackspace Us, Inc. Modification of an object replica
US8538926B2 (en) 2011-03-08 2013-09-17 Rackspace Us, Inc. Massively scalable object storage system for storing object replicas
US8510267B2 (en) * 2011-03-08 2013-08-13 Rackspace Us, Inc. Synchronization of structured information repositories
US9084105B2 (en) 2011-04-19 2015-07-14 Seven Networks, Inc. Device resources sharing for network resource conservation
US8621075B2 (en) 2011-04-27 2013-12-31 Seven Metworks, Inc. Detecting and preserving state for satisfying application requests in a distributed proxy and cache system
WO2012149221A2 (en) 2011-04-27 2012-11-01 Seven Networks, Inc. System and method for making requests on behalf of a mobile device based on atomic processes for mobile network traffic relief
US9077641B2 (en) * 2011-05-15 2015-07-07 Orbit Communication Systems Ltd. Static ring network for vehicle communications
US9369341B2 (en) * 2011-05-15 2016-06-14 Orbit Communication Systems Ltd. Static ring network for vehicle communications
US8713649B2 (en) 2011-06-03 2014-04-29 Oracle International Corporation System and method for providing restrictions on the location of peer subnet manager (SM) instances in an infiniband (IB) network
US10063544B2 (en) 2011-06-03 2018-08-28 Oracle International Corporation System and method for supporting consistent handling of internal ID spaces for different partitions in an infiniband (IB) network
EP2737742A4 (en) 2011-07-27 2015-01-28 Seven Networks Inc AUTOMATIC PRODUCTION AND DISTRIBUTION OF GUIDELINES INFORMATION ON MOBILE MOBILE TRANSPORT IN A WIRELESS NETWORK
US8838539B1 (en) * 2011-10-05 2014-09-16 Google Inc. Database replication
US8934414B2 (en) 2011-12-06 2015-01-13 Seven Networks, Inc. Cellular or WiFi mobile traffic optimization based on public or private network destination
EP2789138B1 (en) 2011-12-06 2016-09-14 Seven Networks, LLC A mobile device and method to utilize the failover mechanisms for fault tolerance provided for mobile traffic management and network/device resource conservation
US9277443B2 (en) 2011-12-07 2016-03-01 Seven Networks, Llc Radio-awareness of mobile device for sending server-side control signals using a wireless network optimized transport protocol
EP2788889A4 (en) 2011-12-07 2015-08-12 Seven Networks Inc FLEXIBLE AND DYNAMIC INTEGRATION SCHEMES OF A TRAFFIC MANAGEMENT SYSTEM WITH VARIOUS NETWORK OPERATORS TO REDUCE NETWORK TRAFFIC
US8955097B2 (en) * 2011-12-13 2015-02-10 Mcafee, Inc. Timing management in a large firewall cluster
EP2713555B1 (en) * 2011-12-13 2015-11-04 Huawei Technologies Co., Ltd. Data configuration method and device, and rollback method and device for data configuration
US9832095B2 (en) 2011-12-14 2017-11-28 Seven Networks, Llc Operation modes for mobile traffic optimization and concurrent management of optimized and non-optimized traffic
EP2792188B1 (en) 2011-12-14 2019-03-20 Seven Networks, LLC Mobile network reporting and usage analytics system and method using aggregation of data in a distributed traffic optimization system
US8861354B2 (en) 2011-12-14 2014-10-14 Seven Networks, Inc. Hierarchies and categories for management and deployment of policies for distributed wireless traffic optimization
GB2499306B (en) 2012-01-05 2014-10-22 Seven Networks Inc Managing user interaction with an application on a mobile device
US8843441B1 (en) 2012-01-17 2014-09-23 Amazon Technologies, Inc. System and method for maintaining a master replica for reads and writes in a data store
US9116862B1 (en) 2012-01-17 2015-08-25 Amazon Technologies, Inc. System and method for data replication using a single master failover protocol
US9069827B1 (en) 2012-01-17 2015-06-30 Amazon Technologies, Inc. System and method for adjusting membership of a data replication group
US9203864B2 (en) 2012-02-02 2015-12-01 Seven Networks, Llc Dynamic categorization of applications for network access in a mobile network
US9326189B2 (en) 2012-02-03 2016-04-26 Seven Networks, Llc User as an end point for profiling and optimizing the delivery of content and data in a wireless network
US8812695B2 (en) 2012-04-09 2014-08-19 Seven Networks, Inc. Method and system for management of a virtual network connection without heartbeat messages
WO2013155208A1 (en) 2012-04-10 2013-10-17 Seven Networks, Inc. Intelligent customer service/call center services enhanced using real-time and historical mobile application and traffic-related statistics collected by a distributed caching system in a mobile network
US20130311550A1 (en) * 2012-05-17 2013-11-21 Infinite Convergence Solutions, Inc Multi-site Server and Client Resynchronization Process and Devices
US20140006543A1 (en) * 2012-06-29 2014-01-02 William M Pitts Distributed filesystem atomic flush transactions
US8775631B2 (en) 2012-07-13 2014-07-08 Seven Networks, Inc. Dynamic bandwidth adjustment for browsing or streaming activity in a wireless network based on prediction of user behavior when interacting with mobile applications
US10872095B2 (en) 2012-07-26 2020-12-22 Mongodb, Inc. Aggregation framework system architecture and method
US11544284B2 (en) 2012-07-26 2023-01-03 Mongodb, Inc. Aggregation framework system architecture and method
US11403317B2 (en) 2012-07-26 2022-08-02 Mongodb, Inc. Aggregation framework system architecture and method
US20140075170A1 (en) * 2012-09-12 2014-03-13 International Business Machines Corporation Automated firmware voting to enable multi-enclosure federated systems
US9146794B2 (en) * 2012-10-01 2015-09-29 Microsoft Technology Licensing, Llc Enhanced arbitration protocol for nodes in a cluster
US9161258B2 (en) 2012-10-24 2015-10-13 Seven Networks, Llc Optimized and selective management of policy deployment to mobile clients in a congested network to prevent further aggravation of network congestion
CN102984267B (zh) * 2012-12-07 2016-05-11 北京搜狐新媒体信息技术有限公司 一种实现分布式缓存节点动态更新到客户端的方法及系统
US20140177497A1 (en) 2012-12-20 2014-06-26 Seven Networks, Inc. Management of mobile device radio state promotion and demotion
US11172470B1 (en) 2012-12-21 2021-11-09 Tanium Inc. System, security and network management using self-organizing communication orbits in distributed networks
US9059961B2 (en) * 2012-12-21 2015-06-16 Tanium Inc. Creation and maintenance of self-organizing communication orbits in distributed networks
US20140189298A1 (en) * 2012-12-27 2014-07-03 Teresa Morrison Configurable ring network
US9806951B2 (en) 2013-01-18 2017-10-31 Microsoft Technology Licensing, Llc Cluster voter model
US9241314B2 (en) 2013-01-23 2016-01-19 Seven Networks, Llc Mobile device with application or context aware fast dormancy
US8874761B2 (en) 2013-01-25 2014-10-28 Seven Networks, Inc. Signaling optimization in a wireless network for traffic utilizing proprietary and non-proprietary protocols
US9326185B2 (en) 2013-03-11 2016-04-26 Seven Networks, Llc Mobile network congestion recognition for optimization of mobile traffic
US9304815B1 (en) 2013-06-13 2016-04-05 Amazon Technologies, Inc. Dynamic replica failure detection and healing
US9065765B2 (en) 2013-07-22 2015-06-23 Seven Networks, Inc. Proxy server associated with a mobile carrier for enhancing mobile traffic management in a mobile network
US10223184B1 (en) * 2013-09-25 2019-03-05 Amazon Technologies, Inc. Individual write quorums for a log-structured distributed storage system
CN103607448B (zh) * 2013-11-18 2016-08-24 四川川大智胜软件股份有限公司 一种atc系统动态数据存储的方法
US9769037B2 (en) 2013-11-27 2017-09-19 Tanium Inc. Fast detection and remediation of unmanaged assets
GB2524073A (en) * 2014-03-14 2015-09-16 Ibm Communication method and system for accessing media data
US10873645B2 (en) 2014-03-24 2020-12-22 Tanium Inc. Software application updating in a local network
US9667738B2 (en) 2014-03-24 2017-05-30 Tanium Inc. Local data caching for data transfers on a network of computational devices
US9769275B2 (en) 2014-03-24 2017-09-19 Tanium Inc. Data caching and distribution in a local network
AU2015303822A1 (en) * 2014-08-15 2017-03-23 Commonwealth Scientific And Industrial Research Organisation A method of setting-up a range-based tracking system utilising a tracking coordinate system
US9715433B2 (en) * 2014-08-29 2017-07-25 Netapp, Inc. Reconciliation in sync replication
US10198558B2 (en) * 2014-10-06 2019-02-05 Red Hat, Inc. Data source security cluster
US20160149760A1 (en) * 2014-11-20 2016-05-26 Cisco Technology, Inc. Multi-stage convergence and intent revocation in a network environment
US10904155B2 (en) * 2014-12-01 2021-01-26 Informatica Llc Message broker system with parallel persistence
CN106155780B (zh) * 2015-04-02 2020-01-31 阿里巴巴集团控股有限公司 一种基于时间的节点选举方法及装置
US9910752B2 (en) 2015-04-24 2018-03-06 Tanium Inc. Reliable map-reduce communications in a decentralized, self-organizing communication orbit of a distributed network
US11461208B1 (en) 2015-04-24 2022-10-04 Tanium Inc. Reliable map-reduce communications in a decentralized, self-organizing communication orbit of a distributed network
US10496669B2 (en) 2015-07-02 2019-12-03 Mongodb, Inc. System and method for augmenting consensus election in a distributed database
US10423626B2 (en) 2015-09-25 2019-09-24 Mongodb, Inc. Systems and methods for data conversion and comparison
US10846411B2 (en) 2015-09-25 2020-11-24 Mongodb, Inc. Distributed database systems and methods with encrypted storage engines
US10394822B2 (en) 2015-09-25 2019-08-27 Mongodb, Inc. Systems and methods for data conversion and comparison
US10673623B2 (en) 2015-09-25 2020-06-02 Mongodb, Inc. Systems and methods for hierarchical key management in encrypted distributed databases
US10498744B2 (en) 2016-03-08 2019-12-03 Tanium Inc. Integrity monitoring in a local network
US10095864B2 (en) 2016-03-08 2018-10-09 Tanium Inc. System and method for performing event inquiries in a network
US11372938B1 (en) 2016-03-08 2022-06-28 Tanium Inc. System and method for performing search requests in a network
US11886229B1 (en) 2016-03-08 2024-01-30 Tanium Inc. System and method for generating a global dictionary and performing similarity search queries in a network
US10929345B2 (en) 2016-03-08 2021-02-23 Tanium Inc. System and method of performing similarity search queries in a network
US11153383B2 (en) 2016-03-08 2021-10-19 Tanium Inc. Distributed data analysis for streaming data sources
US11609835B1 (en) 2016-03-08 2023-03-21 Tanium Inc. Evaluating machine and process performance in distributed system
US10387248B2 (en) * 2016-03-29 2019-08-20 International Business Machines Corporation Allocating data for storage by utilizing a location-based hierarchy in a dispersed storage network
US10621050B2 (en) 2016-06-27 2020-04-14 Mongodb, Inc. Method and apparatus for restoring data from snapshots
US10481963B1 (en) * 2016-06-29 2019-11-19 Amazon Technologies, Inc. Load-balancing for achieving transaction fault tolerance
US10872074B2 (en) 2016-09-30 2020-12-22 Microsoft Technology Licensing, Llc Distributed availability groups of databases for data centers
US10263661B2 (en) 2016-12-23 2019-04-16 Sierra Nevada Corporation Extended range communications for ultra-wideband network nodes
US10523498B2 (en) * 2016-12-23 2019-12-31 Sierra Nevada Corporation Multi-broker messaging and telemedicine database replication
US11232000B1 (en) * 2017-02-24 2022-01-25 Amazon Technologies, Inc. Moving database partitions from replica nodes
US10812434B2 (en) * 2017-03-23 2020-10-20 Blackberry Limited Apparatus and method for maintaining message databases in eventual consistency distributed database systems
US10659561B2 (en) * 2017-06-09 2020-05-19 Microsoft Technology Licensing, Llc Service state preservation across nodes
US10866868B2 (en) 2017-06-20 2020-12-15 Mongodb, Inc. Systems and methods for optimization of database operations
WO2019010459A1 (en) * 2017-07-07 2019-01-10 Buki Pablo Javier METHODS AND SYSTEMS FOR PROCESSING CHAIN TRANSACTIONS OF FAST AND HIGH VOLUME SETTING BLOCKS
US10824729B2 (en) 2017-07-14 2020-11-03 Tanium Inc. Compliance management in a local network
US10564863B2 (en) * 2018-04-24 2020-02-18 International Business Machines Corporation Identifying an availability of a system
US10649685B2 (en) * 2018-07-16 2020-05-12 International Business Machines Corporation Site-centric alerting in a distributed storage system
US11343355B1 (en) 2018-07-18 2022-05-24 Tanium Inc. Automated mapping of multi-tier applications in a distributed system
US10841365B2 (en) 2018-07-18 2020-11-17 Tanium Inc. Mapping application dependencies in a computer network
US10931559B2 (en) * 2018-11-02 2021-02-23 Cisco Technology, Inc. Distribution of network-policy configuration, management, and control using model-driven and information-centric networking
US11831670B1 (en) 2019-11-18 2023-11-28 Tanium Inc. System and method for prioritizing distributed system risk remediations
US11563764B1 (en) 2020-08-24 2023-01-24 Tanium Inc. Risk scoring based on compliance verification test results in a local network
US11706302B1 (en) * 2022-06-03 2023-07-18 Dell Products L.P. Efficient topics in transport protocols

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006174417A (ja) * 2004-10-22 2006-06-29 Microsoft Corp リソース要求を対応するリソースに会合させる方法およびシステム
JP2006191489A (ja) * 2005-01-07 2006-07-20 Brother Ind Ltd ノード装置、ネットワーク参加処理プログラム、及びネットワーク参加処理方法等

Family Cites Families (145)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4747100A (en) 1986-08-11 1988-05-24 Allen-Bradley Company, Inc. Token passing network utilizing active node table
JPH05235975A (ja) * 1992-02-25 1993-09-10 Toshiba Corp 光リングlanシステム
US5689701A (en) 1994-12-14 1997-11-18 International Business Machines Corporation System and method for providing compatibility between distributed file system namespaces and operating system pathname syntax
US5745683A (en) 1995-07-05 1998-04-28 Sun Microsystems, Inc. System and method for allowing disparate naming service providers to dynamically join a naming federation
US5978813A (en) * 1995-09-25 1999-11-02 International Business Machines Corporation System for providing synchronization between a local area network and a distributing computer environment
US5996075A (en) 1995-11-02 1999-11-30 Sun Microsystems, Inc. Method and apparatus for reliable disk fencing in a multicomputer system
JPH09218840A (ja) * 1996-02-13 1997-08-19 Canon Inc 情報処理方法とその装置と情報処理システム
US5831975A (en) 1996-04-04 1998-11-03 Lucent Technologies Inc. System and method for hierarchical multicast routing in ATM networks
US6574654B1 (en) 1996-06-24 2003-06-03 Oracle Corporation Method and apparatus for lock caching
US6253292B1 (en) 1997-08-22 2001-06-26 Seong Tae Jhang Distributed shared memory multiprocessor system based on a unidirectional ring bus using a snooping scheme
US6178174B1 (en) 1997-08-26 2001-01-23 International Business Machines Corporation Optimistic, eager rendezvous transmission mode and combined rendezvous modes for message processing systems
US5999712A (en) 1997-10-21 1999-12-07 Sun Microsystems, Inc. Determining cluster membership in a distributed computer system
US6269452B1 (en) 1998-04-27 2001-07-31 Cisco Technology, Inc. System and method for fault recovery for a two line bi-directional ring network
US6456597B1 (en) 1998-05-04 2002-09-24 Hewlett Packard Co. Discovery of unknown MAC addresses using load balancing switch protocols
US6279034B1 (en) 1998-06-03 2001-08-21 International Business Machines Corporation Distributed monitor timer service for use in a distributed computing environment
US7076507B1 (en) 1998-07-08 2006-07-11 Required Technologies, Inc. Value-instance-connectivity computer-implemented database
US6304556B1 (en) 1998-08-24 2001-10-16 Cornell Research Foundation, Inc. Routing and mobility management protocols for ad-hoc networks
US7430171B2 (en) 1998-11-19 2008-09-30 Broadcom Corporation Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost
US6480473B1 (en) * 1998-12-29 2002-11-12 Koninklijke Philips Electronics N.V. Verification of active nodes in an open network
US6115804A (en) 1999-02-10 2000-09-05 International Business Machines Corporation Non-uniform memory access (NUMA) data processing system that permits multiple caches to concurrently hold data in a recent state from which data can be sourced by shared intervention
US6401120B1 (en) * 1999-03-26 2002-06-04 Microsoft Corporation Method and system for consistent cluster operational data in a server cluster using a quorum of replicas
US6839348B2 (en) 1999-04-30 2005-01-04 Cisco Technology, Inc. System and method for distributing multicasts in virtual local area networks
US6546415B1 (en) 1999-05-14 2003-04-08 Lucent Technologies Inc. Network management system using a distributed namespace
US6850987B1 (en) 1999-06-01 2005-02-01 Fastforward Networks, Inc. System for multipoint infrastructure transport in a computer network
US6411967B1 (en) 1999-06-18 2002-06-25 Reliable Network Solutions Distributed processing system with replicated management information base
US7463648B1 (en) 1999-08-23 2008-12-09 Sun Microsystems, Inc. Approach for allocating resources to an apparatus based on optional resource requirements
US7117273B1 (en) 2000-01-25 2006-10-03 Cisco Technology, Inc. Methods and apparatus for maintaining a map of node relationships for a network
US6269085B1 (en) 2000-02-03 2001-07-31 Sun Microsystems, Inc. Method and apparatus for hierarchical discovery and pruning of slow members of a multicast group
US6917985B2 (en) 2000-03-10 2005-07-12 The Regents Of The University Of California Core assisted mesh protocol for multicast routing in ad-hoc Networks
EP1139602A1 (en) 2000-03-31 2001-10-04 Lucent Technologies Inc. Method and device for multicasting
US6553377B1 (en) 2000-03-31 2003-04-22 Network Associates, Inc. System and process for maintaining a plurality of remote security applications using a modular framework in a distributed computing environment
US7123620B1 (en) 2000-04-25 2006-10-17 Cisco Technology, Inc. Apparatus and method for scalable and dynamic traffic engineering in a data communication network
US6775703B1 (en) 2000-05-01 2004-08-10 International Business Machines Corporation Lease based safety protocol for distributed system with multiple networks
JP2004531780A (ja) 2000-06-22 2004-10-14 マイクロソフト コーポレーション 分散型コンピューティングサービスプラットフォーム
US6947963B1 (en) 2000-06-28 2005-09-20 Pluris, Inc Methods and apparatus for synchronizing and propagating distributed routing databases
US7139270B1 (en) 2000-08-22 2006-11-21 Lucent Technologies Inc. Systems and method for transporting multiple protocol formats in a lightwave communication network
AU2001286954A1 (en) 2000-08-31 2002-03-13 The Regents Of The University Of California Cluster-based aggregated switching technique (cast) for routing data packets and information objects in computer networks
US7370223B2 (en) * 2000-09-08 2008-05-06 Goahead Software, Inc. System and method for managing clusters containing multiple nodes
JP2002123406A (ja) * 2000-10-17 2002-04-26 Pfu Ltd 高信頼性システム
US7379994B2 (en) 2000-10-26 2008-05-27 Metilinx Aggregate system resource analysis including correlation matrix and metric-based analysis
DE60142750D1 (de) 2000-10-26 2010-09-16 British Telecomm Optimale routenplanung in handover-szenarien
US20020150094A1 (en) 2000-10-27 2002-10-17 Matthew Cheng Hierarchical level-based internet protocol multicasting
US6836756B1 (en) 2000-11-13 2004-12-28 Nortel Networks Limited Time simulation techniques to determine network availability
US6947434B2 (en) 2000-11-16 2005-09-20 Telefonaktiebolaget Lm Ericsson (Publ) Subgroup multicasting in a communications network
CA2326851A1 (en) 2000-11-24 2002-05-24 Redback Networks Systems Canada Inc. Policy change characterization method and apparatus
AU2002234258A1 (en) 2001-01-22 2002-07-30 Sun Microsystems, Inc. Peer-to-peer network computing platform
US7062563B1 (en) 2001-02-28 2006-06-13 Oracle International Corporation Method and system for implementing current user links
US6625604B2 (en) 2001-03-09 2003-09-23 Hewlett-Packard Development Company, L.P. Namespace service in a distributed file system using a database management system
US7085825B1 (en) 2001-03-26 2006-08-01 Freewebs Corp. Apparatus, method and system for improving application performance across a communications network
US7113536B2 (en) 2001-04-16 2006-09-26 Telefonaktiebolaget L M Ericsson (Publ) Rendezvous point interpiconet scheduling
US6928578B2 (en) * 2001-05-10 2005-08-09 International Business Machines Corporation System, method, and computer program for selectable or programmable data consistency checking methodology
WO2003001377A2 (en) 2001-06-22 2003-01-03 Wonderware Corporation Installing supervisory process control and manufacturing software from a remote location and maintaining configuration data links in a run-time environment
US7181547B1 (en) 2001-06-28 2007-02-20 Fortinet, Inc. Identifying nodes in a ring network
GB2377140B (en) 2001-06-29 2005-01-19 Ibm Method and apparatus for recovery from faults in a loop network
US6922791B2 (en) 2001-08-09 2005-07-26 Dell Products L.P. Failover system and method for cluster environment
US7493363B2 (en) 2001-09-19 2009-02-17 Microsoft Corporation Peer-to-peer group management and method for maintaining peer-to-peer graphs
ITMI20012088A1 (it) 2001-10-10 2003-04-10 Cit Alcatel Metodo per propagare l'informazione di guasto in una rete rpr e relativo tipo di pacchetto rpr
US6983397B2 (en) 2001-11-29 2006-01-03 International Business Machines Corporation Method, system, and program for error handling in a dual adaptor system where one adaptor is a master
US7426573B2 (en) 2001-12-12 2008-09-16 Alcatel Lucent System and method for providing service availability data for a communication network
US7076796B2 (en) 2002-01-04 2006-07-11 Reeves Drue A Virtual media from a directory service
US7231463B2 (en) 2002-01-04 2007-06-12 Intel Corporation Multi-level ring peer-to-peer network structure for peer and object discovery
US20030145086A1 (en) 2002-01-29 2003-07-31 O'reilly James Scalable network-attached storage system
JP3937855B2 (ja) 2002-02-06 2007-06-27 日本電気株式会社 マルチリング制御方法およびそれを用いるノード並びに制御プログラム
CN1177436C (zh) 2002-02-09 2004-11-24 华为技术有限公司 移动网络中多播用户的管理方法
US7043550B2 (en) 2002-02-15 2006-05-09 International Business Machines Corporation Method for controlling group membership in a distributed multinode data processing system to assure mutually symmetric liveness status indications
US6779093B1 (en) * 2002-02-15 2004-08-17 Veritas Operating Corporation Control facility for processing in-band control messages during data replication
WO2003073206A2 (en) * 2002-02-22 2003-09-04 Bea Systems, Inc. System and method for using a data replication service to manage a configuration repository
US7254634B1 (en) * 2002-03-08 2007-08-07 Akamai Technologies, Inc. Managing web tier session state objects in a content delivery network (CDN)
US7039719B2 (en) 2002-03-21 2006-05-02 Hewlett-Packard Development Company, L.P. Distributed system with an efficient atomic broadcast mechanism
US7512649B2 (en) 2002-03-22 2009-03-31 Sun Microsytems, Inc. Distributed identities
US7103884B2 (en) * 2002-03-27 2006-09-05 Lucent Technologies Inc. Method for maintaining consistency and performing recovery in a replicated data storage system
US7290262B2 (en) 2002-05-21 2007-10-30 International Business Machine Corporation Method and apparatus for dynamically determining information for deploying a web service
AU2003259297A1 (en) * 2002-07-29 2004-02-16 Eternal Systems, Inc. Consistent message ordering for semi-active and passive replication
EP1394999A1 (en) 2002-08-07 2004-03-03 Infineon Technologies AG Method for routing of data packets and routing apparatus
US7849140B2 (en) 2002-08-29 2010-12-07 Oracle America, Inc. Peer-to-peer email messaging
US7613796B2 (en) 2002-09-11 2009-11-03 Microsoft Corporation System and method for creating improved overlay network with an efficient distributed data structure
US7239605B2 (en) 2002-09-23 2007-07-03 Sun Microsystems, Inc. Item and method for performing a cluster topology self-healing process in a distributed data system cluster
US7200657B2 (en) 2002-10-01 2007-04-03 International Business Machines Corporation Autonomic provisioning of network-accessible service behaviors within a federated grid infrastructure
US6909721B2 (en) 2002-10-31 2005-06-21 Nokia Corporation Device detection and service discovery system and method for a mobile ad hoc communications network
US7289520B2 (en) 2002-11-20 2007-10-30 Hewlett-Packard Development Company, L.P. Method, apparatus, and system for expressway routing among peers
US6850487B2 (en) 2002-12-05 2005-02-01 The Regents Of The University Of California Method and apparatus for guaranteeing a failure-recovery time in a wavelength-division multiplexing network
US7652998B2 (en) 2002-12-11 2010-01-26 Nippon Telegraph And Telephone Corporation Multicast communication path calculation method and multicast communication path calculation apparatus
US7584298B2 (en) 2002-12-13 2009-09-01 Internap Network Services Corporation Topology aware route control
US7404006B1 (en) 2002-12-20 2008-07-22 Symantec Operating Corporation Publishing a network address in a computer network
US7480708B2 (en) 2002-12-23 2009-01-20 Sap Ag Method and computer program product for managing data consistency
US7137018B2 (en) 2002-12-31 2006-11-14 Intel Corporation Active state link power management
JP2004221756A (ja) 2003-01-10 2004-08-05 Sony Corp 情報処理装置および情報処理方法、並びにコンピュータ・プログラム
US7747731B2 (en) * 2003-03-27 2010-06-29 Nokia Corporation Minimizing message processing latency in a communication network
US7120824B2 (en) 2003-05-09 2006-10-10 International Business Machines Corporation Method, apparatus and program storage device for maintaining data consistency and cache coherency during communications failures between nodes in a remote mirror pair
US6988173B2 (en) 2003-05-12 2006-01-17 International Business Machines Corporation Bus protocol for a switchless distributed shared memory computer system
US7426637B2 (en) 2003-05-21 2008-09-16 Music Public Broadcasting, Inc. Method and system for controlled media sharing in a network
US7032089B1 (en) * 2003-06-09 2006-04-18 Veritas Operating Corporation Replica synchronization using copy-on-read technique
EP1494394A1 (en) 2003-06-30 2005-01-05 Sony International (Europe) GmbH Distance-aware service mechanism for determining the availability of remote services in wireless personal area networks
US7334062B1 (en) * 2003-07-22 2008-02-19 Symantec Operating Corporation Technique to monitor application behavior and tune replication performance
JP3857258B2 (ja) 2003-07-25 2006-12-13 東日本電信電話株式会社 グリッドコンピューティングシステム、及びグリッドコンピューティングシステムにおける計算資源収集方法
US20050031119A1 (en) 2003-08-04 2005-02-10 Yuying Ding Method and communications device for secure group communication
US7680152B2 (en) 2003-08-07 2010-03-16 Robert Bosch Gmbh Method for establishing a user of a data network as a pilot master
US20050050320A1 (en) 2003-09-02 2005-03-03 Microsoft Corporation Branding framework
US20050091399A1 (en) 2003-09-30 2005-04-28 Candan Kasim S. Resource-aware adaptive multicasting in a shared proxy overlay network
US7289501B2 (en) 2003-11-06 2007-10-30 Teknovus, Inc. Method and apparatus for bandwidth-efficient multicast in ethernet passive optical networks
US20050108481A1 (en) * 2003-11-17 2005-05-19 Iyengar Arun K. System and method for achieving strong data consistency
US20050111352A1 (en) 2003-11-21 2005-05-26 Boon Ho Method and system for monitoring a network containing routers using a backup routing protocol
US7243089B2 (en) 2003-11-25 2007-07-10 International Business Machines Corporation System, method, and service for federating and optionally migrating a local file system into a distributed file system while preserving local access to existing data
KR100576935B1 (ko) 2003-12-22 2006-05-10 한국전자통신연구원 온톨로지 기반의 애드혹 서비스 검색 시스템 및 방법
US7420954B2 (en) 2004-01-13 2008-09-02 General Motors Corporation Efficient lightweight information dissemination algorithm for mobile wireless ad hoc networks
US7313565B2 (en) 2004-02-19 2007-12-25 Microsoft Corporation Data overlay, self-organized metadata overlay, and associated methods
US20050220106A1 (en) 2004-03-31 2005-10-06 Pierre Guillaume Raverdy Inter-wireless interactions using user discovery for ad-hoc environments
US7730207B2 (en) 2004-03-31 2010-06-01 Microsoft Corporation Routing in peer-to-peer networks
US7383271B2 (en) * 2004-04-06 2008-06-03 Microsoft Corporation Centralized configuration data management for distributed clients
US7478263B1 (en) * 2004-06-01 2009-01-13 Network Appliance, Inc. System and method for establishing bi-directional failover in a two node cluster
US7512064B2 (en) 2004-06-15 2009-03-31 Cisco Technology, Inc. Avoiding micro-loop upon failure of fast reroute protected links
US7805407B1 (en) * 2004-06-16 2010-09-28 Oracle America, Inc. System and method for dynamic configuration of replicated database servers
GB0416074D0 (en) 2004-07-17 2004-08-18 Ibm Controlling data consistency guarantees in storage apparatus
US7472133B2 (en) * 2004-07-30 2008-12-30 Microsoft Corporation System and method for improved prefetching
US7715396B2 (en) 2004-08-19 2010-05-11 Microsoft Corporation Network routing
US8250230B2 (en) 2004-09-30 2012-08-21 Microsoft Corporation Optimizing communication using scalable peer groups
US7613703B2 (en) 2004-09-30 2009-11-03 Microsoft Corporation Organizing resources into collections to facilitate more efficient and reliable resource access
US7730220B2 (en) 2004-10-22 2010-06-01 Microsoft Corporation Broadcasting communication within a rendezvous federation
US8095600B2 (en) 2004-10-22 2012-01-10 Microsoft Corporation Inter-proximity communication within a rendezvous federation
US8549180B2 (en) 2004-10-22 2013-10-01 Microsoft Corporation Optimizing access to federation infrastructure-based resources
US8392515B2 (en) 2004-10-22 2013-03-05 Microsoft Corporation Subfederation creation and maintenance in a federation infrastructure
US20080288659A1 (en) 2006-11-09 2008-11-20 Microsoft Corporation Maintaining consistency within a federation infrastructure
US7694167B2 (en) 2004-10-22 2010-04-06 Microsoft Corporation Maintaining routing consistency within a rendezvous federation
US7958262B2 (en) 2004-10-22 2011-06-07 Microsoft Corporation Allocating and reclaiming resources within a rendezvous federation
US8095601B2 (en) 2004-10-22 2012-01-10 Microsoft Corporation Inter-proximity communication within a rendezvous federation
US20060090003A1 (en) 2004-10-22 2006-04-27 Microsoft Corporation Rendezvousing resource requests with corresponding resources
US20110082928A1 (en) 2004-10-22 2011-04-07 Microsoft Corporation Maintaining consistency within a federation infrastructure
US20060155781A1 (en) 2005-01-10 2006-07-13 Microsoft Corporation Systems and methods for structuring distributed fault-tolerant systems
GB2422505A (en) * 2005-01-20 2006-07-26 Agilent Technologies Inc Sampling datagrams
US20060182050A1 (en) * 2005-01-28 2006-08-17 Hewlett-Packard Development Company, L.P. Storage replication system with data tracking
US7467265B1 (en) * 2005-06-30 2008-12-16 Symantec Operating Corporation System and method for block conflict resolution within consistency interval marker based replication
US7827262B2 (en) * 2005-07-14 2010-11-02 Cisco Technology, Inc. Approach for managing state information by a group of servers that services a group of clients
US7778972B1 (en) * 2005-12-29 2010-08-17 Amazon Technologies, Inc. Dynamic object replication within a distributed storage system
JP4727437B2 (ja) * 2006-02-03 2011-07-20 株式会社日立製作所 データベースを有するストレージシステムの記憶制御方法
US7673069B2 (en) 2006-02-24 2010-03-02 Microsoft Corporation Strong routing consistency protocol in structured peer-to-peer overlays
US20070214194A1 (en) * 2006-03-07 2007-09-13 James Reuter Consistency methods and systems
US7881223B2 (en) 2006-03-31 2011-02-01 Panasonic Corporation Method for on demand distributed hash table update
WO2008036777A2 (en) 2006-09-19 2008-03-27 Bea Systems, Inc. System and method for supporting service networks in a service-oriented architecture environment
US7822002B2 (en) 2006-12-29 2010-10-26 Intel Corporation Dynamic address redemption by proxy in statically addressed wireless personal area networks
US20090006596A1 (en) 2007-06-27 2009-01-01 Veluchamy Dinakaran Dynamic address redemption and routing in ZigBee networks
US8417775B2 (en) 2008-02-27 2013-04-09 Microsoft Corporation Neighborhood maintenance in the federation
TWI390869B (zh) 2008-04-24 2013-03-21 Univ Nat Taiwan 網路資源分配系統及方法
US7934118B2 (en) 2008-10-24 2011-04-26 Microsoft Corporation Failure notification in rendezvous federation
US9344438B2 (en) 2008-12-22 2016-05-17 Qualcomm Incorporated Secure node identifier assignment in a distributed hash table for peer-to-peer networks
US8307085B2 (en) 2010-03-16 2012-11-06 Microsoft Corporation Storing state of distributed architecture in external store

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006174417A (ja) * 2004-10-22 2006-06-29 Microsoft Corp リソース要求を対応するリソースに会合させる方法およびシステム
JP2006191489A (ja) * 2005-01-07 2006-07-20 Brother Ind Ltd ノード装置、ネットワーク参加処理プログラム、及びネットワーク参加処理方法等

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015534150A (ja) * 2012-08-22 2015-11-26 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境で高可用性(ha)ネットワーク通信をサポートするためのシステムおよび方法
US11243980B2 (en) 2017-03-15 2022-02-08 International Business Machines Corporation Monotonic transactions in a multi-master database with loosely coupled nodes

Also Published As

Publication number Publication date
EP2095248A2 (en) 2009-09-02
CN102035886A (zh) 2011-04-27
EP2095248B1 (en) 2016-05-04
WO2008060938A2 (en) 2008-05-22
US20080288659A1 (en) 2008-11-20
US20120036237A1 (en) 2012-02-09
CN102035886B (zh) 2012-12-12
JP2014116968A (ja) 2014-06-26
JP5798644B2 (ja) 2015-10-21
US8990434B2 (en) 2015-03-24
CN101535977A (zh) 2009-09-16
CN101535977B (zh) 2011-09-14
WO2008060938A3 (en) 2008-08-28
KR20090098791A (ko) 2009-09-17
US20080288646A1 (en) 2008-11-20
KR101455420B1 (ko) 2014-10-27
EP2095248A4 (en) 2014-12-03
US8090880B2 (en) 2012-01-03
JP5498594B2 (ja) 2014-05-21
JP2013102527A (ja) 2013-05-23

Similar Documents

Publication Publication Date Title
JP5498594B2 (ja) フェデレーションインフラストラクチャ内の一貫性
US9647917B2 (en) Maintaining consistency within a federation infrastructure
US7694167B2 (en) Maintaining routing consistency within a rendezvous federation
US7958262B2 (en) Allocating and reclaiming resources within a rendezvous federation
US8549180B2 (en) Optimizing access to federation infrastructure-based resources
JP5049344B2 (ja) ランデブーフェデレーション内の近傍域間通信
US8392515B2 (en) Subfederation creation and maintenance in a federation infrastructure
US8095601B2 (en) Inter-proximity communication within a rendezvous federation
US7730220B2 (en) Broadcasting communication within a rendezvous federation
JP2009543447A5 (ja)
US20060088015A1 (en) Establishing membership within a federation infrastructure

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101105

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20110512

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20110527

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120822

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120905

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121204

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20121211

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130107

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130115

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130403