(57)【要約】本発明のソリューションは、動的に生成されたデータを記憶しそれにサービスするための、キャッシュメモリの能力を増加させる。本発明は、また、キャッシュが種々様々なアプリケーションリクエストタイプを効率的に扱うことを可能にし、それによってアプリケーションの性能を向上させ、キャッシュによりサービスされるデータの新鮮さを保つ管理上のむずかしさを軽減する。オブジェクトを始めに生成したアプリケーションサーバによって実行された処理を複製しない方法でデータを理解し処理する能力を組み込むことの他に、そのようなアプリケーションサーバの挙動を効率的に予測するヒューリスティックスの使用によって動的なコンテントをキャッシングする効果的な技術を提供する。本発明のこれらの手法は、動的キャシングの使用の頻度を上げ、それによって、ネットワークおよび基礎となるアプリケーションインフラの性能の改善に寄与する。
2008529127.tif 000002
【特許請求の範囲】
【請求項１】
キャッシング可能として識別されてない動的に生成されたオブジェクトをキャッシングする方法であって、該方法は、
（ａ）キャッシング可能として識別されてない動的に生成されたオブジェクトを記憶するステップであって、該動的に生成されたオブジェクトは発信サーバからサービスされる、ステップと、
（ｂ）該キャッシングされた動的に生成されたオブジェクトを無効にするリクエストを、該キャッシュによって受信するステップと、および
（ｃ）該リクエストに応答して、該キャッシュによって、該キャッシングされた動的に生成されたオブジェクトを無効としてマークするステップと
を包含する、方法。
【請求項２】
前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、前記発信サーバによってリクエストすることを包含する、請求項１に記載の方法。
【請求項３】
前記発信サーバにおける前記動的に生成されたオブジェクトに対する変化に応答して、前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、該発信サーバによって自動的にリクエストすることを包含する、請求項２に記載の方法。
【請求項４】
前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、クライアントによってリクエストすることを包含し、前記発信サーバと通信する該クライアントは、該動的に生成されたオブジェクトを受信する、請求項１に記載の方法。
【請求項５】
前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、外部の管理制御によってリクエストすることを包含する、請求項１に記載の方法。
【請求項６】
前記無効としてマークされたキャッシングされた動的に生成されたオブジェクトを、前記キャッシュからフラッシュすることを包含する、請求項１に記載の方法。
【請求項７】
１０ミリ秒以下のある時間内のキャッシングで前記動的に生成されたオブジェクトを無効にする前記リクエストを、前記キャッシュによって受信することを包含する、請求項１に記載の方法。
【請求項８】
１０ミリ秒以下のうちの１つの前記キャッシングされた動的に生成されたオブジェクトの有効期限切れに応答して、無効にするための前記リクエストを、前記キャッシュによって受信することを包含する、請求項１に記載の方法。
【請求項９】
前記発信サーバとクライアントとの間で通信するアプライアンス、ネットワークデバイスまたはコンピューティングデバイスのうちの１つにおいて、前記キャッシュを動作させることを包含する、請求項１に記載の方法。
【請求項１０】
少なくとも１つのキャッシング可能として識別されないオブジェクトを有するグループの動的に生成されたオブジェクトをキャッシングする方法であって、該方法は、
（ａ）発信サーバから既にサービスされたグループの動的に生成されたオブジェクトを、キャッシュにおいて識別するステップであって、該動的に生成されたオブジェクトのうちの少なくとも１つは、キャッシング可能として識別されない、ステップと、
（ｂ）該キャッシュによって、該グループをオブジェクト決定要素に対応付けるステップと、および
（ｃ）通信を該キャッシュによって、インタセプトするステップであって、該通信は、該グループの該オブジェクト決定要素を識別し、該発信サーバにおいて、該グループの該オブジェクトのうちの１つに対して変化が発生しようとしているかまたは発生したかの１つであることを指示する、ステップと
を包含する、方法。
【請求項１１】
前記通信を受信することに応答して、前記グループの動的に生成されたオブジェクトを無効として、前記キャッシュによってマークすることを包含する、請求項９に記載の方法。
【請求項１２】
前記無効としてマークされたグループのオブジェクトを、前記キャッシュからフラッシュすることを包含する、請求項１０に記載の方法。
【請求項１３】
前記グループの動的に生成されたオブジェクトは、指定済みである、請求項９に記載の方法。
【請求項１４】
前記グループの動的に生成されたオブジェクトを自動的に識別し、規則に従って前記オブジェクト決定要素を該グループに自動的に対応付けすることをさらに包含する、請求項９に記載の方法。
【請求項１５】
動的に生成されたオブジェクトのキャッシュを維持する方法であって、該方法は、
（ａ）クライアントと発信サーバとの間の通信をキャッシュによってインタセプトするステップと、
（ｂ）該通信においてオブジェクト決定要素を該キャッシュによって識別するステップであって、該オブジェクト決定要素は、該発信サーバにおける動的に生成されたオブジェクトにおいて変化が発生したかまたは発生するかのうちの１つを指示すると、および
（ｃ）該キャッシュに記憶されている該動的に生成されたオブジェクトを該キャッシュによって無効としてマークするステップと
を包含する、方法。
【請求項１６】
前記動的に生成されたオブジェクトを前記発信サーバから獲得することを包含する、請求項１５に記載の方法。
【請求項１７】
前記無効である動的に生成されたオブジェクトを前記キャッシュからフラッシュすることを包含する、請求項１５に記載の方法。
【請求項１８】
前記動的に生成されたオブジェクトは、キャッシング可能として識別されていない、請求項１５に記載の方法。
【請求項１９】
（ｅ）前記キャッシュにおいて、前記動的に生成されたオブジェクトを、前記発信サーバから既にサービスされたグループの動的に生成されたオブジェクトに対応付けるステップと、
（ｆ）該キャッシュによって、該グループをオブジェクト決定要素に、対応付けるステップと、および
（ｇ）前記通信に応答して、該キャッシュによって該グループの動的に生成されたオブジェクトを無効としてマークするステップと
を包含する、請求項１５に記載の方法。
【請求項２０】
無効としてマークされた前記グループの動的に生成されたオブジェクトを、前記キャッシュからフラッシュすることを包含する、請求項１９に記載の方法。
【請求項２１】
前記グループの動的に生成されたオブジェクトは、指定済みである、請求項１９に記載の方法。
【請求項２２】
前記グループの動的に生成されたオブジェクトを自動的に識別し、規則に従って前記オブジェクト決定要素を該グループに自動的に対応付けすることをさらに包含する、請求項１９に記載の方法。
【請求項２３】
前記クライアントによって、前記オブジェクト決定要素を定義済ストリングとして前記通信に埋め込むことを包含する、請求項１５に記載の方法。
【請求項２４】
前記動的に生成されたオブジェクトに対応付けられた定義済ヒューリスティック規則に基づき、前記オブジェクト決定要素を識別することを包含する、請求項１５に記載の方法。
【請求項２５】
前記キャッシュによって、次の通信のエレメント：ＵＳＥＲＩＤ、ＩＰアドレス、ＴＣＰポート、ＨＴＴＰヘッダ、カスタムＨＴＴＰヘッダ、クライアントＵＲＬ、クッキーヘッダ、ＵＲＬクエリストリングおよびＰＯＳＴボディ、のうちの１つから、前記オブジェクト決定要素を選択することを包含する、請求項１５に記載の方法。
【請求項２６】
ユーザによって構成された無効ポリシーに基づき、前記キャッシュによって、前記オブジェクト決定要素を前記通信から抽出することを包含する、請求項１５に記載の方法。
【請求項２７】
前記オブジェクト決定要素を、前記キャッシュに記憶されている１つ以上のオブジェクトまたはグループのオブジェクトに対応づけるために、該キャッシュにおいてテーブルを維持することを包含する、請求項１５に記載の方法。
【請求項２８】
前記キャッシュに記憶すべきセットの動的に生成されたオブジェクトを識別するために、知的統計エンジンによって、前記クライアントからの通信を調査することを包含する、請求項１５に記載の方法。
【請求項２９】
前記キャッシュによって、該キャッシュに記憶されているオブジェクトをコンテントグループに対応付けることであって、該コンテントグループは、指標としてインカーネーション数を有するハッシュテーブルによって表される、請求項１５に記載の方法。
【請求項３０】
前記動的に生成されたオブジェクトに対する変化を決定するために、前記通信を介して識別された該動的に生成されたオブジェクトについて、前記キャッシュによって、ハッシュアルゴリズムを実行することを包含する、請求項１５に記載の方法。
【請求項３１】
キャッシング可能として識別されていない動的に生成されたオブジェクトをキャッシングするシステムであって、該システムは、
キャッシング可能として識別されていない動的に生成されたオブジェクトを記憶するステップであって、該動的に生成されたオブジェクトは発信サーバからサービスされる、手段と、
該キャッシングされた動的に生成されたオブジェクトを無効にするリクエストを、該キャッシュによって受信する手段と、
該リクエストに応答して該キャッシュによって、該キャッシングされた動的に生成されたオブジェクトを無効としてマークする手段と
を備えている、システム。
【請求項３２】
前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、前記発信サーバによってリクエストする手段を備えている、請求項３１に記載のシステム。
【請求項３３】
前記発信サーバにおける前記動的に生成されたオブジェクトに対する変化に応答して、前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、該発信サーバによって自動的にリクエストする手段を備えている、請求項３１に記載のシステム。
【請求項３４】
前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、クライアントによってリクエストすることを包含し、前記発信サーバと通信する該クライアントは、該動的に生成されたオブジェクトを受信する、請求項３１に記載のシステム。
【請求項３５】
前記キャッシングされた動的に生成されたオブジェクトを無効にすることを、外部の管理制御によってリクエストする手段を備えている、請求項３１に記載のシステム。
【請求項３６】
前記無効としてマークされたキャッシングされた動的に生成されたオブジェクトを前記キャッシュからフラッシュする手段を備えている、請求項３１に記載のシステム。
【請求項３７】
１０ミリ秒内で前記動的に生成されたオブジェクトをキャッシングする前記無効リクエストを、受信する手段を備えている、請求項３０に記載のシステム。
【請求項３８】
１０ミリ秒内で前記動的に生成されたオブジェクトをキャッシングする前記無効リクエストを、受信する手段を備えている、請求項３１に記載のシステム。
【請求項３９】
１０ミリ秒以下のうちの１つの前記キャッシングされた動的に生成されたオブジェクトの期限切れに応答して、無効にするための前記リクエストを、前記キャッシュによって受信する手段を備えている、請求項３１に記載のシステム。
【請求項４０】
前記発信サーバとクライアントとの間で通信するアプライアンス、ネットワークデバイスまたはコンピューティングデバイスのうちの１つにおいて、前記キャッシュが動作する、請求項３１に記載のシステム。
【請求項４１】
キャッシング可能として識別されない少なくとも１つのオブジェクトを有するグループの動的に生成されたオブジェクトをキャッシングするシステムであって、該システムは、
発信サーバから既にサービスされたグループの動的に生成されたオブジェクトを、キャッシュにおいて識別する手段であって、該動的に生成されたオブジェクトのうちの少なくとも１つは、キャッシング可能として識別されない、手段と、
該キャッシュによって、該グループをオブジェクト決定要素に対応付ける手段と、
通信を該キャッシュによってインタセプトする手段であって、該通信は、該グループの該オブジェクト決定要素を識別し、該発信サーバにおいて、該グループの該オブジェクトのうちの１つに対して変化が発生しようとしているかまたは発生したかのうちの１つであることを指示する、手段と
を備えている、システム。
【請求項４２】
前記通信を受信することに応答して、前記グループの動的に生成されたオブジェクトを無効として、前記キャッシュによってマークする手段を備えている、請求項４１に記載のシステム。
【請求項４３】
前記無効としてマークされたグループのオブジェクトを、前記キャッシュからフラッシュする手段を備えている、請求項４１に記載のシステム。
【請求項４４】
前記グループの動的に生成されたオブジェクトは、指定済みである、請求項４１に記載のシステム。
【請求項４５】
前記グループの動的に生成されたオブジェクトを自動的に識別し、規則に従って前記オブジェクト決定要素を該グループに自動的に対応付けする手段を備えている、請求項４１に記載のシステム。
【請求項４６】
動的に生成されたオブジェクトのキャッシュを維持するシステムであって、該システムは、
クライアントと発信サーバとの間の通信をキャッシュによってインタセプトする手段と、
該通信においてオブジェクト決定要素を該キャッシュによって識別する手段であって、該発信サーバにおける動的に生成されたオブジェクトにおいて変化が発生したかまたは発生するかのうちの１つを指示する手段と、
該キャッシュに記憶されている該動的に生成されたオブジェクトを該キャッシュによって無効としてマークする手段と
を備えている、システム。
【請求項４７】
前記動的に生成されたオブジェクトを前記発信サーバから獲得する手段を備えている、請求項４６に記載のシステム。
【請求項４８】
前記無効である動的に生成されたオブジェクトを前記キャッシュからフラッシュする手段を備えている、請求項４６に記載のシステム。
【請求項４９】
前記キャッシュにおいて、前記動的に生成されたオブジェクトを、前記発信サーバから既にサービスされたグループの動的に生成されたオブジェクトに対応付ける手段と、
該キャッシュによって該グループをオブジェクト決定要素に対応付ける手段と、
前記通信に応答して、該キャッシュによって該グループの動的に生成されたオブジェクトを無効としてマークする手段と
を備えている、請求項４６に記載のシステム。
【請求項５０】
前記動的に生成されたオブジェクトは、非キャッシング可能として識別される、請求項４６に記載のシステム。
【請求項５１】
無効としてマークされた前記グループの動的に生成されたオブジェクトを、前記キャッシュからフラッシュする手段を備えている、請求項４６に記載のシステム。
【請求項５２】
前記グループの動的に生成されたオブジェクトは、指定済みである、請求項４６に記載のシステム。
【請求項５３】
前記グループの動的に生成されたオブジェクトを自動的に識別し、規則に従って前記オブジェクト決定要素を該グループに自動的に対応付けする手段を備えている、請求項４６に記載のシステム。
【請求項５４】
前記クライアントによって、前記オブジェクト決定要素を定義済ストリングとして前記通信に埋め込む手段を備えている、請求項４６に記載のシステム。
【請求項５５】
前記動的に生成されたオブジェクトに対応付けられた定義済ヒューリスティック規則に基づき、前記オブジェクト決定要素を識別する手段を備えている、請求項４６に記載のシステム。
【請求項５６】
前記キャッシュによって、次の通信のエレメント：ＵＳＥＲＩＤ、ＩＰアドレス、ＴＣＰポート、ＨＴＴＰヘッダ、カスタムＨＴＴＰヘッダ、クライアントＵＲＬ、クッキーヘッダ、ＵＲＬクエリストリングおよびＰＯＳＴボディ、のうちの１つから、前記オブジェクト決定要素を選択する手段を備えている、請求項４６に記載のシステム。
【請求項５７】
ユーザによって構成された無効ポリシーに基づき前記キャッシュによって、前記オブジェクト決定要素を前記通信から抽出する手段を備えている、請求項４６に記載のシステム。
【請求項５８】
前記オブジェクト決定要素を、前記キャッシュに記憶されている１つ以上のオブジェクトまたはグループのオブジェクトに対応づけるために、該キャッシュにおいてテーブルを維持する手段を備えている、請求項４６に記載のシステム。
【請求項５９】
前記キャッシュに記憶すべきセットの動的に生成されたオブジェクトを識別するために、知的統計エンジンによって、前記クライアントからの通信を調査する手段を備えている、請求項４６に記載のシステム。
【請求項６０】
前記キャッシュによって、該キャッシュに記憶されているオブジェクトをコンテントグループに対応付ける手段を備え、該コンテントグループは、指標としてインカーネーション数を有するハッシュテーブルによって表される、請求項４６に記載のシステム。
【請求項６１】
前記動的に生成されたオブジェクトに対する変化を決定するために、前記通信を介して識別された該動的に生成されたオブジェクトについて、前記キャッシュによって、ハッシュアルゴリズムを実行する手段を備えている、請求項４６に記載のシステム。
【請求項６２】
デバイスのパケット処理エンジンであって、該パケット処理エンジンは、少なくとも１つの動的に生成されたオブジェクト含むネットワークパケットを処理し、該少なくとも１つの動的に生成されたオブジェクトをキャッシュに記憶する、パケット処理エンジンにおいて、パケット処理タイマの信号に応答して、該キャッシュにあるキャッシングされた動的に生成されたオブジェクトを無効にする方法であって、該方法は、
（ａ）ネットワークパケットを処理するために、パケット処理タイマから第１の信号を受信するステップと、
（ｂ）該信号に応答して該ネットワークパケットを処理するステップと、
（ｃ）キャッシングされた動的に生成されたオブジェクトが無効であることを指示する第２の信号を、キャッシュに送信するステップと
を包含する、方法。
【請求項６３】
前記キャッシングされた動的に生成されたオブジェクトを無効にする無効コマンドを、前記第２の信号によって提供することを包含する、請求項６２に記載の方法。
【請求項６４】
前記キャッシングされた動的に生成されたオブジェクトの有効時間の満了を、前記第２の信号によって提供することを包含する、請求項６２に記載の方法。
【請求項６５】
ステップ（ｃ）は前記ネットワークパケットの処理中に実行される、請求項６２に記載の方法。
【請求項６６】
ステップ（ｃ）は前記ネットワークパケットの処理の完了時に実行される、請求項６２に記載の方法。
【請求項６７】
１ミリ秒以上の時間増分で前記パケット処理タイマを動作させることを包含する、請求項６２に記載の方法。
【請求項６８】
１０秒ミリ以下のうちのある時間の有効時間で、キャッシュに記憶されているオブジェクトを無効にする時間増分で、前記パケット処理タイマを動作させることを包含する、請求項６２に記載の方法。
【請求項６９】
前記キャッシュによって前記キャッシングされた動的に生成されたオブジェクトを無効としてマークすることを包含する、請求項６２に記載の方法。
【請求項７０】
デバイスは、次のもの：ブリッジ、ルータ、スイッチ、およびＳＳＬ  ＶＰＮデバイスのうちの１つを包含する、請求項６２に記載の方法。
【請求項７１】
前記デバイスのカーネルスペースにおいて、前記キャッシュ、前記パケット処理エンジン、または前記パケット処理タイマうちの１つを動作すること包含する、請求項６２に記載の方法。
【請求項７２】
発信サーバによる、前記動的に生成されたオブジェクトを動的に生成し、サービスするための処理継続時間以下のうちのある時間を、前記キャッシングされた動的に生成されたオブジェクトの有効時間の時間間隔に、前記パケット処理タイマによって、提供することを包含する、請求項６２に記載の方法。
【請求項７３】
動的に生成されたオブジェクトを包含する前記ネットワークパケットを、発信サーバから送信することを包含する、請求項６２に記載の方法。
【請求項７４】
前記動的に生成されたオブジェクトは、キャッシング可能ではないと識別される、請求項６２に記載の方法。
【請求項７５】
パケット処理タイマの信号に応答して、キャッシングされた動的に生成されたオブジェクトを無効にするデバイスであって、該デバイスは、少なくとも１つの動的に生成されたオブジェクトを含むネットワークパケットを処理し、該少なくとも１つの動的に生成されたオブジェクトをキャッシュに記憶するデバイスであって、該デバイスは、
第１の信号を生成するパケット処理タイマと、
該パケット処理タイマと通信し、該パケット処理タイマの第１の信号の受信に応答して該ネットワークパケットを処理するパケット処理エンジンと、
該パケット処理エンジンと通信し、ストレージエレメントにキャッシングされた動的に生成されたオブジェクトを有するキャッシュであって、該キャッシュは、該キャッシングされた動的に生成されたオブジェクトが無効であることを指示する該パケット処理エンジンから第２の信号を受信する、キャッシュと
を備えている、デバイス。
【請求項７６】
前記第２の信号は、前記キャッシングされた動的に生成されたオブジェクトを無効にする無効コマンドを含む、請求項７５に記載のデバイス。
【請求項７７】
前記第２の信号は、前記キャッシングされた動的に生成されたオブジェクトの有効時間の満了を含む、請求項７５に記載のデバイス。
【請求項７８】
前記パケット処理エンジンは、該パケット処理エンジンによる前記ネットワークパケットの処理中に、前記第２の信号を前記キャッシュに送信する、請求項７５に記載のデバイス。
【請求項７９】
前記パケット処理エンジンは、前記ネットワークパケットの処理の完了時に、前記第２の信号を前記キャッシュに送信する、請求項７５に記載のデバイス。
【請求項８０】
前記パケット処理タイマは、１ミリ秒以上の時間間隔で動作する、請求項７５に記載のデバイス。
【請求項８１】
前記パケット処理タイマは、前記キャッシュへの前記第２の信号をトリガするような時間間隔で動作して、１０ミリ秒以下のうちのある時間の第１の時間間隔でキャッシングされたオブジェクトを無効にする、請求項７５に記載のデバイス。
【請求項８２】
前記デバイスは、次のもの：ブリッジ、ルータ、スイッチ、およびＳＳＬ  ＶＰＮデバイスのうちの１つを備えている、請求項７５に記載のデバイス。
【請求項８３】
前記キャッシュ、前記パケット処理エンジン、または前記パケット処理タイマのうちの１つは、前記デバイスのカーネルスペースにおいて動作する、請求項７５に記載のデバイス。
【請求項８４】
前記パケット処理タイマは、発信サーバからの前記動的に生成されたオブジェクトを動的に生成し、サービスするための継続期間以下のうちのある時間を、前記キャッシングされた動的に生成されたオブジェクトの有効時間の時間間隔に、提供する、請求項７５に記載のデバイス。
【請求項８５】
発信サーバは、前記動的に生成されたオブジェクトを含む前記ネットワークパケットを送信する、請求項７５に記載の方法。
【請求項８６】
前記動的に生成されたオブジェクトは、キャッシング可能として識別されない、請求項７５に記載のデバイス。
【請求項８７】
動的に生成されたオブジェクトに対する複数のクライアントからのリクエストに応答する方法であって、該方法は、
（ｄ）発信サーバからの動的に生成されたオブジェクトに対する第１のクライアントの第１のリクエストへの応答を該デバイスによって受信するステップであって、該応答は該動的に生成されたオブジェクトを含む、ステップと、
（ｅ）該応答を前記第１のクライアントに送信するように、該デバイスによって、パケット処理エンジンにリクエストするステップであって、該応答は、送信待ちの間バッファに保持される、ステップと、
（ｆ）該第１のクライアントへの該応答の送信を完了する前に、第２のクライアントから動的に生成されたオブジェクトに対する第２のリクエストを、該デバイスによって、受信するステップと、
（ｇ）該バッファに保持された該第１のクライアントへの該応答の該動的に生成されたオブジェクトを、該第２のクライアントに送信するように、該デバイスによって、パケット処理エンジンにリクエストするステップと
を包含する、方法。
【請求項８８】
前記パケット処理エンジンによって、前記応答を前記第１のクライアントに送信することを包含する、請求項８７に記載の方法。
【請求項８９】
前記第２のリクエストに応答して、前記動的に生成されたオブジェクトを前記パケット処理エンジンによって、前記第２のクライアントに送信することを包含する、請求項８７に記載の方法。
【請求項９０】
前記応答を、前記第１のクライアントまたは前記第２のクライアントのうちの１つに送信後、前記パケット処理エンジンによって、前記バッファから該応答を除去することを包含する、請求項８７に記載の方法。
【請求項９１】
前記バッファは、ＴＣＰ／ＩＰバッファまたは前記デバイスのＴＣＰ／ＩＰスタックの一部のうちの１つを包含する、請求項８７に記載の方法。
【請求項９２】
前記デバイスは、前記第１のクライアントおよび前記第２のクライアントに送信するための単一のＴＣＰ／ＩＰスタックを包含し、前記バッファは、該単一のＴＣＰ／ＩＰスタックに対応付けられる、請求項８７に記載の方法。
【請求項９３】
ステップ（ｃ）は、複数のクライアントから前記動的に生成されたオブジェクトに対する複数のリクエストを、前記デバイスによって、受信するステップをさらに包含し、ステップ（ｄ）は、前記バッファに保持された前記第１のクライアントへの応答の該動的に生成されたオブジェクトを、該複数のクライアントに送信するように、該デバイスによって、リクエストするステップをさらに包含する、請求項８７に記載の方法。
【請求項９４】
前記第１のクライアントのネットワーク接続に関する１つ以上の特性に基づき、前記パケット処理エンジンによって、該第１のクライアントへの前記応答を保持することを包含する、請求項８７に記載の方法。
【請求項９５】
前記デバイスによって、前記第２のリクエストをキューに入れることを包含する、請求項８７に記載の方法。
【請求項９６】
前記動的に生成されたオブジェクトを、前記第１のクライアントおよび前記第２のクライアントに送信後、前記バッファから該動的に生成されたオブジェクトを除去することを包含する、請求項８７に記載の方法。
【請求項９７】
前記動的に生成されたオブジェクトは、非キャッシング可能として識別される、請求項８７に記載の方法。
【請求項９８】
該第２のリクエストに対応づけられたオブジェクト決定要素によって、前記第２のリクエストが、前記第１のリクエストの前記動的に生成されたオブジェクトに対するものであるということを、前記デバイスによって、決定することを包含する、請求項８７に記載の方法。
【請求項９９】
前記デバイスは、前記第１のクライアントと前記発信サーバとの間で通信する、アプライアンス、ネットワークデバイスまたはコンピューティングデバイスのうちの１つを包含する、請求項８７に記載の方法。
【請求項１００】
前記デバイスは、前記パケット処理エンジンと通信するキャッシュを包含する、請求項８７に記載の方法。
【請求項１０１】
前記第１のクライアントへの応答、または該第１のクライアントの前記動的に生成されたオブジェクトのうちの１つを、前記パケット処理エンジンが、前記第２のクライアントに送信することを、前記キャッシュによって、リクエストすることを包含する、請求項１００に記載の方法。
【請求項１０２】
動的に生成されたオブジェクトに対する複数のクライアントからのリクエストに応答するシステムであって、該システムは、
発信サーバからの動的に生成されたオブジェクトに対する第１のクライアントの第１のリクエストへの応答を受信し、該応答は、該動的に生成されたオブジェクトを含む、デバイスであって、該デバイスは、
該デバイスからの送信待ちの１つ以上のネットワークパケットを保持するバッファと、
該応答を該第１のクライアントに送信するリクエストを、該デバイスから受信するパケット処理エンジンであって、該バッファは、該応答を含む１つ以上のネットワークパケットを保持する、パケット処理エンジンとを備えており、
該デバイスは、該第１のクライアントへの該応答の送信を完了する前に、第２のクライアントから該動的に生成されたオブジェクトに対する第２のリクエストを受信し、該バッファに保持された該応答の該動的に生成されたオブジェクトを該第２のクライアントに送信することを、該パケット処理エンジンにリクエストする、システム。
【請求項１０３】
前記パケット処理エンジンは、前記応答を前記バッファから前記第１のクライアントに送信する、請求項１０２に記載のシステム。
【請求項１０４】
前記パケット処理エンジンは、前記第２のリクエストに応答して、前記動的に生成されたオブジェクトを、前記バッファから該前記第２のクライアントに送信する、請求項１０２に記載のシステム。
【請求項１０５】
前記パケット処理エンジンは、前記応答を、前記第１のクライアントまたは前記第２のクライアントのうちの１つに送信後、該応答を前記バッファから除去する、請求項１０２に記載のシステム。
【請求項１０６】
前記バッファは、ＴＣＰ／ＩＰバッファまたは前記デバイスのＴＣＰ／ＩＰスタックの一部のうちの１つを包含する、請求項１０２に記載のシステム。
【請求項１０７】
前記デバイスは、前記第１のクライアントおよび前記第２のクライアントに送信するための単一のＴＣＰ／ＩＰスタックを包含し、前記バッファは、該単一のＴＣＰ／ＩＰスタックに対応付けられる、請求項１０２に記載のシステム。
【請求項１０８】
前記デバイスは、複数のクライアントから、前記動的に生成されたオブジェクトに対する複数のリクエストを受信し、該デバイスは、前記バッファに保持されている前記第１のクライアントへの前記応答の該動的に生成されたオブジェクトを、該複数のクライアントに送信するように、該パケット処理エンジンにリクエストする、請求項１０２に記載のシステム。
【請求項１０９】
前記第１のクライアントのネットワーク接続に関する１つ以上の特性に基づき、前記パケット処理エンジンは、該第１のクライアントへの前記応答を保持する、請求項１０２に記載のシステム。
【請求項１１０】
前記デバイスは、前記第２のリクエストをキューに入れる、請求項１０２に記載のシステム。
【請求項１１１】
前記パケット処理エンジンは、前記動的に生成されたオブジェクトを、前記第１のクライアントおよび前記第２のクライアントに送信後、該動的に生成されたオブジェクトを前記バッファから除去する、請求項１０２に記載のシステム。
【請求項１１２】
前記動的に生成されたオブジェクトは、非キャッシング可能として識別される、請求項１０２に記載のシステム。
【請求項１１３】
該第２のリクエストに対応づけられたオブジェクト決定要素によって、前記第２のリクエストが、前記第１のリクエストの前記動的に生成されたオブジェクトに対するものｔであるということを、前記デバイスによって、決定することを備えている、請求項１０２に記載のシステム。
【請求項１１４】
前記デバイスは、前記第１のクライアントと前記発信サーバとの間で通信する、アプライアンス、ネットワークデバイスまたはコンピューティングデバイスのうちの１つを備えている、請求項１０２に記載のシステム。
【請求項１１５】
前記デバイスは、前記パケット処理エンジンと通信するキャッシュを備えている、請求項１０２に記載のシステム。
【請求項１１６】
前記キャッシュは、前記パケット処理エンジンに対して、前記第１のクライアントへの前記応答または該第１のクライアントの前記動的に生成されたオブジェクトのうちの１つを、前記第２のクライアントに送信することをリクエストする、請求項１１５記載のシステム。
【請求項１１７】
ネットワークデバイスにおいて、動的に生成されたオブジェクトに対する、複数のクライアントからのリクエストに応答する方法であって、該方法は、
（ｈ）発信サーバへの動的に生成されたオブジェクトに対する第１のリクエストを、第１のクライアントから受信するステップと、
（ｉ）該第１のリクエストを該発信サーバに送信するステップと、
（Ｊ）該第１のクライアントの該第１のリクエストに応答する前に、該動的に生成されたオブジェクトに対する第２のリクエストを、第２のクライアントから受信するステップと、
（ｋ）該第１のリクエストへの該応答を該発信サーバから受信するステップであって、該応答は、該動的に生成されたオブジェクトを含む、ステップと、
（ｌ）該第１のリクエストに応答して、該動的に生成されたオブジェクトを該第１のクライアントに送信し、該第２のリクエストに応答して、該動的に生成されたオブジェクトを該第２のクライアントに送信する、ステップと
を包含する、方法。
【請求項１１８】
ステップ（ｃ）は、複数のクライアントから前記動的に生成されたオブジェクトに対する複数のリクエストを受信するステップをさらに包含し、ステップ（ｅ）は、各クライアントのリクエストに応答して、該動的に生成されたオブジェクトを該複数のクライアントに送信するステップをさらに包含する、請求項１１７に記載の方法。
【請求項１１９】
（ｆ）前記動的に生成されたオブジェクトの前記第２のクライアントへの送信を完了する前に、第３のクライアントから、該動的に生成されたオブジェクトに対する第３のリクエストを受信するステップと、
（ｇ）該第３のリクエストに応答して、該第３のクライアントに該動的に生成されたオブジェクトを送信するステップと
を包含する、請求項１１７に記載の方法。
【請求項１２０】
前記第１のリクエストと前記第２のリクエストとを、ほぼ同時に受信することを包含する、請求項１１７に記載の方法。
【請求項１２１】
前記第２のリクエストをキューに入れることを包含する、請求項１１７に記載の方法。
【請求項１２２】
前記動的に生成されたオブジェクトを、前記第１のクライアントおよび前記第２のクライアントに送信後、キャッシュから該動的に生成されたオブジェクトをフラッシングすることを包含する、請求項１１７に記載の方法。
【請求項１２３】
前記動的に生成されたオブジェクトは、非キャッシング可能として識別される、請求項１１７に記載の方法。
【請求項１２４】
該第２のリクエストに対応づけられたオブジェクト決定要素によって、前記第２のリクエストが、前記第１のリクエストの前記動的に生成されたオブジェクトに対してであるということを決定することを包含する、請求項１１７に記載の方法。
【請求項１２５】
エンティティタグヘッダまたはキャッシュ制御ヘッダのうちの１つを含むように前記応答を修正すること、および該修正された応答を前記第１のクライアントまたは前記第２のクライアントのうちの１つに送信することを包含する、請求項１１７に記載の方法。
【請求項１２６】
動的に生成されたオブジェクトに対する複数のクライアントからのリクエストに応答するネットワークデバイスであって、該該ネットワークデバイスは、
発信サーバへの動的に生成されたオブジェクトに対する第１のリクエストを第１のクライアントから受信する手段と、
該第１のリクエストを該発信サーバに送信する手段と、
該第１のクライアントの該第１のリクエストに応答する前に、該動的に生成されたオブジェクトに対する第２のリクエストを、第２のクライアントから受信する手段と、
該第１のリクエストへの該応答を、該発信サーバから受信する手段であって、該応答は、該動的に生成されたオブジェクトを含む、手段と、
該第１のリクエストに応答して、該動的に生成されたオブジェクトを該第１のクライアントに送信し、および該第２のリクエストに応答して、該動的に生成されたオブジェクトを該第２のクライアントに送信する手段と
を備えている、ネットワークデバイス。
【請求項１２７】
前記動的に生成されたオブジェクトに対する複数のクライアントからの複数のリクエストを受信する手段、および、各クライアントのリクエストに応答して、該動的に生成されたオブジェクトを該複数のクライアントに送信する手段をさらに備えている、請求項１２６に記載のネットワークデバイス。
【請求項１２８】
前記動的に生成されたオブジェクトの前記第２のクライアントへの送信を完了する前に、第３のクライアントから、該動的に生成されたオブジェクトに対する第３のリクエストを受信する手段と、
該第３のリクエストに応答して、該第３のクライアントに該動的に生成されたオブジェクトを送信する手段と
を備えている、請求項１２６に記載のネットワークデバイス。
【請求項１２９】
前記第１のリクエストと前記第２のリクエストとを、ほぼ同時に受信する手段を備えている、請求項１２６に記載のネットワークデバイス。
【請求項１３０】
前記ネットワークデバイスは、前記第２のリクエストをキューに入れる、請求項１２６に記載のネットワークデバイス。
【請求項１３１】
前記ネットワークデバイスは、前記動的に生成されたオブジェクトを、前記第１のクライアントおよび前記第２のクライアントに送信後、キャッシュから該動的に生成されたオブジェクトをフラッシュする、請求項１２６に記載のネットワークデバイス。
【請求項１３２】
前記動的に生成されたオブジェクトは、キャッシング可能として識別されない、請求項１２６に記載のネットワークデバイス。
【請求項１３３】
該第２のリクエストに対応づけられたオブジェクト決定要素によって、前記第２のリクエストが、前記第１のリクエストの前記動的に生成されたオブジェクトに対してであるということを決定する手段を備えている、請求項１２６に記載のネットワークデバイス。
【請求項１３４】
前記ネットワークデバイスは、前記クライアントと前記発信サーバとの間で通信するアプライアンス、またはコンピューティングデバイスのうちの１つを備えている、請求項１２６に記載のネットワークデバイス。
【請求項１３５】
エンティティタグヘッダまたはキャッシュ制御ヘッダのうちの１つを含むように前記応答を修正し、該修正された応答を、前記第１のクライアントまたは前記第２のクライアントのうちの１つに送信する手段を備えている、請求項１２６に記載のネットワークデバイス。
【請求項１３６】
キャッシング可能として識別されていない動的に生成されたオブジェクトをキャッシングするためのエンティティタグを用いる方法であって、該方法は、
（ｍ）動的に生成されたオブジェクトに対するクライアントのリクエストへの応答を、発信サーバから、キャッシュによって受信するステップであって、該動的に生成されたオブジェクトは、キャッシング可能はないとして識別される、ステップと、
（ｎ）該キャッシュに記憶されている該動的に生成されたオブジェクトに対するエンティティタグを、該キャッシュによって生成するステップと、
（ｏ）該生成されたエンティティタグを含むように、該応答を、該キャッシュによって修正するステップと、
（ｐ）該動的に生成されたオブジェクトを、キャッシング可能として識別する該修正された応答を、該キャッシュによって該クライアントに送信するステップと
を包含する、方法。
【請求項１３７】
前記発信サーバから受信する前記応答は、エンティティタグを包含しない、請求項１３６に記載の方法。
【請求項１３８】
前記動的に生成されたオブジェクトを、前記クライアントがキャッシングする処理継続時間を識別するように前記応答を、該キャッシュによって修正することを包含する、請求項１３６に記載の方法。
【請求項１３９】
前記応答を記憶し、前記動的に生成されたオブジェクトが、前記キャッシュまたは前記発信サーバのうちの１つに関して変化したかどうかをチェックした後に、該応答にサービスすることを、前記クライアントに示すように、該応答を、該キャッシュによって修正することを包含する、請求項１３６に記載の方法。
【請求項１４０】
前記発信サーバからの前記応答は、前記動的に生成されたオブジェクトに対するキャッシュ制御情報を有さず、前記キャッシュは、キャッシュ制御情報を含むように前記クライアントに送信された該応答を修正する、請求項１３６に記載の方法。
【請求項１４１】
前記キャッシュによって、前記エンティティタグの番号を生成することを包含する、請求項１３６に記載の方法。
【請求項１４２】
前記キャッシュによって、前記動的に生成されたオブジェクトに関する前記生成されたエンティティタグを記憶することを包含する、請求項１３６に記載の方法。
【請求項１４３】
前記キャッシュによって、前記動的に生成されたオブジェクトに関するキャッシュ制御情報を記憶することを包含する、請求項１４２に記載の方法。
【請求項１４４】
前記生成されたエンティティタグおよびキャッシュ制御情報を有する前記キャッシングされた動的に生成されたオブジェクトを、前記キャッシュによってサービスすることを包含する、請求項１４３に記載の方法。
【請求項１４５】
前記キャッシュを、アプライアンス、ネットワークデバイスまたはコンピューティングデバイスのうちの１つにおいて動作させることを包含する、請求項１３６に記載の方法。
【請求項１４６】
前記リクエストまたは前記応答のうちの１つは、ハイパーテキストマーク付け言語（ＨＴＭＬ）を含む、請求項１３６に記載の方法。
【請求項１４７】
前記生成されたエンティティタグを識別するｅタグヘッダを含むように、前記応答を、前記キャッシュによって修正することを包含する、請求項１４６に記載の方法。
【請求項１４８】
キャッシュ制御ヘッダを含むように、前記応答を、前記キャッシュによって修正することを包含する、請求項１４６に記載の方法。
【請求項１４９】
前記クライアントからイフノンマッチヘッダを有する第２のリクエストを、前記キャッシュによって受信し、該第２のリクエストに応答して、該イフノンマッチヘッダに対応付けられた前記ｅタグ値を、前記動的に生成されたオブジェクトと共に該キャッシュに記憶されている前記エンティティタグと比較することを包含する、請求項１４６に記載の方法。
【請求項１５０】
前記ｅタグ値が前記エンティティタグに一致する場合、前記第２のリクエストへの修正されない応答を前記クライアントに、前記キャッシュによって送信することを包含する、請求項１４９に記載の方法。
【請求項１５１】
前記ｅタグ値が前記エンティティタグに一致しない場合、第２のエンティティタグを有する更新された動的に生成されたオブジェクトを前記クライアントに、前記キャッシュによって送信することを包含する、請求項１４９に記載の方法。
【請求項１５２】
キャッシング可能として識別されていない動的に生成されたオブジェクトをキャッシングするためのエンティティタグを用いるためのシステムであって、該システムは、
動的に生成されたオブジェクトに対するクライアントのリクエストへの応答を、発信サーバから、キャッシュによって受信する手段であって、該動的に生成されたオブジェクトは、キャッシング可能でないとして識別される、手段と、
該キャッシュに記憶されている該動的に生成されたオブジェクトのためのエンティティタグを、該キャッシュによって生成する手段と、
該生成されたエンティティタグを含むように、該応答を、該キャッシュによって修正する手段と、および
該動的に生成されたオブジェクトを、キャッシング可能として識別する該修正された応答を、該キャッシュによって該クライアントに送信する手段と
を備えている、システム。
【請求項１５３】
前記発信サーバから受信する前記応答は、エンティティタグを備えていない、請求項１５２に記載のシステム。
【請求項１５４】
前記クライアントが前記動的に生成されたオブジェクトをキャッシングする処理継続時間を識別するように前記応答を、該キャッシュによって修正する手段を包含する、請求項１５２に記載のシステム。
【請求項１５５】
前記応答を記憶し、前記動的に生成されたオブジェクトが前記キャッシュまたは前記発信サーバのうちの１つに関して変化したかどうかをチェックした後に、該応答にサービスすることを、前記クライアントに示すように、該応答を、該キャッシュによって修正する手段を備えている、請求項１５２に記載のシステム。
【請求項１５６】
前記発信サーバからの前記応答は、前記動的に生成されたオブジェクトに対するキャッシュ制御情報を有さず、前記キャッシュは、キャッシュ制御情報を含むように前記クライアントに送信された該応答を修正する、請求項１５２に記載のシステム。
【請求項１５７】
前記キャッシュによって、前記エンティティタグの番号を生成する手段を備えている、請求項１５２に記載のシステム。
【請求項１５８】
前記キャッシュによって、前記動的に生成されたオブジェクトに関する前記生成されたエンティティタグを記憶する手段を備えている、請求項１５２に記載のシステム。
【請求項１５９】
前記キャッシュによって、前記動的に生成されたオブジェクトに関するキャッシュ制御情報を記憶する手段を備えている、請求項１５２に記載のシステム。
【請求項１６０】
前記生成されたエンティティタグおよびキャッシュ制御情報を有する前記キャッシングされた動的に生成されたオブジェクトを、前記キャッシュによってサービスする手段を備えている、請求項１５９に記載のシステム。
【請求項１６１】
前記キャッシュを、アプライアンス、ネットワークデバイスまたはコンピューティングデバイスのうちの１つにおいて動作させる手段を備えている、請求項１５２に記載のシステム。
【請求項１６２】
前記リクエストまたは前記応答のうちの１つは、ハイパーテキストマーク付け言語（ＨＴＭＬ）を備えている、請求項１５２に記載のシステム。
【請求項１６３】
前記生成されたエンティティタグを識別するｅタグヘッダを含むように、前記応答を、前記キャッシュによって修正する手段を備えている、請求項１６２に記載のシステム。
【請求項１６４】
キャッシュ制御ヘッダを含むように、前記応答を、前記キャッシュによって修正する手段を備えている、請求項１６２に記載のシステム。
【請求項１６５】
前記クライアントからイフノンマッチヘッダを有する第２のリクエストを、前記キャッシュによって受信し、該第２のリクエストに応答して、該イフノンマッチヘッダに対応付けられた前記ｅタグ値を、前記動的に生成されたオブジェクトと共に該キャッシュに記憶されている前記エンティティタグと比較する手段を備えている、請求項１６４に記載のシステム。
【請求項１６６】
前記ｅタグ値が前記エンティティタグに一致する場合、前記第２のリクエストへの修正されない応答を前記クライアントに、前記キャッシュによって送信する手段を備えている、請求項１６５に記載のシステム。
【請求項１６７】
前記ｅタグ値が前記エンティティタグに一致しない場合、第２のエンティティタグを有する更新された動的に生成されたオブジェクトを前記クライアントに、前記キャッシュによって送信する手段を備えている、請求項１６５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本出願は、２００５年６月２９日に出願された、名称「ＭＥＴＨＯＤ  ＡＮＤ  ＤＥＶＩＣＥ  ＦＯＲ  ＰＥＲＦＯＲＭＩＮＧ  ＩＮＴＥＧＲＡＴＥＤ  ＣＡＣＨＩＮＧ  ＩＮ  Ａ  ＤＡＴＡ  ＣＯＭＭＵＮＩＣＡＴＩＯＮ  ＮＥＴＷＯＲＫ」の米国特許出願第１１／１６９，００２号、および２００５年１月２４日に出願された、名称「ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＥＳＴＡＢＬＩＳＨＩＮＧ  Ａ  ＶＩＲＴＵＡＬ  ＰＲＩＶＡＴＥ  ＮＥＴＷＯＲＫ」の米国特許出願第１１／０３９，９４６号の優先権を主張し、該２つの出願は参考として本明細書に引用される。
【０００２】
（本発明の分野）
本発明は、一般的に、ネットワークにおけるデータのキャッシングに関する。特に、本発明は、ネットワークにおける動的に生成されたオブジェクトのキャッシングを実行するためのデバイス、システムおよび方法に関する。
【背景技術】
【０００３】
ネットワークトラフィックの成長率は、該トラフィックを運ぶインフラに歪を与え続けている。ネットワークオペレータがこの増加する問題を処理することを可能にするキャッシング技術の開発を含む種々のソリューションが現れている。従来のキャッシングに関して、静的コンテントが、再使用され、サーバインフラに負担をかけることなく、複数のクライアントにサービスされ得る。さらに、キャッシュメモリは、静的コンテントがエンドユーザのより近くに記憶されることを可能にし、それによって応答時間を向上させる一方、同時にサーバインフラの負荷を軽減させる。応答時間の低下およびサーバインフラの負荷の低下は、帯域幅およびそのようなインフラの処理要求を減少させる。
【０００４】
しかしながら、ネットワーク全体に引渡されるコンテント量の増加は、ソリューションを計算する企業および複雑なインターネットアプリケーションによって作られるネットワークトラフィックの大部分を含み、動的に生成される。動的に生成されるコンテントは、オブジェクトがリクエストされた時点でサーバによって生成されたコンテントであり、しばしばクライアントから受け取られた入力に基づく。従って、コンテントは時間によっておよび生成システムに対してなされた入力に関する両方で変化する。動的コンテントの一般的な例は、クライアントによってなされる株価リクエストまたはデータベース探索の場合を含む。各例において、応答オブジェクトは、特定のクライアントリクエストの受取りに続いて、リアルタイムに生成される。
【０００５】
動的に生成されたコンテントをキャッシングする課題は多種である。例えば、動的に生成されたコンテントをキャッシングするための一般的に受け入れられた規格または仕様はない。動的に生成されたオブジェクトがキャッシングされ得るかどうかを指示する規格は存在しないので、そのようなオブジェクトは一般的に非キャッシング可能として扱われる。別の課題は、動的に生成されたオブジェクトの「新鮮さ」の有効性を決定することである。なぜならオブジェクトを生成するために使用された基礎となるデータに対する変化は不規則で予測不能であるからである。
【０００６】
上の困難に加えて、動的に生成されたコンテントに対するリクエストは、また、静的コンテントに対するリクエストより一般的に複雑である。動的リクエストは、そのようなリクエストに関係する適切なオブジェクトを識別するためにキャッシュによって使用される適用可能なパラメータを識別するために、宛先アプリケーションによって処理または分析される必要がある一連の情報をしばしば含む。しかしながらこれらのパラメータは、クライアントによって論理的順序または矛盾ない順序でリクエストに配置されることはめったにない。動的に生成された多数のオブジェクトのうちのどれがリクエストによって識別されるかを決定するために、そのようなリクエストの各々は、ノーマライズされなければならない（即ち、パラメータを恣意的でない順序で配置する）。
【０００７】
さらに、リクエストを動的に生成されたオブジェクトにマッチさせることは、動的に生成されたコンテントに関するはるかにより複雑なタスクとる。なぜならアプリケーションによってなされたある処理は、復元またはさもなければ経験に基づく推測をすることによって予測される必要があるからである。この復元または推測は、キャッシュによって記憶されたオブジェクトが特定の入力リクエストに対するサービングに適切かどうかを決定するために必要である。複雑性は、アプリケーション自体の複雑性の結果として発生し、また、応答のコンテントが、リクエストのコンテントと、ユーザアイデンティティ（リクエストに存在し得るかまたは存在し得ない）、その日の時刻、ユーザデータベースの現在の状態および多数のその他の要因のような、あるその他の外部変数との両方の関数であり得るためにも、現れている。
【０００８】
要約すると、キャッシングは元来静的オブジェクトのキャッシングの回りに発展した。インターネットおよびアプリケーションがますます動的に生成されたコンテントの引渡しに依存するようになるに従い、キャッシングの利益を動的コンテントに広げ、そのようなコンテントが従来のキャッシング技術に対して提示する種々の課題を解決するソリューションの必要性が発生した。
【発明の開示】
【課題を解決するための手段】
【０００９】
（本発明の概要）
本発明のソリューションは、動的に生成されたデータを記憶しそれにサービスするためのキャッシュメモリの能力を増加させる。本発明は、また、キャッシュが種々様々なアプリケーションリクエストのタイプを効果的に扱うことを可能にし、それによってアプリケーション性能を向上させ、キャッシュによりサービスされるデータの新鮮さを保つ管理上のむずかしさを軽減する。本発明はヒューリスティックスの使用によって動的コンテントをキャッシングする効果的なアプローチを提供し、ヒューリスティックスは、オブジェクトを最初に生成するアプリケーションサーバによって実行された処理を複製しない方法でデータを理解し処理する能力を含む他に、そのようなアプリケーションサーバの行動を効果的に予測する。本発明のこれらの手法は、同様に、動的キャッシングの使用を増加し、それによって、ネットワークおよび基礎となるアプリケーションインフラの両方の性能の改善に寄与する。
【００１０】
一実施形態において、本発明はキャッシュ内に動的に生成されたオブジェクトをキャッシングし、維持するための方法およびシステムに関する。本発明の技術は、元のサーバから既にサービスされ、キャッシュに記憶された動的に生成されたオブジェクトなどのオブジェクトを無効にするキャッシュによって無効コマンドを受信することを含む。動的に生成されたオブジェクトは、発信サーバからキャッシング可能であるとして識別されないことがあり得る。キャッシュから受け取られた無効コマンドは、キャッシュされ動的に生成されたオブジェックトを識別する。無効コマンドに応答して、キャッシュは、キャッシュされ動的に生成されたオブジェクトを無効としてマークし、オブジェクトをキャッシュからフラッシュする。
【００１１】
別の実施形態において、本発明は、また、オブジェクト決定要素を用いてキャッシュされ動的に生成されたオブジェクトを識別するための技術を提供する。キャッシュはクライアントとサーバとの間の通信をインタセプトし、オブジェクト決定要素を識別する通信を分析し得る。オブジェクト決定要素は、既にサービスされキャッシュに記憶されたオブジェクトを識別し得る。キャッシュは、発信サーバにおいてオブジェクト決定要素によって識別されたオブジェクトにおいて変化が発生したか、発生するかどうかをオブジェクト決定要素から決定する。変化が発生したかまたは発生する場合、キャッシュは、オブジェクト決定要素によって識別されたオブジェクトをキャッシュにおいて無効としてマークする。一旦オブジェクトが無効としてマークされると、キャッシュは、無効なオブジェクトをフラッシュし、発信サーバからオブジェクトを検索する。
【００１２】
本発明のさらなる実施形態は、上記の方法を動的に生成されたオブジェクトのグループに適用する。例えば、既にサービスされた動的に生成されたグループのオブジェクトはキャッシュに生成される。オブジェクトのグループは、少なくとも１つのオブジェクト決定要素に対応付けられる。グループの記録は、キャッシュに維持され、オブジェクト決定要素に対応付けられ得る。キャッシュによってインタセプトされた通信の識別されたオブジェクト決定要素が変化を示し、変化が発信サーバにおいてグループの１つ以上のオブジェクトに発生または発生する場合、既にサービスされたオブジェクトのグループは無効としてマークされる。
【００１３】
一局面において、本発明は、キャッシング可能として識別されていない動的に生成されたオブジェクトをキャッシュするための方法に関する。方法は、発信サーバからサービスされキャッシング可能として識別されない動的に生成されたオブジェクトをキャッシュに記憶すること、およびキャッシュされた動的に生成されたオブジェクトを無効にするリクエストをキャッシュによって受信することを含む。リクエストに応答して、キャッシュは、キャッシュされた動的に生成されたオブジェクトを無効としてマークする。キャッシュは、発信サーバとクライアントとの間で通信するアプライアンス、ネットワークデバイスまたはコンピューティングデバイスなどの任意のデバイスおいて動作し得る。
【００１４】
一部の実施形態において、本発明の方法は、発信サーバによって、キャッシュされた動的に生成されたオブジェクトを無効にすることをリクエストすることを含む。さらなる実施形態において、発信サーバは、発信サーバにおいて動的に生成されたオブジェクトに対する変化に応答して、キャッシュされた動的に生成されたオブジェクトを無効にすることを自動的にリクエストする。別の実施形態において、クライアントは発信サーバと通信し動的に生成されたオブジェクトを受け取り、クライアントはキャッシュされ動的に生成されたオブジェクトを無効にすることをリクエストする。さらに別の実施形態において、外部管理コントロールは、キャッシュされ動的に生成されたオブジェクトの無効をリクエストする。
【００１５】
一実施形態において、本発明の方法は、無効としてマークされたキャッシュされ動的に生成されたオブジェクトをキャッシュからフラッシュすることを含む。別の実施形態において、キャッシュは、動的に生成されたオブジェクトをキャッシングする例えば１０ミリ秒以下の非常に短い時間内に無効にするリクエストを受信する。一部の実施形態において、キャッシュは、キャッシングされたオブジェクトの１０ミリ秒以下などの非常に短い有効時間の満了に応答するキャッシュされ動的に生成されたオブジェクトを無効にする。
【００１６】
別の実施形態において、本発明は、動的に生成されたオブジェクトのグループをキャッシングする方法に関する。一部の実施形態において、オブジェクトのグループは、キャッシング可能として識別されない少なくとも１つのオブジェクトを有する。方法は、キャッシュにおいて、発信サーバから既にサービスされたグループの動的に生成されたオブジェクトを識別することを含む。キャッシュは、グループとオブジェクト決定要素とを対応付ける。方法は、キャッシュによってグループのオブジェクト決定要素を識別する通信をインタセプトすること、および発信サーバにおいてグループのオブジェクトの１つに対して変化が発生しそうであるか発生したことを示すことをさらに含む。一実施形態において、本発明の方法は、通信にインタセプトすることまたはオブジェクト決定要素に応答して、動的に生成されたオブジェクトのグループをキャッシュによって無効としてマークすることを含む。
【００１７】
さらに本発明の一部の実施形態において、キャッシュは、キャッシュから無効としてマークされたオブジェクトのグループをフラッシュし得る。別の実施形態において、動的に生成されたオブジェクトのグループは事前に指定されている。他の実施形態において、方法は、動的に生成されたオブジェクトのグループを自動的に識別し、規則に従ってオブジェクト決定要素をグループに対応付ける。
【００１８】
一局面において、本発明は、動的に生成されたオブジェクトのキャッシュを維持する別の方法に関する。本発明のこの方法は、例えば動的に生成されたオブジェクトを求める発信サーバに対するクライアントのリクエストなどのクライアントと発信サーバとの間の通信をキャッシュによってインタセプトすることを含む。動的に生成されたオブジェクトは、発信サーバから既にサービスされ、キャッシュに記憶されていることがあり得る。方法は、発信サーバにおける動的に生成されたオブジェクトにおいて変化の１つが発生したかまたは発生するであろうことを示す通信におけるオブジェクトの決定要素をキャッシュによって識別し、キャッシュされ動的に生成されたオブジェクトをキャッシュによって無効としてマークする。方法は、次いで、リクエストされ動的に生成されたオブジェクトを発信サーバから得る。
【００１９】
本発明の一実施形態において、キャッシュは無効である動的に生成されたオブジェクトをフラッシュする。別の実施形態において、キャッシュは、動的に生成されたオブジェクトを発信サーバから既にサービスされたグループの動的に生成されたオブジェクトに対応付け、グループをオブジェクト決定要素に対応付け、および、リクエストに応答して、動的に生成されたオブジェクトのグループを無効としてマークする。一部の実施形態において、動的に生成されたオブジェクトはキャッシング可能として識別されない。さらなる実施形態において、無効としてマークされた動的に生成されたオブジェクトグループをフラッシュする。動的に生成されたオブジェクトのグループは、事前指定されるか、または他に、規則に従ってオブジェクト決定要素をグループによって自動的に識別され得る。
【００２０】
本方法の一部の実施形態において、クライアントは、オブジェクト決定要素を定義済ストリングとして通信に埋め込む。他の実施形態において、キャッシュは、動的に生成されたオブジェクトに対応付けられた定義済ヒューリスティック規則に基づきオブジェクト決定要素を識別する。一実施形態において、キャッシュは、通信の次のエレメントの１つからオブジェクト決定要素を選択する：１）ＵＳＥＲＩＤ、２）ＩＰアドレス、３）ＴＣＰポート、４）ＨＴＴＰヘッダ、５）カスタムＨＴＴＰヘッダ、６）クライアントＵＲＬ、７）クッキーヘッダ、８）ＵＲＬクエリストリング、および９）ＰＯＳＴボディ。キャッシュは、また、ユーザ構成の無効ポリシーに基づきオブジェクト決定要素を通信から抽出する。
【００２１】
別の実施形態において、本発明の方法は、オブジェクト決定要素をキャッシュに記憶された１つ以上のオブジェクトまたはオブジェクトのグループに対応付けるために、キャッシュにおいて表を維持することを含む。一部の実施形態において、方法は、動的に生成されたセットのオブジェクトを識別しキャッシュにおけるグループとして対応づけるために、クライアントからの通信を知的統計的エンジンによって検査することを含む。キャッシュは、キャッシュに記憶されたオブジェクトをコンテントグループの中に対応付けし得る。コンテントグループは、指標としてインカーネーション数を有するハッシュ表によって表され得る。他の実施形態において、キャッシュは、動的に生成されたオブジェックトに対する変化を決定するリクエストによって識別される動的に生成されたオブジェクトにおいてハッシュアルゴリズムを実行する。
【００２２】
一部の局面において、本発明は、キャッシング可能として識別されていない動的に生成されたオブジェクトをキャッシュするシステムに関する。システムは、キャッシング可能として識別されていない動的に生成されたオブジェクトをキャッシュに記憶する手段であって、動的に生成されたオブジェクトは、発信サーバからサービスされる手段と、キャッシュされ動的に生成されたオブジェックトを無効にするリクエストをキャッシュによって受信する手段とを含む。システムは、また、リクエストに応じてキャッシュによってキャッシュされ動的に生成されたオブジェクトを無効としてマークする手段を含む。
【００２３】
他の局面において、本発明は、動的に生成されたオブジェクトなどのグループのオブジェクトをキャッシングするためのシステムに関する。一部の実施形態において、動的に生成されたオブジェクトは、キャッシング可能として識別されていない少なくとも１つのオブジェクトを有する。システムは、キャッシュにおいて発信サーバから既にサービスされた動的に生成されたオブジェクトのグループを識別する手段であって、動的に生成されたオブジェクトのうちの少なくとも１つは、キャッシング可能として識別されない手段と、キャッシュによってグループをオブジェクト構成要素に対応づける手段とを含む。システムは、また、キャッシュによってグループのオブジェクト決定要素を識別する通信をインタセプトすること、および発信サーバにおいてグループのオブジェクトの１つに対して変化が発生しそうであるか発生したことを示す手段を含む。
【００２４】
一局面において、本発明は動的に生成されたオブジェクトのキャッシュを維持するためのシステムに関する。システムは、キャッシュによってクライアントと発信サーバとの間の通信をインタセプトする手段を含む。システムは、また、発信サーバにおいて動的に生成されたオブジェクトに変化が発生したか、発生するであろうことを示す通信にあるオブジェクト決定要素をキャッシュによって識別する手段、およびキャッシュによって、キャッシュされ動的に生成されたオブジェクトを無効としてマークする手段を含む。一部の実施形態において、システムは、また、発信サーバから動的に生成されたオブジェクトを得る手段を含む。
【００２５】
別の局面において、本発明は、キャッシュに記憶された動的に生成されたオブジェクトの細かな無効（ｇｒａｎｕｌａｒ  ｉｎｖａｌｉｄａｔｉｏｎ）を提供する方法およびシステムに関する。本発明の技術は、パケット処理エンジンのパケット処理タイマによって提供される時間間隔の細かさのような細かな時間間隔を細分化するために、キャッシュによって記憶されるオブジェクトの有効時間を構成する能力を含む。そのように、本発明は、非常に小さい時間間隔となる有効時間を有するオブジェクトをキャッシングし得る。この特性は、「無効の細かさ（ｉｎｖａｌｉｄａｔｉｏｎ  ｇｒａｎｕｌａｒｉｔｙ）」と呼ばれる。有効時間におけるこの細かい細かさを提供することによって、本発明のキャッシュは、しばしば１秒間に何回も回数変化するオブジェクトをキャッシングし、サービスし得る。１つの技術は、本発明のデバイスによって使用されるパケット処理タイマを活用し、パケット処理タイマは、無効または有効期間の細かさが１０ｍｓにすることを可能にするミリ秒単位の時間増分で動作可能である。本発明の統合されたキャッシュが、パケット処理エンジンのパケット処理タイマに応答してキャッシュ動作を実行すると、オブジェクトの無効は、ミリ秒の単位で期間内に、パケット処理タイマによって提供される１０ｍｓなどの時間間隔の単位で有効時間を有するオブジェクトと共に発生し得る。
【００２６】
一局面において、本発明は、パケット処理タイマの信号に応答して、キャッシュにあるキャッシュされ動的に生成されたオブジェクトを無効にする方法に関する。方法は、デバイスのパケット処理エンジンにおいて実行され得、該デバイスにおいてパケット処理エンジンは、少なくとも１つの動的に生成されたオブジェクトを有し、キャシュに動的に生成されたオブジェクトを記憶するネットワークパケットを処理する。方法は、ネットワークパケットを処理するパケット処理タイマからの第１の信号を受信すること、信号に応答してネットワークパケットを処理すること、および第２の信号をキャッシュに送信し、キャッシュされ動的に生成されたオブジェクトが無効であることを示すことを含む。一実施形態において、第２の信号は、キャッシュされ動的に生成されたオブジェクトを無効にするために無効コマンドを提供する。別の実施形態において、第２の信号は、キャッシュされ動的に生成されたオブジェクトの有効時間を提供する。
【００２７】
一部の実施形態において、第２の信号は、ネットワークパケットの処理中に送信され、一方、他の実施形態において、第２の信号は、ネットワークパケットの処理の完了次第送信される。本発明の一実施形態において、パケット処理タイマは１ミリ秒以上の時間増分で動作する。パケット処理タイマは、１０ミリ秒以下の有効時間で、キャッシュに記憶されたオブジェクトを無効にする時間増分で動作する。方法は、キャッシュによって、動的に生成されたオブジェクトを無効としてマークすることを含む。一実施形態において、方法は、発信サーバから動的に生成されたオブジェクトを含むネットワークパケットを送信することを含む。
【００２８】
パケット処理エンジンを有するデバイスは、次の任意のものを含み得る：１）ブリッジ、２）ルータ、３）スイッチ、および４）ＳＳＬ  ＶＰＮデバイス。一部の実施形態において、キャッシュ、パケット処理エンジン、またはパケット処理タイマは、デバイスのカーネルスペースにおいて動作する。一部の実施形態において、方法は、パケット処理タイマによって、キャッシュされ動的に生成されたオブジェクトための有効時間の時間間隔であって、発信サーバから動的に生成されたオブジェクトを動的に生成しサービスする処理継続時間以下の時間を提供することを含む。動的に生成されたオブジェクトは、発信サーバからサービスされた場合、キャッシング可能ではないとして識別され得る。
【００２９】
別の局面において、本発明は、パケット処理タイマの信号に応答して、キャッシュされ動的に生成されたオブジェクトを無効にするためのデバイスに関係する。デバイスは、少なくとも１つの動的に生成されたオブジェクトを有し、キャッシュされ動的に生成されたオブジェクトを記憶するネットワークパケットを処理する。デバイスは、第１の信号を生成するパケット処理タイマおよびパケット処理タイマと通信するパケット処理エンジンを含む。パケット処理エンジンは、パケット処理タイマの第１の信号の受信に応答してネットワークパケットを処理する。デバイスは、また、パケット処理エンジンと通信し、ストレージエレメントにキャッシュされた動的に生成されたオブジェクトを有するキャッシュを含む。キャッシュは、キャッシュされ動的に生成されたオブジェクトが無効であることを示す第２の信号をパケット処理エンジンから受信する。一実施形態において、第２の信号は、キャッシュされ動的に生成されたオブジェクトを無効にする無効コマンドを含む。別の実施形態において、第２の信号は、キャッシュされ動的に生成されたオブジェクトの有効時間の満了含む。
【００３０】
本発明のデバイスの一実施形態において、パケット処理エンジンは、パケット処理エンジンによるネットワークの処理中に、第２信号をキャッシュに送信する。別の実施形態において、パケット処理エンジンは、ネットワークパケットの処理の完了時に、第２信号をキャッシュに送信する。一部の実施形態において、パケット処理タイマは、１ミリ秒以上の時間間隔で動作する。一実施形態において、パケット処理タイマは、１０ミリ秒以下の第１の時間間隔で、キャッシュされたオブジェクトを無効にするために、第２の信号をキャッシュにトリガする時間間隔で動作する。
【００３１】
本発明のデバイスは、次の１つを含み得る：１）ブリッジ、２）ルータ、３）スイッチ、および４）ＳＳＬ  ＶＰＮデバイス。キャッシュ、パケット処理エンジン、またはパケット処理タイマは、デバイスのカーネルスペースにおいて動作し得る。一部の実施形態において、パケット処理タイマは、キャッシュされ動的に生成されたオブジェクトの有効時間の時間間隔に対して、発信サーバから動的に生成されたオブジェクトを動的に生成しサービスする持続時間以下の時間を提供し得る。動的に生成されたオブジェクトは、発信サーバからキャッシング可能として識別されない。発信サーバは、動的に生成されたオブジェクトを有するネットワークを送信させ得る。
【００３２】
別の局面において、本発明は、複数のクライアントからの動的に生成されたオブジェクトなどのオブジェクトに対するリクエストに応答するためのフラッシュキャッシングと呼ばれる技術を提供する方法およびシステムに関する。本発明の技術は、例えば、クライアントからのリクエストに応答して、オブジェクトがバッファに記憶されている間、他のクライアントから動的に生成されたオブジェクトに対する追加のリクエストに応答して、クライアントへ送信するためにバッファに記憶された動的に生成されたオブジェクトを使用する。この技術を使用して、本発明は、他の方法ではキャッシング可能でないであろう動的に生成されたオブジェクトなどの非常に高速に変化するオブジェクトに対するキャッシュヒット率を増加させ得る。
【００３３】
一局面において、本発明は、複数のクライアントからの動的に生成されたオブジェクトに対するリクエストに応答する方法に関する。方法は、動的に生成されたオブジェクトに対する第１のクライアントの第１リクエストに対して発信サーバからの応答をデバイスによって受信することを含む。応答は、動的に生成されたオブジェクトを含む。方法は、また、第１のクライアントに応答を送信するために、パケット処理エンジンに対するデバイスによるリクエストすることを含む。応答は、送信を待つ間、バッファに保持される。方法は、第１のクライアントに対する応答の送信を完了する前に、また、バッファに保持された第１のクライアントに対する応答の動的に生成されたオブジェクトを、第２のクライアントに送信するパケット処理エンジンに対するデバイスによるリクエストする前に、第２のクライアントから動的に生成されたオブジェクトに対する第２のリクエストをデバイスによって受信することをさらに含む。
【００３４】
一実施形態において、本発明の方法は、パケット処理エンジンによって第１のクライアントに対して応答を送信することを含む。別の実施形態において、方法は、パケット処理エンジンによって、動的に生成されたオブジェクトを第２のリクエストに応答して、第２のクライアントに送信することを含む。一部の実施形態において、方法は、応答を第１のクライアントまたは第２のクライアントのうちの１つに送信後、パケット処理エンジンによって、応答をバッファから除去することを含む。一部の実施形態において、本発明によって使用されるバッファは、ＴＣＰ／ＩＰバッファまたはデバイスのＴＣＰ／ＩＰスタックの一部分を含む。デバイスは、第１のクライアントおよび第２のクライアントに送信するための単一のＴＣＰ／ＩＰスタックを有し得、バッファは単一のＴＣＰ／ＩＰスタックに対応付けられる。
【００３５】
本発明の一部の実施形態において、方法は、複数のクライアントから動的に生成されたオブジェクトに対する複数のリクエストをデバイスによって受信すること、およびバッファに保持された第１のクライアントに対する応答の動的に生成されたオブジェクトをデバイスによって複数のクライアントに送信することをリクエストすることを含む。一実施形態において、パケット処理エンジンは、第１のクライアントのネットワークへの接続に関係した１つ以上の特性に基づき、第１のクライアントへの応答を保持する。別の実施形態において、デバイスは、第２のリクエストを発信サーバに送信する代わりに、第２のリクエストをキューに入れる。一実施形態において、デバイスは、バッファに保持された第１のリクエストの応答を用いて第２のリクエストに応答する。
【００３６】
一部の実施形態において、本発明の方法は、動的に生成されたオブジェクトを第１および第２のクライアントに送信後、動的に生成されたオブジェクトをバッファから除去する。一実施形態において、動的に生成されたオブジェクトは、発信サーバからサービスされる場合のように非キャッシング可能として識別される。本発明の他の実施形態において、デバイスは、第２のリクエストが、第２のリクエストに対応づけられたオブジェクト決定要素によって第１のリクエストの動的に生成されたオブジェクトに対するものであることを決定する。
【００３７】
一部の実施形態において、デバイスは、第１のクライアントと発信サーバとの間で通信するアプライアンス、ネットワークデバイスまたはコンピューティングデバイスであり得る。さらなる実施形態において、デバイスは、パケット処理エンジンと通信するキャッシュを含む。一実施形態において、方法は、第１のクライアントへの応答または第１のクライアントの動的に生成されたオブジェクトのうちの１つを第２のクライアントに送信するようパケット処理エンジンに対してキャッシュによってリクエストすることを含む。
【００３８】
別の局面において、本発明は、複数のクライアントからの動的に生成されたオブジェクトに対するリクエストに応答するシステムに関する。システムは、発信サーバからの動的に生成されたオブジェクトに対する第１のクライアントの第１のリクエストへの応答を受信し、該応答は、該動的に生成されたオブジェクトを含むデバイスであって、該デバイスは、デバイスからの送信待ちの１つ以上のネットワークパケットを保持するバッファを含む、デバイスを含む。デバイスは、また、応答を第１のクライアントに送信するリクエストを、デバイスから受信するパケット処理エンジン、応答を含む１つ以上のネットワークパケットを保持するバッファを含む。デバイスは、第１のクライアントへの応答の送信を完了する前に、第２のクライアントから動的に生成されたオブジェクトに対するリクエストを受け取り、パケット処理エンジンに対してバッファに保持された応答の動的に生成されたオブジェクトを第２のクライアントに送信することをリクエストする。
【００３９】
本発明のシステムの一実施形態において、パケット処理エンジンは、応答をバッファから第１のクライアントへ送信する。別の実施形態において、パケット処理エンジンは、第２のリクエストに応答して、動的に生成されたオブジェクトをバッファから第２のクライアントに送信する。システムの一部の実施形態において、パケット処理エンジンは、応答を第１のクライアントまたは第２のクライアントのうちの１つに送信後、バッファからの応答を除去する。さらに他の実施形態において、バッファは、ＴＣＰ／ＩＰバッファまたは他の場合は、デバイスのＴＣＰ／ＩＰスタックの一部分である。一部の実施形態において、デバイスは、第１のクライアントおよび第２のクライアントへ送信するための単一のＴＣＰ／ＩＰスタックを有し、バッファは、単一のＴＣＰ／ＩＰスタックに対応付けられる。
【００４０】
本発明の別の実施形態において、デバイスは、複数のクライアントから動的に生成されたオブジェクトに対する複数のリクエストを受け取り、そこにおいて、デバイスは、パケット処理エンジンに対して、バッファに保持されている第１のクライアントへの応答の動的に生成されたオブジェクトを複数のクライアントに送信することをリクエストする。一実施形態において、パケット処理エンジンは、第１のクライアントのネットワークへの接続に関係した１つ以上の特性に基づき、第１のクライアントへの応答を保持する。別の実施形態において、デバイスは、第２のリクエストを発信サーバに送信する代わりに、第２のリクエストをキューに入れる。一部の実施形態において、デバイスは第２のリクエストをキューに入れ、第１のクライアントのためにバッファに保持された応答を用いて第２のリクエストに応答する。さらなる実施形態において、パケット処理エンジンは、動的に生成されたオブジェクトを第１および第２のクライアントに送信後、動的に生成されたオブジェクトをバッファから除去する。一実施形態において、動的に生成されたオブジェクトは、発信サーバによってなど非キャッシング可能として識別される。
【００４１】
本発明の別の実施形態において、デバイスは、第２のリクエストが第２のリクエストに対応づけられたオブジェクト決定要素によって第１のリクエストの動的に生成されたオブジェクトに対するものであることを決定する。一部の実施形態において、デバイスは、発信サーバとクライアントとの間で通信するアプライアンス、ネットワークデバイスまたはコンピューティングデバイスである。さらに、キャッシュは、パケット処理エンジンに対して、応答を第１のクライアントに送信するかまたは第１のクライアントの動的に生成されたオブジェクトを第２のクライアントに送信することのリクエストをし得る。
【００４２】
別の実施形態において、本発明は「フラッシュクラウド（ｆｌａｓｈ  ｃｒｏｗｄ）」技術に関する。フラッシュクラウド技術は、サーバが第１のリクエスタに対して応答オブジェクトを処理し、戻している時間の間に、同じオブジェクトに対して、例えばほとんど同時のリクエストなどの追加のリクエストを受信する状態を処理するための技術である。一旦そのようなほとんど同時のリクエストがすべてキャッシュによって応答されると、追加の有効時間または無効動作は不要であるオブジェクトはキャッシュからフラッシュされる。本発明のこの技術は、他の方法では非キャッシング可能と考えられるオブジェクトに対して、データがキャッシングされ非常な短時間でサービスされることを可能にする。この手法は、例えば、リアルタイムの株価または急速に展開するニュース記事などの急速に変化するデータを大量の同時に発生するユーザにサービスするアプリケーションにおいて相当な改善をもたらす。
【００４３】
一局面において、本発明は、複数のクライアントからの動的に生成されたオブジェクトに対するリクエストに応答するネットワークデバイスにおける方法に関する。本発明は、発信サーバへの動的に生成されたオブジェクトに対する第１のリクエストを第１のクライアントから受信すること、および第１のリクエストを発信サーバに送信することを含む。方法は、第１のクライアントの第１のリクエストに応答する前に、第２のクライアントから動的に生成されたオブジェクトに対するリクエストを受信することを含む。方法は、動的に生成されたオブジェクトを有する応答であって第１のリクエストに対する応答を発信サーバから受信すること、および動的に生成されたオブジェクトを第１のリクエストに応答して第１のクライアントに、および動的に生成されたオブジェクトを第２のリクエストに応答して第２のクライアントに送信することを含む。
【００４４】
本発明の一実施形態において、方法は、動的に生成されたオブジェクトに対する複数のクライアントからの複数のリクエストを受信すること、および各クライアントのそれぞれのリクエストに応答して動的に生成されたオブジェクトを複数のクライアントに送信することを含む。一部の実施形態において、方法は、動的に生成されたオブジェクトを第２のクライアントに送信することを完了する前に、動的に生成されたオブジェクトに対する第３のリクエストを第３のクライアントから受信すること、第３のリクエストに応答して動的に生成されたオブジェクトを第３のクライアントに送信することを含む。
【００４５】
別の実施形態において、本発明の方法は、第１のリクエストと第２のリクエストをほぼ同時に受信する。一実施形態において、方法は、第２のリクエストを発信サーバに送信する代わりに、第２のリクエストをキューに入れる。一部の実施形態において、方法は、動的に生成されたオブジェクトを第１のクライアントおよび第２のクライアントに送信後、動的に生成されたオブジェクトをキャッシュからフラッシュする。一実施形態において、動的に生成されたオブジェクトは、発信サーバからサービスされる場合のように非キャッシング可能として識別される。方法は、第２のリクエストが第２のリクエストに対応づけられたオブジェクト決定要素によって第１のリクエストの動的に生成されたオブジェクトに対するものであることを決定することを含む。さらに別の実施形態において、方法は、エンティティタグヘッダまたはキャッシュ制御ヘッダを含むように応答を変更し、変更された応答を第１のクライアントおよび／または第２のクライアントに送信する。
【００４６】
別の局面において、本発明は、複数のクライアントからの動的に生成されたオブジェクトに対するリクエストに応答するためのネットワークデバイスに関する。ネットワークデバイスは、発信サーバへの動的に生成されたオブジェクトに対する第１のリクエストを第１のクライアントから受信するための手段、および第１のリクエストを発信サーバに送信する手段を含む。ネットワークデバイスは、また、第１のクライアントの第１のリクエストに応答する前に、動的に生成されたオブジェクトに対する第２のリクエストを第２のクライアントから受信するための手段、および発信サーバからの第１のリクエストに対する応答を受信するための手段を含む。該応答は、動的に生成されたオブジェクトを含む。システムは、また、第１のリクエストに応答して動的に生成されたオブジェクトを第１のクライアントに送信し、第２のリクエストに応答して動的に生成されたオブジェクトを第２のクライアントに送信するための手段を含む。
【００４７】
本発明の一実施形態において、ネットワークデバイスは、動的に生成されたオブジェクトに対する複数のクライアントからの複数のリクエストを受信するための手段、および各クライアントのリクエストに応答して動的に生成されたオブジェクトを複数のクライアントに送信するための手段をさらに含む。別の実施形態において、ネットワークデバイスは、動的に生成されたオブジェクトを第２のクライアントに送信することを完了する前に、動的に生成されたオブジェクトに対する第３のリクエストを第３のクライアントから受信するための手段、第３のリクエストに応答して動的に生成されたオブジェクトを第３のクライアントに送信するための手段を含む。他の実施形態において、ネットワークデバイスは、第１のリクエストと第２のリクエストをほぼ同時に受信するための手段を有する。一部の実施形態において、ネットワークデバイスは、第２のリクエストを発信サーバに送信する代わりに、第２のリクエストをキューに入れる。
【００４８】
一部の実施形態において、本発明のネットワークデバイスは、動的に生成されたオブジェクトを第１のクライアントおよび第２のクライアントに送信後、動的に生成されたオブジェクトをキャッシュからフラッシュする。一部の実施形態において、動的に生成されたオブジェクトは、キャッシング可能として識別されない。他の実施形態において、ネットワークデバイスは、第２のリクエストが第２のリクエストに対応づけられたオブジェクト決定要素によって第１のリクエストの動的に生成されたオブジェクトに対するものであることを決定するための手段を含む。別の実施形態において、ネットワークデバイスは、また、エンティティタグヘッダまたはキャッシュ制御ヘッダの１つを含むように応答を変更し、変更された応答を第１のクライアントまたは第２のクライアントの１つに送信するための手段を含む。ネットワークデバイスは、クライアントと発信サーバとの間で通信するアプライアンスまたはコンピューティングデバイスであり得る。
【００４９】
さらに別の局面において、本発明は、応答においてクライアントに対し、動的に生成されたオブジェクトをキャッシング可能として識別するために、動的に生成されたオブジェクトをキャッシング可能として識別しないサーバからの応答をキャッシングによって変更するための方法およびシステムに関する。オブジェクトに対するＨＴＴＰリクエストおよび応答を扱う実施形態などの一部の実施形態において、本発明の技術は、発信サーバからのエンティティタグおよび／またはキャッシュ制御情報を備えていないオブジェクトに対するキャッシュ制御を提供するために、応答にエンティティタグすなわち「ｅタグ」を挿入する。本発明の技術は、キャッシュが後のリクエストにおいてヒットをチェックすることを可能にするために、クライアントへの応答に、オブジェクトに対するエンティティタグおよびキャッシュ制御情報などの情報を挿入することによって、キャッシュヒット率の増加を提供する。
【００５０】
一局面において、本発明は、キャッシング可能として識別されていない動的に生成されたオブジェクトをキャッシングするためにエンティティタグを用いる方法に関する。方法は、動的に生成されたオブジェクトに対するクライアントのリクエストへの応答をキャッシュによって発信サーバから受信することを含む。動的に生成されたオブジェクトは、キャッシング可能として識別されない。方法は、キャッシュに記憶された動的に生成されたオブジェクトに対するエンティティタグをキャッシュによって生成すること、および生成されたエンティティタグを含むように応答を変更することを含む。方法は、動的に生成されたオブジェクトをキャッシング可能として識別する変更された応答をキャッシュによってクライアントに送信することをさらに含む。
【００５１】
本発明の方法の一実施形態において、発信サーバから受け取られた応答はエンティティタグを含まない。一部の実施形態において、キャッシュは、クライアントが動的に生成されたオブジェクトをキャッシングする処理継続時間を識別するために応答を変更する。他の実施形態において、キャッシュは、動的に生成されたオブジェクトがキャッシュまたは発信サーバのうちの１つによって変化したかどうかをチェックした後に、キャッシュは、応答を記憶し応答にサービスすることをクライアントに示すために応答を変更する。一実施形態において、発信サーバからの応答は、動的に生成されたオブジェクトのためのキャッシュ制御情報を有さず、キャッシュは、キャッシュ制御情報を含むように、クライアントに送信される応答を変更する。
【００５２】
一部の実施形態において、本発明の方法は、また、エンティティタグのための数字をキャッシュによって生成することを含む。キャッシュは、生成されたエンティティタグを動的に生成されたオブジェクトと共に記憶し得る。別の実施形態において、キャッシュは、動的に生成されたオブジェクトによってキャッシュ制御情報を記憶し得る。一実施形態において、キャッシュは、生成されたエンティティタグおよびキャッシュ制御情報によって、キャッシュされた動的に制御されたオブジェクトにサービスする。
【００５３】
本発明の一部の実施形態において、キャッシュは、アプライアンス、ネットワークデバイスまたはコンピューティングデバイスにおいて動作する。他の実施形態において、リクエストまたは応答は、ハイパーテキストマークアップ言語（ＨＴＭＬ）を含む。別の実施形態において、キャッシュは、生成されたエンティティを識別するｅタグヘッダを含むように応答を変更し、一方、さらに他の実施形態において、キャッシュは、キャッシュ−制御ヘッダを含むように応答を変更する。一部の実施形態において、方法は、イフノンマッチ（Ｉｆ−Ｎｏｎｅ−Ｍａｔｃｈ）ヘッダを有する第２のリクエストをクライアントからキャッシュによって受信すること、および第２のリクエストに応答して、イフノンマッチヘッダに対応付けられたｅタグ値を、動的に生成されたオブジェクトと共にキャッシュに記憶されたエンティティタグと比較することを含む。さらなる一実施形態において、ｅタグ値がエンティティタグと一致する場合、キャッシュは、第２のリクエストに対し、変更されていない応答をクライアントに送信する。別の実施形態において、ｅタグ値がエンティティタグに一致しない場合、キャッシュは、第２のエンティティタグを有する更新された動的に生成されたオブジェクトをクライアントに送信する。
【００５４】
本発明の種々の実施形態の詳細は、添付の図面および以下の記述において説明される。
【００５５】
本明細書に引用され、本明細書の一部を形成する添付の図面は、本発明を例示し、記述と共に、本発明の原理を説明し、当業者が本発明を為し用いることを可能にするためにさらに供する。
【発明を実施するための最良の形態】
【００５６】
本発明の特徴および利点は、図面に関連して解された場合、以下に述べられた詳細な説明からより明らかとなり、図面において、同じ参照記号は全体を通して対応するエレメントを識別する。図面において、同じ参照番号は、一般に、同一の、機能的に同様な、および／または構造的に同様なエレメントを示す。
【００５７】
（Ａ．実施例のネットワーク環境）
図１は、本発明の実施形態が実施され得る例のネットワーク環境１００を例示する。図１に示されるように、実施例のネットワーク環境１００は、複数のクライアント１０２ａ〜１０２ｎ、複数のサーバ１０６ａ〜１０６ｎ、およびキャッシュアプライアンス、デバイスまたはキャッシュとも呼ばれるアプライアンス１０４を含む。サーバ１０６ａ〜１０６ｎは、オブジェクトまたはリレーショナルデータベースなどのデータベースを発信し、管理し、リクエストされたコンテントをクライアント１０２ａ〜１０２ｎに提供する。この理由により、サーバ１０６ａ〜１０６ｎは、本明細書において時々「発信サーバ」と呼ばれる。なぜならばそれらのサーバは、必ずというわけではないが一般的に、リクエストされたコンテントを形成するオブジェクトを発信するからである。クライアント１０２ａ〜１０２ｎおよびサーバ１０６ａ〜１０６ｎの各々は、後に図８Ａおよび図８Ｂに関連して、より詳細に記述されるコンピューティングデバイス８００などのコンピューティングデバイスの任意のタイプおよび形式であり得る。例えば、任意のクライアント１０２ａ〜１０２ｎは、任意のデスックトップコンピュータの他に、例えば、携帯電話または携帯情報端末もしくはラップトップまたはノートブックコンピュータなどの遠隔通信デバイスなどのモバイルコンピューティングデバイスであり得る。
【００５８】
クライアント１０２ａ〜１０２ｎの各々は、パブリックデータ通信ネットワーク１０８を介してアプライアンス１０４に通信可能に結合され、一方、アプライアンス１０４は、プライベートデータ通信ネットワーク１１０を介してサーバ１０６ａ〜１０６ｎに通信可能に結合される。一実施形態において、パブリックデータ通信ネットワーク１０８はインターネットを含み、プライベートデータ通信ネットワーク１１０は企業ネットワークを含む。パブリックデータ通信ネットワーク１０８およびプライベートデータ通信ネットワーク１１０は、ネットワークの任意のタイプおよび形式、すなわちパブリック、プライベートまたはそれ以外であり得、一部の場合において、それらは同じネットワークであり得る。
【００５９】
図１は、クライアント１０２ａ〜１０２ｎとサーバ１０６ａ〜１０６ｎとの間のネットワーク１０８およびネットワーク１１０を示すが、クライアント１０２ａ〜１０２ｎおよびサーバ１０６ａ〜１０６ｎは、同じネットワーク１０８または１１０上にあり得る。ネットワーク１０８および１１０は、同じタイプのネットワークまたは異なるタイプのネットワークであり得る。ネットワーク１０８および／またはネットワーク１１０は、企業内イントラネット、都市域網（ＭＡＮ）などのローカルエリアネットワーク（ＬＡＮ）、または、インターネットまたはワールドワイドウェブなどの広域ネットワーク（ＷＡＮ）であり得る。ネットワーク１０８および／または１１０は、任意のタイプおよび／または形式のネットワークであり得、次のどれをも含み得る：二地点間ネットワーク、同報通信ネットワーク、広域ネットワーク、ローカルエリアネットワーク、遠隔通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ＡＴＭ（非同期転送モード）ネットワーク、ＳＯＮＥＴ（同期式光ネットワーク）ネットワーク、ＳＤＨ（同期式ディジタルハイアラキ）ネットワーク、無線ネットワークおよび有線ネットワーク。ネットワーク１０８および／または１１０のトポロジは、バス、スター、またはリングネットワークトポロジであり得る。ネットワーク１０８および／または１１０ならびにネットワークトポロジは、本明細書に記述された本発明の動作をサポートする能力のある、当業者に公知の任意のそのようなネットワークまたはネットワークトポロジであり得る。
【００６０】
図１に示されるように、アプライアンス１０４は、パブリックデータ通信ネットワーク１０８と私設データ通信ネットワーク１１０との間に示される。他の実施形態において、アプライアンス１０４は、パブリックデータ通信ネットワーク１０８または私設データ通信ネットワーク１１０上に位置し得る。他の実施形態において、アプライアンス１０４は、クライアント１０２ａ〜１０２ｎと同じかまたは異なるネットワーク１０８、１１０上の任意の個別クライアント１０２ａ〜１０２ｎまたは任意の個別サーバ１０６ａ〜１０６ｎの必須の部分であり得る。そのように、アプライアンス１０４は、ネットワークまたはクライアント１０２ａ〜１０２ｎとサーバ１０６ａ〜１０６ｎとの間のネットワーク通信パスにおける任意の地点に位置し得る。
【００６１】
本発明の実施形態に従って、アプライアンス１０４は、キャッシュマネジメントロジックを含み、キャッシュメモリをインプリメントするためにアプライアンスが利用する記憶媒体も含むかまたは記憶媒体にアクセスを有する。アプライアンス１０４は、これらの特徴を用いてクライアント１０２ａ〜１０２ｎによってなされたオブジェクトリクエストをどのサーバ１０６ａ〜１０６ｎに対しても監視する。これらのオブジェクトリクエストに応答してサーバ１０６ａ〜１０６ｎから戻されたオブジェクトは、アプライアンス１０４によってキャッシュメモリに記憶される。あらゆるクライアント１０２ａ〜１０２ｎからの同じオブジェクトに対するその後のリクエストは、アプライアンス１０４によってインタセプトされ、アプライアンス１０４は、リクエストをサーバ１０６ａ〜１０６ｎに渡すよりはむしろキャッシュからのオブジェクトを引渡すことを試みる。このことは、クライアント１０２ａ〜１０２ｎからのリクエストに応答するのに必要な時間およびサーバ１０６ａ〜１０６ｎをサポートするインフラに対する負荷の両方を減少させる二重の利益を提供する。
【００６２】
要約すると、図１に描かれたネットワーク環境１００は、例としてのみ提示され、制限するものとして意図されない。当業者は、本明細書に提示された教示に基づき、本発明がオブジェクトリクエストおよびオブジェクト応答が１つ以上のネットワークのノード間で転送される任意のネットワーク環境においてインプリメントされ得ることを容易に理解する。
【００６３】
（Ｂ．実施例のアプライアンスまたはデバイスアーキテクチャ）
本明細書においてより詳細に記述されるように、本発明の実施形態においてアプライアンス１０４は、オペレーティングシステムのカーネルレベルにおけるキャッシングの機能性を、解読、解凍または認証および／または許可を含むがこれらに限定されない１つ以上の他の処理タスクと統合する。そのようなインプリメンテーションは、同一人によって所有され同時係属中の２００５年６月２９日に出願された、名称「Ｍｅｔｈｏｄ  ａｎｄ  Ｄｅｖｉｃｅ  ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  Ｉｎｔｅｇｒａｔｅｄ  Ｃａｃｈｉｎｇ  ｉｎ  ａ  Ｄａｔａ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｎｅｔｗｏｒｋ」の米国特許出願第１１／１６９，００２号に例示され、該出願は本明細書に参考として援用される。そのような例のアーキテクチャは、図２に従って本明細書に記述されるが、本発明はそのように限定されるのではなく、他のアーキテクチャは本明細書に記述された本発明の動作を実行するときに使用され得る。
【００６４】
図２は、アプライアンス１０４の実施例のアーキテクチャ２００を例示する。上記のように、アーキテクチャ２００は、例示のみとして提供され、限定することとして意図されない。図２に示されるように、実施例のアーキテキチャ２００は、ハードウェア層２０６、ならびにユーザスペース２０２およびカーネルスペース２０４に分割されるソフトウェア層から成り立つ。
【００６５】
ハードウェア層２０６は、カーネルスペース２０４およびユーザスペース２０２内のプログラムおよびサービスが実行されるハードウェアエレメントを提供する。ハードウェア層２０６は、また、カーネルスペース２０４およびユーザスペース２０２内のプログラムおよびサービスがアプライアンス１０４に関して内部および外部の両方においてデータの通信を可能にする構造およびエレメントを提供する。図２に示されるように、ハードウェア層２０６は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット２６２、ソフトウェアおよびデータを記憶するためのメモリ２６４、ネットワークを介してデータを送受信するためのネットワークポート２６６、およびネットワークを介して送受信されるデータのセキュアソケット層（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ）処理に関係した機能を実行するための暗号化プロセッサ２６０を含む。一部の実施形態において、中央処理装置２６２は、単一のプロセッサにおいて暗号化プロセッサ２６０の機能を実行し得る。さらに、ハードウェア層２０６は、処理装置２６２および暗号化プロセッサ２６０の各々ための複数のプロセッサを備え得る。アプライアンス１０４のハードウェア層２０６は、一般的に暗号化プロセッサ２６０と共に例示されるが、プロセッサ２６０は、セキュアソケット層（ＳＳＬ）またはトランスポート層セキュリティ（ＴＬＳ）プロトコルなどの任意の暗号化プロトコルに関係した機能を実行するプロセッサであり得る。一部の実施形態において、プロセッサ２６０は、汎用プロセッサ（ＧＰＰ）であり得、さらなる実施形態において、任意のセキュリティ関係のプロトコルの処理を実行するための実行可能な命令を有し得る。
【００６６】
アプライアンス１０４のハードウェア層２０６は、図２において、あるエレメントと共に例示されているが、アプライアンス１０４のハードウェアポーションまたはコンポーネントは、本明細書のさらに先の図８Ａおよび８Ｂに関連して例示され検討されるコンピューティングデバイス８００などのコンピューティングデバイスのエレメント、ハードウェアまたはソフトウェアの任意のタイプまたは形式を備え得る。一部の実施形態において、アプライアンス１０４は、サーバ、ゲートウェイ、ルータ、スイッチ、ブリッジまたはその他のタイプのコンピューティングまたはネットワークデバイスを備え、それらに対応付けられた任意のハードウェアおよび／またはソフトウェアエレメントを有し得る。
【００６７】
アプライアンス１０４のオペレーティングシステムは、利用可能なシステムメモリをカーネルスペース２０４およびユーザスペース２０４に割り当て、管理し、さもなければ分離する。本発明は限定されるものではないが、実施例のソフトウェアアーキテクチャ２００においてオペレーティングシステムは、任意のタイプおよび／または形式のユニックスオペレーティングシステムであり得る。そのように、アプライアンス１０４は、次のような任意のオペレーティングシステムを実行し得る：任意のバージョンのＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム、様々なリリースのユニックスおよびリナックス、任意のバージョンのＭａｃｉｎｔｏｓｈコンピュータのためのＭａｃ  ＯＳ（登録商標）、任意の埋込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の所有オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイスのための任意のオペレーティングソステム、または、アプライアンス１０４上で実行可能で、本明細書に記述された動作を実行可能な任意のその他のオペレーティングシステム。
【００６８】
カーネルスペース２０４は、任意のデバイスドライバ、カーネル拡張またはその他のカーネル関連ソフトウェアを含むカーネル２３０を実行するために確保される。当業者に公知のように、カーネル２３０は、オペレーティングシステムのコアであり、アプライアンス１０４のリソースおよびハードウェア関連のエレメントのアクセス、制御および管理を提供する。本発明の実施形態に従って、カーネルスペース２０４は、また、その利益が本明細書においてさらに詳しく説明される、時々統合キャッシュとも呼ばれるキャッシュマネージャ２３２と供に、作動する多数のネットワークサービスまたは処理を含む。さらに、カーネル２３０の実施形態は、デバイス１０４によってインストールされ、構成され、または、さもなければ使用されるオペレーティングシステムの実施形態に依存する。
【００６９】
一実施形態において、デバイス１０４は、クライアント１０２ａ〜１０２ｂおよび／またはサーバ１０６ａ〜１０６ｎと通信するためのＴＣＰ／ＩＰベースのスタックなどの１つのネットワークスタック２６７を含む。一実施形態において、ネットワークスタック２６７は、ネットワーク１０８などの第１のネットワークおよび第２のネットワーク１１０と通信するために使用される。一部の実施形態において、デバイス１０４は、クライアント１０２ａ〜１０２ｎのＴＣＰ接続などの第１のトランスポート層を終了させ、クライアント１０２ａ〜１０２ｎによる使用のためにサーバ１０６ａ〜１０６ｎへの第２のトランスポート層接続を設定する。例えば、第２のトランスポート層接続は、アプライアンス１０４およびサーバ１０６ａ〜１０６ｎにおいて終了される。第１および第２のトランスポート層接続は、単一のネットワークスタック２６７を介して設定され得る。他の実施形態において、デバイス１０４は、例えば、２６７および２６７’などの複数のネットワークスタックを含み得、第１のトランスポート層接続は、第１のネットワークスタック２６７において設定または終了され得、第２のトランスポート層接続は、第２のネットワークスタック２６７’において設定または終了され得る。例えば、１つのネットワークスタックは、第１のネットワークにおいてネットワークパケットを送受信するためであり、別のネットワークスタックは、第２のネットワークにおいてネットワークパケットを送受信するためである。一実施形態において、ネットワークスタック２６７は、アプライアンス１０４による送信のために、１つ以上のネットワークパケットをキューに入れるためのバッファ２４３を含む。
【００７０】
図２に示されるように、カーネルスペース２０４は、キャッシュマネージャ２３２、高速層２−７結合パケットエンジン２４０、暗号化エンジン２３４、ポリシーエンジン２３６およびマルチプロトコル圧縮論理２３８を含む。ユーザスペース２０２の代わりに、カーネルスペース２０４またはカーネルモードでこれらのコンポーネントまたは処理２３２、２４０，２３４、２３６および２３８を実行することは、これらのコンポーネントの各々の性能を単独または組み合わせで向上する。カーネル動作は、これらのコンポーネントまたは処理２３２、２４０，２３４、２３６および２３８がデバイス１０４のオペレーティングシステムのコアアドレススペースにおいて実行することを意味する。例えば、カーネルモードで暗号化エンジン２３４を実行することは、暗号化および解読動作をカーネルに移動することによって暗号化性能を向上し、それによってカーネルモードにおけるメモリスペースまたはカーネルスレッドとユーザモードにおけるメモリスペースまたはスレッドとの間の遷移数を減少させる。例えば、カーネルモードにおいて得られたデータは、カーネルレベルデータ構造からユーザレベルデータ構造へのような、ユーザモードにおける処理またはスレッド実行へ渡されたり、コピーされたりする必要はない。別の局面において、カーネルモードとユーザモードとの間のコンテキスト切替え数も減少される。さらに、任意のコンポーネントまたは処理２３２、２４０、２３５、２３６および２３８の同期およびそれらの間の通信は、カーネルスペース２０４においてより効率的に実行され得る。
【００７１】
一部の実施形態において、コンポーネント２３２、２４０、２３４、２３６および２３８の任意の部分は、カーネルスペース２０４において実行または動作し得、一方、これらのコンポーネント２３２、２４０、２３４、２３６および２３８の他の部分は、ユーザスペース２０２において実行または動作し得る。一実施形態において、本発明は、例えばクライアント１０２ａ〜１０２ｎからのリクエストまたはサーバ１０６ａ〜１０６ｎからの応答を含む１つ以上のネットワークパケットの任意の部分へのアクセスを提供するカーネルレベルのデータ構造を使用する。一部の実施形態において、カーネルレベルのデータ構造は、トランスポート層ドライバインタフェースまたはネットワークスタック２６７へのフィルタを介してパケットエンジン２４０から得られ得る。カーネルレベルデータ構造は、ネットワークスタック２６７、ネットワークトラフィックまたはネットワークスタック２６７によって送受信されるパケットに関係するカーネルスペース２０４を介してアクセス可能な任意のインタフェースおよび／またはデータを含み得る。他の実施形態において、カーネルレベルデータ構造は、コンポーネントまたは処理の所望の動作を実行するために、任意のコンポーネントまたは処理２３２、２４０、２３４、２３６および２３８によって用いられ得る。一実施形態において、コンポーネント２３２、２４０、２３４、２３６および２３８は、カーネルレベルデータ構造を用いるとき、カーネルモード２０４において実行し、一方、別の実施形態において、コンポーネント２３２、２４０、２３４、２３６および２３８は、カーネルレベルデータ構造を用いるとき、ユーザモードにおいて実行する。一部の実施形態において、カーネルレベルデータ構造は、第２のカーネルレベルデータ構造または任意の所望のユーザレベルデータ構造へコピーまたは渡され得る。
【００７２】
キャッシュマネージャ２３２は、オブジェクトまたは発信サーバ１０６ａ〜１０６ｎによってサービスされる動的に生成されたオブジェクトなどの任意のタイプおよび形式のコンテントのキャッシュアクセス、制御および管理を提供するために、ソフトウェア、ハードウェアまたはソフトウェアおよびハードウェアの組合せを含み得る。キャッシュマネージャ２３２によって処理および記憶されるデータ、オブジェクトまたはコンテントは、マークアップ言語などの任意のフォーマットのデータまたは任意のプロトコルを介して通信されるデータを含み得る。一部の実施形態において、キャッシュマネージャ２３２は、どこか別のところに記憶された元のデータまたは以前に計算され、生成されまたは送信されたデータを復元する。元のデータが、キャッシュメモリエレメントを読取ることに比べて、取り出し、計算しまたは入手するためにより長いアクセス時間を必要とし得る場合には、一旦データがキャッシュメモリエレメントに記憶されると、その後の使用は、元のデータを再取り出しまたは再計算するよりはむしろキャッシュされたコピーにアクセスすることによってなされ得、それによってアクセス時間を減少させる。一部の実施形態において、キャッシュメモリエレメントは、データオブジェクトをデバイス１０４のメモリ２６４に含み得る。他の実施形態において、キャッシュメモリエレメントは、メモリ２６４より速いアクセス時間を有するメモリを含み得る。別の実施形態において、キャッシュメモリエレメントは、ハードディスクの部分などのデバイス１０４の任意のタイプおよび形式のストレージエレメントを含み得る。一部の実施形態において、処理ユニット２６２は、本発明のキャッシュマネージャ２３２による使用のためのキャッシュメモリを提供し得る。なおもさらなる実施形態において、キャッシュマネージャ２３２は、メモリ、ストレージまたはデータ、オブジェクトおよびその他のコンテントをキャッシングするための処理ユニットの任意の部分および組合せを使用し得る。
【００７３】
さらに、本発明のキャッシュマネージャ２３２は、本明細に記述された本発明の技術の任意の実施形態を実行するための、あらゆる論理、規則、または動作を含む。例えば、キャッシュマネージャ２３２は、有効期限切れに基づくかまたはクライアント１０２ａ〜１０２ｎかまたはサーバ１０６ａ〜１０６ｎから無効コマンドを受領すると、オブジェクトを無効にする論理または機能を含む。一部の実施形態において、キャッシュマネージャ２３２は、カーネルスペース２０４において実行するプログラム、サービス、処理またはタスクとして動作し得、他の実施形態において、ユーザスペース２０２において実行するプログラム、サービス、処理またはタスクとして動作し得し得る。一実施形態において、キャッシュマネージャ２３２の第１の部分はユーザスペース２０２において実行する一方、第２の部分は、カーネルスペース２０４において実行する。一部の実施形態において、キャッシュマネージャ２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブルロジックデバイス（
ＰＬＤ）、または特定用途向け集積回路（ＡＳＩＣ）などの任意の他のタイプの集積回路を含み得る。
【００７４】
ポリシーエンジン２３６は、例えば、インテリジェント統計的エンジンまたはその他のプログラマブルアプリケーションを含み得る。一実施形態において、ポリシーエンジン２３６は、ユーザがキャッシングポリシーを識別、指定、定義または構成することを可能にするために構成機構を提供する。一部の実施形態において、ポリシーエンジン２３６は、また、ユーザ選択のキャッシングポリシー決定を可能にするルックアップテーブルまたはハッシュテーブルなどのデータ構造をサポートするために、メモリへのアクセスを有する。他の実施形態において、ポリシーエンジン２３６は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮または任意のその他の機能、またはアプライアンス１０４によって実行される動作のアクセス、制御および管理の他に、アプライアンス１０４によってキャッシングされるオブジェクト、データまたはコンテントのアクセス、制御および管理を決定し、提供するための、あらゆる任意の論理、規則、機能または動作を含み得る。特定のキャッシングポリシーのさらなる例は、本明細書においてさらに記述される。
【００７５】
暗号化エンジン２３４は、ＳＳＬまたはＴＬＳなどの任意のセキュリティに関係したプロトコルの処理のハンドリングもしくはそれに関係した任意の機能のためのあらゆる論理、ビジネスルール、機能または動作を含む。例えば、暗号化エンジン２３４は、アプライアンス１０４を介して通信されるネットワークパケットまたはその任意の部分を暗号化よび解読する。暗号化エンジン２３４は、また、クライアント１０２ａ〜１０２ｎ、サーバ１０６ａ〜１０６ｎ、またはアプライアンス１０４の代わりに、ＳＳＬまたはＴＬＳ接続をセットアップまたは設定し得る。そのように、暗号化エンジン２３４は、ＳＳＬ処理のオフロードおよび加速を提供する。一実施形態において、暗号化エンジン２３４は、クライアント１０２ａ〜１０２ｎとサーバ１０６ａ〜１０６ｎとの間の仮想のプライベートネットワークを提供するために、トンネリングプロトコルを使用する。一部の実施形態において、暗号化エンジン２３４は、暗号化プロセッサ２６０と通信する。別の実施形態において、暗号化エンジン２３４は、暗号化プロセッサ２６０上で実行する実行可能な命令を含む。
【００７６】
マルチプロトコル圧縮エンジン２３８は、デバイス１０４のネットワークスタック２６７によって用いられる任意のプロトコルなどのネットワークパケットの１つ以上のプロトコルを圧縮するためのあらゆる論理、ビジネスルール、機能または動作を含む。一実施形態において、マルチプロトコル圧縮エンジン２３８は、クライアント１０２ａ〜１０２ｎとサーバ１０６ａ〜１０６ｎとの間で双方向に、任意のＴＣＰ／ＩＰベースのプロトコルを圧縮する。任意のＴＣＰ／ＩＰベースのプロトコルは、メッセージングアプリケーションプログラミングインタフェース（ＭＡＰＩ）（ｅメール）、ファイルトランスファプロトコル（ＦＴＰ）、ハイパーテキストトランスファプロトコル（ＨＴＴＰ）、コモンインターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、インデペンデントコンピューティングアーキテクチャ（ＩＣＡ）プロトコル、リモートデスクトッププロトコル（ＲＤＰ）、ワイヤレスアプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバＩＰ（ＶｏＩＰ）プロトコルを含む。他の実施形態において、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマークアップ言語（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、一部の実施形態において、拡張可能なマークアップ言語（ＸＭＬ）などの任意のマークアップ言語の圧縮を提供する。一実施形態において、マルチプロトコル圧縮エンジン２３８は、アプライアンス１０４の通信のために設計された任意のプロトコルなどの任意の高性能なプロトコルの圧縮を提供する。別の実施形態において、マルチプロトコル圧縮エンジン２３８は、変更されたトランスポート制御プロトコルの任意のペイロードまたは変更されたトランスポート制御プロトコルの任意のペイロードを用いる任意の通信を圧縮する。変更されたトランスポート制御プロトコルは、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択肯定応答付きＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大ウィンドウ付きＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコルなどの混雑予測プロトコル、およびＴＣＰスプーフィング（ｓｐｏｏｆｉｎｇ）プロトコルなどである。
【００７７】
そのように本発明のマルチプロトコル圧縮エンジン２３８は、デスクトップクライアントを介するユーザアクセスのアプリケーションの性能を加速する。デスクトップクライアントは、例えば、マイクロソフトアウトルックおよびオラクル（Ｏｒａｃｌｅ）、ＳＡＰ、シーベル（Ｓｉｅｂｅｌ）のようなポピュラーな企業アプリケーションによって起動される任意のクライアントなどの非ウェブシンクライアントであり、ポケットＰＣなどモバイルクライアントでさえである。一部の実施形態において、カーネルモード２０４において実行し、ネットワークスタック２６７にアクセスするパケット処理エンジン２４０と統合することによってマルチプロトコル圧縮エンジン２３８は、任意のアプリケーション層プロトコルなどの、ＴＣＰ／ＩＰプロトコルによってキャリーされる任意のプロトコルを圧縮することが可能である。
【００７８】
パケット処理エンジンまたはパケットエンジンとも一般的に呼ばれる高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してアプライアンス１０４によって送受信されるパケットのカーネルレベル処理を管理する役割を担う。高速層２−７統合パケットエンジン２４０は、ネットワークパケットの受信またはネットワークパケットの送信などの処理中、１つ以上のネットワークパケットをキューに入れるためのバッファを含み得る。さらに、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してネットワークパケットを送受信するために、１つ以上のネットワークスタック２６７と通信する。高速層２−７統合パケットエンジン２４０は、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシーエンジン２３６およびマルチプロトコル圧縮論理２３８と共に作動する。特に、暗号化エンジン２３４は、パケットのＳＳＬ処理を実行するように構成され、ポリシーエンジン２３６は、リクエストレベルコンテント切替えおよびリクエストレベルキャッシュリダイレクションなどのトラフィック管理に関係する機能を実行するように構成され、マルチプロトコル圧縮論理２３８は、データの圧縮および解凍に関係する機能を実行するように構成される。
【００７９】
高速層２−７統合パケットエンジン２４０は、パケット処理タイマ２４２を含む。一実施形態において、パケット処理タイマ２４２は、入力すなわち受信または出力すなわち送信のネットワークパケットの処理をトリガするために１つ以上の時間間隔を提供する。一部の実施形態において、高速層２−７統合パケットエンジン２４０は、タイマ２４２に応答してネットワークパケットを処理する。パケット処理タイマ２４２は、時間関連の事象、間隔または発生を通知、トリガ、または通信するために、任意のタイプおよび形式の信号パケットエンジン２４０に提供する。多くの実施形態において、パケット処理タイマ２４２は、例えば１００ｍｓ、５０ｍｓまたは２５ｍｓなどのミリ秒のオーダーで動作する。例えば、一部の実施形態において、パケット処理タイマ２４２は、時間間隔を提供するか、または、ネットワークパケットが、高速層２−７統合パケットエンジン２４０によって１０ｍｓの時間間隔で処理されるようにし、一方で、他の実施形態においては、ネットワークパケットは、５ｍｓの時間間隔で、なおもさらなる実施形態において、３ｍｓ，２ｍｓ、または１ｍｓもの短時間間隔で処理される。高速層２−７統合パケットエンジン２４０は、動作時、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシーエンジン２３６およびマルチプロトコル圧縮エンジン２３８とインタフェース、統合または通信され得る。そのように、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシーエンジン２３６およびマルチプロトコル圧縮ロジック２３８のロジック、機能または動作のどれもが、パケット処理タイマ２４２および／またはパケットエンジン２４０に応答して実行され得る。従って、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシーエンジン２３６およびマルチプロトコル圧縮ロジック２３８のロジック、機能または動作のどれもが、パケット処理タイマ２４２によって提供される、例えば，１０ｍｓ以下の時間間隔の細かさで実行され得る。例えば、一実施形態において、キャッシュマネージャ２３２は、高速層２−７統合パケットエンジン２４０および／またはパケット処理タイマ２４２に応答して、任意のキャッシシングされたオブジェクトの無効化を実行し得る。別の実施形態において、キャッシングされたオブジェクトの満了または無効時間は、１０ｍｓごとなどのパケット処理タイマ２４２の時間間隔と同じ細かさのオーダーにセットされ得る。
【００８０】
カーネルスペース２０４と対照的に、ユーザスペース２０２は、ユーザモードアプリケーションまたはさもなければユーザモードで実行するプログラムによって使用されるオペレーティングシステムのメモリエリアまたはメモリポーションである。ユーザモードアプリケーションは、カーネルスペース２０４に直接にアクセスしないことがあり得、カーネルサービスにアクセスするためにサービスコールを使用することがあり得る。図２に示されるように、アプライアンス１０４のユーザスペース２０２は、グラフィカルユーザインタフェース（ＧＵＩ）２１０、コマンドラインインタフェース（ＣＬＩ）２１２、シェルサービス２１４、ヘルスモニタリングプログラム２１６、およびデーモンサービス２１８を含む。ＧＵＩ２１０およびＣＬＩ２１２は、システムアドミニストレータまたはその他のユーザが対話し得る手段を提供し、アプライアンス１０４のオペレーティングシステムおよびユーザスペース２０２またはカーネルスペース２０４のどちらかを介してなどでアプライアンス１０４の動作を制御する。ＧＵＩ２１０は、任意のタイプおよび形式のグラフィカルユーザインタフェースであり、テキスト、グラフィカルまたはさもなければ、ブラウザなどの任意のプログラムまたはアプリケーションを介して提示され得る。ＣＬＩ２１２は、オペレーティングシステムによって提供される任意のタイプおよび形式のコマンドラインなどのコマンドラインまたはテキストベースのインタフェースのであり得る。例えば、ＣＬＩ２１２はシェルを含み、シェルはユーザがオペレーティングシステムと対話することを可能にするためのツールである。一部の実施形態において、ＣＬＩ２１２は、ｂａｓｈ、ｃｓｈ、ｔｃｓｈ、またはｋｓｈタイプのシェルを介して提供され得る。シェルサービス２１４は、ＧＵＩ２１０および／またはＣＬＩ２１２を介するユーザによるアプライアンス１０４またはオペレーティングシステムとの対話をサポートするために、プログラム、サービス、タスク、処理または実行可能な命令を含む。
【００８１】
ヘルスモニタリングプログラム２１６は、ネットワークが正しく機能していることおよびユーザがネットワークを介してリクエストされたコンテントを受信していることを監視、チェック、報告および確認するために用いられる。ヘルスモニタリングプログラム２１６は、アプライアンス１０４の任意の活動を監視するための論理、規則、機能または動作を提供するために、プログラム、サービス、タスク、処理または実行可能な命令のうちの１つ以上を含む。一部の実施形態において、ヘルスモニタリングプログラム２１６は、アプライアンス１０４を介して通過したあらゆるネットワークトラフィックをインタセプトおよび検査する。他の実施形態において、ヘルスモニタリングプログラム２１６は、任意の適切な手段および／または機構によって次のもののうちの１つ以上とインタフェースする：暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシーエンジン２３６、マルチプロトコル圧縮論理２３８、パケットエンジン２４０、デーモンサービス２１８、およびシェルサービス２１４。そのように、ヘルスモニタリングプログラム２１６は、アプライアンス１０４の任意の部分の状態、状況または健全さ（ｈｅａｌｔｈ）を判定するために、任意のアプリケーションプログラミングインタフェース（ＡＰＩ）をコールし得る。例えば、ヘルスモニタリングプログラム２１６は、プログラム、処理、サービスまたはタスクが活動状態で、現在実行中であるかどうかをチェックするために定期的に状態照会をピン（ｐｉｎｇ）し、または送り得る。別の実施例において、ヘルスモニタリングプログラム２１６は、アプライアンス１０４の任意の部分に関して、あらゆる条件、状態またはエラーを判定するために、任意のプログラム、処理、サービスまたはタスクによって提供されたあらゆる状態、エラーまたは履歴のログをチェックし得る。
【００８２】
デーモンサービス２１８は、連続的にまたはバックグラウンドで実行され、アプライアンス１０４によって受け取られる定期的なサービスリクエストを扱うプログラムである。一部の実施形態において、デーモンサービスは、リクエストを、適宜、別のデーモンサービス２１８などの他のプログラムまたは処理に転送し得る。当業者に公知のように、デーモンサービス２１８は無人で実行し得、ネットワーク制御などの連続的、定期的なシステムの広い機能を実行するか、または任意の所望のタスクを実行する。一部の実施形態において、１つ以上のデーモンサービス２１８は、ユーザスペース２０２において実行し、一方、他の実施形態において１つ以上のデーモンサービス２１８は、カーネルスペースで実行する。
【００８３】
（Ｃ．動的に生成されたオブジェクトのキャッシング）
１つ以上の動的に生成されたオブジェクトなどの動的なコンテントは、図１に示されるように、ローカルかリモートであるかの１つ以上のクライアント１０２ａ〜１０２ｎからのオブジェクトリクエストを処理するアプリケーションまたは発信サーバ１０６ａ〜１０６ｎと呼ばれるサーバ、および／または、バックエンドデータベース（図示されていない）によって生成され得る。それらのアプリケーションまたはデータベースは、クライアントから受信した入力に関係したデータを含むデータを処理するので、これらのデータベースおよびアプリケーションによってサービスされた応答オブジェクトは変化し得る。発信サーバにおけるそれらのアプリケーションまたはデータベースによって生成された前のオブジェクトはもはや新鮮でなく、従ってキャッシュによってもはや記憶されない。例えば、同じセットの入力が与えられた場合、第１のインスタンスの動的に生成されたオブジェクトは、第２のインスタンスの動的に生成されたオブジェクトとは異なり得る。別の実施例において、オブジェクトの第１のインスタンスがオブジェクトの第２のインスタンスとは異なって生成されるように、同じオブジェクトが異なるセットの入力によって動的に生成され得る。
【００８４】
ネットワーク性能の向上を達成するために、以下に詳細に記述されるように、アプラアンス１０４は、種々の方法によって動的に生成されたコンテントをキャッシュする際に発生する問題を対処するように設計され構成される。本明細書において記述された本発明の一部の実施形態において、アプライアンス１０４は、キャッシュに記憶された動的に生成されたコンテントの無効化をより効率的および効果的にするための１つ以上の技術のセットを含む。さらに、アプライアンスは、フラッシュクラウドのための制御およびキャッシングを実行するための技術を含み得る。キャッシュメモリは、一般的に、オブジェクトに対するあらゆる応答を、そのような応答が非キャッシング可能とマークされない限り、記憶する。本明細書に記述されるように、動的に生成されたコンテントの効率的なキャッシングは、発信サーバにおいて変化を経験したオブジェクトのタイムリーな無効化をキャッシュメモリにおいて可能にする技術を必要とする。タイムリーな無効化は、キャッシュがなくなったコンテントへのサービスを回避する（これは、特にコンテントに対する変化が不規則に発生した場合、動的に生成されたコンテントに関して特に関心のあるタスクである）ことを可能にする。以下に述べられるものは、動的に生成されたコンテントのタイムリーな無効化を確実にするための多数の技術である。
【００８５】
（１．統合された機能性）
一局面において、本発明は、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４および／またはマルチプロトコル圧縮エンジン２３８の機能、論理または動作を、パケット処理タイマ２４２に応答する高速層２−７統合パケットエンジンのパケット処理動作に統合する技術に関する。例えば、キャッシュマネージャ２３２の動作は、ネットワークパケットの送受信などのパケット処理動作に使用されるパケット処理タイマ２４２の時間間隔内で実行され得る。一実施形態において、パケット処理タイマをパケット処理動作に統合することおよび／または使用することによって、本発明のキャッシュマネージャ２３２は、さらに詳細は以下に記述されるように、非常に小さい時間間隔にまで短くなった有効時間を有するオブジェクトをキャッシングし得る。他の実施形態において、パケット処理タイマ２４２に応答するキャッシュマネージャ２３２は、また、オブジェクトをキャッシングする非常に短時間の期間内でオブジェクトを無効化する無効化コマンドを受け取り得る。
【００８６】
図３Ａに描かれた方法３００は、高速層２−７統合パケットエンジンまたはパケット処理エンジン２４０によってネットワークパケットを処理するための処理中のまたは時間間隔に関連した動作を実行するために、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４、および／またはマルチプロトコル圧縮エンジン２３８にリクエストするための本発明の技術の一実施形態を示す。簡単に概観すると、方法３００のステップ３１０において、デバイス１０４はネットワークパケットを受信するか、またはネットワークパケットを送信するようにリクエストされる。ステップ３１５において、デバイス１０４は、パケット処理タイマ２４２に応答してネットワークパケットを処理することをパケット処理エンジン２４０にリクエストする。パケット処理動作の一部としてまたは関連して、ステップ３２０において、パケット処理エンジン２４０は、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４、および／またはマルチプロトコル圧縮エンジン２３８にキャッシングされたオブジェクトに対する動作を実行することをリクエストする。ステップ３２５において、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４および／またはマルチプロトコル圧縮エンジン２３８は、本明細書に記述された本発明の技術の任意の１つまたは組合せを含み得るリクエストされた動作を実行する。一実施形態において、キャッシュマネージャ２３２は、キャッシングされたオブジェクトの無効化を決定し、キャッシングされたオブジェクトを無効としてマークする。一部の実施形態において、キャッシュマネージャ２３２は、パケット処理エンジン２４０によるリクエストに応答して無効オブジェクトをフラッシュする。キャッシュマネージャ２３２は、パケット処理タイマ２４２に応答してこれらの動作を実行するので、パケット処理タイマ２４２によって提供される１０ｍｓなどの期間のオーダーの有効時間を有するオブジェクトに関して、オブジェクトの無効化は、ミリ秒のオーダーの期間内に発生し得る。
【００８７】
本発明の方法３００のさらなる詳細において、ステップ３１０において、アプライアンス１０４は、１つ以上のネットワークパケットを受信し、および／または１つ以上のネットワークパケットを送信する。一部の実施形態において、アプライアンス１０４は、ネットワーク１０８またはネットワーク１１０を介して１つ以上のネットワークパケットを送信することをリクエストする。別の実施形態において、アプライアンス１０４は、１つのポート２６６においてネットワークパケットを受信し、同じポート２６６または異なるポート２６６’においてネットワークパケットを送信する。一部の実施形態において、アプライアンス１０４のパケットエンジン２４０は、１つ以上のネットワークパケットを送信、または送信のリクエストをする。一実施形態において、アプライアンス１０４は、第１のネットワーク１０８において、受信または送信する一方、別の実施形態において、アプライアンス１０４は、第２のネットワーク１１０においてパケットを受信または送信する。他の実施形態において、アプライアンス１０４は、同じネットワークにおいてパケットを送受信する。一部の実施形態において、アプライアンス１０４は、ネットワークパケットを１つ以上のクライアント１０２ａ〜１０２ｎに受信および／または送信する。他の実施形態において、アプライアンス１０４は、ネットワークパケットを１つ以上のサーバ１０６ａ〜１０６ｎに受信および／または送信する。
【００８８】
ステップ３１５において、デバイス１０４は、デバイス１０４のネットワークポート２６６におけるネットワークパケットの受信か、デバイス１０４からネットワークパケットを送信するリクエストか、または１つ以上のネットワークパケットの受信および／または送信の任意の組合せの時に、パケット処理エンジン２４０のパケット処理動作をリクエストするかまたはトリガし得る。一部の実施形態において、パケット処理エンジン２４０のパケット処理動作は、パケット処理タイマ２４２によって提供される信号によってトリガされる。一実施形態において、パケット処理タイマ２４２は、１つ以上のネットワークパケットの受信および／または送信に関連する割込み駆動または事象駆動のタイマ機能を提供し得る。一部の実施形態において、パケット処理タイマ２４２は、デバイス１０４を介するネットワークパケットの受信および／または送信の率によって、または各パケットまたはパケットのバッチが処理される速さによって駆動される。そのように、パケット処理タイマ２４２は、各セットの１つ以上のパケット処理動作の後、トリガまたはリセットされ得る。別の実施形態において、パケット処理タイマ２４２は、等時間間隔または変動時間間隔のいずれかの時間間隔を提供し、パケット処理エンジンが受信されたパケットを処理または実行依頼されたパケットを送信するなどの機能または動作を実行するように、トリガするか、ウェイクアップするかまたは信号を送る。図２のデバイス１０４に関連して上で検討されたように、パケット処理タイマ２４２は、１０ｍｓ以下の間隔で時間間隔を生じたりまたはパケット処理動作をトリガするなど、ミリ秒のオーダーで動作し得る。本発明のパケット処理タイマの細分タイマ機能は、種々の方法で提供され、パケット処理エンジン２４０のパケット処理動作の動作において用いられる。
【００８９】
本発明の方法３００のステップ３２０において、パケット処理エンジン２４０は、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４、および／またはマルチプロトコル圧縮エンジン２３８のうちの１つ以上に対して動作を実行するようにリクエストする。一実施形態において、パケット処理エンジン２４０またはパケット処理タイマ２４２は、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４および／またはマルチプロトコル圧縮エンジン２３８のうちの１つ以上に信号を生成する。パケット処理エンジン２４０は、ネットワークパケットまたは１つ以上のパケットのパケット処理動作の前、その間、またはその後の任意の時点で動作をリクエストし得るかまたは信号を送り得る。一実施形態において、パケット処理エンジン２４０は、パケット処理タイマ２４２のトリガの時またはパケット処理タイマ２４２によって提供される時間間隔の満了の時、およびネットワークパケットに対するパケット処理動作の実行前にリクエストをする。別の実施形態において、パケット処理エンジン２４０は、１つ以上のパケット処理動作の実行の進行の間に、リクエストを行なう。パケット処理エンジン２４０は、例えば、機能コール内などでの動作の実行時に、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４、および／またはマルチプロトコル圧縮エンジン２３８のうちの１つにアプリケーションプログラミングインタフェース（ＡＰＩ）コールを行ない得る。他の実施形態において、パケット処理エンジンは、ネットワークパケット処理動作の完了時にリクエストを行う。
【００９０】
ステップ３２５において、リクエストされた動作は、キャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４、および／またはマルチプロトコル圧縮エンジン２３８のうちの１つによって実行される。一部の実施形態において、カーネル２０４を介して提供される任意の機能性または動作は、カーネルアプリケーションプログラミングインタフェース（ＡＰＩ）を介するなどで実行をリクエストされる。そのように、デバイス１０４の任意の機能は、パケット処理タイマ２３２を介してパケット処理のタイミングまたはタイミングの間隔に関連して実行され得る。一部の実施形態において、リクエストされた動作は、パケット処理エンジン２４０のパケット処理動作と同期してかつそれに関連して実行される。例えば、パケット処理動作は、リクエストされた動作の完了まで待ち、応答まで継続する。他の実施形態において、リクエストされた動作は、パケット処理動作と非同期に実行される。例えば、パケット処理エンジン２４０は、動作を実行するようにリクエストを送るが、動作からの応答を受け取ることブロックしたり、待ったりしない。図３Ｂに描かれた本発明の方法３５０に関連して、さらに詳細に検討されるように、パケット処理エンジン２４０は、キャッシュマネージャ２３２に対して、オブジェクトの有効時間または無効をチェックし、オブジェクトを無効としてマークし、または無効または満了したオブジェクトをフラッシュするなどの任意のキャッシュ管理機能を実行するようにリクエストする。
【００９１】
一部の実施形態において、パケット処理エンジン２４０は、ステップ３２０において、第１のリクエストをキャッシュマネージャ２３２に第２のリクエストを暗号化エンジン２３４に送るなど、複数のリクエストを送る。他の実施形態において、パケット処理エンジン２４０は、ステップ３２０において、カーネル２３０を介するなどで、デバイス１０４によって分散すべき複数のリクエストを含む単一のリクエストをデバイス１０４の意図するコンポーネントへ送る。一実施形態において、リクエストは、互いに続いて、通信される。別の実施形態において、リクエストは、前のリクエストの状態、結果、成功または完了に依存し得る。例えば、ポリシーエンジン２３６に対する第１のリクエストは、別のデバイスまたはネットワークパケットに関連したユーザからのネットワークパケットを処理するポリシーを決定するために使用され得る。ポリシーエンジン２３６のポリシーに基づき、キャッシュに対する第２のリクエストが、第１のリクエストの結果に従って為され得るかまたは為されないことがあり得る。パケット処理エンジン２４０を有するデバイス１０４のカーネルスペース２０４に統合されたキャッシュマネージャ２３２、ポリシーエンジン２３６、暗号化エンジン２３４、および／または、マルチプロトコル圧縮エンジン２３８に関し、本明細書に記述されるように、パケット処理動作によってトリガされ、パケット処理動作に統合され得るデバイス１０４の種々の動作がある。
【００９２】
（２．無効の細かさ）
別の局面において、本発明は、キャッシュによって記憶されるオブジェクトの満了時間をパケット処理タイマによって提供される細かな時間間隔などの細い時間間隔に構成する能力に関し、該能力を含む。この特性は、「無効の細かさ」と呼ばれる。そのように、一実施形態において、本発明は、非常に小さい時間間隔に落とした有効時間を有するオブジェクトをキャッシングし得る。他の実施形態において、パケット処理タイマに応答するキャッシュマネージャは、また、オブジェクトをキャッシングする非常に短い期間内にオブジェクトを無効にするための無効コマンドを受信し得る。有効時間についてこの細かい細かさを提供することによって、本発明のキャッシュは、あるときは、１秒間に何回も変化するほど頻繁にオブジェクトをキャッシングし、サービスし得る。１つの技術は、ミリ秒のオーダーの時間増分で動作可能であり、無効化または細かさが１０ｍｓ以下にすることを可能にする本発明のデバイスによって使用されるパケット処理タイマを活用することである。本発明と対照的に、従来のキャッシュは１秒未満を設定したり、有しない。
【００９３】
ここで図３Ｂを参照すると、本発明の方法３５０の実施形態は、パケット処理タイマ２４２および／またはパケット処理エンジン２４０に応答して、キャッシングされたオブジェクトを無効または満了するように描かれている。そのように、一部の実施形態において、キャッシングされたオブジェクトは、１０ｍｓ以下などのミリ秒のオーダーで無効または満了され得る。概観すると、方法３５０のステップ３５５において、キャッシュマネージャ２３２は、信号を受信するかまたはパケット処理タイマ２４２に応答してパケット処理エンジンを介して動作を実行するようにリクエストする。ステップ３６０において、キャッシュマネージャ２３２は、動的に生成されたオブジェクトなどのキャッシングされたオブジェクトが無効かまたは満了したかどうかを判定する。ステップ３６５において、オブジェクトが無効である場合、キャッシュマネージャ２３２は、オブジェックトを無効とマークし、ステップ３７０において、無効オブジェクトをキャッシュマネージャ２３２からフラッシュする。
【００９４】
一部の実施形態におけるステップ３５５のさらなる詳細において、キャッシュマネージャ２３２は、ネットワークパケット処理中の任意の時点で、キャッシュ関係動作を実行するように信号を送られまたはリクエストされ得る。一実施形態におけるステップ３５５において、キャッシュマネージャ２３２は、受信されるかまたはデバイス１０４によって送信されるべきネットワークパケットの処理の前に、動作リクエストを受信する。別の実施形態において、キャッシュマネージャ２３２は、ネットワークパケットの処理の完了時に動作リクエストを受信する。例えば、パケット処理エンジン２４０は、ネットワークパケットの処理を完了し、タイマ２４２の次の時間間隔を待つ前か、または次のパケットを処理する前かのいずれかに、パケット処理エンジン２４０は、キャッシュに対して動作を実行するようにリクエストする。他の実施形態において、パケット処理エンジンは、パケット処理の動作中に、動作リクエストをキャッシュマネージャ２３２に通信する。別の実施形態において、キャッシュマネージャ２３２は、キャッシュマネージャ２３２に対して動作を実行するようにトリガするためのパケット処理エンジン２４０またはパケット処理タイマ２４２などから信号を受信する。一部の実施形態において、信号は、キャッシングされたオブジェクトを無効にすることまたはキャッシングされたオブジェクトを有効時間期限切れにすることを指示する。
【００９５】
一部の実施形態において、キャッシュマネージャ２３２は、サーバ１０６ａ〜１０６ｎによって通信されたオブジェクト、およびパケット処理エンジン２４０によって処理されたオブジェクトを無効にするリクエストなどの、キャッシュマネージャ２３２の外部のエンティティからキャッシュ動作を実行するリクエストを受信し得る。一実施形態において、キャッシュマネージャ２３２は、１０ｍｓ以内、一方、別の実施形態において、５ｍｓ、２ｍｓまたは１ｍｓのオブジェクトのキャッシングの無効リクエストを受信し得る。他の実施形態において、キャッシュマネージャ２３２は、オブジェクトを無効にさせるタイマの満了または任意のキャッシュコマンドの処理時などの、キャッシュマネージャ２３２の動作または機能性に応答してキャッシュ動作を実行し得る。別の実施形態において、キャッシュマネージャ２３２は、キャッシュ動作をトリガするためにデバイス１０４のパケット処理タイマ２４２を使用する。例えば、タイマ２４２は、タイマ２４２によって設定され得る任意の時間間隔で、キャッシングされたオブジェクトの無効または有効時間をチェックするようにキャッシュをトリガしまたはキャッシュに信号を送る。一実施形態において、タイマ２４２は、設定される１０ｍｓ以内に、キャッシュをトリガしまたはキャッシュに信号を送るように設定され得、または別の実施形態において、５ｍｓ、２ｍｓまたは１ｍｓもの短時間に設定される。一部の実施形態において、発信サーバ１０６ａ〜１０６ｎは、オブジェクトの有効時間を設定し得る。他の実施形態において、アプライアンス１０４またはクライアント１０２ａ〜１０２ｎは、オブジェクトの有効時間を設定し得る。
【００９６】
ステップ３６０において、キャッシュマネージャ２３２は、キャッシュに記憶されたオブジェクトの無効または満了を決定する。一部の実施形態において、キャッシュにあるオブジェクトは、タイマの満了に基づき無効にされる。一実施形態において、キャッシュマネージャ２３２は、タイマの満了に基づき、オブジェクトに対する無効コマンドを発行し得る。別の実施形態において、キャッシュに記憶されたオブジェクトは、パケット処理タイマ２４２によって設定されるタイマなどのタイマの満了に応答するキャッシュマネージャ２３２によって自動的に無効にされる。一部の実施形態において、パケット処理タイマ２４２に応答して、キャッシュマネージャ２３２は、キャッシングされたオブジェクトの任意のタイマの満了をチェックする。一実施形態において、キャッシュマネージャ２３２は、オブジェクトタイマが満了したことを決定する一方、別の実施形態において、キャッシュマネージャ２３２は、オブジェクトタイマは終了していないことを決定する。さらなる実施形態において、第２のトリガまたはパケット処理タイマ２４２の第２のタイマ間隔に応答するキャッシュマネージャ２３２は、以前にチェックしたオブジェクトタイマが終了した場合に第２のタイマをチェックする。
【００９７】
一部の実施形態において、キャッシュマネージャ２３２は、キャッシュにおいて無効にすべきオブジェクトを識別するために、無効コマンドまたはリクエストを分析、解釈、アクセス、読取り、さもなければ処理する。一実施形態において、キャッシュマネージャ２３２の外部のエンティティは、オブジェクトを無効にするために無効コマンドをキャッシュマネージャ２３２に発行する。別の実施形態において、外部エンティティは、パケット処理タイマ２４２に応答して無効コマンドを発行し得る。オブジェクトは有効でありおよび／または無効にされていない場合、キャッシュマネージャ２３２は、リクエストに応答してオブジェクトを無効にする。一部の実施形態において、キャッシュマネージャ２３２によって処理される無効リクエストは、リクエストを処理するパケット処理エンジン２４０のパケット処理動作に応答し、パケット処理エンジンは、また、パケット処理タイマ２４２に応答し得る。
【００９８】
ステップ３６５において、キャッシュマネージャ２３２は、オブジェクトを無効としてマークする。キャッシュマネージャ２３２は、任意の適切なまたは所望の方法で、各オブジェクトを無効にマークし得る。一実施形態において、オブジェクトは、記憶されたオブジェクトのフラグ、属性、または特性を設定することによって無効としてマークされる。例えば、フラグは、オブジェクトが無効であるとキャッシュマネージャ２３２に対して識別する任意の値に設定され得る。別の実施形態において、オブジェクトは、オブジェクトを無効のオブジェクトを記憶するためのキャッシュの領域または部分に移動させることによって無効としてマークされ得る。他の実施形態において、キャッシュマネージャ２３２は、データベースまたはリンクされたリストまたは任意のタイプおよび形式のデータ構造によって、記憶されているオブジェックトの無効および／または有効の状態を識別または追跡し得る。一部の実施形態において、キャッシュマネージャ２３２は、キャッシュに記憶されている１つ以上の有効または無効を識別または追跡するために、１つ以上のオブジェクトを使用する。別の実施形態において、オブジェクトは、例えば、オブジェクトが使用されないようにオブジェクトの部分を削除または除去することによって、またはオブジェクトの名前を変更または壊すことによって、記憶されたオブジェクトを変化、修正または変更することによって無効としてマークされる。
【００９９】
一部の実施形態におけるステップ３７０において、キャッシュマネージャ２３２は、無効としてマークされたそれらのオブジェクトをキャッシュからフラッシュする。別の実施形態において、キャッシュマネージャ２３２は、例えば、クライアント１０２ａ〜１０２ｎによるオブジェックトに対するリクエストがあるとき、無効オブジェクトをキャッシュからフラッシュする。一部の実施形態において、キャッシュマネージャ２３２は、オブジェクトの無効化または満了後に受信されたオブジェクトの更新されたコピーまたはバージョンを用いて、無効オブジェクトに上書きする。別の実施形態において、キャッシュマネージャ２３２は、別のオブジェクトをキャッシュメモリの同じ部分に記憶することによって、無効オブジェクトによって占有されたキャッシュメモリを再使用する。さらに別の実施形態において、キャッシュマネージャ２３２は、無効としてマークされたオブジェクトをフラッシュしないで、メモリまたはキャッシュのストレージに記憶されているオブジェクトを保持する。
【０１００】
方法３５０は、無効の細かさを提供するために、パケット処理タイマに応答し、および／またはパケット処理動作に関連してキャッシングされたオブジェクトの無効化およびフラッシングを記述するが、キャッシュの任意の動作およびキャッシュ管理の任意の技術ならびに本明細書に記述されるデバイス１０４の任意のその他の動作は、パケット処理タイマによって提供される細かい時間間隔で実行され得る。一部の実施形態において、キャッシングされたオブジェクトの無効または満了は、１００ｍｓもの短い時間間隔で発生し得る、別の実施形態において、５０ｍｓもの短い時間間隔である。一部の実施形態において、キャシングされたオブジェクトの無効化または満了は２５ｍｓの短い時間間隔で発生し得、他の実施形態において、１０ｍｓもの短い時間間隔で発生し得る。他の実施形態において、キャッシングされたオブジェクトの無効化または満了は、５ｍｓもの短い時間間隔で発生し得るが、なおも他の実施形態において、３、２、１ｍｓもの短い時間間隔である。
【０１０１】
上の図３Ａおよび３Ｂに関連して方法３００および３５０において記述されているように、非常に小さい時間増加の経過後、オブジェクトを無効にする能力を組み込むことによって、動的に生成されたコンテントの改良されたキャッシングは使用可能になる。一部の動的コンテントは、実際、非常に短い期間キャッシュによって記憶およびサービスされ易い。しかしながらそのようなコンテントをうまくキャッシュするために、本発明の実施形態に従うアプローチは、オブジェクトが無効にされキャッシュメモリからフラッシュされる前に、非常に短い期間にオブジェクトをキャッシングすること提供する。例えば、ある動的に生成されたオブジェクトは、１秒もの長い時間でキャッシュされ得るが、それより長いものは、常に変化しているコンテントはたいてい受け入れすることができない。実施形態において、本発明のアプローチは、ほんの数分の１秒後に、キャッシングされたコンテントを無効または満了することを含む。例として、アプリケーション１００が動的な応答を生成するために何ミリ秒かを要する場合、キャッシュは、データの新鮮さ失うことなく、１００ミリ秒の期間以下の処理継続時間で応答を記憶し、サービスし得る。その１００ミリ秒の期間中に生成される新しいオブジェクトはない。なぜなら新しいオブジェクトを生成するに要する時間より短いからである。アプライアンス１０４は、従って、その期間中、前のオブジェクトにサービスするために設置され得る。非常に小さい時間の増加で無効にするアプライアンス１０４の能力は、データベーストランザクション分離レベルがリピータブルリード（Ｒｅｐｅａｔａｂｌｅ  Ｒｅａｄ）またはシリアライズドリード（Ｓｅｒｉａｌｉｚｅｄ  Ｒｅａｄ）を許容するように設定されているアプリケーション環境にとってしばしば非常に有用である。
【０１０２】
（３．無効コマンド）
従来のキャッシング技術は、コンテントのための所定の有効時間に基づき記憶されたコンテントを無効にし、有効時間は、一般的にアドミニストレータによって構成されるかまたはオブジェクトにサービスするサーバから受信される。以下に記述されるのは、動的に生成されたコンテントをより効率的にキャッシュするために、コンテントを無効にするための本発明の別の技術である。本発明の技術は、キャッシュに以前に記憶された１つ以上のオブジェクトをリアルタイムに無効と識別する無効コマンドをアプライアンス１０４において受信する能力を含む。例えば、無効コマンドは、クライアントに送信されたネットワークパケットまたはサーバによってアプライアンスに行なわれるアプリケーションプログラミングインタフェース（ＡＰＩ）コールを介して通信され得る。これは、オブジェクトがサービスされた時点にサーバがオブジェクトヘッダに含むキャッシュ有効時間を単純に設定する従来のアプローチと異なる。
【０１０３】
本発明の技術は、図４Ａおよび図４Ｂにより具体的に例示される。図４Ａは、コンピュータメモリキャッシュなどのキャッシュを維持するための方法を例示するフローチャートである。簡単な概観しステップ４１０に従って、発信サーバ１０６ａ〜１０６ｎから既にサービスされた動的に生成されたオブジェクトは、キャッシュに記憶される。例えば、動的に生成されたオブジェクトは、キャッシング可能として識別されないか、または何らのキャッシュまたはキャッシュ制御情報を含まないことがあり得る。ステップ４２０において、無効コマンドはキャッシュまたはキャッシュマネージャ２３２において受信される。無効コマンドは、１つ以上の以前にサービスされたオブジェクトを無効として識別する。ステップ４３０において、無効コマンドに応答してキャッシュまたはキャッシュマネージャ２３２は、識別されたオブジェクトを無効としてマークする。
【０１０４】
ステップ４１０におけるさらなる詳細において、キャッシュマネージャ２３２は、任意のソースから受信され、得られ、または通信される動的に生成されたオブジェクトをキャッシュメモリエレメントに記憶する。一部の実施形態において、動的に生成されたオブジェクトは、サーバ１０６ａ〜１０６ｎから生成され、サービスされ得る。他の実施形態において、動的に生成されたオブジェクトは、クライアント１０２ａ〜１０２ｎによって生成され、通信され得る。一部の実施形態において、アプライアンス１０４の別の部分、コンポーネントまたは処理は、オブジェクトを生成し、オブジェクトをキャッシュに記憶する。さらなる実施形態において、動的に生成されたオブジェクトは、別のアプライアンス１０４またはネットワーク上の別のコンピューティングデバイスによって生成され、アプライアンス１０４に送信または通信され得る。一部の実施形態において、動的に生成されたオブジェクトは、キャッシング可能として識別されないか、または非キャッシング可能として識別される。他の実施形態において、動的に生成されたオブジェクトは、キャッシング可能として識別されるか、またはキャッシュ制御下にある。
【０１０５】
ステップ４２０において、キャッシュマネージャ２３２は、キャッシュに記憶されている動的に生成されたオブジェクトなどの無効にすべきオブジェクトを識別する無効コマンドを受け取る。一実施形態において、無効コマンドは、オブジェクトが無効またはそうでなければ古い場合があることをキャッシュに対して指示する任意のタイプの指示文または命令を含み得る。一部の実施形態において、無効コマンドは、オブジェクトを識別し、またオブジェクトが無効となる時間およびオブジェクトのどの部分が無効であり得るかを識別し得る。一実施形態において、キャッシュマネージャ２３２は、発信サーバ１０６ａ〜１０６ｎによって離れてコールされ得るアプリケーションプログラミングインタフェース（ＡＰＩ）を提供する。一部の実施形態において、キャッシュマネージャ２３２は、１つ以上のネットワークパケットを介してコマンドを受信しコマンドに対して回答する任意のタイプおよび形式のプロトコルを提供し得る。一実施形態において、キャッシュマネージャ２３２またはデバイス１０４は、無効コマンドを受信し処理するための拡張可能なマーク付け言語（ＸＭＬ）ＡＰＩインタフェースを提供する。例えば、キャッシュマネージャ２３２は、ウェブサービスインタフェースを提供し得る。一部の実施形態において、キャッシュマネージャ２３２は、肯定応答、状態またはその他の発信サーバ１０６ａ〜１０６ｎに対する応答を送信することよって無効コマンドに回答する。他の実施形態において、キャッシュマネージャ２３２は、無効コマンドに回答しない。一実施形態において、発信サーバ１０６ａ〜１０６ｎにおいて実行するアプリケーションが、オブジェクトの新しいまたは更新されたバージョンを生成することによってなど、記憶されたオブジェクトを古くさせる動作を実行した場合、オブジェクトは無効としてマークされる。このことは、例えば、ニュース編集者が急速に展開するニュースに変更し従ってニュースの最も新しいバージョンがクライアントに提供されることを確実にしたい場合、起こり得る。
【０１０６】
無効コマンドは、別のサーバ１０６ａ〜１０６ｎまたは別のアプライアンス１０４により、オブジェクトを生成したアプリケーションによって発信サーバから発行され得る。一実施形態において、発信サーバ１０６ａ〜１０６ｎは、発信サーバ１０６ａ〜１０６ｎにある動的に生成されたオブジェクトに対する変化に自動的に応答して、無効コマンドをキャッシュ２３２に発行し、または通信する。無効コマンドは、サーバ１０６ａ〜１０６ｎおよびアプライアンス１０４の外側または外部の管理制御によっても生成され得る。例えば、管理制御は、管理者コンソールなどのネットワーク上で実行し、アプライアンス１０４と通信する任意のタイプおよび形式のプログラムまたはアプリケーションであり得る。さらに、クライアント１０２ａ〜１０２ｎは、無効コマンドをアプライアンス１０４またはキャッシュマネージャ２３２に発行、または、通信し得る。例えば、クライアントが、発信サーバにおいてリクエストされたオブジェクトに対して変化を生じさせるであろうとクライアント１０２ａ〜１０２ｎが認識する動作をとった場合、クライアントは、無効コマンドを通信し得る。キャッシュに記憶された任意のオブジェクトは、キャッシュにおいてローカルに実行されるかまたはＸＭＬ  ＡＰＩインフラストラクチャを用いてリモートで呼び出されるユーザコマンドのキャッシュへの送信によって無効にされ得る。
【０１０７】
ステップ４３０に従って、キャッシュに記憶されたオブジェクト、例えば、無効として識別されていて以前にサービスされた動的に生成されたオブジェクトは、無効コマンドに応答して無効としてマークされる。無効オブジェクトは、キャッシュから、リクエストするクライアントに供給されないで、代わりに、発信サーバから直接にサービスされる。キャッシュマネージャ２３２は、任意の適切なまたは所望の方法で各オブジェクトを無効とマークし得る。一実施形態において、オブジェクトは、記憶されたオブジェクトのフラグ、属性、または特性を設定することによって無効としてマークされる。例えば、フラグは、キャッシュマネージャ２３２に対してオブジェクトは無効であることを識別する任意の値に設定され得る。別の実施形態において、オブジェクトは、無効オブジェクトを記憶するためのキャッシュの領域または部分にオブジェクトを移動させることによって、無効としてマークされ得る。別の実施形態において、キャッシュマネージャ２３２は、データベースまたはリンクされたリストまたはデータ構造の任意のタイプおよび形式によって、記憶されたオブジェクトの無効および／または有効の状態を識別または追跡し得る。一部の実施形態において、キャッシュマネージャ２３２は、キャッシュに記憶された１つ以上のオブジェクトの有効または無効を識別または追跡するために、１つ以上のオブジェクトを用いる。別の実施形態において、記憶されたオブジェクトを変化、修正または変更することによって、例えば、オブジェクトが使用され得ないようにオブジェクトの一部を削除または除去することによって、またはオブジェクトの名前を変化させまたは壊すことによって、オブジェクトは無効としてマークされる。
【０１０８】
一部の実施形態において、アプライアンス１０４は、その後、無効としてマークされたそれらのオブジェクトをキャッシュからフラッシュする。別の実施形態において、アプライアンス１０４は、例えば、クライアント１０２ａ〜１０２ｎによってオブジェクトに対するリクエストがあると、無効オブジェクトをキャッシュからフラッシュする。一部の実施形態において、アプライアンス１０４は、オブジェクトの更新されたコピーまたはバージョンで無効オブジェクトに重ね書きする。別の実施形態において、アプライアンス１０４は、別の動的に生成されたオブジェクトをキャッシュメモリの同じ部分に記憶することによって、無効オブジェクトによって占有されたキャッシュメモリを再使用する。
【０１０９】
本発明のキャッシュマネージャ２３２のコマンド無効ＡＰＩを用いて、アプライアンス１０４と通信する任意のコンピューティングデバイスまたはユーザは、キャッシュに記憶された動的に生成されたオブジェクトなどのオブジェクトを無効にするようにリクエストし得る。そのように、キャッシュに記憶されたオブジェクトの無効化は、所定の構成満了または無効期間を使用する代わりに、リアルタイムに制御され得る。従って、これらの技術を用いて、キャッシュにあるオブジェクトの寿命は、データベースまたは発信アプリケーションサーバなどの外部アプリケーション処理ノードから制御され得る。例えば、アプライアンス１０４は、データベースに対する変化が、特定のオブジェクトをフラッシュするために、データベース（またはアプリケーション）からアプライアンス１０４へ無効コマンドを自動的にトリガするように、データベースと共に作動するように構成され得る。
【０１１０】
（４．無効コマンドを用いたグループの無効化）
本発明のさらなる実施形態において、アプライアンス１０４は、キャッシュによって記憶されたオブジェクトのグループを識別し同時に無効にする。従来のキャッシュメモリに記憶されたオブジェクトは、オブジェクトが古いかどうかを判定するときに、キャッシュによって各々は、個々におよび別々に取り扱われる。各オブジェクトが特定の有効時間（一般的にサーバによって設定され、キャッシュによってテーブルに記憶されているように）に到達すると、その項目は、キャッシュメモリからフラッシュされる。しかしながらこの従来の手法は、非効率的で、動的に生成されたコンテントをキャッシュすることを試みるときに生じる課題をうまく処理するに結局は不十分である。
【０１１１】
図４Ｂは、コンピュータメモリキャッシュなどのキャッシュを維持するための本発明の方法の別の実施形態を例示する。該実施形態において、アプライアンス１０４は、発信サーバ１０６ａ〜１０６ｎから以前にサービスされた関係するオブジェクトのグループを作成、記憶および無効にする能力を有する。簡単に概観すると、ステップ４１０において、発信サーバ１０６ａ〜１０６ｎからサービスされた動的に生成されたオブジェクトなどのオブジェクトはキャッシュに記憶される。ステップ４１２において、キャッシュマネージャ２３２は、キャシュに記憶され以前にサービスされたオブジェックトのグループを形成する。一実施形態において、さらに詳細は以下に記述されるように、グループは、１つ以上のオブジェクト決定要素に対応付けられ、オブジェクト決定要素によって識別され得る。ステップ４１４において、キャッシュマネージャ２３２は、オブジェクトのグループの記録を維持する。ステップ４２２において、キャッシュマネージャ２３２は、オブジェクトのグループを無効にするための無効コマンドを受信する。ステップ４３２において、キャッシュマネージャ２３２は、無効コマンドに応答してオブジェクトのグループを無効としてマークする。
【０１１２】
ステップ４１０は、図４Ａの場合と同じで、発信サーバ１０６ａ〜１０６ｎから以前にサービスされた動的に生成されたオブジェックトなどのオブジェクトは、アプライアンス１０４のキャッシュに記憶される。一部の実施形態において、１つ以上のオブジェクトが、キャッシング可能として識別されないことがあり得、または、いかなるキャッシュまたはキャッシュ制御情報も有しないことがあり得る。例えば、サーバ１０６ａ〜１０６ｎは、動的に生成されたオブジェクトはキャッシュされないとみなし得る。
【０１１３】
ステップ４１２に従って、アプライアンス１０４は、発信サーバ１０６ａ〜１０６ｎから以前にサービスされたオブジェクトのセットからグループを形成し、キャッシュに記憶する。任意の適切なまたは所望のセットのオブジェクトは、互いに対応付けられグループを形成する。例えば、ウェブページをサービスするように生成され、またはサービスするように対応付けられた任意の動的に生成されたオブジェクトは、グループを生成し得る。一部の実施形態において、オブジェクトは、複数のグループに対応付けられ得る。他の実施形態において、オブジェクトの１つのグループは、オブジェクトの別のグループの部分集合を形成し得る。一部の実施形態において、形成されたグループのオブジェクトは、同じサーバ１０６ａ〜１０６ｎからサービスされたオブジェクトを有する一方、他の実施形態において、形成されたグループのオブジェクトは、異なるサーバ１０６ａ〜１０６ｎからサービスされたオブジェクトを有する。さらなる実施形態において、形成されたグループのオブジェクトは、クライアント１０２ａ〜１０２ｎからのオブジェクト、サーバ１０６ａ〜１０６ｎからのオブジェクト、またはクライアント１０２ａ〜１０２ｎおよびサーバ１０６ａ〜１０６ｎの両方によって生成されるかまたはその両方からサービスされるオブジェクトを含み得る。一実施形態において、グループの１つのオブジェクトは静的である一方、グループの別のオブジェクトは動的に生成される。一部の場合において、グループの１つのオブジェクトは、キャッシング可能として識別されない一方、グループの別のオブジェクトは、キャッシング可能として識別される。他の場合において、グループのオブジェクトは、サーバ１０６ａ〜１０６ｎによって提供される機能性またはアプリケーションに従って論理的に関係付けられ得る。別の場合において、グループのオブジェクトは、同じクライアント１０２ａ〜１０２ｎまたは同じユーザに対応付けられるように関係付けられ得る。
【０１１４】
ステップ４１４において、オブジェクトのグループの記録が維持される。オブジェクトのグループを記録し、該記録を維持するため、またはさもなければオブジェクトを対応付けするための種々の技術は、本明細書に記述された本発明の動作を実施するときに用いられ得る。一実施形態において、記録は、例えば、ルックアップテーブルに直接維持され得る。別の実施形態において、記録は、ハッシュテーブルフォーマットで表され得る。一部の実施形態において、キャッシュマネージャ２３２は、オブジェクトの対応付けをデータベースに、もしくはデータ構造またはオブジェクトをメモリに維持する。さらなる実施形態において、グループにおける各オブジェクトのフラグ、特性または属性は、グループを識別する値に割り当てられるか設定され、該値は、該グループの名前または識別子に等しいか、識別するかまたは参照し、該識別子は、例えば、以下で詳述されるグループオブジェクト決定要素である。一部の実施形態において、オブジェクトのグループは、グループを保持するものとして識別されるキャッシュメモリの部分に、配置され、置かれまたは位置される。
【０１１５】
ステップ４２２において、無効コマンドは、アプライアンス１０４またはキャッシュマネージャ２３２において受信される。図４Ｂに記述される実施形態に従って、無効コマンドは、１つ以上のオブジェクトは無効であること、または古いことを識別する。一部の実施形態において、無効コマンドは、オブジェクトのグループの名前または識別子を参照し、識別し、または特定する。一実施形態において、無効コマンドは、グループにおけるすべてのオブジェクトを無効にするために単一の無効リクエストを含む。別の実施形態において、無効コマンドは、無効にするためにグループにおける１つのオブジェクトを識別する。他の実施形態において、無効コマンドは、グループにおける複数のオブジェクトを無効にするための複数の無効リクエストを含む。
【０１１６】
ステップ４３２に従って、無効コマンドが、グループの１つのオブジェクトを無効、グループにおける各オブジェクトを無効、またはグループを無効として、参照し、識別し、または特定する場合、以前にサービスされたオブジェクトのグループは、無効としてマークされる。一部の実施形態において、無効コマンドが、グループにおけるあるオブジェクトを無効として識別する場合、キャッシュマネージャ２３２は、そのオブジェクトを無効としてマークする。他の実施形態において、無効コマンドが、そのグループにおけるオブジェクトを無効として識別する場合、キャッシュマネージャ２３２は、オブジェクトのそのグループを無効、またはそのグループにおける各オブジェクトを無効としてマークする。さらなる実施形態において、１つ以上の無効コマンドによって複数のオブジェクトが無効として識別される場合のみ、キャッシュマネージャ２３２はオブジェクトのそのグループを無効とし得る。別の実施形態において、無効コマンドはグループの名前または識別子を指定し得、キャッシュマネージャ２３２は、グループを無効として、またはそのグループにおける各オブジェクトを無効としてマークする。
【０１１７】
一実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２は、キャッシュメモリから無効としてマークされているグループのオブジェクトをフラッシュする。一部の実施形態において、グループにおける各オブジェクトが無効としてマークされる場合のみ、グループにおけるオブジェクトはキャッシュマネージャからフラッシュされ得る。他の実施形態において、グループの１つのオブジェクトが無効としてマークされていると、グループ全体がフラッシュされる。別の実施形態において、無効としてマークされたオブジェクトのグループまたはグループにおける任意のオブジェクトは、オブジェクトのグループまたはグループにおける任意のオブジェクトに対するリクエストを受信するとクライアント１０２ａ〜１０２ｎによってフラッシュされ得る。他の実施形態において、無効としてマークされたオブジェクトのグループまたはグループにおける任意のオブジェクトは、グループにおいて１つ以上の新しいオブジェクトを提供するサーバ１０６ａ〜１０６ｎから応答を受信すると、フラッシュされ得る。
【０１１８】
上記実施形態の実施例は以下のとおりである。顧客資源管理（「ＣＲＭ」）アプリケーションは、資源管理のすべての局面を追跡し評価するために、多くの企業によって使用される。しばしば、ＣＲＭアプリケーションは、プライベートネットワークおよびインターネットを含むパブリックネットワークを介してインプリメントおよびアクセスされる。頻繁にアクセスされる大量のデータへのアクセスを提供するこれらのアプリケーションは、従って、そのようなアプリケーションによって生成されるデータをキャッシングすることから利益を得る。例えば、売上報告書は頻繁に生成され、リモート接続されたユーザにサービスされる。これらの売上報告書は、そのようなアプリケーションサーバおよび／またはそれらの基礎となるデータベースに計上される売上情報からデータを編集することを通して、関連するアプリケーションによって作成される。多くユーザは、同じ文書（すなわち、ある売上報告書）をリクエストするので、キャッシングなしでは、アプリケーションサーバは、リクエストごとにオブジェクトを再生成しなければならない。しかしながら、そのようなオブジェクトがキャッシュに記憶され得る場合、キャッシュはリクエストするクライアントのより近くに置かれるので、潜在的に貴重な帯域幅を含み、アプリケーションおよびデータベース処理は節約される。
【０１１９】
新しい売上が発信サーバにおいて実行するアプリケーション（またはその基礎となるデータベース）にそのつど計上され、売上報告書の情報が更新される必要があるため、そのようなオブジェクトをキャッシングするための課題が発生する。その結果、これらのアプリケーションサーバをサポートする任意のキャッシュに記憶されているすべての売上報告書は、無効にされ、コンテントはキャッシュメモリからフラッシュされなければならない。しかしながら、従来のキャシングに対する手法は、基礎となるデータベースまたはアプリケーションに対する変化がいつ発生するかを正確に判定する方法を有しないので、動的コンテントの新鮮さを適切に評価し得ない。データベースまたはアプリケーションもしくは発信サーバにおいて変化が発生するたびに、キャッシュは、変更が行なわれたこと、おおよびそのような変更の結果、どのグループのオブジェクトが無効にされるべきかを識別できなければならない。上記のように、以前にサービスされたオブジェクトのグループにリンクされたオブジェクト決定要素を含む無効コマンドの生成は、この必要性を満たし得る。
【０１２０】
関係するオブジェクトの複数のグループは、単一の階層レベルで形成され得る。あるいは、オブジェクトのサブグループは、複数の階層レベルを作成するように形成され得る。実施形態において、オブジェクトのグループまたはサブグループは、ユーザによって事前設計され得る。別の実施形態において、ユーザは、アプライアンス１０４が関係するオブジェククトのグループを自動的に形成し、オブジェクトの決定要素を該オブジェクトのグループに対応付ける規則を設定し得る。
【０１２１】
（５．クライアントリクエストまたは応答におけるオブジェクト決定要素の識別）
本発明の実施形態は、また、オブジェクトのグルーピングを生成しパラメータ化された無効化をインプリメントすることによって、発信アプリケーションサーバ１０６ａ〜１０６ｎ（および／または基礎となるデータベース）における状態変化によって影響されるすべてのオブジェクトを識別し得る必要性に対処する。この実施形態において、任意のオブジェクトまたはオブジェクトの所定のグループのオブジェクトは、例えば、クライアントからの、オブジェクト決定要素を識別するためにキャッシュが分析するインタセプトされたＨＴＴＰリクエストによって、無効にされ得る。用語「オブジェクト決定要素」は、のセットのオブジェクトを一意にまたはそうでなく、参照、識別または特定する、任意の情報、データ、データ構造、パラメータ、値、データパターン、リクエスト、返答、もしくは１つのオブジェクトまたはコマンドをいう。一部の実施形態において、オブジェクト決定要素は、発信サーバにおいて、オブジェクトに対応付けられ得、もしくは通信がオブジェクトに対応付けられまたはオブジェクトを参照することを一意に識別するために使用され得る通信における、バイトまたは文字のパターンである。一実施形態において、オブジェクト決定要素は、発信サーバにおいて、キャッシュマネージャ２３２に記憶された、オブジェクト決定要素が対応付けられたあるグループの以前にサービスされたオブジェクトに対して変化が発生したかまたは発生するであろうかどうかを指示する。一部の実施形態において、あるグループのオブジェクトにおけるオブジェクトは、該オブジェクトが少なくとも１つのオブジェクト決定要素に対応付けられているということに関係付けられる。オブジェクト決定要素の特定の制限のない実施例および該実施例のさらなる例示は、より十分に以下に記述される。
【０１２２】
本発明の一部の実施形態において、オブジェクト決定要素は、クライアントリクエストまたは応答に含まれるかまたは埋め込まれた、ある定義済みパラメータまたはデータ構造である。他の実施形態において、クライアント１０２ａ〜１０２ｎ、サーバ１０６ａ〜１０６ｎまたはアプライアンス１０４は、定義済みストリングまたはオブジェクト決定要素を表す文字のセットなどの１つ以上のオブジェクト決定要素を通信に埋め込む。オブジェクト決定要素は、そのようなリクエストが、発信サーバ１０６ａ〜１０６ｎまたはそれにリンクしたデータベースに記憶されたオブジェクトの状態における変化を引き起こす影響を有するかどうか指示する。一実施形態において、オブジェクト決定要素がリクエストに存在することは、オブジェクトに対して変化が発生したかあるいは発生することを指示する。別の実施形態において、オブジェクト決定要素の構文、構造、パラメータ、または値は、オブジェクトに対して変化が発生したかあるいは発生することを指示する。ある実施形態において、キャッシュは、オブジェクトリクエストをクライアント１０２ａ〜１０２ｎから受信する。リクエストは、発信サーバまたはアプリケーションサーバの状態を変化させるとキャッシュが認識するあるパラメータまたは値（オブジェクト決定要素）を含み得、その結果、そのような発信サーバまたはアプリケーションサーバ１０６ａ〜１０６ｎによって以前に生成され、キャッシュマネージャ２３２によって記憶された、ある関係するオブジェクトを古くさせる。ユーザによって設定される無効ポリシーに従って、パラメータ（オブジェクト決定要素）は、キャッシュによって記憶されている１つ以上の以前にサービスされたオブジェクトまたはオブジェクトのグループの、発信サーバによる無効化を要求する。キャッシュは、この状態変化によって影響を与えられた関連するオブジェクト（すなわち、オブジェクト決定要素にリンクされたこれらのオブジェクトまたはオブジェクトのグループ）を識別し、オブジェクトの各々を無効としてマークし、および／またはそのようなオブジェクトをキャッシュメモリからフラッシュする方法によってこれらのオブジェクトを無効にするように構成される。
【０１２３】
上記技術は、図４Ｃに例示される。本明細書に記述される他の実施形態に関するように、ステップ４１０は、発信サーバから以前にサービスされた動的に生成されたオブジェクトなどのオブジェクトをキャッシュに記憶することを含む。オブジェクトは、発信サーバ１０６ａ〜１０６ｎにおいて実行するアプリケーションによって生成され得るか、または、例えば、発信サーバ１０６ａ〜１０６ｎによってアクセスされるデータベースから引き出される。一部の実施形態において、動的に生成されたオブジェクトは、キャッシング可能ではないと識別されるか、またはキャッシング可能として識別されない。
【０１２４】
ステップ４２１において、キャッシュは、クライアントからのリクエストまたはサーバからの応答などのクライアントとサーバとの間の通信をインタセプトし、または、受信する。一部の実施形態において、リクエストは、特定のオブジェクトに対してであり、該オブジェクトはキャッシュに既にサービスされ、キャッシュに記憶されている。別の実施形態において、通信は、リクエストされたオブジェクトを有するサーバからの応答を含む。一実施形態において、そのような受信またはインタセプトは、設定されたキャッシングプロトコルおよび通信規格に従って発生する。キャッシュマネージャ２３２またはアプライアンス１０４は、リクエスト、応答または通信を受信するものとして説明され得るが、キャッシュ２３２またはアプライアンス１０４は、そのようなリクエスト、応答または通信を受信する場合に、キャッシュに直接または明示的に通信されないとしても、任意の適切な手段および／または機構によって、リクエスト、応答または通信をインタセプトまたは獲得し得る。
【０１２５】
ステップ４２３において、オブジェクト決定要素は、インタセプトされた通信において識別される。キャッシュマネージャ２３２は、通信において１つ以上の決定要素を決定または識別するために、インタセプトされた通信を、抽出、インタセプト、分析、アクセス、読取り、またはさもなければ処理し得る。任意のパラメータ、値、構文、データ、構造または通信の１つ以上の文字のセットは、オブジェクト決定要素を識別するために使用され得る。一実施形態において、キャッシュマネージャ２３２は、クライアントがオブジェクトをリクエストする、クライアント１０２ａ〜１０２ｎからサーバ１０６ａ〜１０６ｎへのリクエストにおいてオブジェクトの名前または識別子を識別し得る。別の実施形態において、キャッシュマネージャ２３２は、キャッシュに記憶された第２のオブジェクトに対して発生または発生するであろう変化を指示するクライアント１０２ａ〜１０２ｎのリクエストまたはサーバ１０６ａ〜１０６ｎからの応答において、第１のオブジェクトの名前または識別子を識別し得る。他の実施形態において、キャッシュマネージャ２３２は、リクエストにおける文字の何らかのパターンが、キャッシュにあるオブジェクトまたはオブジェクトのグループに対応づけられた何らかのオブジェクト決定要素に一致するかどうかを決定する。一部の実施形態において、オブジェクト決定要素は、キャッシュに現在記憶されていないオブジェクトに対して決定され得る。他の実施形態において、オブジェクト決定要素は、現在無効としてマークされているオブジェクトに対して決定され得る。他の実施形態において、リクエストされたオブジェクトに対するオブジェクト決定要素は、キャッシュされたオブジェクトのオブジェクト決定要素に対応付けられるように決定される。さらに別の実施形態において、通信おけるオブジェクトに対する最初の参照、リクエスト、応答に基づき、キャッシュマネージャ２３２は、識別されたオブジェクト決定要素をそのオブジェクトに対するオブジェクト決定要素として設定する。
【０１２６】
オブジェクト決定要素を識別するために、クライアントリクエストまたはサーバ応答などの通信を受信し、分析することによって、キャッシュマネージャ２３２またはアプライアンス１０４は、識別されたオブジェクト決定要素に対応付けられているキャッシュされたオブジェクトを無効としてマークするかどうかを効果的に決定し得る。従って、ステップ４２５に従って、オブジェクト決定要素がキャッシュされたオブジェクトに対する変化を指示するかどうかに関して決定がなされる。一部の実施形態において、識別されたオブジェクト決定要素は、オブジェクトを変更、修正または生成しない通信の一部であり得る。他の実施形態において、識別されたオブジェクト決定要素は、オブジェクト決定要素に対応付けられたオブジェクトに対して変化が発生したかまたは発生するであろうことを指示する通信の一部である。例えば、通信は、動的に生成されたオブジェクトに対するゲットリクエスト（ｇｅｔ  ｒｅｑｕｅｓｔ）または１つ以上の動的に生成されたオブジェクトに対して使用されるデータを変更するサブミットリクエスト（ｓｕｂｍｉｔ  ｒｅｑｕｅｓｔ）であり得る。一部の実施形態において、オブジェクト決定要素が通信に存在することは、１つ以上のオブジェクトに対して変化が発生したかまたは発生するであろうことを指示する。別の実施形態において、オブジェクト決定要素と共に、通信おけるコマンド、指示文または命令は、１つ以上のオブジェクトにおいて変化が発生または発生するであろうことを指示する。さらなる実施形態において、コマンド、指示文または命令のパラメータまたは変数の存在、値、または設定は、オブジェクト決定要素に対応付けられた１つ以上のオブジェクトに対して変化が発生したかまたは発生するであろうことを指示する。
【０１２７】
他の実施形態において、キャッシュマネージャ２３２は、オブジェクトにおいて変化が発生したかどうかを決定するために、インタセプトされた通信またはオブジェクト決定要素についてハッシュ関数、ハッシュアルゴリズム、またはハッシュ動作を実行する。一部の実施形態において、ハッシュ値は、オブジェクトに対して以前に記憶されたハッシュ値と比較され、異なる場合、キャッシュマネージャ２３２は、オブジェクトが変化したと認識する。さらに別の実施形態において、オブジェクトに対するハッシュ値は、通信またはオブジェクト決定要素に含まれ得る。一実施形態において、通信は、オブジェクトが、ブールフラグ（Ｂｏｏｌｅａｎ  ｆｌａｇ）を用いるなどパラメータの値または設定によって変化したことを指示する。他の実施形態において、以下により詳細に記述されるように、エンティティタグ制御および検証機構は、オブジェクトを識別し、オブジェクトが変化したかどうかを決定するために用いられ得る。
【０１２８】
変化が指示される場合、ステップ４３１において、オブジェクト決定要素に対応付けられるかまたはオブジェクト決定要素によって識別されるオブジェクトは、無効とマークされる。一部の実施形態において、インタセプトされた通信によってリクエストされたオブジェクトは、ステップ４３１に従って無効としてマークされ、ステップ４４０に従って発信サーバ１０６ａ〜１０６ｎから検索される。そうでなければ、他の実施形態において、リクエストされたオブジェクトは、ステップ４５０に従って、キャッシュから検索される。一実施形態において、無効としてマークされたあらゆるオブジェクトはキャッシュからフラッシュされる。
【０１２９】
（６．オブジェクト決定要素に基づくオブジェクトのグループの無効化）
本発明の上記の実施形態は、クライアントリクエストにおけるオブジェクト決定要素の識別に基づき、キャッシュマネージャ２３２における以前にサービスされたオブジェクトを無効にする場合を記述する。この一般的な概念は、別の実施形態において、１つ以上のオブジェクト決定要素が対応付けられたあるグループのオブジェクトを識別し、無効にするためにも用いられる。この実施形態は、図４Ｄに例示される。
【０１３０】
図４Ｄに記述された方法は、図４Ｃの方法と同じ方法で開始する。ステップ４１０は、発信サーバから以前にサービスされた動的に生成されたオブジェクトなどのオブジェクトをキャッシュに記憶することを含む。一部の実施形態において、１つ以上のオブジェクトは、キャッシング可能として識別されない。ステップ４１２に従い図４Ｂと同様に、以前にサービスされたオブジェクトはグループに形成される。一実施形態においておよび本発明のオブジェクト決定要素技術に従って、グループのオブジェクトは、少なくとも１つのオブジェクト決定要素に対応付けられ、または識別される。以下により十分に記述されるように、一部の実施形態において、オブジェクト決定要素とグループの対応付けは、ポリシーエンジン２３６によって定義され、制御されまたは使用されるポリシーなどの、ユーザキャッシングポリシーの性質および詳細に依る。他の実施形態において、グループの１つ以上のオブジェクト決定要素は、グループにおけるオブジェクトの１つ以上のオブジェクト決定要素を含む。別の実施形態において、グループのオブジェクト決定要素は、グループにおけるオブジェクトのオブジェクト決定要素の組合せを含む。
【０１３１】
ステップ４１４に従って、記録は、適用可能な場合、グループの対応付けられたオブジェクト決定要素と共に、グループで維持される。このステップは、図４Ｂに例示されるステップ４１４と同様である。一実施形態において、記録および／またはグループの任意のオブジェクト決定要素は、ルックアップテーブルに維持される。他の実施形態において、記録および／またはグループの任意のオブジェクト決定要素は、ハッシュテーブルフォーマットで維持される。ハッシュテーブルは、英数字シーケンスにおいて広いギャップを有し得る不連続キーを効率的に記憶するように設計され得る。別の実施形態において、索引付けシステムがハッシュテーブルのトップに構築され得る。一部の実施形態において、キャッシュマネージャ２３２は、グループとしてのオブジェクトと１つ以上のオブジェクト決定要素との対応付けをデータベースに、もしくはデータ構造またはオブジェクトをメモリに維持する。さらなる実施形態において、グループにおける各オブジェクトのフラグ、特性または属性は、グループ名またはグループの識別子、もしくはグループのオブジェクト決定要素に等しいか、識別するかまたは参照する値などのグループを識別する値に割り当てられるかまたは設定される。一部の実施形態において、オブジェクトのグループは、グループを保持するものとして識別されるキャッシュメモリの部分に、配置され、置かれまたは位置される。別の実施形態において、１つ以上のオブジェクト決定要素は、オブジェクトのグループに対応付けされて記憶される。
【０１３２】
ステップ４２１および４２３は、図４Ｃに例示されるステップ４２１および４２３と同様である。ステップ４２１に従って、キャッシュマネージャ２３２またはアプライアンス１０４は、以前にサービスされ、キャッシュに記憶されたオブジェクトに対するクライアントからのリクエストなどの、クライアント１０２ａ〜１０２ｎとサーバ１０６ａ〜１０６ｎとの間の通信をインタセプトし、またはそうでなければ、受信する。一実施形態において、キャッシュマネージャ２３２は、クライアント１０２ａ〜１０２ｎからサーバ１０６ａ〜１０６ｎへのリクエストをインタセプトする。一部の実施形態において、リクエストは、キャッシュに記憶されたオブジェクトに対してである。他の実施形態において、リクエストは、オブジェクトが動的に生成されるようにするなど、キャッシュに記憶されたオブジェクトに対して変化を引き起こすサーバ１０６ａ〜１０６ｎへの命令、コマンド、または指示文である。別の実施形態において、キャッシュマネージャ２３２は、キャッシュに記憶されたオブジェクトを含むかまたは識別する、サーバ１０６ａ〜１０６ｎからクライアント１０２ａ〜１０２ｎへのリクエストをインタセプトする。
【０１３３】
ステップ４２３において、オブジェクト決定要素は、インタセプトされた通信において識別される。上記のように、オブジェクト決定要素は、発信サーバ１０６ａ〜１０６ｎにおいてリクエストされたオブジェクトにおいて、変化が発生したかまたは発生するかどうかについて指示する。しかしながら、図４Ｄの実施形態において、オブジェクト決定要素は、グループのオブジェクトに対応付けられる。このことは、特定のオブジェクト決定要素によって影響され得るキャッシュに記憶されるすべてのオブジェクトの効率的な無効化を可能にする。一部の実施形態において、グループにおけるオブジェクトのオブジェクト決定要素が、識別される。他の実施形態において、オブジェクトのグループのための例えば、グループオブジェックト決定要素などのオブジェクト決定要素が、識別される。別の実施形態において、グループにおける１つ以上のオブジェクトのオブジェクト決定要素の組合せが、識別される。
【０１３４】
従って、ステップ４２７に従って、オブジェクト決定要素が以前にサービスされたオブジェクトのグループにおける変化を指示するかどうかについて決定がなされる。一部の実施形態において、インタセプトされた通信におけるグループのオブジェクト決定要素が存在することは、グループにおける１つ以上のオブジェクトまたはすべてのオブジェクトに変化が発生したかまたは発生するであろうことを指示する。他の実施形態において、インタセプトされた通信におけるコマンド、指示文または命令の名前およびタイプは、そのような変化を指示する。さらに別の実施形態において、通信において任意のパラメータまたは変数の存在、値または設定も、そのような変化を指示し得る。
【０１３５】
ステップ４２７において、オブジェクト決定要素はグループにおける変化を指示し、以前にサービスされたオブジェクトのグループは、ステップ４３５に従って、キャッシュにおいて無効とマークされる。一部の実施形態において、グループの１つ以上またはすべてのオブジェクトがリクエストされ、ステップ４４０に従って発信サーバ１０６ａ〜１０６ｎから検索される。ステップ４２７において、オブジェクト決定要素がグループにおいて変化を指示しない場合、一部の実施形態において、インタセプトされた通信の一部としてリクエストされ、以前にサービスされ、キャッシュに記憶された任意のオブジェクトは、ステップ４５０に従って、キャッシュマネージャ２３２から検索される。ある実施形態において、無効としてマークされた任意のオブジェクトまたはグループのオブジェクトは、キャッシュマネージャ２３２によってキャッシュからフラッシュされ得る。
【０１３６】
（７．グループの指定）
キャッシュ管理者は、どのオブジェクトが特定のグループに含まれるかを具体的に指定し得る。オブジェクトがキャッシュに記憶される時はいつでも、管理者は、構成に従って、そのオブジェクトを、構成されたまたは暗黙のグループのうちの１つのメンバーにする。構成されたグループは、管理者が以前に設定した構成に基づくか、または代わりにアプリケーション動作およびオブジェクト無効に関係する他のデータに基づき得る。オブジェクトは、また、オブジェクトの構成されたグループが動的な場合、暗黙のグループの一部であり得る。暗黙のグループにおけるオブジェクトは、有意な無効パラメータの値によってグループ化される。
【０１３７】
オブジェクトの非常に柔軟性のあるグループ化を可能にすることによって、キャッシュは、動的に生成されたコンテントを効果的にキャッシュするために必要な無効化における柔軟性および協調のレベルを達成し得る。キャッシュは、オブジェクトの非常に具体的なグループを同時に無効にし得、それによって、動的に生成されたコンテントを無効にする頻繁な必要に対してキャッシュをより多く応答させる。キャッシュがオブジェクトをグループに割当てる時点において、グループは、無効パラメータおよび１つ以上のオブジェクト決定要素を対応付けるためのヒット決定要素を含むそのオブジェクトに関連した多数のものを決定する。
【０１３８】
顧客資源管理（「ＣＲＭ」）に例において、キャッシュ管理者は、グルーピングの各々を事前指定し得る。例えば、管理者は、営業部の各人を名前によってグループ化するためにキャッシュを構成する。従って、管理者は、自動車部、自動二輪車部などを指定し得、オブジェクト決定要素がキャッシュに来るリクエストにおいて認識されるたびに、キャッシュは、オブジェクト決定要素を介して適切な部にリンクされた指定グループに記憶されているすべてのオブジェクトを無効にし得る。
【０１３９】
（８．規則ベースのグループ化）
代わりに、キャッシュ管理者は、キャッシュアプライアンスが実行にどのオブジェクトが特定のグループに含まれるべきかを決定することを可能にする規則を設定し得る。そのような規則ベースのグループ化は、関連するグループを作成するためにキャッシュが利用する有意のオブジェクト決定要素にオブジェクトをリンクさせる設定された規則のせいで、グループの指定に依存し得る。この手法の実施例は、どのオブジェクトを各グループに入れるべきかを認識するためにキャッシュが使用する規則でキャッシュを構成することを伴い必要とし得る。
【０１４０】
再びＣＲＭの実施例に移ると、規則は、アプリケーションに設置される販売部の各小部門がキャッシュによってキャッシュ自体がグループ化するものとして認識されるべきであることを規定し得る。このようにして、グループ化は、キャッシュ管理者が各グループ化を特に識別する必要なく行われ得、キャッシャが関連規則に基づき決定することを可能にする。この技術は、グループ化を指定するためのより柔軟性ある、しばしば作業集中がより少ない方法を作成する。キャッシュ管理者は、販売のあらゆるサブ部門（すなわち、販売／自動車／自動二輪など）がキャッシュによって新しいグループ化を行なうことを規定する規則を構成し得る。自動車販売部からのリクエストがキャッシュを介してアプリケーションによって処理され戻される場合、キャッシュは、販売の各サブグループ化を認識し、事前に構成された規則に基づき、サブグループ化のためのグループ化を自動的に作成する。
【０１４１】
キャッシュがレポート／販売／自動車またはレポート／販売／自動二輪などのタイプのオブジェクトに対する新しいリクエストを見つけるたびに、規則はキャッシュによってインプリメントされ得る。自動二輪販売部のリクエストが自動二輪販売部が販売部のサブグループ化であることを示す場合、次いで自転車販売部などについても同様に、キャッシュは、これらのサブグループ化を認識し、サブグループの各々のためにオブジェクトグループ化を設定するので、この処理は、次いで、反復され得る。既知の無効化リクエストがこれらのグルーピングの１つにリンクされたキャッシュに来たとき、または関連するオブジェクト決定要素がクライアントのリクエストにおいて識別された場合（例えば、リクエストの分析において見つけられた自動二輪販売部宛の販売／自動二輪の販売レポートの計上）、キャッシュは、自動二輪販売部グループにおけるすべてのキャッシュされたオブジェクトを無効化すべきことを知る。
【０１４２】
このようにして、キャッシュが、アプリケーションによってサービスされたデータに対して変化が発生したか発生するであろうことを認識するときに（キャッシュによって受信されたリクエストのコンテントがアプリケーションにおいて変化をトリガすることをキャッシュが認識することにより、またはある外部の変化の発生のために）、上記の技術は、グループ化の処理によって、キャッシュがどのオブジェクトが無効化を必要とするかを迅速かつ簡単に識別できるようにする。このように、キャッシュは、アプリケーションまたはデータベース状態における変化のために、もはや新鮮でない大多数の動的に生成されたオブジェクトを無効にし得る。
【０１４３】
動的に生成されたコンテントをキャッシュメモリからうまく記憶しサービスするキャッシュの能力は、知的統計エンジンを用いて強化もされ得る。該知的統計エンジンは、一定期間に最大のキャッシング利益を提供するオブジェクトのセットを決定するために、リクエストおよび応答トラフィクのパターンを検査する。エンジンは、キャッシュアプライアンス自体に統合されるか、または、動的キャッシングの適合を決定する更なる調査のためのオブジェクトのある部分集合を選択するために、別のコンピュータにおいてヒューリスティックとして実行し得る。
【０１４４】
（９．オブジェクト決定要素の更なる使用）
上記のように、オブジェクト決定要素は、オブジェクト決定要素が対応付けられたキャッシュに記憶されている以前にサービスされたオブジェクトのグループに対して、発信サーバにおいて変化が発生したかまたは発生するかについて指示する任意のデータ構造であり得る。オブジェクト決定要素は、リクエストに埋め込まれた事前定義されたストリング値に基づきセットアップされ得る。例えば、リクエストがあるＵＳＥＲＩＤと共に来る場合、ＵＳＥＲＩＤは、計上または他のリクエストが、そのあるＵＳＥＲＩＤから来るたびに無効にされるべきキャッシュメモリにあるグループのオブジェクトにリンクされ得る。オブジェクト決定要素に対する可能性のある候補には、また、最初にオブジェクトにサービスしたサーバのサービス識別子を用いることを含み得る。サービス識別子は、ＨＴＴＰリクエストに存在するサービスＩＰアドレス、ＴＣＰポートおよびサービス識別子を含む。
【０１４５】
リクエストに存在する別の可能性のあるオブジェクト決定要素は、リクエストユニフォームリソースロケータ（「ＵＲＬ」）である。静的オブジェクトをキャッシングする場合、リクエストＵＲＬは、オブジェクトを一意に識別するのに一般的に十分である。しかしながら、動的に生成されたコンテントのリクエストに関して、ＵＲＬに存在する情報は、キャッシングされたオブジェクトを識別するのに十分ではないことがあり得る。従ってキャッシュは、ＨＴＴＰヘッダ、クッキーヘッダまたは他のカスタムＨＴＴＰヘッダに含まれるオブジェクト決定要素を見つけるために、リクエストにある他の情報を検査しなければならない。キャッシュは、さらに、ＵＲＬクエリストリング、ＰＯＳＴボディ、クッキーヘッダまたは任意の他のリクエストまたは応答ヘッダを含むがそれらに限定されないクライアントリクエストにおける種々の他の場所において、関連パラメータ情報の部分集合を捜し得る。
【０１４６】
オブジェクト決定要素のためにＵＲＬを分析する際の問題は、ＵＲＬおよび他のヘッダは、キャッシュの決定に関連するものの他に、大量の情報を含み得ることである。従ってキャッシュは、適切なオブジェクト決定要素を識別可能であるために、非常に大量の情報を分析する能力を有さなければならない。さらに、ヘッダにあるデータは、しばしば恣意的に順序付けられ、それは、そのようなデータがＨＴＴＰヘッダに置かれる標準化された方法がないことを意味し、従って、単純な比較は、そのようなストリングにおいて関連するオブジェクト決定要素を見つけるためにはしばしば不十分である。
【０１４７】
特定のオブジェクト決定要素をキャッシュメモリに記憶されている関連するオブジェクトまたはオブジェクトのグループに一致させるための事前構成されたポリシーがない場合、キャッシュは、別の実施形態において、さらにそのような決定をなし得る。例えば、何か他のオブジェクト決定要素が、そのようなリクエストにおいて見つけられ、無効にされるべきキャッシュメモリに記憶された特定のオブジェクトにそのようなリクエストをリンクするために用いられ得るかどうかを発見するために、キャッシュはリクエストの種々の局面を検査し分析し得る。あるいは、あるオブジェクト決定要素についてリクエストをキャッシュが検査することを可能にし得、あるオブジェクト決定要素は、特定のオブジェクトまたはオブジェクトのグループに有意にリンクされ得ることを、ある事前定義されたヒューリスティックスに基づきキャッシュが決定する。例えば、リクエストが、特定のＵＳＥＲＩＤに対応付けられたカレンダの更新のためにキャッシュに入って来る場合、本発明の実施形態は、カレンダを更新するリクエストのＵＳＥＲＩＤに等しいＵＳＥＲＩＤを有し、任意の特定の１日に対するユーザのカレンダを含むすべてのキャッシングされたオブジェクトが無効にされる必要があるということを認識するようにセットアップされ得る。
【０１４８】
キャッシュは、また、オブジェクト決定要素が、ＵＲＬステム（Ｓｔｅｍ）、ＵＲＬに存在するクエリ、ＰＯＳＴボディまたはクッキーヘッダにおいて、特定されない順序で名前＝値または同様な対のグループとして存在することを仮定し得る。実施形態において、クエリは、名前＝値の対のリストとしてフォーマットされることが仮定される。従って、ユーザは、どのパラメータ名が有意であるかを構成し得る。あらゆるキャッシングされたオブジェクトは、まずオブジェクトのアクセスＵＲＬを用いてキーを付けられる。ＵＲＬは、／ｓｉｔｅ／ａｐｐｌｉｃａｔｉｏｎ／ｓｐｅｃｉａｌ／ｆｉｌｅ．ｅｘｔ？ｐ１＝ｖ１＆ｐ２＝ｖ２＆ｐ３＝ｖ３のようなものであり得る。／ｓｉｔｅ／ａｐｐｌｉｃａｔｉｏｎ／ｓｐｅｃｉａｌ／ｆｉｌｅ．ｅｘｔの部分がＵＲＬステムである。ｐ１＝ｖ１＆ｐ２＝ｖ２＆ｐ３＝ｖ３の部分が、ＵＲＬクエリであり、パラメータと値の対を含む。これらのパラメータと値の対は、ＰＯＳＴボディまたはクッキーヘッダにも存在し得る。
【０１４９】
実施形態において、ユーザまたは管理者は、ｐ１およびｐ２が無効化パラメータまたはオブジェクト決定要素であるべきことを設定する。キャッシュは、その後、一致するｐ１値およびｐ２値を有するオブジェクトを自動的にグループ化する。このグループ化をインプリメントする一方法は、ｐ１およびｐ２をデータベーステーブルにおける基本キーに対して、すなわち、テーブルにおいて、キャッシュが有効状態を決定するために参照する方法を知っている一意に識別可能なオブジェクトに対してマップすることである。キャッシュに記憶されているデータはもはや有効ではないという事実を反映するためにそれらのデータテーブルにある何かを更新するために、キャッシュは、ｐ１およびｐ２のための新しい値を指定する。そして、キャッシュが次回にそのようなコンテントにサービスする際にそのような新しい値を認識した場合、キャッシュは、そのメモリに記憶されたリンクされているオブジェクトを無効にすることが分かる。キャッシュは、そのようなリクエストに出会った場合、更新リクエストを見て、キャッシュが、ｐ１およびｐ２の値に一致するグループを無効にしなければならないことが分かる。なぜなら、キャッシュは、発信元のデータが変化し、それによって、それらのｐ１およびｐ２オブジェクト決定要素に関係するすべてのオブジェクトに影響することを理解するからである。
【０１５０】
管理者がオブジェクト決定要素としてリクエストに埋め込まれる特定のパラメータを事前構成していない場合のより複雑なケースを処理するために、キャッシュは、オブジェクトのグループ化を無効にするべき際に、関連オブジェクト決定要素をリクエストから抽出することによって、ユーザ構成されたポリシーを採用し、識別時に支援し得る。決定要素ストリングは、次いで、キャッシュに記憶されているオブジェクトのグループを位置付け、そのようなオブジェクトを無効にするために用いられる。これらのオブジェクト決定要素は、有意なパラメータ値のリストを生成するキャッシュを構成するために用いられる。もたらされる書込みリクエストが有意なパラメータに対して一致する値を有する場合、それらのパラメータ名に結び付けられたオブジェックトは、無効にされる。あるいは、ユーザは、リクエストからオブジェクト決定要素ストリングを抽出し得るポリシーフレームワーク動作を指定し得る。オブジェクト決定要素ストリングは、書込みリクエストから抽出され、一致する決定要素ストリングを有するすべてのオブジェクトは無効にされる。この代替手法において、リクエストがキャッシュに到着し、リクエストストリングが無効ポリシーに一致するかどうかを決定する。無効ポリシーは、コンテントグループが無効にされるべきオブジェクトを指定する。
【０１５１】
あるいは、キャッシュは、クライアントリクエストに存在し得る任意のその他のユーザ情報を用い得る。上記のとおり、認証および許可の統合はキャッシュがユーザ情報にアクセスすることを可能にする。ＵＳＥＲＩＤまたはＧＲＯＵＰＩＤは、キャッシングされたオブジェクトの関連するグループ化がユーザまたは一群のユーザにリンクされる場合、決定要素の一つであり得る。ユーザ情報は、しばしば、重要なオブジェクト決定要素であるが、ユーザ情報は、しばしば、ＨＴＴＰリクエストに存在しないことがあり得る。本発明のさらなる実施形態において、本発明の動的キャッシング局面は、出願人の別の特許出願に結合され得る。これを達成するために、出願人の上で参照された同時係属中の特許出願第１１／１６９，００２号（「Ｉｎｔｅｇｒａｔｅｄ  Ｃａｃｈｉｎｇ  ｐａｔｅｎｔ」）が参照される。該出願は、キャッシュをある種の認証・アクセス制御・監査（ＡＡＡ）インフラストラクチャを実行する能力を含む種々のその他のネットワークエレメントに統合させるためのシステムおよび方法を記述する。従って、アプリケーションによって生成されるデータに与えられたセキュリティのレベルが、代わりにキャッシュからサービスされるデータに適用される。この技術は、アプリケーションが、他の方法ではキャッシングされ得ないセンシティブでアクセス制御される情報をキャッシングすることを可能にする。
【０１５２】
この手法は、ＨＴＴＰリクエストに識別可能なユーザ情報を含まないが、Ｉｎｔｅｇｒａｔｅｄ  Ｃａｃｈｉｎｇ  ｐａｔｅｎｔに記述されるＡＡＡ手法によって識別可能であり得るユーザを、キャッシュが識別することを可能にする。そのような手法は、ＡＡＡ処理から分け与えられ得る許可状態情報を検査することによって、特定のリクエストに対してキャッシュが関連するユーザを識別することを可能にする。さらなる実施形態において、統合は、キャッシュに記憶された情報に対するセキュリティポリシーのアプリケーションが無許可のユーザがキャッシュに記憶された情報にアクセスすることを防ぐことを可能にする。
【０１５３】
このアプローチは、また、キャッシュがクライアントからの関連するリクエストに応答し得る前に、そのようなデータをリクエストするクライアントが許可または認証されることを、動的に生成されたデータの相当な部分が要求するという事実によってもたらされる課題に対処する。アプリケーションがアクセス制御されたオブジェクトをキャッシングし得るように、キャッシュは認証されたユーザによってなされたリクエストを許可する能力を有しなければならず、そのような動的なキャッシング技術を認証および許可情報に統合することによって、このセキュリティは達成され得る。ＵＳＥＲＩＤまたはＧＲＯＵＰＩＤは、オブジェクトがユーザまたはユーザのグループに個別化される場合、オブジェクト決定要素の一つである。従って、アプリケーションによって生成されたデータに与えられたセキュリティのレベルは、キャッシングされた情報にも同様に適用される。この手法は、アプリケーションが、他の方法ではキャッシングされ得ないセンシティブなアクセス制御される情報をキャッシングすることを可能にする。
【０１５４】
最後に、一日のうちの時刻、発信元のデータベースの状態などのようなその他の情報は、リクエストから分析され得、キャッシュに記憶されたオブジェクトがなおも有効かどうかを決定するオブジェクト決定要素として用いられ得る。キャッシュは、そのような外部の変数に対してセンシティブに構成されたオブジェクトのグループ化において適切な満了動作を構成することによって、この状況に配慮し得る。
【０１５５】
動的コンテントに対するリクエストは、キャッシュによって分析され、解釈されなければならないという事実によってもたらされる課題にさらに対処するために、本発明の実施形態に従うキャッシュは、どのパラメータがキャッシュにとっての関連するオブジェクト決定要素であると考えられるかを限定し得る。このようにして、そのようなリクエストを適用可能なアプリケーションサーバに転送するヒット率よりはむしろ、キャッシュによってオブジェクトをサービスするヒット率は向上し得る。例として、クライアントからのリクエストクエリは、市と州のパラメータの両方を含み得る。しかしながら、キャッシュは、キャッシュがコンテントを記憶するアプリケーションの要件に従うように構成され得、クライアントから来るリクエストにサービスされ得ることを認識するために、応答が市の値に関わらず所定の州にあるすべてのクライアントから来るとクエリが示す。この目的のために、市のパラメータは関係なく、キャッシュはこの事実を認識し得る。代替の実施形態は、市のパラメータだけが、州のパラメータがどのように指定されたかに関わらず一致する場合、応答がキャッシュからサービスされ得るようにキャッシュを構成することを含む。
【０１５６】
要約すると、キャッシュは、一般化され、パラメータ化されたオブジェクトマッチングをインプリメントする。このアプローチにおいて、リクエストにおける情報の部分集合を認識するように構成され、該情報の部分集合は、オブジェクト決定要素として有用であり、特定のオブジェクトにリンクされ、その結果、そのようなオブジェクト決定要素が認識される場合もあって、キャッシュが、オブジェクトまたはオブジェクトのグループが新鮮でキャッシュからサービスされる能力があるままであるかどうかを評価するに際し、そのような決定要素の存在（または逆に不在）をキャッシュは利用し得る。キャッシュは、リクエストが来るたびに、リクエストされたデータが新鮮のままかどうかを決定するために、構成されたパラメータに対してチェックすることをキャッシュが相談し、キャッシュがキャッシュメモリに記憶された適切なオブジェクトと関連するデータを照合することを可能にするテーブルを維持する。
【０１５７】
（１０．インカーネーション数）
さらに別の実施形態において、キャッシュは、オブジェクトのグループを無効にするために、インカーネーション数（Ｉｎｃａｒｎａｔｉｏｎ  Ｎｕｍｂｅｒ）を利用し得る。キャッシュが、発信元における状態の変化のために一時オブジェクトのグループの各々の状態を変化させる必要がある場合、インカーネーション数は、この無効化を達成するための簡単な手法を提供する。個々に各オブジェクトを識別し、状態を変化させることがキャッシュに記憶されたデータの新鮮さを保証するための非効率的な技術である場合、インカーネーション数を使用することは、グループのオブジェクトを無効にするためのはるかに単純で効果的な技術を可能にする。本実施形態は、各オブジェクトがグループを表すデータ構造をポイントする方法を記述し、従って、サーバは、グループのためのデータ構造の状態を変化させるコマンドを送信する必要があるだけである。キャシングされたオブジェクトに対するその後のリクエストが、クライアントから到着する場合、キャッシュは、状態が変化しているかどうかをまず計算しなければならない。そのように行なうために、キャッシュは、グループに対して状態が変化したかどうかを参照するためにデータ構造を調べる。
【０１５８】
データ構造を効率的にインプリメントするために、キャッシュは、状態変化を調べるかどうかを判定することができなければならない。従って、キャッシュは、キャッシュがグループにおける状態の変化をすでに調べたか否かを判定することができなければならない。これはインカーネーション数が有用である場合である。キャッシュは、動的に生成されたオブジェクトをコンテントグループに対応付ける。これらのコンテントグループの各々は、データ構造に含まれる特定の指標値または「インカーネーション数」を有するハッシュテーブルルックアップ処理によって表され得る。その後、キャッシュが状態変化を引き起こすと認識するクライアントリクエストをキャッシュが受信するたびに、クライアントは、関連パラメータに対するクライアントリクエストを分析し、認識されたオブジェクト決定要素に基づきハッシュルックアップを実行し、データ構造にある指標またはインカーネーション数を増加させる。指定されたグループ内に記憶されたオブジェクトがクライアントによってリクエストされるたびに、キャッシュは、ハッシュアルゴリズムをオブジェクトに対して実行し、それをそのようなコンテントグループのデータ構造にある元の記憶値と比較する。記憶値がそのようなオブジェクトのためのキャッシュによって計算された数と同じである場合、キャッシュは、コンテントが新鮮なままであり、リクエスタにサービスされ得ることを知る。キャッシュが、データ構造にあるそのようなオブジェクトに対して計算された現在のインカーネーション数とデータ構造にあるそのようなコンテントグループに対して記憶された数との間に不一致を検出した場合、キャッシュは、記憶されたオブジェクトがもはや新鮮ではないことを知る。キャッシュは、次いで、記憶されたオブジェクトを無効にし、リクエストをアプリケーションサーバに送る。応答が戻ってくると、キャッシュアプライアンスは新しい応答をキャッシュメモリに記憶し、そのような応答を再び新しいデータ構造にリンクする。その後、キャッシュがそのグループ化におけるオブジェクトに対するリクエストを受信するたびに、キャッシュは比較を行ない得、データ構造に対してさらなる変更がなされていないと見なした場合、キャッシュは新しく記憶されたオブジェクトにサービスし得る。
【０１５９】
このようにオブジェクトのグループの無効化を利用することによって、キャッシュは無効を非常に迅速に行ない、費やされる時間は、無効にされるオブジェクトの数に関わらず一定である。無効についてのより速くより効率的なこの処理によって、本発明の技術は、キャッシュが動的に生成されたオブジェクトをより効率的に処理することを可能にする。技術は、アプリケーションの前に置かれたキャッシュアプライアンスが、そのようなデータにおけるすばやい変化のおかげで無効または古くなったコンテントにサービスすることなく、動的に生成されたオブジェクトをより積極的に記憶しサービスすることを可能にする。実施形態は、キャッシュが頻繁にまたは予測不能に変化するデータにサービスすることを可能にし、それによってキャッシュの性能を向上させる。キャッシュは、また、キャッシュメモリに記憶されたオブジェクトおよびオブジェクトのグループをユーザコマンドを用いて、また、様々な種類のウェブトラフィックを調べ、グループ化することによって、無効にすることが可能である。
【０１６０】
（１１．フラッシュキャッシュおよびフラッシュクラウド）
本発明の別の実施形態は、また、他の方法ではキャッシング可能ではないであろう非常に高速に変化する動的に生成されたオブジェクトに対するキャッシュヒット率を増加させることが可能な技術を含み得る。キャッシュマネージャ２３２がクライアントからの特定のオブジェクトに対する第１のリクエストを受信するとき、キャッシュマネージャ２３２は、そのリクエストを処理のため発信サーバ１０６ａ〜１０６ｎに転送する。なぜなら、キャッシュマネージャ２３２は、第１のそのようなリクエストとして、そのようなオブジェクトをまだ記憶し得ていないからである。応答オブジェクトが、生成され、次いでキャッシュマネージャ２３２を介してリクエストするクライアントに戻されると、キャッシュマネージャ２３２は、オブジェクトのコピーを自動的に記憶する。非常に高速に変化するオブジェクトに関して、従来のキャッシュは、本発明と対照的に、そのようなコンテントは常に新鮮でないと見なされるので、従ってキャッシュ記憶のために有効ではなく、単にすべての応答を処理のために発信サーバ１０６ａ〜１０６ｎに渡す。
【０１６１】
一局面において、本発明は「フラッシュキャッシュ」技術に関し、フラッシュキャッシュ技術は、キャッシュマネージャ２３２またはアプライアンス１０４がオブジェクトの第１のリクエスタのための応答を送信する処理または送信待ちである時間中、キャッシュマネージャ２３２によって受信されるオブジェクトに対するさらなるリクエストをハンドルする技術である。ここで図５を参照すると、本発明の方法５００は、本発明のフラッシュキャッシュ技術を描く。簡単に概観し、かつ図１および図２を見ると、ステップ５１０において、本発明のキャッシュマネージャ２３２は、例えば図１に例示されるクライアント１０２ａなどの第１のクライアントによってリクエストされたオブジェクトに対する発信サーバ１０６ａ〜１０６ｎからの応答を受信する。オブジェクトは、発信サーバ１０６ａ〜１０６ｎの１つによって生成される動的に生成されたオブジェクトを包含し、発信サーバ１０６ａ〜１０６ｎからの応答は、動的に生成されたオブジェクトを含み得る。ステップ５１５において、キャッシュマネージャ２３２は、例えば、デバイス１０４のＴＣＰ／ＩＰスタックなどのネットワークスタックを介するなどによって、第１のクライアントへの応答の送信をリクエストする。ステップ５２０において、該応答は、送信待ちの間、バッファに記憶または保持され得る。例えば、デバイス１０４は、低速接続または低帯域幅のクライアント１０２ａへの通信を抑えることがあり、デバイス１０４は、応答を表すネットワークパケットをキューに入れる。
【０１６２】
ステップ５２５において、第１のクライアント１０２ａへの応答が、バッファにおいて送信待ちか、そうでなければ、第１のクライアント１０２ａへの送信の処理中および／または応答の送信の完了前に、キャッシュマネージャ２３２は、オブジェクトに対する第２のリクエストを第２のクライアント１０２Ｂから受信する。ステップ５３０において、キャッシュマネージャ２３２は、オブジェクトが現在バッファにあることを決定し、オブジェクトを第２のリクエストに応答するためにバッファから第２のクライアント１０２Ｂに提供する。一実施形態において、デバイスは単一のＴＣＰ／ＩＰスタックを使用するので、同じオブジェクトが第１のクライアント１０２ａおよび第２のクライアント１０２Ｂへの送信のために提供される。ステップ５３５において、第１の応答は、第１のクライアント１０２ａに送信され、応答は第２のクライアント１０２Ｂに送信される。ステップ５４０において、第１のクライアント１０２Ｂの応答はバッファから除去される。
【０１６３】
さらなる詳細におけるステップ５１０において、デバイス１０４は、キャッシュマネージャ２３２によってなど、動的に生成されたオブジェクトなどのオブジェクトに対する第１のクライアント１０２ａからのリクエストに対する発信サーバ１０６ａ〜１０６ｎからの応答をインタセプトし、さもなければ応答を受信する。一実施形態において、動的に生成されたオブジェクトは、発信サーバ１０６ａ〜１０６ｎによってなど、非キャッシング可能として識別されるか、さもなければキャッシング可能として識別されない。一部の実施形態において、キャッシュマネージャ２３２は、リクエストを第１のクライアント１０２ａから受信し、リクエストを発信サーバ１０６ａ〜１０６ｎに転送する。一実施形態において、キャッシュマネージャ２３２は、リクエストを発信サーバ１０６ａ〜１０６ｎに転送する前に、リクエストされたオブジェクトのためのキャッシュマネージャ２３２をチェックする。一部の場合において、キャッシュマネージャ２３２は、オブジェクトが無効であるかまたは満期になったことを決定する。他の場合において、キャッシュマネージャ２３２は、キャッシュマネージャ２３２に記憶されないか、さもなければ利用できないことを決定する。オブジェクトは、例えばフラッシュされてしまったか、またはこれがオブジェクトが発信サーバ１０６ａ〜１０６ｎからリクエストされた第１回目であり得る。一部の実施形態において、応答はオブジェクトを含み、他の実施形態において、応答は、オブジェクトに関する故障またはエラーメッセージなどの状況を示す。
【０１６４】
ステップ５１５において、第１のクライアント１０２ａによるリクエストに対する応答は、第１のクライアント１０２ａへの送信のために提供される。一部の実施形態において、デバイス１０４は、応答を受信し、パケット処理エンジン２４０に対してクライアント１０２ａに応答を送信するようにリクエストする。他の実施形態において、キャッシュマネージャ２３２は、応答を受信し、パケット処理エンジン２４０に対してクライアント１０２ａに応答を送信するようにリクエストする。一実施形態において、デバイス１０４は、ネットワークパケットをクライアント１０２ａ〜１０２ｎに送受信するための１つのネットワークスタックを含む。一部の実施形態において、ネットワークスタックはＴＣＰ／ＩＰスタックを含む。他の実施形態において、デバイス１０４は、複数のネットワークスタックを含み得、ネットワークスタックの各々は、クライアント１０２ａ〜１０２ｎに対応付けられるか、または１つ以上のクライアント１０２ａ〜１０２ｎによって用いられる。当業者は認識し理解するように、ネットワークスタックは、カーネル２０４、ネットワークポート２２６および／またはパケット処理エンジン２４０に対応付けられる。
【０１６５】
ステップ５２０において、応答をステップ５１５においてリクエストされた第１のクライアント１０２ａへの応答の送信中に、デバイス１０４は、応答をバッファの中に、キューに入れ、保持し、またはさもなければ記憶する。一部の実施形態において、バッファは、ＴＣＰ／ＩＰスタックなどのネットワークスタックの一部である。例えば、バッファは、ＴＣＰ／ＩＰスタックにおいて用いられるか、またはＴＣＰ／ＩＰスタックによって用いられるか、ネットワークドライバ、フィルタまたはネットワークスタックの任意の部分を処理または取り扱う他のネットワーク関連ソフトウェアによって用いられるデータ構造を含み得る。他の実施形態において、バッファはネットワークポート２２６の一部である。さらなる実施形態において、バッファはパケット処理エンジン２４０の一部であり、さらなる実施形態において、カーネルはバッファを含む。バッファは、デバイス１０５の任意の部分に位置付けられた任意のメモリまたはストレージエレメントであり得る。多くの実施形態において、応答は、ＴＣＰ／ＩＰプロトコルベースのパケットなどの１つ以上のネットワークパケットとして、バッファにおいて、キューに入れられ、保持されまたは記憶される。一実施形態において、応答は、本発明による使用のためにバッファを提供する１つ以上のデータ構造において保持される。当業者が認識し理解するように、応答は、任意の適切な形式でバッファにおいて、キューに入れられ、保持され記憶され得る。
【０１６６】
さらに、応答は、任意の処理継続時間に、任意、事前決定、暗黙、明示、またはその他の方法のいずれかで、および任意の適切な手段および／または機構を用いて、バッファにおいて記憶またはキューに入れられ得る。一実施形態において、ネットワークパケットは、送信の速度、パケット待ち率、ネットワークトラフィックおよび混雑、またはその他のネットワーク特性に基づき、デバイス１０４によって送信されるのを待ち、それらは、パケット処理エンジン２４０および／またはネットワークポート２２６を介するなどのように、デバイス１０４によって決定され得るので、応答はバッファに記憶される。別の実施形態において、応答は、所定の期間バッファに保持される。一部の実施形態において、デバイス１０４は、クライアントネットワーク接続の帯域幅、接続のタイプなどの特性またはクラアント１０２ａの特性に基づき、ネットワークパケットをキューに入れ、管理し、クライアント１０２ａに送信する。例えば、発信サーバ１０６ａ〜１０６ｎへのデバイスの接続より低速のデバイス１０４への接続を有するクライアント１０２ａに関して、デバイス１０４は、クライアント１０２ａに対する所望の性能または挙動、またはクライアント１０２ａのネットワーク接続を提供するために、ネットワークパケットのクライアント１０２ａへの送信を抑えるかまたはさもなければ管理する。そのように、デバイス１０４は、任意のキューイングまたはバッファ管理の論理、機能、規則または動作に従って、所望の期間、バッファにおいて応答をキューに入れ、または保持し得る。
【０１６７】
ステップ５２５において、第１のクライアント１０２ａの応答が、バッファにおいて保持されるかまたは送信される間に、もしくはさもなければ、ＴＣＰ／ＩＰスタックのバッファなどの第１のクライアント１０２ａに対する応答の送信を完了する前に、デバイス１０４は、キャッシュマネージャ２３２を介するなどで、第１のリクエストのためにキャッシュマネージャ２３２によって得られたオブジェクトに対する第２のクライアント１０２Ｂからの第２のリクエストをインタセプトしまたはさもなければ、第２のリクエストに受信する。すなわち、一実施形態において、第２のクライアント１０２Ｂによってリクエストされたオブジェクトは、バッファに記憶され、送信されるのを待つ。一部の実施形態において、デバイス１０４は、第１のクライアント１０２ａによってリクエストされた同じオブジェクトに対する複数のリクエストを複数のクライアント１０２ｂ〜１０２ｎから受信し、該同じオブジェクトは、現在、第１のクライアント１０２ａへの送信のためにバッファに保持されるか、または、現在、第１のクライアント１０２ａに送信されている。一部の実施形態において、キャッシュマネージャ２３２は、例えば、オブジェクト決定要素を用いることによるなど本明細書に記述される任意の技術など、任意の適切な手段および／または機構を用いて、第２のリクエストが第１のリクエストと同じオブジェクトをリクエストしていることを決定する。一部の実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２は、任意のタイプおよび形式のキューイング機構を用いて、第２のリクエストおよび任意の追加のリクエストをキューに入れる。そのように、一実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２がサーバ１０６ａ〜１０６ｎに代わってリクエストをキューに入れリクエストに応答するので、クライアント１０２ａ〜１０２ｎは、リクエストを再提出する必要はない。別の実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２は、リクエストをサーバ１０６ａ〜１０６ｎに提出することなく、リクエストをキューに入れ、クライアント１０２ａ〜１０２ｎにすぐにリクエストに応答する。アプライアンス１０４またはキャッシュマネージャ２３２は、本発明の技術を用いてクライアント１０２ａ〜１０２ｎからのリクエストが応答されるようにキューに入れるために、メモリにあるキュー、オブジェクトまたはデータ構造などの任意の機構を使用し得る。
【０１６８】
ステップ５３０において、デバイス１０４は、第２のクライアント１０２ｂによってリクエストされたオブジェクトが、バッファに記憶された応答状態にあるか、または第１のクライアント１０２ａに現在送信されている応答にあるかを決定する。一部の実施形態において、キャッシュマネージャ２３２は、オブジェクトがバッファに記憶されることを決定する。一部の場合において、キャッシュマネージャ２３２は、まずオブジェクトに関して、キャッシュメモリまたはストレージをチェックし、次いで、オブジェクトに関してバッファをチェックする。他の場合において、バッファは、キャッシュマネージャ２３２によって探索または管理されるキャッシングされたオブジェクトのための記憶場所として考慮され得る。他の実施形態において、キャッシュマネージャ２３２は、パケット処理エンジン２４０にオブジェクトがバッファにあるかどうかをチェックすることをリクエストする。さらなる実施形態において、キャッシュマネージャ２３２は、カーネル２０４の任意のアプリケーションプログラミングインタフェース（ＡＰＩ）を介して、オブジェクトがバッファにあるかどうかを決定する。一部の場合において、キャッシュマネージャ２３２は、オブジェクトがバッファにあるかどうかを決定するために、任意のドライバ、ネットワークハンドラ、フィルタ、またはネットワークスタックの任意の部分をハンドリングまたは処理するその他のソフトウェアとインタフェースする。
【０１６９】
さらにステップ５３０において、本発明は、バッファに記憶されたオブジェクト、または、第１のクライアント１０２ａへの応答として送信されるオブジェクトをステップ５２５における第２のクライアント１０２Ｂからの第２のリクエストに応答して使用するために提供する。一部の実施形態において、パケット処理エンジン１０４を介するなどデバイス１０４は、バッファの任意の部分およびネットワークスタックの関連するデータ構造を用いることによって第２のリクエストへの応答を形成する。一実施形態において、単一のネットワークスタック構成における場合などのように、オブジェクトは、バッファに一旦記憶され、第１のクライアント１０２ａおよび第２のクライアント１０２Ｂにそれぞれ送信されるべきネットワークパケットを形成するために用いられる。他の実施形態において、バッファからのオブジェクトのコピーが、第２のリクエストへの応答を形成するために用いられる。さらなる実施形態において、オブジェクトは、第２のクライアント１０２Ｂに対する第２のリクエストへの応答を形成するために、第１のネットワークスタックから第２のネットワークスタックへ提供される。第１のクライアント１０２ａへの応答はバッファに維持され得、バッファにある応答の任意の部分またはすべては、第２のクライアント１０２Ｂに対する応答を提供するために用いられ得る。一実施形態において、バッファに記憶されている第１のクライアントへの応答は、第２のクライアント１０２Ｂに応答するために、修正なしに用いられ得る。別の実施形態において、バッファにある第１のクライアント１０２ａへの応答に記憶されているオブジェクトを表すデータは、第２のクライアント１０２Ｂに対する応答を提供するために修正される。
【０１７０】
本発明の方法５００のステップ５３５において、第１のクライアント１０２ａに対する第１の応答は、デバイス１０４から送信され、第２のクライアント１０２Ｂの第２のリクエストに応答する第２の応答は、デバイス１０４から送信される。第１のクライアント１０２ａおよび第２のクライアント１０２Ｂに対する応答は、デバイス１０４からの任意の順序で、互いの間の任意の時間間隔で、同じネットワークスタック２６７または異なるネットワークスタックを用いて、送信され得る。一部の実施形態において、第２のクライアント１０２Ｂに対する応答は、また、送信待ちで、バッファにおいて、キューに入れられ、保持されまたは記憶される。そのように、同じオブジェクトに対する任意の追加のリクエストは、また、まだ送信、フラッシュ、除去されないで、またはさもなければ利用不可でない限り、バッファに記憶されている第１の応答または第２の応答を介して提供され得る。
【０１７１】
ステップ５４０において、第１のクライアント１０２ａへの応答は、フラッシュされ、またはさもなければバッファから除去される。一部の実施形態において、第２のクライアント１０２Ｂの応答がバッファに記憶された場合には、第２のクライアントへの応答も除去される。他の実施形態において、第２のクライアントへの応答はバッファに残ったままであり得、第３のクライアントからのオブジェクトに対する第３のリクエストを受信するならば、方法５００のステップ５２５〜５３５が、第２のクライアント応答を用いて再び実行される。
【０１７２】
別の局面において、本発明は、「フラッシュクラウド」技術に関する。フラッシュクラウド技術は、サーバが処理中で、応答オブジェクトを第１のリクエスタに対して戻している間に、アプライアンス１０４またはキャッシュマネージャ２３２が、同じオブジェクトに対する、例えば、ほぼ同時のリクエストなどのさらなるリクエストを受信する場合の状況をハンドルする技術である。そのようなほぼ同時のリクエストのすべてがキャッシュによって応答されると、アプリケーションまたは管理者によるさらなる有効期限または無効の動作なしに、オブジェクトは、キャッシュメモリから直ちにフラッシュされる。本発明のこの技術は、他の方法では非キャッシング可能と考えられるオブジェクトに対して、データがキャッシングされ、非常に短い時間にサービスされることを可能にする。この手法は、例えば、リアルタイムの株価または急速に展開するニュースなどの急速に変化するデータを大量の同時に存在するユーザにサービスするアプリケーションにおいて大幅な改善をもたらす。
【０１７３】
図６は、キャッシュが第１のリクエストに対する応答でコンテントを受信した場合に、クライアントリクエスタの各々に同じコンテントをサービスするために、本発明のキャッシュによって取られるステップを描く方法６００を記述する。方法６００を簡単に概観すると、ステップ６１０において、キャッシュマネージャ２３２またはアプライアンス１０４は、動的に生成されたオブジェクトなどの発信サーバ１０６ａ〜１０６ｎからのオブジェクトに対する第１のクライアント１０２ａからの第１のリクエストを受信する。ステップ６１５において、キャッシュは、第１のリクエストを発信サーバ１０６ａ〜１０６ｎに転送する。キャッシュが第１のリクエストへの応答を待っている間、または第１のクライアント１０２ａの第１のリクエストに応答する前に、ステップ６２０において、キャッシュは、第２のクライアント１０２ｂからオブジェクトに対する第２のリクエストを受信する。一部の実施形態において、キャッシュは第２のリクエストを発信サーバに転送しないで、その代わりに、第２のリクエストをキューに入れる。ステップ６２５において、キャッシュは、第１のリクエストに対する応答を発信サーバから受信し、ステップ６３０において、受信された応答および／または応答からのオブジェクトを、第１のリクエストに応答して第１のクライアント１０２ａに送信し、そして第２のリクエストに応答して第２のクライアント１０２ｂに送信する。ステップ６３５において、キャッシュが、受信した応答および／または応答からのオブジェクトを第１のクライアント１０２ａかまたは第２のクライアント１０２ｂのいずれかに送信を完了する前に、キャッシュは、第３のクライアント１０２ｃから、該オブジェクトに対する追加の第３のリクエストを受信し得る。ステップ６４０において、キャッシュは、また、受信された応答および／または応答からのオブジェクトを第３のクライアント１０２ｃに送信する。キャッシュは、リクエストに応答すると、ステップ６４５において、例えば、アプリケーション、発信サーバまたは管理者によるいかなる有効時間または無効の動作もなしに、オブジェクトをキャッシュメモリからフラッシュする。
【０１７４】
さらなる詳細ならびに図１および図２において、本発明の方法６００のステップ６１０において、アプライアンス１０４のキャッシュマネージャ２３２は、一実施形態において、クライアント１０２ａと発信サーバ（例えば、１０６ａ）との間の通信中の任意の時点で、クライアント１０２ａ〜１０２ｎ（例えば、図１のクライアント１０２ａ）からオブジェクト（動的に生成されたオブジェクトなど）に対するリクエストをインタセプトするかまたはさもなければ受信し得る。一実施形態において、第１のクライアント１０２ａからのリクエストは、第１のクライアント１０２ａがオブジェクトをリクエストした最初であり得る。一実施例において、クライアント１０２ａは、発信サーバ１０６ａへの接続の際に第１回目のオブジェクトをリクエストし得る。別の実施例において、キャッシュマネージャ２３２は、クライアント１０２ａまたは任意のその他のクライアント１０２ａ〜１０２ｎの代わりに、発信サーバ１０６ａからのオブジェクトをまだキャッシングまたはリクエストしていないことがあり得る。他の実施形態において、クライアント１０２ａからのリクエストは以前にリクエストされたオブジェクトに対するその後のリクエストであり得る。さらに他の実施形態において、キャッシュマネージャ２３２は、ステップ６１０においてクライアント１０２ａによってリクエストされたオブジェクトを以前にキャッシングした場合がある。そのように、図６に例示されるように、本発明の技術は、オブジェクトが現在キャッシングされている場合、以前にキャッシングされたか、または一度もキャッシングされていないかに関わらず、クライアント１０２ａ〜１０２ｎと発信サーバ１０６ａ〜１０６Ｂとの間の通信中の任意の時点で実行され得る。
【０１７５】
ステップ６１５において、キャッシュマネージャ２３２は、リクエストをクライアント１０２ａから発信サーバ１０６ａに転送する。一実施形態において、キャッシュマネージャ２３２は、オブジェックトがキャッシュマネージャ２３２に記憶されているかどうかをチェックすることなく、リクエストを発信サーバに転送する。一部の実施形態において、キャッシュマネージャ２３２は、クライアント１０２ａによってリクエストされたオブジェクトがキャッシュマネージャ２３２から利用可能であるかどうかをまずチェックし、利用可能でない場合、リクエストを発信サーバ１０６ａに転送する。他の実施形態において、キャッシュマネージャ２３２は、無効かまたはさもなければ更新される必要があるか、もしくはさもなければ無効にされるところであるかまたはすぐに更新される必要があるオブジェクトがキャッシュに記憶されていないかどうかについてチェックする。別の実施形態において、キャッシュマネージャ２３２は、キャッシュに記憶された動的に生成されたオブジェクトが、発信サーバ１０６ａ〜１６０Ｎ動的に再生成され、サービスされるべきことを決定する。そのように、キャッシュマネージャ２３２が、オブジェクトが発信サーバ１０６ａ〜１６０ｎからリクエストされるべきと決定した場合、キャッシュマネージャ２３２は、クライアント１０２ａからのリクエストを発信サーバ１０６ａ〜１６０ｎに転送する。一実施形態において、キャッシュマネージャ２３２は、第１のクライアント１０２ａから受信した同じリクエストまたは元のリクエストを発信サーバ１０６ａに転送する。別の実施形態において、キャッシュマネージャ２３２は、第１のクライアント１０２ａによるリクエストでリクエストまたは識別されたオブジェクトに対する、キャッシュマネージャ２３２によって形成されたリクエストを送信する。
【０１７６】
キャッシュマネージャ２３２が発信サーバ１０６ａ〜１６０Ｎからの、第１のクライアント１０２ａのリクエストへの応答を待っている間、および／または第１のクライアント１０２ａのリクエストに応答する前に、ステップ６２０において、キャッシュマネージャ２３２は、ステップ６１０において、第１のクライアント１０２ａの第１のリクエストによって、識別され、対応付けられ、またはリクエストされたオブジェクトに対する１つ以上の追加のリクエストを、インタセプトするかまたは受信し得る。例えば、一実施形態において、キャッシュマネージャ２３２は、第２のクライアント１０２Ｂからオブジェクトに対する第２のリクエストを受信するが、該オブジェクトは、第１のリクエストに応答して発信サーバ１０６ａによって動的に生成され得る。一実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２は、第２のリクエストおよび任意の追加のリクエストを、任意のタイプおよび形式のキューイング機構を用いてキューに入れる。一部の実施形態において、オブジェクトに対する第２および／または追加のリクエストがほぼ同時に発生し得または、キャッシュマネージャ２３２によってほぼ同時に受信され得る。他の実施形態において、第２および／または追加のリクエストが、第１のリクエストを受信することと発信サーバ１０６ａから第１のリクエストに対する応答を受信することとの間の任意の時点で、キャッシュマネージャ２３２によってインタセプトされ得るか受信され得る。さらに別の実施形態において、第２のおよび／または追加のリクエストは、第１のリクエストを受信することと第１のリクエストに対する応答をクライアント１０２ａに提供することとの間の任意の時点で、キャッシュマネージャ２３２によって受信され得る。
【０１７７】
一実施形態において、キャッシュマネージャ２３２は、第１のリクエストに応答する前には、オブジェクトに対する第２のクライアント１０２ｂからの第２のリクエスト、および／またはオブジェクトに対する任意の他のクライアント１０２ｃ〜１０２ｎからの任意の他の追加のリクエストを転送しない。一実施形態において、キャッシュマネージャ２３２は、ステップ６２５において、第１のリクエストに対する応答を受信するまでは、第２および追加のリクエストを、例えばアプライアンス１０４において、キューに入れるかまたはさもなければ保持する。そのように、キャッシュマネージャ２３２は、第２のクライアントのリクエストをクライアント１０２Ｂにすぐに転送しない。しかしながら、一部の実施形態において、リクエストが、例えば発信サーバ１０６ａ〜１０６ｎによって処理されているかのように、第２のクライアント１０２Ｂには見える。
【０１７８】
一部の実施形態において、第２のクライアント１０２ａからの第２のリクエストは、ステップ６１０における第１のリクエストと同じオブジェクトをリクエストし得るが、該第２のリクエストには、別のオブジェクトまたは静的、動的、またはその他の他の情報に対するさらなるリクエストも含み得る。例えば、第２のクライアント１０２Ｂのリクエストは、複数のリクエストを含み得る。これらの実施形態において、キャッシュマネージャ２３２は、第１のクライアント１０２ａの第１のリクエストに関連して既にリクエストされたオブジェクトに関係したリクエストの部分を識別し得、第１のリクエストへの応答が受信されるまで、識別された部分を処理しないことがあり得る。第２のクライアント１０２Ｂからのリクエストのその他の部分に関して、キャッシュマネージャ２３２は、本明細書に記載された本発明の任意の技術によるなどの任意の適切な方法で、これらの他のリクエストを処理し得る。例えば、第２のリクエストは、第２のオブジェクトに対するリクエストを含み得、該リクエストのために、キャッシュマネージャ２３２は、発信サーバ１０２ａ〜２０Ｂから第２のオブジェクトをリクエストするかまたは第２のオブジェクトをキャッシュマネージャ２３２から得る。
【０１７９】
ステップ６２５において、本発明の方法６００は、ステップ６１５において発信サーバ１０６ａに転送された第１のリクエストへの応答を受信する。一部の実施形態において、応答は、任意のサーバ１０６ａ〜１０６ｎによって動的に生成されたオブジェクトなどのオブジェクトを含む。他の実施形態において、応答は、キャッシュマネージャ２３２によって取り出されるか、または得られるべきオブジェクトの位置に対するポインタを含む。さらなる実施形態において、応答は、あるエラーメッセージを指示するか、またはリクエストされたオブジェクトが提供され得ないことを指示し得る。一実施形態において、キャッシュマネージャ２３２は、受信した応答と対応するリクエストとを比較し、応答がリクエストに対して適切かどうかを決定する。さらなる実施形態において、キャッシュマネージャ２３２は、動的に生成されたオブジェクトなどの応答のコンテントを得て、第１のクライアント１０２ａに通信すべきことが望まれた応答を作成、修正またはさもなければ提供する。
【０１８０】
ステップ６３０において、本発明のキャッシュマネージャ２３２は、第１のリクエストおよび第２のまたは同じオブジェクトに対する追加のリクエストに応答するために、第１のリクエストに対して受信した応答からの応答、および／またはオブジェクトを用いる。一実施形態において、キャッシュマネージャ２３２は、第１のリクエストに応答して、受信した応答を第１のクライアント１０２ａに送信し、第２のリクエストに応答して、受信した応答を第２のクライアント１０２Ｂに送信する。別の実施形態において、キャッシュマネージャ２３２は、受信した応答を第１のクライアント１０２ａに送信するが、受信した応答を修正し、第２のリクエストに応答して、修正された応答を第２のクライアント１０２Ｂに送信する。例えば、キャッシュマネージャ２３２は、セッション情報または第２のリクエストに対応する他の情報を含めるために、第２のクライアント１０２Ｂへの応答を修正し得る。さらなる実施形態において、キャッシュマネージャ２３２は、受信した応答からリクエストされたオブジェクトを得、第１の応答および第２の応答などの、第１のリクエストおよび第２のリクエストに対応し、オブジェクトを含む応答を作成、修正またはさもなければ提供し、対応する応答を第１のクライアント１０２ａおよび第２のクライアント１０２Ｂに送信し得る。そのように、キャッシュマネージャ２３２は、オブジェクトに対するクライアント１０２ａ〜１０２ｂからのリクエストに応答して、第１のリクエストに対し発信サーバ１０６ａ〜１０６ｎから受信された応答のすべてまたは任意の部分を用い得る。
【０１８１】
一部の実施形態において、キャッシュマネージャ２３２は、第１のリクエストへの応答をサーバ１０６ａから受信した後で、かつ、第１のクライアント１０２ａ、第２のクライアント１０２ｂまたはステップ６２５においてオブジェクトをリクエストする任意の他のクライアント１０２ａ〜１０２ｃへの応答の送信を完了する前に、ステップ６３５において、オブジェクトに対する追加のリクエストを、他のクライアント１０２ｃ〜１０２ｎからインタセプトまたはさもなければ受信し得る。例えば、キャッシュマネージャ２３２は、オブジェクトに対する第３のリクエストを第３のクライアント１０２Ｃから受信し得る。これらの実施形態において、キャッシュマネージャ２３２は、ステップ６３０においてこれらの追加のリクエストに応答するために、第１のリクエストのために発信サーバ１０６ａ〜１０６ｎから受信した応答のすべてまたは任意の部分を用い得、クライアント１０２ａおよび／または１０２ｂに通信し得る。別の実施形態において、キャッシュマネージャ２３２は、第１のクライアント１０２ａおよび第２のクライアント１０２ｂへの応答の送信を完了し得るが、あらゆる応答、または、第１のリクエストを介して提供されたオブジェクトを第３のクライアント１０２ｃの第３のリクエストに応答するため利用可能な応答をメモリに、なおも有し得る。そのように、ステップ６４０において、本発明のキャッシュマネージャ２３２は、発信サーバにオブジェクトを再びリクエストすることなく、および／またはリクエストされたオブジェクトをキャッシュに記憶することなく、第３のリクエストまたはさらなる追加のリクエストに応答し得る。
【０１８２】
一部の実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２は第２のリクエスト、第３のリクエストまたはキューにある任意の追加のリクエストをキューに入れる。そのように、一実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２がサーバ１０６ａ〜１０６ｎの代わりに、リクエストをキューに入れ、リクエストに応答するので、クライアント１０２ａ〜１０２ｎはリクエストを再提出する必要がない。別の実施形態において、アプライアンス１０４またはキャッシュマネージャ２３２は、リクエストをサーバ１０６ａ〜１０６ｎに提出することなく、リクエストをキューに入れ、クライアント１０２ａ〜１０２ｎに即応的に応答する。アプライアンス１０４またはキャッシュマネージャ２３２は、本発明の技術を用いて、応答されるべきクライアント１０２ａ〜１０２ｎからのリクエストをキューに入れるために、キュー、オブジェクト、またはメモリにおけるデータ構造などの任意の機構を使用し得る。さらに、アプライアンス１０２またはキャッシュマネージャ２３２は、任意の順序でクライアントリクエストに応答し得、必ずしも受信された順序やキューからの先入れ先出し方式の順序に限られない。
【０１８３】
ステップ６４５において、キャッシュマネージャ２３２は、発信サーバ１０６ａからの第１のリクエストに対する受信し応答を、クライアントのリクエストに対する任意の応答、および／またはキャッシュマネージャ２３２からのリクエストによってリクエストされたオブジェクトをフラッシュする。一実施形態において、キャッシュマネージャ２３２は、一実施形態におけるステップ６３０または別の実施形態におけるステップ６４０などにおいて、最後の応答の送信を完了次第、応答および／またはオブジェクトをキャッシュから直ちにフラッシュする。一部の実施形態において、キャッシュマネージャ２３２は、有効時間に従うなど、オブジェクトを所定の期間中維持する。他の実施形態において、キャッシュマネージャ２３２は、発信サーバ１０６ａ〜１０６Ｎがオブジェクトを無効にするまで、オブジェクトをキャッシュに維持する。さらに別の実施形態において、オブジェクトは、メモリまたはストレージが上書きされるかまたはさもなければ他の目的でキャッシュマネージャ２３２によって用いられるまで、メモリまたはストレージに残ったままである。
【０１８４】
本発明の方法５００および６００の技術は複数のクライアントからの単一のオブジェクトに対するリクエストに関して一般的に上記されているが、当業者は、本発明のフラッシュキャッシュおよびフラッシュクラウドハンドリング技術が、順次に、並行して、またはほぼ並行または同時のいずれかで発生し得る複数のクライアントからの単一のリクエストまたは一連のリクエストのいずれかにおいて複数のオブジェクトリクエストをハンドルするために用いられることを認識し理解する。そのように、方法５００および６００を実施する複数の例は、ネットワーク環境２００におけるキャッシュマネージャ２３２またはアプライアンス１０４の動作の経過中に種々の頻度および種々の回数で実行し得る。さらに、各クライアントからの各リクエストまたは連続のリクエストは、１つ以上のクライアント間においてリクエストされる１つ以上のオブジェクトのごく普通のセットを有する、オブジェクトの様々なセットをリクエストし得る。
【０１８５】
例えば、本発明のフラッシュクラウド技術を考慮して、第１のクライアントは、第１のオブジェクトおよび第２のオブジェクトをリクエストし得る一方、第２のクライアントは、第２のオブジェクトおよび第３のオブジェクトをリクエストし得、第３のクライアントは、第１のオブジェクトおよび第３のオブジェクトをリクエストし得る。一部の実施形態において、本発明のキャッシュは、複数のクライアント間において未処理である複数のリクエストの各オブジェクトについてオブジェクトを１回だけリクエストし、対応する応答を各クライアントに適宜に提供するための多重化および／または逆多重化技術を用いる。上記実施例の他に、キャッシュは、第１のクライアントおよび第３のクライアントのために発信サーバから第１のオブジェクトを１回、第１のクライアントおよび第２のクライアントのために第２のオブジェクトを１回、および第２のクライアントおよび第３のクライアントのために第３のオブジェクトを１回、入手し得る。一部の実施形態において、クライアントのための１つ以上のリクエストに対するすべてのオブジェクトがキャッシュによって受信されたとき、キャッシュは、対応する応答をクライアントに送信する。他の実施形態において、キャッシュは、キャッシュによってオブジェクトを受信すると、オブジェクトごとにクライアントに応答し得る。
【０１８６】
同様に本発明の方法５００のフラッシュキャッシュ技術の観点において、アプライアンスのバッファは、送信待ちの複数のオブジェクトを含み得、一方、それらのオブジェクトに対するさらなるリクエストはアプライアンスによって受信される。一実施形態において、本発明のアプライアンスは単一のＴＣＰ／ＩＰスタックを用い、複数のバッファ対応付けられ、送信の経過中に該単一のＴＣＰ／ＩＰスタックからの複数のオブジェクトを一時的に記憶する。そのように、バッファにある第１のオブジェクトは、第１のオブジェクトに対する第１のクライアントおよび第２のクライアントからのリクエストに応答するために用いられ得、バッファにある第２のオブジェクトは、第２のオブジェクトに対する第３のクライアントおよび第４のクライアントからのリクエストに応答するために、または第２のオブジェクトに対する第１のクライアントまたは第２のクライアントのいずれかまたは両方からのリクエストに応答するために用いられ得る。
【０１８７】
さらに、当業者は認識し理解するように、本発明のフラッシュキャッシュおよびフラッシュクラウド技術は、互いに結合され、または任意の組合せで、実施され得る。例えば、本発明のアプライアンスは、フラッシュキャッシュ技術によって、バッファからのオブジェクトに対する追加のリクエストへの応答を提供しているが、バッファにあるオブジェクトが無効であるか、さもなければ発信サーバへリクエストされる必要があると決定することがあり得る。その点において、アプライアンスは、発信サーバにオブジェクトをリクエストすることによって、フラッシュクラウド技術に切り替え得る。アプライアンスは、次いで、応答すべき発信サーバを待つ間に、アプライアンスにおいて受信されおよびキューに入れられたオブジェクトに対する追加のリクエストに応答するために、発信サーバにリクエストされたオブジェクトを用いる。
【０１８８】
（１２．ｅタグ挿入）
別の実施形態において、本発明は、後のリクエストにおけるヒットをキャッシュがチェックすることを可能にするクライアントに応答して、オブジェクトに対するエンティティタグおよびキャッシュ制御情報などの情報を挿入することによって、キャッシュヒット率を増加するための技術を用いることに関する。本発明は、発信サーバがオブジェクトをキャッシング可能として識別しなかったとき、動的に生成されたオブジェクトをキャッシング可能として識別する技術をクライアントに提供する。オブジェクトに対するＨＴＴＰリクエストおよび応答をハンドリングする実施形態などの一部の実施形態において、本発明の技術は、発信サーバからエンティティタグおよび／またはキャッシュ制御情報が提供されていないオブジェクトに対してキャッシュ制御を提供するために、エンティティタグすなわち「ｅタグ」を応答に挿入する。当業者に公知のＨＴＴＰプロトコルを簡単に参照すると、「ｅタグ」は、オブジェクトなどのリクエストされた変数に対するエンティティタグの現在の値を提供する、ＨＴＴＰベースのメッセージのＥＴａｇヘッダフィールドであり、同じリソースからの他のエンティティとの比較のために用いられ得る。ｅタグは、ＨＴＴＰプロトコルにおいて妥当性確認のための機構を提供する。また、ＨＴＴＰベースのメッセージは、リクエスト／応答メッセージまたは通信のチェーンに沿うキャッシング機構への指示文を指定するために、キャッシュ−コントロールロールヘッダフィールドを含み得る。キャッシュ−制御指示文は、所望のキャッシング動作を指定する。
【０１８９】
ここで図７Ａおよび図７Ｂを参照し、図１および図２を考慮すると、本発明の「ｅタグ」技術を実施する実施形態のためにステップが描かれる。図７Ａの簡単な概観において、本発明の方法７００は、ステップ７１０において、発信サーバ１０６ａ〜１０６ｎからサービスされ、アプライアンス１０４のキャッシュマネージャ２３２によって受信されるオブジェクトなどの、クライアント１０２ａ〜１０２ｎによってリクエストされるオブジェクトを有する応答を受信する。ステップ７１５において、キャッシュマネージャ２３２は、応答からのオブジェクトがタグエンティティ制御下にあるかまたはさもなければエンティティタグを有するかどうかを決定する。オブジェクトがエンティティタグを有しない場合、ステップ７２０において、キャッシュマネージャ２３２は、オブジェクトのためのエンティティタグを生成する。ステップ７２５において、キャッシュマネージャ２３２は、キャッシュ生成されたエンティティタグを含むエンティティ制御情報を提供するために、応答を修正する。ステップ７３０において、キャッシュマネージャ２３２は、キャッシュマネージャ２３２へのエンティティタグ情報を有するオブジェクトを記憶する。ステップ７３５において、キャッシュマネージャ２３２は、修正された応答を有するオブジェクトをリクエストするクライアント１０２ａ〜１０２ｎに応答する。そのように、クライアント１０２ａ〜１０２ｎは、キャッシュマネージャ２３２から、クライアント１０２ａ〜１０２ｎに即応的な方法でエンティティタグ制御オブジェクトを受信する。即応的な方法とは、発信サーバ１０６ａ〜１０６ｎがエンティティタグ情報を有するオブジェクトを提供しなかったことを、クライアント１０２ａ〜１０２ｎが気付かないような方法である。
【０１９０】
さらなる詳細において本発明のステップ７１０において、キャッシュマネージャ２３２は、オブジェクトに対するクライアント１０２ａ〜１０２ｎのリクエストへの応答を発信サーバ１０６ａ〜１０６ｎから受信する。一部の実施形態において、応答は、クライアント１０２ａ〜１０２ｎからサーバ１０６ａ〜１０６ｎに、またはクライアント１０２ａ〜１０２ｎの代わりにキャッシュマネージャ２３２からサーバ１０６ａ〜１０６ｎに送られるリクエストから受信され得る。一部の実施形態において、キャッシュマネージャ２３２は、オブジェクトの整合および／または有効なオブジェクトに関してキャッシュマネージャ２３２をチェックした後で、クライアント１０２ａ〜１０２ｎからサーバ１０６ａ〜１０６ｎへのリクエストを転送する。別の実施形態において、キャッシュマネージャ２３２は、図６に関連して記述された本発明のフラッシングクラウド技術を実施中に、サーバ１０６ａ〜１０６ｎにオブジェクトをリクエストする。
【０１９１】
方法７００のステップ７１５において、キャッシュマネージャ２３２は、ステップ７１０における応答において受信されたオブジェクトが、エンティティタグ制御下にあるかまたはエンティティタグを有するかどうかを決定する。一部の実施形態において、キャッシュマネージャ２３２は、応答を提供する１つ以上のパケットの任意のフィールド、ヘッダ、データまたはその他の情報を検査、調査、チェックまたはさもなければ読み取る。当業者は認識し理解するように、検査または読取るべきパケットの部分は、応答のために用いられる１つ以上のプロトコルのタイプに依存する。一実施形態において、キャッシュマネージャ２３２は、応答パケットのエンティティタグ部分が行方不明、空、または提供されていないと決定する。別の実施形態において、キャッシュマネージャ２３２は、応答パケットのエンティティタグ部分が破損、無効、またはキャッシュマネージャ２３２および／またはクライアント１０２ａ〜１０２Ｂによって使用可能でないと決定する。一部の実施形態において、キャッシュマネージャ２３２は、応答がエンティティタグを有するか、またはエンティティ制御の下にあるがキャッシュマネージャ２３２によって所望されるタイプ、形式または方法にはないと決定する。キャッシュマネージャ２３２は、エンティティタグの他にまたはエンティティタグの代わりに、エンティティタグと同様な方法で、応答に所望のキャッシュ制御情報が存在するかどうかを決定する。さらなる実施形態において、キャッシュマネージャ２３２は、ポリシーエンジン２３６を介して、オブジェクトがエンティティタグおよび／またはキャッシュ制御下にあるかどうかを決定し得る。そのように一部の実施形態において、アプライアンス１０４がポリシーエンジン２３６を介して、オブジェクトがエンティティタグおよび／またはキャッシュ制御下であるべきではないと決定する場合には、キャッシュマネージャ２３２は、ステップ７２０〜７２５などの本発明のｅタグ技術の実行を継続ないことがあり得る。
【０１９２】
ステップ７２０において、キャッシュマネージャ２３２は、受信された応答のオブジェクトのために所望のエンティティタグおよびキャッシュ制御情報を生成する。タグはエンティティタグ表現の任意のタイプおよび／または形式を含み得、任意の数字、英数字、１つ以上の文字（ｃｈａｒａｃｔｅｒ）において英字を含み得る。ＨＴＴＰの実施形態において、ｅタグは、ストリングまたは引用符号の付いたストリングを含み得、ＨＴＴＰプロトコルに従って、ｅタグが弱いか強いかを指示するためのプレフィックスをさらに含み得る。一部の実施形態において、キャッシュマネージャ２３２は、エンティティヘッダ、またはｅタグ、ｅタグカウンタを順次にまたは任意の所望の増分で増加させるカウンタを用いる。一部の実施形態において、ｅタグカウンタは、キャッシュマネージャ２３２がｅタグを生成するすべてのオブジェクトに対してグローバルである。他の実施形態において、キャッシュマネージャ２３２は、複数のｅタグカウンタを有し得、その各々は、オブジェクトまたはオブジェクトのグループに対応付けられるかまたは特定的である。
【０１９３】
一実施形態において、ｅタグは、オブジェクトに対応付けられた汎用識別子（ＵＩＤ）またはグローバル汎用識別子（ＧＵＩＤ）を含み得る。別の実施形態において、ｅタグは、既に上記のとおりインカーネーション数を含み得る。一部の実施形態において、キャッシュマネージャ２３２は、ｅタグをアプリケーション、プログラム、またはアプライアンス１０４において実行する他の形式の実行可能な命令の他の形式から入手し、他の実施形態において、ネットワークを介してアプライアンス１０４によって、アクセス可能な他のシステムまたはデバイスから入手する。さらなる実施形態においては、キャッシュマネージャ２３２は、オブジェクトのための所望の一意のｅタグを生成するために、任意の適切なアルゴリズム、ビジネス規則または論理を用い得る。一実施形態において、アプライアンス１０４は、データベース、ファイル、またはオブジェクトに対してｅタグを生成し、維持するための他の編成されたストレージエレメントを、キャッシュマネージャ２３２のために含む。
【０１９４】
方法７００のステップ７２５において、キャッシュマネージャ２３２は、ステップ７２０おいてキャッシュによって生成されたエンティティタグなどの所望のエンティティタグおよび／またはキャッシュ制御情報を含めるために、発信サーバ１０６ａ〜１０６ｎからの応答を修正する。一実施形態において、キャッシュマネージャ２３２は、ＨＴＴＰプロトコルなどのプロトコルのエンティティタグヘッダを介してエンティティタグ情報を挿入する。別の実施形態において、キャッシュマネージャ２３２は、所望のエンティティタグを含めるために、応答における任意のエンティティタグヘッダフィールドを修正する。さらに別の実施形態において、キャッシュマネージャ２３２は、応答におけるエンティティタグフィールドを、キャッシュマネージャ２３２によって用いられことが所望されるエンティティタグフィールドに代える。さらなる実施形態において、エンティティタグ情報は、応答をクライアント１０２ａ〜１０２ｎに通信するためのネットワークパケットの任意の部分に挿入、修正または配置される。
【０１９５】
さらに、ステップ７２５において、キャッシュマネージャ２３２は、任意の所望のキャッシュ制御情報を任意のヘッダ、プロトコルのフィールド、または、応答を通信するためのネットワークパケットの任意の他の部分に挿入、修正、またはさもなければ配置し得る。キャッシュ制御情報は、任意の適切な手段および／または機構によって、キャッシュマネージャ２３２によって生成され得る。一実施形態において、キャッシュ制御情報は、デバイス１０４のポリシーエンジン２３６の中に構成され、ポリシーエンジン２３６を介して得られる。別の実施形態において、キャッシュマネージャ２３２は、キャッシュマネージャ２３２の任意のアルゴリズム、ビジネス規則、または論理から所望のキャッシュ制御情報を決定する。一部の実施形態において、キャッシュ制御情報は、ネットワークの任意の履歴、およびクライアント１０２ａ〜１０２ｎとアプライアンス１０４またはキャッシュマネージャ２３２との間のキャッシング性能に基づき得る。
【０１９６】
本発明の方法７００のステップ７３０において、キャッシュマネージャ２３２は、オブジェクトに関する生成されたエンティティタグを任意の適切なまたは所望の方法でキャッシュマネージャ２３２に記憶する。一部の実施形態において、エンティティタグは、記憶されたオブジェクトの一部に含まれるかまたは記憶されたオブジェクトの一部にされる。他の実施形態において、エンティティタグは、別に記憶されるが、オブジェクトに対応付けられる。別の実施形態において、エンティティタグとオブジェクトとは、データベース、リンクされたリスト、ルックアップテーブル、または、当業者に公知のように、１つのエンティティを別のエンティティに対応づけるための任意の他の機構を介して、対応付けられる。さらに一部の実施形態において、オブジェクトに提供されたキャッシュ制御情報および／またはエンティティタグは、また、キャッシュマネージャ２３２おいてオブジェクトに対応付けられて記憶され得る。
【０１９７】
ステップ７３５において、キャッシュマネージャ２３２は、アプライアンス１０４に対して、修正された応答をクライアント１０６ａ〜１０６ｎに送信させる。例えば、キャッシュマネージャ２３２は、パケット処理エンジンに対して、修正された応答をクライアント１０２ａ〜１０２ｎに送信することをリクエストする。そのように、クライアント１０２ａ〜１０２ｎに知られていないで、一実施形態において、発信サーバ１０６ａ〜１０６ｎがキャッシュ制御情報を生成しないか、またはキャッシュマネージャ２３２がサーバ１０６ａ〜１０６ｎによって生成されたそのような情報を変更したとしても、クライアント１０２ａ〜１０２ｎは、エンティティタグおよびキャッシュ制御情報を有するオブジェクトを受信する。本発明のｅタグ技術は、あらゆるオブジェクトがバリデータ（ｖａｌｉｄａｔｏｒ）、すなわちｅタグを有するか、またはキャッシュマネージャ２３２によって制御されるか所望されるｅタグを有するということを確実にし得る。オブジェクトがバリデータまたは所望のバリデータを有しない場合、キャッシュマネージャ２３２は、それ自身のｅタグを挿入する。これらのｅタグバリデータは、図７Ｂに関連して検討されるように、オブジェクトに繰り返されるリクエストにフルに応答することを回避し得る。
【０１９８】
図７Ｂは、オブジェクトが修正されたかどうかをクライアント１０２ａ〜１０２ｎによってチェックするためのエンティティタグを用いるための本発明の方法７５０を描く。そのように、クライアント１０２ａ〜１０２ｎは、クライアント１０２ａ〜１０２ｎにおけるオブジェクトをキャッシングし、キャッシュマネージャ２３２または発信サーバ１０６ａ〜１０６ｎを用いて、オブジェクトが変化したかどうかをチェックし得る。方法７５０を簡単に概観すると、ステップ７７５において、キャッシュマネージャ２３２は、オブジェクトのエンティティタグをチェックするための、リクエストをクライアント１０２ａ〜１０２ｎから受信する。ステップ７６０において、キャッシュは、クライアント１０２ａ〜１０２ｎのリクエストから受信したエンティティタグとキャッシュに記憶されたオブジェクトのエンティティタグとを比較する。ステップ７６５において、キャッシュマネージャ２３２は、クライアントからのエンティティタグがキャッシュにあるオブジェクトのエンティティと一致したかどうかを決定する。エンティタグが一致しない場合、ステップ７７０において、キャシュマネージャ２３２は、オブジェクトの現在のエンティティタグを提供する応答で、クライアント１０２ａ〜１０２ｎに応答する。エンティティタグが正に一致する場合、ステップ７７５において、キャシュマネージャ２３２は、オブジェクトが修正されなかったことを指示する応答で、クライアント１０２ａ〜１０２ｎに応答する。
【０１９９】
さらなる詳細において、ステップ７５５において、キャッシュマネージャ２３２は、任意のタイプおよび／または形式の通信によってオブジェクトのエンティティタグをチェックまたは検査するための、クライアント１０２ａ〜１０２ｎからのリクエストを受信し得る。一実施形態において、リクエストは、イフマッチ（Ｉｆ−Ｍａｔｃｈ）またはイフノンマッチ（Ｉｆ−Ｎｏｎｅ−Ｍａｔｃｈ）リクエストヘッダフィールドを有するＨＴＴＰメッセージを含み、イフマッチまたはイフノンマッチリクエストヘッダフィールドは、クライアント１０２ａ〜１０２ｎによって提供されるエンティティタグストリング値を含む。例えば、クライアント１０２ａ〜１０２ｎは、クライアントキャッシュにおける、またはさもなければクライアント１０２ａ〜１０２ｎにおいて利用可能な、オブジェクトのコピーを有し得る。クライアント１０２ａ〜１０２ｎは、オブジェクトが現時点のものかどうかを決定または検査するために、リクエストにおけるオブジェクトのクライアントのコピーのエンティティタグを用いる。
【０２００】
ステップ７６０において、キャッシュマネージャ２３２は、キャッシュマネージャ２３２がクライアント１０２ａ〜１０２ｎとは異なるオブジェクトのバージョンを有するかどうかを決定するために、クライアント１０２ａ〜１０２Ｂから受信したエンティティタグ値をオブジェクトのエンティティタグと比較する。キャッシュマネージャ２３２は、クライアント１０２ａ〜１０２ｎからのエンティティタグ値をキャッシングされたオブジェクトのエンティティタグ値と比較するために、任意の適切な方法および／または機構を用い得る。一実施形態において、キャッシュマネージャ２３２は、リクエストからのｅタグ値とオブジェクトと共にキャッシュに記憶されたｅタグとのバイト比較を実行する。別の実施形態について、キャッシュマネージャ２３２は、オブジェクトが修正されたかどうかを決定するために、エンティティタグおよび／またはキャッシュオブジェクトにおいてハッシュアルゴリズムを実行および使用する。さらなる実施形態において、キャッシュマネージャ２３２は、サーバ１０６ａ〜１０６ｎにオブジェクトをリクエストし、オブジェクトが修正されたかどうかを決定するために、受信されたオブジェクトをキャッシングされたオブジェクトと比較する。
【０２０１】
ステップ７６５において、クライアント１０２ａ〜１０２ｎからのエンティティタグがオブジェクトと共にキャッシュマネージャ２３２に記憶されているエンティティタグと一致しない場合、ステップ７７０において、キャッシュマネージャ２３２は、エンティティタグが一致しないことまたはオブジェクトが修正されたことを示す応答をクライアントに送信する。一実施形態において、キャッシュマネージャ２３２は、オブジェクトのために新しいエンティティタグ値を提供する応答を、クライアント１０２ａ〜１０２ｎに送る。別の実施形態において、キャッシュマネージャ２３２は、オブジェクトの新しいバージョンまたはキャッシュマネージャ２３２に記憶された新しいエンティティタグを有する修正されたオブジェクトなどの修正されたオブジェクトを提供する応答を、クライアント１０２ａ〜１０２ｎに送る。ステップ７６５において、クライアント１０２ａ〜１０２ｎからのエンティティタグがオブジェクトと共にキャッシュマネージャ２３２に記憶されているエンティティタグと正に一致する場合、ステップ７７５において、キャッシュマネージャ２３２は、エンティティタグが正に一致することまたはオブジェクトが修正されていないことを示す応答をクライアントに送る。
【０２０２】
本発明のｅタグ技術は、一般的にＨＴＴＰプロトコルに関して記述されるが、当業者は、エンティティタグおよびキャッシュ情報を提供するための任意のタイプおよび／または形式のプロトコルで実施され得ることを認識し理解する。一部の実施形態において、プロトコルはエンティティタグおよびキャッシュ情報フィールドをサポートし得ないが、一方、他の実施形態において、プロトコルはエンティティタグおよびキャッシュ情報フィールドをサポートする。これらの実施形態のいずれにおいても、サーバが応答においてエンティティタグおよびキャッシュ制御情報を提供しないとき、またはキャッシュが、アプライアンス１０４によって制御または所望される方法で、サーバによって提供されたエンティティタグおよびキャッシュ制御情報を変更または制御することを決定したとき、本発明の技術はエンティティタグおよびキャッシュ制御情報を提供する。
【０２０３】
発信サーバおよびアプリケーションによって動的に生成された動的にキャッシングするコンテントに対する課題に対処するために、本発明のキャッシュアプライアンスは、Ｏｕｔｌｏｏｋ（登録商標）Ｗｅｂ  Ａｃｃｅｓｓ、Ｏｒａｃｌｅ（登録商標）Ｃｏｎｆｉｇｕｒａｔｏｒ、およびＳｅｒｅｎａ（登録商標）Ｔｅａｍ  Ｔｒａｃｋ（登録商標）などのある程度普通に使用されているアプリケーションのためのパッケージされたポリシーを組み込み得る。これらのパッケージは、そのようなアプリケーションがデータを処理し、それによってキャッシュが、キャッシュメモリに記憶されている、どのオブジェクトがそのようなアプリケーションによって生成されたオブジェクトをどのくらいの期間、保持するかについて、より知的な決定を行なうことを可能にする方法を理解することによって設計される。
【０２０４】
（Ｄ．例示的なコンピュータシステムベースのインプリメンテーション）
本発明の機能は、ハードウェア、ソフトウェア、またはそれらの組合せを用いてインプリメントされ得、１つ以上のコンピューティングデバイスまたはその他の処理システムの中でインプリメントされ得る。図８Ａおよび８Ｂは、本発明の任意の技術、方法および機能をインプリメントするために利用され得る実施例のコンピューティングデバイス８００を描く。そのように、本発明のアプライアンス１０４は、コンピューティングデバイス８００または本明細書に記述される本発明の任意の技術、機能および動作を提供するために設計されおよび構成された特定目的デバイスであり得る。
【０２０５】
図８Ａおよび図８Ｂは、本発明の実施形態を実施するのに有用な、一部の実施形態においてネットワークデバイス８００とも呼ばれるコンピューティングデバイス８００のブロック図を描く。図８Ａおよび図８Ｂに示されるように、各コンピューティングデバイスは、中央処理装置８０２、および主記憶装置８２２を含む。図８Ａに示されるように、典型的なコンピューティングデバイス８００は、視覚表示装置８２４、キーボード８２６および／またはマウスなどのポインティングデバイス８２７を含み得る。各コンピューティングデバイス８００は、１つ以上の入出力デバイス８３０ａ〜８３０ｂ（参照番号８３０を用いることで総称される）および中央処理装置８０２と通信するキャッシュメモリ８４０などの追加のオプションのエレメントも含み得る。
【０２０６】
中央処理装置８０２は、主記憶装置８２２から取り出された命令に応答し、命令を処理する任意の論理回路網である。多くの実施形態において、中央処理装置は、Ｍｏｕｎｔａｉｎ  Ｖｉｅｗ，ＣａｌｉｆｏｒｎｉａのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されるマイクロプロセッサ、Ｓｃｈａｕｍｂｕｒｇ，ＩｌｌｉｎｏｉｓのＭｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されるマイクロプロセッサ、Ｓａｎｔａ  Ｃｌａｒａ，ＣａｌｉｆｏｒｎｉａのＴｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されるマイクロプロセッサ、Ｗｈｉｔｅ  Ｐｌａｉｎｓ，Ｎｅｗ  ＹｏｒｋのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓによって製造されるマイクロプロセッサ、またはＳｕｎｎｙｖａｌｅ，ＣａｌｉｆｏｒｎｉａのＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓよって製造されるマイクロプロセッサなどのマイクロプロセッサが備えられる。コンピューティングデバイス８００は、任意のこれらのプロセッサ、または本明細書において記述されるように動作する能力のある任意の他のプロセッサに基づき得る。
【０２０７】
主記憶装置８２２は、データを記憶する能力があり、任意の記憶場所がマイクロプロセッサ８０２によって直接にアクセスされることを可能にする１つ以上のメモリチップであり得る。該メモリチップは、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バーストＳＲＡＭまたはシンクバーストＳＲＡＭ（ＢＳＲＡＭ）、ダイマミックランダムアクセスメモリ（ＤＲＡＭ）、ファーストページモードＤＲＡＭ（ＦＲＭ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、エクステンディドデータアウトプットＲＡＭ（ＥＤＯ  ＲＡＭ）、エクステンディドデータアウトプットＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バーストエクステンディドデータアウトプットＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、エンハンストＳＤＲＡＭ（ＥＳＤＲＡＭ）、シンクリンクＤＲＡＭ（ＳＬＤＲＡＭ）、ダイレクトラムバスＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘導体ＲＡＭ（ＦＲＭ）、などである。主記憶装置８２２は、任意の上記のメモリチップ、または本明細書に記述されるように動作する能力のある任意のその他の利用可能なメモリに基づき得る。図８Ａに示される実施形態において、プロセッサ８０２は、システムバス８５０を介して主記憶装置８２２と通信する（より詳細に下記される）。図８Ａは、コンピューティングデバイス８００の実施形態を描き、該実施形態において、プロセッサは、メモリポート８０３を介して主記憶装置８２２と直接に通信する。例えば、図８Ｂにおいて、主記憶装置８２２は、ＤＲＤＲＡＭであり得る。
【０２０８】
図８Ｂは、主プロセッサ８０２が、時々バックサイドバスと呼ばれる第２のバスを介してキャッシュメモリ８４０と直接に通信する実施形態を描く。他の実施形態において、メインプロセッサ８０２は、システムバス８５０を用いてキャッシュメモリ８４０と通信する。キャッシュメモリ８４０は、一般的に、主記憶装置８２２より速い応答時間を有し、一般的に、ＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。
【０２０９】
図８Ａに示される実施形態において、プロセッサ８０２は、ローカルシステムバス８５０を介して種々のＩ／Ｏデバイス８３０と通信する。種々のバスは、中央処理装置８０２を任意のＩ／Ｏデバイス８３０に接続するために使用され得る。種々のバスは、ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩエキスプレスバス、ヌーバス（ＮｕＢｕｓ）を含む。Ｉ／Ｏデバイスが、ビデオディスプレイ８２４である実施形態に関して、プロセッサ８０２は、ディスプレイ８２４と通信するためにアドバンストグラフィックスポート（ＡＧＰ）を用い得る。図８Ｂは、メインプロセッサ８０２が、ハイパートランスポート、高速Ｉ／Ｏ、またはインフィニバンド（ＩｎｆｉｎｉＢａｎｄ）を介してＩ／Ｏデバイス８３０ｂと直接に通信するコンピュータ８００の実施形態を描く。図８Ｂは、また、ローカルバスと直接通信が混合された実施形態を描く。すなわち、プロセッサ８０２は、ローカル相互接続されたバスを用いてＩ／Ｏデバイス８３０ａと通信する一方、Ｉ／Ｏデバイス８３０ｂと直接に通信する。
【０２１０】
コンピューティングデバイス８００は、任意の適切な導入デバイス８１６をサポートし得る。導入デバイス８１６は、３．５インチ、５．２５インチディスクまたはＺＩＰディスクなどのフロッピー（登録商標）ディスクを受けるフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、種々のフォーマットのテープドライブ、ＵＳＢドライブ、ハードドライブ、または本発明に関係するかまたはさもなければ本発明の任意の技術を提供する任意のソフトウェアまたはその一部などのソフトウェアおよびプログラムを導入するのに適する任意の他のデバイスなどである。コンピューティングデバイス８００は、オペレーティングシステムおよびその他の関連するソフトウェアを記憶するための、または本発明のソフトウェア８２０に関係する任意のプログラムなどのアプリケーションソフトウェアプログラムを記憶するための１つ以上のハードディスクドライブまたは独立ディスクの冗長アレイなどのストレージデバイス８２８をさらに含み得る。オプションで、任意の導入デバイス８１６も、ストレージデバイス８２８として用いられ得る。
【０２１１】
さらに、コンピューティングデバイス８００は、標準の電話線、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）リンク（例えば、８０２．１１、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、ブロードバンド接続（例えば、ＩＳＤＮ、フレームリレイ、ＡＴＭ）、無線接続、または上記の任意のまたはすべての組合せを含むが、それらに限定されない種々の接続によるインターネットとインタフェースするネットワークインタフェース８１８を含み得る。ネットワークインタフェース８１８は、組込みネットワークアダプタ、ネットワークインタフェースカード、ＰＣＭＣＩＡネットワークカード、カードバスネットワークアダプタ、ワイヤレスネットワークアダプタ、ＵＳＢネットワークアダプタ、モデム、または、コンピューティングデバイス８００が、通信し本明細書に記述される動作を実行する能力のある任意のタイプのネットワークとインタフェースするのに適した任意の他のデバイスを含み得る。
【０２１２】
種々様々なＩ／Ｏデバイス８３０ａ〜８３０ｎが、コンピューティングデバイス８００の中において存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、および描画タブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、およびダイサブリメーション（ｄｙｅ−ｓｕｂｌｉｍａｔｉｏｎ）プリンタを含む。Ｉ／Ｏデバイスは、図８Ａに示されるように、Ｉ／Ｏコントローラ８２３によって制御され得る。Ｉ／Ｏコントローラは、キーボード８２６および、例えば、マウスまたは光学ペンなどのポインティングデバイス８２７などの１つ以上のＩ／Ｏデバイスを制御し得る。さらに、Ｉ／Ｏデバイスは、また、コンピューティングデバイス８００ためのストレージ８２８および／または導入媒体８１６を提供し得る。さらに他の実施形態において、コンピューティングデバイス８００は、Ｌｏｓ  Ａｌａｍｉｔｏｓ，ＣａｌｉｆｏｒｎｉａのＴｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，Ｉｎｃによって製造されるデバイスのＵＳＢフラッシュドライブのラインなどのハンドヘルドＵＳＢストレージを受信するためのＵＳＢ接続を提供し得る。
【０２１３】
さらなる実施形態において、Ｉ／Ｏデバイス８３０は、システムバス８５０と外部通信バスとの間のブリッジ８７０であり得る。外部通信バスは、ＵＳＢバス、アップルデスクトップバス、ＲＳ−２３２シリアル接続、ＳＣＳＩバス、ファイアワイヤバス、ファイアワイヤ８００バス、イーサネット（登録商標）バス、アップルトークバス、ギガビットイーサネット（登録商標）バス、非同期転送モードバス、ＨＩＰＰＩバス、スーパーＨＩＰＰＩバス、シリアルプラスバス、ＳＣＩ／ＬＡＭＰバス、ファイバチャネルバス、またはシリアル付加小型コンピュータインタフェースバスなどである。
【０２１４】
図８Ａおよび図８Ｂにおいて描かれたようなコンピューティングデバイス８００は、一般に、タスクのスケジューリングおよびシステムリソースへのアクセスを制御するオペレーティングシステムの制御の下で動作する。コンピューティングデバイス８００は、任意のオペレーティングシステムを実行する。任意のオペレーティングシステムは、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのあらゆるバージョン、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘオペレーティングシステムの様々なリリース、ＭａｃｉｎｔｏｓｈコンピュータのためのＭａｃＯＳ（登録商標）の任意のバージョン、任意の埋込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の所有権を主張できるオペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイスのための任意のオペレーティングシステム、またはコンピューティングデバイスにおいて実行可能で、本明細書に記述された動作を実行可能な任意のその他オペレーティングシステムなどである。一般的なオペレーティングシステムは、とりわけ次のものを含む：すべてがＲｅｄｍｏｎｄ，ＷａｓｈｉｎｇｔｏｎのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって製造される、ＷＩＮＤＯＷＳ（登録商標）３．ｘ、ＷＩＮＤＯＷＳ（登録商標）９５、ＷＩＮＤＯＷＳ（登録商標）９８、ＷＩＮＤＯＷＳ（登録商標）２０００、ＷＩＮＤＯＷＳ（登録商標）  ＮＴ３．５１、ＷＩＮＤＯＷＳ（登録商標）  ＮＴ４．０、ＷＩＮＤＯＷＳ（登録商標）  ＣＥ、およびＷＩＮＤＯＷＳ（登録商標）  ＸＰ；Ｃｕｐｅｒｔｉｎｏ，ＣａｌｉｆｏｒｎｉａのＡｐｐｌｅ  Ｃｏｍｐｕｔｅｒによって製造されるＭａｃＯＳ；Ａｒｍｏｎｋ，Ｎｅｗ  ＹｏｒｋのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓによって製造されるＯＳ／２；および、Ｓａｌｔ  Ｌａｋｅ  Ｃｉｔｙ，ＵｔａｈのＣａｌｄｅｒａ  Ｃｏｒｐ．によって配布される無料で使用可能なオペレーティングシステムであるＬｉｎｕｘ、または、任意のタイプおよび／または形式のＵｎｉｘ（登録商標）オペレーティングシステム。
【０２１５】
他の実施形態において、コンピューティングデバイス８００は、様々なプロセッサ、オペレーティングシステム、およびデバイスに整合する入力デバイスを有し得る。コンピューティングデバイス８００は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または、通信可能で、明細書に記述される本発明の動作を実行する十分なプロセッサパワーおよびメモリ容量を有する他の形式の計算または電気通信デバイスであり得る。さらにコンピューティングデバイス８００は、リモートアクセスデバイス、バーチャルプライベートネットワーク（ＶＰＮ）デバイス、セキュアソケット層（ＳＳＬ）ＶＰＮデバイス、ルータ、スイッチ、ブリッジ、または、明細書に記述される本発明の動作が実行可能な任意の形式の他のネットワークデバイスなどの任意のタイプおよび／形式のネットワークデバイスであり得る。
【０２１６】
本発明のアプライアンスは、ＴＣＰ／ＩＰを使用または介して通信することを一般的に検討しているが、アプライアンスは、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、セレクション肯定応答付きＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウ付きＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−ベガスプロトコルなどにおける輻輳予測、およびＴＣＰスプーフィングなどの任意の修正されたトランスポート制御プロトコルを用いるかまたはそれと通信し得る。さらに、本発明のアプライアンスは、任意のインタノード（ｉｎｔｅｒｎｏｄｅ）または高性能プロトコルを用い得る。さらに、本発明のアプライアンスは、インターネットパケットエクスチェンジ（ＩＰＸ）プロトコルを介するシーケンストパケットエクスチェンジ（ＳＰＸ）プロトコルなどの任意の他のトランスポートおよびネットワークプロトコルを用いるかまたはそれと共に動作し得る。
【０２１７】
結論
本発明の種々の実施形態は上に記述されているが、それらは、単に実施例として提示されているもので、限定するものではないことを理解すべきである。従って、当業者は、本発明において形式および詳細における種々の変更が、添付の特許請求の範囲に定義される本発明の精神と範囲から逸脱することなく、なされ得ることを理解する。従って、本発明の広さおよび範囲は、上記の例示的実施形態のいずれによっても制限されるべきではなく、以下の特許請求の範囲およびその均等物に従ってのみ定義されるべきである。
【図面の簡単な説明】
【０２１８】
【図１】図１は、本発明の実施形態がインプリメントされ得る実施例のネットワーク環境を例示するブロック図である。
【図２】図２は、本発明の実施形態に従って、統合されたキャッシングを実行するアプライアンスの実施例のアーキテクチャを例示するブロック図である。
【図３Ａ】図３Ａは、デバイス動作をパケット処理およびパケット処理タイマに統合するための本発明の方法の実施形態において取られるステップの流れ図である。
【図３Ｂ】図３Ｂは、図３Ａを考慮して無効細分性技術を実施するための本発明の方法の実施形態において取られるステップの流れ図である。
【図４Ａ】図４Ａは、古いオブジェクトを無効にするための無効コマンドを用いる本発明の方法の実施形態において取られるステップの流れ図である。
【図４Ｂ】図４Ｂは、オブジェクトのグループの無効を組み込んだ本発明の方法の実施形態において取られるステップの流れ図である。
【図４Ｃ】図４Ｃは、クライアントリクエストがオブジェクトの決定要素のために分析される場合の本発明の方法の実施形態において取られるステップの流れ図である。
【図４Ｄ】図４Ｄは、オブジェクト決定要素を用いる、オブジェクトのグループの無効を組み込んだ本発明の方法の実施形態において取られるステップの流れ図である。
【図５】図５は、フラッシュキャッシュ技術を提供するための本発明の方法の実施形態において取られるステップの流れ図である。
【図６】図６は、フラッシュクラウド制御技術を提供するための本発明の方法の実施形態において取られるステップの流れ図である。
【図７Ａ】図７Ａおよび図７Ｂは、オブジェクトに対するエンティティタグおよびキャッシュ制御を提供するための本発明の方法の実施形態において取られるステップの流れ図である。
【図７Ｂ】図７Ａおよび図７Ｂは、オブジェクトに対するエンティティタグおよびキャッシュ制御を提供するための本発明の方法の実施形態において取られるステップの流れ図である。
【図８Ａ】図８Ａおよび図８Ｂは、本発明の例示的実施形態を実施するためのコンピューティングデバイスの実施形態のブロック図である。
【図８Ｂ】図８Ａおよび図８Ｂは、本発明の例示的実施形態を実施するためのコンピューティングデバイスの実施形態のブロック図である。
【図１】
2008529127.tif 000003
【図２】
2008529127.tif 000004
【図３Ａ】
2008529127.tif 000005
【図３Ｂ】
2008529127.tif 000006
【図４Ａ】
2008529127.tif 000007
【図４Ｂ】
2008529127.tif 000008
【図４Ｃ】
2008529127.tif 000009
【図４Ｄ】
2008529127.tif 000010
【図５】
2008529127.tif 000011
【図６】
2008529127.tif 000012
【図７Ａ】
2008529127.tif 000013
【図７Ｂ】
2008529127.tif 000014
【図８Ａ】
2008529127.tif 000015
【図８Ｂ】
2008529127.tif 000016
【国際調査報告】
2008529127.tif 000017
2008529127.tif 000018
2008529127.tif 000019
2008529127.tif 000020
2008529127.tif 000021