(57)【要約】  レイヤーリング配置による、複数のコンピューターのメモリ容量を単一の一元化されたキャッシュに集約するシステム及び方法。上記レイヤーリング配置は、複数のマシンに拡張可能であり、データ・マネージャー・コンポーネント、オブジェクトマネージャーコンポーネント、及び分散オブジェクト・マネージャー・コンポーネントを含み、モジュラー様式により実装できる。さらに、レイヤーリング配置は、アプリケーションが気付く明示的なキャッシュ層（例えばキャッシュを除いたアーキテクチャ）を提供できて、（アプリケーションがキャッシュの存在を知らない暗示的なキャッシュと反対に）上記アプリケーションにどのオブジェクトを置く／取り除くかの判定が明示的に行われる。
2012504262.tif 000002
【特許請求の範囲】
【請求項１】
コンピューターに実装されるシステムであって、
関連付けられたアプリケーションに対して集約された明示的なキャッシュを供給するレイヤーリング配置（１００）であって、前記レイヤーリング配置は、
分散環境内の前記集約された明示的なキャッシュの、単一の一元化されたキャッシュへの抽象化を容易にする分散オブジェクト・マネージャー・コンポーネント（１１４）と、
前記単一の一元化されたキャッシュを構成するノードの各々に格納されたオブジェクトに関連付けられたポリシーを管理するオブジェクト・マネージャー・コンポーネント（１１２）と
を含む、レイヤーリング配置
を備えたことを特徴とするコンピューターに実装されるシステム。
【請求項２】
前記オブジェクトに対してストレージデータ構造を供給するデータ・マネージャー・コンポーネントをさらに備えたことを特徴とする請求項１に記載のコンピューターに実装されたシステム。
【請求項３】
前記分散オブジェクト・マネージャー・コンポーネントは、前記オブジェクト・マネージャー・コンポーネントの上に位置付けられて、前記オブジェクト・マネージャー・コンポーネントは・前記データ・マネージャー・コンポーネントの上に置かれることを特徴とする請求項２に記載のコンピューターに実装されたシステム。
【請求項４】
前記分散・マネージャー・コンポーネント、前記オブジェクト・マネージャー・コンポーネント及び各ノードの通信レイヤーは、プラグ可能であることを特徴とする請求項２に記載のコンピューターに実装されたシステム。
【請求項５】
前記単一の一元化されたキャッシュを構成するノード間のクラスタリングプロトコルを確立するクラスターリングサブストレートをさらに備えたことを特徴とする請求項１に記載のコンピューターに実装されたシステム。
【請求項６】
前記集約された明示的なキャッシュが、埋め込みアプリケーションのトポロジの一部として実装されることを特徴とする請求項１に記載のコンピューターに実装されたシステム。
【請求項７】
前記集約された明示的なキャッシュが、独立層の一部として実装されることを特徴とする請求項１に記載のコンピューターに実装されたシステム。
【請求項８】
前記単一の一元化されたキャッシュに対してデータ整合性の動作を供給するアベイラビリティサブストレートをさらに備えたことを特徴とする請求項１に記載のコンピューターに実装されたシステム。
【請求項９】
前記集約された明示的なキャッシュは、ＡＳＰ．ｎｅｔインスタンスにさらに関連付けられることを特徴とする請求項１に記載のコンピューターに実装されたシステム。
【請求項１０】
前記集約された明示的なキャッシュは、データの分配を容易にする人工知能コンポーネントをさらに備えたことを特徴とする請求項１に記載のコンピューターに実装されたシステム。
【請求項１１】
コンピューターに実装される方法であって、
ストレージの空きを集約して、オブジェクト分散コンポーネント及びオブジェクト・マネージャー・コンポーネント（１１２）を含むレイヤーリング配置（１００）を介した単一の一元化されたキャッシュを構成する動作と、
前記オブジェクト・マネージャー・コンポーネント（１１２）により前記単一の一元化されたキャッシュに格納されたオブジェクトに関連付けられたポリシーを管理する動作と、
前記単一の一元化されたキャッシュに関連付けられたノードに前記オブジェクト分散コンポーネントによる要求を発送する動作と
を備えたことを特徴とするコンピューターに実装される方法。
【請求項１２】
ロードバランサーを介して前記単一の一元化されたキャッシュに関連付けられたクラスターに渡って負荷を動的に再分散することをさらに備えたことを特徴とする請求項１１に記載のコンピューターに実装される方法。
【請求項１３】
前記単一の一元化されたキャッシュは、明示的なキャッシュの層であることを特徴とする請求項１１に記載のコンピューターに実装される方法。
【請求項１４】
前記分散コンポーネントが、前記発送動作を容易にするためにクライアント層の一部として実装されることを特徴とする請求項１２に記載のコンピューター実装の方法。
【請求項１５】
コンピューターに実装されるシステムであって、
関連付けられた複数のアプリケーション（３１０、３１２、３１４）に対して集約された明示的なキャッシュを作成する手段（１００）と、
前記集約された明示的なキャッシュからデータの取り除きポリシーを管理する手段（１２３）と
を備えたコンピューターに実装されるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散キャッシュ配置に関する。
【背景技術】
【０００２】
コンピューター技術（例えば、マイクロプロセッサ速度、メモリ容量、データ転送帯域幅、ソフトウェア機能等）における進歩の高まりは、様々な産業における増加したコンピューターアプリケーションに一般に貢献してきた。ますますより強力なサーバーシステムは、サーバーの配列として構成されることが多く、例えばＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ等、外部のソースから起こるサービス要求に対して与えられることが多い。
【０００３】
通常、コンピューターシステムにおける継続的な問題は、依然として、利用可能な情報又はデータの増加する量を扱うことのままである。いくつかの型のデータベース用のディスク又は他のメディアに格納されている情報の純粋な量は、劇的に増加してきた。ファイル及びディスクが２、３０年前に数千バイトで測られた一方、−当時は数百万バイト（メガバイト）であり、数十億バイト（ギガバイト）が続き−、現在、数百万メガバイト（テラバイト）の及び数十億メガバイトでさえのデータベースが作成され、日々の活動において使用されている。
【０００４】
さらに、様々な型のストレージデバイスは、情報が劣化することなく、比較的長い期間にわたって情報を保持することを可能にする。共通のストレージメディアは、フラッシュメモリであり、特にフラッシュメモリは、不揮発性型のストレージであり、一定の電源を利用することなく情報を保持する。上記タイプのメモリは、メモリカード、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、フラッシュデバイス、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄａｔａ  Ａｓｓｉｓｔａｎｔｓ）、デジタル・オーディオ・プレーヤー、デジタルカメラ、モバイル電話機等の様々な家電製品において用いられることが多い。
【０００５】
不揮発性ストレージメディアの別のよくあるタイプは、磁気ディスクであり、情報を磁化パターンにより記録することを可能にする。他のストレージメディアと同様に、磁気ディスクを、様々な方法（例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｍｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））において構成できて、同様に、多くの異なるアプリケーションにおいて採用できる。このタイプのストレージデバイスは、データベース及びアナログの記録とともに一般的に使用される。同様に、揮発性型のストレージが存在して、確かな有利をもたらして、さらに個別の不都合を伴うことがある。例えば、揮発性メディアに対する検索時間は、不揮発性メディアよりも一般に早いが、多くの動作は、確固不動の標準のために一貫性を増した。
【０００６】
さらに、今日、アプリケーションは、異なる層上、異なるサービス境界において及び異なるプラットフォーム（例えば、サーバー、デスクトップ、デバイス）上実行する。例えば、典型的なウェブアプリケーションにおいて、多くのアプリケーションは、大勢のユーザーをサポートするサーバー上に存在するが、アプリケーションのいくつかのクライアントコンポーネントは、デスクトップ、モバイルデバイス及びウェブブラウザー等において実行できる。さらに、ソフトウェア管理の複雑性に結合された接続性及び安価のストレージにおける利点は、オンラインサービス及びＳａａＳ（ｓｏｆｔｗａｒｅ−ａｓ−ａ−ｓｅｒｖｉｃｅ）を容易にする。上記サービスモデルにおいて、アプリケーション（及び関連付けられたデータ）は、通常、中央データセンター（「クラウド」ともいうことがある）においてホスティングされ、ウェブによりアクセス可能であり共有される。
【０００７】
分散アプリケーションは、膨大なユーザー、高性能、スループット及び応答時間に対してサポートを必要とする。さらに、上記サービス志向は、サービスコストを低くすることを必要とすることにより、低いコストにおいて拡張性及び性能を必要とする。
【０００８】
ストレージシステムの実装におけるさらなる挑戦は、データ及びアプリケーションの分散及び異種性に対するサポートである。アプリケーションは、ローカル、連合又はクラウドベースであるとすることができるソースから、データ（例えば、マッシュアップ）及びビジネスロジックを構成している。複合アプリケーションは、アプリケーションに最も適した型において共有される集約されたデータを必要とする。さらに、データ及びロジックの共有は、複合アプリケーションにおいて重要な要件である。
【０００９】
前に説明されるように、データ及びアプリケーションは、異なるセマンティクスパターン及びアクセスパターンにより異なる層において存在できる。例えば、バックエンドのサーバー／クラスターにおける又はクラウドにおけるデータは、信頼できる方向にあり、有線上のデータは、メッセージ指向であり、中間層におけるデータは、性能用にキャッシュされたデータかアプリケーション・セション・データかのいずれかであり、デバイス上のデータは、ローカルデータ又はバックエンドソースからキャッシュされたデータであるとすることができる。メモリのコストが下がるのと共に、かなり大きなキャッシュを、デスクトップ及びサーバーマシン上に構成できる。６４ビットハードウェアの十分な発達により、６４ビットＣＰＵは、クライアント及びサーバーマシンの主流になりつつある。真の６４ビットアーキテクチャは、６４ビットＣＰＵ、データ又はアドレスバス、仮想アドレサビリティ、及びメモリ制限の（２64バイトへの）劇的な増加をサポートする。さらに、オペレーティングシステム（例えば、Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標））を更新して、６４ビットのアドレス空間及び大きなメモリをサポートして利用する。例えば、デスクトップを、１６ＧＢ  ＲＡＭにより構成できて、サーバーを、２ＴＢまでのＲＡＭにより構成できる。大きなメモリキャッシュにより、データを、アプリケーションの近くに置くことを可能にすることによって、アプリケーションに、重要な有利な性能を与える。加えて、数百ギガバイトのストレージが標準である世界において、メモリ（大きなキャッシュ）におけるほとんどのデータを扱う性能、及びオブジェクトのグラフに対してテーブルからツリーに簡単にシフトする性能は、次世代のアプリケーションに対してプログラマーの生産性の鍵となる。
【発明の概要】
【００１０】
以下は、ここで説明されるいくつかの態様の基本的な理解を提供するための簡略化された課題を解決するための手段を表す。課題を解決するための手段は、主張される主題の広範囲の要約ではない。主張される主題の主要又は決定的な要素を個別すること又は主張される主題の範囲を描くことのいずれも意図しない。唯一の目的は、以降で表されるより詳細な説明である発明を実施するための形態の前置きとして簡略化された形式でいくつかの概念を表すことである。
【００１１】
主題のイノベーションは、複数のコンピューターのメモリ容量を単一の一元化されたキャッシュに集約することを可能にして、レイヤーリング（ｌａｙｅｒｉｎｇ）配置によって複数のマシンに拡張可能（例えば動的な拡張）であるとすることができる。上記レイヤーリング配置は、あらゆるシリアライズ可能なＣＬＲ（Ｃｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ）オブジェクトをキャッシュできて、単純なキャッシュＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）によるアクセスを提供できる。レイヤーリング配置は、データ・マネージャー・コンポーネント、オブジェクト・マネージャー・コンポーネント及び分散オブジェクト・マネージャー・コンポーネントを含んで、モジュールのやり方により実装できる。一態様において、データ・マネージャー・コンポーネントは、基本のデータ関数（例えば、ハッシュ関数）を供給して、オブジェクト・マネージャー・コンポーネントは、キャッシュオブジェクトを含んでいるオブジェクトファサード（ｆａｃａｄｅ）を実装して、一方、分散オブジェクト・マネージャーは、分散されたキャッシュにおいてデータの分散を提供する。このように、オブジェクト・マネージャー・コンポーネントは、領域をコンテナーにマッピングすることができて、データの取り除きの閾値を管理できて、キャッシュされたデータのポリシー管理を供給できる。上記領域は、通常、コンテナーに置かれた／挿入されたオブジェクトのコロケーション（例えば、同じノードのオブジェクトのコロケーション）を保証するキャッシュコンテナーを表すことができる。加えて、オブジェクト・マネージャー・コンポーネントは、分散されたキャッシュの様々な領域又はオブジェクトに対して（例えば、キャッシュされたデータに行われた変更のために）通知を作成できる。同様に、分散オブジェクト・マネージャー・コンポーネントは、分散されたキャッシュの異なる領域に関連付けられた様々なノードに要求を発送できる。さらに、上記分散オブジェクト・マネージャーは、与えられた要求に対して分散されたキャッシュのパーティションマップとインターフェースにより連結して、分散環境において集約されたキャッシュについての、単一の一元化されたキャッシュへの抽象化を容易にする。一態様において、分散オブジェクト・マネージャー・コンポーネントは、オブジェクト・マネージャー・コンポーネントの上に位置付けられて、オブジェクト・マネージャー・コンポーネント自体がデータ・マネージャー・コンポーネントの上に置かれる。さらに、例えば、強い統合を、ＡＳＰ．ＮＥＴに提供して、ソースデータベースにデータを書き込む必要なしにキャッシュにＡＳＰ．ＮＥＴセションデータをキャッシュすることを可能にすることができる。
【００１２】
上記は、ユーザーのニーズに容易に適合できるプラグ可能な機能（例えば、ユーザーの要求に基づいて、データ・マネージャー・コンポーネントを別のタイプのコンポーネントに置き換えること）を提供する。同様に、オブジェクト・マネージャー・コンポーネントを、別のオブジェクト・マネージャー・コンポーネントと置き換えることができて、スタックの初めから終わりまでコールバックの間にロックを保持してコール・バック・メカニズムを可能にすることにより、レイヤーリング配置において異なるモデルをプラグすることを可能にする。
【００１３】
関連した態様において、主題のイノベーションのレイヤーリング配置は、異なるレベル及び通信サブストレート（ｓｕｂｓｔｒａｔｅ）（例えば、ＴＣＰ／ＩＰ）上の動作を容易にするモジュール配置を提供して、２つのトポロジモデルに、すなわち、独立分離層モデル又は埋め込みアプリケーションモデルとして実装できる。独立分離層モデルにおいて、キャッシングレイヤーは、それ自体により独立分離層として機能する（このことを、アプリケーションサーバー及びデータサーバー間に位置付けることができる）。例えば、上記構成において、分散キャッシュは、ＷＡＳ（Ｗｉｎｄｏｗｓ  Ａｃｔｉｖａｔｉｏｎ  Ｓｅｒｖｉｃｅｓ）か、ウィンドウズサービスかのいずれかによりホストされたサービスとして実行して、アプリケーションから分離して実行する。アプリケーションは、分散キャッシュにより提供されるクライアントスタブを用いて分散キャッシュと通話できるか、ＲＥＳＴ（Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ）  ＡＰＩにより直にサービスに通話できるかのいずれかである。
【００１４】
あるいはまた、埋め込みアプリケーションモデルにおいて、キャッシュを、アプリケーション自体により埋め込むことができる（例えば、アプリケーションを一緒に接続してクラスターを構成することであり、例えば、ＡＳＰ．ｎｅｔインスタンスにキャッシュを埋め込んでＡＳＰ．ｎｅｔマシンのクラスターを構成すること等であり、ローカルキャッシュにアイテムを格納した状態において、他のマシンから見ることができる）。上記は、機能の視点からオブジェクト上にタグ付け及びＬＩＮＱ（Ｌａｎｇｕａｇｅ  Ｉｎｔｅｇｒａｔｅｄ  Ｑｕｅｒｙ）クエリーをさらに可能にする。次に、ＬＩＮＱクエリーを、格納されたオブジェクト上固有に実行できる（．Ｎｅｔアプリケーションにおいて埋め込むことができる）。
【００１５】
以上及び関連する目的の達成のために、主張される主題のある例示的な態様が、以下の発明を実施するための形態及び添付の図面と結びつけて本明細書で説明される。これらの態様は、主題が実践されうる様々な方法を示し、全てが主張される主題の範囲内となるように意図される。他の利点及び新規の特徴は、図面と併せて考慮されるとき、以下の発明を実施するための形態から明らかとなり得る。
【図面の簡単な説明】
【００１６】
【図１】主題のイノベーションの側面に係る例示的なレイヤーリング配置を示す図である。
【図２】主題のイノベーションの例示的な側面に係る、独立分離層モデルの実装に関するレイヤーリング配置のさらなるトポロジモデルを示す図である。
【図３】埋め込みアプリケーションモデルに付随するレイヤーリング配置のトポロジモデルを示す図である。
【図４】主題のイノベーションについての個別の側面に係る複数のマシン上に配置されたランタイムを含む分散キャッシュを示す図である。
【図５】主題のイノベーションの側面に係る分散キャッシュについての個別の方法を示す図である。
【図６】主題のイノベーションの側面に係る分散キャッシュについてのレイヤーリング配置を実装するさらなる方法を示す図である。
【図７】さらなる側面に係る一元化されたキャッシュビューの例示的な説明を示す図である。
【図８】主題のイノベーションの側面に係る分散環境においてデータをいつ、どこで、どのようにキャッシュするのかを推測及び／又は判定することを容易にするのに用いることできるＡＩコンポーネントを示す図である。
【図９】主題のイノベーションの様々な側面を実装する例示的な環境を示す図である。
【図１０】主題のイノベーションの側面に係る分散キャッシュのために用いることできるサンプルのコンピューティング環境の概略のブロック図である。
【発明を実施するための形態】
【００１７】
主題のイノベーションの様々な態様は添付の図面を参照してここで説明され、全体を通じて同一の参照符号は、同一の又は対応する要素を引用する。しかし、図面及び発明を実施するための形態、それに関連するものは、開示された個別の形式に主張される主題を制限することを意図しないことを理解すべきである。むしろ、意図は、すべての修正、等価及び代替を主張される主題の精神及び範囲内に網羅することである。
【００１８】
図１は、主題のイノベーションの態様による、複数のコンピューターのメモリ容量を単一の一元化されたキャッシュに集約できるようにする例示的なレイヤーリング配置を示す。上記レイヤーリング配置１００は、例えばＴＣＰ／ＩＰ等の通信レイヤーの異なるタイプに適応させることができる拡張可能なシステムを提供できて、プラグ可能な機能を、ユーザーのニーズに容易に適合するためにさらに可能にすることができる。レイヤーリング配置１００を実装する分散キャッシュは、マシンのクラスターにノードとして追加のコンピューターの追加により、関連付けられたアプリケーションの増加に動的にそれ自体を拡張できる。図１に示されるように、キャッシュノード１３１、１３３の各々（１からｎまで、ｎは整数）のレイヤーリング配置１００は、データ・マネージャー・コンポーネント１１０、オブジェクト・マネージャー・コンポーネント１１２及び分散オブジェクト・マネージャー・コンポーネント１１４を含み、モジュールのやり方により実装できるセットアップであり、分散オブジェクト・マネージャー・コンポーネント１１４は、オブジェクト・マネージャー・コンポーネント１１２の上に位置付けられて、オブジェクト・マネージャー・コンポーネント１１２は、データ・マネージャー・コンポーネント１１０の上に置かれる。データ・マネージャー・コンポーネント１１０は、基本のデータ関数（例えば、ハッシュ関数）を供給して、オブジェクト・マネージャー・コンポーネント１１２は、オブジェクトファサードを実装して、分散を提供する分散オブジェクト・マネージャー・コンポーネント１１４によるキャッシュオブジェクトを含む。上記のように、オブジェクト・マネージャー・コンポーネント１１２及びデータ・マネージャー・コンポーネント１１０は、ローカルエンティティとして動作できて、分散オブジェクト・マネージャー・コンポーネント１１４は、分散を実行する。さらに、クラスターリングサブストレートは、単一の一元化されたキャッシュを構成する複数のノード間のクラスタリングプロトコルを確立できる。例えば、ノードがクラスターに結合する又はクラスターを離れることになると、クラスターを追加する又は離れるのに必要な動作が管理されて、分散コンポーネント・アベイラビリティ・サブストレートは、上記情報を用いて、動作（例えば、ノードの状態を監視すること、ノードのライフサイクルを管理すること、別のマシン上のプライマリノードを作成すること）を管理できる。加えて、各ノードに対して、レイヤーリング配置を構成するコンポーネントの各々は、ユーザーのニーズ、システム要件等に基づいてプラグ可能であるとすることができる。
【００１９】
前に説明したように、データ・マネージャー・コンポーネント１００（例えばインメモリ）は、例えば、ハッシュテーブル、Ｂ木等の根源の高性能なデータ構造を提供する。上記データマネージャー１００がメモリバウンドであり、主題のイノベーションの分散キャッシュの全動作がアトミックであるので、通常、同時ハッシュテーブルを高度に実装できる。上記は、コンテナーを供給するためのインフラストラクチャを作成することをさらに容易にして、コンテナーにインデックス付けをする。加えて、これらのハッシュ構造に単純な取り除き及び有効期限切れを提供する。レイヤーリング配置１００により供給されるプラグ可能な機能のために、ユーザーは、例えば、トランザクション・データ・マネージャー又はディスクのページングされたデータマネージャー等のユーザーの要求に適応したデータマネージャーの異なるタイプにプラグできることを理解されたい。同様に、オブジェクト・マネージャー・コンポーネント１１２は、オブジェクトの抽象化を提供して、データマネージャーにより提供されるデータ構造を用いることにより、名前をつけられたキャッシュ及び領域の概念を実装する。
【００２０】
同様に、分散オブジェクト・マネージャー・コンポーネント１１４は、ローカルのオブジェクトマネージャーを用いて、分散コンポーネント１１１により統合して分散キャッシュの抽象化を提供する。主題のイノベーションについての分散キャッシュのコアは、システムを拡張可能及び利用可能にするために転送及びデータ整合性動作を提供する分散コンポーネント／アベイラビリティサブストレート１１１である。オプションとして、オブジェクト分散コンポーネントを、単一の一元化されたキャッシュに関連付けられたノードに要求を（例えば、直に）発送することを容易にするために、クライアント層の一部として実装できる。
【００２１】
個別の一態様において、分散オブジェクト・マネージャー・コンポーネント１１４は、発送マネージャー・コンポーネント１１７及び分散マネージャー・コンポーネント１１９をさらに含むことができる。発送マネージャー・コンポーネント１１７は、動的に拡張可能な分散キャッシュの一部として（例えば、領域が位置付けられている）プライマリノードに要求を発送するためのルーティングテーブルをさらに検索することができる。さらに、上記発送マネージャー・コンポーネント１１７を、クライアントがプライマリノードに直に要求を発送できるようにクライアントに与えることができる。例えば、受信ノード上の分散オブジェクト・マネージャー１１１は、パーティションのマップと双方向に通信して、ノードが分散キャッシュに関連付けられた複数のノードの一部としてのプライマリノードとして本当に指定されているかをチェックし、動作を実行するためにオブジェクト・マネージャー・コンポーネント１１４を呼び出す。書き込み動作の場合に、さらに、上記分散オブジェクト・マネージャー・コンポーネント１１４は、セカンダリノードにデータを複製するためにレプリケータと通信できる。さらにフェイルオーバー・マネージャー・システム（図示せず）と双方向に通信することもできて、起こりうる故障に続く処理を再構成する間、領域の複製を作成して、新しいセカンダリノード又はプライマリノードを作成する。
【００２２】
オブジェクト・マネージャー・コンポーネント１１２は、領域及びオブジェクトへの変更を追跡して、これらのイベントをリッスンしているデリゲート（ｄｅｌｅｇａｔｅ）へ通知を中継する通知マネージャー・コンポーネント１２３をさらに含むことができる。さらに、アプリケーションは、オブジェクトが存在するプライマリノードとは異なるかもしれないあらゆるノードの通知に対してデリゲートを記録できる。分散オブジェクト・マネージャー・コンポーネント１１４は、プライマリノードが故障すると、上記通知についての高いアベイラビリティを提供することを含んでいる分散されたやり方により通知の伝播をさらに管理できる。例えば、上記を、アプリケーションがデリゲートを記録するノードのデリゲートｉｄによりインデックス付けされたローカルのルックアップテーブルを保持することにより、処理できる。オブジェクトを格納するプライマリノードは、デリゲートｉｄ及び発信元ノード情報を保持する。上記オブジェクトが分散オブジェクト・マネージャー・コンポーネント１１４において変化すると、プライマリノードは、デリゲートｉｄを伝える全ての発信元ノードに通知できる。
【００２３】
同様に、受信側に関連付けられた分散オブジェクト・マネージャー・コンポーネント１１４は、適切なデリゲートを呼び出すためにルックアップテーブルを用いて、従って分散されたやり方によりアプリケーションへ変更情報を提供できる。例えば、通知は、非同期であることができて、さらに、通知を、同一のセカンダリノードを使用してバックアップできる。従って、故障イベントにおいて、セカンダリノードは、保留している通知を配信することを試みて、プライマリノードの故障の間の通知を再送信でき、これはプライマリが故障前に配信された通知に関する情報を同期しなかったかもしれないからである。全ての通知が領域、鍵及びバージョン情報を運ぶので、アプリケーションは、バージョンを使用して複製の通知を無視できる。
【００２４】
例−領域レベルコールバック
public delegate CacheCallback
elec_cbk = new CacheCallback (myclass .handler);
catalog. addCallback ("ElectronicsRegion, " elec_cbk);
Callback called for any updates to region
例−オブジェクトレベルコールバック
public delegate CacheltemRemovedCallback
elec_cbk = new CacheltemRemovedCallback ();
// Add the callback to the object; the elec_cbk delegate will be called
// whenever the object changes regardless of where the object is present
catalog.Add ("ElectronicsRegion," "key," object, elec_cbk);
【００２５】
同様に、アベイラビリティサブストレート１１１は、主題のイノベーションの分散キャッシュに関連付けられたストレージコンポーネントを含むシステムへのスケーラビリティ及びアベイラビリティを提供する。例えば、アベイラビリティサブストレートは、ロードバランサー、フェイルオーバー・マネージャー、レプリケータ等を含むことができる。上記アベイラビリティサブストレート１１１との双方向の通信は、それらの間のノードの故障検知及び信頼できるメッセージ配信を提供する通信サブストレート１０９である。さらに、通信サブストレート１０９は、通信チャネル及びクラスターマネージメントを提供する。上記通信サブストレート１０９は、新しいノードがクラスターに結合するたびに、又はノードが死ぬ若しくは交換されたメッセージ（例えば、ハート・ビート・メッセージ）の応答に失敗するとき、コールバックを提供できる。さらに、通信サブストレート１０９は、効率的なポイント・ツー・ポイント及びマルチキャスト配信チャネルを提供できて、さらに、レプリケーションプロトコルを実装するのに必要とされる信頼できるメッセージ配信をさらに提供できる。例えば、通信サブストレート１０９は、キャッシュアイテムにデリゲート情報を保持してアイテムが修正されると通知をトリガーすることにより、通知をサポートする。さらに、上記コンポーネントは、領域において定義されたポリシー又は指定されたキャッシュレベルに基づいて取り除きをトリガーする。
【００２６】
図２及び図３は２つのトポロジモデルを示し、すなわち、それぞれ、独立分離層モデル、及び埋め込みアプリケーションモデルである。図２の独立分離層モデルにおける個別の一態様によれば、キャッシング層２２０は、それ自体により独立分離層として機能する（アプリケーションサーバー及びデータサーバー間に位置付けることができる）。例えば、上記構成において、分散されたキャッシュは、ＷＡＳかウィンドウズサーバーかのいずれかによりホストされたサービスとして実行して、アプリケーションから分離して実行する。アプリケーション２０１、２０３、２０５（１からｍまで、ｍは整数）は、分散キャッシュにより提供されるクライアントスタブを用いて分散キャッシュと通話できるか、ＲＥＳＴ（Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ）  ＡＰＩにより直にサーバーと通話できるかのいずれかである。
【００２７】
あるいはまた、埋め込みアプリケーションモデルにおいて、キャッシュを、図３に示されるアプリケーション自体により埋め込むことができる。上記は、アプリケーション３１０、３１２、３１４（１からｋまで、ｋは整数）を一緒に接続してクラスターを構成することにより生ずることができて、例えば、ＡＳＰ．ｎｅｔインスタンスにキャッシュを埋め込んでＡＳＰ．ｎｅｔマシンのクラスターを構成することであり、ローカルキャッシュにアイテムを格納した状態において、他のマシンから見ることができる。例えば、分散キャッシュランタイムｄｌｌは、アプリケーションによりコンパイルされて、アプリケーションは、分散キャッシュランタイムに対するキャッシュホストとして動作する。すべてのスレッドのプール及びメモリは、アプリケーションのコンテナーからくる。
【００２８】
関連した態様において、ロードバランサー３０２は、１つまたは複数のノードが殺到するイベントにおいてクラスターに渡って負荷を動的に再分散できる。例えば、データを、再区分して、より少ない負荷を有するノードに広げることができる。全ての上記ノードは、構成メタデータの一部として負荷状態を定期的に送ることができる。さらに、ロードバランサー３０２は、どのノードが過負荷であり、バランスを取る必要があるかを判定するために構成を定期的に問い合わせる。例えば、負荷を分散させることは、プライマリノードのデータのホットなパーティションを再区分して、セカンダリノードの１つ（又は複数）に広げることである。このことは、構成データ（パーティションマップ）における変更を必要とするが、データの移動は必要としない（なぜならば、セカンダリノードが既にデータを有するからである）。他のシナリオにおいて、セカンダリノード自体がロードされることがあり、追加のデータを処理することができないので、他のセカンダリではないノードにデータを分散することが必要とされることがある。上記の場合に、（このノードがプライマリである）セカンダリノードのデータパーティションは、さらに負荷分散される必要があるか、負荷を分散させるためにセカンダリではないノードを選ぶことができるかのいずれかであり、この場合にパーティションマップにおける変更に加えて、データを移動させることが必要となる。
【００２９】
図４は、クラスターからである複数のマシン４１０、４１１、４１２（１からｍまで、ｍは整数）上に配置されるランタイムから構成される分散キャッシュ４００を示す。各マシン４１０、４１１、４１２上に、「キャッシュホスト」とも呼ばれる１つまたは複数のランタイムが存在できる。各キャッシュホスト４２２、４２３は、１つまたは複数の名前をつけられたキャッシュをホストする。名前をつけられたキャッシュを、分散キャッシュの構成ファイルに構成できる。さらに、名前をつけられたキャッシュを、クラスターにおけるマシンの全て又はサブセットの周りに広げることができる。さらに、各名前をつけられたキャッシュ内に１つまたは複数の領域４３３が存在できる。上記領域は、分散キャッシュにより暗示的に作成できて、アプリケーションにより明示的に定義できる。一般に、領域４３３のすべてのアイテムを、キャッシュホスト上にコロケートすることを保証できる。上記は、例えばクエリー及び他の設定動作等の、領域における複数のアイテム上動作する動作の性能を改善できる。さらに、領域が位置付けられるノードを、その領域のプライマリノードとして見なすことができて、通常、この領域へのアクセスは、その領域に対するプライマリノードへルーティングされることになる。名前をつけられたキャッシュが高いアベイラビリティに対する「バックアップ」を有するように構成される場合、１つまたは複数の他のノードを、データのコピーを含むように選ぶ。上記ノードは、その領域についてのセカンダリノードと呼ばれる。さらに、プライマリノードに行われた全ての変更は、これらのセカンダリノードに反映される。従って、領域についてのプライマリノードが故障する場合、セカンダリノードを使用して、ディスクに書かれたログを有する必要なしにデータを取り出すことができる。
【００３０】
次は、名前をつけられたキャッシュ及び領域の作成を示すコード例である。  
// CacheFactory class provides methods to return cache objects
// Create instance of cachefactory (reads appconfig)
CacheFactory fac = new CacheFactory ();
// Get a named cache from the factory
Cache catalog = fac .GetCache ("catalogcache"); 
//--------------------------------------------------------
// Simple Get/Put
catalog.Put ("toy- 101," new Toy ("thomas," ., .));
// From the same or a different client
Toy toyObj = (Toy) catalog.Get ("toy-101");
//--------------------------------------------------------
// Region based Get/Put catalog.
catalog.CreateRegion ("toyRegion");
// Both toy and toyparts are put in the same region
catalog.Put ("toyRegion," "toy-101," new Toy ( ., .));
Catalog.Put ("toyRegion," "toypart-100, " new ToyParts (...));
Toy toyObj = (Toy) catalog.Get ("toyRegion, " "toy-101");
【００３１】
図５は主題のイノベーションのさらなる態様による分散キャッシュの関連した方法５００を示す。例示的な方法が様々なイベント及び／又は動作の表現である一連のブロックとして示されてここで説明される一方、主題のイノベーションは上記ブロックの示された順に制限されない。例えば、いくつかの動作又はイベントは、イノベーションによる本明細書で示される順とは分離して、異なる順で及び／又は他の動作又はイベントと同時に起きるかもしれない。さらに、すべての示されたブロック、イベント又は動作が、主題のイノベーションによる方法を実装するのにさらに必要とされるかもしれないわけではない。さらに、イノベーションによる例示的な方法及び他の方法は、本明細書に示され説明される方法に関連してだけでなく、示されず又は説明されていない他のシステム及び装置に関連して実装されるかもしれない。初めに５１０において、システムに利用可能なキャッシュを、識別して、上記キャッシュは、レイヤーリング配置により複数のマシンに拡張可能であるとすることができる（例えば、新しいノードを追加することにより動的に拡張する）。続いて５２０において、上記キャッシュを、ユーザーに与えるように単一の一元化されたキャッシュに集約する。５３０において、アプリケーション／データを、上記集約されたキャッシュの初めから終わりまで分散する。次に、５４０において集約されたキャッシュを、アプリケーション及び／又はデータの変更要求に応じて拡張できる。
【００３２】
図６は主題のイノベーションの態様によるレイヤーリング配置を介して分散されたキャッシュの実装の関連した方法６００を示す。初めに６１０において、レイヤーリング配置を、供給して、データ・マネージャー・コンポーネント、オブジェクト・マネージャー・コンポーネント及び分散オブジェクト・マネージャー・コンポーネントを含み、これはモジュラーのやり方により実装できるセットアップであり、分散オブジェクト・マネージャー・コンポーネントは、オブジェクト・マネージャー・コンポーネントの上に位置付けられて、オブジェクト・マネージャー・コンポーネント自体は、データ・マネージャー・コンポーネントの上に置かれる。
【００３３】
６２０において、データ・マネージャー・コンポーネントは、基本のデータ関数（例えば、ハッシュ関数）を供給する。同様に、６３０において、オブジェクト・マネージャー・コンポーネントは、分散を提供する分散オブジェクト・マネージャー・コンポーネントを有するキャッシュオブジェクトを含むオブジェクトファサードを実装する。上記のように、オブジェクト・マネージャー・コンポーネント及びデータ・マネージャー・コンポーネントは、ローカルエンティティとして動作できて、分散マネージャーは６４０で分散を実行する。
【００３４】
図７は、一元化されたキャッシュビュー７２０を示す主題のイノベーションの更なる例示的な態様を示し、マシンのプロセスに渡って広げられるクライアントに対する一元化されたキャッシュビュー７２０を示す。上記システム７００は、整合性及びクエリーを有する全ての種類のデータに対して、明示的であり、分散され、インメモリ・アプリケーション・キャッシュを提供する。上記データは、異なるセマンティックにより異なる層(異なるサービス境界)において存在できる。例えば、バックエンドのデータベースに格納されたデータは信頼ができて、高度のデータの整合性及び完全性を必要とする。
【００３５】
通常、あらゆるデータインスタンスについて単一の信頼のできるソースである傾向がある。ビジネスロジックにより動作している中間層のほとんどのデータは、信頼できるデータのコピーである傾向であるとすることができる。上記コピーは、キャッシングに適している。上記のように、異なるタイプのデータ及び異なる層におけるそれらのセマンティックを理解することは、可能性のあるキャッシングの異なる度合いを定義する。
【００３６】
（参照データ）  
参照データは、信頼できるデータのバージョンである。元のデータの直接コピー（バージョン）か、複数のデータソースから集約及び変換されたかのいずれかである。参照データは、実際には不変であり、参照データ（又は対応する信頼できるデータ）を変更することは、参照データの新しいバージョンを作成する。すわなち、各参照データのバージョンは一意的である。参照データはキャッシングについての候補であり、参照データは変更しないので、複数のアプリケーション（ユーザー）に渡って共有でき、従って拡張性及び性能を増加する。例えば、複数のバックエンドアプリケーション及びデータソースに渡る製品情報を集約している製品カタログアプリケーションを考慮できる。カタログデータ上でのほとんどの共通の動作は、読むこと（又は閲覧）であり、通常のカタログ閲覧動作を大量の製品データ上で複製し、それをフィルターし、パーソナライズ化し、その後ユーザーに選択されたデータを表示する。鍵ベース及びクエリーベースのアクセスは動作の共通の型である。キャッシングはカタログのアクセスに重要な要求である。キャッシュされない場合、上記集約カタログに対する動作は、下層のソース上での動作に分解されることになる動作を要求し、下層の動作を呼び出し、応答を集め、結果を凝集した応答に集約する。カタログ動作ごとについてのバックエンドデータの大きなセットにアクセスすることは、非常に高価であり、応答時間及びアプリケーションのスループットに著しく影響できる。カタログアプリケーションにより近いバックエンドの製品データをキャッシングすることは、アプリケーションの性能及びスケーラビリティを著しく改善できる。同様に、集約されたフライトスケジュールは参照データの別の例である。参照データを通常は構成された間隔でそのソースから定期的に再読み込みできるか、又は信頼できるデータソースが変更するとき再読み込みできる。参照データへのアクセスは共有されているがほとんど読まれる。ローカルなアップデートが（データをより良く組織化するために）タグ付けについて実行されることが多い。大きな拡張をサポートするために、参照データをクラスター内の異なるマシン上の複数のキャッシュに複製できる。上述したように、参照データをすぐにキャッシュでき、高いスケーラビリティを提供できる。
【００３７】
（アクティビティデータ）  
アクティビティデータはビジネスの取引（トランザクション）の一部として現在実行しているアクティビティである。上記データは、ビジネス取引の一部として及び最終的にビジネス取引の終了時に発生し、履歴の（又はログ）情報としてバックエンドのデータソースに引き下がる。例えば、オンライン購買アプリケーションにおけるショッピングカートデータを考慮できる。一つのショッピングカートがあり、各オンライン購買セッションについて排他的である。購買のセッションの間、ショッピングカートをキャッシングし、購入された製品でアップデートし、ショッピングカートは購入の取引のためだけに可視及びアクセス可能である。清算の上で、支払いが適用されると、ショッピングカートはさらなる処理のために（キャッシュから）バックエンドアプリケーションに引き下がる。ビジネス取引がバックエンドアプリケーションにより処理されると、ショッピングカート情報は会計（及び履歴）の目的のためにログが取られる。
【００３８】
購買セッションがアクティブの間、ショッピングカートは読み込み及び書き込みの両方のためにアクセスされるが、共有されない。アクティビティデータのこの排他的なアクセスの性質は、分散キャッシングに適している。購入アプリケーションの大きなスケーラビリティをサポートするために、配送カートはキャッシュのクラスターに渡って分散できる。ショッピングカートが共有されないので、ショッピングカートのセットは分散されたキャッシュに渡ってパーティション化できる。分散されたキャッシュを動的に構成することにより、拡張の度合いを制御できる。
【００３９】
（リソースデータ）  
参照（共有された読み出し）及びアクティビティ（排他的な書き込み）データの両方をキャッシュできる。全てのアプリケーションデータがこれら２つのカテゴリーに落ちるわけではないことを理解されたい。これらは共有され、同時に読み出し及び書き込みされたデータであり、多数のトランザクションによりアクセスされる。例えば、在庫マネージメントアプリケーションを考慮すると、アイテムの在庫はアイテムの説明及び現在の量を有する。この量の情報は信頼でき、揮発性で、多数のユーザーの読み出し／書き込みのために同時にアクセスされる。上記データはリソースデータとして知られ、ビジネスロジック（例えば注文アプリケーションロジック）はリソースデータ（例えば量のデータ）に近く実行する。このリソースデータは通常、バックエンドのデータストアに格納される。しかし、性能の理由のために、アプリケーション層にキャッシュされる。単一のマシン上のメモリ内に量の情報をキャッシュすることが性能の改善を提供できる一方、単一のキャッシュは注文量が高いときアベイラビリティ又は拡張を提供できない。従って、量のデータを分散キャッシュに渡って複数のキャッシュに複製できる。
【００４０】
図８は、分散キャッシュ及び／又は分散アプリケーションデータをそれらの間でいつ、どこで、どのように拡張するかを推測及び／又は判定することを容易にするために採用できる人工知能（ＡＩ）コンポーネント８３０を示す。例えば、上記人工知能コンポーネント８３０は、システムの分散及び／又は拡張を改善するために分散されたキャッシュマネージャーで追加の分析を供給できる。本明細書で使用されるように、用語の「推測」は、イベント及び／又はデータを介してキャプチャされるように、観察のセットからシステム、環境及び／又はユーザーの状態の理由付け又は推測の処理を一般に指す。推測は、個別のコンテキスト又は動作を個別するために採用できるか、例えば状態上での確率分散を生成できる。推測は、確率的であることができ、つまりデータ及びイベントの考慮に基づく興味の状態上の確率分散の演算である。推測は、イベント及び／又はデータのセットから高レベルのイベントを構成するために採用された技術も指すことができる。上記推測は、イベントが近い一時的な近接において相関していようがいまいが、イベント及びデータが１又は多くのイベント及びデータストアから来るかどうか、観察されたイベント及び／又は格納されたイベントデータのセットからの新しいイベント又は動作の構成という結果になる。
【００４１】
ＡＩコンポーネント８３０は、本明細書で説明された発明の様々な態様を容易にすることと併せて説明されるように、種々の適したＡＩベースのスキームのどれでも採用できる。例えば、どのように又はどの候補に興味があるかを明確に又は暗に学習する処理を、自動的な分類システム及び処理を介して容易にできる。分類は、ユーザーが自動的に実行されることを望む動作を予知又は推測するために、確率的及び／又は統計ベースでの分析（例えば分析の有効性及び費用を考慮に入れる）を採用できる。例えば、ＳＶＭ（ｓｕｐｐｏｒｔ  ｖｅｃｔｏｒ  ｍａｃｈｉｎｅ）識別子を採用できる。他の分類アプローチは、ベイジアンネットワーク、決定木、及び独立した異なるパターンを提供する確率論的な分類モデルに採用できる。本明細書で使用される分類は、優先度のモデルの開発のために利用される静的な回帰をも含む。
【００４２】
主題のイノベーションが、明示的に訓練されている（例えば一般的な訓練データ）と同時に暗示的に訓練されている（例えばユーザーの振る舞いを観察すること、外因性の情報を受け取ることを介して）識別子を採用できるので、識別子は質問への返しに答える既定の基準により自動的に判定するために使用されることを、主題の仕様からすぐに理解されたい。例えば、よく理解されているＳＶＭに関して、ＳＶＭは識別子のコンストラクタ及び機能の選択モジュール内で学習又は訓練フェーズを介して構成される。識別子は、入力がｃｌａｓｓに属する、すなわち、ｆ（ｘ）＝ｃｏｎｆｉｄｅｎｃｅ（ｃｌａｓｓ）であるｃｏｎｆｉｄｅｎｃｅに、入力属性ベクトルｘ＝（ｘ１，ｘ２，ｘ３，ｘ４，ｘｎ）をマッピングする関数である。さらに、ルールベースのメカニズムを、そこへ関連付けられたルーティングマネージャー及びルーティング層の双方向の通信のためにさらに採用できる（例えば負荷分散、メモリ割り当て等）。
【００４３】
語の「例示的な」は、例、例え又は例示として供給することを意味するために本明細書で使用される。「例示的な」として本明細書で説明されるあらゆる態様又は設計は、他の態様又は設計上で好適又は利点として解釈される必要性はない。同様に、例は、明確化及び理解の目的だけで本明細書で提供され、あらゆる方法における主題のイノベーション又はその一部を限定することを意味しない。無数の追加又は代替の例を表示することもできたが、簡略化の目的のために省かれてきた。
【００４４】
さらに、主題のイノベーションの全て又は一部は、開示されたイノベーションを実装するためのコンピューターを制御するために、ソフトウェア、ファームウェア、ハードウェア、又はあらゆる組み合わせを製造するために、標準的なプログラミング及び／又はエンジニアリング技術を使用した製品のシステム、方法、装置又は製品として実装できる。例えばコンピューター読み取り可能なメディアは、磁気のストレージデバイス（例えばハードディスク、フロッピーディスク、磁気ストライプ・・・）、光ディスク（例えばＣＤ（ｃｏｍｐａｃｔ  ｄｉｓｋ）、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ））、スマートカード、及びフラッシュメモリデバイス（例えばカード、スティック、鍵ドライブ・・・）を含むことができるがこれらに限定されない。さらに、電子メールの送信及び受信、又はインターネット又はＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）等のネットワークへのアクセスにおいて使用されるデータ等のコンピューター読み取り可能な電子データを搬送するために搬送波を採用できることを理解されたい。当然のことながら、主張される主題の範囲又は精神から逸脱することなくこの構成に多くの修正が行われるかもしれないことを当業者は理解されたい。
【００４５】
さらに、主題のイノベーションの全て又は一部は、開示されたイノベーションを実装するためのコンピューターを制御するために、ソフトウェア、ファームウェア、ハードウェア、又はそのあらゆる組み合わせを製造するために、標準的なプログラミング及び／又はエンジニアリング技術を使用した製品のシステム、方法、装置又は品物として実装できる。例えばコンピューター読み取り可能なメディアは、磁気のストレージデバイス（例えばハードディスク、フロッピーディスク、磁気ストライプ・・・）、光ディスク（例えばＣＤ、ＤＶＤ）、スマートカード、及びフラッシュメモリデバイス（例えばカード、スティック、鍵ドライブ・・・）を含むことができるがこれらに限定されない。さらに、電子メールの送信及び受信、又はインターネット又はＬＡＮ等のネットワークへのアクセスにおいて使用されるデータ等のコンピューター読み取り可能な電子データを搬送するために搬送波を採用できることを理解されたい。当然のことながら、主張される主題の範囲又は精神から逸脱することなくこの構成に多くの修正が行われるかもしれないことを当業者は理解されたい。
【００４６】
開示された主題の様々な態様についての中身を提供するために、図９及び１０と同時に以下の議論が、適した環境の簡単で一般的な説明を提供することを意図し、開示された主題の様々な態様を実装するかもしれない。１つのコンピューター及び／又は複数のコンピューター上で実行するコンピュータープログラムのコンピューター実行可能な命令の一般的な中身において上で主題が説明されてきた一方で、イノベーションが他のプログラムモジュールと組み合わせて実装されるかもしれないことも当業者は理解されたい。
【００４７】
このアプリケーションにおいて使用されるように、用語の「コンポーネント」「システム」「エンジン」は、コンピューター関連エンティティを指すことを意図し、ハードウェア、ハードウェア及びソフトウェアの組み合わせ、ソフトウエェア、又は実行におけるソフトウェアのいずれかである。例えば、コンポーネントは、プロセッサ上で実行しているプロセス、プロセッサ、オブジェクト、実行可能なもの、実行のスレッド、プログラム、及び／又はコンピューターであることができるが、これらに限定されない。例として、サーバー上で実行しているアプリケーション及びサーバーの両方がコンポーネントであることができる。１つまたは複数のコンポーネントは、実行のプロセス及び／又はスレッド内で存在することができ、コンポーネントを１コンピューター及び／又は２以上のコンピューター間の分散の上にローカライズできる。
【００４８】
一般にプログラムモジュールはルーチン、プログラム、コンポーネント、データ構造、及び同様なものを含み、個別のタスクを実行し、及び／又は個別の抽象データ型を実装する。さらに、このイノベーション的な方法は、シングルプロセッサ又はマルチプロセッサのコンピューターシステム、ミニコンピューティングデバイス、メインフレームコンピューターと同時に、パーソナルコンピューター、ハンドヘルドコンピューティングデバイス（例えばＰＤＡ、電話、時計・・・）、マイクロプロセッサベース又はプログラム可能な家庭用又は工業用の電化製品等を含む他のコンピューターシステム構成で実施できることを当業者は理解されたい。示された態様は、タスクが通信ネットワークを通してリンクされているリモートの処理デバイスにより実行される分散コンピューティング環境においても実践されるかもしれない。しかし、イノベーションの態様の全てでなくてもいくつかはスタンドアロンのコンピューター上で実践できる。分散コンピューティング環境において、プログラムモジュールをローカル及びリモートのメモリストレージデバイスの両方に位置付けるかもしれない。
【００４９】
図９を参照して、主題のイノベーションの様々な態様を実装するための例示的な環境９１０が説明され、コンピューター９１２を含む。コンピューター９１２は、処理ユニット９１４、システムメモリ９１６及びシステムバス９１８を含む。システムバス９１８は、システムメモリ９１６を含むがこれに限られないシステムコンポーネントを処理ユニット９１４に結合する。処理ユニット９１４は様々な利用可能なプロセッサのどれかであるとすることができる。デュアルマイクロプロセッサ及び他のマルチプロセッサ構造も、処理ユニット９１４として採用されることができる。
【００５０】
システムバス９１８は、メモリバス又はメモリコントローラー、周辺バス又は外部のバス、及び／又は１１ビットバス、ＩＳＡ（Ｉｎｄｕｓｔｒｉａｌ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）、ＭＳＡ（Ｍｉｃｒｏ−Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）ＥＩＳＡ（Ｅｘｔｅｎｄｅｄ  ＩＳＡ）、ＩＤＥ（Ｉｎｔｅｌｌｉｇｅｎｔ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ）、ＶＬＢ（ＶＥＳＡ  Ｌｏｃａｌ  Ｂｕｓ）、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＡＧＰ（Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）ＰＣＭＩＣＡ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ  Ｍｅｍｏｒｙ  Ｃａｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ａｓｓｏｃｉ）及びＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｆａｃｅ）を含んでいるがこれらに限定されない利用可能なバス構造のあらゆる変化を使用するローカルバスを含んでいるバス構造の多くのタイプのいずかであることができる。
【００５１】
システムメモリ９１６は、揮発性メモリ９２０及び不揮発性メモリ９２２を含む。セットアップの間等のコンピューター９１２内の要素間で情報を転送するための基本のルーチンを含んでいるＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）は不揮発性メモリ９２２に格納される。例としてあり限定ではなく、不揮発性メモリ９２２はＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）ＰＲＯＭ（ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＥＰＲＯＭ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ＲＯＭ）又はフラッシュメモリを含むことができる。揮発性メモリ９２０は、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）を含み、外部キャッシュメモリとして動作する。例としてであり限定ではなく、ＲＡＭは、ＳＲＡＭ（ｓｙｎｃｈｒｏｎｏｕｓ  ＲＡＭ）、ＤＲＡＭ（ｄｙｎａｍｉｃ  ＲＡＭ）、ＳＤＲＡＭ（ｓｙｎｃｈｒｏｎｏｕｓ  ＤＲＡＭ）、ＤＤＲ  ＳＤＲＡＭ（ｄｏｕｂｌｅ  ｄａｔａ  ｒａｔｅ  ＳＤＲＡＭ）、ＥＳＤＲＡＭ（ｅｎｈａｎｃｅｄ  ＳＤＲＡＭ）、ＳＬＤＲＡＭ（Ｓｙｎｃｈｌｉｎｋ  ＤＲＡＭ、及びＤＲＲＡＭ（ｄｉｒｅｃｔ  Ｒａｍｂｕｓ  ＲＡＭ）等の多くの型で利用可能である。
【００５２】
コンピューター９１２はリムーバブル／リムーバブルでない、揮発性／不揮発性のコンピューターストレージメディアも含むことができる。図９はディスクストレージ２９４を示し、上記ディスクストレージ９２４は、磁気ディスクドライブ、フロッピーディスクドライブ、テープドライブ、Ｊａｚドライブ、Ｚｉｐドライブ、ＬＳ−６０ドライブ、フラッシュメモリカード又はメモリスティックのようなデバイスを含むが、これらに限られない。さらに、ディスクストレージ９２４は、ＣＤ−ＲＯＭ（ｃｏｍｐａｃｔ  ｄｉｓｋ  ＲＯＭ）デバイス、ＣＤ−Ｒ（ＣＤ  ｒｅｃｏｒｄａｂｌｅ）ドライブ、ＣＤ−ＲＷ（ＣＤ  ｒｅｗｒｉｔａｂｌｅ）ドライブ、ＤＶＤ−ＲＯＭ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ  ＲＯＭ）ドライブ等の光ディスクを含むがこれらに限られない他のストレージメディアと分離して又は組み合わせてストレージメディアを含むことができる。ディスクストレージデバイス９２４のシステムバス９１８への接続を容易にするために、リムーバブル又はリムーバブルでないインターフェースがインターフェース９２６等で通常使用される。
【００５３】
図９は、適したオペレーティング環境９１０において説明される基本のユーザー及びコンピューターリソースの間の仲介として動作するソフトウェアを説明することを理解されたい。上記ソフトウェアはオペレーティングシステム９２８を含む。オペレーティングシステム９２８は、ディスクストレージ９２４上に格納でき、コンピューターシステム９１２のリソースを制御及び割り当てるために動作する。システムアプリケーション９３０は、システムメモリ９１６又はディスクストレージ９２４のいずれかに格納されたプログラムモジュール９３２及びプログラムデータ９３４を通してオペレーティングシステム９２８によりリソースの管理を利用する。本明細書で説明される様々なコンポーネントは様々なオペレーティングシステム又はオペレーティングシステムの組み合わせで実装できることを理解されたい。
【００５４】
ユーザーは、入力デバイス９３６を通してコンピューター９１２にコマンド又は情報を入れる。入力デバイス９３６は、マウス、トラックボール、スタイラス（タッチペン、ｓｔｙｌｕｓ）、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ（衛星放送受信アンテナ、ｓａｔｅｌｌｉｔｅ  ｄｉｓｈ）、スキャナー、ＴＶ（テレビ）チューナーカード、デジタルカメラ、デジタルビデオカメラ、ウェブカメラ等を含むがこれらに限定されない。これら及び他の入力デバイスは、インターフェースポート９３８を介してシステムバス９１８を通して処理ユニット９１４に接続する。インターフェースポート９３８は、例えば、シリアルポート、パラレルポート、ゲームポート及びＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）を含む。出力デバイス９４０は入力デバイス９３６としていくつかの同じタイプのポートを使用する。従って例えばＵＳＢポートがコンピューター９１２に入力を提供し、コンピューター９１２から出力デバイス９４０に情報を出力するために使用されるかもしれない。出力アダプター９４２は、モニター、スピーカー及びプリンターのようないくつかの出力デバイス９４０、とりわけ特別なアダプターを必要とする他の出力デバイス９４０が存在することを示すために提供される。出力アダプター９４２は、出力デバイス９４０及びシステムバス９１８間での接続の手段を提供するビデオ及びサウンドカードを含み、これらは例示の目的であり限定ではない。デバイスの他のデバイス及び／又はシステムが、リモートコンピューター９４４等の入力及び出力の両方の能力を提供することに留意されたい。
【００５５】
コンピューター９１２は、リモートコンピューター９４４等の１つまたは複数のリモートコンピューターへの論理的な接続を使用するネットワーク化された環境において動作できる。リモートコンピューター９４４は、パーソナルコンピューター、サーバー、ルーター、ネットワークＰＣ、ワークステーション、マイクロプロセッサベースの電化製品、ピアデバイス又は他の共通ネットワークノード等であることができ、コンピューター９１２に関連して説明される多く又は全ての要素を通常含む。簡潔にする目的の為に、メモリストレージデバイス９４６だけは、リモートコンピューター９４４で示される。リモートコンピューター９４４は、ネットワークインターフェース９４８を通してコンピューター９１２に論理的に接続され、その後通信接続９５０を介して物理的に接続される。ネットワークインターフェース９４８はＬＡＮ（ｌｏｃａｌ−ａｒｅａ  ｎｅｔｗｏｒｋｓ）及びＷＡＮ（ｗｉｄｅ−ａｒｅａ  ｎｅｔｗｏｒｋｓ）、等の通信ネットワークを包含する。ＬＡＮ技術は、ＦＤＤＩ（Ｆｉｂｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａ  Ｉｎｔｅｒｆａｃｅ）、ＣＤＤＩ（Ｃｏｐｐｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａ  Ｉｎｔｅｒｆａｃｅ）、Ｅｔｈｅｒｎｅｔ（イーサーネット）／ＩＥＥＥ ８０２．３、Ｔｏｋｅｎ  Ｒｉｎｇ（トークンリング）／ＩＥＥＥ  ８０２．５等を含む。ＷＡＮ技術は、ポイントツーポイントリンク、ＩＳＤＮ（Ｉｎｔｅｇｒａｔｅｄ  Ｓｅｒｖｉｃｅｓ  Ｄｉｇｉｔａｌ  Ｎｅｔｗｏｒｋｓ）及びその変化のような回路交換ネットワーク、パケット交換ネットワーク、及びＤＳＬ（Ｄｉｇｉｔａｌ  Ｓｕｂｓｃｒｉｂｅｒ  Ｌｉｎｅｓ）を含むがこれらに限定されない。
【００５６】
通信接続９５０はネットワークインターフェース９４８をバス９１８に接続するために採用されたハードウェア／ソフトウェアを差す。通信接続９５０がコンピューター９１２の明らかに内部の例示について示される一方で、コンピューター９１２の外部であることもできる。ネットワークインターフェース９４８への接続のために必要なハードウェア／ソフトウェアは、例示の目的のためのみで、標準の電話グレードのモデム、ケーブルモデム、ＤＳＬモデム、ＩＳＤＮアダプター、イーサネットカードを含むモデム等の内部及び外部の技術を含む。図１０はサンプルのコンピューティング環境１０００の概略のブロック図であり、主題のイノベーションの態様による分散キャッシュのために採用できる。システム１０００は１つまたは複数のクライアント１０１０を含む。クライアント１０１０はハードウェア及び／又はソフトウェア（例えば、スレッド、プロセス、コンピューティングデバイス）であることができる。システム１０００は１つまたは複数のサーバー１０３０も含む。サーバー１０３０はハードウェア及び／又はソフトウェア（例えば、スレッド、プロセス、コンピューティングデバイス）であることもできる。サーバー１０３０は、例えば本明細書で説明されたコンポーネントを採用することにより変換を実行するスレッドを収納できる。クライアント１０１０及びサーバー１０３０間の一つの可能性のある通信は、１つまたは複数のコンピューターのプロセス間で送信されるために適合されたデータパケットの型であるかもしれない。システム１０００は、クライアント１０１０及びサーバー１０３０間の通信を容易にするために採用できる通信フレームワーク１０５０を含む。クライアント１０１０は、クライアント１０１０にローカルに情報を格納するために採用できる１つまたは複数のクライアント・データ・ストア１０６０に動作可能に接続される。同様に、サーバー１０３０は、サーバー６３０にローカルに情報を格納するために採用できる１つまたは複数のサーバー・データ・ストア１０４０に動作可能に接続される。
【００５７】
上で説明されてきたことは、様々な例示的な態様を含む。当然のことながら、これらの態様の説明の目的のためにコンポーネント又は方法論のあらゆる考えられる組み合わせを説明することは不可能であるが、多くの更なる組み合わせ及び置換が可能であることを当業者は理解されたい。従って、本明細書で説明される態様は、添付の特許請求の範囲の精神及び範囲内に落ちる全ての上記変更、修正及び変化を包含することを意図する。さらに、用語「含む」は発明を実施するための形態又は特許請求の範囲のいずれかにおいて使用される限り、上記用語は、用語「備える、備えた」に似た方法で包含することを意図され、「備える、備えた」は特許請求の範囲において暫定の語として採用されるときに解釈されるからである。
【図１】
2012504262.tif 000003
【図２】
2012504262.tif 000004
【図３】
2012504262.tif 000005
【図４】
2012504262.tif 000006
【図５】
2012504262.tif 000007
【図６】
2012504262.tif 000008
【図７】
2012504262.tif 000009
【図８】
2012504262.tif 000010
【図９】
2012504262.tif 000011
【図１０】
2012504262.tif 000012
【国際調査報告】
2012504262.tif 000013
2012504262.tif 000014