(57)【要約】      （修正有）【課題】情報中心ネットワーク（ＩＣＮ）にわたって変数についての分布及びフォールトトレラント状態の維持を容易とするレプリカ管理システムを提供する。【解決手段】動作中、変数をホストするＩＣＮノードは、変数のレプリカインスタンスの値更新コマンド、変数のレプリカのセットの現在値、及び、新たな変数の値を含むインタレストを受信する。ＩＣＮノードは、レプリカ変数のセットの現在値に基づいて、ローカルレプリカ変数の現在値が信頼できる値であるかどうかを判定する。現在のローカル値が信頼できる値である場合、ＩＣＮノードは、ローカルレプリカ変数を新たな値に更新し、信頼できる値でない場合、ＩＣＮノードは、ローカルレプリカ変数の状態を前の状態に巻き戻し、ローカルレプリカ変数を新たな値に更新する。【選択図】図３
2016053951.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実装方法において、
クライアント装置により、変数のレプリカのセットを読み取るための少なくとも１つのインタレストであり、各インタレストが前記変数の対応するレプリカを読み取るための値読み取りコマンドを備え且つレプリカ変数及び前記レプリカ変数をホストする任意のレプリカサーバに関連付けられたルーティング可能な名称接頭辞を含む名称を備えるインタレストを広めることと、
前記少なくとも１つのインタレストを満たすコンテンツオブジェクトであり、各コンテンツオブジェクトが各レプリカ変数についての現在値を含むコンテンツオブジェクトのセットを受信することと、
前記コンテンツオブジェクトのセットにおける前記現在値に基づいて前記変数についての信頼できる値が存在するかどうかを判定することと、
前記信頼できる値が存在しないとの判定に応答して、前記変数のローカルコピーの状態を前の状態に巻き戻すこととを備える、方法。
【請求項２】
前記信頼できる値が存在しないとの判定に応答して、前記方法が、さらに、レプリカサーバに前記レプリカ変数にわたる信頼できない値を通知することなく、前記変数の前記ローカルコピーの状態を巻き戻すことを備える、請求項１に記載の方法。
【請求項３】
さらに、
前記信頼できる値が存在しないとの判定に応答して、前記変数の前記ローカルコピーを前記信頼できる値に設定することを備える、請求項１に記載の方法。
【請求項４】
信頼できる値が存在するかどうかの判定が、
前記インタレストを満たす前記コンテンツオブジェクトのセットから、前記変数についての類似値の最大セットを判定することと、
前記最大セットにおける類似値の数が最小定足数閾値以上であるかどうかを判定することとを含む、請求項１に記載の方法。
【請求項５】
さらに、前記変数のレプリカのセットを更新することを備え、前記レプリカ変数の更新が、
更新するために少なくともレプリカ変数のサブセットを選択することと、
前記レプリカ変数のサブセットにおける各レプリカ変数についての値更新コマンド、前記レプリカ変数のセットについて受信した前記現在値、及び、前記変数についての新たな値を備えるインタレストを生成することと、
前記各レプリカ変数についての前記インタレストを広めることとを含む、請求項１に記載の方法。
【請求項６】
前記選択されたレプリカ変数のサブセットにおける前記レプリカ変数の数が最小定足数閾値以上である、請求項５に記載の方法。
【請求項７】
前記各レプリカ変数についての前記インタレストが、前記変数の各レプリカに関連付けられた名称要素が続く、前記変数に関連付けられた前記ルーティング可能な名称接頭辞を備える名称を含む、請求項５に記載の方法。
【請求項８】
コンピュータ実装方法において、
レプリカサーバにより、変数についての値更新コマンド、変数のレプリカのセットについての現在値、及び、前記変数についての新たな値を備えるインタレストを受信することと、
前記レプリカ変数のセットについての前記現在値に基づいて、前記変数についての現在のローカル値が信頼できる値であるかどうかを判定することと、
前記現在のローカル値が前記信頼できる値であるとの判定に応答して、前記変数のローカルレプリカを前記新たな値に更新することとを備える、方法。
【請求項９】
コンピュータによって実行されたとき、方法を前記コンピュータに実行させる命令を記憶する持続性コンピュータ読み取り可能な記憶媒体において、前記方法が、
レプリカサーバにより、変数についての値更新コマンド、変数のレプリカのセットについての現在値、及び、前記変数についての新たな値を備えるインタレストを受信することと、
前記レプリカ変数のセットについての前記現在値に基づいて、前記変数についての現在のローカル値が信頼できる値であるかどうかを判定することと、
前記現在のローカル値が前記信頼できる値であるとの判定に応答して、前記変数のローカルレプリカを前記新たな値に更新することとを備える、記憶媒体。
【請求項１０】
さらに、前記現在のローカル値が前記信頼できる値でないとの判定に応答して、
前記変数のローカルレプリカの状態を前の状態に巻き戻すことと、
前記変数のローカルレプリカを前記新たな値に更新することとを備える、請求項９に記載の記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、情報中心ネットワークに関する。より具体的には、本開示は、情報中心ネットワーク（ＩＣＮ）にわたる変数の複製及び変数についての分布及びフォールトトレラント状態の維持に関する。
【背景技術】
【０００２】
情報中心ネットワーク（ＩＣＮ）において、クライアント装置は、このデータについての名称を含む要求又はインタレストメッセージを広めることによってデータを取得することができる。ＩＣＮにおける中間ルータは、インタレストの名称接頭辞に関連付けられている任意のコンテンツ制作者に向けてこのインタレストを伝播する。インタレストを受信するコンテンツ制作者は、インタレストを満たすコンテンツオブジェクトを生成して返送することができる（例えば、コンテンツオブジェクトの名称は、インタレストパケットにおける名称と正確に一致する）。そして、ルータは、インタレストメッセージによって横断される逆経路に沿ってクライアント装置にコンテンツオブジェクトを転送し、インタレストメッセージによってルータにおいて逆経路情報を利用する。
【０００３】
ＩＣＮアーキテクチャは、データが到来した場所にかかわらずクライアントが効率的且つセキュアにデータを取得するのを可能とするように設計されている。しかしながら、通常のＩＣＮネットワークは、典型的には、１つのインタレストを満たすようにコンテンツオブジェクトを返送する。データをホストするＩＣＮノードが故障したり障害を発生したりする場合、データを消費する他のＩＣＮノードは、古い（キャッシュされた）情報又は悪意のある値を使用するというリスクがある。
【発明の概要】
【課題を解決するための手段】
【０００４】
１つの実施形態は、ＩＣＮノードのセットにわたって変数を複製することにより、情報中心ネットワーク（ＩＣＮ）にわたって変数についての分布及びフォールトトレラント状態を維持するのを容易とするレプリカ管理システムを提供する。動作中、可変ホスティングＩＣＮノードは、変数についての値更新コマンド、変数のレプリカのセットの現在値及び変数の新たな値を含むインタレストを受信することができる。ＩＣＮノードは、レプリカ変数のセットの現在値に基づいて、変数についての現在のローカル値が信頼できる値であるかどうかを判定することができる。現在のローカル値が信頼できる値である場合、ＩＣＮノードは、変数のローカルレプリカを新たな値に更新することができる。しかしながら、現在のローカル値が信頼できる値でない場合、ＩＣＮノードは、変数のローカルレプリカの状態を前の状態に巻き戻し、変数のローカルレプリカを新たな値に更新することができる。
【０００５】
情報中心ネットワーク（ＩＣＮ）において、コンテンツの各部は、個別に名称付けられ、データの各部は、同じデータの他のバージョン又は他のソースからのデータなどの任意の他のデータ部分からデータを区別する固有の名称に結合される。この固有の名称は、ネットワーク装置が固有の名称を示す要求又はインタレストを広めることによってデータを要求するのを可能とし、データの記憶場所、ネットワーク場所、アプリケーション及び伝送手段から独立したデータを取得することができる。名称付けデータネットワーク（ＮＤＮ）又はコンテンツ中心ネットワーク（ＣＣＮ）は、ＩＣＮアーキテクチャの例である。以下の用語は、ＮＤＮ又はＣＣＮアーキテクチャの要素について説明する。
【０００６】
コンテンツオブジェクト：固有の名称に結合されているデータの単一部分である。コンテンツオブジェクトは、コンテンツオブジェクトがコンピューティングデバイス内又は異なるコンピューティングデバイス間を移動することができるが変化しないことを意味する、「永続的」である。コンテンツオブジェクトの任意の要素が変化した場合、変更を行ったエンティティは、更新されたコンテンツを含む新たなコンテンツオブジェクトを作成し、新たな固有の名称に新たなコンテンツオブジェクトを結合する。
【０００７】
固有の名称：ＣＣＮ内の名称は、通常、場所とは無関係であり、コンテンツオブジェクトを固有に識別する。データ転送装置は、コンテンツオブジェクトについてのネットワークアドレス又は物理的場所にかかわらず、コンテンツオブジェクトを生成又は記憶するネットワークノードに向けてパケットを転送するために名称又は名称接頭辞を使用することができる。いくつかの実施形態において、名称は、階層的に構造化された可変長識別子（ＨＳＶＬＩ）とすることができる。ＨＳＶＬＩは、様々な方法で構築可能ないくつかの階層的な要素に分割されることができる。例えば、個々の名称要素ｐａｒｃ、ｈｏｍｅ、ｃｃｎ及びｔｅｓｔ．ｔｘｔは、名称「／ｐａｒｃ／ｈｏｍｅ／ｃｃｎ／ｔｅｓｔ．ｔｘｔ」を形成するために左指向の接頭辞が主要である方法で構築可能である。それゆえに、名称「／ｐａｒｃ／ｈｏｍｅ／ｃｃｎ」は、「／ｐａｒｃ／ｈｏｍｅ／ｃｃｎ／ｔｅｓｔ．ｔｘｔ」の「親」又は「接頭辞」とすることができる。共同文書などの異なるバージョンのコンテンツアイテムを区別するためにさらなる要素が使用可能である。
【０００８】
いくつかの実施形態において、名称は、コンテンツオブジェクトのデータ（例えば、チェックサム値）から及び／又はコンテンツオブジェクトの名称要素から導出されたハッシュ値などの識別子を含むことができる。ハッシュベースの名称記述は、米国特許出願第１３／８４７，８１４号（２０１３年３月２０日に提出された発明者Ｉｇｎａｃｉｏ  Ｓｏｌｉｓによる名称「ＯＲＤＥＲＥＤ−ＥＬＥＭＥＮＴ  ＮＡＭＩＮＧ  ＦＯＲ  ＮＡＭＥ−ＢＡＳＥＤ  ＰＡＣＫＥＴ  ＦＯＲＷＡＲＤＩＮＧ」）に記載されている。名称はまた、フラットラベルとすることができる。以下では、「名称」は、階層名称若しくは名称接頭辞、フラット名称、固定長名称、任意長名称又はラベル（例えば、マルチプロトコルラベルスイッチング（ＭＰＬＳ）ラベル）など、名称データネットワークにおけるデータの一部用の任意の名称を指すのに使用される。
【０００９】
インタレスト：データの一部についての要求を示し且つデータの一部についての名称（又は名称接頭辞）を含むパケットである。データ消費者は、ＣＣＮ／ＮＤＮルータが、要求やインタレストを満たすために要求されたデータを提供することができる記憶装置（例えば、キャッシュサーバ）又はデータ制作者に向けて伝播することができる情報中心ネットワークにわたって要求又はインタレストを広めることができる。
【００１０】
いくつかの実施形態において、ＩＣＮシステムは、コンテンツ中心ネットワーク（ＣＣＮ）を含むことができる。しかしながら、本願明細書に開示された方法はまた、他の情報中心ネットワーク（ＩＣＮ）アーキテクチャにも同様に適用可能である。ＣＣＮアーキテクチャの記述は、米国特許出願第１２／３３８，１７５号（２００８年１２月１８日に提出された発明者Ｖａｎ  Ｌ．Ｊａｃｏｂｓｏｎ及びＤｉａｎａ  Ｋ．Ｓｍｅｔｔｅｒｓによる名称「ＣＯＮＴＲＯＬＬＩＮＧ  ＴＨＥ  ＳＰＲＥＡＤ  ＯＦ  ＩＮＴＥＲＥＳＴＳ  ＡＮＤ  ＣＯＮＴＥＮＴ  ＩＮ  Ａ  ＣＯＮＴＥＮＴ  ＣＥＮＴＲＩＣ  ＮＥＴＷＯＲＫ」）に記載されている。
【００１１】
いくつかの実施形態において、変数についての現在のローカル値が信頼できる値であるかどうかを判定するとき、ＩＣＮノードは、信頼できる値が存在するかどうかを判定し、現在のローカル値が信頼できる値と一致するかどうかを判定する。
【００１２】
これらの実施形態に対するいくつかの変形例において、信頼できる値が存在するかどうかを判定するとき、ＩＣＮノードは、レプリカ変数のセットについての現在値に基づいて、一致する値の最大セットを判定し、最大セットにおける一致する値の数が最小定足数閾値以上であるかどうかを判定する。
【００１３】
これらの実施形態に対するいくつかの変形例において、信頼できる値が存在しないとＩＣＮノードが判定する場合、ＩＣＮノードは、変数のローカルレプリカの状態を前の状態に巻き戻すことができる。
【００１４】
いくつかの実施形態において、インタレストは、インタレストの名称に添付された値更新コマンドを備える。
【００１５】
いくつかの実施形態において、インタレストは、値更新コマンドを含むペイロードを備える。
【００１６】
１つの実施形態は、ＩＣＮノードのセットにわたって複製される分布変数を読み取って更新することができるクライアントＩＣＮノードを提供する。動作中、クライアントＩＣＮノードは、変数のレプリカのセットを読み取るために少なくとも１つのインタレストを広めることによって分布変数の値を読み取ることができる。各インタレストは、変数の対応するレプリカを読み取るための値読み取りコマンド、レプリカ変数に関連付けられたルーティング可能な名称接頭辞を含む名称、レプリカ変数をホストする任意のレプリカサーバを含むことができる。少なくとも１つのインタレストを広めた後、ＩＣＮノードは、各コンテンツオブジェクトが各レプリカ変数についての現在値を含むことができるように、少なくとも１つのインタレストを満たすコンテンツオブジェクトのセットを受信することができる。そして、ＩＣＮノードは、コンテンツオブジェクトのセットにおける現在値に基づいて、変数についての信頼できる値が存在するかどうかを判定することができる。信頼できる値が存在しない場合、ＩＣＮノードは、変数のローカルコピーについての状態を前の状態に巻き戻すことができる。
【００１７】
いくつかの実施形態において、ＩＣＮノードは、レプリカ変数にわたって信頼できない値をレプリカサーバに通知することなく、変数のローカルコピーの状態を巻き戻すことができる。
【００１８】
いくつかの実施形態において、信頼できる値が存在しないという判定に応答して、ＩＣＮノードは、信頼できる値に対して変数のローカルコピーを設定することができる。
【００１９】
いくつかの実施形態において、信頼できる値が存在するかどうかを判定するとき、ＩＣＮノードは、インタレストを満たすコンテンツオブジェクトのセットから、変数についての類似値の最大セットを判定する。そして、ＩＣＮノードは、最大セットにおける類似値の数が最小定足数閾値以上であるかどうかを判定する。そうである場合、この類似値の最大セットからの値は、信頼できる値として使用される。
【００２０】
いくつかの実施形態において、ＩＣＮノードは、変数のレプリカのセットを更新することができる。そうすることで、ＩＣＮノードは、更新するために少なくともレプリカ変数のサブセットを選択する。そして、ＩＣＮノードは、レプリカ変数のサブセットにおける各レプリカ変数についての値更新コマンド、レプリカ変数のセットについて受信した現在値及び変数についての新たな値を備えるインタレストを生成し、各レプリカ変数についてのインタレストを広める。
【００２１】
いくつかの実施形態において、レプリカ変数の選択されたサブセットにおけるレプリカ変数の数は、最小定足数閾値以上である。
【００２２】
これらの実施形態に対するいくつかの変形例において、各レプリカ変数についてのインタレストは、変数の各レプリカに関連付けられた名称要素が続く、変数に関連付けられたルーティング可能な名称接頭辞を備える名称を含む。
【図面の簡単な説明】
【００２３】
【図１】図１は、実施形態にかかる複数のレプリカサーバにわたって複製されたデータの管理を容易とする例示的なコンピューティング環境を図示している。
【図２】図２は、実施形態にかかるレプリカサーバにおいて変数の値を更新するための例示的なインタレストメッセージを図示している。
【図３】図３は、実施形態にかかるレプリカサーバにおいてデータアクセスコマンドを処理する方法を図示するフローチャートである。
【図４】図４は、実施形態にかかる信頼できる値を判定する方法を図示するフローチャートである。
【図５】図５は、実施形態にかかるレプリカサーバのセットから変数の値を読み取る方法を図示するフローチャートである。
【図６】図６は、実施形態にかかるレプリカサーバのセットにわたって変数の値を更新する方法を図示するフローチャートである。
【図７】図７は、実施形態にかかる複数のレプリカサーバにわたって複製されたデータの管理を容易とする例示的な装置を図示している。
【図８】図８は、実施形態にかかる複数のレプリカサーバにわたって複製されたデータの管理を容易とする例示的なコンピュータシステムを図示している。
【発明を実施するための形態】
【００２４】
図面において、同様の参照符号は、同一の図要素を指す。
【００２５】
以下の説明は、当業者が実施形態を作成して使用するのを可能とするために提示され、特定の用途及びその要件の文脈において提供される。開示された実施形態に対する様々な変更は、当業者にとって容易に明らかであり、本願明細書において定義される一般的な原理は、本発明の精神及び範囲から逸脱することなく他の実施形態及び用途に適用することができる。それゆえに、本発明は、示された実施形態に限定されるものではなく、本願明細書に開示された原理及び特徴と一致する最も広い範囲を与えられるべきである。
【００２６】
本発明の実施形態は、ＩＣＮノードのセットにわたって変数を複製することによって情報中心ネットワーク（ＩＣＮ）にわたって変数についての分布及びフォールトトレラント状態を維持するという問題を解決するレプリカ管理システムを提供する。他のＩＣＮノードは、レプリカ変数をホストする任意のＩＣＮノードからそれらが取得することができる変数の各レプリカについてのインタレストを広めることによって変数にアクセスすることができる。レプリカ変数をホスト又は消費するＩＣＮノードは、アクセス可能又はアクセス不可能な数の不一致がレプリカ変数のセットにわたって存在するかどうかを判定することによって変数の状態の整合性を独立して検証することができる。
【００２７】
例えば、分布したＩＣＮノードのセットは、変数のマスターコピーを制御する信頼できるエンティティがない変数のＮ個のレプリカをともにホストすることができる。変数の各レプリカは、ともに変数履歴と称される変数のローカルインスタンスについての現在及び履歴状態（値）を維持する。変数のＮ個のレプリカの完全な集合は、変数履歴セット（ＶＨＳ）と称される。ＶＨＳをホストする責任は、そのレプリカの少なくとも大部分が一致する値を有するときに信頼できる値が変数について存在するように、分布したＩＣＮノードのセットにわたって安全に分布することができる。この信頼できる値を生み出す一致するレプリカの最大セットは、以下では、定足数Ｑと称され、大きさ｜Ｑ｜を有する。また、クライアントが変数を更新するとき、クライアントは、変数の整合性を維持するために少なくとも｜Ｑ｜個のレプリカ変数を成功裏に更新する必要がある。
【００２８】
変数履歴は、現在状態（例えば、変数の集合についての現在値）を含むことができ、同様に誤り状態を前の良好な状態に巻き戻すのに使用可能な履歴状態を有する。また、変数は、一般に、情報の任意の一部を記憶することができ、コンテンツオブジェクト又は現在知られている若しくは今後開発される任意の他のデータ構造を使用して実現されることができる。例えば、変数は、システムの状態をともに表すデータ要素の大きさ（例えば、変数の集合）を備えるシステム状態を含むことができる。このように、システムの状態は、改竄及び障害迂回イベントに対して状態情報を保護するためにＶＨＳを使用して複製されることができる。
【００２９】
変数履歴をホストするＩＣＮノードは、ＶＨＳに対する更新を発行するクライアント装置から、ＶＨＳの現在値又はＶＨＳのサブセットを取得することができる。ＩＣＮノードは、｜Ｑ｜個のレプリカ変数が一致する値を有するかどうかを判定するために現在値を分析することができ、そうである場合、信頼できる値としてこの値を使用する。ローカルレプリカ変数がこの信頼できる値に一致しない場合、ＩＣＮノードは、信頼できる値を記憶するためにそのレプリカ変数を更新することができる。
【００３０】
一方、信頼できる値が存在しない場合、ＩＣＮノードは、ローカルレプリカ変数を前の良好な状態（例えば、前の信頼できる状態）に移行させるためにローカル変数履歴を使用することができる。また、ＩＣＮノードがローカルレプリカ変数の状態を修復するために現在値を使用することが可能である。例えば、一致する値の最大セットは、修復値を提供するのにまさに十分な大きさであり、ＩＣＮノードは、前の状態に移行する必要がなく、壊れた状態を修復するためにこの修正値を使用してもよい。
【００３１】
いくつかの実施形態において、システム管理者は、ＶＨＳの大きさ、及び、信頼できる値又は修復値を生成するために一致するレプリカ変数の必要数を設定することができる。例えば、フォールトトレランス及びセキュリティを保証するために状態情報をホストする必要がある状態レプリカの合計数Ｎは、動作中にオフラインとすることができるレプリカの最大予想数ｆと、悪意のあるＩＣＮノードにおいて維持されることができるか又は最新ではないかもしれないレプリカの最大数ｂとに依存することができる。いくつかの実施形態において、状態情報についてのレプリカの合計数は、以下である必要がある。
Ｎ＝３ｆ＋２ｂ＋１      （１）
また、信頼できる値を決定することができるように、一致する値を有するレプリカの最小数の数は、以下の最小定足数サイズである必要がある。
｜Ｑ｜＝２ｆ＋２ｂ＋１      （２）
最小定足数サイズ｜Ｑ｜が満たされない場合、状態情報についてのレプリカのセットは、信頼できる値を提供しない。しかしながら、一致する値を有するレプリカ変数の最大数が少なくとも以下である場合、システム管理者又はフォールト訂正サービスがＩＣＮノードにおいてレプリカ変数を修復することが可能である。
｜Ｒ｜＝ｆ＋ｂ＋１      （３）
このレプリカ変数の数｜Ｒ｜は、セットにおける誤った又は悪意のある値から認証できる値を明確にするのに十分な大きさにする必要がある。
【００３２】
図１は、実施形態にかかる複数のレプリカサーバにわたって複製されたデータの管理を容易とする例示的なコンピューティング環境１００を図示している。具体的には、ＩＣＮ１０２は、レプリカホスト１０４、クライアント装置１０６及び１０８、並びに、ＩＣＮ１０２を介して要求（例えば、インタレスト）及び名称付けられたデータオブジェクト（例えば、コンテンツオブジェクト）を転送することができる任意の他の種類のＩＣＮノードなどの多数の装置を含むことができる。装置１０４、１０６及び１０８は、ラップトップコンピュータ、タブレット若しくはスレートコンピュータ、スマートフォン若しくは携帯情報端末機（ＰＤＡ）などのモバイルコンピューティングデバイス、又は、サーバコンピュータ若しくはデスクトップコンピュータなどの固定コンピューティングデバイスを含む任意の種類のコンピューティングデバイスとすることができる。さらに、各装置は、保留インタレスト表（ＰＩＴ）、転送情報ベース（ＦＩＢ）、コンテンツストア（ＣＳ）などの要求を転送する及び／又は一致する名称付けデータオブジェクトを返送するための様々なリソースを含むことができる。
【００３３】
レプリカホスト１０４．１−１０４．ｎは、それぞれ、完全なＶＨＳがレプリカホスト１０４にわたって分布するように、１つ以上の変数履歴をホストすることができる。各変数履歴は、ＶＨＳ変数についての履歴レプリカ値のセットとともにＶＨＳ変数についての現在のレプリカ値を記憶する。例えば、レプリカホスト１０４．ｎは、複数の変数履歴１１２を記憶する記憶装置１１０を含むことができる。いくつかの実施形態において、変数履歴１１２は、１つの変数の複数のレプリカ（例えば、それらは、１つのＶＨＳに対応することができる）に対応することができ、又は、状態セットをともに構成する複数の異なる変数のレプリカ（例えば、それらは、複数のＶＨＳに対応することができる）に対応することができる。
【００３４】
装置１０６及び１０８は、レプリカホスト１０４．１−１０４．ｎの少なくとも｜Ｑ｜からレプリカ値を取得するためにレプリカホスト１０４にクエリするクライアント装置に対応することができ、変数の状態が巻き戻される必要があるかどうかを自身で決定することができる。例えば、装置１０６及び１０８はまた、ＶＨＳの信頼できる値についての変数履歴を記憶することができる。装置１０６がレプリカホスト１０４をクエリして｜Ｑ｜個の一致するレプリカ値を受信した場合、装置１０６は、ＶＨＳについての信頼できる値として、この一致する値を使用することができる。一方、装置１０６が（レプリカホスト１０４にわたって分布した）ＶＨＳにわたって信頼できる値が存在しないと判定した場合、装置１０６は、既知の信頼できる値を記憶する前の状態に変数の状態を巻き戻すことができ、装置１０６は、レプリカホスト１０４のいずれにも壊れたＶＨＳ状態を通知する必要がない。いくつかの実施形態において、（例えば、壊れた状態を修復するために）レプリカホスト１０４に壊れたＶＨＳ状態を通知する変数についての新たな値を生成するのはクライアント装置である。装置１０６は、クライアントが変数の値を更新する予定の場合にレプリカホスト１０４がそれぞれ将来の時点でこの同じ前の状態に巻き戻すことを考えると、信頼できる値として前の状態を安全に使用することができる。
【００３５】
例えば、新聞社「Ｇｏｔｈａｍ  Ｇａｚｅｔｔｅ」は、それらの消費者によってアクセスされることになるそれらの新聞コンテンツを記憶するとともにそれらの購読者にそれらの統計情報をホストするために名称接頭辞「／ＧｏｔｈａｍＧａｚｅｔｔｅ」を有するコンテンツオブジェクトの集合を使用することができる。名称接頭辞「／ＧｏｔｈａｍＧａｚｅｔｔｅ」を有するコンテンツ集合は、レプリカホスト１０４にわたって分布したｎ個のレプリカのＶＨＳを含むことができ、そのため、集合における各変数（コンテンツオブジェクト）はまた、レプリカホスト１０４にわたって分布したｎ個のレプリカを有する。集合のレプリカをホストするレプリカホスト１０４．ｉは、ホストされるレプリカに関連付けられている固有の識別子によって付加された集合における各変数についての名称接頭辞を通知する。
／｛ｎａｍｅ＿ｐｒｅｆｉｘ＿ｆｏｒ＿ｖａｒｉａｂｌｅ｝／｛ｒｅｐｌｉｃａ  ｉｄｅｎｔｉｆｉｅｒ｝      （４）
「／｛ｎａｍｅ＿ｐｒｅｆｉｘ＿ｆｏｒ＿ｖａｒｉａｂｌｅ｝」についてのインタレストは、レプリカホスト１０４のいずれかからなどの変数のいずれかのレプリカからの値を返送することができることに留意されたい。しかしながら、「／｛ｎａｍｅ＿ｐｒｅｆｉｘ＿ｆｏｒ＿ｖａｒｉａｂｌｅ｝／｛ｒｅｐｌｉｃａ  ｉｄｅｎｔｉｆｉｅｒ｝」についてのインタレストは、固有の識別子｛ｒｅｐｌｉｃａ  ｉｄｅｎｔｉｆｉｅｒ｝に関連付けられているレプリカ変数からのみ値を返送することができる。
【００３６】
固有の識別子は、レプリカ変数を識別する数値若しくは論理値とすることができ、又は、レプリカホスト１０４．ｉに関連付けられた論理識別子を含むことができる。これは、ＩＣＮ１０２にわたるネットワークノードに、ネットワークノード１０４．ｉに対してこの所定のレプリカについての名称を含む任意の要求又はインタレストを転送させる。例えば、クライアント１０６又は１０８は、「／ＧｏｔｈａｍＧａｚｅｔｔｅ／ｓｕｂｓｃｒｉｂｅｒ＿ｓｉｚｅ／３」についてのインタレストを広めることにより、変数「／ＧｏｔｈａｍＧａｚｅｔｔｅ／ｓｕｂｓｃｒｉｂｅｒ＿ｓｉｚｅ」の識別子「３」を有するレプリカにアクセスすることができる。レプリカホスト１０４．３がレプリカ識別子「３」に関連付けられている場合、ＩＣＮ１０２にわたるネットワークノードは、レプリカホスト１０４．３に対してこの要求又はインタレストを転送する。
【００３７】
したがって、ＩＤ「３」及びレプリカサーバ１０４．３に関連付けられているレプリカ変数は、同じ名称「／｛ｎａｍｅ＿ｐｒｅｆｉｘ＿ｆｏｒ＿ｖａｒｉａｂｌｅ｝／３」を介してアクセス可能である。しかしながら、レプリカ変数は、新たなホストに対してレプリカを移動するか又は新たなネットワーク場所にレプリカを移動するために、レプリカホスト１０４のまわりを又はさらにＩＣＮ１０２における異なるネットワーク装置に対してなおも移動することができる。レプリカ変数が新たなホストに移動すると、この新たなホストは、ＩＣＮ１０２がこのホストに対して全ての新たな要求を転送するのを可能とするためにレプリカ変数の存在を通知することができる。
【００３８】
図２は、実施形態にかかるレプリカ変数を更新するための例示的なインタレストメッセージ２００を図示している。インタレストメッセージ２００は、名称２０２及びペイロード２０４を含む。名称２０２は、更新されることになるレプリカ変数に関連付けられている。ペイロード２０４は、変数についての新たな値２０６を含むことができ、レプリカホストにレプリカ変数を新たな値２０６に更新させる値更新コマンド２０８を含む。ペイロードはまた、ＶＨＳにわたる少なくともレプリカのサブセットについての現在のレプリカ値２１０を含むことができ、レプリカホストは、変数についてのそのローカル値が信頼できる値であるかどうかを判定するために使用することができる。
【００３９】
図３は、実施形態にかかるレプリカサーバにおいてデータアクセスコマンドを処理する方法３００を図示するフローチャートである。動作中、レプリカサーバは、データアクセスコマンドを含むインタレストを受信することができ（動作３０２）、動作されることになる変数を決定するためにインタレストからのコマンドを分析する（動作３０４）。
【００４０】
そして、レプリカサーバは、コマンドが読み取り動作又は値更新動作を実行するかどうかを判定する（動作３０６）。コマンドが読み取り動作の場合、レプリカサーバは、この変数についてのローカル値を取得し（動作３０８）、インタレストの名称を含む名称と変数についてのローカル値を含むペイロードとを有するコンテンツオブジェクトを生成する（動作３１０）。そして、レプリカサーバは、インタレストを満たすためにコンテンツオブジェクトを返送する（動作３１２）。
【００４１】
しかしながら、コマンドが値更新コマンドである場合、レプリカサーバは、他のレプリカ変数についての（例えば、他のレプリカサーバからの変数についての）現在値を取得するためにインタレストを分析する（動作３１４）。そして、レプリカサーバは、変数についての信頼できる値を判定し（動作３１６）、ローカル値が信頼できる値であるかどうかを判定する（動作３１８）。ローカル値が信頼できる値である場合、レプリカサーバは、更新された値を有するようにローカル変数を更新するために進むことができる（動作３２２）。
【００４２】
一方、ローカル値が信頼できる値でない場合、レプリカサーバは、ローカルに又はレプリカサーバの集合間において問題を検出した。例えば、ローカルレプリカの状態は、他のレプリカのものと一致しないことがあり、又は、おそらくクライアントは、新たな信頼できる状態に到達するのに十分なレプリカにおいてデータを更新することができなかった。いずれの場合にも、ローカルレプリカサーバは、レプリカ変数の状態を前の状態に巻き戻すように進み（動作３２０）、その後、インタレストにおいて指定された更新された値を有するように変数のローカルレプリカを更新する（動作３２２）。
【００４３】
いくつかの実施形態において、ローカルレプリカサーバは、レプリカ変数の状態を最後の既知の良好な状態に巻き戻すことにより、変数の状態を訂正することができ、いくつかの変形例において、サーバの状態（例えば、レプリカ変数の集合を含む状態）を最後の既知の良好な状態に巻き戻すことができる。
【００４４】
いくつかの他の実施形態において、十分なレプリカ変数が一致する値を有する（例えば、ＶＨＳにおける少なくとも｜Ｒ｜個の変数は、一致する値を有する）場合、ローカルレプリカサーバは、ＶＨＳの信頼できる値を復元するためにこの一致する値を使用することによって変数の状態を訂正することができる。例えば、１つ以上のレプリカサーバ及び／又はそれらの管理者は、レプリカ変数が既にこの値を保持していない場合、この復元値を記憶するために対応するレプリカ変数を更新することができる。
【００４５】
図４は、実施形態にかかるＶＨＳにおける信頼できる値を検出する方法４００を図示するフローチャートである。動作中、ネットワークノード（例えば、レプリカサーバ又はクライアント装置）は、変数の（例えば、レプリカサーバのセットにわたる変数についての）複数のレプリカについての現在値を取得することができる（動作４０２）。例えば、クライアントは、レプリカサーバのセットにわたって変数の各インスタンスを読み取るインタレストを広めることによってこれらの現在値を取得することができる。一方、レプリカサーバは、変数において値更新動作を実行するインタレストからこれらの現在値を取得することができる。
【００４６】
これらの現在値の全てが同じでなくてもよいことを思い出されたい。レプリカサーバは、クライアントがローカルレプリカサーバを更新することなく他のレプリカサーバにおいて変数の値を更新した場合又は悪意のあるエンティティが誤った値に変数の値をどうにか変更した場合には古い値を有していてもよい。そして、サーバ又はクライアントは、セット間の一致する値の最大セットを判定し（動作４０４）、この最大セットのサイズが最小定足数閾値｜Ｑ｜以上であるかどうかを判定する（動作４０６）。そうである場合、装置は、信頼できる値が存在すると判定し、信頼できる値としてこのセットから変数の値を選択する（動作４０８）。一方、サイズが定足数閾値未満である場合、装置は、信頼できる値が存在しないと判定する（動作４１０）。
【００４７】
図５は、実施形態にかかるレプリカサーバのセットを介して複製される変数を読み取る方法５００を図示するフローチャートである。動作中、クライアントは、各インタレストが変数の異なるレプリカについての要求を含むように、少なくとも変数のレプリカのサブセットについてのインタレストを広めることができる（動作５０２）。クライアントは、レプリカ変数のサブセットに対応するコンテンツオブジェクトのセットを受信し（動作５０４）、信頼できる値が存在するかどうかをクライアントが判定する分析する（動作５０６）。信頼できる値が存在する場合、クライアントは、更新された値にローカル変数を更新する（動作５０８）。
【００４８】
いくつかの実施形態において、読み取られるレプリカ変数のサブセットは、｜Ｑ｜個の一致する値から信頼できる値を検出することが可能であるように、少なくとも最小定足数閾値｜Ｑ｜に等しいことが必要である。クライアントがレプリカ変数のこのサブセットから信頼できる値を検出しない場合、クライアントは、信頼できる値が検出されるか又はクエリするためにＶＨＳにおいてこれ以上のレプリカ変数がないまで、他のレプリカ変数についてのさらなるインタレストを広めることができる。例えば、クライアントは、追加のレプリカがＶＨＳに存在するかどうかを判定することができる（動作５１０）。そうである場合、クライアントは、他のレプリカについての追加のインタレストを広め（動作５１２）、これらの他のレプリカについて受信したレプリカ値を受信して処理するために動作５０４に戻る。一方、これ以上のレプリカがＶＨＳに存在しない場合、クライアントは、前の状態に変数の値を巻き戻す（動作５１４）。
【００４９】
図６は、実施形態にかかるレプリカサーバのセットにわたって変数の値を更新する方法６００を図示するフローチャートである。動作中、クライアントは、少なくとも変数のレプリカのサブセットについてのインタレストを広めることなどによって変数のレプリカについての現在値を読み取る（動作６０２）。クライアントは、ユーザにデータを提示するために、他の新たなデータを生成するために、さらに変数の値を更新するためになど、ローカルに変数の信頼できる値を使用することができる（動作６０４）。
【００５０】
クライアントが変数の値を更新しない場合（動作６０６）、クライアントは、更新するために少なくとも変数のレプリカのサブセットを選択し（動作６０８）、新たな値を保持するためにレプリカ変数のこのサブセットを更新する（動作６１０）。このサブセットのサイズは、最小定足数閾値｜Ｑ｜に少なくとも等しいことが必要である。
【００５１】
いくつかの実施形態において、クライアントは、プッシュプロトコル又はプルプロトコルを使用してレプリカ変数を更新することができる。例えば、クライアントは、選択されたレプリカ変数についての値更新コマンドを含むインタレストを生成することによって新たな値をプッシュすることができ、ＩＣＮにわたってインタレストを広める。これらのインタレストは、ＶＨＳにおいてレプリカ変数についての現在値を含み、また、変数についての新たな値を含む。現在の変数値及び新たな値は、値更新コマンドの一部として含めることができ、又は、インタレストにおける別個のデータ要素として含めることができる。また、インタレストは、値更新コマンドと、インタレストの名称における（例えば、マーシャリングオブジェクトにおける）、又は、インタレストの名称とは別個のインタレストのペイロードセグメント内の現在及び更新値とを含むことができる。
【００５２】
他の例として、プルプロトコルにおいて、各レプリカホストは、更新された値をクライアントにクエリするインタレストを広めることができる。クライアントが新たな値を生成しない場合、クライアントは、変数についてのレプリカホストから受信した各インタレストについてのコンテンツオブジェクトを返送することができる。このコンテンツオブジェクトは、変数についての新たな値とともにＶＨＳにおけるレプリカ変数についての現在値を含むことができる。
【００５３】
図７は、実施形態にかかる複数のレプリカサーバにわたって複製されたデータの管理を容易とする例示的な装置７００を図示している。装置７００は、有線又は無線通信チャネルを介して互いに通信することができる複数のモジュールを備えることができる。装置７００は、１つ以上の集積回路を使用して実現されることができ、図７に示されるものよりも少ないか又は多いモジュールを含むことができる。さらに、装置７００は、コンピュータシステムに一体化されてもよく、又は、他のコンピュータシステム及び／又は装置と通信することができる別個の装置として実現されることができる。具体的には、装置７００は、通信モジュール７０２と、要求処理モジュール７０４と、信頼できる値検出モジュール７０６と、状態管理モジュール７０８とを備えることができる。
【００５４】
いくつかの実施形態において、通信モジュール７０２は、分布した変数のレプリカにアクセスするためにインタレストを送信及び／又は受信することができる。要求処理モジュール７０４は、変数のレプリカについての現在値を含むコンテンツオブジェクトを返送するために変数アクセスインタレストを処理することができるか又は変数についての新たな値を含む変数更新インタレストを処理することができる。信頼できる値検出モジュール７０６は、信頼できる値が存在するかどうかを判定するためにレプリカ変数のセットからの値を処理することができる。状態管理モジュール７０８は、ローカルレプリカ変数の値が信頼できる値に一致しない場合又は信頼できる値が存在しない場合、変数の状態を前の状態に巻き戻すことができ、ローカル値が信頼できる値に一致する場合、新たな値を含むようにローカル変数の値を更新することができる。
【００５５】
図８は、実施形態にかかる複数のレプリカサーバにわたって複製されたデータの管理を容易とする例示的なコンピュータシステム８０２を図示している。コンピュータシステム８０２は、プロセッサ８０４と、メモリ８０６と、記憶装置８０８とを含む。メモリ８０６は、管理メモリとして機能し且つ１つ以上のメモリプールを記憶するために使用可能な揮発性メモリ（例えば、ＲＡＭ）を含むことができる。さらにまた、コンピュータシステム８０２は、ディスプレイ装置８１０、キーボード８１２及びポインティングデバイス８１４に結合されることができる。記憶装置８０８は、オペレーティングシステム８１６、レプリカ管理システム８１８及びデータ８２８を記憶することができる。
【００５６】
レプリカ管理システム８１８は、コンピュータシステム８０２によって実行されたとき、コンピュータシステム８０２に本開示に記載された方法及び／又はプロセスを実行させることができる命令を含むことができる。具体的には、レプリカ管理システム８１８は、分布した変数のレプリカにアクセスするためにインタレストを送信及び／又は受信するための命令を含むことができる（通信モジュール８２０）。さらに、レプリカ管理システム８１８は、変数のレプリカについての現在値を含むコンテンツオブジェクトを返送するために変数アクセスインタレストを処理するための且つ変数についての新たな値を含む変数更新インタレストを処理するための命令を含むことができる（要求処理モジュール８２２）。
【００５７】
レプリカ管理システム８１８はまた、信頼できる値が存在するかどうかを判定するためにレプリカ変数のセットからの値を処理するための命令を含むことができる（信頼できる値検出モジュール８２４）。さらに、レプリカ管理システム８１８は、ローカルレプリカ変数の値が信頼できる値に一致しない場合又は信頼できる値が存在しない場合に変数の状態を前の状態に巻き戻すための且つローカル値が信頼できる値に一致する場合に新たな値を含むようにローカル変数の値を更新するための命令を含むことができる（状態管理モジュール８２６）。
【００５８】
データ８２８は、本開示に記載された方法及び／又はプロセスによって入力として必要とされるか又は出力として生成される任意のデータを含むことができる。具体的には、データ８２８は、変数のローカルインスタンスについての少なくとも変数履歴、並びに／又は、変数の複数のレプリカインスタンスからの最近の及び／若しくは履歴変数値を記憶することができる。
【００５９】
この詳細な説明に記載されたデータ構造及びコードは、典型的には、コンピュータシステムによって使用するためのコード及び／又はデータを記憶することができる任意の装置又は媒体であり得るコンピュータ読み取り可能な記憶媒体に記憶される。コンピュータ読み取り可能な記憶媒体は、これらに限定されるものではないが、揮発性メモリ、不揮発性メモリ、ディスクドライブ、磁気テープ、ＣＤ（コンパクトディスク）、ＤＶＤ（ディジタル多用途ディスク若しくはディジタルビデオディスク）などの磁気及び光記憶装置、又は、現在知られている若しくは今後開発されるコンピュータ読み取り可能な媒体を記憶することができる他の媒体を含む。
【００６０】
詳細な説明のセクションに記載された方法及びプロセスは、上述したようなコンピュータ読み取り可能な記憶媒体に記憶されることができるコード及び／又はデータとして具体化することができる。コンピュータシステムがコンピュータ読み取り可能な記憶媒体に記憶されたコード及び／又はデータを読み取って実行する場合、コンピュータシステムは、データ構造及びコードとして具現化されてコンピュータ読み取り可能な記憶媒体に記憶された方法及びプロセスを実行する。
【００６１】
さらにまた、上述した方法及びプロセスは、ハードウェアモジュールに含めることができる。例えば、ハードウェアモジュールは、これらに限定されるものではないが、特定用途向け集積回路（ＡＳＩＣ）チップ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、及び、現在知られている若しくは今後開発される他のプログラマブル論理デバイスを含むことができる。ハードウェアモジュールが起動されると、ハードウェアモジュールは、ハードウェアモジュールの内部に含まれる方法及びプロセスを実行する。
【図１】
2016053951.tif 000003
【図２】
2016053951.tif 000004
【図３】
2016053951.tif 000005
【図４】
2016053951.tif 000006
【図５】
2016053951.tif 000007
【図６】
2016053951.tif 000008
【図７】
2016053951.tif 000009
【図８】
2016053951.tif 000010