(57)【要約】【課題】分散キャッシュ内でデータを維持するための方法、システム、およびプログラムを提供すること。【解決手段】オブジェクトのコピーが少なくとも１つのキャッシュ内で維持され、複数のキャッシュがそのオブジェクトの異なるバージョンを有することができ、そのオブジェクトは、変更可能なデータ・ユニットを有することが可能である。各キャッシュ内で維持される各オブジェクトに対する更新情報が維持され、各キャッシュ内の各オブジェクトに対する更新情報は、オブジェクト、そのオブジェクトを含むキャッシュ、およびそのオブジェクト内の各データ・ユニットが変更されたかどうかを示す。あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、そのターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すように更新され、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示す。
2006500669.tif 000002
【特許請求の範囲】
【請求項１】
分散キャッシュ内でデータを維持するための方法であって、
少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュが前記オブジェクトの異なるバージョンを有することができ、前記オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、
各キャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する前記更新情報が、前記オブジェクト、前記オブジェクトを含む前記キャッシュ、および前記オブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、
あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、前記ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内の前記ターゲット・オブジェクトに対する前記更新情報も、前記ターゲット・データ・ユニットが変更されていないことを示すステップと
を含む方法。
【請求項２】
前記データ・ユニットを変更する要求を受け取った後で、
前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記更新情報が、前記ターゲット・データ・ユニットが変更されていることを示す場合、前記ターゲット・キャッシュ内の前記ターゲット・オブジェクト内の前記データ・ユニットに前記受け取った変更を適用するステップ
をさらに実行する、請求項１に記載の方法。
【請求項３】
前記変更を受け取った後で、
前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記更新情報が、前記ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュが前記ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、
別のキャッシュが前記最新のターゲット・データ・ユニットの値を含んでいない場合、前記変更を前記ターゲット・キャッシュ内の前記ターゲット・オブジェクト内の前記データ・ユニットに適用するステップと、
前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、前記ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内の前記ターゲット・オブジェクトに対する前記更新情報も、前記データ・ユニットが変更されていないことを示すステップ
をさらに実行する、請求項１または２に記載の方法。
【請求項４】
前記変更を受け取った後で、
前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記更新情報が、前記ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュが前記ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、
別のキャッシュが前記最新のターゲット・データ・ユニットの値を含む場合、前記最新のターゲット・データ・ユニットの値を前記判断したキャッシュから取り出し、前記ターゲット・キャッシュ内の前記ターゲット・オブジェクトを、前記取り出した最新のターゲット・データ・ユニットの値で更新するステップと
をさらに実行する、請求項１、２、または３に記載の方法。
【請求項５】
前記ターゲット・キャッシュ内の前記ターゲット・オブジェクトを前記最新のターゲット・データ・ユニットの値で更新した後、前記受け取った変更を前記ターゲット・キャッシュ内の前記ターゲット・オブジェクト内の前記データ・ユニットに適用するステップと、
前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、前記ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内の前記ターゲット・オブジェクトに対する前記更新情報も、前記データ・ユニットが変更されていないことを示すステップ
をさらに含む、請求項４に記載の方法。
【請求項６】
中央サーバが、別のキャッシュが前記ターゲット・オブジェクトおよび前記最新のターゲット・データ・ユニットの値を含むかどうかを判断するステップと、前記最新のターゲット・データ・ユニットの値を前記別のキャッシュから取り出すステップとを実行し、
前記中央サーバによって、前記最新のターゲット・データ・ユニットの値を返すステップをさらに含み、前記最新のターゲット・データ・ユニットの値が前記ターゲット・キャッシュに適用された後で前記ターゲット・データ・ユニットに対する変更が前記ターゲット・キャッシュに適用され、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、前記キャッシュ・サーバの結合される前記少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、前記中央サーバが各キャッシュ内の各オブジェクトに対する更新情報を維持する、請求項４に記載の方法。
【請求項７】
各キャッシュ内の各オブジェクトに対する無効化情報を維持するステップであって、あるキャッシュ内のあるオブジェクトに対する前記無効化情報が前記オブジェクト内の各データ・ユニットが有効か無効かを示すステップと、
前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記無効化情報が、前記ターゲット・データ・ユニットが無効であることを示す場合、前記更新情報から、前記ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、
前記最新のターゲット・データ・ユニットの値を前記判断したキャッシュから取り出し、前記ターゲット・キャッシュ内の前記ターゲット・オブジェクトを前記最新のターゲット・データ・ユニットの値で更新するステップと、
前記ターゲット・キャッシュ内の前記ターゲット・オブジェクトを前記最新のターゲット・データ・ユニットの値で更新した後、前記ターゲット・キャッシュ内の前記ターゲット・オブジェクト内の前記データ・ユニットに前記受け取った変更を適用するステップと、
前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記更新情報を、前記ターゲット・データ・ユニットが変更されていることを示すように更新するステップと、
前記ターゲット・オブジェクトを含む各キャッシュに対する前記無効化情報を、前記ターゲット・データ・ユニットが無効であることを示すように更新するステップと、
前記判断したキャッシュ内の前記ターゲット・オブジェクトに対する前記更新情報を、前記データ・ユニットが変更されていないことを示すように更新するステップと
をさらに含む、請求項１ないし６のいずれかに記載の方法。
【請求項８】
中央サーバが、前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記無効化情報が、前記ターゲット・データ・ユニットが無効であることを示すかどうかを判断するステップと、前記ターゲット・オブジェクトおよび前記最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、前記最新のターゲット・データ・ユニットの値を前記判断したキャッシュから取り出すステップとを実行し、
前記中央サーバによって、前記最新のターゲット・データ・ユニットの値を返すステップをさらに含み、前記最新のターゲット・データ・ユニットの値が前記ターゲット・キャッシュ内の前記ターゲット・オブジェクトに適用された後で前記ターゲット・データ・ユニットに対する変更が前記ターゲット・キャッシュに適用される、請求項７に記載の方法。
【請求項９】
複数のキャッシュと、
少なくとも１つのキャッシュ内でオブジェクトのコピーを維持する手段であって、前記キャッシュが前記オブジェクトの異なるバージョンを有することができ、前記オブジェクトが、変更可能なデータ・ユニットを有することが可能である手段と、
各キャッシュ内で維持される各オブジェクトに対する更新情報を維持する手段であって、各キャッシュ内の各オブジェクトに対する前記更新情報が、前記オブジェクト、前記オブジェクトを含む前記キャッシュ、および前記オブジェクト内の各データ・ユニットが変更されたかどうかを示す手段と、
あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記更新情報を、前記ターゲット・データ・ユニットが変更されていることを示すように更新する手段であって、他のどのキャッシュ内の前記ターゲット・オブジェクトに対する前記更新情報も、前記ターゲット・データ・ユニットが変更されていないことを示す手段と
を含む、データを維持するためのシステム。
【請求項１０】
コンピュータ・システムにロードされ、そこで実行されると、請求項１ないし８のいずれか一項に記載の方法の諸ステップをすべて前記コンピュータ・システムに実行させるコンピュータ・プログラム・コードを含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散キャッシュ内でデータを維持するための方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
インターネットのユーザは、しばしば、中央のインターネット・サーバにデータを要求する。インターネット情報プロバイダ（internet information provider）が直面する挑戦課題の１つは、インターネットのトラフィック量とユーザ数が指数関数的なレートで増加する間に、ユーザの要求に対して情報を返すための適時の応答レートを維持するという目標である。この増大する数のユーザにサービスを提供するという必要に対する１つの解決策は、データのコピーを異なる場所で維持し、ユーザのデータ要求を、異なる地理的な場所にあるミラー・サーバを通して処理して、そのミラー・サーバに最も近いユーザにサービスを提供するようにすることである。他の解決案では、データのコピーを維持する分散キャッシュの使用を要するが、そこでは中央ディレクトリを維持して、分散キャッシュ・サーバにあるデータを追跡するようにする。キャッシュ・サーバを組織内の様々なポイントで展開して、クライアント・ユーザの特定のグループにサービスを提供することができる。中央ディレクトリにより、キャッシュ・サーバ内のオブジェクトに関する情報を維持するためのマッピングが提供される。
【０００３】
ＣＲＩＳＰ（Caching and Replication InternetService Performance、インターネット・サービスの性能のためのキャッシュおよび複製）プロジェクトでは、コンテンツをマッピング・サービスによって共用する自律的プロキシ・サーバの集まりとして構造化された、分散プロキシ・キャッシュを利用するインターネット・キャッシュ・サービスが開発されている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
クライアントのＷｅｂアクセス要求を処理するために、分散キャッシュが現在使用されているとはいえ、インターネットのＷｅｂ要求など、クライアントのネットワーク要求を処理するさらに改善された技法を提供することが、当技術分野では引き続き求められている。
【課題を解決するための手段】
【０００５】
第１の態様においては、本発明は、分散キャッシュ内でデータを維持するための方法であって、少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、各キャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示すステップとを含む方法を提供する。
【０００６】
本方法は、好ましくは、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップをさらに実行する。
【０００７】
本方法は、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行する。
【０００８】
本方法は、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行する。
【０００９】
本方法は、好ましくは、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、受け取った変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行する。
【００１０】
好ましくは、中央サーバが、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかを判断するステップと、最新のターゲット・データ・ユニットの値を別のキャッシュから取り出すステップとを実行し、本方法は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００１１】
好ましくは、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報を維持する。
【００１２】
本方法は、好ましくは、各キャッシュ内の各オブジェクトに対する無効化情報を維持するステップであって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示すステップをさらに実行する。
【００１３】
本方法は、好ましくは、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行する。
【００１４】
本方法は、好ましくは、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のターゲット・データ・ユニットに受け取った変更を適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップと、ターゲット・オブジェクトを含む各キャッシュに対する無効化情報を、ターゲット・データ・ユニットが無効であることを示すように更新するステップとをさらに実行する。
【００１５】
本方法は、好ましくは、判断したキャッシュ内のターゲット・オブジェクトに対する更新情報を、データ・ユニットが変更されていないことを示すように更新するステップをさらに実行する。
【００１６】
好ましくは、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断するステップと、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すステップとを実行し、本方法は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００１７】
好ましくは、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報および無効化情報を維持し、本方法は、ターゲット・データ・ユニットへの変更を受け取るターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断するステップと、ターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットを更新するステップとをさらに含む。
【００１８】
本方法は、好ましくは、ターゲット・キャッシュ・サーバによって、ターゲット・データ・ユニットを変更するために要求を中央サーバに送るステップと、中央サーバによって、（ｉ）他のキャッシュが最新のターゲット・データ・ユニットの値をもっていない場合、最新のターゲット・データ・ユニットの値を含まない、または（ｉｉ）別のキャッシュが最新のターゲット・データ・ユニットの値をもっている場合、最新のターゲット・データ・ユニットの値を含む変更を進めるためにメッセージをターゲット・キャッシュ・サーバに返すステップと、ターゲット・キャッシュ・サーバによって、受け取った変更をターゲット・データ・ユニットの値に適用する前に受け取った最新のターゲット・データ・ユニットの値をターゲット・キャッシュ内のターゲット・ページに適用するステップとをさらに含む。
【００１９】
第２の態様では、本発明は、複数のキャッシュと、少なくとも１つのキャッシュ内でオブジェクトのコピーを維持する手段であって、キャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能である手段と、各キャッシュ内で維持される各オブジェクトに対する更新情報を維持する手段であって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示す手段と、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新する手段であって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示す手段とを含む、データを維持するためのシステムを提供する。
【００２０】
システムは、好ましくは、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用する手段をさらに含む。
【００２１】
システムは、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップを実行する手段をさらに含む。
【００２２】
システムは、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとを実行する手段をさらに含む。
【００２３】
システムは、好ましくは、各キャッシュ内の各オブジェクトに対する無効化情報を維持する手段であって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示す手段をさらに含む。
【００２４】
システムは、好ましくは、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断する手段と、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新する手段とをさらに含む。
【００２５】
好ましくは、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断する手段と、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断する手段と、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すことのための手段を実装し、システムは、中央サーバによって、最新のターゲット・データ・ユニットの値を返す手段をさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００２６】
第３の態様では、本発明は、コンピュータ・システムにロードされ、そこで実行されると、第１の態様による方法の諸ステップをすべて実行するコンピュータ・プログラム・コードを含む、コンピュータ・プログラムを提供する。
【００２７】
好ましくは、本発明は、分散キャッシュ内でデータを維持するための製品であって、当該製品が動作を実行させ、この動作が少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、各キャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示すステップとを含む、製品を提供する。
【００２８】
製品は、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップをさらに実行することができる。
【００２９】
製品は、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行することができる。
【００３０】
製品は、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行することができる。
【００３１】
製品は、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、受け取った変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行することができる。
【００３２】
製品は、中央サーバが、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかを判断するステップと、最新のターゲット・データ・ユニットの値を別のキャッシュから取り出すステップとを実行し、この動作は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される、製品とすることができる。
【００３３】
製品は、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報を維持する、製品とすることができる。
【００３４】
製品は、各キャッシュ内の各オブジェクトに対する無効化情報を維持するステップであって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示すステップをさらに実行することができる。
【００３５】
製品は、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行することができる。
【００３６】
製品は、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップと、ターゲット・オブジェクトを含む各キャッシュに対する無効化情報を、ターゲット・データ・ユニットが無効であることを示すように更新するステップとをさらに実行することができる。
【００３７】
製品は、判断したキャッシュ内のターゲット・オブジェクトに対する更新情報を、データ・ユニットが変更されていないことを示すように更新するステップをさらに実行することができる。
【００３８】
製品は、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断するステップと、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すステップとを実行し、この動作が、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される、製品とすることができる。
【００３９】
製品は、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報および無効化情報を維持し、この動作が、ターゲット・データ・ユニットへの変更を受け取るターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断するステップと、ターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットを更新するステップとをさらに含む、製品とすることができる。
【００４０】
製品は、ターゲット・キャッシュ・サーバによって、ターゲット・データ・ユニットを変更するために要求を中央サーバに送るステップと、中央サーバによって、（ｉ）他のキャッシュが最新のターゲット・データ・ユニットの値をもっていない場合、最新のターゲット・データ・ユニットの値を含まない、または（ｉｉ）別のキャッシュが最新のターゲット・データ・ユニットの値をもっている場合、最新のターゲット・データ・ユニットの値を含む変更を進めるためにメッセージをターゲット・キャッシュ・サーバに返すステップと、ターゲット・キャッシュ・サーバによって、受け取った変更をターゲット・データ・ユニットの値に適用する前に受け取った最新のターゲット・データ・ユニットの値をターゲット・キャッシュ内のターゲット・ページに適用するステップとをさらに実行することができる。
【００４１】
分散キャッシュ内でデータを維持するための方法、システム、およびプログラムが提供される。オブジェクトのコピーが少なくとも１つのキャッシュ内で維持され、複数のキャッシュがそのオブジェクトの異なるバージョンを有することができ、そのオブジェクトは、変更可能なデータ・ユニットを有することが可能である。各キャッシュ内で維持される各オブジェクトに対する更新情報が維持され、各キャッシュ内の各オブジェクトに対する更新情報は、オブジェクト、そのオブジェクトを含むキャッシュ、およびそのオブジェクト内の各データ・ユニットが変更されたかどうかを示す。あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、そのターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すように更新され、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示す。
【００４２】
別の実装形態では、データ・ユニットを変更する要求を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合には、受け取った変更はターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用される。
【００４３】
また別の場合、変更を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合には、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかに関して判断を行うことができる。別のキャッシュが最新のターゲット・データ・ユニットの値を含まない場合、変更がターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用され、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報がターゲット・データ・ユニットが変更されていることを示すように更新されるが、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報はデータ・ユニットが変更されていないことを示す。
【００４４】
また別の実装形態では、変更を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合には、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかに関して判断が行われる。別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、その最新のターゲット・データ・ユニットの値が判断されたキャッシュから取り出され、ターゲット・キャッシュ内のターゲット・オブジェクトが取り出された最新のターゲット・データ・ユニットの値で更新される。
【００４５】
また別の場合、各キャッシュ内の各オブジェクトに対して無効化情報を維持することができるが、あるキャッシュ内のあるオブジェクトに対する無効化情報はそのオブジェクト内の各データ・ユニットが有効化無効化を示す。
【００４６】
ここに説明する実装形態により、複数の分散キャッシュにおけるデータ・オブジェクトの分散ストレージを、その分散キャッシュで維持されるデータに関してどのような非整合的なデータ操作も実行を回避するように管理する技法が提供される。
【００４７】
本発明の好ましい一実施形態を、例としてのみ、添付の図面を参照して、次に定義する。
【発明を実施するための最良の形態】
【００４８】
以下の説明では、本明細書の一部であり、本発明のいくつかの実施形態を例示する添付の図面を参照する。本発明の範囲を逸脱することなく、他の実施形態を利用してもよく、構造上および操作上の変更を行ってもよいことが了解されている。
【００４９】
図１に、本発明の諸態様を実装できるネットワーク・コンピューティング環境を図示している。複数のキャッシュ・サーバ２ａ、２ｂ．．．２ｎが中央サーバ４に接続しており、ここで中央サーバ４はインターネット６、または当技術分野に知られる何らかのタイプのネットワークに接続されている。キャッシュ・サーバおよび中央サーバ２ａ、２ｂ．．．２ｎ、４はサーバ・クラス・マシン、ワークステーション、パーソナル・コンピュータなどを含む、当技術分野に知られるどのようなタイプのコンピューティング装置を含んでいてもよい。キャッシュ・サーバ２ａ、２ｂ．．．２ｎはそれぞれ、インターネット６からダウンロードされたＷｅｂページを、メモリ・ページ１０ａ、１０ｂ．．．１０ｎとして保存するキャッシュ８ａ、８ｂ．．．８ｎに結合されている。メモリ・ページ１０ａ、１０ｂ．．．１０ｎのそれぞれは、オブジェクトまたはコンポーネントを含むことができ、これを本明細書ではデータ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、および１６ａ、１６ｂ．．．１６ｎと呼ぶが、ここでデータ・ユニットは変更することが可能である。データ・ユニットは、ワード、フィールド、ライン、フレーム、ページ全体、パラグラフ、オブジェクトなどを含めて、メモリ・ページ１０ａ、１０ｂ．．．１０ｎ内部のどのような度合いの粒度（granularity）も含むことができる。図１には、各キャッシュ８ａ、８ｂ．．．８ｎを、各ページが同じ数のデータ・ユニットを有する、同じ数のページを含むものとして示しているが、ここで説明する実装形態では、各キャッシュ８ａ、８ｂ．．．８ｎは異なる数のメモリ・ページ、および、各メモリ・ページが異なる数のデータ・ユニットを有する、異なるメモリ・ページを維持することができる。異なるキャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページは、たとえばＵＲＬ（UniversalResource Locators）など、異なるインターネット・アドレスにある、異なるインターネットＷｅｂサーバからダウンロードされたＷｅｂページを代表することができる。メモリ・ページは、Ｗｅｂページを同じファイル・フォーマットでも異なるファイル・フォーマットでも格納することができる。メモリ・ページは、ＨＴＭＬ（HypertextMarkup Language、ハイパーテキスト・マークアップ言語）、ＸＭＬ（Extensible Markup Language、拡張マークアップ言語）、テキスト・ファイル、ムービー・ファイル、画像ファイル、サウンド・ファイルなど、当技術分野に知られるどのようなメディア・ファイル・フォーマットのコンテンツも含むことができる。
【００５０】
複数のクライアント・システム１８ａ、１８ｂ、１８ｃ、１８ｄ、１８ｅ、１８ｆ、１８ｇは、ブラウザ２０ａ、２０ｂ、２０ｃ、２０ｄ、２０ｅ、２０ｆ、２０ｇを含んでおり、これらブラウザは、Ｗｅｂページに対する要求を指定されたキャッシュ・サーバ２ａ、２ｂ、２ｎへと通信し、クライアントの要求がキャッシュ８ａ、８ｂ．．．８ｎから処理できるようにする。クライアント・システム１８ａ、１８ｂ．．．１８ｇは、パーソナル・コンピュータ、ラップトップ・コンピュータ、ワークステーション、メインフレーム、電話（telephony）装置、ハンドヘルド・コンピュータ、サーバ、ネットワーク・アプライアンス（network appliance）など、当技術分野に知られるどのようなコンピューティング装置を含んでいてもよく、ブラウザ２０ａ、２０ｂ．．．２０ｇは、インターネット・ブラウザ・プログラム、ムービー・プレイヤー、サウンド・プレイヤーなど、ネットワークを介してファイルを要求し、そのようなファイルからのデータをユーザに対して当技術分野に知られるどのようなメディア・フォーマットにでも変換する能力のあるどのようなプログラムを含んでいてもよい。特定の実装形態では、ブラウザ２０ａ、２０ｂ．．．２０ｇのユーザは、キャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページにあるデータ・ユニット内のデータを変更または更新を行ってもよい。
【００５１】
中央サーバ４は、中央ディレクトリ・サーバ・プログラム２２を含み、キャッシュ・サーバ２ａ、２ｂ．．．２ｎはそれぞれ、キャッシュ関連操作を実行するためのキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎを含む。中央サーバ・ディレクトリ・プログラム２２は、中央ディレクトリ２６を維持するが、これは各キャッシュ８ａ、８ｂ．．．８ｎ内の各メモリ・ページ内にある更新の可能なデータ・ユニットに関する情報を維持している。また、各キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎを維持するが、これはローカル・キャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページ１０ａ、１０ｂ．．．１０ｎ内にある更新の可能なデータ・ユニットに関する情報を維持するエントリを有する。ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリは、同じメモリ・ページに対する中央ディレクトリ２６内のエントリに対応している。
【００５２】
図２には、中央ディレクトリ２６およびローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内で維持されるエントリのフォーマット５０を示している。各エントリ５０は、そのエントリに対応するページのコピー１つをローカル・キャッシュ８ａ、８ｂ．．．８ｎで維持するローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎごとに、１つまたは複数の情報の組（tuple）を含む。各エントリ５０は、特定のメモリ・ページ・アドレス１つに対応しており、ここでそのページのコピー１つを異なるキャッシュ８ａ、８ｂ．．．８ｎが維持してもよい。このページのコピーを有するキャッシュ８ａ、８ｂ．．．８ｎごとに維持される情報の組のそれぞれは、次のものを含む。
【００５３】
キャッシュ・サーバＩＤ：５２ａ．．．５２ｎ：そのエントリによって代表されるメモリ・ページを含む特定のキャッシュ・サーバ２ａ、２ｂ．．．２ｎを示す。この情報は、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリでは自由選択としてよい。
【００５４】
更新ワード（update word）：５４ａ．．．５４ｎ：各ワードは複数のビットを含み、そこでは、この更新ワードが代表するページ内の更新可能なデータ・ユニットごとに１ビットが提供される。各ビットは、キャッシュ８ａ、８ｂ．．．８ｎ内のそのページ内のデータ・ユニットが変更されている場合は「オン」にセットされ、対応するデータ・ユニットが変更されていない場合は「オフ」にセットされる。
【００５５】
無効化ワード（invalidation word）：５６ａ．．．５６ｎ：数ビットからなる１個のワードであり、そこでは、キャッシュ８ａ、８ｂ．．．８ｎ内の各メモリ・ページ１０ａ、１０ｂ．．．１０ｎ内のデータ・ユニットに対応する１ビットが存在する。あるビットが「オン」にセットされると、そのようなビットが代表する、ローカル・キャッシュ８ａ、８ｂ．．．８ｎにあるメモリ・ページ内のそのデータ・ユニットにあるデータが無効または更新済みであることが示され、「オフ」にセットされると、ローカル・キャッシュ８ａ、８ｂ．．．８ｎにあるメモリ・ページ内のそのデータ・ユニットが更新済みでない、または無効でないことが示される。このワードは、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリに対しては自由選択としてよい。
【００５６】
図３および５には、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎ内に実装される論理を示してあり、図４および６には、中央ディレクトリ・サーバ・プログラム２２内に実装される論理を示してある。これらは、メモリ・ページおよびその中にあるデータ・ユニットへのアクセスを調整して、クライアント１８ａ、１８ｂ．．．１８ｇがデータに高速にアクセスできるように、データ整合性を維持するためのものである。
【００５７】
図３および４には、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎおよび中央ディレクトリ・サーバ・プログラム２２がそれぞれ、要求されたＷｅｂページの一部であるメモリ・ページへの読み取りアクセスをクライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇに提供するために実行する動作を示している。図３について述べると、制御は、ブロック１００で、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎがブラウザ２０ａ、２０ｂ．．．２０ｇの１つからあるメモリ・ページに対する要求を受け取ることから始まる。特定の実装形態では、各クライアント１８ａ、１８ｂ．．．１８ｇが、そのページ要求をすべて１つの指定されたキャッシュ・サーバ２ａ、２ｂ．．．２ｎに振り向けることもある。代替方法として、各クライアントは、要求を多くの指定された代替キャッシュ・サーバのうちの１つに振り向けることもできる。要求を受け取るのに応答して、要求されたページが、受け取ったキャッシュ・サーバ２ａ、２ｂ．．．２ｎに結合されたキャッシュ８ａ、８ｂ．．．８ｎ内にある場合は（ブロック１０２）、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎが、要求されたメモリ・ページをキャッシュ８ａ、８ｂ．．．８ｎから返す（ブロック１０４）。そのような実装形態では、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、あるページに対するキャッシュ８ａ、８ｂ．．．８ｎからのアクセスを即時に提供するが、返されるページは、あるデータ・ユニットに対する値の最新のコピーを有していない可能性がある。要求されたページが、接続されている（attached）キャッシュ８ａ、８ｂ．．．８ｎ内にない場合は、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、要求されたページに対する要求を中央サーバ４に送り（ブロック１０６）、制御は図４のブロック１２０に移り、そこでは中央ディレクトリ・サーバ・プログラム２２がその要求を処理する。
【００５８】
図４について述べると、中央ディレクトリ・サーバ・プログラム２２が、メモリ・ページに対する要求を受け取る（ブロック１２０）のに応答して、中央ディレクトリ２６が要求されたページに対するエントリを含んでいるかどうかを判断する（ブロック１２２）。そうでない場合、中央ディレクトリ・サーバ・プログラム２２は、要求されたページをインターネット６からダウンロードする（ブロック１２４）。中央ディレクトリ２６内のエントリ５０が、取り出されたページに対して生成され（ブロック１２６）、ここで生成されたエントリ５０は、キャッシュ・サーバＩＤフィールド５２ａ．．．５２ｎにおいてその要求を発したキャッシュ・サーバ２ａ、２ｂ．．．２ｎを識別し、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビット（図２）が初め（initially）「オフ」にセットされた状態で含む。次いで、取り出されたページおよび生成されたエントリ５０が、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに返されて（ブロック１２８）、ローカル・キャッシュ８ａ、８ｂ．．．８ｎ内にバッファリングされ、受け取った新しいエントリがローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内で維持される。
【００５９】
中央ディレクトリ２６内に要求されたページに対するエントリがあり（ブロック１２２）、かつ、その要求されたページに対して他のどのキャッシュ・サーバ２ａ、２ｂ．．．２ｎもデータ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、および１６ａ、１６ｂ．．．１６ｎを更新していないことを示す、「オン」にセットされたデータ・ユニット・ビット５４ａ．．．５４ｎ（図２）が要求されたページに対する更新ワード５４ａ．．．５４ｎにあるエントリが存在しない場合（ブロック１３０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内の１つの情報の組にあるキャッシュ・サーバＩＤフィールド５２ａ．．．５２ｎにおいて識別される１つのキャッシュ・サーバ２ａ、２ｂ．．．２ｎから、要求されたページにアクセスする（ブロック１３２）。どのキャッシュ・サーバ２ａ、２ｂ．．．２ｎも、維持するデータ・ユニットには更新されたデータがないので、そのページは、エントリ５０において識別されるどのキャッシュ８ａ、８ｂ．．．８ｎからでもアクセスすることができる。中央ディレクトリ・サーバ・プログラム２２は、１つの情報の組を生成し（ブロック１３４）、要求されたページに対するエントリ５０に付加するが、ここで生成される情報の組は、フィールド５２ａ．．．５２ｎにおいて要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎが識別され、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビット５４ａ．．．５４ｎおよび５６ａ．．．５６ｎが「オフ」にセットされた状態で含む。取り出したページおよび生成した情報の組は、要求側キャッシュ・サーバに返される（ブロック１３６）。代替実装形態では、情報の組を送る代わりに、生成した更新ワード５４ａ．．．５４ｎだけを送ってもよいことに注意されたい。
【００６０】
要求されたページに対するエントリ５０内の、別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する１つの情報の組にある更新ワード５４ａ．．．５４ｎ内で、あるデータ・ユニット・ビットが「オン」にセットされている場合（ブロック１３０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内で、その更新ワード５４ａ．．．５４ｎのデータ・ユニット・ビットが最も多く「オン」にセットされている情報の組を決定する（ブロック１３８）。次いで、中央ディレクトリ・サーバ・プログラム２２は、決定された情報の組のフィールド５２ａ．．．５２ｎにおいて識別されるキャッシュ・サーバ２ａ、２ｂ．．．２ｎから、要求されたページを取り出す（ブロック１４０）が、この情報の組は最新のデータ・ユニットの値の数が最大となっている。「オン」にセットされたデータ・ユニット・ビットのある更新ワード５４ａ．．．５４ｎを有するページに対するエントリ５０の他の組のそれぞれについて、中央ディレクトリ・サーバ・プログラム２２は、「オン」にセットされているビットに対応している対応データ・ユニットに、その組のフィールド５２ａ．．．５２ｎにおいて識別されるキャッシュ・サーバ２ａ、２ｂ．．．２ｎからアクセスし、アクセスしたデータを、取り出したページ内の対応データ・ユニットに付加する（ブロック１４２）。取り出したページに対するエントリに対する組は、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎについて生成されて、フィールド５２ａ．．．５２ｎにおいて要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎが識別され、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビットが「オフ」にセットされた状態で含む（ブロック１４４）。次いで、制御はブロック１３６に進んで、取り出したページおよび生成した組（またはその関係のある部分）を、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに返す。
【００６１】
図３および４の論理について述べると、クライアント・ブラウザのページ要求は、まず、ローカル・キャッシュ８ａ、８ｂ．．．８ｎから処理され、次に、ローカル・キャッシュ内にコピーがない場合は、リモート・キャッシュからになる。ローカル・キャッシュまたはリモート・キャッシュ内に要求されたページのコピーがない場合は、そのページはインターネット６からダウンロードされる。レイテンシ・アクセス時間（latency access times）はインターネットを介したダウンロードの場合がもっとも長いため、ダウンロードを、好ましくはローカル・キャッシュから、次いでリモート・キャッシュから、最終的にインターネットから行うことにより、アクセスのパフォーマンスが最適化される。さらに、ある特定の実装形態では、リモート・キャッシュに格納されているページを初めて受け取る場合、返されるページは、すべてのリモート・キャッシュ内で維持されるデータ・ユニットからの最新の値を含む。
【００６２】
図５には、ターゲット・ページと呼ばれるあるページにある、ターゲット・データ・ユニットと呼ばれるデータ・ユニットを変更する、クライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇによる要求を取り扱うための、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎに実装される論理を示している。制御は、ブロック２００で、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎが、あるページ内のあるデータ・ユニットを変更する要求を１つのクライアント１８ａ、１８ｂ．．．１８ｇから受け取ることから始まる。このクライアントは、その要求を受け取るキャッシュ・サーバ２ａ、２ｂ．．．２ｎにページ要求を送信するように割り当てられている。要求されたページに対するローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内の更新ワード内の、このターゲット・データ・ユニットに対応するデータ・ユニット・ビットが、「オン」にセットされている場合（ブロック２０２）、これは、受け取り側キャッシュ・サーバと呼ばれる、その要求を受け取るキャッシュ・サーバ２ａ、２ｂ．．．２ｎが、ターゲット・データ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、１６ａ、１６ｂ．．．１６ｎに対する最新の値を有していることを示すが、その場合、受け取り側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに結合されたキャッシュ８ａ、８ｂ．．．８ｎ内のターゲット・ページ内のデータ・ユニットを、受け取った変更されたデータ・ユニットで更新する（ブロック２０４）。そうではなく、受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎにあるローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内の更新ワード５４ａ．．．５４ｎの、このターゲット・データ・ユニットに対応するビットが「オン」にセットされていない場合、受け取り側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ターゲット・ページ内のターゲット・データ・ユニットを変更する要求を中央サーバ４に送る（ブロック２０６）。
【００６３】
図６には、中央ディレクトリ・サーバ・プログラム２２が、（図５のブロック２０６で）受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎからの要求に応答して、ターゲット・ページ内のターゲット・データ・ユニットを変更するために実行する動作を示している。そのような要求を受け取るのに応答して（ブロック２１０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内の、（フィールド５２ａ．．．５２ｎで示される）受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する組の中の無効化ワード５６ａ．．．５６ｎ内のターゲット・データ・ユニットに対応するデータ・ユニット・ビットが、「無効」を意味する「オン」にセットされているかどうかを判断する（ブロック２１４）。そうである場合、ある別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎがこのターゲット・データ・ユニットを変更していることになる。そのような場合には、中央ディレクトリ・サーバ・プログラム２２が、ターゲット・データ・ユニット・ビットが「オン」にセットされている更新ワード（図２）を有する、その別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対するエントリの中にある組を決定する（ブロック２１６）。このエントリはすなわち、対象となるデータ・ユニットに対する最新のデータを有するキャッシュ・サーバに対するエントリである。次いで、中央ディレクトリ・サーバ・プログラム２２は、ターゲット・データ・ユニットの最新の値を、この決定された組において示される別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎから取り出し（ブロック２１８）、取り出した最新のデータ・ユニットの値を受け取り側キャッシュ・サーバに返す（ブロック２２０）。この決定された組では、別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する更新ワード５４ａ．．．５４ｎ内のターゲット・データ・ユニット・ビットが「オフ」にセットされるが、これは、この更新動作の後、受け取り側キャッシュ・サーバが、ターゲット・データ・ユニットを更新し、そのターゲット・データ・ユニットに対する最新の値を有することになるからである。
【００６４】
受け取り側キャッシュ・サーバに最新のデータの値を提供した後（ブロック２２２より）または受け取り側キャッシュ・サーバが、ターゲット・データ・ユニットに対する最新の値を有していない場合（ブロック２１４の「いいえ」の分岐より）、制御はブロック２２４および２２６に進んで、中央ディレクトリ・サーバ・プログラム２２が、要求側キャッシュ・サーバに対するエントリ内で、更新ワード５４ａ．．．５４ｎ内のターゲット・データ・ユニットに対応するデータ・ユニット・ビットを「オン」に、要求側キャッシュ・サーバに対するエントリ内の無効化ワード５６ａ．．．５６ｎ内のビットを「オフ」にセットする（ブロック２２４）。また、中央ディレクトリ・サーバ・プログラム２２は、他のすべてのキャッシュ・サーバに対する、ターゲット・ページに対するエントリ５０内の組の中の無効化ワード５６ａ．．．５６ｎ内のデータ・ユニット・ビットを「オン」にセットし、このターゲット・ページの他のキャッシュ・サーバが有するコピーにある、ターゲット・データに対するデータは無効であることを示す（ブロック２２６）。次いで、中央ディレクトリ・サーバ・プログラム２２は、メッセージを要求側キャッシュ・サーバに返して（ブロック２２８）、ターゲット・データ・ユニットの変更を進める。このメッセージは、また、明示的にせよ暗黙にせよ、要求側キャッシュ・サーバへのメッセージを含んで、受け取ったページに対する有効化および無効化ワード（validation and invalidation words）内の関係するビットを更新して、要求側キャッシュ・サーバがそのページ内で更新中のデータ・ユニットに対する最新の更新を有することを示すこともできる。代替実装形態で、中央ディレクトリ・サーバ・プログラム２２が、変更された有効化および無効化ワードを返すこともできる。
【００６５】
キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、変更されたターゲット・データ・ユニットを中央ディレクトリ・サーバ・プログラム２２から受け取ると（図５のブロック２５０）、自分のキャッシュ８ａ、８ｂ．．．８ｎ内のターゲット・ページ内のターゲット・データ・ユニットを、受け取った変更されたデータ・ユニットで更新する（ブロック２５２）。要求側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ターゲット・データ・ユニットを変更するメッセージを受け取ると（ブロック２５４）、クライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇから受け取った変更されたデータ・ユニットをキャッシュ８ａ、８ｂ．．．８ｎ内のページ１０ａ、１０ｂ．．．１０ｎに付加する（２５６）。
【００６６】
ここで説明する実装形態により、クライアント・ブラウザによって１つのキャッシュ・サーバにおいて更新が行え、同時に、すべてのキャッシュ・サーバの間でデータ整合性が維持される、分散キャッシュ・サーバ・システムのためのプロトコルが提供される。また、この実装形態により、緩やかなデータ更新整合性が提供されるが、これは、データがブラウザにおいて更新される場合、変更中のデータを含むページのコピーを有するリモート・キャッシュ・サーバに対して、中央ディレクトリ内で無効化データ・ビット（invalidated data bit）だけがセットされるためである。リモート・キャッシュ・サーバには更新についての情報はなにも含まれず、リモート・キャッシュ・サーバおよびクライアントにあるブラウザは、最新のデータ・ユニットの値を有していないローカル・キャッシュからページを読み続けることができる。しかし、最新のデータをもたないキャッシュ・サーバからデータを受け取るブラウザが、データ・ユニットを変更しようと試みた場合には、そのブラウザは更新を適用する前に最新のデータを受け取ることになる。
【００６７】
実装の詳細に関する追加（Additional ImplementationDetails）
分散キャッシュ・サーバ・システムを管理するためのここで説明した技法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを製造するための標準的なプログラム上または工学上の技法あるいはそれらの組合せを使用して、方法、装置または製品として実装することができる。本明細書で使用する「製品」（article of manufacture）という用語は、ハードウェア論理（たとえば、集積回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ、ProgrammableGate Array）、ＡＳＩＣ（Application Specific Integrated Circuit、特定用途向け集積回路）など）、または磁気記憶媒体（たとえば、ハード・ディスク・ドライブ、フロッピー（Ｒ）ディスク、テープなど）、光ストレージ（たとえば、ＣＤ−ＲＯＭ、光ディスクなど）、揮発性および不揮発性記憶装置（たとえば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、ファームウェア、プログラマブル論理など）などのコンピュータ可読媒体で実装されるコードまたは論理を指す。コンピュータ可読媒体内のコードは、プロセッサによってアクセスされ実行される。好ましい実施形態が実装されるコードは、伝送媒体を通してまたはネットワークを介してファイル・サーバから、さらにアクセス可能とすることができる。そのような場合には、コードが実装される製品は、ネットワーク伝送ライン、無線伝送媒体、空間を伝播する信号、電波、赤外線信号などの伝送媒体を含むことができる。したがって、「製品」は、コードが実施される媒体を含むことができる。さらに、「製品」は、コードが実施され（embodied）、処理され、実行されるハードウェアおよびソフトウェアのコンポーネントの組合せを含むことができる。もちろん、この構成に対しては、本発明の範囲を逸脱することなく多くの変更を行うことができ、製品は当技術分野に知られるどのような情報担持媒体（informationbearing medium）を含むこともできることが、当業者には理解されよう。
【００６８】
ここで説明した実装形態では、無効化ワードも更新ワードもどちらも、中央サーバ内の各エントリ内の情報の組ごとに維持される。代替実装形態では、更新ワードだけが維持される。そのような実装形態では、中央サーバは、要求側キャッシュ・サーバが古い（stale）データをもっているかどうかを判断するために、他のキャッシュ・サーバに対する組の中の更新ワードを処理して、他のキャッシュ・サーバのどれかがデータ・ユニットを変更しているかどうかを判断しなければならないはずである。
【００６９】
ここで説明した実装形態では、キャッシュ内で維持されるページは、メモリ・ページを含み、そこでは複数のメモリ・ページに、インターネットを介してあるＵＲＬからアクセスされる単一のＷｅｂページに対するデータが格納されていた。代替方法として、キャッシュ内のメモリ・ページが複数のＷｅｂページを含むのでもよい。
【００７０】
ここで説明した実装形態では、中央サーバおよび中央ディレクトリ・サーバ・プログラムが更新動作を管理して、更新の適用前に要求側キャッシュ・サーバが最新のデータを受け取ることを保証するようにしていた。代替実装形態では、中央サーバおよび中央ディレクトリ・サーバ・プログラムが実行するものとして説明した動作をキャッシュ・サーバ間に分散させて、分散中央ディレクトリを提供するのでもよい。そのような、中央ディレクトリ・サーバ・プログラムの実行する動作が分散している実装形態では、中央サーバで更新ワードおよび無効化ワード内で維持される情報は、キャッシュ・サーバに分散されて、キャッシュ・サーバが分散キャッシュ管理動作を実行することが可能になるはずである。
【００７１】
ここで説明した実装形態では、各キャッシュ・サーバが、キャッシュ・サーバ２ａ、２ｂ．．．２ｎに対するキャッシュ８ａ、８ｂ．．．８ｎ内で維持されるページごとに更新ワードのコピーを維持していた。代替方法として、キャッシュ・サーバが更新ワードを維持せずに、その代わりすべての整合性操作を中央サーバを通して取り扱うのでもよい。
【００７２】
更新ワードおよび無効化ワード内に含まれるものとして説明した情報は、更新および無効化の情報を提供するための、当技術分野に知られる１つまたは複数のどのようなデータ構造でも実装することができる。たとえば、更新および無効化の情報は、１つまたは複数のデータ・オブジェクト、データベース内のデータ・レコード、テーブル内のエントリ、別々のオブジェクトなどで実装することもできる。
【００７３】
キャッシュ内で維持されるページは、クライアントまたはユーザがデータを入力または付加してオブジェクトの内容を変更するどのようなタイプのマルチメディア・オブジェクトを含む、どのようなデータ・オブジェクトのタイプ（data object type）を含んでいてもよい。
【００７４】
ここで説明した実装形態では、キャッシュのそれぞれに結合される、分離したキャッシュ・サーバがある。キャッシュおよびキャッシュ・サーバは、密閉された同じユニット内にあってもよく、または別々のユニット内にあってもよい。代替実装形態では、１つのキャッシュ・サーバを複数のキャッシュに結合し、結合された複数のキャッシュに対する更新情報を維持するのでもよい。
【００７５】
ここで説明した実装形態では、中央サーバがインターネットからページをダウンロードしていた。代替方法として、中央サーバは、インターネット、ＬＡＮ（Local Area Network、構内通信網）、ＷＡＮ（Wide Area Network、広域通信網）、ＳＡＮ（StorageArea Network、ストレージ・エリア・ネットワーク）などのどのようなネットワークからページをダウンロードするのでもよい。さらに、キャッシュ・サーバが直接にインターネットにアクセスしてページをダウンロードするのでもよい。
【００７６】
図３〜６に示した論理では、特定の順序で起きる特定のイベントが示されている。代替実装方法では、特定の動作を、変更または除去を行って、異なる順序で実行してもよい。その上、諸ステップを上述の論理に付加し、やはりここで説明した実装形態に整合するものとすることも可能である。さらに、本明細書で述べた動作が逐次的に起きるのでもよく、特定の動作が並列に処理されるのでもよい。さらにまた、動作は単一の処理装置によっても分散型の処理装置によっても実行することができる。
【００７７】
図７に、図１に示す中央サーバやキャッシュ・サーバなどの、ネットワーク・コンポーネントのコンピュータ・アーキテクチャ３００の一実装形態を示す。アーキテクチャ３００は、プロセッサ３０２（たとえば、マイクロプロセッサ）、メモリ３０４（たとえば、揮発性記憶装置）、およびストレージ３０６（たとえば、磁気ディスク・ドライブ、光ディスク・ドライブ、テープ・ドライブなどの不揮発性ストレージ）を含むことができる。ストレージ３０６は、内蔵（internal）ストレージ装置あるいは接続された（attached）またはネットワーク・アクセス可能なストレージを含むことができる。ストレージ３０６内のプログラムは、メモリ３０４へとロードされ、プロセッサ３０２によって当技術分野に知られる方法で実行される。このアーキテクチャは、さらに、ネットワークとの通信を可能にするネットワーク・カード３０８を含む。入力装置３１０は、プロセッサ３０２にユーザ入力を提供するために使用され、キーボード、マウス、ペン・スタイラス、マイクロフォン、タッチ・スクリーン（touchsensitive display screen）、または当技術分野に知られる他のどのようなアクティベーションまたは入力の機構を含んでいてもよい。出力装置３１２は、プロセッサ３０２、または、ディスプレイ・モニタ、プリンタ、ストレージなどの他のコンポーネントから送信される情報を変換する能力がある。
【図面の簡単な説明】
【００７８】
【図１】本発明の諸態様が実装される分散ネットワーク・コンピューティング環境を示す図である。
【図２】ネットワーク・コンピューティング環境内の異なるキャッシュで維持されるデータに関する情報を維持するためのデータ構造を示す図である。
【図３】本発明の実装形態に従ってオブジェクトまたはページに対する要求を処理する論理を示す図である。
【図４】本発明の実装形態に従ってオブジェクトまたはページをキャッシュに返す論理を示す図である。
【図５】本発明の実装形態に従ってキャッシュ内のオブジェクトを変更する要求を処理する論理を示す図である。
【図６】本発明の実装形態に従ってキャッシュ内のオブジェクトを変更する要求を処理する論理を示す図である。
【図７】キャッシュ・サーバおよび中央サーバ、ならびに他のコンピューティング装置など、ネットワーク環境内のコンピューティング・コンポーネントのアーキテクチャを示す図である。
【図１】
2006500669.tif 000003
【図２】
2006500669.tif 000004
【図３】
2006500669.tif 000005
【図４】
2006500669.tif 000006
【図５】
2006500669.tif 000007
【図６】
2006500669.tif 000008
【図７】
2006500669.tif 000009
【手続補正書】
【提出日】平成16年6月18日(2004.6.18)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散キャッシュ内でデータを維持するための方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
インターネットのユーザは、しばしば、中央のインターネット・サーバにデータを要求する。インターネット情報プロバイダ（internet information provider）が直面する挑戦課題の１つは、インターネットのトラフィック量とユーザ数が指数関数的なレートで増加する間に、ユーザの要求に対して情報を返すための適時の応答レートを維持するという目標である。この増大する数のユーザにサービスを提供するという必要に対する１つの解決策は、データのコピーを異なる場所で維持し、ユーザのデータ要求を、異なる地理的な場所にあるミラー・サーバを通して処理して、そのミラー・サーバに最も近いユーザにサービスを提供するようにすることである。他の解決案では、データのコピーを維持する分散キャッシュの使用を要するが、そこでは中央ディレクトリを維持して、分散キャッシュ・サーバにあるデータを追跡するようにする。キャッシュ・サーバを組織内の様々なポイントで展開して、クライアント・ユーザの特定のグループにサービスを提供することができる。中央ディレクトリにより、キャッシュ・サーバ内のオブジェクトに関する情報を維持するためのマッピングが提供される。
【０００３】
ＣＲＩＳＰ（Caching and Replication Internet
Service Performance、インターネット・サービスの性能のためのキャッシュおよび複製）プロジェクトでは、コンテンツをマッピング・サービスによって共用する自律的プロキシ・サーバの集まりとして構造化された、分散プロキシ・キャッシュを利用するインターネット・キャッシュ・サービスが開発されている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
クライアントのＷｅｂアクセス要求を処理するために、分散キャッシュが現在使用されているとはいえ、インターネットのＷｅｂ要求など、クライアントのネットワーク要求を処理するさらに改善された技法を提供することが、当技術分野では引き続き求められている。
【課題を解決するための手段】
【０００５】
第１の態様においては、本発明は、分散キャッシュ内でデータを維持するための方法であって、少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、各キャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示すステップとを含む方法を提供する。
【０００６】
本方法は、好ましくは、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップをさらに実行する。
【０００７】
本方法は、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行する。
【０００８】
本方法は、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行する。
【０００９】
本方法は、好ましくは、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、受け取った変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行する。
【００１０】
好ましくは、中央サーバが、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかを判断するステップと、最新のターゲット・データ・ユニットの値を別のキャッシュから取り出すステップとを実行し、本方法は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用され、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報を維持する。
【００１１】
本方法は、好ましくは、各キャッシュ内の各オブジェクトに対する無効化情報を維持するステップであって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示すステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新するステップと、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のターゲット・データ・ユニットに受け取った変更を適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップと、ターゲット・オブジェクトを含む各キャッシュに対する無効化情報を、ターゲット・データ・ユニットが無効であることを示すように更新するステップと、判断したキャッシュ内のターゲット・オブジェクトに対する更新情報を、データ・ユニットが変更されていないことを示すように更新するステップとをさらに含む。
【００１２】
好ましくは、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断するステップと、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すステップとを実行し、本方法は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００１３】
好ましくは、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報および無効化情報を維持し、本方法は、ターゲット・データ・ユニットへの変更を受け取るターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断するステップと、ターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットを更新するステップとをさらに含む。
【００１４】
本方法は、好ましくは、ターゲット・キャッシュ・サーバによって、ターゲット・データ・ユニットを変更するために要求を中央サーバに送るステップと、中央サーバによって、（ｉ）他のキャッシュが最新のターゲット・データ・ユニットの値をもっていない場合、最新のターゲット・データ・ユニットの値を含まない、または（ｉｉ）別のキャッシュが最新のターゲット・データ・ユニットの値をもっている場合、最新のターゲット・データ・ユニットの値を含む変更を進めるためにメッセージをターゲット・キャッシュ・サーバに返すステップと、ターゲット・キャッシュ・サーバによって、受け取った変更をターゲット・データ・ユニットの値に適用する前に受け取った最新のターゲット・データ・ユニットの値をターゲット・キャッシュ内のターゲット・ページに適用するステップとをさらに含む。
【００１５】
第２の態様では、本発明は、複数のキャッシュと、少なくとも１つのキャッシュ内でオブジェクトのコピーを維持する手段であって、キャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能である手段と、各キャッシュ内で維持される各オブジェクトに対する更新情報を維持する手段であって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示す手段と、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新する手段であって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示す手段とを含む、データを維持するためのシステムを提供する。
【００１６】
システムは、好ましくは、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用する手段をさらに含む。
【００１７】
システムは、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップを実行する手段をさらに含む。
【００１８】
システムは、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとを実行する手段をさらに含む。
【００１９】
システムは、好ましくは、各キャッシュ内の各オブジェクトに対する無効化情報を維持する手段であって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示す手段をさらに含む。
【００２０】
システムは、好ましくは、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断する手段と、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新する手段とをさらに含む。
【００２１】
好ましくは、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断する手段と、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断する手段と、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すことのための手段を実装し、システムは、中央サーバによって、最新のターゲット・データ・ユニットの値を返す手段をさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００２２】
第３の態様では、本発明は、コンピュータ・システムにロードされ、そこで実行されると、第１の態様による方法の諸ステップすべてを前記コンピュータ・システムに実行させるコンピュータ・プログラム・コードを含む、コンピュータ・プログラムを提供する。
【００２３】
好ましくは、本発明は、分散キャッシュ内でデータを維持するための製品であって、当該製品が動作を実行させ、この動作が少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、各キャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示すステップとを含む、製品を提供する。
【００２４】
製品は、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップをさらに実行することができる。
【００２５】
製品は、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行することができる。
【００２６】
製品は、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行することができる。
【００２７】
製品は、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、受け取った変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行することができる。
【００２８】
製品は、中央サーバが、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかを判断するステップと、最新のターゲット・データ・ユニットの値を別のキャッシュから取り出すステップとを実行し、この動作は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される、製品とすることができる。
【００２９】
製品は、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報を維持する、製品とすることができる。
【００３０】
製品は、各キャッシュ内の各オブジェクトに対する無効化情報を維持するステップであって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示すステップをさらに実行することができる。
【００３１】
製品は、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行することができる。
【００３２】
製品は、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップと、ターゲット・オブジェクトを含む各キャッシュに対する無効化情報を、ターゲット・データ・ユニットが無効であることを示すように更新するステップとをさらに実行することができる。
【００３３】
製品は、判断したキャッシュ内のターゲット・オブジェクトに対する更新情報を、データ・ユニットが変更されていないことを示すように更新するステップをさらに実行することができる。
【００３４】
製品は、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断するステップと、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すステップとを実行し、この動作が、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される、製品とすることができる。
【００３５】
製品は、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報および無効化情報を維持し、この動作が、ターゲット・データ・ユニットへの変更を受け取るターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断するステップと、ターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットを更新するステップとをさらに含む、製品とすることができる。
【００３６】
製品は、ターゲット・キャッシュ・サーバによって、ターゲット・データ・ユニットを変更するために要求を中央サーバに送るステップと、中央サーバによって、（ｉ）他のキャッシュが最新のターゲット・データ・ユニットの値をもっていない場合、最新のターゲット・データ・ユニットの値を含まない、または（ｉｉ）別のキャッシュが最新のターゲット・データ・ユニットの値をもっている場合、最新のターゲット・データ・ユニットの値を含む変更を進めるためにメッセージをターゲット・キャッシュ・サーバに返すステップと、ターゲット・キャッシュ・サーバによって、受け取った変更をターゲット・データ・ユニットの値に適用する前に受け取った最新のターゲット・データ・ユニットの値をターゲット・キャッシュ内のターゲット・ページに適用するステップとをさらに実行することができる。
【００３７】
分散キャッシュ内でデータを維持するための方法、システム、およびプログラムが提供される。オブジェクトのコピーが少なくとも１つのキャッシュ内で維持され、複数のキャッシュがそのオブジェクトの異なるバージョンを有することができ、そのオブジェクトは、変更可能なデータ・ユニットを有することが可能である。各キャッシュ内で維持される各オブジェクトに対する更新情報が維持され、各キャッシュ内の各オブジェクトに対する更新情報は、オブジェクト、そのオブジェクトを含むキャッシュ、およびそのオブジェクト内の各データ・ユニットが変更されたかどうかを示す。あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、そのターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すように更新され、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示す。
【００３８】
別の実装形態では、データ・ユニットを変更する要求を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合には、受け取った変更はターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用される。
【００３９】
また別の場合、変更を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合には、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかに関して判断を行うことができる。別のキャッシュが最新のターゲット・データ・ユニットの値を含まない場合、変更がターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用され、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報がターゲット・データ・ユニットが変更されていることを示すように更新されるが、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報はデータ・ユニットが変更されていないことを示す。
【００４０】
また別の実装形態では、変更を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合には、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかに関して判断が行われる。別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、その最新のターゲット・データ・ユニットの値が判断されたキャッシュから取り出され、ターゲット・キャッシュ内のターゲット・オブジェクトが取り出された最新のターゲット・データ・ユニットの値で更新される。
【００４１】
また別の場合、各キャッシュ内の各オブジェクトに対して無効化情報を維持することができるが、あるキャッシュ内のあるオブジェクトに対する無効化情報はそのオブジェクト内の各データ・ユニットが有効化無効化を示す。
【００４２】
ここに説明する実装形態により、複数の分散キャッシュにおけるデータ・オブジェクトの分散ストレージを、その分散キャッシュで維持されるデータに関してどのような非整合的なデータ操作も実行を回避するように管理する技法が提供される。
【００４３】
本発明の好ましい一実施形態を、例としてのみ、添付の図面を参照して、次に定義する。
【発明を実施するための最良の形態】
【００４４】
以下の説明では、本明細書の一部であり、本発明のいくつかの実施形態を例示する添付の図面を参照する。本発明の範囲を逸脱することなく、他の実施形態を利用してもよく、構造上および操作上の変更を行ってもよいことが了解されている。
【００４５】
図１に、本発明の諸態様を実装できるネットワーク・コンピューティング環境を図示している。複数のキャッシュ・サーバ２ａ、２ｂ．．．２ｎが中央サーバ４に接続しており、ここで中央サーバ４はインターネット６、または当技術分野に知られる何らかのタイプのネットワークに接続されている。キャッシュ・サーバおよび中央サーバ２ａ、２ｂ．．．２ｎ、４はサーバ・クラス・マシン、ワークステーション、パーソナル・コンピュータなどを含む、当技術分野に知られるどのようなタイプのコンピューティング装置を含んでいてもよい。キャッシュ・サーバ２ａ、２ｂ．．．２ｎはそれぞれ、インターネット６からダウンロードされたＷｅｂページを、メモリ・ページ１０ａ、１０ｂ．．．１０ｎとして保存するキャッシュ８ａ、８ｂ．．．８ｎに結合されている。メモリ・ページ１０ａ、１０ｂ．．．１０ｎのそれぞれは、オブジェクトまたはコンポーネントを含むことができ、これを本明細書ではデータ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、および１６ａ、１６ｂ．．．１６ｎと呼ぶが、ここでデータ・ユニットは変更することが可能である。データ・ユニットは、ワード、フィールド、ライン、フレーム、ページ全体、パラグラフ、オブジェクトなどを含めて、メモリ・ページ１０ａ、１０ｂ．．．１０ｎ内部のどのような度合いの粒度（granularity）も含むことができる。図１には、各キャッシュ８ａ、８ｂ．．．８ｎを、各ページが同じ数のデータ・ユニットを有する、同じ数のページを含むものとして示しているが、ここで説明する実装形態では、各キャッシュ８ａ、８ｂ．．．８ｎは異なる数のメモリ・ページ、および、各メモリ・ページが異なる数のデータ・ユニットを有する、異なるメモリ・ページを維持することができる。異なるキャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページは、たとえばＵＲＬ（Universal
Resource Locators）など、異なるインターネット・アドレスにある、異なるインターネットＷｅｂサーバからダウンロードされたＷｅｂページを代表することができる。メモリ・ページは、Ｗｅｂページを同じファイル・フォーマットでも異なるファイル・フォーマットでも格納することができる。メモリ・ページは、ＨＴＭＬ（Hypertext
Markup Language、ハイパーテキスト・マークアップ言語）、ＸＭＬ（Extensible Markup Language、拡張マークアップ言語）、テキスト・ファイル、ムービー・ファイル、画像ファイル、サウンド・ファイルなど、当技術分野に知られるどのようなメディア・ファイル・フォーマットのコンテンツも含むことができる。
【００４６】
複数のクライアント・システム１８ａ、１８ｂ、１８ｃ、１８ｄ、１８ｅ、１８ｆ、１８ｇは、ブラウザ２０ａ、２０ｂ、２０ｃ、２０ｄ、２０ｅ、２０ｆ、２０ｇを含んでおり、これらブラウザは、Ｗｅｂページに対する要求を指定されたキャッシュ・サーバ２ａ、２ｂ、２ｎへと通信し、クライアントの要求がキャッシュ８ａ、８ｂ．．．８ｎから処理できるようにする。クライアント・システム１８ａ、１８ｂ．．．１８ｇは、パーソナル・コンピュータ、ラップトップ・コンピュータ、ワークステーション、メインフレーム、電話（telephony）装置、ハンドヘルド・コンピュータ、サーバ、ネットワーク・アプライアンス（network appliance）など、当技術分野に知られるどのようなコンピューティング装置を含んでいてもよく、ブラウザ２０ａ、２０ｂ．．．２０ｇは、インターネット・ブラウザ・プログラム、ムービー・プレイヤー、サウンド・プレイヤーなど、ネットワークを介してファイルを要求し、そのようなファイルからのデータをユーザに対して当技術分野に知られるどのようなメディア・フォーマットにでも変換する能力のあるどのようなプログラムを含んでいてもよい。特定の実装形態では、ブラウザ２０ａ、２０ｂ．．．２０ｇのユーザは、キャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページにあるデータ・ユニット内のデータを変更または更新を行ってもよい。
【００４７】
中央サーバ４は、中央ディレクトリ・サーバ・プログラム２２を含み、キャッシュ・サーバ２ａ、２ｂ．．．２ｎはそれぞれ、キャッシュ関連操作を実行するためのキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎを含む。中央サーバ・ディレクトリ・プログラム２２は、中央ディレクトリ２６を維持するが、これは各キャッシュ８ａ、８ｂ．．．８ｎ内の各メモリ・ページ内にある更新の可能なデータ・ユニットに関する情報を維持している。また、各キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎを維持するが、これはローカル・キャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページ１０ａ、１０ｂ．．．１０ｎ内にある更新の可能なデータ・ユニットに関する情報を維持するエントリを有する。ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリは、同じメモリ・ページに対する中央ディレクトリ２６内のエントリに対応している。
【００４８】
図２には、中央ディレクトリ２６およびローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内で維持されるエントリのフォーマット５０を示している。各エントリ５０は、そのエントリに対応するページのコピー１つをローカル・キャッシュ８ａ、８ｂ．．．８ｎで維持するローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎごとに、１つまたは複数の情報の組（tuple）を含む。各エントリ５０は、特定のメモリ・ページ・アドレス１つに対応しており、ここでそのページのコピー１つを異なるキャッシュ８ａ、８ｂ．．．８ｎが維持してもよい。このページのコピーを有するキャッシュ８ａ、８ｂ．．．８ｎごとに維持される情報の組のそれぞれは、次のものを含む。
【００４９】
キャッシュ・サーバＩＤ：５２ａ．．．５２ｎ：そのエントリによって代表されるメモリ・ページを含む特定のキャッシュ・サーバ２ａ、２ｂ．．．２ｎを示す。この情報は、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリでは自由選択としてよい。
【００５０】
更新ワード（update word）：５４ａ．．．５４ｎ：各ワードは複数のビットを含み、そこでは、この更新ワードが代表するページ内の更新可能なデータ・ユニットごとに１ビットが提供される。各ビットは、キャッシュ８ａ、８ｂ．．．８ｎ内のそのページ内のデータ・ユニットが変更されている場合は「オン」にセットされ、対応するデータ・ユニットが変更されていない場合は「オフ」にセットされる。
【００５１】
無効化ワード（invalidation word）：５６ａ．．．５６ｎ：数ビットからなる１個のワードであり、そこでは、キャッシュ８ａ、８ｂ．．．８ｎ内の各メモリ・ページ１０ａ、１０ｂ．．．１０ｎ内のデータ・ユニットに対応する１ビットが存在する。あるビットが「オン」にセットされると、そのようなビットが代表する、ローカル・キャッシュ８ａ、８ｂ．．．８ｎにあるメモリ・ページ内のそのデータ・ユニットにあるデータが無効または更新済みであることが示され、「オフ」にセットされると、ローカル・キャッシュ８ａ、８ｂ．．．８ｎにあるメモリ・ページ内のそのデータ・ユニットが更新済みでない、または無効でないことが示される。このワードは、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリに対しては自由選択としてよい。
【００５２】
図３および５には、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎ内に実装される論理を示してあり、図４および６には、中央ディレクトリ・サーバ・プログラム２２内に実装される論理を示してある。これらは、メモリ・ページおよびその中にあるデータ・ユニットへのアクセスを調整して、クライアント１８ａ、１８ｂ．．．１８ｇがデータに高速にアクセスできるように、データ整合性を維持するためのものである。
【００５３】
図３および４には、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎおよび中央ディレクトリ・サーバ・プログラム２２がそれぞれ、要求されたＷｅｂページの一部であるメモリ・ページへの読み取りアクセスをクライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇに提供するために実行する動作を示している。図３について述べると、制御は、ブロック１００で、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎがブラウザ２０ａ、２０ｂ．．．２０ｇの１つからあるメモリ・ページに対する要求を受け取ることから始まる。特定の実装形態では、各クライアント１８ａ、１８ｂ．．．１８ｇが、そのページ要求をすべて１つの指定されたキャッシュ・サーバ２ａ、２ｂ．．．２ｎに振り向けることもある。代替方法として、各クライアントは、要求を多くの指定された代替キャッシュ・サーバのうちの１つに振り向けることもできる。要求を受け取るのに応答して、要求されたページが、受け取ったキャッシュ・サーバ２ａ、２ｂ．．．２ｎに結合されたキャッシュ８ａ、８ｂ．．．８ｎ内にある場合は（ブロック１０２）、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎが、要求されたメモリ・ページをキャッシュ８ａ、８ｂ．．．８ｎから返す（ブロック１０４）。そのような実装形態では、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、あるページに対するキャッシュ８ａ、８ｂ．．．８ｎからのアクセスを即時に提供するが、返されるページは、あるデータ・ユニットに対する値の最新のコピーを有していない可能性がある。要求されたページが、接続されている（attached）キャッシュ８ａ、８ｂ．．．８ｎ内にない場合は、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、要求されたページに対する要求を中央サーバ４に送り（ブロック１０６）、制御は図４のブロック１２０に移り、そこでは中央ディレクトリ・サーバ・プログラム２２がその要求を処理する。
【００５４】
図４について述べると、中央ディレクトリ・サーバ・プログラム２２が、メモリ・ページに対する要求を受け取る（ブロック１２０）のに応答して、中央ディレクトリ２６が要求されたページに対するエントリを含んでいるかどうかを判断する（ブロック１２２）。そうでない場合、中央ディレクトリ・サーバ・プログラム２２は、要求されたページをインターネット６からダウンロードする（ブロック１２４）。中央ディレクトリ２６内のエントリ５０が、取り出されたページに対して生成され（ブロック１２６）、ここで生成されたエントリ５０は、キャッシュ・サーバＩＤフィールド５２ａ．．．５２ｎにおいてその要求を発したキャッシュ・サーバ２ａ、２ｂ．．．２ｎを識別し、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビット（図２）が初め（initially）「オフ」にセットされた状態で含む。次いで、取り出されたページおよび生成されたエントリ５０が、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに返されて（ブロック１２８）、ローカル・キャッシュ８ａ、８ｂ．．．８ｎ内にバッファリングされ、受け取った新しいエントリがローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内で維持される。
【００５５】
中央ディレクトリ２６内に要求されたページに対するエントリがあり（ブロック１２２）、かつ、その要求されたページに対して他のどのキャッシュ・サーバ２ａ、２ｂ．．．２ｎもデータ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、および１６ａ、１６ｂ．．．１６ｎを更新していないことを示す、「オン」にセットされたデータ・ユニット・ビット５４ａ．．．５４ｎ（図２）が要求されたページに対する更新ワード５４ａ．．．５４ｎにあるエントリが存在しない場合（ブロック１３０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内の１つの情報の組にあるキャッシュ・サーバＩＤフィールド５２ａ．．．５２ｎにおいて識別される１つのキャッシュ・サーバ２ａ、２ｂ．．．２ｎから、要求されたページにアクセスする（ブロック１３２）。どのキャッシュ・サーバ２ａ、２ｂ．．．２ｎも、維持するデータ・ユニットには更新されたデータがないので、そのページは、エントリ５０において識別されるどのキャッシュ８ａ、８ｂ．．．８ｎからでもアクセスすることができる。中央ディレクトリ・サーバ・プログラム２２は、１つの情報の組を生成し（ブロック１３４）、要求されたページに対するエントリ５０に付加するが、ここで生成される情報の組は、フィールド５２ａ．．．５２ｎにおいて要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎが識別され、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビット５４ａ．．．５４ｎおよび５６ａ．．．５６ｎが「オフ」にセットされた状態で含む。取り出したページおよび生成した情報の組は、要求側キャッシュ・サーバに返される（ブロック１３６）。代替実装形態では、情報の組を送る代わりに、生成した更新ワード５４ａ．．．５４ｎだけを送ってもよいことに注意されたい。
【００５６】
要求されたページに対するエントリ５０内の、別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する１つの情報の組にある更新ワード５４ａ．．．５４ｎ内で、あるデータ・ユニット・ビットが「オン」にセットされている場合（ブロック１３０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内で、その更新ワード５４ａ．．．５４ｎのデータ・ユニット・ビットが最も多く「オン」にセットされている情報の組を決定する（ブロック１３８）。次いで、中央ディレクトリ・サーバ・プログラム２２は、決定された情報の組のフィールド５２ａ．．．５２ｎにおいて識別されるキャッシュ・サーバ２ａ、２ｂ．．．２ｎから、要求されたページを取り出す（ブロック１４０）が、この情報の組は最新のデータ・ユニットの値の数が最大となっている。「オン」にセットされたデータ・ユニット・ビットのある更新ワード５４ａ．．．５４ｎを有するページに対するエントリ５０の他の組のそれぞれについて、中央ディレクトリ・サーバ・プログラム２２は、「オン」にセットされているビットに対応している対応データ・ユニットに、その組のフィールド５２ａ．．．５２ｎにおいて識別されるキャッシュ・サーバ２ａ、２ｂ．．．２ｎからアクセスし、アクセスしたデータを、取り出したページ内の対応データ・ユニットに付加する（ブロック１４２）。取り出したページに対するエントリに対する組は、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎについて生成されて、フィールド５２ａ．．．５２ｎにおいて要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎが識別され、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビットが「オフ」にセットされた状態で含む（ブロック１４４）。次いで、制御はブロック１３６に進んで、取り出したページおよび生成した組（またはその関係のある部分）を、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに返す。
【００５７】
図３および４の論理について述べると、クライアント・ブラウザのページ要求は、まず、ローカル・キャッシュ８ａ、８ｂ．．．８ｎから処理され、次に、ローカル・キャッシュ内にコピーがない場合は、リモート・キャッシュからになる。ローカル・キャッシュまたはリモート・キャッシュ内に要求されたページのコピーがない場合は、そのページはインターネット６からダウンロードされる。レイテンシ・アクセス時間（latency access times）はインターネットを介したダウンロードの場合がもっとも長いため、ダウンロードを、好ましくはローカル・キャッシュから、次いでリモート・キャッシュから、最終的にインターネットから行うことにより、アクセスのパフォーマンスが最適化される。さらに、ある特定の実装形態では、リモート・キャッシュに格納されているページを初めて受け取る場合、返されるページは、すべてのリモート・キャッシュ内で維持されるデータ・ユニットからの最新の値を含む。
【００５８】
図５には、ターゲット・ページと呼ばれるあるページにある、ターゲット・データ・ユニットと呼ばれるデータ・ユニットを変更する、クライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇによる要求を取り扱うための、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎに実装される論理を示している。制御は、ブロック２００で、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎが、あるページ内のあるデータ・ユニットを変更する要求を１つのクライアント１８ａ、１８ｂ．．．１８ｇから受け取ることから始まる。このクライアントは、その要求を受け取るキャッシュ・サーバ２ａ、２ｂ．．．２ｎにページ要求を送信するように割り当てられている。要求されたページに対するローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内の更新ワード内の、このターゲット・データ・ユニットに対応するデータ・ユニット・ビットが、「オン」にセットされている場合（ブロック２０２）、これは、受け取り側キャッシュ・サーバと呼ばれる、その要求を受け取るキャッシュ・サーバ２ａ、２ｂ．．．２ｎが、ターゲット・データ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、１６ａ、１６ｂ．．．１６ｎに対する最新の値を有していることを示すが、その場合、受け取り側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに結合されたキャッシュ８ａ、８ｂ．．．８ｎ内のターゲット・ページ内のデータ・ユニットを、受け取った変更されたデータ・ユニットで更新する（ブロック２０４）。そうではなく、受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎにあるローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内の更新ワード５４ａ．．．５４ｎの、このターゲット・データ・ユニットに対応するビットが「オン」にセットされていない場合、受け取り側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ターゲット・ページ内のターゲット・データ・ユニットを変更する要求を中央サーバ４に送る（ブロック２０６）。
【００５９】
図６には、中央ディレクトリ・サーバ・プログラム２２が、（図５のブロック２０６で）受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎからの要求に応答して、ターゲット・ページ内のターゲット・データ・ユニットを変更するために実行する動作を示している。そのような要求を受け取るのに応答して（ブロック２１０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内の、（フィールド５２ａ．．．５２ｎで示される）受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する組の中の無効化ワード５６ａ．．．５６ｎ内のターゲット・データ・ユニットに対応するデータ・ユニット・ビットが、「無効」を意味する「オン」にセットされているかどうかを判断する（ブロック２１４）。そうである場合、ある別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎがこのターゲット・データ・ユニットを変更していることになる。そのような場合には、中央ディレクトリ・サーバ・プログラム２２が、ターゲット・データ・ユニット・ビットが「オン」にセットされている更新ワード（図２）を有する、その別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対するエントリの中にある組を決定する（ブロック２１６）。このエントリはすなわち、対象となるデータ・ユニットに対する最新のデータを有するキャッシュ・サーバに対するエントリである。次いで、中央ディレクトリ・サーバ・プログラム２２は、ターゲット・データ・ユニットの最新の値を、この決定された組において示される別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎから取り出し（ブロック２１８）、取り出した最新のデータ・ユニットの値を受け取り側キャッシュ・サーバに返す（ブロック２２０）。この決定された組では、別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する更新ワード５４ａ．．．５４ｎ内のターゲット・データ・ユニット・ビットが「オフ」にセットされるが、これは、この更新動作の後、受け取り側キャッシュ・サーバが、ターゲット・データ・ユニットを更新し、そのターゲット・データ・ユニットに対する最新の値を有することになるからである。
【００６０】
受け取り側キャッシュ・サーバに最新のデータの値を提供した後（ブロック２２２より）または受け取り側キャッシュ・サーバが、ターゲット・データ・ユニットに対する最新の値を有していない場合（ブロック２１４の「いいえ」の分岐より）、制御はブロック２２４および２２６に進んで、中央ディレクトリ・サーバ・プログラム２２が、要求側キャッシュ・サーバに対するエントリ内で、更新ワード５４ａ．．．５４ｎ内のターゲット・データ・ユニットに対応するデータ・ユニット・ビットを「オン」に、要求側キャッシュ・サーバに対するエントリ内の無効化ワード５６ａ．．．５６ｎ内のビットを「オフ」にセットする（ブロック２２４）。また、中央ディレクトリ・サーバ・プログラム２２は、他のすべてのキャッシュ・サーバに対する、ターゲット・ページに対するエントリ５０内の組の中の無効化ワード５６ａ．．．５６ｎ内のデータ・ユニット・ビットを「オン」にセットし、このターゲット・ページの他のキャッシュ・サーバが有するコピーにある、ターゲット・データに対するデータは無効であることを示す（ブロック２２６）。次いで、中央ディレクトリ・サーバ・プログラム２２は、メッセージを要求側キャッシュ・サーバに返して（ブロック２２８）、ターゲット・データ・ユニットの変更を進める。このメッセージは、また、明示的にせよ暗黙にせよ、要求側キャッシュ・サーバへのメッセージを含んで、受け取ったページに対する有効化および無効化ワード（validation and invalidation words）内の関係するビットを更新して、要求側キャッシュ・サーバがそのページ内で更新中のデータ・ユニットに対する最新の更新を有することを示すこともできる。代替実装形態で、中央ディレクトリ・サーバ・プログラム２２が、変更された有効化および無効化ワードを返すこともできる。
【００６１】
キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、変更されたターゲット・データ・ユニットを中央ディレクトリ・サーバ・プログラム２２から受け取ると（図５のブロック２５０）、自分のキャッシュ８ａ、８ｂ．．．８ｎ内のターゲット・ページ内のターゲット・データ・ユニットを、受け取った変更されたデータ・ユニットで更新する（ブロック２５２）。要求側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ターゲット・データ・ユニットを変更するメッセージを受け取ると（ブロック２５４）、クライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇから受け取った変更されたデータ・ユニットをキャッシュ８ａ、８ｂ．．．８ｎ内のページ１０ａ、１０ｂ．．．１０ｎに付加する（２５６）。
【００６２】
ここで説明する実装形態により、クライアント・ブラウザによって１つのキャッシュ・サーバにおいて更新が行え、同時に、すべてのキャッシュ・サーバの間でデータ整合性が維持される、分散キャッシュ・サーバ・システムのためのプロトコルが提供される。また、この実装形態により、緩やかなデータ更新整合性が提供されるが、これは、データがブラウザにおいて更新される場合、変更中のデータを含むページのコピーを有するリモート・キャッシュ・サーバに対して、中央ディレクトリ内で無効化データ・ビット（invalidated data bit）だけがセットされるためである。リモート・キャッシュ・サーバには更新についての情報はなにも含まれず、リモート・キャッシュ・サーバおよびクライアントにあるブラウザは、最新のデータ・ユニットの値を有していないローカル・キャッシュからページを読み続けることができる。しかし、最新のデータをもたないキャッシュ・サーバからデータを受け取るブラウザが、データ・ユニットを変更しようと試みた場合には、そのブラウザは更新を適用する前に最新のデータを受け取ることになる。
【００６３】
実装の詳細に関する追加（Additional Implementation
Details）
分散キャッシュ・サーバ・システムを管理するためのここで説明した技法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを製造するための標準的なプログラム上または工学上の技法あるいはそれらの組合せを使用して、方法、装置または製品として実装することができる。本明細書で使用する「製品」（article of manufacture）という用語は、ハードウェア論理（たとえば、集積回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ、Programmable
Gate Array）、ＡＳＩＣ（Application Specific Integrated Circuit、特定用途向け集積回路）など）、または磁気記憶媒体（たとえば、ハード・ディスク・ドライブ、フロッピー（Ｒ）ディスク、テープなど）、光ストレージ（たとえば、ＣＤ−ＲＯＭ、光ディスクなど）、揮発性および不揮発性記憶装置（たとえば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、ファームウェア、プログラマブル論理など）などのコンピュータ可読媒体で実装されるコードまたは論理を指す。コンピュータ可読媒体内のコードは、プロセッサによってアクセスされ実行される。好ましい実施形態が実装されるコードは、伝送媒体を通してまたはネットワークを介してファイル・サーバから、さらにアクセス可能とすることができる。そのような場合には、コードが実装される製品は、ネットワーク伝送ライン、無線伝送媒体、空間を伝播する信号、電波、赤外線信号などの伝送媒体を含むことができる。したがって、「製品」は、コードが実施される媒体を含むことができる。さらに、「製品」は、コードが実施され（embodied）、処理され、実行されるハードウェアおよびソフトウェアのコンポーネントの組合せを含むことができる。もちろん、この構成に対しては、本発明の範囲を逸脱することなく多くの変更を行うことができ、製品は当技術分野に知られるどのような情報担持媒体（information
bearing medium）を含むこともできることが、当業者には理解されよう。
【００６４】
ここで説明した実装形態では、無効化ワードも更新ワードもどちらも、中央サーバ内の各エントリ内の情報の組ごとに維持される。代替実装形態では、更新ワードだけが維持される。そのような実装形態では、中央サーバは、要求側キャッシュ・サーバが古い（stale）データをもっているかどうかを判断するために、他のキャッシュ・サーバに対する組の中の更新ワードを処理して、他のキャッシュ・サーバのどれかがデータ・ユニットを変更しているかどうかを判断しなければならないはずである。
【００６５】
ここで説明した実装形態では、キャッシュ内で維持されるページは、メモリ・ページを含み、そこでは複数のメモリ・ページに、インターネットを介してあるＵＲＬからアクセスされる単一のＷｅｂページに対するデータが格納されていた。代替方法として、キャッシュ内のメモリ・ページが複数のＷｅｂページを含むのでもよい。
【００６６】
ここで説明した実装形態では、中央サーバおよび中央ディレクトリ・サーバ・プログラムが更新動作を管理して、更新の適用前に要求側キャッシュ・サーバが最新のデータを受け取ることを保証するようにしていた。代替実装形態では、中央サーバおよび中央ディレクトリ・サーバ・プログラムが実行するものとして説明した動作をキャッシュ・サーバ間に分散させて、分散中央ディレクトリを提供するのでもよい。そのような、中央ディレクトリ・サーバ・プログラムの実行する動作が分散している実装形態では、中央サーバで更新ワードおよび無効化ワード内で維持される情報は、キャッシュ・サーバに分散されて、キャッシュ・サーバが分散キャッシュ管理動作を実行することが可能になるはずである。
【００６７】
ここで説明した実装形態では、各キャッシュ・サーバが、キャッシュ・サーバ２ａ、２ｂ．．．２ｎに対するキャッシュ８ａ、８ｂ．．．８ｎ内で維持されるページごとに更新ワードのコピーを維持していた。代替方法として、キャッシュ・サーバが更新ワードを維持せずに、その代わりすべての整合性操作を中央サーバを通して取り扱うのでもよい。
【００６８】
更新ワードおよび無効化ワード内に含まれるものとして説明した情報は、更新および無効化の情報を提供するための、当技術分野に知られる１つまたは複数のどのようなデータ構造でも実装することができる。たとえば、更新および無効化の情報は、１つまたは複数のデータ・オブジェクト、データベース内のデータ・レコード、テーブル内のエントリ、別々のオブジェクトなどで実装することもできる。
【００６９】
キャッシュ内で維持されるページは、クライアントまたはユーザがデータを入力または付加してオブジェクトの内容を変更するどのようなタイプのマルチメディア・オブジェクトを含む、どのようなデータ・オブジェクトのタイプ（data object type）を含んでいてもよい。
【００７０】
ここで説明した実装形態では、キャッシュのそれぞれに結合される、分離したキャッシュ・サーバがある。キャッシュおよびキャッシュ・サーバは、密閉された同じユニット内にあってもよく、または別々のユニット内にあってもよい。代替実装形態では、１つのキャッシュ・サーバを複数のキャッシュに結合し、結合された複数のキャッシュに対する更新情報を維持するのでもよい。
【００７１】
ここで説明した実装形態では、中央サーバがインターネットからページをダウンロードしていた。代替方法として、中央サーバは、インターネット、ＬＡＮ（Local Area Network、構内通信網）、ＷＡＮ（Wide Area Network、広域通信網）、ＳＡＮ（Storage
Area Network、ストレージ・エリア・ネットワーク）などのどのようなネットワークからページをダウンロードするのでもよい。さらに、キャッシュ・サーバが直接にインターネットにアクセスしてページをダウンロードするのでもよい。
【００７２】
図３〜６に示した論理では、特定の順序で起きる特定のイベントが示されている。代替実装方法では、特定の動作を、変更または除去を行って、異なる順序で実行してもよい。その上、諸ステップを上述の論理に付加し、やはりここで説明した実装形態に整合するものとすることも可能である。さらに、本明細書で述べた動作が逐次的に起きるのでもよく、特定の動作が並列に処理されるのでもよい。さらにまた、動作は単一の処理装置によっても分散型の処理装置によっても実行することができる。
【００７３】
図７に、図１に示す中央サーバやキャッシュ・サーバなどの、ネットワーク・コンポーネントのコンピュータ・アーキテクチャ３００の一実装形態を示す。アーキテクチャ３００は、プロセッサ３０２（たとえば、マイクロプロセッサ）、メモリ３０４（たとえば、揮発性記憶装置）、およびストレージ３０６（たとえば、磁気ディスク・ドライブ、光ディスク・ドライブ、テープ・ドライブなどの不揮発性ストレージ）を含むことができる。ストレージ３０６は、内蔵（internal）ストレージ装置あるいは接続された（attached）またはネットワーク・アクセス可能なストレージを含むことができる。ストレージ３０６内のプログラムは、メモリ３０４へとロードされ、プロセッサ３０２によって当技術分野に知られる方法で実行される。このアーキテクチャは、さらに、ネットワークとの通信を可能にするネットワーク・カード３０８を含む。入力装置３１０は、プロセッサ３０２にユーザ入力を提供するために使用され、キーボード、マウス、ペン・スタイラス、マイクロフォン、タッチ・スクリーン（touch
sensitive display screen）、または当技術分野に知られる他のどのようなアクティベーションまたは入力の機構を含んでいてもよい。出力装置３１２は、プロセッサ３０２、または、ディスプレイ・モニタ、プリンタ、ストレージなどの他のコンポーネントから送信される情報を変換する能力がある。
【図面の簡単な説明】
【００７４】
【図１】本発明の諸態様が実装される分散ネットワーク・コンピューティング環境を示す図である。
【図２】ネットワーク・コンピューティング環境内の異なるキャッシュで維持されるデータに関する情報を維持するためのデータ構造を示す図である。
【図３】本発明の実装形態に従ってオブジェクトまたはページに対する要求を処理する論理を示す図である。
【図４】本発明の実装形態に従ってオブジェクトまたはページをキャッシュに返す論理を示す図である。
【図５】本発明の実装形態に従ってキャッシュ内のオブジェクトを変更する要求を処理する論理を示す図である。
【図６】本発明の実装形態に従ってキャッシュ内のオブジェクトを変更する要求を処理する論理を示す図である。
【図７】キャッシュ・サーバおよび中央サーバ、ならびに他のコンピューティング装置など、ネットワーク環境内のコンピューティング・コンポーネントのアーキテクチャを示す図である。
【手続補正書】
【提出日】平成16年9月4日(2004.9.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１
【補正方法】変更
【補正の内容】
【請求項１】
分散キャッシュ内でデータを維持するための方法であって、
少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュが前記オブジェクトの異なるバージョンを有することができ、前記オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、
各キャッシュにおいてそのキャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する前記更新情報が、前記オブジェクト、前記オブジェクトを含む前記キャッシュ、および前記オブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、
あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、前記ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、前記ターゲット・オブジェクトに対する前記更新情報が、他のどのキャッシュ内でも前記ターゲット・データ・ユニットが変更されていないことを示すステップとを含み、
前記キャッシュが前記オブジェクトの異なるバージョンを含んでいてもよく、前記キャッシュが前記キャッシュのクライアントに前記オブジェクトの古くなったバージョンを送付してもよい方法。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項９
【補正方法】変更
【補正の内容】
【請求項９】
複数のキャッシュと、
少なくとも１つのキャッシュ内でオブジェクトのコピーを維持する手段であって、前記キャッシュが前記オブジェクトの異なるバージョンを有することができ、前記オブジェクトが、変更可能なデータ・ユニットを有することが可能である手段と、
各キャッシュにおいて前記キャッシュ内で維持される各オブジェクトに対する更新情報を維持する手段であって、各キャッシュ内の各オブジェクトに対する前記更新情報が、前記オブジェクト、前記オブジェクトを含む前記キャッシュ、および前記オブジェクト内の各データ・ユニットが変更されたかどうかを示す手段と、
あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、前記ターゲット・オブジェクトおよびターゲット・キャッシュに対する前記更新情報を、前記ターゲット・データ・ユニットが変更されていることを示すように更新する手段であって、前記ターゲット・オブジェクトに対する前記更新情報が、他のどのキャッシュ内でも前記ターゲット・データ・ユニットが変更されていないことを示す手段とを含み、
前記キャッシュが前記オブジェクトの異なるバージョンを含んでいてもよく、前記キャッシュが前記キャッシュのクライアントに前記オブジェクトの古くなったバージョンを送付してもよい、
データを維持するためのシステム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散キャッシュ内でデータを維持するための方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
インターネットのユーザは、しばしば、中央のインターネット・サーバにデータを要求する。インターネット情報プロバイダ（internet information provider）が直面する挑戦課題の１つは、インターネットのトラフィック量とユーザ数が指数関数的なレートで増加する間に、ユーザの要求に対して情報を返すための適時の応答レートを維持するという目標である。この増大する数のユーザにサービスを提供するという必要に対する１つの解決策は、データのコピーを異なる場所で維持し、ユーザのデータ要求を、異なる地理的な場所にあるミラー・サーバを通して処理して、そのミラー・サーバに最も近いユーザにサービスを提供するようにすることである。他の解決案では、データのコピーを維持する分散キャッシュの使用を要するが、そこでは中央ディレクトリを維持して、分散キャッシュ・サーバにあるデータを追跡するようにする。キャッシュ・サーバを組織内の様々なポイントで展開して、クライアント・ユーザの特定のグループにサービスを提供することができる。中央ディレクトリにより、キャッシュ・サーバ内のオブジェクトに関する情報を維持するためのマッピングが提供される。
【０００３】
ＣＲＩＳＰ（Caching and Replication Internet
Service Performance、インターネット・サービスの性能のためのキャッシュおよび複製）プロジェクトでは、コンテンツをマッピング・サービスによって共用する自律的プロキシ・サーバの集まりとして構造化された、分散プロキシ・キャッシュを利用するインターネット・キャッシュ・サービスが開発されている。
【０００４】
これは、ジェイ・ケイ・オースターホート（Ousterhout J K）他、「Ｓｐｒｉｔｅネットワーク・オペレーティング・システム（The
Sprite Network Operating System）」、コンピュータ（Computer）、（IEEE Computer Society）、ロング・ビーチ（Long
Beach）カリフォルニア州（ＣＡ）、アメリカ合衆国（ＵＳＡ）、ＵＳ（０１−０２−１９９８）、２１（２）、２３〜３６頁より、各ファイルに何が最後に書き込んだか（the
last writer）についての情報をそれぞれが維持することにより、また最後に書き込んだ以外のクライアントがそのファイルをオープンする時には、最後に書き込んだものがダーティなブロックをサーバ・キャッシュへとすべて書き戻させることにより、書き込み整合性を維持する複数のキャッシュをもつことが知られる。また、これは、ティー・アンダーソン（Anderson
T）他、「サーバレス・ネットワーク・ファイル・システム（serverless network file systems）」、コンピュータ・システムに関するＡＣＭ会報（ACM
Transactions on Computer Systems）、ＡＣＭ、ニューヨーク、ＵＳＡ（０１−０２−１９９６）、１４（１）より、キャッシュ内でオブジェクトに対する更新情報を維持しており、そこでは異なるキャッシュが異なるバージョンのオブジェクトをもっていてよいことが知られる。さらに、これは、ピー・ケレハー（Keleher
P）他、「ソフトウェア共有メモリ（shared memory）のための遅延リリース整合性（lazy release consistency for
software shared memory）」、コンピュータ・アーキテクチャ・ニュース（COMPUTER ARCHITECTURE NEWS）、１９９２−０５−０１、ＡＣＭ、ニューヨーク（New
York）、アメリカ合衆国（ＵＳＡ）より、ターゲット情報が変更されていることを更新情報が示す場合に適用される変更を有することが知られる。
【非特許文献１】ジェイ・ケイ・オースターホート（Ousterhout J K）他、「Ｓｐｒｉｔｅネットワーク・オペレーティング・システム（TheSprite Network Operating System）」、コンピュータ（Computer）、（IEEE Computer Society）、ロング・ビーチ（LongBeach）カリフォルニア州（ＣＡ）、アメリカ合衆国（ＵＳＡ）、ＵＳ（０１−０２−１９９８）、２１（２）、２３〜３６頁
【非特許文献２】ティー・アンダーソン（Anderson T）他、「サーバレス・ネットワーク・ファイル・システム（ServerlessNetwork File Systems）」、コンピュータ・システムに関するＡＣＭ会報（ACM Transactions on ComputerSystems）、ＡＣＭ、ニューヨーク、ＵＳＡ（０１−０２−１９９６）、１４（１）
【非特許文献３】ピー・ケレハー（Keleher P）他、「ソフトウェア共有メモリのための遅延リリース整合性（LazyRelease Consistency for Software Shared Memory）」、コンピュータ・アーキテクチャ・ニュース（COMPUTERARCHITECTURE NEWS）、１９９２−０５−０１、ＡＣＭ、ニューヨーク（New York）、アメリカ合衆国（ＵＳＡ）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
クライアントのＷｅｂアクセス要求を処理するために、分散キャッシュが現在使用されているとはいえ、インターネットのＷｅｂ要求など、クライアントのネットワーク要求を処理するさらに改善された技法を提供することが、当技術分野では引き続き求められている。
【課題を解決するための手段】
【０００６】
第１の態様においては、本発明は分散キャッシュ内でデータを維持するための方法であって、少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、各キャッシュにおいてそのキャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、ターゲット・オブジェクトに対する更新情報が、他のどのキャッシュ内でもターゲット・データ・ユニットが変更されていないことを示すステップとを含み、キャッシュがオブジェクトの異なるバージョンを含んでいてもよく、キャッシュがキャッシュのクライアントにオブジェクトの古くなったバージョンを送付してもよい方法を提供する。
【０００７】
本方法は、好ましくは、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップをさらに実行する。
【０００８】
本方法は、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行する。
【０００９】
本方法は、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行する。
【００１０】
本方法は、好ましくは、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、受け取った変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行する。
【００１１】
好ましくは、中央サーバが、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかを判断するステップと、最新のターゲット・データ・ユニットの値を別のキャッシュから取り出すステップとを実行し、本方法は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００１２】
好ましくは、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報を維持する。
【００１３】
本方法は、好ましくは、各キャッシュ内の各オブジェクトに対する無効化情報を維持するステップであって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示すステップをさらに実行する。
【００１４】
本方法は、好ましくは、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行する。
【００１５】
本方法は、好ましくは、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のターゲット・データ・ユニットに受け取った変更を適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップと、ターゲット・オブジェクトを含む各キャッシュに対する無効化情報を、ターゲット・データ・ユニットが無効であることを示すように更新するステップとをさらに実行する。
【００１６】
本方法は、好ましくは、判断したキャッシュ内のターゲット・オブジェクトに対する更新情報を、データ・ユニットが変更されていないことを示すように更新するステップをさらに実行する。
【００１７】
好ましくは、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断するステップと、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すステップとを実行し、本方法は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００１８】
好ましくは、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報および無効化情報を維持し、本方法は、ターゲット・データ・ユニットへの変更を受け取るターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断するステップと、ターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットを更新するステップとをさらに含む。
【００１９】
本方法は、好ましくは、ターゲット・キャッシュ・サーバによって、ターゲット・データ・ユニットを変更するために要求を中央サーバに送るステップと、中央サーバによって、（ｉ）他のキャッシュが最新のターゲット・データ・ユニットの値をもっていない場合、最新のターゲット・データ・ユニットの値を含まない、または（ｉｉ）別のキャッシュが最新のターゲット・データ・ユニットの値をもっている場合、最新のターゲット・データ・ユニットの値を含む変更を進めるためにメッセージをターゲット・キャッシュ・サーバに返すステップと、ターゲット・キャッシュ・サーバによって、受け取った変更をターゲット・データ・ユニットの値に適用する前に受け取った最新のターゲット・データ・ユニットの値をターゲット・キャッシュ内のターゲット・ページに適用するステップとをさらに含む。
【００２０】
第２の態様では、本発明は、複数のキャッシュと、少なくとも１つのキャッシュ内でオブジェクトのコピーを維持する手段であって、キャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能である手段と、各キャッシュにおいてキャッシュ内で維持される各オブジェクトに対する更新情報を維持する手段であって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示す手段と、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新する手段であって、ターゲット・オブジェクトに対する更新情報が、他のどのキャッシュ内でもターゲット・データ・ユニットが変更されていないことを示す手段を含み、キャッシュがオブジェクトの異なるバージョンを含んでいてもよく、キャッシュがキャッシュのクライアントにオブジェクトの古くなったバージョンを送付してもよい、データを維持するためのシステムを提供する。
【００２１】
システムは、好ましくは、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用する手段をさらに含む。
【００２２】
システムは、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップを実行する手段をさらに含む。
【００２３】
システムは、好ましくは、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとを実行する手段をさらに含む。
【００２４】
システムは、好ましくは、各キャッシュ内の各オブジェクトに対する無効化情報を維持する手段であって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示す手段をさらに含む。
【００２５】
システムは、好ましくは、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断する手段と、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新する手段とをさらに含む。
【００２６】
好ましくは、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断する手段と、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断する手段と、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すことのための手段を実装し、システムは、中央サーバによって、最新のターゲット・データ・ユニットの値を返す手段をさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される。
【００２７】
第３の態様では、本発明は、コンピュータ・システムにロードされ、そこで実行されると、第１の態様による方法の諸ステップをすべて実行するコンピュータ・プログラム・コードを含む、コンピュータ・プログラムを提供する。
【００２８】
好ましくは、本発明は、分散キャッシュ内でデータを維持するための製品であって、当該製品が動作を実行させ、この動作が少なくとも１つのキャッシュ内でオブジェクトのコピーを維持するステップであって、複数のキャッシュがオブジェクトの異なるバージョンを有することができ、オブジェクトが、変更可能なデータ・ユニットを有することが可能であるステップと、各キャッシュ内で維持される各オブジェクトに対する更新情報を維持するステップであって、各キャッシュ内の各オブジェクトに対する更新情報が、オブジェクト、オブジェクトを含むキャッシュ、およびオブジェクト内の各データ・ユニットが変更されたかどうかを示すステップと、あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示すステップとを含む、製品を提供する。
【００２９】
製品は、データ・ユニットを変更する要求を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップをさらに実行することができる。
【００３０】
製品は、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含んでいない場合、変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行することができる。
【００３１】
製品は、変更を受け取った後で、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含んでいるかどうかを判断するステップと、別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを、取り出した最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行することができる。
【００３２】
製品は、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、受け取った変更をターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップであって、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、データ・ユニットが変更されていないことを示すステップをさらに実行することができる。
【００３３】
製品は、中央サーバが、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかを判断するステップと、最新のターゲット・データ・ユニットの値を別のキャッシュから取り出すステップとを実行し、この動作は、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される、製品とすることができる。
【００３４】
製品は、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報を維持する、製品とすることができる。
【００３５】
製品は、各キャッシュ内の各オブジェクトに対する無効化情報を維持するステップであって、あるキャッシュ内のあるオブジェクトに対する無効化情報がオブジェクト内の各データ・ユニットが有効か無効かを示すステップをさらに実行することができる。
【００３６】
製品は、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示す場合、更新情報から、ターゲット・オブジェクトに対する最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出し、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新するステップとをさらに実行することができる。
【００３７】
製品は、ターゲット・キャッシュ内のターゲット・オブジェクトを最新のターゲット・データ・ユニットの値で更新した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに受け取った変更を適用するステップと、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報を、ターゲット・データ・ユニットが変更されていることを示すように更新するステップと、ターゲット・オブジェクトを含む各キャッシュに対する無効化情報を、ターゲット・データ・ユニットが無効であることを示すように更新するステップとをさらに実行することができる。
【００３８】
製品は、判断したキャッシュ内のターゲット・オブジェクトに対する更新情報を、データ・ユニットが変更されていないことを示すように更新するステップをさらに実行することができる。
【００３９】
製品は、中央サーバが、ターゲット・オブジェクトおよびターゲット・キャッシュに対する無効化情報が、ターゲット・データ・ユニットが無効であることを示すかどうかを判断するステップと、ターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むキャッシュを判断するステップと、最新のターゲット・データ・ユニットの値を判断したキャッシュから取り出すステップとを実行し、この動作が、中央サーバによって、最新のターゲット・データ・ユニットの値を返すステップをさらに含み、最新のターゲット・データ・ユニットの値がターゲット・キャッシュ内のターゲット・オブジェクトに適用された後でターゲット・データ・ユニットに対する変更がターゲット・キャッシュに適用される、製品とすることができる。
【００４０】
製品は、各キャッシュにキャッシュ・サーバが１つ結合され、各キャッシュ・サーバが、キャッシュ・サーバの結合される少なくとも１つのキャッシュ内の各オブジェクトに対する更新情報を維持し、中央サーバが各キャッシュ内の各オブジェクトに対する更新情報および無効化情報を維持し、この動作が、ターゲット・データ・ユニットへの変更を受け取るターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断するステップと、ターゲット・キャッシュ・サーバによって、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すかどうかを判断した後、ターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットを更新するステップとをさらに含む、製品とすることができる。
【００４１】
製品は、ターゲット・キャッシュ・サーバによって、ターゲット・データ・ユニットを変更するために要求を中央サーバに送るステップと、中央サーバによって、（ｉ）他のキャッシュが最新のターゲット・データ・ユニットの値をもっていない場合、最新のターゲット・データ・ユニットの値を含まない、または（ｉｉ）別のキャッシュが最新のターゲット・データ・ユニットの値をもっている場合、最新のターゲット・データ・ユニットの値を含む変更を進めるためにメッセージをターゲット・キャッシュ・サーバに返すステップと、ターゲット・キャッシュ・サーバによって、受け取った変更をターゲット・データ・ユニットの値に適用する前に受け取った最新のターゲット・データ・ユニットの値をターゲット・キャッシュ内のターゲット・ページに適用するステップとをさらに実行することができる。
【００４２】
分散キャッシュ内でデータを維持するための方法、システム、およびプログラムが提供される。オブジェクトのコピーが少なくとも１つのキャッシュ内で維持され、複数のキャッシュがそのオブジェクトの異なるバージョンを有することができ、そのオブジェクトは、変更可能なデータ・ユニットを有することが可能である。各キャッシュ内で維持される各オブジェクトに対する更新情報が維持され、各キャッシュ内の各オブジェクトに対する更新情報は、オブジェクト、そのオブジェクトを含むキャッシュ、およびそのオブジェクト内の各データ・ユニットが変更されたかどうかを示す。あるターゲット・キャッシュ内のあるターゲット・オブジェクト内のターゲット・データ・ユニットに対する変更を受け取った後、そのターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示すように更新され、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報も、ターゲット・データ・ユニットが変更されていないことを示す。
【００４３】
別の実装形態では、データ・ユニットを変更する要求を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていることを示す場合には、受け取った変更はターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用される。
【００４４】
また別の場合、変更を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合には、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかに関して判断を行うことができる。別のキャッシュが最新のターゲット・データ・ユニットの値を含まない場合、変更がターゲット・キャッシュ内のターゲット・オブジェクト内のデータ・ユニットに適用され、ターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報がターゲット・データ・ユニットが変更されていることを示すように更新されるが、他のどのキャッシュ内のターゲット・オブジェクトに対する更新情報はデータ・ユニットが変更されていないことを示す。
【００４５】
また別の実装形態では、変更を受け取った後でターゲット・オブジェクトおよびターゲット・キャッシュに対する更新情報が、ターゲット・データ・ユニットが変更されていないことを示す場合には、別のキャッシュがターゲット・オブジェクトおよび最新のターゲット・データ・ユニットの値を含むかどうかに関して判断が行われる。別のキャッシュが最新のターゲット・データ・ユニットの値を含む場合、その最新のターゲット・データ・ユニットの値が判断されたキャッシュから取り出され、ターゲット・キャッシュ内のターゲット・オブジェクトが取り出された最新のターゲット・データ・ユニットの値で更新される。
【００４６】
また別の場合、各キャッシュ内の各オブジェクトに対して無効化情報を維持することができるが、あるキャッシュ内のあるオブジェクトに対する無効化情報はそのオブジェクト内の各データ・ユニットが有効化無効化を示す。
【００４７】
ここに説明する実装形態により、複数の分散キャッシュにおけるデータ・オブジェクトの分散ストレージを、その分散キャッシュで維持されるデータに関してどのような非整合的なデータ操作も実行を回避するように管理する技法が提供される。
【００４８】
本発明の好ましい一実施形態を、例としてのみ、添付の図面を参照して、次に定義する。
【発明を実施するための最良の形態】
【００４９】
以下の説明では、本明細書の一部であり、本発明のいくつかの実施形態を例示する添付の図面を参照する。本発明の範囲を逸脱することなく、他の実施形態を利用してもよく、構造上および操作上の変更を行ってもよいことが了解されている。
【００５０】
図１に、本発明の諸態様を実装できるネットワーク・コンピューティング環境を図示している。複数のキャッシュ・サーバ２ａ、２ｂ．．．２ｎが中央サーバ４に接続しており、ここで中央サーバ４はインターネット６、または当技術分野に知られる何らかのタイプのネットワークに接続されている。キャッシュ・サーバおよび中央サーバ２ａ、２ｂ．．．２ｎ、４はサーバ・クラス・マシン、ワークステーション、パーソナル・コンピュータなどを含む、当技術分野に知られるどのようなタイプのコンピューティング装置を含んでいてもよい。キャッシュ・サーバ２ａ、２ｂ．．．２ｎはそれぞれ、インターネット６からダウンロードされたＷｅｂページを、メモリ・ページ１０ａ、１０ｂ．．．１０ｎとして保存するキャッシュ８ａ、８ｂ．．．８ｎに結合されている。メモリ・ページ１０ａ、１０ｂ．．．１０ｎのそれぞれは、オブジェクトまたはコンポーネントを含むことができ、これを本明細書ではデータ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、および１６ａ、１６ｂ．．．１６ｎと呼ぶが、ここでデータ・ユニットは変更することが可能である。データ・ユニットは、ワード、フィールド、ライン、フレーム、ページ全体、パラグラフ、オブジェクトなどを含めて、メモリ・ページ１０ａ、１０ｂ．．．１０ｎ内部のどのような度合いの粒度（granularity）も含むことができる。図１には、各キャッシュ８ａ、８ｂ．．．８ｎを、各ページが同じ数のデータ・ユニットを有する、同じ数のページを含むものとして示しているが、ここで説明する実装形態では、各キャッシュ８ａ、８ｂ．．．８ｎは異なる数のメモリ・ページ、および、各メモリ・ページが異なる数のデータ・ユニットを有する、異なるメモリ・ページを維持することができる。異なるキャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページは、たとえばＵＲＬ（Universal
Resource Locators）など、異なるインターネット・アドレスにある、異なるインターネットＷｅｂサーバからダウンロードされたＷｅｂページを代表することができる。メモリ・ページは、Ｗｅｂページを同じファイル・フォーマットでも異なるファイル・フォーマットでも格納することができる。メモリ・ページは、ＨＴＭＬ（Hypertext
Markup Language、ハイパーテキスト・マークアップ言語）、ＸＭＬ（Extensible Markup Language、拡張マークアップ言語）、テキスト・ファイル、ムービー・ファイル、画像ファイル、サウンド・ファイルなど、当技術分野に知られるどのようなメディア・ファイル・フォーマットのコンテンツも含むことができる。
【００５１】
複数のクライアント・システム１８ａ、１８ｂ、１８ｃ、１８ｄ、１８ｅ、１８ｆ、１８ｇは、ブラウザ２０ａ、２０ｂ、２０ｃ、２０ｄ、２０ｅ、２０ｆ、２０ｇを含んでおり、これらブラウザは、Ｗｅｂページに対する要求を指定されたキャッシュ・サーバ２ａ、２ｂ、２ｎへと通信し、クライアントの要求がキャッシュ８ａ、８ｂ．．．８ｎから処理できるようにする。クライアント・システム１８ａ、１８ｂ．．．１８ｇは、パーソナル・コンピュータ、ラップトップ・コンピュータ、ワークステーション、メインフレーム、電話（telephony）装置、ハンドヘルド・コンピュータ、サーバ、ネットワーク・アプライアンス（network appliance）など、当技術分野に知られるどのようなコンピューティング装置を含んでいてもよく、ブラウザ２０ａ、２０ｂ．．．２０ｇは、インターネット・ブラウザ・プログラム、ムービー・プレイヤー、サウンド・プレイヤーなど、ネットワークを介してファイルを要求し、そのようなファイルからのデータをユーザに対して当技術分野に知られるどのようなメディア・フォーマットにでも変換する能力のあるどのようなプログラムを含んでいてもよい。特定の実装形態では、ブラウザ２０ａ、２０ｂ．．．２０ｇのユーザは、キャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページにあるデータ・ユニット内のデータを変更または更新を行ってもよい。
【００５２】
中央サーバ４は、中央ディレクトリ・サーバ・プログラム２２を含み、キャッシュ・サーバ２ａ、２ｂ．．．２ｎはそれぞれ、キャッシュ関連操作を実行するためのキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎを含む。中央サーバ・ディレクトリ・プログラム２２は、中央ディレクトリ２６を維持するが、これは各キャッシュ８ａ、８ｂ．．．８ｎ内の各メモリ・ページ内にある更新の可能なデータ・ユニットに関する情報を維持している。また、各キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎを維持するが、これはローカル・キャッシュ８ａ、８ｂ．．．８ｎ内のメモリ・ページ１０ａ、１０ｂ．．．１０ｎ内にある更新の可能なデータ・ユニットに関する情報を維持するエントリを有する。ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリは、同じメモリ・ページに対する中央ディレクトリ２６内のエントリに対応している。
【００５３】
図２には、中央ディレクトリ２６およびローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内で維持されるエントリのフォーマット５０を示している。各エントリ５０は、そのエントリに対応するページのコピー１つをローカル・キャッシュ８ａ、８ｂ．．．８ｎで維持するローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎごとに、１つまたは複数の情報の組（tuple）を含む。各エントリ５０は、特定のメモリ・ページ・アドレス１つに対応しており、ここでそのページのコピー１つを異なるキャッシュ８ａ、８ｂ．．．８ｎが維持してもよい。このページのコピーを有するキャッシュ８ａ、８ｂ．．．８ｎごとに維持される情報の組のそれぞれは、次のものを含む。
【００５４】
キャッシュ・サーバＩＤ：５２ａ．．．５２ｎ：そのエントリによって代表されるメモリ・ページを含む特定のキャッシュ・サーバ２ａ、２ｂ．．．２ｎを示す。この情報は、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリでは自由選択としてよい。
【００５５】
更新ワード（update word）：５４ａ．．．５４ｎ：各ワードは複数のビットを含み、そこでは、この更新ワードが代表するページ内の更新可能なデータ・ユニットごとに１ビットが提供される。各ビットは、キャッシュ８ａ、８ｂ．．．８ｎ内のそのページ内のデータ・ユニットが変更されている場合は「オン」にセットされ、対応するデータ・ユニットが変更されていない場合は「オフ」にセットされる。
【００５６】
無効化ワード（invalidation word）：５６ａ．．．５６ｎ：数ビットからなる１個のワードであり、そこでは、キャッシュ８ａ、８ｂ．．．８ｎ内の各メモリ・ページ１０ａ、１０ｂ．．．１０ｎ内のデータ・ユニットに対応する１ビットが存在する。あるビットが「オン」にセットされると、そのようなビットが代表する、ローカル・キャッシュ８ａ、８ｂ．．．８ｎにあるメモリ・ページ内のそのデータ・ユニットにあるデータが無効または更新済みであることが示され、「オフ」にセットされると、ローカル・キャッシュ８ａ、８ｂ．．．８ｎにあるメモリ・ページ内のそのデータ・ユニットが更新済みでない、または無効でないことが示される。このワードは、ローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内のエントリに対しては自由選択としてよい。
【００５７】
図３および５には、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎ内に実装される論理を示してあり、図４および６には、中央ディレクトリ・サーバ・プログラム２２内に実装される論理を示してある。これらは、メモリ・ページおよびその中にあるデータ・ユニットへのアクセスを調整して、クライアント１８ａ、１８ｂ．．．１８ｇがデータに高速にアクセスできるように、データ整合性を維持するためのものである。
【００５８】
図３および４には、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎおよび中央ディレクトリ・サーバ・プログラム２２がそれぞれ、要求されたＷｅｂページの一部であるメモリ・ページへの読み取りアクセスをクライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇに提供するために実行する動作を示している。図３について述べると、制御は、ブロック１００で、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎがブラウザ２０ａ、２０ｂ．．．２０ｇの１つからあるメモリ・ページに対する要求を受け取ることから始まる。特定の実装形態では、各クライアント１８ａ、１８ｂ．．．１８ｇが、そのページ要求をすべて１つの指定されたキャッシュ・サーバ２ａ、２ｂ．．．２ｎに振り向けることもある。代替方法として、各クライアントは、要求を多くの指定された代替キャッシュ・サーバのうちの１つに振り向けることもできる。要求を受け取るのに応答して、要求されたページが、受け取ったキャッシュ・サーバ２ａ、２ｂ．．．２ｎに結合されたキャッシュ８ａ、８ｂ．．．８ｎ内にある場合は（ブロック１０２）、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎが、要求されたメモリ・ページをキャッシュ８ａ、８ｂ．．．８ｎから返す（ブロック１０４）。そのような実装形態では、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、あるページに対するキャッシュ８ａ、８ｂ．．．８ｎからのアクセスを即時に提供するが、返されるページは、あるデータ・ユニットに対する値の最新のコピーを有していない可能性がある。要求されたページが、接続されている（attached）キャッシュ８ａ、８ｂ．．．８ｎ内にない場合は、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、要求されたページに対する要求を中央サーバ４に送り（ブロック１０６）、制御は図４のブロック１２０に移り、そこでは中央ディレクトリ・サーバ・プログラム２２がその要求を処理する。
【００５９】
図４について述べると、中央ディレクトリ・サーバ・プログラム２２が、メモリ・ページに対する要求を受け取る（ブロック１２０）のに応答して、中央ディレクトリ２６が要求されたページに対するエントリを含んでいるかどうかを判断する（ブロック１２２）。そうでない場合、中央ディレクトリ・サーバ・プログラム２２は、要求されたページをインターネット６からダウンロードする（ブロック１２４）。中央ディレクトリ２６内のエントリ５０が、取り出されたページに対して生成され（ブロック１２６）、ここで生成されたエントリ５０は、キャッシュ・サーバＩＤフィールド５２ａ．．．５２ｎにおいてその要求を発したキャッシュ・サーバ２ａ、２ｂ．．．２ｎを識別し、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビット（図２）が初め（initially）「オフ」にセットされた状態で含む。次いで、取り出されたページおよび生成されたエントリ５０が、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに返されて（ブロック１２８）、ローカル・キャッシュ８ａ、８ｂ．．．８ｎ内にバッファリングされ、受け取った新しいエントリがローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内で維持される。
【００６０】
中央ディレクトリ２６内に要求されたページに対するエントリがあり（ブロック１２２）、かつ、その要求されたページに対して他のどのキャッシュ・サーバ２ａ、２ｂ．．．２ｎもデータ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、および１６ａ、１６ｂ．．．１６ｎを更新していないことを示す、「オン」にセットされたデータ・ユニット・ビット５４ａ．．．５４ｎ（図２）が要求されたページに対する更新ワード５４ａ．．．５４ｎにあるエントリが存在しない場合（ブロック１３０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内の１つの情報の組にあるキャッシュ・サーバＩＤフィールド５２ａ．．．５２ｎにおいて識別される１つのキャッシュ・サーバ２ａ、２ｂ．．．２ｎから、要求されたページにアクセスする（ブロック１３２）。どのキャッシュ・サーバ２ａ、２ｂ．．．２ｎも、維持するデータ・ユニットには更新されたデータがないので、そのページは、エントリ５０において識別されるどのキャッシュ８ａ、８ｂ．．．８ｎからでもアクセスすることができる。中央ディレクトリ・サーバ・プログラム２２は、１つの情報の組を生成し（ブロック１３４）、要求されたページに対するエントリ５０に付加するが、ここで生成される情報の組は、フィールド５２ａ．．．５２ｎにおいて要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎが識別され、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビット５４ａ．．．５４ｎおよび５６ａ．．．５６ｎが「オフ」にセットされた状態で含む。取り出したページおよび生成した情報の組は、要求側キャッシュ・サーバに返される（ブロック１３６）。代替実装形態では、情報の組を送る代わりに、生成した更新ワード５４ａ．．．５４ｎだけを送ってもよいことに注意されたい。
【００６１】
要求されたページに対するエントリ５０内の、別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する１つの情報の組にある更新ワード５４ａ．．．５４ｎ内で、あるデータ・ユニット・ビットが「オン」にセットされている場合（ブロック１３０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内で、その更新ワード５４ａ．．．５４ｎのデータ・ユニット・ビットが最も多く「オン」にセットされている情報の組を決定する（ブロック１３８）。次いで、中央ディレクトリ・サーバ・プログラム２２は、決定された情報の組のフィールド５２ａ．．．５２ｎにおいて識別されるキャッシュ・サーバ２ａ、２ｂ．．．２ｎから、要求されたページを取り出す（ブロック１４０）が、この情報の組は最新のデータ・ユニットの値の数が最大となっている。「オン」にセットされたデータ・ユニット・ビットのある更新ワード５４ａ．．．５４ｎを有するページに対するエントリ５０の他の組のそれぞれについて、中央ディレクトリ・サーバ・プログラム２２は、「オン」にセットされているビットに対応している対応データ・ユニットに、その組のフィールド５２ａ．．．５２ｎにおいて識別されるキャッシュ・サーバ２ａ、２ｂ．．．２ｎからアクセスし、アクセスしたデータを、取り出したページ内の対応データ・ユニットに付加する（ブロック１４２）。取り出したページに対するエントリに対する組は、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎについて生成されて、フィールド５２ａ．．．５２ｎにおいて要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎが識別され、更新ワード５４ａ．．．５４ｎおよび無効化ワード５６ａ．．．５６ｎを、すべてのデータ・ユニット・ビットが「オフ」にセットされた状態で含む（ブロック１４４）。次いで、制御はブロック１３６に進んで、取り出したページおよび生成した組（またはその関係のある部分）を、要求側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに返す。
【００６２】
図３および４の論理について述べると、クライアント・ブラウザのページ要求は、まず、ローカル・キャッシュ８ａ、８ｂ．．．８ｎから処理され、次に、ローカル・キャッシュ内にコピーがない場合は、リモート・キャッシュからになる。ローカル・キャッシュまたはリモート・キャッシュ内に要求されたページのコピーがない場合は、そのページはインターネット６からダウンロードされる。レイテンシ・アクセス時間（latency access times）はインターネットを介したダウンロードの場合がもっとも長いため、ダウンロードを、好ましくはローカル・キャッシュから、次いでリモート・キャッシュから、最終的にインターネットから行うことにより、アクセスのパフォーマンスが最適化される。さらに、ある特定の実装形態では、リモート・キャッシュに格納されているページを初めて受け取る場合、返されるページは、すべてのリモート・キャッシュ内で維持されるデータ・ユニットからの最新の値を含む。
【００６３】
図５には、ターゲット・ページと呼ばれるあるページにある、ターゲット・データ・ユニットと呼ばれるデータ・ユニットを変更する、クライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇによる要求を取り扱うための、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎに実装される論理を示している。制御は、ブロック２００で、キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎが、あるページ内のあるデータ・ユニットを変更する要求を１つのクライアント１８ａ、１８ｂ．．．１８ｇから受け取ることから始まる。このクライアントは、その要求を受け取るキャッシュ・サーバ２ａ、２ｂ．．．２ｎにページ要求を送信するように割り当てられている。要求されたページに対するローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内の更新ワード内の、このターゲット・データ・ユニットに対応するデータ・ユニット・ビットが、「オン」にセットされている場合（ブロック２０２）、これは、受け取り側キャッシュ・サーバと呼ばれる、その要求を受け取るキャッシュ・サーバ２ａ、２ｂ．．．２ｎが、ターゲット・データ・ユニット１２ａ、１２ｂ．．．１２ｎ、１４ａ、１４ｂ．．．１４ｎ、１６ａ、１６ｂ．．．１６ｎに対する最新の値を有していることを示すが、その場合、受け取り側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに結合されたキャッシュ８ａ、８ｂ．．．８ｎ内のターゲット・ページ内のデータ・ユニットを、受け取った変更されたデータ・ユニットで更新する（ブロック２０４）。そうではなく、受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎにあるローカル・キャッシュ・ディレクトリ２８ａ、２８ｂ．．．２８ｎ内の更新ワード５４ａ．．．５４ｎの、このターゲット・データ・ユニットに対応するビットが「オン」にセットされていない場合、受け取り側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ターゲット・ページ内のターゲット・データ・ユニットを変更する要求を中央サーバ４に送る（ブロック２０６）。
【００６４】
図６には、中央ディレクトリ・サーバ・プログラム２２が、（図５のブロック２０６で）受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎからの要求に応答して、ターゲット・ページ内のターゲット・データ・ユニットを変更するために実行する動作を示している。そのような要求を受け取るのに応答して（ブロック２１０）、中央ディレクトリ・サーバ・プログラム２２は、要求されたページに対するエントリ５０内の、（フィールド５２ａ．．．５２ｎで示される）受け取り側キャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する組の中の無効化ワード５６ａ．．．５６ｎ内のターゲット・データ・ユニットに対応するデータ・ユニット・ビットが、「無効」を意味する「オン」にセットされているかどうかを判断する（ブロック２１４）。そうである場合、ある別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎがこのターゲット・データ・ユニットを変更していることになる。そのような場合には、中央ディレクトリ・サーバ・プログラム２２が、ターゲット・データ・ユニット・ビットが「オン」にセットされている更新ワード（図２）を有する、その別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対するエントリの中にある組を決定する（ブロック２１６）。このエントリはすなわち、対象となるデータ・ユニットに対する最新のデータを有するキャッシュ・サーバに対するエントリである。次いで、中央ディレクトリ・サーバ・プログラム２２は、ターゲット・データ・ユニットの最新の値を、この決定された組において示される別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎから取り出し（ブロック２１８）、取り出した最新のデータ・ユニットの値を受け取り側キャッシュ・サーバに返す（ブロック２２０）。この決定された組では、別のキャッシュ・サーバ２ａ、２ｂ．．．２ｎに対する更新ワード５４ａ．．．５４ｎ内のターゲット・データ・ユニット・ビットが「オフ」にセットされるが、これは、この更新動作の後、受け取り側キャッシュ・サーバが、ターゲット・データ・ユニットを更新し、そのターゲット・データ・ユニットに対する最新の値を有することになるからである。
【００６５】
受け取り側キャッシュ・サーバに最新のデータの値を提供した後（ブロック２２２より）または受け取り側キャッシュ・サーバが、ターゲット・データ・ユニットに対する最新の値を有していない場合（ブロック２１４の「いいえ」の分岐より）、制御はブロック２２４および２２６に進んで、中央ディレクトリ・サーバ・プログラム２２が、要求側キャッシュ・サーバに対するエントリ内で、更新ワード５４ａ．．．５４ｎ内のターゲット・データ・ユニットに対応するデータ・ユニット・ビットを「オン」に、要求側キャッシュ・サーバに対するエントリ内の無効化ワード５６ａ．．．５６ｎ内のビットを「オフ」にセットする（ブロック２２４）。また、中央ディレクトリ・サーバ・プログラム２２は、他のすべてのキャッシュ・サーバに対する、ターゲット・ページに対するエントリ５０内の組の中の無効化ワード５６ａ．．．５６ｎ内のデータ・ユニット・ビットを「オン」にセットし、このターゲット・ページの他のキャッシュ・サーバが有するコピーにある、ターゲット・データに対するデータは無効であることを示す（ブロック２２６）。次いで、中央ディレクトリ・サーバ・プログラム２２は、メッセージを要求側キャッシュ・サーバに返して（ブロック２２８）、ターゲット・データ・ユニットの変更を進める。このメッセージは、また、明示的にせよ暗黙にせよ、要求側キャッシュ・サーバへのメッセージを含んで、受け取ったページに対する有効化および無効化ワード（validation and invalidation words）内の関係するビットを更新して、要求側キャッシュ・サーバがそのページ内で更新中のデータ・ユニットに対する最新の更新を有することを示すこともできる。代替実装形態で、中央ディレクトリ・サーバ・プログラム２２が、変更された有効化および無効化ワードを返すこともできる。
【００６６】
キャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、変更されたターゲット・データ・ユニットを中央ディレクトリ・サーバ・プログラム２２から受け取ると（図５のブロック２５０）、自分のキャッシュ８ａ、８ｂ．．．８ｎ内のターゲット・ページ内のターゲット・データ・ユニットを、受け取った変更されたデータ・ユニットで更新する（ブロック２５２）。要求側のキャッシュ・サーバ・プログラム２４ａ、２４ｂ．．．２４ｎは、ターゲット・データ・ユニットを変更するメッセージを受け取ると（ブロック２５４）、クライアント・ブラウザ２０ａ、２０ｂ．．．２０ｇから受け取った変更されたデータ・ユニットをキャッシュ８ａ、８ｂ．．．８ｎ内のページ１０ａ、１０ｂ．．．１０ｎに付加する（２５６）。
【００６７】
ここで説明する実装形態により、クライアント・ブラウザによって１つのキャッシュ・サーバにおいて更新が行え、同時に、すべてのキャッシュ・サーバの間でデータ整合性が維持される、分散キャッシュ・サーバ・システムのためのプロトコルが提供される。また、この実装形態により、緩やかなデータ更新整合性が提供されるが、これは、データがブラウザにおいて更新される場合、変更中のデータを含むページのコピーを有するリモート・キャッシュ・サーバに対して、中央ディレクトリ内で無効化データ・ビット（invalidated data bit）だけがセットされるためである。リモート・キャッシュ・サーバには更新についての情報はなにも含まれず、リモート・キャッシュ・サーバおよびクライアントにあるブラウザは、最新のデータ・ユニットの値を有していないローカル・キャッシュからページを読み続けることができる。しかし、最新のデータをもたないキャッシュ・サーバからデータを受け取るブラウザが、データ・ユニットを変更しようと試みた場合には、そのブラウザは更新を適用する前に最新のデータを受け取ることになる。
【００６８】
実装の詳細に関する追加（Additional Implementation
Details）
分散キャッシュ・サーバ・システムを管理するためのここで説明した技法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを製造するための標準的なプログラム上または工学上の技法あるいはそれらの組合せを使用して、方法、装置または製品として実装することができる。本明細書で使用する「製品」（article of manufacture）という用語は、ハードウェア論理（たとえば、集積回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ、Programmable
Gate Array）、ＡＳＩＣ（Application Specific Integrated Circuit、特定用途向け集積回路）など）、または磁気記憶媒体（たとえば、ハード・ディスク・ドライブ、フロッピー（Ｒ）ディスク、テープなど）、光ストレージ（たとえば、ＣＤ−ＲＯＭ、光ディスクなど）、揮発性および不揮発性記憶装置（たとえば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、ファームウェア、プログラマブル論理など）などのコンピュータ可読媒体で実装されるコードまたは論理を指す。コンピュータ可読媒体内のコードは、プロセッサによってアクセスされ実行される。好ましい実施形態が実装されるコードは、伝送媒体を通してまたはネットワークを介してファイル・サーバから、さらにアクセス可能とすることができる。そのような場合には、コードが実装される製品は、ネットワーク伝送ライン、無線伝送媒体、空間を伝播する信号、電波、赤外線信号などの伝送媒体を含むことができる。したがって、「製品」は、コードが実施される媒体を含むことができる。さらに、「製品」は、コードが実施され（embodied）、処理され、実行されるハードウェアおよびソフトウェアのコンポーネントの組合せを含むことができる。もちろん、この構成に対しては、本発明の範囲を逸脱することなく多くの変更を行うことができ、製品は当技術分野に知られるどのような情報担持媒体（information
bearing medium）を含むこともできることが、当業者には理解されよう。
【００６９】
ここで説明した実装形態では、無効化ワードも更新ワードもどちらも、中央サーバ内の各エントリ内の情報の組ごとに維持される。代替実装形態では、更新ワードだけが維持される。そのような実装形態では、中央サーバは、要求側キャッシュ・サーバが古い（stale）データをもっているかどうかを判断するために、他のキャッシュ・サーバに対する組の中の更新ワードを処理して、他のキャッシュ・サーバのどれかがデータ・ユニットを変更しているかどうかを判断しなければならないはずである。
【００７０】
ここで説明した実装形態では、キャッシュ内で維持されるページは、メモリ・ページを含み、そこでは複数のメモリ・ページに、インターネットを介してあるＵＲＬからアクセスされる単一のＷｅｂページに対するデータが格納されていた。代替方法として、キャッシュ内のメモリ・ページが複数のＷｅｂページを含むのでもよい。
【００７１】
ここで説明した実装形態では、中央サーバおよび中央ディレクトリ・サーバ・プログラムが更新動作を管理して、更新の適用前に要求側キャッシュ・サーバが最新のデータを受け取ることを保証するようにしていた。代替実装形態では、中央サーバおよび中央ディレクトリ・サーバ・プログラムが実行するものとして説明した動作をキャッシュ・サーバ間に分散させて、分散中央ディレクトリを提供するのでもよい。そのような、中央ディレクトリ・サーバ・プログラムの実行する動作が分散している実装形態では、中央サーバで更新ワードおよび無効化ワード内で維持される情報は、キャッシュ・サーバに分散されて、キャッシュ・サーバが分散キャッシュ管理動作を実行することが可能になるはずである。
【００７２】
ここで説明した実装形態では、各キャッシュ・サーバが、キャッシュ・サーバ２ａ、２ｂ．．．２ｎに対するキャッシュ８ａ、８ｂ．．．８ｎ内で維持されるページごとに更新ワードのコピーを維持していた。代替方法として、キャッシュ・サーバが更新ワードを維持せずに、その代わりすべての整合性操作を中央サーバを通して取り扱うのでもよい。
【００７３】
更新ワードおよび無効化ワード内に含まれるものとして説明した情報は、更新および無効化の情報を提供するための、当技術分野に知られる１つまたは複数のどのようなデータ構造でも実装することができる。たとえば、更新および無効化の情報は、１つまたは複数のデータ・オブジェクト、データベース内のデータ・レコード、テーブル内のエントリ、別々のオブジェクトなどで実装することもできる。
【００７４】
キャッシュ内で維持されるページは、クライアントまたはユーザがデータを入力または付加してオブジェクトの内容を変更するどのようなタイプのマルチメディア・オブジェクトを含む、どのようなデータ・オブジェクトのタイプ（data object type）を含んでいてもよい。
【００７５】
ここで説明した実装形態では、キャッシュのそれぞれに結合される、分離したキャッシュ・サーバがある。キャッシュおよびキャッシュ・サーバは、密閉された同じユニット内にあってもよく、または別々のユニット内にあってもよい。代替実装形態では、１つのキャッシュ・サーバを複数のキャッシュに結合し、結合された複数のキャッシュに対する更新情報を維持するのでもよい。
【００７６】
ここで説明した実装形態では、中央サーバがインターネットからページをダウンロードしていた。代替方法として、中央サーバは、インターネット、ＬＡＮ（Local Area Network、構内通信網）、ＷＡＮ（Wide Area Network、広域通信網）、ＳＡＮ（Storage
Area Network、ストレージ・エリア・ネットワーク）などのどのようなネットワークからページをダウンロードするのでもよい。さらに、キャッシュ・サーバが直接にインターネットにアクセスしてページをダウンロードするのでもよい。
【００７７】
図３〜６に示した論理では、特定の順序で起きる特定のイベントが示されている。代替実装方法では、特定の動作を、変更または除去を行って、異なる順序で実行してもよい。その上、諸ステップを上述の論理に付加し、やはりここで説明した実装形態に整合するものとすることも可能である。さらに、本明細書で述べた動作が逐次的に起きるのでもよく、特定の動作が並列に処理されるのでもよい。さらにまた、動作は単一の処理装置によっても分散型の処理装置によっても実行することができる。
【００７８】
図７に、図１に示す中央サーバやキャッシュ・サーバなどの、ネットワーク・コンポーネントのコンピュータ・アーキテクチャ３００の一実装形態を示す。アーキテクチャ３００は、プロセッサ３０２（たとえば、マイクロプロセッサ）、メモリ３０４（たとえば、揮発性記憶装置）、およびストレージ３０６（たとえば、磁気ディスク・ドライブ、光ディスク・ドライブ、テープ・ドライブなどの不揮発性ストレージ）を含むことができる。ストレージ３０６は、内蔵（internal）ストレージ装置あるいは接続された（attached）またはネットワーク・アクセス可能なストレージを含むことができる。ストレージ３０６内のプログラムは、メモリ３０４へとロードされ、プロセッサ３０２によって当技術分野に知られる方法で実行される。このアーキテクチャは、さらに、ネットワークとの通信を可能にするネットワーク・カード３０８を含む。入力装置３１０は、プロセッサ３０２にユーザ入力を提供するために使用され、キーボード、マウス、ペン・スタイラス、マイクロフォン、タッチ・スクリーン（touch
sensitive display screen）、または当技術分野に知られる他のどのようなアクティベーションまたは入力の機構を含んでいてもよい。出力装置３１２は、プロセッサ３０２、または、ディスプレイ・モニタ、プリンタ、ストレージなどの他のコンポーネントから送信される情報を変換する能力がある。
【図面の簡単な説明】
【００７９】
【図１】本発明の諸態様が実装される分散ネットワーク・コンピューティング環境を示す図である。
【図２】ネットワーク・コンピューティング環境内の異なるキャッシュで維持されるデータに関する情報を維持するためのデータ構造を示す図である。
【図３】本発明の実装形態に従ってオブジェクトまたはページに対する要求を処理する論理を示す図である。
【図４】本発明の実装形態に従ってオブジェクトまたはページをキャッシュに返す論理を示す図である。
【図５】本発明の実装形態に従ってキャッシュ内のオブジェクトを変更する要求を処理する論理を示す図である。
【図６】本発明の実装形態に従ってキャッシュ内のオブジェクトを変更する要求を処理する論理を示す図である。
【図７】キャッシュ・サーバおよび中央サーバ、ならびに他のコンピューティング装置など、ネットワーク環境内のコンピューティング・コンポーネントのアーキテクチャを示す図である。
【国際調査報告】
2006500669.tif 000010
2006500669.tif 000011