(58)【調査した分野】(Int.Cl.,DB名)
前記メンバーシップクリエイターノードと通信するのに十分な情報は、前記メンバーシップクリエイターノードの識別、ロケーション、及びホストネームのうちの少なくとも1つを含む
請求項5に記載のコンピューターで実施される方法。
前記メンバーシップクリエイターノードと通信するのに十分な情報は、前記メンバーシップクリエイターノードの識別、ロケーション、及びホストネームのうちの少なくとも1つを含む
請求項14に記載の計算装置。
前記一連の命令はさらに、前記計算装置に、展開される前記メンバーシップに参加するよう選択された前記ノードに、少なくとも1つの役割を割り当てさせるよう構成される
請求項19に記載の有形のデータ記憶メディア。
前記メンバーシップクリエイターノードと通信するのに十分な情報は、前記メンバーシップクリエイターノードの識別、ロケーション、及びホストネームのうちの少なくとも1つを含む
請求項23に記載の有形のデータ記憶メディア。
【背景技術】
【0002】
共同プロジェクト、それはしばしばグローバルに分離した複数のリソースの間で並列に進められるもの(すなわち、マルチサイト共同プロジェクト)であるが、は様々な種類のプロジェクトで当たり前のこととなっている。そのようなプロジェクトの例には、限定されるものではないが、ソフトウェアの開発、ジェット旅客機の設計、自動車の設計が含まれる。人的資源利用の最適化及びグローバル資源のスキルセットの活用を通じてプロジェクトのタイムラインを加速するために分散されたリソースに依存することは、有利な結果を提供するものであると証明されてきた。
【0003】
マルチサイト共同プロジェクトを進める際に用いられる分散型コンピューターソリューションを、ここでは分散型マルチサイト共同コンピューターソリューションと称することにする。しかしながら、分散型マルチサイト共同コンピューターソリューションは、分散型コンピューターソリューションの一例にすぎない。ひとつの例では、分散型コンピューターソリューションには、自動車を操作するコンピューターのネットワークが含まれる。他の例では、分散型コンピューターソリューションには、1つの地理的なロケーション(データセンター)におけるコンピューターのネットワークが含まれる。さらに他の例では、分散型コンピューターソリューションは、1つのルータに接続された複数のコンピューターである(すなわち、サブネット)。
【0004】
従来から分散型コンピューターソリューションは存在しているものの、それらは、自身の有効性、信頼性、有用性、拡張性、透明性、及び/又は、セキュリティに悪影響を与える限定なしではいられない。特に、従来型の分散型マルチサイト共同コンピューターソリューションについては、グローバルに分散した開発基地からの仕事をリアルタイムかつフォールトトレラントに同期させる能力に限界がある。この限界は、ソフトウェアの開発及び納入手続において、しばしば遅れを引き起こしかつリスクを増大させる変更を余儀なくさせる。したがって、従来型の分散型コンピューターソリューションを利用して共同プロジェクトを実行することによって実現されるはずのコスト削減及び生産性向上は、完全には実現されない。
【0005】
従来型の分散型マルチサイト共同コンピューターソリューションは、望ましくない形で、ユーザに開発手順の変更を強いる。例えば、リアルタイムな情報管理能力に関連する有利な機能を欠く従来型の分散型マルチサイト共同コンピューターソリューションは、ローカルとリモートのコンカレント・バージョンズ・システム(CVS)リポジトリが任意の時点で同期状態にあることを保証できないという根本的な問題を有する。これは、異なるサイトの開発者が、気付くことなくお互いの仕事を上書きし、また衝突させる可能性が高いことを意味する。そのような上書きや衝突の危険を防ぐため、従来型の分散型マルチサイト共同コンピューターソリューションは、過度の及び/又は間違いを起こしやすいソースコードの分岐や手動でのファイルの結合を、開発プロセスの一部として必要とする。このことは、実際上、タイムゾーンに基づいて開発事業を分割することを強制し、分散された開発チーム間の協調を、不可能ではないとしても非常に困難なものにする。
【0006】
複製状態マシンは、分散型コンピューターソリューションを好適に実現したものである。また、分散型コンピューターソリューションのいくつかの可能な例の中のひとつは、複製情報リポジトリである。したがって、複製状態マシンは、より具体的には、複製情報リポジトリを好適に実現したものである。また、複製情報リポジトリのいくつかの可能なアプリケーションの中のひとつは、分散型マルチサイト共同コンピューターソリューションである。したがって、複製状態マシンは、より具体的には、分散型マルチサイト共同コンピューターソリューションを好適に実現したものである。
【0007】
したがって、分散型コンピューターソリューションは、しばしば複製状態マシン又は複製情報リポジトリ、或いはこれらの両方に依存する。複製状態マシン及び複製情報リポジトリ又はそのいずれかは、コンカレントな情報の生成、操作、管理を提供し、そしてそれゆえ、ほとんどの分散型コンピューターソリューションの重要な一面である。しかしながら、状態マシンの複製を促進するとともに情報リポジトリの複製を促進する既知の手法には、欠陥がないわけではない。
【0008】
状態マシンの複製を促進する従来の実装は、その有効性を制限する1つ以上の欠陥を有している。そのような欠陥のひとつは、合意プロトコルにおいて提案側に繰り返しプリエンプトが発生する傾向があるということであり、これは拡張性に悪影響を及ぼす。そのような欠陥の他のひとつは、ウイークリーダーオプティマイゼーション(weak leader optimization)の実行がリーダーの選挙を必要とすることであり、このことは、そのような最適化が複雑さ、スピード、拡張性に悪影響を及ぼす原因となり、さらに、同意ごとにひとつ以上のメッセージを必要とする(例えば、3つの代わりに4つ)ことであり、このことは、スピード及び拡張性に悪影響を及ぼす。そのような欠陥の他のひとつは、合意が順番に到達されなければならないということであり、これはスピードと拡張性に悪影響を及ぼす。そのような欠陥の他のひとつは、固定ストレージの再利用には限界があるということであり、もしこの欠陥が少しでも存在するならば、これは配置に大変な負担を課すことになる。なぜならば、そのような配置のための記憶装置のニーズは、継続的、潜在的、かつ限度なく成長するであろうからである。そのような欠陥の他のひとつは、大きな提案と多数の小さな提案の効果的なハンドリングに限界があるということであり、もしこの欠陥が少しでも存在するならば、拡張性に悪影響を及ぼす。そのような欠陥の他のひとつは、状態マシンの複製を促進するには比較的多数のメッセージが通信されなければならないことであり、これは拡張性と広域ネットワークの互換性に悪影響を及ぼす。他の限界は、通信メッセージの遅延が拡張性に悪影響を及ぼすということである。そのような欠陥の他のひとつは、複製状態マシンにおいて参加者を動的に変更する(例えば、必要に応じて加入及び除外する)ことによるアドレッシングの失敗シナリオが、複雑さ及び拡張性に悪影響を及ぼすということである。
【0009】
情報リポジトリの複製を促進する従来の実装は、その有効性を制限する1つ以上の欠陥を有している。そのような欠陥のひとつは、いくつかの従来型のマルチサイト共同コンピューターソリューションが、集中的に調整された情報リポジトリの複製を促進するために単一の中央調整者を必要とすることである。中央調整者は、情報リポジトリに対するすべての更新が単一の中央調整者経由で届けられなければならなくなることから、望ましくない形で、拡張性に悪影響を及ぼす。さらに、そのような実装は、単一の中央調整者の障害によって情報リポジトリの任意の複製の更新が停止してしまうことから、高い有用性を有しない。そのような欠陥の他のひとつは、ログの再生に依存する情報リポジトリの複製の実行においては、情報リポジトリの複製が能動受動(active-passive)な方法で促進されるということである。したがって、どんなときでも1つの複製のみが更新され得る。そのため、他の複製は、アイドル状態となるか、又は、例えばデータマイニングアプリケーションのようなリードオンリーのアプリケーションを提供することしかできないので、リソースの利用は貧弱となる。そのような欠陥の他のひとつは、実装が、競合解決発見的問題解決法(conflict-resolution heuristics)及び/又はアプリケーション介在メカニズム(application-intervention mechanisms)に裏打ちされた弱く首尾一貫した複製(weakly consistent replication)に依存するときに生ずる。このタイプの情報リポジトリは、情報リポジトリの複製に対して競合する更新を許容し、情報リポジトリを利用するアプリケーションに、これらの競合の解決を求める。したがって、そのような実装は、アプリケーションに対する透明性に悪影響を与える。
【0010】
情報リポジトリの複製を促進する従来の実装がそれらの有効性を制限する1つ以上の欠陥を有することをさらに参照すると、ディスクミラーリングソリューションに依存する実装は1つ以上の欠陥を有することが知られている。このタイプの実装は、能動受動(active-passive)な実装である。したがって、そのような欠陥のひとつは、どのようなときでも1つの複製のみがアプリケーションによって使用され得るということである。そのため、他の複製(すなわち、受動的なミラー)は、受動的なミラーとしての役割を担う間、読み出しも書き込みも不可能となるので、リソースの利用は貧弱となる。この特殊な実装の欠陥の他のひとつは、複製方法がアプリケーションのトランザクション限界を関知しないということである。そのため、失敗の時点で、そのミラーはトランザクションの部分的な結果を有しており、それゆえ利用できなくなるかもしれない。そのような欠陥の他のひとつは、複製方法が、情報に対する変更が生じたノードから他のすべてのノードに対して、その変更を伝播させることである。情報に対する変更のサイズはしばしば、その変更の原因となったコマンドのサイズよりも相当程度大きいので、そのような実装は、不必要に大きな帯域を必要とする。そのような欠陥の他のひとつは、もしマスターレポジトリ内の情報が何らかの理由で破損したとすると、その破損がそのリポジトリのすべての複製に伝播されるということである。そのため、情報リポジトリは、リカバリ不能となるか、又は、古いバックアップコピーからリカバリしなければならないこととなり、したがって更なる情報の喪失を引き起こす。
【0011】
したがって、従来型の複製状態マシンに関連する欠点を克服する複製状態マシンが有用であり、有利である。より具体的には、そのような複製状態マシンを用いて構築された複製情報リポジトリは、従来型の複製情報リポジトリに比べて優れている。さらにいっそう具体的には、そのような複製状態マシンを用いて構築された複製CVSリポジトリは、従来型の複製CVSリポジトリに比べて優れている。
【0012】
既知のエンティティのセットからメンバーシップやエンティティの具体的なコレクションを形成することは、上記したような分散型コンピューターシステム内で有用であり、そうすることで、信頼済みノードの特定グループの間で情報をシェアすることが可能になる。
【発明を実施するための形態】
【0024】
ここに開示されるのは、各種の分散型コンピューターシステムアーキテクチャ(例えば、分散型マルチサイト共同コンピューターシステムアーキテクチャ)における複製状態マシンの実用的な実装を促進する様々な態様である。当業者は、複製状態マシンの1つ以上の従来の実装を承知しているであろう。そのような状態マシンの従来の実装は、例えば、F.B.シュナイダー(F. B. Schneider)によって書かれ、1990年12月にACMコンピューターサーベイ22(ACM Computing Surveys 22)において発表された「状態マシンアプローチを用いてフォールトトレラントなサービスを実現すること:チュートリアル(Implementing fault-tolerant services using the state machine approach: A tutorial)」(299ページ〜319ページ)と題された刊行物の中に開示されている。この刊行物の内容は、本明細書の一部を構成するものとしてここに援用される。本実施の形態は、以下でより詳細に議論されるように、分散型アプリケーションシステムアーキテクチャ内の状態マシンの従来の実装に関して、拡張性、信頼性、可用性、及びフォールトトレランスの側面を高めるものである。
【0025】
本実施の形態は、各種の分散型コンピューターシステムアーキテクチャ(例えば、分散型マルチサイト共同コンピューターシステムアーキテクチャ)内の複製状態マシンの実用的な実装を提供する。より具体的には、本実施の形態は、分散型コンピューターシステムアーキテクチャにおける複製状態マシン及び/又は複製情報リポジトリの拡張性、信頼性、可用性、及びフォールトトレランスを高める。したがって、本実施の形態は、分散型コンピューターシステムアーキテクチャにおける複製状態マシン及び/又は複製情報リポジトリを実行するための従来のアプローチに関連する1つ以上の欠点を有利に克服する。
【0026】
一実施の形態では、複製状態マシンは、提案マネージャー、同意マネージャー、衝突/バックオフタイマー、及びストレージリクレーマーを備えることができる。提案マネージャーは、分散型アプリケーションのあるノードによって発行された提案に関して、その提案を実行する必要のある分散型アプリケーションのすべてのノードによってその提案が協調的に実行されるように、その管理を促進する。すべてのノードには、おそらく自分自身も含まれるが、必須ではない。同意マネージャーは、提案に対する同意を促進する。衝突/バックオフタイマーは、提案に対する同意を達成するための試みにおいて、ラウンドのプリエンプトが繰り返されることを排除する。ストレージリクレーマーは、提案の同意及び/又は提案を格納するために利用される固定ストレージを再利用する。
【0027】
他の実施の形態では、分散型コンピューターシステムアーキテクチャは、ネットワークシステムと、このネットワークシステムを介して相互に接続された複数の分散型コンピューターシステムとを備えることができる。分散型コンピューターシステムのそれぞれは、各々の複製状態マシンと、各々の複製状態マシンに接続された各々のローカルアプリケーションノードとを含むことができる。複数の分散型コンピューターシステムそれぞれの複製状態マシンは、他のすべての分散型コンピューターシステムの分散型アプリケーションノードによる提案の協調的な実行を可能にするために提案の管理を促進し、提案の同意を促進し、提案に対する同意を達成するための試みにおいてラウンドのプリエンプトが繰り返されることを排除し、提案の同意及び提案の少なくとも一方を格納するために利用される固定ストレージを再利用する。
【0028】
他の実施の形態では、方法は、複数のオペレーションを備える。あるオペレーションは、ローカルアプリケーションノードから受信される提案の合意を促進するために実行され得る。あるオペレーションは、提案に対する同意を達成するための試みにおいてラウンドのプリエンプトが繰り返されることを排除するために実行され得る。あるオペレーションは、提案の同意及び提案の少なくとも一方を格納するために利用される固定ストレージを再利用するために実行され得る。
【0029】
少なくとも1つの実施の形態では、少なくとも提案の一部分は、分散型のアプリケーションのノードによって起動される情報更新の実行に対応する提案されたステップを含む。提案の発行順序は、提案に対するコンカレントな同意が進められる間、保存され得る。提案の一部は、各情報更新に対応する提案された書き込みステップであり得、提案マネージャーは、それら提案された書き込みステップのそれぞれにローカルな連続番号を割り当て、提案された書き込みステップを実行する分散型アプリケーションのすべてのノードが共通のシーケンスで提案された書き込みステップを実行できるよう、提案された書き込みステップのグローバルに一意なインターリービングを生成する。それぞれ複数の提案中の対応するものに関連付けられた複数のエントリを含むローカルシーケンサーが用意され得、同様に、それぞれローカルシーケンサーのエントリ中の対応するものを参照する複数のエントリを含むグローバルシーケンサーがあり得る。ローカルシーケンサーのエントリのそれぞれは、それに割り当てられた一意なローカル連続番号を有してもよいし、ローカルシーケンサーのエントリのそれぞれは、割り当てられた連続番号に対して順次配列されてもよい。そして、同意マネージャーが提案のうちのひとつの同意を進めた後、同意が進められたその提案に対応するエントリが、グローバルシーケンサー内でそのエントリが位置する位置を決定することに応じて、グローバルシーケンサー内に生成され得る。ストレージリクレーマーは、グローバルシーケンサー内のエントリの位置が決定され、すべてのノードに知れ渡った後、固定提案ストレージから提案のためのレコードを削除することによって、固定ストレージを再利用することができる。衝突/バックオフタイマーは、第1の提案者のためのラウンドのうちの現在のひとつが始まった後、第1の提案者のためのラウンドのうちの次のひとつが起動される前までに経過する時間として計算されたプリエンプト遅延の継続時間だけ待機するオペレーション、及び、第1の提案者のためのラウンドのうちの現在のひとつが始まった後、第2の提案者のためのラウンドのうちの次のひとつが起動される前までに経過する時間として計算された進行中ラウンド遅延の継続時間だけ待機するオペレーション、又はこれらのオペレーションのうちのいずれか一方を実行することにより、プリエンプトが繰り返されることを排除するよう構成され得る。
【0030】
次に図面を参照すると、
図1は、一実施の形態に基づくマルチサイトコンピューターシステムアーキテクチャ(すなわち、ここではマルチサイトコンピューターシステムアーキテクチャ100と称される)が、ワイドエリアネットワーク(WAN)110によって相互に接続された複数の分散型アプリケーションシステム105を含み得ることを示している。複数の分散型アプリケーションシステム105のそれぞれは、複数の分散型アプリケーションノード115(例えば、ワークステーション上で走るアプリケーション)、レプリケーター120、及びリポジトリレプリカ125を含んでもよい。各分散型アプリケーションシステム105のレプリケーター120は、WAN110、各々の分散型アプリケーションシステム105の分散型アプリケーションノード115、及び、各々の分散型アプリケーションシステム105のリポジトリレプリカ125の間に接続され得る。
【0031】
一実施の形態では、各リポジトリレプリカ125はコンカレント・バージョンズ・システム(CVS)のリポジトリである。CVSは、システムのバージョンを管理する周知のオープンソースコードである。CVSは、多くの他のシステムをバージョニングするソースコードと同様、複数のCVSクライアント(例えば、分散型アプリケーションノード115)が例えば通信制御プロトコル(TCP)上のCVSプロトコルを使って接続する中央サーバとして動作するようデザインされている。CVSサーバは、実行されるとき、クライアントコネクションごとにプロセスを分けて、各クライアントからのCVSリクエストを取り扱う。したがって、レプリケーター120とリポジトリレプリカ125は、CVSリポジトリの複数のレプリカを許容する。CVS情報リポジトリが一実施の形態に有用な情報リポジトリの一例である一方で、本開示の主題は、他のタイプの情報リポジトリの複製に有用である。データベースやファイルシステムは、そのような他のタイプの情報リポジトリの例である。したがって、実施の形態の有用性及び適用性は、特定のタイプの情報リポジトリに限定されない。
【0032】
以下で詳しく議論されるように、各レプリケーター120は、各々の分散型アプリケーションシステム105から他の分散型アプリケーションシステム105それぞれのリポジトリレプリカ125に情報更新を書き込むように設定されてもよい。各レプリケーター120は、CVSクライアント(すなわち、それぞれの分散型アプリケーションシステム105)と既定のCVSサーバ(すなわち、それぞれのリポジトリレプリカ125)との間でアプリケーションゲートウェイとして振舞う仲介者であってもよい。各レプリケーター120は、すべてのリポジトリレプリカ125が互いに同期した状態に留まることを保証するために、他の同等のレプリケーターと協調する。
【0033】
従来のソリューションとは異なり、マルチサイトコンピューターシステムアーキテクチャ100は、単一障害点として知られる中央トランザクション調整者に頼らない。マルチサイトコンピューターシステムアーキテクチャ100は、リアルタイムかつ能動能動(active-active)な複製に向けてユニークなアプローチを提供し、分散型アプリケーションシステムのすべてのCVSリポジトリレプリカに跨って1つの複製等価物、という原則に基づいて動作する。したがって、一実施の形態に基づくと、すべてのリポジトリレプリカは他のすべてのリポジトリレプリカとリアルタイムに同期し、したがって分散型アプリケーションシステムのすべてのノードにいるユーザ(例えば、同じコードベースからの情報に基づいて仕事をするプログラマー)は、常に、同じ情報ベースからの情報に基づいて仕事をしている。
【0034】
レプリケーター120とそれぞれのリポジトリレプリカ125の統合を通して、各リポジトリレプリカは、自身のトランザクション調整者(すなわち、各々のレプリケーター120)とともにWAN110上でアクティブなノードとなる。各分散型トランザクション調整者は、ローカルな更新を受け入れ、それらをリアルタイムに他のすべてのリポジトリレプリカ125に伝える。したがって、マルチサイトコンピューターシステムアーキテクチャ100内のすべてのユーザは、ロケーションに関わらず、同じレポジトリ情報(すなわち、単一のCVS情報リポジトリ)に基づいて効率的に仕事をしている。そのためにも、一実施の形態に基づくマルチサイトコンピューターシステムアーキテクチャは、グローバルに分散した開発チームの仕事をリアルタイムに同期する、費用効率が高く、フォールト・トレラントなソフトウェアコンフィグレーション管理(SCM)ソリューションである。
【0035】
ネットワークやサーバの障害が発生したとき、開発者は仕事を続けることができる。変更は、ローカルなレプリケーター120のトランザクションジャーナル内に記録される。トランザクションジャーナルは、機能において、データベースのリドゥーログに類似している。接続性が回復したとき、ローカルなレプリケーター120は、他の分散型アプリケーションシステム105のレプリケーター120に接触し、自身を最新の情報とするとともに、ネットワーク又はシステムがダウンしている間にローカルなトランザクションジャーナル内にキャプチャされた変更を適用する。リカバリは、CVS管理者の仲介なく、自動的に実行され得る。この自己回復能力は、データの損失がゼロであること、及び、開発時間が失われないことを保証し、障害復旧シナリオにおけるヒューマンエラーのリスクを除去する。
【0036】
本質的に同じリポジトリ情報に基づいて仕事をすることの利益は、開発が海外へ移転するときに開発手続きを変える必要がないこと、複数のサイトからの仕事が統合されるときに大きなビルドが完了するのを待つ間、遊んでいる必要がないこと、開発上の問題を早期に検出できること、及び、品質保証に割くリソースが小さくなること(例えば、冗長なリソースの利用を減らすこと)を含む。加えて、障害復旧は、統合された自己回復能力が障害回避を提供するので、問題とならない。システムがダウンしたときにも仕事が失われることはない。
【0037】
上に開示したように、一実施の形態に基づく複製状態マシンの実装は、そのような複製状態マシンの拡張性、信頼性、有用性、及びフォールトトレランスに有利な影響を与える。拡張性、信頼性、有用性、及びフォールトトレランスに有利な影響を与えることにより、本実施の形態は、マルチサイトコンピューターシステムアーキテクチャ内に複製状態マシンを実装するための実用的なアプローチを提供する。一実施の形態にしたがう複製状態マシンの実装では、以下の目的の全部又は一部が満足され得る:複数のコンピューターからなる分散型コンピューターシステムのノードが協調しながらそれらの状態を進化させられるようにすること、コンピューターネットワーク、コンピューター、又はコンピューターリソースの任意の障害や部分的な障害に関わらず、複数のコンピューターからなる分散型システムの整合性が保存されるようにすること、分散型アプリケーションノードからなる信頼性のあるシステムが、控えめな信頼性を有するコンポーネントから生成できるようにすること、同意プロトコルの衝突に関わらず、漸近的に1に近づく時間の関数としての確率で同意プロトコルの終了を保証すること、通常の動作状態の下での同意プロトコルの衝突を撲滅すること、同意プロトコルの効率を改善すること、複製状態マシンのメモリ及びディスクの使用を低減し、抑制すること、複製状態マシンによるネットワークリソースの使用を減らすこと、複製状態マシンによって実現可能なステート遷移のスループットを増大すること、複製状態マシンによって支配される分散型アプリケーションによるメモリ及びディスクリソースのより効率的な管理を可能にすること。
【0038】
図2に示されるように、一実施の形態に基づくマルチサイトコンピューター機能は、お互いに、かつ、ネットワークシステム210を通じてそれぞれのローカルアプリケーションノード205と情報のやり取りを行う複数の複製状態マシン200によって促進される。好ましくは、必須ではないが、各ローカルアプリケーションノード205は、分散型アプリケーションのそれであり、時間内の任意の時点において、提案の提案者若しくは提案の受領者として機能することとしてもよい。一実施の形態では、ネットワークシステム210は、複製状態マシン200の間に接続される広域ネットワーク(WAN)と、各複製状態マシン200と各々のローカルアプリケーションノード205との間に接続されるローカルエリアネットワーク(LAN)とを含み得る。例えば、各複製状態マシン200と各々のローカルアプリケーションノード205は、1つのマルチサイト共同コンピュータープロジェクトのための各々のサイトに位置する。ネットワークシステム210のLAN部分は、ローカル基準(すなわち、各複製状態マシン200と各々のローカルアプリケーションノード205との間)での情報の共有を促進し、ネットワークシステム210のWAN部分は、グローバル基準(すなわち、複製状態マシン200間)での情報の共有を促進する。LAN、WAN、又はこれらの両方は、一実施の形態に基づくネットワークシステムの構成要素である一方で、実施の形態はネットワークの特定の形態に限定されない。例えば、一実施の形態に基づくネットワークシステムの他の実施の形態は、自動車に埋め込まれたコンピューターを含むアドホックなネットワークシステム、データセンター内の複数のサブネットを含むネットワークシステム、データセンター内の1つのサブネットを含むネットワークシステムを含む。
【0039】
図3は、
図2に示される各複製状態マシン200の機能的な構成要素を示すブロック図である。各複製状態マシン200は、提案マネージャー220、固定提案ストレージ230、同意マネージャー240、同意ストア245、分散型ファイル転送プロトコル(DFTP)レイヤー250、衝突&バックオフタイマー260、ローカルシーケンサー270、グローバルシーケンサー280、及びストレージリクレーマー290(すなわち、固定ストレージのガベージコレクター)を含み得る。提案マネージャー220、固定提案ストレージ230、同意マネージャー240、同意ストア245、分散型ファイル転送プロトコル(DFTP)レイヤー250、衝突&バックオフタイマー260、ローカルシーケンサー270、グローバルシーケンサー280、及びストレージリクレーマー290は、それらの間の相互作用を可能にするために、互いの少なくとも一部分で相互に接続されている。以下の議論に見られるように、複製状態マシンの機能的な構成要素のそれぞれは、一実施の形態に基づき、有利な機能性をサポートする。
提案管理
【0040】
各ローカルアプリケーションノード205は、それぞれの複製状態マシン200に一連の提案を申し込む。それぞれのローカルノード6によって申し込まれた一連の提案は、それぞれのローカルノード205のローカルなシーケンスを構成し、このシーケンスは、各々の複製状態マシン200のローカルシーケンサー270内に維持され得る。各複製状態マシン200の提案マネージャー220は、各々の一連の提案を、それぞれに1つずつ設けられるグローバルな提案シーケンス内に加入させる。このグローバルな提案シーケンスは、各々の複製ステートマシン200のグローバルシーケンサ280内に維持され得る。グローバルな提案シーケンスは、次の性質を有する:各ローカルシーケンスの各提案は、それぞれのグローバルシーケンスの中で厳密に1回発生し、ローカルシーケンス内における任意の2つの提案の相対的な順序は、オプションで、それぞれのグローバルシーケンス内で保存され、すべてのローカルアプリケーションノード205に関連するグローバルシーケンス(ローカルな順序が保存されても、されなくても)は同一である。
【0041】
ローカルアプリケーションノード205のスレッドが各々の複製状態マシン200に対して提案(例えば、書き込みステップ)を申し込んだ場合、複製状態マシン200は、その提案にローカルな連続番号を割り当てる。複製状態マシン200はその後、その提案のための同意番号を決定する。以下の議論から明らかになるように、同意番号は、グローバルシーケンス内におけるそれぞれの提案の位置を決定する。複製状態マシン200はその後、自身の固定提案ストレージ230内に、その提案の記録を保存する。複製状態マシン200はその後、ローカルアプリケーションノードのスレッドの制御をローカルアプリケーションノードに返す。したがって、そのスレッドは、同意プロトコルが実行される間、アイドル状態ではなく、ローカルアプリケーションによる使用のために利用可能とされ得る。複製状態マシンはその後、同意マネージャー240を介して、その提案のための同意プロトコルを起動する。同意プロトコルが終了すると、複製状態マシン200は、同意プロトコルによって到達された同意と、提案中に含まれる提案された同意とを比較する。もし、同意マネージャー240によって到達された同意が提案のそれと同じであった場合、複製状態マシン200は、提案の処理を終了する。さもなければ、複製状態マシン200は、同意マネージャーによって到達された同意が提案のそれと同じになるまで、新しい同意番号を使用して、提案の同意を繰り返し試みる。同意の結論に達すると、各ローカルアプリケーションノード205は、提案に対して今同意されたものを、そのグローバルシーケンス内にキューイングする。その後、分散型アプリケーションの各ローカルアプリケーションノード205は、グローバルシーケンス内に含まれる提案をキューから取り出し、実行する。
【0042】
図4は、一実施の形態に基づく提案の実施の形態を示している。この提案を、ここでは提案300と称する。提案300は、提案者識別子320(すなわち、ローカルアプリケーションノードの識別子)、ローカル連続番号(LSN)330、グローバル連続番号(GSN)340、同意番号350、及び提案内容360を含み得る。好ましくは、必ずしも必要ではないが、各ローカルアプリケーションノードによって発行される提案は、提案300の構造を有する。
【0043】
図5は、一実施の形態に基づくローカルシーケンスの実施の形態を示している。このローカルシーケンスを、ここではローカルシーケンス400と称する。ローカルシーケンス400は、各々のローカルアプリケーションノード205のための提案それぞれの内容を含むことができる。より具体的には、そのようなコンテンツは、提案者識別子、ローカル連続番号(LSN)、グローバル連続番号(GSN)、同意番号、及び提案内容を含む。好ましくは、必ずしも必要ではないが、各複製状態マシン200に関連付けられたローカルシーケンスは、ローカルシーケンス400の構造を有する。
【0044】
図6は、一実施の形態に基づくグローバルシーケンスの実施の形態を示している。このグローバルシーケンスを、ここではグローバルシーケンス500と称する。グローバルシーケンスは、一連の提案のためのグローバルな連続番号と、ローカルシーケンスハンドルとを含むことができる。一実施の形態では、ローカルシーケンスハンドルは、それぞれのローカルシーケンス(すなわち、描画されているように、ローカルシーケンス400)へのポインタであってよい。他の実施の形態では、ローカルシーケンスハンドルは、ローカルシーケンスのテーブルへの鍵であってよい。好ましくは、必ずしも必要ではないが、各複製状態マシン200に関連付けられたグローバルシーケンスは、グローバルシーケンス500の構造を有する。
コンカレントな同意
【0045】
図2及び
図3に描画された複製状態マシン200は、一実施の形態に基づく複製状態マシンであり、提案者が提案を提出した順序をオプションで保存しつつ、一提案者からの複数の提案に対する同意がコンカレントに進行することを許容するコンカレント同意メカニズムを含んでいる。一方、従来の複製状態マシンは、前の提案が同意に達した後、提案の同意を試みる。この従来の複製状態マシンの手法は、従来の複製状態マシンが提案のローカルな順序を保存することを保証する。したがって、もし提案者が初めに提案Aを提案し、その後に提案Bを提案したとすると、従来の複製状態マシンは、提案Bと同時又は提案Bの前に、提案Aが同意されることを保証する。しかしながら、一実施の形態に基づくバックオフメカニズムを実行する複製状態マシンとは異なり、この従来の手法は、提案Aが同意に達するまで提案Bの同意が起動されないことから、従来の複製状態マシンの動作を減速させる。
【0046】
一実施の形態の側面を参照すると、グローバルシーケンス内の各オブジェクト(すなわち、エントリ)は、連続してナンバリングされる。グローバルシーケンス内の1つのオブジェクトに関連付けられる番号は、そのグローバルシーケンス内の他のオブジェクトに対するそれ自身の位置を識別する。例えば、5とナンバリングされたオブジェクトは、6とナンバリングされたオブジェクトに先行し、かつ、4とナンバリングされたオブジェクトに先行される。さらに、グローバルシーケンス内の各オブジェクトは、
図5に示されるローカルシーケンスハンドル400のような、ローカルシーケンスへのハンドルを含む。もし、アプリケーションが提出順(すなわち、ソースから発行された順序)の保存を要求しなければ、グローバルシーケンス内の各オブジェクトは、提案それ自身を含む。このケースでは、提案は、ローカルシーケンスを介して間接的に、というよりむしろ、グローバルシーケンスから直接取得され得る。いくつかの可能な実施の形態のひとつでは、ローカルシーケンスに対するハンドルは、ローカルシーケンスに対するポインタであってよい。他の実施の形態では、ローカルシーケンスに対するハンドルは、ローカルシーケンスのテーブルへの鍵であってよい。
【0047】
図2及び
図3を参照すると、各ローカルシーケンスは、複製状態マシン200の提案者の一人によって提案された複製状態マシン200の提案を含む。複製状態マシン200の各ローカルシーケンスノード205は、それぞれの複製状態マシン200に関連付けられた提案者それぞれのローカルシーケンスを維持する。ローカルシーケンス内のオブジェクトは、連続的にナンバリングされる。ローカルシーケンス内のオブジェクトに関連付けられた番号は、そのローカルシーケンス内の他のオブジェクトに対するそれ自身の位置を識別する。例えば、5とナンバリングされたオブジェクトは、6とナンバリングされたオブジェクトに先行し、かつ、4とナンバリングされたオブジェクトに先行される。ローカルシーケンス内の各オブジェクトは、複製状態マシン200の提案を含む。
【0048】
複製状態マシン200の各ローカルアプリケーションノード205では、提案に対して同意に到達した後、その提案がグローバルシーケンスに加えられ得る。提案者の識別(例えば、
図4の提案者識別子320)は、ローカルシーケンスのテーブルから1つのローカルシーケンスを探すための鍵として用いられ得る。提案のローカル連続番号(LSN)は、ローカルシーケンス内における提案の位置を決定する。提案はその後、ローカルシーケンス内の決定された位置に挿入され得る。提案の同意番号(例えば、
図4の同意番号350)は、グローバルシーケンス内の提案の位置を決定する。ローカルシーケンスに対するハンドルは、グローバルシーケンス内の決定された位置に(すなわち、同意番号に基づいて)挿入され得る。GSNは、以下の段落で説明するように、提案が消費されるとき、その提案のグローバルシーケンス内の実際の位置を指定することを目的として、その提案に関連付けるためのオプショナルなブックキーピングフィールドである。
【0049】
一実施の形態では、専用のスレッドがグローバルシーケンスを消費する。そのスレッドは、グローバルシーケンスの次の位置が追加されるまで待機する。次に、そのスレッドは、グローバルシーケンスのその位置にストアされているローカルシーケンスを復元する。その後、そのスレッドは、ローカルシーケンスの次の位置が追加されるまで待機する。そのスレッドはその後、ローカルシーケンスのその位置にストアされている複製状態マシン200の提案を復元する。当業者は、提案は必ずしも同意番号の順序に基づいて復元されなくてもよいが、すべてのアプリケーションノードで全く同じ順序で復元されることを理解するであろう。この復元順序は、GSNフィールドにブックキーピングの便のために記録されてもよいが、さもなければ、複製状態マシン200の動作にとって本質的ではない。例えば、アプリケーションノード(A)がその最初の2つの提案を複製状態マシンに提出すると仮定する(LSN1及びLSN2)。さらに、複製状態マシンが、LSN1の同意に到達する前に、期せずしてLSN2の同意に到達したと仮定する。それゆえ、A:1(アプリケーションノードAからのLSN1)の同意番号が27となり、LSN2の同意番号が26となったとする(すなわち、他のアプリケーションノードから全部で25の先行する提案の同意があり、A:1とA:2の間には他のアプリケーションノードからの提案の同意は介在していなかったとする)。上記の方法を用いると、A:1は位置26、A:2は位置27のグローバルシーケンスからそれぞれ復元される。このように、GSNはLSNの順序を順守するが、同意番号は必ずしもそうする必要はない。この手法は、一実施の形態に基づく複製状態マシンが同時に複数の同意を処理することを可能にする。
【0050】
スレッドはその後、複製状態マシン200の提案を適用する。一実施の形態では、提案のアプリケーションは、複製状態マシン200のアプリケーションによって登録されたコールバック機能を起動することによって達成され得る。
バックオフと衝突の回避
【0051】
一実施の形態に基づく複製状態マシン(例えば、複製状態マシン200)は、同意マネージャー240の同意プロトコルにおいて提案者のプリエンプトが繰り返されることを回避するためのバックオフメカニズムを含み得る。一方、従来型の複製状態マシンは、第1の提案者によって起動されたラウンドが第2の提案者によって起動されたラウンドに優先するとき、優先された提案者が、先行者のそれよりも高いラウンド番号で直ちに新しいラウンドを起動することを許容する。好ましくないことに、この従来型の手法は、ラウンドのプリエンプトが繰り返されることの土台を作り、同意プロトコルを受け入れがたいほど長時間にわたってバタつかせる。
【0052】
一実施の形態に基づくバックオフの促進では、ラウンドがプリエンプトされるとき、提案者はプリエンプト遅延の継続時間を計算する。提案者はその後、次のラウンドを起動するための従来のアルゴリズムに従い、次のラウンドを起動する前に、計算した継続時間だけ待機する。
【0053】
一実施の形態に基づく衝突回避の促進では、第2の提案者によってラウンドが起動されたことを第1の提案者が感知するとき、第1の提案者は進行中ラウンド遅延期間の継続時間を計算する。第1の提案者は、計算した遅延の継続時間が満了するまで、ラウンドを起動することを自制する。
【0054】
一実施の形態では、与えられる遅延は、ラウンドの連続するプリエンプトとともに指数関数的に増加する。加えて、遅延はランダムに決定されることが好ましい。
【0055】
与えられる遅延の継続時間を決定するために使うことのできる方法は、いくつか存在する。実行可能な方法のインスピレーションのひとつの源は、ノンスイッチドイーサネットのための搬送波感知多重アクセス/衝突検出(CSMA/CD)に関する文献である。CSMA/CDプロトコルは、2つのネットワーク装置が同時にデータチャネルを使おうと試みるときに、ネットワーク装置がどのように応答するかを決定するルールのセットである。
【0056】
いくつかの可能な実施の形態では、計算された遅延の継続時間は、次の方法により決定される。複製状態マシン200を展開する管理者は、4つの数値を設定する。この実施の形態の描写の目的のために、これらの値はA,U,R,及びXと称される。効果的な構成では、値Rは0より大きくかつ1より小さく、値Aは0より大きく、値Xは1より大きく、値Uは値Aより大きい。同意プロトコルの実行時間は推定され得る。同意プロトコルの実行時間のいくつかの可能な推定量のひとつは、同意プロトコルの過去の実行時間の移動平均である。この議論の目的のために、この推定された値はEと称される。値Mは、AにUを乗ずることによって得られる値である。2つの値A,Eのうちの大きい方が選択される。この議論の目的のために、この選択された値はFと称される。値Cは、FにXを乗ずることによって得られる値である。ランダム値Vは、0とRのC倍の間の一様分布から生成される。もしCがMより大きければ、VをCから減ずることによってDが算出される。さもなければ、VをCに足すことによってDが算出される。
【0057】
計算された値Dは、進行中ラウンド遅延として用いることができる。また、同意プロトコルのインスタンスの実行中にローカルアプリケーションノード205が初めてプリエンプトされるときには、プリエンプト遅延としても用いることができる。同意プロトコルのインスタンスの実行中にローカルアプリケーションノード205が2回目以降にプリエンプトされるときには、上記方法の中で値Aの代わりに古い値Dを用いて新しい値Dが算出される。新しい値Dは、プリエンプト遅延として用いられ得る。
固定ストレージの再利用
【0058】
一実施の形態に基づく複製状態マシン(例えば、複製状態マシン200)は、フォールトトレランスと高い有用性を保証するために使用された固定ストレージを再利用する。
図2及び
図3を参照すると、ストレージリクレーマー290は、複製状態マシン200が提案された提案のグローバルシーケンス内における位置を決定し、すべてのアプリケーションノードにこの位置が通知された後、提案ストア230から、その提案された提案の記録を消去する。各ローカルアプリケーションノード205は、自身のグローバルシーケンスのコピーの中に連続して追加された位置のうち最も高位にあるものを示すメッセージを、定期的な間隔で、他のローカルノード205のそれぞれに対して送る。ストレージリクレーマー290は、定期的な間隔で、もはやローカルアプリケーションノードによって要求されることのない、連続して追加された位置のうち最も高位のまでのすべての同意を、グローバルシーケンスのすべてのコピーから消去する。このようにして、各複製状態マシン200は固定ストレージを再利用する。
弱い予約
【0059】
一実施の形態に基づく複製状態マシン(例えば、複製状態マシン200)は、通常の動作状態の下で提案者のプリエンプトを終了させるために、弱い予約のメカニズムをオプションで提供する。
図2及び
図3を参照すると、それぞれの複製状態マシン200をドライブする各提案者は、連続的にナンバリングされる。例えば、もし3人の提案者がいるとすると、彼らは1,2,3とナンバリングされる。提案者の番号は、各々の複製状態マシン200のどの提案を、対応する提案者がドライブすることになるのかを決定する。もし提案者の番号がMであり、N人の提案者がいるとすると、その提案者は、M+(k×N)(すなわち、M足すk掛けるN。ただし、kは0以上のすべての整数値)とナンバリングされた複数の提案をドライブすることになる。分配されたアプリケーションシステムのすべての提案者が応答可能でないときにもそのようなシステムが進展できるようにするために、もし複製状態マシンの提案が適時に決定されないとするならば、それぞれの複製状態マシン200に関連付けられた任意の提案者は、その提案のために「ノーオペレーション」(すなわちno−op)を提案することができる。この最適化を、分配されたアプリケーションに対して透明なものとするため、複製状態マシン200は、分配されたアプリケーションのno−op提案を配信しない。ノーオペレーションは、一般的には、何の効果も持たず、特に、関連する複製状態マシンの状態を変化させない計算ステップである。
区別されかつ公平なラウンド番号
【0060】
一実施の形態に基づく複製状態マシンは、複数の競合する提案者の中の一人が、競合する提案者と同じラウンド番号を使っているときにプリエンプトされないことを保証する。一方、従来型の複製状態マシンは、複数の競合する提案者の中の一人が、競合する提案者と同じラウンド番号を使っているときにプリエンプトされないことを保証するメカニズムを含まない。そのような従来型の複製状態マシンにおけるラウンド番号は単調な値であり得、そのような値は、すべての提案者がプリエンプトされることを可能にする。
【0061】
一実施の形態では、ラウンド番号は、単調成分に加えて区別成分を含むことができる。一実施の形態では、小さな区別できる整数が各複製状態マシン200の各提案者に関連付けられてもよい。区別できる整数は、最も高い区別成分を有する提案者の有利となるように衝突を解決する役割を果たす。ラウンド番号は、単調成分及び区別成分に加えて、ランダム成分を含む。この種のラウンド番号は、複数の競合する提案者の中の一人が、競合する提案のために同じラウンド番号を使っているときにプリエンプトされないことを保証し、衝突解決が提案者の中の特定の一人を永久に優遇又は冷遇しないことを(すなわち、ラウンド番号のランダム成分を介して)保証する。
【0062】
2つのラウンド番号を比較するメカニズムは、次のように動作する。より大きい単調成分を有するラウンド番号は、他よりも大きいとされる。もし2つのラウンド番号の単調成分が同じであるなら、より大きいランダム成分を有するラウンド番号が他よりも大きいとされる。これら2つの比較によってランダム番号が区別されない場合には、より大きい区別成分を有するラウンド番号が他よりも大きいとされる。これら3つの比較によってもランダム番号が区別されない場合には、2つのラウンド番号は等しいとされる。
効率的な固定ストレージの再利用
【0063】
図3及び
図4を参照すると、複製状態マシン200の提案固定ストア230内の記録は、複数のグループによって構成されている。各グループは、提案された提案の記録を、連続的なローカル連続番号330とともに記憶する。例えば、ローカル連続番号#1〜#10000のレコードはグループ1に属し、ローカル連続番号#10001〜#20000のレコードはグループ2に属する、などである。
【0064】
永続的な提案のグループを参照すると、各グループは、グループ全体によって使用されるストレージリソースが効率的に再利用されるような方法で記憶され得る。例えば、ファイルベースのストレージシステムでは、各グループはそれ自身のファイル又はファイルのセットを使用する。
【0065】
さらに永続的な提案のグループを参照すると、ストレージリクレーマー290は個々のレコードの削除リクエストを監視しているが、リクエストの時点では個々のレコードを削除しない。個々のレコードの累積した削除リクエストがグループ内のすべてのレコードを含むとき、ストレージリクレーマー290は、そのグループで使用されていたストレージリソースを効率的に再利用する。例えば、ファイルベースのストレージシステムでは、そのグループによって使われていたファイル又はファイルセットが削除され得る。
【0066】
複製状態マシン200の同意ストア245内のレコードは、複数のグループによって構成されている。各グループは、同意プロトコルのインスタンスの記録を、連続的な同意インスタンス番号150とともに記憶する。例えば、同意インスタンス番号#1〜#10000のレコードはグループ1に属し、同意インスタンス番号#10001〜#20000のレコードはグループ2に属する、などである。
【0067】
同意プロトコルのインスタンスのグループを参照すると、各グループは、グループ全体によって使用されるストレージリソースが効率的に再利用されるような方法で記憶され得る。例えば、ファイルベースのストレージシステムでは、各グループはそれ自身のファイル又はファイルのセットを使用する。
【0068】
さらに同意プロトコルのインスタンスのグループを参照すると、ストレージリクレーマー290は個々のレコードの削除リクエストを監視しているが、リクエストの時点では個々のレコードを削除しない。個々のレコードの累積した削除リクエストがグループ内のすべてのレコードを含むとき、ストレージリクレーマー290は、そのグループで使用されていたストレージリソースを効率的に再利用する。例えば、ファイルベースのストレージシステムでは、そのグループによって使われていたファイル又はファイルセットが削除され得る。
小さな提案を効率的に利用すること
【0069】
図3及び
図4を参照すると、一実施の形態に基づく複製状態マシン(例えば、複製状態マシン200)は、複製状態マシン200に対して申し込まれた複数の提案の、複数のローカルアプリケーションノード205のうちの提案側から複数のローカルアプリケーションノード205のうちの受け取り側に対する送信を、バッチ処理により行う。このような実務は、複製状態マシンの提案のサイズが、複製状態マシンによって使用される下層のパケットベース通信プロトコルにおけるデータのパケットのサイズに比べて小さいという状況の下では、一実施の形態に基づく複製状態マシンが効率的にパケットベース通信プロトコルを利用することを可能にする。
【0070】
一実施の形態では、そのような提案の束(batch)は、同意プロトコルによって単一の提案として取り扱われ得る。この態様によれば、各ローカルノード205において、それぞれの複製状態マシン200が提案された提案の第1の束の同意番号350を決定する一方、それぞれのローカルアプリケーションノード205で提案された提案は、提案の第2の束に蓄積され得る。第1の束の同意番号150が決定されると、複製状態マシン200は第2の束の同意インスタンス番号350の決定を起動し、ローカルアプリケーションノード205で提案された提案は第3の束に蓄積される、というように処理が続けられる。
大きな提案110を効率的に扱うこと
【0071】
大きな提案のためのネットワーク帯域幅を削減するために行えることは、一実施の形態に基づく複製状態マシンが短い提案id(例えば、16バイトのグローバルにユニークなid)によって各提案をタグ付けできるようにすること、及び、ファイルベースの提案として参照されるフォーマットに提案をエンコードすること、又はこれらのうちのいずれか一方である。一方、大きな提案は、そのような大きな提案は従来型の複製状態マシンの同意プロトコルによってドライブされるときに本質的に複数回にわたって送信される、という問題を従来型の複製状態マシンに対して引き起こす。そのような複数回の送信は、大きい提案のサイズが数メガバイトやギガバイトにさえなり得ることから、好ましくない。
【0072】
大きな提案を送信するとき、一実施の形態では、一旦実際の提案がネットワークのエンドポイントまで成功裏に送信された場合には、短い提案の識別子のみが送られる。ファイルベースの提案は、ファイル内の実際の提案内容がディスク上に保持されるのに対し、本質的に、メモリ上のファイルポインタを有している。そのようなファイルベースの提案をネットワーク上に運ぶとき、一実施の形態に基づく複製状態マシンは、効率のよいフォールトトレラントなファイルストリーミングプロトコルを使用する。そのような輸送は、複製状態マシン200のDFTPレイヤー250によって扱われる(
図3)。DFTPレイヤー250は、対ファイルベースの提案とネットワークのエンドポイントを監視する。DFTPレイヤー250は、ファイルベースのプロトコルがネットワークのエンドポイントまで一度だけ送信されることを保証する。部分的な転送につながる失敗イベントが発生した場合には、ファイルベースの提案は、そのファイルの要求された部分を有する任意の利用可能なエンドポイントから読み出される。
【0073】
一実施の形態では、DFTPの実装は、ネイティブな送信ファイル又はメモリにマップされたファイルを、もしオペレーティングシステムがこれらの特徴をサポートするならば、効率的なファイル転送のために使用する。もしファイルを要求するノードがオリジナルな発信者に到達できない場合には、そのノードは代わりの発信者、すなわちそのファイルをたまたま持っているシステム内の他のノードを探す。TCPプロトコル上で動作するとき、DFTPは、高いレイテンシの対象ともなる高帯域コネクションの最適なアドバンテージを生かすため、複数のTCPコネクションを利用する。加えて、高いレイテンシの対象ともなる高帯域コネクションの最適なアドバンテージを生かすため、TCPプロトコルのウインドウサイズが適切に及び/又は望ましく変更され得る。
【0074】
情報リポジトリの拡張可能かつ能動的な複製の議論に移る。一実施の形態では、一実施の形態に基づくそのような複製の実装は、上述した複製状態マシンを利用する。より具体的には、一実施の形態に基づくそのような複製を提供することは、そのような複製状態マシンの拡張性、信頼性、及びフォールトトレランスに良い影響を与える。したがって、一実施の形態に基づく複製状態マシンの実行は、分散型コンピューターシステムアーキテクチャの中でそのような複製に良い影響を与える。一実施の形態による情報リポジトリの複製を実行する中で、以下の目的の全部又は一部が満たされるであろう:CVSリポジトリ、データベース、又は一般的な任意の情報リポジトリの複製を可能にすること、情報リポジトリの複製の、改変を含む同時利用を許容すること、レプリケーション基盤内で使用されるコンピューターネットワークの本質的に任意の障害又は部分的な障害にも関わらず、複製の首尾一貫性を保つこと、複製に関連するコンピューター又はコンピューター資源の本質的に任意の障害又は部分的な障害にも関わらず、複製の首尾一貫性を保つこと、上記した種類の重要な障害にも関わらず、情報リポジトリの連続的な有用性を保証すること、複製が互いにどれだけ離れているか(例えば、異なる大陸上)、又はどれだけ近いか(例えば、同じデータセンター内、さらには同じラック内)、という点で制約がないように複製の地理的な配置を許容すること、協働している情報リポジトリのすべてのレプリカがレポジトリの1つのインスタンスによって処理され得る量よりも高い負荷を処理できるようにすること、レプリカのワンコピーエクイバレンス(one-copy-equivalence)を維持すること、システム内に単一障害点を引き起こすことなく情報リポジトリの複製を可能にすること、情報リポジトリの実装を変更することなく情報リポジトリの複製を可能にすること、情報リポジトリのクライアントの実装を変更することなく情報リポジトリの複製を可能にすること、CVSリポジトリのクライアントに対し、レプリカのクォーラム(quorum)をローテーションすることを通じて、連結されたローカルなCVSリポジトリの応答時間を提供すること、CVSリポジトリのクライアントと、遠く離れたCVSリポジトリとの間でのネットワーク通信を、広域ネットワークの約3倍低減すること(例えば、約4.5ラウンドトリップに対して約1.5ラウンドトリップ)、機能しなくなった複製の遠隔復旧を、管理者の仲介を要求することなく自動的に行えるようにすること、そして、管理者の仲介を要求することなく自動的に、確実にすべての複製の分散状態のクリーンナップを行うこと。
【0075】
図7を参照すると、一実施の形態に基づくレプリケーター120の一実施の形態が示されており、ここではレプリケーター600として参照される。レプリケーター600は、レプリケータークライアントインターフェイス610、プレクオリファイアー620、複製状態マシン630、スケジューラー640、レプリケーターリポジトリインターフェイス650、結果ハンドラ660、及び管理者コンソール670を含む複数の機能的なモジュールからなる。レプリケータークライアントインターフェイス610、プレクオリファイアー620、複製状態マシン630、スケジューラー640、レプリケーターリポジトリインターフェイス650、結果ハンドラ660、及び管理者コンソール670はそれぞれ、これらの間の相互作用を可能にするために少なくとも他のモジュールの一部と互いに接続されている。
図2〜
図6を参照して機能的に議論された複製状態マシン200は、レプリケーター600の複製状態マシン630の一例である。したがって、複製状態マシン630は、信頼性があり、有用であり、拡張性があり、フォールトトレラントである。
【0076】
図8は、一実施の形態に基づくマルチサイトコンピューターアーキテクチャー内のレプリケーター600の配置の実施の形態を示している。マルチサイトコンピューターアーキテクチャーは、複数の分散型アプリケーションシステム601を含み得る。各分散型アプリケーションシステム601は、複数のクライアント680、レプリケーター600、リポジトリクライアントインターフェイス690、リポジトリ695(すなわち、情報リポジトリ)、及びネットワーク699を含み得る。ネットワーク699は、一般的に複数の分散型アプリケーションシステム601のうちの任意のひとつの構成要素である必要はないが、各分散型アプリケーションシステム601のクライアント680とそれぞれのレプリケーター600の間、及び、各分散型アプリケーションシステム601のリポジトリクライアントインターフェイス690とそれぞれのレプリケーター600の間に接続されていてよく、そうすることによって、各分散型アプリケーションシステム601のクライアント680、レプリケーター600、リポジトリ695の相互作用を可能にするために、これらを相互に接続することが可能になる。ネットワークはまた、すべての分散型アプリケーションシステム601のレプリケーター600の間に接続されていてもよく、そうすることによって、すべての分散型アプリケーションシステム601のレプリケーター600の間で相互作用が可能になる。複数のネットワーク699は互いに分離されていてもよいが、そうである必要はない。例えば、同じネットワークによって、上で開示した3つの役割のすべてが満たされ得る。
【0077】
図8に示すように、複数のリポジトリ695(すなわち、それぞれリポジトリ695を含む複数の分散型アプリケーションシステム601のシステム要素)それぞれの「近く」には、3つのクライアント680がある。近くということにより、複数のリポジトリ690の中の特定のひとつの近くにある複数のクライアント680の中の特定のひとつは、複数のリポジトリ690の中のその特定のひとつにアクセスすることを選ぶであろうということが意味される。或いは、複数のクライアント680の中のその特定のひとつは、任意の分散型アプリケーションシステム601の中のそのリポジトリ695に潜在的にアクセスすることがあり得る。
【0078】
一実施の形態に基づく分散型コンピューターシステムのオペレーターは、クライアント680のユーザと、分散型アプリケーションシステム601の一人又は複数人の管理者を含む。クライアント680のユーザは、クライアントユーザ用マニュアルの指示に従う。実施の形態の多くの有利な側面はユーザに対してトランスペアレントであり得るので、ユーザは、一実施の形態に基づくレプリケーターを使っているという事実に気付かない可能性がある。管理者は、レポジトリ695自身を管理する標準的なタスクに加え、必要に応じて、そして、もしオペレーションのために必要であれば、適切にネットワークを設定するであろう。
【0079】
各分散型アプリケーションシステム601の複製状態マシン630は、ネットワーク699を介して互いに通信を行う。各レプリケーターリポジトリインターフェイス650は、ネットワーク699を通じて、それぞれの分散型アプリケーションシステム601のレポジトリ695と相互作用する。クライアント680は、ネットワーク699を通じて、レプリケータークライアントインターフェイス610と相互作用する。オプションで、特定のクライアント680を含む特定の分散型アプリケーションシステム601が、特定の時点で、要求された機能を提供するために利用できない場合に、その特定の分散型アプリケーションシステム601のその特定のクライアント680が他の分散型アプリケーションシステム601のいずれかにフェイルオーバーすることを可能にするために、例えばシスコシステムズディレクターのような製品を使用することも可能である。
【0080】
図7及び
図8を参照すると、レプリケータークライアントインターフェイス610は、ターゲットであるリポジトリ695に関連する複数のクライアント680の中の特定のひとつ(すなわち、特定のクライアント680)とのインターフェイスを司る。レプリケータークライアントインターフェイス610は、特定のクライアント680によってネットワーク699上に発行されたコマンドを再構成し、そのコマンドをプレクオリファイアー620に配信する。プレクオリファイアー620はレプリケーター600の効率的なオペレーションを可能にするが、レプリケーター600の有用かつ有利なオペレーションに必須というわけではない。
【0081】
各コマンドのために、プレクオリファイアー620はオプションで、そのコマンドが失敗する運命にあるか否かを決定し、そしてもしそうであれば、適切なエラーメッセージ又はエラー状態が上記特定のクライアント680に返されることを決定する。もしそうであれば、そのエラーメッセージ又はエラー状態はレプリケータークライアントインターフェイス610に返送されることができ、レプリケータークライアントインターフェイス610はそのエラーメッセージ又はエラー状態は上記特定のクライアント680に配信する。それ以来、そのコマンドは、どの他のレプリケーター600によっても処理されないかもしれない。
【0082】
各コマンドのために、プレクオリファイアー620はオプションで、そのコマンドが複製状態マシン630、又は、複製状態マシン630とスケジューラー640の両方を迂回できるか否かを決定する。もしプレクオリファイアー620が複製状態マシン630は迂回され得ると決定しなかったならば、そのコマンドは複製状態マシン630に配信され得る。複製状態マシン630は、自身と、分散型アプリケーションシステム601の他の関連するレプリケーター600のそれぞれにある仲間の複製状態マシン630とに提出されたすべてのコマンドをコレート(collate)する。このオペレーションのシーケンスは、すべての分散型アプリケーションシステム601において同一であることが保証されてもよい。複数の分散型アプリケーションシステム601のそれぞれにおいて、それぞれの複製状態マシン630は、上記のようにしてコレートされたコマンドを、順番に、それぞれのスケジューラー640に対して配信する。
【0083】
スケジューラー640は、それに対して配信されたコマンドに対して依存状態分析を行い、なおもワンコピーシリアライザビリティ(one-copy Serializability)を保証するウィーケストパーシャルオーダリング(the weakest partial ordering)を決定する。そのような依存状態分析及びワンコピーシリアライザビリティは、「データベースシステムにおける同時制御及びリカバリ(Concurrent Control & Recovery in Database System)」とのタイトルが付けられたウエズリー・アディソン(Wesley Addison)の先行技術文献に開示されているとともに、P.ベルシュタイン(P.Berstein)による参考図書に公表されている。スケジューラー640はその後、構築された半順序(partial order)によって許可されると同時に、さもなければ連続的に、コマンドをレプリケーターリポジトリインターフェイス650に配信する。
【0084】
レプリケーターリポジトリインターフェイス650は、コマンドをリポジトリ695に配信する。それに応じて、3つの結果のうちのひとつが起きる。その後、レプリケーターリポジトリインターフェイス650は、起きている結果を結果ハンドラ660に配信する。
【0085】
上記3つの結果のうちの一つ目は、リポジトリ695がコマンドに対する応答を返すことを含み得る。この応答は、コマンドの実行中に何もおかしくならなかったことを示す結果、状態、又はその両方を含む。もしコマンドの起源がローカルにあれば、結果ハンドラ660はその応答をレプリケータークライアントインターフェイス610に配信し、レプリケータークライアントインターフェイス610はその応答をクライアント680に配信する。もしコマンドの起源が他の分散型アプリケーションシステム601のレプリケーターにあれば、好ましくは、応答は廃棄される。
【0086】
上記3つの結果のうちの二つ目は、リポジトリ695がエラー状態を返すことを含み得る。結果ハンドラ660は、そのエラー状態が、リポジトリ695内の決定論的なエラーであるか否か(すなわち、他の分散型アプリケーションシステム601のそれぞれで同じ又は同等のエラーが発生するか否か)を決定する。もしエラーの決定が曖昧であれば、結果ハンドラ660は、そのエラーと、他の分散型アプリケーションシステム601での結果との比較を試みる。もしこのことが曖昧さを解消せず、又は、もしエラーが明確に決定論的なものでなければ、結果ハンドラ660は、レプリケーター600のオペレーションを中止し、管理者コンソール670を通じて(すなわち、管理者コンソール670を介した通知の発行を通じて)オペレーターに通知する。
【0087】
レプリケーターがCVSレプリケーターである場合、以下にCVSに特有の機能性について議論するように、結果ハンドラによって、決定論的なエラーのフラグを立てるためにエラーパターンのリストが使用される。結果ハンドラ660は、応答ストリーム内で正規表現マッチを行うために、これらのパターンを使用する。
【0088】
上記3つの結果のうちの三つ目は、ハングアップした(すなわち、コマンドの実行から戻らない)リポジトリ695を含み得る。一実施の形態では、この結果は、上記3つの結果のうちの二つ目を参照して議論したように、まさに決定論的でないエラーのように取り扱われ得る。
【0089】
一実施の形態に基づくと、各レプリケーター600は二者択一的に構成され得る。代替の実施の形態では、レプリケーター600は、リポジトリ695のクライアント680の中に埋め込まれ、直接的にドライブされ得る。他の代替の実施の形態では、レプリケーター600は、リポジトリ695へのクライアントインターフェイス690の中に埋め込まれてもよい。他の代替の実施の形態では、レプリケーター600は、リポジトリ695の中に埋め込まれてもよい。他の代替の実施の形態では、レプリケーターのグローバルシーケンサーは、付随する堅牢性とサービスの質の妥協とともに、他の技術に基づいてもよい。そのような技術のいくつかの可能な例のうちのひとつは、グループコミュニケーションである。他の代替の実施の形態では、レプリケーター600は、付随する堅牢性とサービスの質の妥協とともに、1つ以上のリポジトリ695をドライブする。他の代替の実施の形態では、レプリケーター600のモジュールは、より粗いモジュールに統合されるか、より細かいモジュールに分かれるか、或いはこれらの両方である。他の代替の実施の形態では、ワンコピーシリアライザビリティからの逸脱に対する冗長的な予防手段として、各分散型アプリケーションシステム601のリポジトリ695に含まれる情報が他の分散型アプリケーションシステム601のそれぞれに対して首尾一貫した状態を維持することを保証するために、すべての分散型アプリケーションシステム601の応答が比較される。
【0090】
図7及び
図8を参照すると、上で議論された複数のリポジトリ695のひとつひとつは、コンカレント・バージョンズ・システム(CVS)リポジトリであってよく、クライアント680は対応してCVSクライアントであってよい。リポジトリ695がCVSリポジトリであり、クライアント680がCVSクライアントである場合、リポジトリ695及びクライアント680に関連付けられるインターフェイスは、CVS特有のインターフェイス(例えば、レプリケーターCVSインターフェイス、レプリケーターCVSリポジトリインターフェイス、及びリポジトリCVSクライアントインターフェイス)となる。さらに、一実施の形態に基づくと、レプリケーター600は、CVSリポジトリとの使用のために具体的にかつ特に構成された機能を有するように変更され得る。
【0091】
ここに開示されるレプリケータークライアントインターフェイス610は、CVSクライアントと、ターゲットとなるCVSリポジトリとをインターフェイスするために具体的に構成され得る。そのために、レプリケータークライアントインターフェイス610は、CVSクライアントから到着するバイトを、メモリマップされたファイルバッファに記憶させる。レプリケータークライアントインターフェイス610は、到着するバイトストリーム内に有効なコマンド文字列を見つけたとき、CVSコマンドの終端を検出する。そのような有効なコマンド文字列の限定されないリストは、限定されるものではないが、「Root、「Valid-responses」、「valid-requests」、「Max-dotdot」、「Static-directory」、「Sticky」、「Entry」、「Kopt」、「Checkin-time」、「Modified」、「Is-modified」、「UseUnchanged」、「Unchanged」、「Notify」、「Questionable」、「Argument」、「Argumentx」、「Global_option」、「Gzip-stream」、「wrapper-sendme-rcsOptions」、「Set」、「expand-modules」、「ci」、「co」、「update」、「diff」、「log」、「rlog」、「list」、「rlist」、「global-list-quiet」、「ls」、「add」、「remove」、「update-patches」、「gzip-file-contents」、「status」、「rdiff」、「tag」、「rtag」、「import」、「admin」、「export」、「history」、「release」、「watch-on」、「watch-off」、「watch-add」、「watch-remove」、「watchers」、「editors」、「init」、「annotate」、「rannotate」、「noop」、及び「version」を含み得る。
【0092】
その後、レプリケータークライアントインターフェイス610は、到着したCVSコマンドをリードコマンド又はライトコマンドに分類することを試みる。有効なライトコマンド文字列の限定されないリストは、限定されるものではないが、「ci」、「tag」、「rtag」、「admin」、「import」、「add」、「remove」、「watch-on」、「watch-off」、及び「init」を含み得る。有効なライトコマンド文字列のリストに含まれない有効なコマンド文字列内のすべてのコマンドは、有効なコマンド文字列のリストに対して、ここではリードコマンドであるとみなされる。
【0093】
リードコマンドは、ターゲットであるCVSリポジトリによる実行のために、CVSレプリケーターリポジトリインターフェイスに直接的に配信される。CVSライトコマンドは、オプションで、プレクオリファイアーモジュール20に配信される。
【0094】
それぞれのCVSライトコマンドのために、プレクオリファイアー20はオプションでCVSが失敗する運命にあるか否かを決定することができ、もしそうであるなら、CVSクライアントに対して返されるべき適切なエラーメッセージ又はエラー状態を決定する。失敗の検出は、CVSリポジトリから返される結果又は状態バイトストリームと、既知のエラーパターンとを照合することに基づいて行われ得る。既知のシステムエラーパターンの例は、限定されるものではないが、.*から.*へのシンボリックリンクを生成できない、rshを介してサーバを起動できない、.*をfstatできない、一時ファイルを生成するのに失敗した、生成のためにdbmファイル.*をオープンできない、.*に書き込めない、履歴ファイルをstatできない、履歴ファイル:.*をオープンできない、「.*」をオープンできない、マッピングのためのRCSアーカイブ.*をstatできなかった、比較のためにファイル.*をオープンできない、仮想メモリが使い果たされた、RCSファイル内でftelloできない、.*を読み出せない、補助的なグループのリストを得ることができない、コピーの後、ファイル.*をfsyncできない、.*をstatできない、カレントディレクトリを開けない、ディレクトリ.*をstatできない、.*に書き込めない、.*をreadlinkできない、パイプをクローズできない、ディレクトリ.*に変更できない、一時ファイルを生成できない、.*のためのファイル情報を取得できなかった、diff出力ファイル.*をオープンできなかった。.*を生成できない、ワーキングディレクトリを得ることができない、.*をlstatできない、diffのためのforkが.*に対して失敗した、.*のための情報を得ることができなかった、.*のためにモードを変更できない、.*のためにftelloできない、メッセージベリフィケーションが失敗した、一時ファイルをstatできない、メモリ不足、「.*」の中にディレクトリ「.*」を作ることができない、ログイン時にパスワードを読み込むのに失敗した、履歴ファイルをリードする際のエラー、作業ディレクトリを得ることができなかった、¥d+にclose−on−execフラグをセットできない、ロックファイル.*にライトする際のエラー、履歴ファイルに書き込めない、ファイル.*を.*にリネームできない、.*ディレクトリに変更できない、.*のためのファイル情報を得ることができない、コピーするために.*を生成できない、一時ファイル.*に書き込めない、.*をオープンできない、フローコントロールリードに失敗した、サーバへの書き込み、.*をクローズできない、ロックファイル「.*」をオープンできなかった、リードのために¥d+をfdopenできない、一時ファイル.*をクローズできない、要求されたチェックアウトディレクトリ「.*」にディレクトリを変更しない、ディレクトリ.*を生成できない、umaskの値が無効である、リードのために.*をオープンすることに失敗した、補助グループの番号を得られない、ライトのために.*をオープンできなかった、.*にchdirできなかった、.*をdiffしている間にforkが失敗した、.*をオープンできなかった、ライトのために¥d+をfdopenできない、.*へのライトが失敗した、一時ファイル.*を生成できない、.*をリードできなかった、コピーするためにファイル.*にライトできない、コピーするために.*をオープンできない、パイプをdup2できない、.*にgetwdできない、書き込むために.*をオープンできない、forkできない、サーバに書き込む際のエラー、.*にチェックインできなかった−forkが失敗した、比較のためにファイル.*をリードできない、.*に.*をリンクできない、.*をクローズする際のエラー、ネットコネクションをdupできない、データのリードに失敗した、.*をリードできない、.*をリムーブできない、「.*」にchdirできなかった、一時ファイル.*をオープンできない、.*をstatできなかった、ディレクトリ.*をオープンできない、fwriteに失敗した、一時ファイル.*を生成できない、一時ファイルをstatできない、.*をstatできない、「.*」をリードできない、.*をdiffする際のエラー、特別なファイル.*を生成できなかった、履歴ファイル:.*をクローズできない、RCSアーカイブ*にメモリをマップできなかった、ディレクトリ「.*」を生成できない、コピーのためにファイル.*をリードできない、パイプを生成できない、一時ファイル.*をオープンできない、ファイル.*を利ムーブできない、オープンできない、履歴ファイルの終端をシークできない、.*にchdirできない、レングスのリードに失敗した、.*を実行できない、.*をfdopenできない、及び、一時ファイルのサイズをfindできない、を含んでいた。既知のノンシステムエラーパターンの例は、限定されるものではないが、内部エラー:そのようなリポジトリはない、求められるバージョンが見つからなかった、getsocknameが失敗した、警告:RCSファイルをリライトしている間にferrorがセットされた、内部エラー:islinkがリードリンクをlikeしない、アクセスが否定された、このシステムの装置ファイルを比較できない、サーバ内部エラー:サーバアップデートにおける未処理ケース、.*信号を受信した、内部エラー:そのためのレビジョン情報はない、プロトコルエラー:重複モード、サーバ内部エラー:サーバアップデートにおけるモードなし、rcsbufキャッシュがオープンする:内部エラー、致命的エラー,アボートする、致命的エラー:イグジットする、.*:予期しないEOF、.*:混同したレビジョン番号、無効なrcsファイル、RCSファイル内のキーにEOF、CVS内のRCSファイルがいつもvで終わる、ハードリンク情報が失われた、.*:ファイルの終わりがリードできない、rcsbufオープン:内部エラー、メモリ不足、infopathをアロケートできない、.*からの予期しないdying gasp、内部エラー:不正な日付.*、ケルベロス認証が失敗した:.*、.*デルタ.*:予期しないEOF、RCSファイル.*を読み込む際に予期しないEOF、ERROR:スペース不足−中断、フローコントロールEOF、RCSファイル.*をfseekoできない、.*に対するチェックサムの失敗、CVS内部エラー:未知の状態¥d+、内部エラー:run_printに対する不正なアーギメント、このシステムに装置ファイルをコピーできない、.*をリードする際に予期しないファイルの終了、メモリ不足、内部エラー:解析されたRCSファイルがない、内部エラー:RCS_copydeltasにおける早すぎるEOF、内部エラー:未知の応答¥?のためのサポートをテストしている。RCSファイル.*内の値におけるEOF、PANIC¥*管理ファイルが失われている¥!、.*をリードする際に早すぎるファイルの終わり、RCSファイル.*内の値を探している間にEOF、継続できない、リードロックが失敗した−ギブアップする、.*をリードする際に予期しないEOF、「.*」をresurrectできない、セカンドパーティーによって削除されたRCSファイル、あなたの見かけのユーザ名.*がこのシステムには未知である、ファイル属性データベースの崩壊、.*内におけるタブの喪失、このシステムに装置ファイルをインポートできない、.*:未知の種類の特別なファイルをインポートできない、*:未知のタイプの特別なファイルをインポートできない、エラー:.*をmkdirできない−加えられなかった、リポジトリ「.*」にライトロックを生成できない、.*を生成できない、このシステムに特別なファイルを生成できない、.*を保存できない、このシステムに装置ファイルを保存できない、リポジトリファイル.*を解析する際のエラー、ファイルが破損している可能性があり、ファイル.*のためのファイル状態¥d+が未知である、を含んでいた。
【0095】
図7及び
図8を参照して議論したように、プレクオリファイアー620はそれぞれのコマンドについて、そのコマンドが失敗する運命にあり、かつ、複製状態マシン630及びスケジューラ640の両方をバイパスできる、ということを決定できる。CVSに特有の機能性のケースでは、もしプレクオリファイアー620が複製状態マシン630がバイパスされ得ると決定しなかったならば、そのコマンドはCVS提案コマンドに変換され得る。CVS提案コマンドは、実際のCVSコマンドバイトアレイの他、もしこのCVS提案コマンドがCVSリポジトリによって直接的に実行されたとしたらそのCVSリポジトリに取得させることになる書き込みロックを表すロックセットを含む。以下で議論するように、スケジューラ640はこのロックセットを利用する。
【0096】
CVS提案コマンドは、複製状態マシン630に対して配信され得る。複製状態マシン630は、自身及び、他の複数のレプリケーターのそれぞれにある自身の仲間である複製状態マシン630に提出されたすべてのコマンドを、1つのシーケンスにコレートする。このシーケンスは、すべての複製で同一であることが保証される。分散型アプリケーションシステム601のそれぞれにおいて、複製状態マシン630は、上記のようにしてコレートされたコマンドを、順番に、スケジューラ640に対して配信する。
【0097】
スケジューラ640は、自身に対して配信されたコマンドに対して依存状態分析を行い、なおもワンコピーシリアライザビリティ(one-copy Serializability)を保証するウィーケストパーシャルオーダリング(the weakest partial ordering)を決定する。スケジューラ640は、構築された半順序(partial order)によって許可されると同時に、さもなければ連続的に、コマンドをCVSレプリケーターリポジトリインターフェイスに配信する。
【0098】
一実施の形態に基づくと、依存状態分析は、ロックの衝突をテストすることに基づいて行われ得る。スケジューラに対して提出される各CVS提案コマンドは、ロックセットを含む。スケジューラーは、そのロックセットが他のコマンドのロックセットと衝突しない場合にのみ、コマンドがCVSリポジトリに配信されることを保証する。もし衝突が検出されたら、そのコマンドはキューに待機し、ロックセット内のすべてのロックが衝突なしで得られるときより後の時点に予定される。
メンバーシップ
【0099】
複製状態マシンをホストするプロセスの分散型システムでは、状態マシンの動作に関与する処理のコレクションに対する状態マシンの関連性、すなわちメンバーシップを変更する能力を有することが望ましい。例えば、メンバーシップ変更の一例は、Paxosアルゴリズム(ランポート,L.(Lamport, L.):パートタイム議会(The Part-Time Parliament), コンピュータシステムにおけるACMトランザクション16,2(ACM Transactions on Computer Systems 16, 2)、(1998年5月)、133−169)の実装内に見られる。そこでは、恒久的にオフラインとされて閉鎖される、若しくは、より大きなフォールトトレランス又はスループットを実現するためにシステムに新たなプロセスが追加される、というようにプロセスがシステムから除去されるという状況をハンドリングするために、提案者(メンバーシップに対する提案を行うプロセス)、受領者(提案がメンバーシップによって同意されるべきか否かを投票するプロセス)、学習者(作成された同意を知るメンバーシップ内のプロセス)のセットが交代され又は変更され得る。
【0100】
図9は、一実施の形態による、分散型コンピューターシステム内にノードのメンバーシップを展開する方法の一側面を示している。
図9に示されるように、一実施の形態によれば、1つのタスク、すなわちクリエイトメンバーシップタスク(CreateMembershipTask)がノードの既存ネットワーク(すなわち、1つ以上の分散型コンピューターノード)に誘導された開始ノードによって起動され得る。このタスクは、開始ノードが知っているコンピューターノードのセットからメンバーシップを生成するために使用され得る。一実施の形態によれば、これは、以下の手続きを使用して達成され得る。
役割:
【0101】
一実施の形態によれば、クリエイトメンバーシップタスク902は、2つの役割を有して構成される。1つ目は、メンバーシップクリエイター(MembershipCreator)の役割906、すなわち、新しいメンバーシップの生成を起動するノードによって引き受けられる役割であり、2つ目は、メンバーシップターゲット(MembershipTarget)の役割906、すなわち、メンバーシップクリエイターによって特定される、新しいメンバーシップに参加するノードによって引き受けられる役割である。クリエイトメンバーシップタスク902内に定義されるメンバーシップターゲット内には1つ以上のノードがあり得、メンバーシップクリエイター906は、メンバーシップターゲット908内に列挙されたノードの中にあってもよいし、なくてもよいこと、したがって、「遠隔」メンバーシップが生成されること、又は、他のノードのセットに対してプッシュされることが許容されている、ということに注意が必要である。
プロトコル:
【0102】
一実施の形態によれば、
図9に示されるように、
−B91に示されるように、メンバーシップクリエイターの役割906を引き受けるノードは、ユニークな識別子タスクアイデンティティ(TaskIdentity)904とともにクリエイトメンバーシップタスク902を生成するよう構成され得る。
−メンバーシップクリエイターの役割を引き受けるノードは、B92に示されるように、メンバーシップを形成するために気づいたノードの完全なセットから、すべてのノード又はノードのサブセットを選択するよう構成されることができ、そして、選択した1又は複数のノードをクリエイトメンバーシップタスク902に追加するように構成されることができる。上記したように、このサブセットはメンバーシップクリエイターであるノード自身を含んでもよいし、含まなくてもよく、したがって、メンバーシップクリエイターの役割906を引き受けるノードを含まない「遠隔」メンバーシップが形成され得る。
−メンバーシップクリエイターの役割906を引き受けるノードはさらに、ノードのセットから新しいメンバーシップを生成し、B93に示されるように、それに特定の役割を割り当て、クリエイトメンバーシップタスク902にメンバーシップを関連付け又は追加するよう構成され得る。
−クリエイトメンバーシップタスク902は、固定ストア903内に維持されることができ、B94に示されるように起動され得る。
−クリエイトメンバーシップタスクの起動は、B95に示されるように、与えられたロケーション(アドレス)のリストを用いて、開始ノードにビーコン(ビーコンは、ターゲット受信者の所定のリストに対してメッセージを繰り返しブロードキャストするよう構成されるとともに、所定のリストからターゲット受信者を削除するプロセスである。メッセージは、個々のターゲット受信者から応答のアクナレッジメントが受信されるまで、所定のリストに対してブロードキャストされる)を生成させる。そして生成されたビーコンは、B96で、それらのアドレスにクリエイトメンバーシップ(CreateMembership)メッセージを送るように構成され得る。一実施の形態によれば、このクリエイトメンバーシップメッセージは、クリエイトメンバーシップタスクの識別912と、展開される新しいメンバーシップ914と、916に示すように、メンバーシップクリエイター(MembershipCreator)タスクを起動したノードのノード、ロケーション、識別、ホストネーム、及びポート、又はこれらのいずれか1つ以上とを含むように構成される。
【0103】
図10は、一実施の形態による、分散型コンピューターシステム内にノードのメンバーシップを展開する方法のさらなる側面を示している。示されるように、一実施の形態によれば、メンバーシップターゲット(MembershipTarget)ノード1002は、開始ノード(メンバーシップクリエイターノード)からクリエイトメンバーシップメッセージ1004を受け取るときに、そのメッセージからB1002に示されるようにメンバーシップを引き出し、B1004でメンバーシップを展開し、B1006に示されるようにクリエイトメンバーシップレスポンス(CreateMembershipResponse)を生成してメンバーシップクリエイターノード1006に送信し、それによって新しいメンバーシップを展開したことを示すように構成され得る。一実施の形態によれば、クリエイトメンバーシップレスポンスメッセージは、クリエイトメンバーシップタスクの識別(例えば、ユニークな識別子タスクアイデンティティ(TaskIdentity)1008)と、1010に示されるように、メッセージを送るメンバーシップターゲットのノードとロケーションの識別とを含むように構成され得る。
【0104】
一実施の形態によれば、メンバーシップクリエイターノード1006はクリエイトメンバーシップレスポンスを受け取り、メンバーシップクリエイターノードは、B1008に示されるように、メッセージからメンバーシップターゲット(送信ノード)のロケーションの識別を引き出し、引き出したロケーションの識別を、B1010に書かれているようにクリエイトメンバーシップタスクのビーコン内のアドレスのリストから削除し、B1012に示されるように、メンバーシップターゲット内に特定されるロケーションであって、まだそのロケーションのメンバーシップクリエイターが聞いていないロケーションがあるか否か(すなわち、なおもクリエイトメンバーシップレスポンスとともに応答すべきメンバーシップターゲットの数が0より大きいか否か)をチェックするよう構成され得る。
【0105】
もし、クリエイトメンバーシップメッセージにまだ応答しなければならない追加のロケーションがあれば(ビーコン内に残るロケーションが0より大きければ)、メンバーシップクリエイターノードは、追加のメッセージ(すなわち、メンバーシップターゲット内にリストアップされたノードからのクリエイトメンバーシップレスポンスメッセージ)が受信されるのを待機する。一方、もし、まだ応答しなければならないロケーションがもう存在しなければ(ビーコン内に残るロケーションが0であれば)、B1012のYesの選択肢に従い、メンバーシップクリエイターノードは、B1014に示されるようにメンバーシップをそれ自身に又はローカルに展開し、B1016に示されるようにクリエイトメンバーシップタスクの状態を保持するように構成され得る。その後、クリエイトメンバーシップタスクというタスクは、B1018に示されるように、完了したものとしてマークされる。
安全性と生存性の属性
【0106】
一実施の形態によれば、任意のメンバーシッププロトコルは、安全性と生存性の両方の属性を含み得る。実際、一実施の形態によるメンバーシッププロトコルには、新しいメンバーシップの展開の間に何も「悪い」ことが起きなかったことを保証するための安全性の属性のセットと、最終的に起きる何か「良い」もの(例えば、新しいメンバーシップが展開されるであろう)の発生に備えるための生存性の属性のセットとが設けられる。
安全性の属性
【0107】
一実施の形態によれば、メンバーシップの展開は、もし1回又は複数回実行されたとしても同じ結果を生むという点で、冪等元である。したがって、もしメンバーシップクリエイターが、メンバーシップ内にリストアップされたすべてのノードから応答を受け取る前に
障害を起こすとしたら、そのノードは、最終的な出力を変えることなく、初めからクリエイトメンバーシップタスクをリスタートし、重複するクリエイトメンバーシップメッセージを各ターゲットノードに対して再送信することができる。クリエイトメンバーシップメッセージを受信すると、ターゲットノードは、新しいメンバーシップが既に展開されていることを示すクリエイトメンバーシップレスポンスメッセージとともに応答する。クリエイトメンバーシップレスポンスメッセージが受信されるたびにクリエイトメンバーシップタスクが保持される必要はない。クリエイトメンバーシップタスクが保持される必要のある唯一のとき(それが最初に生成されたとき以外で)は、すべての応答が受信され、タスクが完了したものとしてマークされ得るときである。
生存性の属性
【0108】
一実施の形態によれば、ビーコンの使用は、少なくとも1つのクリエイトメンバーシップメッセージが、最終的にメンバーシップターゲット内においてターゲットとされた各ノードに到達することを保証する。もし、このメッセージに対する応答が失われたら(すなわち、クリエイトメンバーシップレスポンスメッセージもまた失われたら)、メンバーシップクリエイターは、ターゲットノードから予想されるクリエイトメンバーシップレスポンスが受信されるまで、クリエイトメンバーシップメッセージ(冪等元であるそれ)の送信を維持することができる。安全性の属性は、複数のクリエイトメンバーシップメッセージの受信が冪等元であることを決定付けるので、この組み合わせは、プロセスが最終的に完了することを保証する。
【0109】
図11は、実施の形態が実行され得るコンピューターシステム1100のブロック図を示す。コンピューターシステム1100は、情報を通信するためのバス1101又は他の通信メカニズムと、情報を処理するためにバス1101と結合する1つ以上のプロセッサ1102とを含み得る。コンピューターシステム1100はさらに、情報と、プロセッサ1102によって実行される指示とを記憶するためにバス1101と結合するランダムアクセスメモリ(RAM)又は他の動的な記憶装置1104(メインメモリと参照される)を含む。メインメモリ1104はまた、プロセッサ1102による指示の実行の間、一時的な変数や他の中間情報を記憶するためにも使用され得る。コンピューターシステム1100はまた、プロセッサ1102のための情報及び指示を記憶するためにバス1101と結合するリードオンリーメモリ(ROM)及び/又は他の静的な記憶装置1106も含み得る。例えば磁器ディスクやフラッシュストレージのようなデータ記憶装置1107が、情報と指示を記憶するためにバス1101に結合されていてもよい。コンピューターシステム1100はまた、コンピューターのユーザに対して情報を表示するために、ディスプレイ装置1110とバス1101を介して結合されていてもよい。英数字や他のキーを含む英数字入力装置1122が、プロセッサ1102に対する情報の伝達と命令選択のためにバス1101に結合されていてもよい。他のタイプのユーザ入力装置は、例えばマウス、トラックボール、カーソル指示キーのような、プロセッサ1102に対する指示情報の伝達と命令選択のため、かつ、ディスプレイ1121におけるカーソルの動きをコントロールするためのカーソルコントロール1123である。コンピューターシステム1100は、コミュニケーション装置(例えば、モデムやNIC)を介して、ネットワーク1126及び分散型コンピューターシステムの1つ以上のノードと結合され得る。
【0110】
実施の形態は、コンピューターシステムの使用、及び/又は、分散型コンピューターシステムにおいてメンバーシップを生成して展開する複数のそのようなコンピューターシステムに関連する。一実施の形態によれば、ここに記載された方法とシステムは、1つ以上のコンピューターシステム1100により、メモリ1104内に含まれる一連の指示を実行するプロセッサ1102に応じて提供され得る。そのような指示は、データ記憶装置1107のようなもうひとつのコンピューター読み出し可能なメディアから、メモリ1104内に読み出され得る。メモリ1104に含まれる一連の指示の実行は、プロセッサ1102がここに記述したステップを実施し、機能を有する原因となる。代替の実施の形態では、本発明を実行するために、ソフトウェア命令に代えて、又は、ソフトウェア命令と組み合わせて、ハード・ワイヤードの回路が使用され得る。したがって、本発明は、ハードウェア回路とソフトウェアの特定の組み合わせに限定されない。実際、任意の適切なコンピューターシステムがここに記述された機能を実行し得ることは、当業者によって理解されるはずである。コンピューターシステムは、望ましい機能を実行するために動作する1又は複数のマイクロプロセッサを含み得る。一実施の形態では、1つのマイクロプロセッサ又は複数ののマイクロプロセッサによって実行された命令は、マイクロプロセッサにここに記述されたステップを実行させる働きをする。命令は、任意のコンピューター読み出し可能なメディアに記憶されてよい。一実施の形態では、マイクロプロセッサの外側にある、若しくは、マイクロプロセッサに組み込まれた不揮発性の半導体メモリに記憶され得る。他の実施の形態では、命令はディスクに記憶され、マイクロプロセッサによって実行される前に揮発性の半導体メモリに読み込まれ得る。
【0111】
本発明のいくつかの実施の形態を記述したが、これらの実施の形態はほんの一例として表現されたものであり、本発明の範囲を限定することを目的とするものではない。実際、ここに記述された新規な方法、装置、及びシステムは、多様な他の形式に具体化され得る。さらに、ここに記述された方法及び装置の形式において、多様な省略、置換、変更が、本発明の精神から離れることなく、実施され得る。添付の請求項及びその等価物は、本発明の範囲及び精神に含まれるように、そのような形式又は変更をカバーすることを意図したものである。例えば当業者は、多様な実施の形態において、実際の構造(例えば、そのような)が図面に示したものと異なり得ることを理解するであろう。実施の形態によっては、上記の例の中に記述した複数のステップのうちのいくつかが除去される可能性があり、また、他のステップが加えられる可能性がある。また、上で開示した特定の実施の形態の特徴及び属性は、追加の実施の形態を形作るために、異なる方法で混ぜ合わせられ得る。ここでいう追加の実施の形態はすべて、本開示の範囲に含まれる。本開示は、いくつかの好ましい実施の形態とアプリケーションを提供するけれども、当業者にとって明らかであり、ここで説明したすべての特徴と利益は提供しない実施の形態を含む他の実施の形態もまた、本開示の範囲内にある。したがって、本開示の範囲は、添付の請求項を参照することによってのみ定義されることが予定されたものである。