(57)【要約】方法は、第１のネットワークパケットスケジューラによって、複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラから、複数のトラフィッククラスのトラフィッククラス毎に仮想パケットを受信し、ネットワークパケットの相対的伝送優先順位を定義することと、複数のトラフィッククラスの第１のトラフィッククラスのネットワークパケットを受信することと、各仮想パケットをトラフィッククラス毎に作成される複数の仮想接続の仮想接続の中に伝送することと、ネットワークパケットまたは仮想パケットを伝送のためのバッファ内の次のパケットとしてスケジューリングすることと、バッファ内の次のパケットが仮想パケットであることを判定することと、バッファ内の次のパケットが仮想パケットであることの判定に応答して、仮想パケットを破棄することとを含む。
2019500767.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークパケットスケジューラの複数のインスタンスを同期させるための方法であって、
第１のネットワークパケットスケジューラによって、複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラから、複数のトラフィッククラスのトラフィッククラス毎に仮想パケットを受信し、ネットワークパケットの相対的伝送優先順位を定義することと、
前記第１のネットワークパケットスケジューラによって、前記複数のトラフィッククラスの第１のトラフィッククラスのネットワークパケットを受信することと、
前記第１のネットワークパケットスケジューラによって、各仮想パケットをトラフィッククラス毎に作成される複数の仮想接続の仮想接続の中に伝送することと、
前記第１のネットワークパケットスケジューラによって、ネットワークパケットまたは仮想パケットを伝送のためのバッファ内の次のパケットとしてスケジューリングすることと、
前記第１のネットワークパケットスケジューラによって、前記バッファ内の次のパケットが仮想パケットであることを判定することと、
前記第１のネットワークパケットスケジューラによって、前記バッファ内の次のパケットが仮想パケットであることの判定に応答して、前記仮想パケットを破棄することと
を含む、方法。
【請求項２】
仮想パケットを受信することはさらに、
前記第１のネットワークパケットスケジューラによって、相互のネットワークパケットスケジューラから、トラフィッククラスのペアリング毎に仮想パケットを受信し、さらに、前記トラフィッククラスの伝送のための絶対帯域幅限界および前記トラフィッククラスのための絶対帯域幅限界を伝送するネットワークリンクを定義すること
を含む、請求項１に記載の方法。
【請求項３】
前記第１のネットワークパケットスケジューラによって、前記第１のトラフィッククラスのためのネットワークパケットおよび各仮想パケットを前記複数のトラフィッククラスに対応する複数の待ち行列の第１の待ち行列の中に入れることをさらに含む、請求項１に記載の方法。
【請求項４】
前記第１のトラフィッククラスのためのネットワークパケットおよび各仮想パケットを待ち行列に入れることはさらに、前記第１のネットワークパケットスケジューラによって、前記待ち行列内のネットワークパケットの数と前記第１のトラフィッククラスのための仮想パケットの数との和が、前記待ち行列の最大サイズを超えることに応答して、前記第１のトラフィッククラスのための各仮想パケットを前記第１の待ち行列の中に入れることを含む、請求項３に記載の方法。
【請求項５】
前記第１のネットワークパケットスケジューラによって、前記バッファ内の第２の次のパケットがネットワークパケットであることを判定することと、
前記第１のネットワークパケットスケジューラによって、前記第２の次のパケットがネットワークパケットであることの判定に応答して、前記バッファから前記ネットワークパケットを伝送することと
をさらに含む、請求項１に記載の方法。
【請求項６】
ネットワークパケットスケジューラの複数のインスタンスを同期させるための方法であって、
第１のネットワークパケットスケジューラによって、複数のトラフィッククラスのトラフィッククラス毎に複数のノードの第１のノードを選択し、ネットワークパケットの相対的伝送優先順位を定義することと、
前記第１のネットワークパケットスケジューラによって、前記第１のノードが、前記複数のトラフィッククラスの第１のトラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定することと、
前記第１のネットワークパケットスケジューラによって、前記第１のノードが非ゼロバイトカウントを有することの判定に応答して、前記第１のトラフィッククラスのための仮想パケットを複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラにブロードキャストすることと
を含む、方法。
【請求項７】
前記複数のノードの第２のノードを選択することと、
前記第１のネットワークパケットスケジューラによって、前記第２のノードが、前記複数のトラフィッククラスの第２のトラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定することと、
前記第１のネットワークパケットスケジューラによって、前記第２のノードが非ゼロバイトカウントを有することの判定に応答して、前記第２のトラフィッククラスのための仮想パケットを相互のネットワークパケットスケジューラにブロードキャストすることと
をさらに含む、請求項６に記載の方法。
【請求項８】
前記第１のネットワークパケットスケジューラによって、前記第１のトラフィッククラスのための仮想パケットの最後のブロードキャスト以降の周期の間に待ち行列に入れられた前記第１のトラフィッククラスの着信ネットワークパケットのバイト数の識別子を含む、前記第１のトラフィッククラスのための仮想パケットを生成することをさらに含む、請求項７に記載の方法。
【請求項９】
前記第１のネットワークパケットスケジューラによって、前記第１のトラフィッククラスの着信ネットワークパケットを前記第１のノードにおいて待ち行列に入れることをさらに含み、
前記第１のトラフィッククラスのための仮想パケットをブロードキャストすることはさらに、前記第１のネットワークパケットスケジューラによって、前記最後のブロードキャスト以降の周期の間に前記第１のトラフィッククラスの着信ネットワークパケットを待ち行列に入れたことに応答して、前記第１のネットワークパケットスケジューラによって、前記仮想パケットをブロードキャストすることを含む、請求項８に記載の方法。
【請求項１０】
ノードを選択すること、非ゼロバイトカウントを判定すること、および仮想パケットをブロードキャストすることはさらに、前記第１のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、
前記第１のネットワークパケットスケジューラによって、最下層トラフィッククラスに対応するノードを選択し、さらに、前記トラフィッククラスの伝送のための絶対帯域幅限界を定義することと、
前記第１のネットワークパケットスケジューラによって、前記最下層トラフィッククラスに対応するノードが、前記最下層トラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定することと、
前記第１のネットワークパケットスケジューラによって、前記最下層トラフィッククラスのための仮想パケットをブロードキャストすることと
を含む、請求項７に記載の方法。
【請求項１１】
複数のネットワークパケットスケジューラを含む、システムであって、前記複数のネットワークパケットスケジューラの第１のネットワークパケットスケジューラは、
前記複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラから、前記複数のトラフィッククラスのトラフィッククラス毎に仮想パケットを受信し、ネットワークパケットの相対的伝送優先順位を定義することと、
前記複数のトラフィッククラスの第１のトラフィッククラスのネットワークパケットを受信することと、
各仮想パケットをトラフィッククラス毎に作成される複数の仮想接続の仮想接続の中に伝送することと、
ネットワークパケットまたは仮想パケットを伝送のためのバッファ内の次のパケットとしてスケジューリングすることと、
前記バッファ内の次のパケットが仮想パケットであることを判定することと、
前記バッファ内の次のパケットが仮想パケットであることの判定に応答して、前記仮想パケットを破棄することと
を行うように構成される、システム。
【請求項１２】
前記第１のネットワークパケットスケジューラはさらに、
相互のネットワークパケットスケジューラから、トラフィッククラスのペアリング毎に仮想パケットを受信し、さらに、前記トラフィッククラスの伝送のための絶対帯域幅限界および前記トラフィッククラスのための絶対帯域幅限界を伝送するネットワークリンクを定義するように構成される、請求項１１に記載のシステム。
【請求項１３】
前記第１のネットワークパケットスケジューラはさらに、
前記第１のトラフィッククラスのためのネットワークパケットおよび各仮想パケットを前記複数のトラフィッククラスに対応する複数の待ち行列の第１の待ち行列の中に入れるように構成される、請求項１１に記載のシステム。
【請求項１４】
前記第１のネットワークパケットスケジューラはさらに、
前記第１の待ち行列内のネットワークパケットの数と前記第１のトラフィッククラスのための仮想パケットの数との和が、前記待ち行列の最大サイズを超えることに応答して、前記第１のトラフィッククラスのための各仮想パケットを前記待ち行列の中に入れるように構成される、請求項１３に記載のシステム。
【請求項１５】
前記第１のネットワークパケットスケジューラはさらに、
前記バッファ内の第２の次のパケットがネットワークパケットであることを判定することと、
前記バッファ内の第２の次のパケットがネットワークパケットであることの判定に応答して、前記第２のネットワークパケットを伝送することと
を行うように構成される、請求項１１に記載のシステム。
【請求項１６】
前記第１のネットワークパケットスケジューラはさらに、
複数のトラフィッククラスのトラフィッククラス毎に複数のノードの第１のノードを選択し、ネットワークパケットの相対的伝送優先順位を定義することと、
前記第１のノードが、前記複数のトラフィッククラスの第１のトラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定することと、
前記第１のノードが非ゼロバイトカウントを有することの判定に応答して、前記第１のトラフィッククラスのための仮想パケットを前記複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラにブロードキャストすることと
を行うように構成される、請求項１５に記載のシステム。
【請求項１７】
前記第１のネットワークパケットスケジューラはさらに、
複数のトラフィッククラスのトラフィッククラス毎に複数のノードの第２のノードを選択し、ネットワークパケットの相対的伝送優先順位を定義することと、
前記第２のノードが、前記複数のトラフィッククラスの第２のトラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定することと、
前記第２のノードが非ゼロバイトカウントを有することの判定に応答して、前記第２のトラフィッククラスのための仮想パケットを前記複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラにブロードキャストすることと
を行うように構成される、請求項１６に記載のシステム。
【請求項１８】
前記第１のネットワークパケットスケジューラはさらに、
前記第１のトラフィッククラスのための仮想パケットの最後のブロードキャスト以降の周期の間に待ち行列に入れられた前記第１のトラフィッククラスの着信ネットワークパケットのバイト数の識別子を含む、前記第１のトラフィッククラスのための仮想パケットを生成すること
を行うように構成される、請求項１７に記載のシステム。
【請求項１９】
前記第１のネットワークパケットスケジューラはさらに、
前記第１のトラフィッククラスの着信ネットワークパケットを前記第１のノードにおいて待ち行列に入れることと、
前記最後のブロードキャスト以降の周期の間に前記第１のトラフィッククラスの着信ネットワークパケットが待ち行列に入れられたことに応答して、前記第１のトラフィッククラスのための仮想パケットをブロードキャストすることと
を行うように構成される、請求項１８に記載のシステム。
【請求項２０】
前記第１のネットワークパケットスケジューラはさらに、前記ネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、
最下層トラフィッククラスに対応するノードを選択し、さらに、前記トラフィッククラスの伝送のための絶対帯域幅限界を定義することと、
前記最下層トラフィッククラスに対応するノードが、前記最下層トラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定することと、
前記最下層トラフィッククラスのための仮想パケットをブロードキャストすることと
を行うように構成される、請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本願は、２０１５年１０月３０日に出願された、米国非仮出願第１４／９２７８６７号、発明の名称“Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  Ｆｏｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｐａｃｋｅｔ  Ｓｃｈｅｄｕｌｉｎｇ”の利益および該出願に対する優先権を主張するものであり、該出願は、あらゆる目的のためにその全体が参照により本明細書中に援用される。
【０００２】
（開示の分野）
本願は、概して、ネットワークパケットスケジューリングに関する。具体的には、本願は、複数のネットワークパケットスケジューラ作業を並行して同期させるためのシステムおよび方法に関する。
【背景技術】
【０００３】
（開示の背景）
ネットワークパケットスケジューラは、ネットワークトラフィックを調整および優先順位付けするために使用される。パケット切替通信ネットワーク内のノード上で、またはそれによって実行されると、ネットワークスケジューラは、バッファとして作用する、ノードのネットワークインターフェースコントローラの伝送および受信待ち行列内のネットワークパケットのシーケンスを管理する、アービタプログラムとなる。ネットワークパケットスケジューラは、バッファから次に送信すべきネットワークパケットを決定する。バッファ空間は、異なる待ち行列に分割されてもよく、それらはそれぞれ、構成されるパケット分類ルールに従って、１つのフローのパケットを保持する。例えば、パケットは、そのソースおよび宛先ＩＰアドレスによって、フローに分割されることができる。
【発明の概要】
【課題を解決するための手段】
【０００４】
（開示の簡単な説明）
ネットワークスケジューリングアルゴリズムおよびその関連付けられた設定は、ネットワークスケジューラがバッファを管理する方法を判定する。適応仮想待ち行列、クラスベースの待ち行列、クレジットベースの公平待ち行列、不足ラウンドロビン、階層公平サービス、階層トークンバケット、公平待ち行列、加重公平待ち行列、階層加重公平待ち行列等、ネットワークパケットスケジューリングのために使用される、多数のアルゴリズムが存在する。これらのアルゴリズムの典型的実装は、高価なヒープ／ソート動作を使用して、ネットワークトラフィックを優先順位付けする。これらの動作は、ネットワークパケットスケジューリングを非常に高ＣＰＵ集約的プロセスにする。ネットワークパケットスケジューリングアルゴリズムは、並列方式で動作するように設計されていないため、複数のパケットスケジューラのインスタンス化は、１つを上回るインスタンスが、パケットを同時に同一ボトルネックリンクに向かって送信する場合、問題を生じさせ得る。
【０００５】
それに応じて、本開示は、ネットワークパケットスケジューラの複数のインスタンスを同期させるためのシステムおよび方法を対象とする。本同期化は、パケットスケジューラの全てのインスタンスにブロードキャストされる「仮想」パケットを通して行われることができる。これらの仮想パケットは、ボトルネックリンク−トラフィッククラスペア毎に各インスタンスによって、周期的に送信される。ネットワークパケットスケジューラが、恣意的トラフィッククラス階層をサポートする場合、情報は、その子として実際の接続を有する、最下層トラフィッククラスのためだけに送信される必要がある。そのような仮想パケットのサイズは、最後のブロードキャスト以降の周期の間にトラフィッククラスに入れられた待ち行列のバイトの数であり得る。各パケットスケジューラインスタンスは、本周期の間に待ち行列に入れられたトラフィックを有する全てのトラフィッククラスのための本情報をブロードキャストしてもよい。
【０００６】
ブロードキャスト情報を受信する他のパケットスケジューラインスタンスは、受信された仮想パケットを仮想パケットによって識別されるトラフィッククラスに対応する仮想接続に提供する（例えば、１つの仮想接続が、トラフィッククラス毎に作成されてもよい）。これらの仮想パケットは、実際のパケットと類似様式で待ち行列に入れられ、待ち行列が最大待ち行列サイズに到達した、またはそれを超えた場合でも、待ち行列に追加される。仮想パケットが、パケットスケジューラによってスケジューリングされると、それらは、破棄され、実際の伝送のために使用されない。それに応じて、仮想パケットは、パケットスケジューラインスタンスの全てにおけるパケットスケジューリング情報を同期させ、複数のパケットスケジューラインスタンスを横断して一意のパケットスケジューリング階層を維持する。仮想パケットをブロードキャストする際の遅延のため、多くの実装では、パケットスケジューラインスタンスは、必ずしも、正確に同一のパケットスケジューラ情報を有していないが、その状態は、トラフィック規制および優先順位付けのための非常に低許容誤差を維持するために十分に近くあり得る。
【０００７】
分散型パケットスケジューリングが、パケット処理およびパケットスケジューリング機能が同一バイナリ（デーモン、ドライバ、または他の実行可能コード）または別個のバイナリ内に常駐する場合、使用されることができる。異なる形態のプロセス間通信（ＩＰＣ）を使用することによって、分散型パケットスケジューリングは、異なるボックス（クラスタメンバまたは負荷バランシングピア）上に常駐するパケットスケジューラによって使用されてもよい。
【０００８】
これは、外部負荷バランサの存在下等、以前は不可能であった展開においてサービスの質（ＱｏＳ）制御を使用することを可能にする。分散型パケットスケジューリングは、線形にスケジューリングするため、単に、スケジューリングをハンドリングするために専用のＣＰＵの数を増加させることによって、ネットワークパケットスケジューリング容量を追加することが可能である。さらに、これは、クラウドサービスとして展開される「仮想ＱｏＳ」を可能にし、任意の数の地理的に異種場所が均一分散型ポリシ空間内で組み合わせられることを可能にする。
【０００９】
本ソリューションの先述および他の目的、側面、特徴、および利点は、付随の図面と併せて解釈される以下の説明を参照することによって、より明白となり、より理解されるであろう。
【図面の簡単な説明】
【００１０】
【図１Ａ】図１Ａは、クライアントがアプライアンスを介してサーバにアクセスするためのネットワーク環境の実施形態のブロック図である。
【図１Ｂ】図１Ｂは、アプライアンスを介してサーバからクライアントにコンピュータ環境を配信するための環境の実施形態のブロック図である。
【図１Ｃ】図１Ｃは、アプライアンスを介してサーバからクライアントにコンピュータ環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｄ】図１Ｄは、アプライアンスを介してサーバからクライアントにコンピュータ環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｅ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｆ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｇ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｈ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図２Ａ】図２Ａは、クライアントとサーバとの間の通信を処理するためのアプライアンスの実施形態のブロック図である。
【図２Ｂ】図２Ｂは、クライアントとサーバとの間の通信を最適化、加速、負荷平衡、およびルーティングするためのアプライアンスの別の実施形態のブロック図である。
【図３】図３は、アプライアンスを介してサーバと通信するためのクライアントの実施形態のブロック図である。
【図４Ａ】図４Ａは、仮想化環境の実施形態のブロック図である。
【図４Ｂ】図４Ｂは、仮想化環境の別の実施形態のブロック図である。
【図４Ｃ】図４Ｃは、仮想化されたアプライアンスの実施形態のブロック図である。
【図５Ａ】図５Ａは、マルチコアシステムで並列性を実装することへのアプローチの実施形態のブロック図である。
【図５Ｂ】図５Ｂは、マルチコアシステムを利用するシステムの実施形態のブロック図である。
【図５Ｃ】図５Ｃは、マルチコアシステムの側面の別の実施形態のブロック図である。
【図６】図６は、クラスタシステムの実施形態のブロック図である。
【図７Ａ】図７Ａは、仮想パケットを受信する方法の実施形態のフローチャートである。
【図７Ｂ】図７Ｂは、仮想パケットをブロードキャストする方法の実施形態のフローチャートである。
【図７Ｃ】図７Ｃは、ネットワークおよび仮想パケットを保持するネットワークパケットスケジューラならびに待ち行列の実施形態のブロック図である。
【図７Ｄ】図７Ｄは、仮想パケットの実施形態の略図である。
【発明を実施するための形態】
【００１１】
本ソリューションの特徴および利点は、同様の参照記号が全体を通して対応する要素を識別する、図面と併せて解釈されるときに、以下に記載される発明を実施するための形態から、より明白となるであろう。図面では、同様の参照数字は、概して、同じ、機能的に類似する、および／または構造的に類似する要素を示す。
【００１２】
以下の種々の実施形態の説明を読む目的で、本明細書の節およびそれらの個別の内容の以下の説明が役立ち得る。
第Ａ節は、本明細書に説明される実施形態を実践するために有用であり得る、ネットワーク環境およびコンピュータ環境を説明する。
第Ｂ節は、コンピュータ環境を遠隔ユーザに配信するためのシステムおよび方法の実施形態を説明する。
第Ｃ節は、クライアントとサーバとの間の通信を加速するためのシステムおよび方法の実施形態を説明する。
第Ｄ節は、アプリケーション配信コントローラを仮想化するためのシステムおよび方法の実施形態を説明する。
第Ｅ節は、マルチコアアーキテクチャおよび環境を提供するためのシステムおよび方法の実施形態を説明する。
第Ｆ節は、クラスタ化されたアプライアンスアーキテクチャ環境を提供するためのシステムおよび方法の実施形態を説明する。
第Ｇ節は、複数のネットワークパケットスケジューラを同期化するためのシステムおよび方法の実施形態を説明する。
【００１３】
Ａ．ネットワークおよびコンピュータ環境
アプライアンスおよび／またはクライアントのシステムおよび方法の実施形態の詳細について議論にすることに先立って、そのような実施形態が展開され得る、ネットワークおよびコンピュータ環境について議論することが役立ち得る。ここで図１Ａを参照すると、ネットワーク環境の実施形態が描写されている。要するに、ネットワーク環境は、１つまたはそれを上回るネットワーク１０４、１０４’（概して、ネットワーク１０４と称される）を介して１つまたはそれを上回るサーバ１０６ａ−１０６ｎ（概して、サーバ１０６または遠隔マシン１０６とも称される）と通信する１つまたはそれを上回るクライアント１０２ａ−１０２ｎ（概して、ローカルマシン１０２またはクライアント１０２とも称される）を備える。いくつかの実施形態では、クライアント１０２は、アプライアンス２００を介してサーバ１０６と通信する。
【００１４】
図１Ａは、クライアント１０２とサーバ１０６との間のネットワーク１０４およびネットワーク１０４’を示すが、クライアント１０２およびサーバ１０６は、同一ネットワーク１０４上にあってもよい。ネットワーク１０４および１０４’は、同一タイプのネットワークまたは異なるタイプのネットワークであることができる。ネットワーク１０４および／またはネットワーク１０４’は、企業イントラネット、メトロポリタンエリアネットワーク（ＭＡＮ）等のローカルエリアネットワーク（ＬＡＮ）、またはインターネットまたはワールドワイドウェブ等の広域ネットワーク（ＷＡＮ）であることができる。一実施形態では、ネットワーク１０４’は、プライベートネットワークであってもよく、ネットワーク１０４は、公衆ネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、プライベートネットワークであってもよく、ネットワーク１０４’は、公衆ネットワークであってもよい。別の実施形態では、ネットワーク１０４および１０４’は両方とも、プライベートネットワークであってもよい。いくつかの実施形態では、クライアント１０２は、企業データセンタに位置するサーバ１０６へのネットワーク１０４を経由したＷＡＮ接続を介して通信する、企業の支店に位置してもよい。
【００１５】
ネットワーク１０４および／または１０４’は、任意のタイプおよび／または形態のネットワークであってもよく、以下、すなわち、２点間ネットワーク、放送ネットワーク、広域ネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ＡＴＭ（非同期転送モード）ネットワーク、ＳＯＮＥＴ（同期光ネットワーク）ネットワーク、ＳＤＨ（同期デジタル階層）ネットワーク、無線ネットワーク、および有線ネットワークのうちのいずれかを含んでもよい。いくつかの実施形態では、ネットワーク１０４は、赤外線チャネルまたは衛星帯等の無線リンクを備えてもよい。ネットワーク１０４および／または１０４’のトポロジは、バス、スター、またはリングネットワークトポロジであってもよい。ネットワーク１０４および／または１０４’およびネットワークトポロジは、本明細書に説明される動作をサポートすることが可能である、当業者に公知であるもの等の任意のネットワークまたはネットワークトポロジであってもよい。
【００１６】
図１Ａに示されるように、インターフェースユニット２００またはゲートウェイ２００とも称され得る、アプライアンス２００が、ネットワーク１０４と１０４’との間に示されている。いくつかの実施形態では、アプライアンス２００は、ネットワーク１０４上に位置してもよい。例えば、企業の支店が、支店においてアプライアンス２００を展開してもよい。他の実施形態では、アプライアンス２００は、ネットワーク１０４’上に位置してもよい。例えば、アプライアンス２００は、企業データセンタに位置してもよい。さらに別の実施形態では、複数のアプライアンス２００が、ネットワーク１０４上に展開されてもよい。いくつかの実施形態では、例えば、複数のアプライアンス２００が、ネットワーク１０４’上に展開されてもよい。一実施形態では、第１のアプライアンス２００が、第２のアプライアンス２００’と通信する。他の実施形態では、アプライアンス２００は、任意のクライアント１０２またはクライアント１０２と同一または異なるネットワーク１０４、１０４’上のサーバ１０６の一部であり得る。１つまたはそれを上回るアプライアンス２００は、クライアント１０２とサーバ１０６との間のネットワークまたはネットワーク通信内の任意の点に位置してもよい。
【００１７】
いくつかの実施形態では、アプライアンス２００は、ＮｅｔＳｃａｌｅｒ（Ｒ）デバイスと称される、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ  Ｆｌｏｒｉｄａ）製のネットワークデバイスのうちのいずれかを備える。他の実施形態では、アプライアンス２００は、Ｆ５  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷｅｂＡｃｃｅｌｅｒａｔｏｒおよびＢｉｇＩＰと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、ＤＸ加速デバイスプラットフォームおよび／またはＪｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ））製のＳＡ７００、ＳＡ２０００、ＳＡ４０００、およびＳＡ６０００デバイス等のＳＳＬ  ＶＰＮシリーズのデバイスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２００は、Ｃｉｓｃｏ  ＡＣＥアプリケーション制御エンジンモジュールサービスソフトウェアおよびネットワークモジュール、およびＣｉｓｃｏ  ＡＶＳシリーズアプリケーション速度システム等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（ＳａｎＪｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のアプリケーション加速および／またはセキュリティ関連アプライアンスおよび／またはソフトウェアを含む。
【００１８】
一実施形態では、本システムは、複数の論理的にグループ化されたサーバ１０６を含んでもよい。これらの実施形態では、サーバの論理グループは、サーバファーム３８と称されてもよい。これらの実施形態のうちのいくつかでは、サーバ１０６は、地理的に分散されてもよい。ある場合には、ファーム３８は、単一のエンティティとして運営されてもよい。他の実施形態では、サーバファーム３８は、複数のサーバファーム３８を備える。一実施形態では、サーバファームは、１つまたはそれを上回るクライアント１０２の代わりに、１つまたはそれを上回るアプリケーションを実行する。
【００１９】
各ファーム３８内のサーバ１０６は、異種であり得る。サーバ１０６のうちの１つまたはそれを上回るものが、１つのタイプのオペレーティングシステムプラットフォーム（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷＩＮＤＯＷＳ  ＮＴ）に従って動作することができる一方で、他のサーバ１０６のうちの１つまたはそれを上回るものは、別のタイプのオペレーティングシステムプラットフォーム（例えば、Ｕｎｉｘ（登録商標）またはＬｉｎｕｘ（登録商標））に従って動作することができる。各ファーム３８のサーバ１０６は、同一ファーム３８内の別のサーバ１０６に物理的に近接する必要はない。したがって、ファーム３８として論理的にグループ化されたサーバ１０６のグループは、広域ネットワーク（ＷＡＮ）接続または中域ネットワーク（ＭＡＮ）接続を使用して、相互接続されてもよい。例えば、ファーム３８は、異なる大陸、または大陸、国、州、都市、キャンパス、または部屋の異なる領域の中に物理的に位置する、サーバ１０６を含んでもよい。ファーム３８内のサーバ１０６の間のデータ伝送速度は、サーバ１０６がローカルネットワーク（ＬＡＮ）接続または何らかの形態の直接接続を使用して接続される場合に、増加されることができる。
【００２０】
サーバ１０６は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、またはゲートウェイサーバと称されてもよい。いくつかの実施形態では、サーバ１０６は、アプリケーションサーバとして、またはマスタアプリケーションサーバとして機能する能力を有してもよい。一実施形態では、サーバ１０６は、アクティブディレクトリを含んでもよい。クライアント１０２はまた、クライアントノードまたはエンドポイントと称されてもよい。いくつかの実施形態では、クライアント１０２は、サーバ上のアプリケーションへのアクセスを求めるクライアントノードとして、および他のクライアント１０２ａ−１０２ｎのためのホスト型アプリケーションへのアクセスを提供するアプリケーションサーバとしての両方で機能する能力を有する。
【００２１】
いくつかの実施形態では、クライアント１０２は、サーバ１０６と通信する。一実施形態では、クライアント１０２は、ファーム３８内のサーバ１０６のうちの１つと直接通信する。別の実施形態では、クライアント１０２は、ファーム３８内のサーバ１０６と通信するように、プログラム隣接アプリケーションを実行する。なおも別の実施形態では、サーバ１０６は、マスタノードの機能性を提供する。いくつかの実施形態では、クライアント１０２は、ネットワーク１０４を通してファーム３８内のサーバ１０６と通信する。ネットワーク１０４を経由して、クライアント１０２は、例えば、ファーム３８内のサーバ１０６ａ−１０６ｎによってホストされる種々のアプリケーションの実行を要求し、表示するためにアプリケーション実行の結果の出力を受信することができる。いくつかの実施形態では、マスタノードのみが、要求されたアプリケーションをホストするサーバ１０６’と関連付けられるアドレス情報を識別して提供するために要求される機能性を提供する。
【００２２】
一実施形態では、サーバ１０６は、ウェブサーバの機能性を提供する。別の実施形態では、サーバ１０６ａは、クライアント１０２から要求を受信し、要求を第２のサーバ１０６ｂに自動転送し、サーバ１０６ｂからの要求への応答とともに、クライアント１０２による要求に応答する。なおも別の実施形態では、サーバ１０６は、クライアント１０２に利用可能なアプリケーションの列挙、およびアプリケーションの列挙によって識別されるアプリケーションをホストするサーバ１０６と関連付けられるアドレス情報を獲得する。さらに別の実施形態では、サーバ１０６は、ウェブインターフェースを使用して、要求への応答をクライアント１０２に提示する。一実施形態では、クライアント１０２は、識別されたアプリケーションにアクセスするようにサーバ１０６と直接通信する。別の実施形態では、クライアント１０２は、サーバ１０６上の識別されたアプリケーションの実行によって生成される、表示データ等のアプリケーション出力データを受信する。
【００２３】
ここで図１Ｂを参照すると、複数のアプライアンス２００を展開するネットワーク環境の実施形態が描写されている。第１のアプライアンス２００が、第１のネットワーク１０４上に、第２のアプライアンス２００’が、第２のネットワーク１０４’上に展開されてもよい。例えば、企業が、支店において第１のアプライアンス２００を、データセンタにおいて第２のアプライアンス２００’を展開してもよい。別の実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、同一のネットワーク１０４またはネットワーク１０４’上に展開される。例えば、第１のアプライアンス２００は、第１のサーバファーム３８のために展開されてもよく、第２のアプライアンス２００は、第２のサーバファーム３８’のために展開されてもよい。別の実施例では、第１のアプライアンス２００が、第１の支店において展開されてもよい一方で、第２のアプライアンス２００’は、第２の支店’において展開されてもよい。いくつかの実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、ネットワークトラフィックまたはクライアントとサーバとの間のアプリケーションおよびデータの配信を加速するように、相互と協力して、または連動して作動する。
【００２４】
ここで図１Ｃを参照すると、１つまたはそれを上回るＷＡＮ最適化アプライアンス２０５、２０５’の間等で１つまたはそれを上回る他のタイプのアプライアンスとともにアプライアンス２００を展開する、ネットワーク環境の別の実施形態が描写されている。例えば、第１のＷＡＮ最適化アプライアンス２０５が、ネットワーク１０４と１０４’との間に示され、第２のＷＡＮ最適化アプライアンス２０５’が、アプライアンス２００と１つまたはそれを上回るサーバ１０６との間に展開されてもよい。一例として、企業が、支店において第１のＷＡＮ最適化アプライアンス２０５を、データセンタにおいて第２のＷＡＮ最適化アプライアンス２０５’を展開してもよい。いくつかの実施形態では、アプライアンス２０５は、ネットワーク１０４’上に位置してもよい。他の実施形態では、アプライアンス２０５’は、ネットワーク１０４上に位置してもよい。いくつかの実施形態では、アプライアンス２０５’は、ネットワーク１０４’またはネットワーク１０４”上に位置してもよい。一実施形態では、アプライアンス２０５および２０５’は、同一ネットワーク上にある。別の実施形態では、アプライアンス２０５および２０５’は、異なるネットワーク上にある。別の実施例では、第１のＷＡＮ最適化アプライアンス２０５が、第１のサーバファーム３８のために、第２のＷＡＮ最適化アプライアンス２０５’が、第２のサーバファーム３８’のために展開されてもよい。
【００２５】
一実施形態では、アプライアンス２０５は、ＷＡＮ接続へ、および／またはそこからのトラフィック等の任意のタイプおよび形態のネットワークトラフィックの性能、動作、またはサービス品質を加速、最適化、または別様に改良するためのデバイスである。いくつかの実施形態では、アプライアンス２０５は、性能強化プロキシである。他の実施形態では、アプライアンス２０５は、ＷＡＮ最適化コントローラと称されることもある、任意のタイプおよび形態のＷＡＮ最適化または加速デバイスである。一実施形態では、アプライアンス２０５は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＣｌｏｕｄＢｒｉｄｇｅ（Ｒ）と称される製品実施形態のうちのいずれかである。他の実施形態では、アプライアンス２０５は、Ｆ５  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＢＩＧ−ＩＰリンクコントローラおよびＷＡＮｊｅｔと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、Ｊｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＸおよびＷＸＣ  ＷＡＮ加速デバイスプラットフォームのうちのいずれかを含む。いくつかの実施形態では、アプライアンス２０５は、Ｒｉｖｅｒｂｅｄ  Ｔｅｃｈｎｏｌｏｇｙ（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のスチールヘッドラインのＷＡＮ最適化アプライアンスのうちのいずれかを含む。他の実施形態では、アプライアンス２０５は、Ｅｘｐａｎｄ  Ｎｅｔｗｏｒｋｓ  Ｉｎｃ．（Ｒｏｓｅｌａｎｄ，  Ｎｅｗ  Ｊｅｒｓｅｙ）製のＷＡＮ関連デバイスのうちのいずれかを含む。一実施形態では、アプライアンス２０５は、Ｐａｃｋｅｔｅｅｒによって提供されるＰａｃｋｅｔＳｈａｐｅｒ、ｉＳｈａｒｅｄ、およびＳｋｙＸ製品実施形態等のＰａｃｋｅｔｅｅｒ  Ｉｎｃ．（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＡＮ関連アプライアンスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２０５は、Ｃｉｓｃｏ広域ネットワークアプリケーションサービスソフトウェアおよびネットワークモジュール、および広域ネットワークエンジンアプライアンス等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のＷＡＮ関連アプライアンスおよび／またはソフトウェアを含む。
【００２６】
一実施形態では、アプライアンス２０５は、支店または遠隔オフィスのためのアプリケーションおよびデータ加速サービスを提供する。一実施形態では、アプライアンス２０５は、広域ファイルサービス（ＷＡＦＳ）の最適化を含む。別の実施形態では、アプライアンス２０５は、共通インターネットファイルシステム（ＣＩＦＳ）プロトコルを介して等、ファイルの配信を加速する。他の実施形態では、アプライアンス２０５は、アプリケーションおよびデータの配信を加速するように、メモリおよび／または記憶装置の中でキャッシングを提供する。一実施形態では、アプライアンス２０５は、任意のレベルのネットワークスタックにおいて、または任意のプロトコルまたはネットワーク層において、ネットワークトラフィックの圧縮を提供する。別の実施形態では、アプライアンス２０５は、ＷＡＮ接続を経由したアプリケーションおよびデータの配信を加速するように、トランスポート層プロトコル最適化、フロー制御、性能強化または修正、および／または管理を提供する。例えば、一実施形態では、アプライアンス２０５は、トランスポート制御プロトコル（ＴＣＰ）最適化を提供する。他の実施形態では、アプライアンス２０５は、任意のセッションまたはアプリケーション層プロトコルのための最適化、フロー制御、性能強化または修正、および／または管理を提供する。
【００２７】
別の実施形態では、アプライアンス２０５は、存在、機能性、または能力を別のアプライアンス２０５’にアナウンスするように、任意のタイプおよび形態のデータまたは情報を、ネットワークパケットのカスタムまたは標準ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションフィールドにエンコードする。別の実施形態では、アプライアンス２０５’は、ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションの両方でエンコードされるデータを使用して、別のアプライアンス２０５’と通信してもよい。例えば、アプライアンスは、ＷＡＮ加速等の機能性を果たす際に、または相互と連動して作動するために、アプライアンス２０５、２０５’によって使用される１つまたはそれを上回るパラメータを通信するようにＴＣＰオプションまたはＩＰヘッダフィールドまたはオプションを使用してもよい。
【００２８】
いくつかの実施形態では、アプライアンス２００は、アプライアンス２０５と２０５’との間で通信されるＴＣＰおよび／またはＩＰヘッダおよび／またはオプションフィールドの中でエンコードされる情報のうちのいずれかを保存する。例えば、アプライアンス２００は、クライアントとアプライアンス２０５および２０５’をトラバースするサーバとの間からのトランスポート層接続等のアプライアンス２００をトラバースするトランスポート層接続を終了させてもよい。一実施形態では、アプライアンス２００は、第１のトランスポート層接続を介して第１のアプライアンス２０５によって伝送されるトランスポート層パケットの中の任意のエンコードされた情報を識別して保存し、第２のトランスポート層接続を介してエンコードされた情報とともにトランスポート層パケットを第２のアプライアンス２０５’に通信する。
【００２９】
ここで図１Ｄを参照すると、クライアント１０２上でコンピュータ環境を配信する、および／または動作させるためのネットワーク環境が描写されている。いくつかの実施形態では、サーバ１０６は、コンピュータ環境またはアプリケーションおよび／またはデータファイルを１つまたはそれを上回るクライアント１０２に配信するためのアプリケーション配信システム１９０を含む。要するに、クライアント１０は、ネットワーク１０４、１０４’およびアプライアンス２００を介してサーバ１０６と通信する。例えば、クライアント１０２は、企業の遠隔オフィス、例えば、支店内に常駐してもよく、サーバ１０６は、企業データセンタに常駐してもよい。クライアント１０２は、クライアントエージェント１２０と、コンピュータ環境１５とを備える。コンピュータ環境１５は、データファイルにアクセスする、それを処理または使用する、アプリケーションを実行または動作させてもよい。コンピュータ環境１５、アプリケーション、および／またはデータファイルは、アプライアンス２００および／またはサーバ１０６を介して配信されてもよい。
【００３０】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２へのコンピュータ環境１５またはその任意の部分の配信を加速する。一実施形態では、アプライアンス２００は、アプリケーション配信システム１９０によるコンピュータ環境１５の配信を加速する。例えば、本明細書に説明される実施形態は、中央企業データセンタから企業の支店等の遠隔ユーザ場所へのアプリケーションによって処理可能なストリーミングアプリケーションおよびデータファイルの配信を加速するために使用されてもよい。別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のトランスポート層トラフィックを加速する。アプライアンス２００は、１）トランスポート層接続プール、２）トランスポート層接続多重化、３）トランスポート制御プロトコルバッファリング、４）圧縮、および５）キャッシング等のサーバ１０６からクライアント１０２への任意のトランスポート層ペイロードを加速するための加速技法を提供してもよい。いくつかの実施態では、アプライアンス２００は、クライアント１０２からの要求に応答する際に、サーバ１０６の負荷平衡を提供する。他の実施形態では、アプライアンス２００は、１つまたはそれを上回るサーバ１０６へのアクセスを提供するように、プロキシまたはアクセスサーバとして作用する。別の実施形態では、アプライアンス２００は、ＳＳＬ  ＶＰＮ接続等のクライアント１０２の第１のネットワーク１０４からサーバ１０６の第２のネットワーク１０４’へのセキュアな仮想プライベートネットワーク接続を提供する。さらに他の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の接続および通信のアプリケーションファイアウォールセキュリティ、制御、および管理を提供する。
【００３１】
いくつかの実施形態では、アプリケーション配信管理システム１９０は、複数の実行方法に基づいて、かつポリシエンジン１９５を介して適用される任意の認証および承認ポリシに基づいて、コンピュータ環境を遠隔または別様にユーザのデスクトップに配信するアプリケーション配信技法を提供する。これらの技法を用いることで、遠隔ユーザは、任意のネットワーク接続されたデバイス１００から、コンピュータ環境およびサーバに記憶されたアプリケーションおよびデータファイルへのアクセスを取得してもよい。一実施形態では、アプリケーション配信システム１９０は、サーバ１０６上で常駐または実行してもよい。別の実施形態では、アプリケーション配信システム１９０は、複数のサーバ１０６ａ−１０６ｎ上で常駐または実行してもよい。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバファーム３８内で実行してもよい。一実施形態では、アプリケーション配信システム１９０を実行するサーバ１０６はまた、アプリケーションおよびデータファイルを記憶または提供してもよい。別の実施形態では、１つまたはそれを上回るサーバ１０６の第１のセットが、アプリケーション配信システム１９０を実行してもよく、異なるサーバ１０６ｎが、アプリケーションおよびデータファイルを記憶または提供してもよい。いくつかの実施形態では、アプリケーション配信システム１９０、アプリケーション、およびデータファイルはそれぞれ、異なるサーバ上に常駐または位置してもよい。さらに別の実施形態では、アプリケーション配信システム１９０の任意の部分が、アプライアンス２００または複数のアプライアンス上に常駐、実行、または記憶される、またはそれに分配されてもよい。
【００３２】
クライアント１０２は、データファイルを使用または処理するアプリケーションを実行するためのコンピュータ環境１５を含んでもよい。ネットワーク１０４、１０４’およびアプライアンス２００を介したクライアント１０２は、サーバ１０６からアプリケーションおよびデータファイルを要求してもよい。一実施形態では、アプライアンス２００は、クライアント１０２からサーバ１０６に要求を自動転送してもよい。例えば、クライアント１０２は、ローカルに記憶された、またはアクセス可能であるアプリケーションおよびデータファイルを有していない場合がある。要求に応答して、アプリケーション配信システム１９０および／またはサーバ１０６は、アプリケーションおよびデータファイルをクライアント１０２に配信してもよい。例えば、一実施形態では、サーバ１０６は、クライアント１０２上のコンピュータ環境１５内で動作するようにアプリケーションストリームとしてアプリケーションを伝送してもよい。
【００３３】
いくつかの実施形態では、アプリケーション配信システム１９０は、ＸｅｎＡｐｐ（Ｒ）またはＸｅｎＤｅｓｋｔｏｐ（Ｒ）等のＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  Ｓｕｉｔｅ（ＴＭ）（Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．）製の任意の部分および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｓのうちのいずれかを備える。一実施形態では、アプリケーション配信システム１９０は、遠隔表示プロトコルを介して、または別様に遠隔ベースまたはサーバベースの計算を介して、１つまたはそれを上回るアプリケーションをクライアント１０２またはユーザに配信してもよい。別の実施形態では、アプリケーション配信システム１９０は、アプリケーションのストリーミングを介して、１つまたはそれを上回るアプリケーションをクライアントまたはユーザに配信してもよい。
【００３４】
一実施形態では、アプリケーション配信システム１９０は、アプリケーションへのアクセス、アプリケーション実行方法の選択、およびアプリケーションの配信を制御および監視するためのポリシエンジン１９５を含む。いくつかの実施形態では、ポリシエンジン１９５は、ユーザまたはクライアント１０２がアクセスし得る、１つまたはそれを上回るアプリケーションを判定する。別の実施形態では、ポリシエンジン１９５は、どのようにしてアプリケーションがユーザまたはクライアント１０２に配信されるべきか、例えば、実行の方法を判定する。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバベースの計算、ローカル実行のためにローカルにアプリケーションをクライアント１２０にストリーム配信または配信すること等のアプリケーション実行の方法を選択する、複数の配信技法を提供する。
【００３５】
一実施形態では、クライアント１０２は、アプリケーションプログラムの実行を要求し、サーバ１０６を備えるアプリケーション配信システム１９０は、アプリケーションプログラムを実行する方法を選択する。いくつかの実施形態では、サーバ１０６は、クライアント１０２から証明書を受信する。別の実施形態では、サーバ１０６は、クライアント１０２から利用可能なアプリケーションの列挙の要求を受信する。一実施形態では、証明書の要求または受信に応答して、アプリケーション配信システム１９０は、クライアント１０２に利用可能な複数のアプリケーションプログラムを列挙する。アプリケーション配信システム１９０は、列挙されたアプリケーションを実行する要求を受信する。アプリケーション配信システム１９０は、例えば、ポリシエンジンのポリシに応答して、列挙されたアプリケーションを実行するための所定数の方法のうちの１つを選択する。アプリケーション配信システム１９０は、クライアント１０２が、サーバ１０６上のアプリケーションプログラムの実行によって生成されるアプリケーション出力データを受信することを可能にする、アプリケーションの実行の方法を選択してもよい。アプリケーション配信システム１９０は、アプリケーションを備える複数のアプリケーションファイルを読み出した後に、ローカルマシン１０がローカルでアプリケーションプログラムを実行することを可能にする、アプリケーションの実行の方法を選択してもよい。さらに別の実施形態では、アプリケーション配信システム１９０は、ネットワーク１０４を介してクライアント１０２にアプリケーションをストリーム配信するように、アプリケーションの実行の方法を選択してもよい。
【００３６】
クライアント１０２は、任意のタイプおよび／または形態のウェブブラウザ、ウェブベースのクライアント、クライアント・サーバアプリケーション、シンクライアントコンピューティングクライアント、Ａｃｔｉｖｅ  Ｘコントロール、またはＪａｖａ（登録商標）アプレット等の任意のタイプおよび／または形態のソフトウェア、プログラム、または実行可能命令、またはクライアント１０２上で実行することが可能な任意のタイプおよび／または形態の実行可能命令であることができる、アプリケーションを実行、動作、または別様に提供してもよい。いくつかの実施形態では、アプリケーションは、サーバ１０６上のクライアント１０２の代わりに実行される、サーバベースまたは遠隔ベースのアプリケーションであってもよい。一実施形態では、サーバ１０６は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製の独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコルまたはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製の遠隔デスクトッププロトコル（ＲＤＰ）等の任意のシンクライアントまたは遠隔表示プロトコルを使用して、クライアント１０２への出力を表示してもよい。アプリケーションは、任意のタイプのプロトコルを使用することができ、それは、例えば、ＨＴＴＰクライアント、ＦＴＰクライアント、Ｏｓｃａｒクライアント、またはＴｅｌｎｅｔクライアントであることができる。他の実施形態では、アプリケーションは、ソフトＩＰ電話等のＶｏＩＰ通信に関連する任意のタイプのソフトウェアを備える。さらなる実施形態では、アプリケーションは、ビデオおよび／またはオーディオをストリーミング配信するためのアプリケーション等のリアルタイムデータ通信に関連する任意のアプリケーションを備える。
【００３７】
いくつかの実施形態では、サーバ１０６またはサーバファーム３８は、シンクライアント計算を提供するアプリケーションまたは遠隔表示プレゼンテーションアプリケーション等の１つまたはそれを上回るアプリケーションを起動していてもよい。一実施形態では、サーバ１０６またはサーバファーム３８は、ＸｅｎＡｐｐ（Ｒ）またはＸｅｎＤｅｓｋｔｏｐ（Ｒ）等のＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  Ｓｕｉｔｅ（ＴＭ）（Ｃｉｔｒｉｘ
Ｓｙｓｔｅｍｓ，  Ｉｎｃ．）製の任意の部分および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（Ｒ）  Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓのうちのいずれかをアプリケーションとして実行する。一実施形態では、アプリケーションは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発されたＩＣＡクライアントである。他の実施形態では、アプリケーションは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって開発された遠隔デスクトップ（ＲＤＰ）クライアントを含む。また、サーバ１０６は、例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＭｉｃｒｏｓｏｆｔ  Ｅｘｃｈａｎｇｅ等のＥメールサービスを提供するアプリケーションサーバ、ウェブまたはインターネットサーバ、またはデスクトップ共有サーバ、または協調サーバであり得る、アプリケーションを起動してもよい。いくつかの実施形態では、アプリケーションのうちのいずれかは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって提供されるＧｏＴｏＭｅｅｔｉｎｇ（ＴＭ）、Ｃｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）によって提供されるＷｅｂＥｘ（ＴＭ）、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって提供されるＭｉｃｒｏｓｏｆｔ  Ｏｆｆｉｃｅ  Ｌｉｖｅ  Ｍｅｅｔｉｎｇ等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
【００３８】
依然として図１Ｄを参照すると、ネットワーク環境の実施形態は、監視サーバ１０６Ａを含んでもよい。監視サーバ１０６Ａは、任意のタイプおよび形態の性能監視サービス１９８を含んでもよい。性能監視サービス１９８は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および／または管理ソフトウェアおよび／またはハードウェアを含んでもよい。一実施形態では、性能監視サービス１９８は、１つまたはそれを上回る監視エージェント１９７を含む。監視エージェント１９７は、クライアント１０２、サーバ１０６、またはアプライアンス２００、２０５等のデバイス上で監視、測定、およびデータ収集アクティビティを行うための任意のソフトウェア、ハードウェア、またはその組み合わせを含む。いくつかの実施形態では、監視エージェント１９７は、Ｖｉｓｕａｌ
ＢａｓｉｃスクリプトまたはＪａｖａｓｃｒｉｐｔ（登録商標）等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント１９７は、デバイスの任意のアプリケーションおよび／またはユーザに対して透過的に実行する。いくつかの実施形態では、監視エージェント１９７は、アプリケーションまたはクライアントに影響を及ぼすことなくインストールおよび動作される。さらに別の実施形態では、監視エージェント１９７は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
【００３９】
いくつかの実施形態では、監視エージェント１９７は、所定の頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント１９７は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント１９７は、ウェブページまたはＨＴＴＰ応答の受信の要求の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント１９７は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント１９７は、任意の監視、測定、または収集されたデータを監視サービス１９８に報告または提供してもよい。一実施形態では、監視エージェント１９７は、スケジュールまたは所定の頻度に従って、情報を監視サービス１９８に伝送する。別の実施形態では、監視エージェント１９７は、イベントの検出に応じて、情報を監視サービス１９８に伝送する。
【００４０】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント、サーバ、サーバファーム、アプライアンス２００、アプライアンス２０５、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を行う。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＴＣＰまたはＵＤＰ接続等の任意のトランスポート層接続の監視および性能測定を行う。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ネットワーク待ち時間を監視して測定する。さらなる一実施形態では、監視サービス１９８および／または監視エージェント１９７は、帯域幅利用を監視して測定する。
【００４１】
他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、エンドユーザ応答時間を監視して測定する。いくつかの実施形態では、監視サービス１９８は、アプリケーションの監視および性能測定を行う。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションへの任意のセッションまたは接続の監視および性能測定を行う。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ブラウザの性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＨＴＴＰベースのトランザクションの性能を監視して測定する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、ボイスオーバーＩＰ（ＶｏＩＰ）アプリケーションまたはセッションの性能を監視して測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＩＣＡクライアントまたはＲＤＰクライアント等の遠隔表示プロトコルアプリケーションの性能を監視して測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のストリーミングメディアの性能を監視して測定する。なおもさらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、ホスト型アプリケーションまたはサービスとしてのソフトウェア（ＳａａＳ）配信モデルの性能を監視して測定する。
【００４２】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションに関連する１つまたはそれを上回るトランザクション、要求、または応答の監視および性能測定を行う。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の．ＮＥＴまたはＪ２ＥＥコール等のアプリケーション層スタックの任意の部分を監視して測定する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、データベースまたはＳＱＬトランザクションを監視して測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の方法、機能、またはアプリケーションプログラミングインターフェース（ＡＰＩ）コールを監視して測定する。
【００４３】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプライアンス２００および／またはアプライアンス２０５等の１つまたはそれを上回るアプライアンスを介したサーバからクライアントへのアプリケーションおよび／またはデータの配信の監視および性能測定を行う。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、仮想化されたアプリケーションの配信の性能を監視して測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ストリーミングアプリケーションの配信の性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアントへのデスクトップアプリケーションの配信および／またはクライアント上のデスクトップアプリケーションの実行の性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント／サーバアプリケーションの性能を監視して測定する。
【００４４】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０のためのアプリケーション性能管理を提供するように設計および構築される。例えば、監視サービス１９８および／または監視エージェント１９７は、Ｃｉｔｒｉｘプレゼンテーションサーバを介して、アプリケーションの配信の性能を監視、測定、および管理してもよい。本実施例では、監視サービス１９８および／または監視エージェント１９７は、個々のＩＣＡセッションを監視する。監視サービス１９８および／または監視エージェント１９７は、合計およびセッション毎のシステムリソース使用料、およびアプリケーションおよびネットワーキング性能を測定してもよい。監視サービス１９８および／または監視エージェント１９７は、所与のユーザおよび／またはユーザセッションのためのアクティブなサーバを識別してもよい。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０とアプリケーションおよび／またはデータベースサーバとの間のバックエンド接続を監視する。監視サービス１９８および／または監視エージェント１９７は、ユーザセッションまたはＩＣＡセッションあたりのネットワーク待ち時間、遅延、および量を測定してもよい。
【００４５】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッションあたりおよび／またはプロセスあたりの総メモリ使用量等のアプリケーション配信システム１９０のためのメモリ使用量を測定して監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッションあたりおよび／またはプロセスあたりの総ＣＰＵ使用量等のアプリケーション配信システム１９０のＣＰＵ使用量を測定して監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、Ｃｉｔｒｉｘプレゼンテーションサーバ等のアプリケーション、サーバ、またはアプリケーション配信システムにログインするために要求される時間を測定して監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザがアプリケーション、サーバ、またはアプリケーション配信システム１９０にログインされている持続時間を測定して監視する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション、サーバ、またはアプリケーション配信システムセッションのためのアクティブおよび非アクティブなセッションカウントを測定して監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッション待ち時間を測定して監視する。
【００４６】
その上さらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のサーバメトリックを測定して監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、システムメモリ、ＣＰＵ使用量、およびディスク記憶装置に関連するメトリックを測定して監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、１秒あたりのページフォールト等のページフォールトに関連するメトリックを測定して監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ラウンドトリップタイムメトリックを測定して監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションクラッシュ、エラー、および／またはハングアップに関連するメトリックを測定して監視する。
【００４７】
いくつかの実施形態では、監視サービス１９８および監視エージェント１９８は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＥｄｇｅＳｉｇｈｔと称される製品実施形態のうちのいずれかを含む。別の実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、Ｓｙｍｐｈｏｎｉｑ  Ｃｏｒｐｏｒａｔｉｏｎ（ＰａｌｏＡｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｒｕｅＶｉｅｗ製品スイートと称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、ＴｅａＬｅａｆ  Ｔｅｃｈｎｏｌｏｇｙ  Ｉｎｃ．（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｅａＬｅａｆＣＸ製品スイートと称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、ＢＭＣ  Ｓｏｆｔｗａｒｅ，Ｉｎｃ．（Ｈｏｕｓｔｏｎ，  Ｔｅｘａｓ）製のＢＭＣ性能マネージャおよびパトロール製品等のビジネスサービス管理製品の任意の部分を含む。
【００４８】
クライアント１０２、サーバ１０６、およびアプライアンス２００は、任意のタイプおよび形態のネットワーク上で通信し、本明細書に説明される動作を行うことが可能なコンピュータ、ネットワークデバイス、またはアプライアンス等の任意のタイプおよび形態のコンピューティングデバイスとして展開され、および／またはその上で実行されてもよい。図１Ｅおよび１Ｆは、クライアント１０２、サーバ１０６、またはアプライアンス２００の実施形態を実践するために有用なコンピューティングデバイス１００のブロック図を描写する。図１Ｅおよび１Ｆに示されるように、各コンピューティングデバイス１００は、中央処理ユニット１０１と、主要メモリユニット１２２とを含む。図１Ｅに示されるように、コンピューティングデバイス１００は、視覚表示デバイス１２４、キーボード１２６、および／またはマウス等のポインティングデバイス１２７を含んでもよい。各コンピューティングデバイス１００はまた、１つまたはそれを上回る入出力デバイス１３０ａ−１３０ｂ（概して、参照数字１３０を使用して参照される）および中央処理ユニット１０１と通信するキャッシュメモリ１４０等の付加的な随意の要素を含んでもよい。
【００４９】
中央処理ユニット１０１は、主要メモリユニット１２２からフェッチされた命令に応答し、それらを処理する、任意の論理回路である。多くの実施形態では、中央処理ユニットは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｍｏｕｎｔａｉｎ  Ｖｉｅｗ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓｃｈａｕｍｂｕｒｇ，  Ｉｌｌｉｎｏｉｓ）製のもの、Ｔｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎ（ＳａｎｔａＣｌａｒａ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、ＲＳ／６０００プロセッサ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ｗｈｉｔｅ  Ｐｌａｉｎｓ，  Ｎｅｗ  Ｙｏｒｋ）製のもの、またはＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のもの等のマイクロプロセッサユニットによって提供される。コンピューティングデバイス１００は、これらのプロセッサのうちのいずれか、または本明細書に説明されるように動作することが可能な任意の他のプロセッサに基づいてもよい。
【００５０】
主要メモリユニット１２２は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バーストＳＲＡＭまたは同期バーストＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、高速ページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、拡張データ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）、拡張データ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バースト拡張データ出力ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、強化ＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃＬｉｎｋ  ＤＲＡＭ（ＳＬＤＲＡＭ）、Ｄｉｒｅｃｔ  ＲａｍｂｕｓＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘電体ＲＡＭ（ＦＲＡＭ（登録商標））等のデータを記憶することが可能であり、任意の記憶場所がマイクロプロセッサ１０１によって直接アクセスすることを可能にする、１つまたはそれを上回るメモリチップであってもよい。主要メモリ１２２は、上記のメモリチップのうちのいずれか、または本明細書に説明されるように動作することが可能である任意の他の利用可能なメモリチップに基づいてもよい。図１Ｅに示される実施形態では、プロセッサ１０１は、システムバス１５０を介して主要メモリ１２２と通信する（以下でさらに詳細に説明される）。図１Ｆは、プロセッサがメモリポート１０３を介して主要メモリ１２２と直接通信する、コンピューティングデバイス１００の実施形態を描写する。例えば、図１Ｆでは、主要メモリ１２２は、ＤＲＤＲＡＭであってもよい。
【００５１】
図１Ｆは、主要プロセッサ１０１が、時として、バックサイドバスと称されることもある二次バスを介して、キャッシュメモリ１４０と直接通信する、実施形態を描写する。他の実施形態では、主要プロセッサ１０１は、システムバス１５０を使用してキャッシュメモリ１４０と通信する。キャッシュメモリ１４０は、典型的には、主要メモリ１２２よりも速い応答時間を有し、典型的には、ＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。図１Ｆに示される実施形態では、プロセッサ１０１は、ローカルシステムバス１５０を介して種々のＩ／Ｏデバイス１３０と通信する。中央処理ユニット１０１をＩ／Ｏデバイス１３０のうちのいずれかに接続するために、ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、ＭｉｃｒｏＣｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕＢｕｓを含む、種々のバスが使用されてもよい。Ｉ／Ｏデバイスがビデオディスプレイ１２４である実施形態に関して、プロセッサ１０１は、ディスプレイ１２４と通信するためにＡｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）を使用してもよい。図１Ｆは、主要プロセッサ１０１が、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、Ｒａｐｉｄ  Ｉ／Ｏ、またはＩｎｆｉｎｉＢａｎｄを介してＩ／Ｏデバイス１３０ｂと直接通信する、コンピュータ１００の実施形態を描写する。図１Ｆはまた、ローカルバスおよび直接通信が混合される、実施形態も描写し、プロセッサ１０１は、Ｉ／Ｏデバイス１３０ａと直接通信しながら、ローカル相互接続バスを使用してＩ／Ｏデバイス１３０ｂと通信する。
【００５２】
コンピューティングデバイス１００は、３．５インチ、５．２５インチディスク、またはＺＩＰディスク等のフロッピー（登録商標）ディスクを受容するためのフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、種々の形式のテープドライブ、ＵＳＢデバイス、ハードドライブ、またはソフトウェアおよび任意のクライアントエージェント１２０またはその一部等のプログラムをインストールするために好適な任意の他のデバイス等の任意の好適なインストールデバイス１１６をサポートしてもよい。コンピューティングデバイス１００はさらに、オペレーティングシステムおよび他の関連ソフトウェアを記憶するため、およびクライアントエージェント１２０に関連する任意のプログラム等のアプリケーションソフトウェアプログラムを記憶するために、１つまたはそれを上回るハードディスクドライブまたは独立ディスクの冗長アレイ等の記憶デバイス１２８を備えてもよい。随意に、インストールデバイス１１６のうちのいずれかはまた、記憶デバイス１２８としても使用され得る。加えて、オペレーティングシステムおよびソフトウェアは、ブート可能媒体、例えば、ｋｎｏｐｐｉｘ．ｎｅｔからのＧＮＵ／Ｌｉｎｕｘ（登録商標）配布として入手可能であるＧＮＵ／Ｌｉｎｕｘ（登録商標）用のブート可能ＣＤである、ＫＮＯＰＰＩＸ（Ｒ）等のブート可能ＣＤから起動されることができる。
【００５３】
さらに、コンピューティングデバイス１００は、標準電話回線、ＬＡＮまたはＷＡＮリンク（例えば、８０２．１１、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、ブロードバンド接続（例えば、ＩＳＤＮ、フレームリレー、ＡＴＭ、）、無線接続、または上記のうちのいずれかまたは全てのある組み合わせを含むが、それらに限定されない、種々の接続を通して、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、またはインターネットにインターフェース接続するように、ネットワークインターフェース１１８を含んでもよい。ネットワークインターフェース１１８は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、ＰＣＭＣＩＡネットワークカード、カードバスネットワークアダプタ、無線ネットワークアダプタ、ＵＳＢネットワークアダプタ、モデム、または通信が可能であり、本明細書に説明される動作を行う、任意のタイプのネットワークにコンピューティングデバイス１００をインターフェース接続するために好適な任意の他のデバイスを備えてもよい。
【００５４】
多種多様なＩ／Ｏデバイス１３０ａ−１３０ｎが、コンピューティングデバイス１００の中に存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、ドローイングタブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および染料昇華プリンタを含む。Ｉ／Ｏデバイス１３０は、図１Ｅに示されるようにＩ／Ｏコントローラ１２３によって制御されてもよい。Ｉ／Ｏコントローラは、キーボード１２６およびポインティングデバイス１２７、例えば、マウスまたは光学ペン等の１つまたはそれを上回るＩ／Ｏデバイスを制御してもよい。さらに、Ｉ／Ｏデバイスはまた、コンピューティングデバイス１００用の記憶装置１２８および／またはインストール媒体１１６を提供してもよい。なおも他の実施形態では、コンピューティングデバイス１００は、Ｔｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，  Ｉｎｃ．（Ｌｏｓ  Ａｌａｍｉｔｏｓ，  Ｃａｌｉｆｏｒｎｉａ）製のＵＳＢフラッシュドライブ系列のデバイス等のハンドヘルドＵＳＢ記憶デバイスを受容するＵＳＢ接続を提供してもよい。
【００５５】
いくつかの実施形態では、コンピューティングデバイス１００は、それぞれ、同一または異なるタイプおよび／または形態であり得る、複数の表示デバイス１２４ａ−１２４ｎを備える、またはそれらに接続されてもよい。したがって、Ｉ／Ｏデバイス１３０ａ−１３０ｎおよび／またはＩ／Ｏコントローラ１２３のうちのいずれかは、コンピューティングデバイス１００による複数の表示デバイス１２４ａ−１２４ｎの接続および使用をサポートする、有効にする、または提供するように、任意のタイプおよび／または形態の好適なハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを備えてもよい。例えば、コンピューティングデバイス１００は、表示デバイス１２４ａ−１２４ｎをインターフェース接続する、通信する、接続する、または別様に使用するように、任意のタイプおよび／または形態のビデオアダプタ、ビデオカード、ドライバ、および／またはライブラリを含んでもよい。一実施形態では、ビデオアダプタは、複数の表示デバイス１２４ａ−１２４ｎにインターフェース接続するように、複数のコネクタを備えてもよい。他の実施形態では、コンピューティングデバイス１００は、複数のビデオアダプタを含んでもよく、各ビデオアダプタは、表示デバイス１２４ａ−１２４ｎのうちの１つまたはそれを上回るものに接続される。いくつかの実施形態では、コンピューティングデバイス１００のオペレーティングシステムの任意の部分が、複数の表示デバイス１２４ａ−１２４ｎを使用するために構成されてもよい。他の実施形態では、表示デバイス１２４ａ−１２４ｎのうちの１つまたはそれを上回るものは、例えば、ネットワークを介して、コンピューティングデバイス１００に接続されるコンピューティングデバイス１００ａおよび１００ｂ等の１つまたはそれを上回る他のコンピューティングデバイスによって提供されてもよい。これらの実施形態は、コンピューティングデバイス１００用の第２の表示デバイス１２４ａとして別のコンピュータの表示デバイスを使用するように設計および構築される、任意のタイプのソフトウェアを含んでもよい。当業者は、コンピューティングデバイス１００が複数の表示デバイス１２４ａ−１２４ｎを有するように構成されてもよい、種々の方法および実施形態を認識して理解するであろう。
【００５６】
さらなる実施形態では、Ｉ／Ｏデバイス１３０は、システムバス１５０と、ＵＳＢバス、Ａｐｐｌｅデスクトップバス、ＲＳ−２３２シリアル接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅバス、ＦｉｒｅＷｉｒｅ８００バス、イーサネット（登録商標）バス、ＡｐｐｌｅＴａｌｋバス、ギガビットイーサネット（登録商標）バス、非同期転送モードバス、ＨＩＰＰＩバス、スーパーＨＩＰＰＩバス、ＳｅｒｉａｌＰｌｕｓバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはシリアルアタッチド小型コンピュータシステムインターフェースバス等の外部通信バスとの間のブリッジ１７０であってもよい。
【００５７】
図１Ｅおよび１Ｆで描写される種類のコンピューティングデバイス１００は、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。コンピューティングデバイス１００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃ  ＯＳ（Ｒ）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、またはコンピューティングデバイス上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。典型的なオペレーティングシステムは、とりわけ、全てＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製である、ＷＩＮＤＯＷＳ（登録商標）３．ｘ、ＷＩＮＤＯＷＳ９５、ＷＩＮＤＯＷＳ９８、ＷＩＮＤＯＷＳ２０００、ＷＩＮＤＯＷＳ  ＮＴ３．５１、ＷＩＮＤＯＷＳ  ＮＴ４．０、ＷＩＮＤＯＷＳ  ＣＥ、およびＷＩＮＤＯＷＳ  ＸＰ、Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＭａｃＯＳ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ａｒｍｏｎｋ，  Ｎｅｗ  Ｙｏｒｋ）製のＯＳ／２、およびＣａｌｄｅｒａ  Ｃｏｒｐ．（Ｓａｌｔ  ＬａｋｅＣｉｔｙ，  Ｕｔａｈ）によって配布される無料で入手可能なオペレーティングシステムであるＬｉｎｕｘ（登録商標）、または任意のタイプおよび／または形態のＵＮＩＸ（登録商標）オペレーティングシステムを含む。
【００５８】
他の実施形態では、コンピューティングデバイス１００は、デバイスと一致する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ１００は、Ｐａｌｍ，Ｉｎｃ製のＴｒｅｏ１８０、２７０、１０６０、６００、または６５０スマートフォンである。本実施形態では、Ｔｒｅｏスマートフォンは、ＰａｌｍＯＳオペレーティングシステムの制御下で動作され、スタイラス入力デバイスおよび５方向ナビゲータデバイスを含む。また、コンピューティングデバイス１００は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または通信が可能であり、本明細書に説明される動作を行うために十分なプロセッサ能力およびメモリ容量を有する、他の形態のコンピューティングまたは電気通信デバイスであることができる。
【００５９】
図１Ｇに示されるように、コンピューティングデバイス１００は、複数のプロセッサを備えてもよく、命令の同時実行のため、または１つよりも多くのデータについての１つの命令の同時実行のための機能性を提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つまたはそれを上回るコアを伴う並列プロセッサを備えてもよい。これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、単一のグローバルアドレス空間としての全ての利用可能なメモリにアクセスする、複数のプロセッサおよび／または複数のプロセッサコアを伴う共有メモリ並列デバイスである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、それぞれローカルメモリのみにアクセスする、複数のプロセッサを伴う分散型メモリ並列デバイスである。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、共有される、あるメモリと、特定のプロセッサまたはプロセッサのサブセットのみによってアクセスされることができる、あるメモリとの両方を有する。これらの実施形態のうちのなおもさらに別のものでは、マルチコアマイクロプロセッサ等のコンピューティングデバイス１００は、２つまたはそれを上回る独立プロセッサを、単一のパッケージ、多くの場合、単一の集積回路（ＩＣ）に合体させる。これらの実施形態のうちのさらに別のものでは、コンピューティングデバイス１００は、ＣＥＬＬ  ＢＲＯＡＤＢＡＮＤ  ＥＮＧＩＮＥアーキテクチャを有し、Ｐｏｗｅｒプロセッサ要素と、複数の相乗的処理要素とを含む、チップを含み、Ｐｏｗｅｒプロセッサ要素および複数の相乗的処理要素は、要素相互接続バスと称され得る、内部高速バスによってともに連結される。
【００６０】
いくつかの実施形態では、プロセッサは、複数のデータについての単一の命令を同時に実行するための機能性（ＳＩＭＤ）を提供する。他の実施形態では、プロセッサは、複数のデータについての複数の命令を同時に実行するための機能性（ＭＩＭＤ）を提供する。なおも他の実施形態では、プロセッサは、単一のデバイスでＳＩＭＤおよびＭＩＭＤコアの任意の組み合わせを使用してもよい。
【００６１】
いくつかの実施形態では、コンピューティングデバイス１００は、グラフィックス処理ユニットを備えてもよい。図１Ｈで描写される、これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、少なくとも１つの中央処理ユニット１０１と、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、少なくとも１つの並列処理ユニットと、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、任意のタイプの複数の処理ユニットを含み、複数の処理ユニットのうちの１つは、グラフィックス処理ユニットを備える。
【００６２】
いくつかの実施形態では、第１のコンピューティングデバイス１００ａは、クライアントコンピューティングデバイス１００ｂのユーザの代わりにアプリケーションを実行する。他の実施形態では、コンピューティングデバイス１００ａは、アプリケーションがユーザまたはクライアントコンピューティングデバイス１００ｂの代わりに実行する、実行セッションを提供する、仮想マシンを実行する。これらの実施形態のうちの１つでは、実行セッションは、ホスト型デスクトップセッションである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、端末サービスセッションを実行する。端末サービスセッションは、ホスト型デスクトップ環境を提供してもよい。これらの実施形態のうちのなおも別のものでは、実行セッションは、アプリケーション、複数のアプリケーション、デスクトップアプリケーション、および１つまたはそれを上回るアプリケーションが実行し得るデスクトップセッションのうちの１つまたはそれを上回るものを備え得る、コンピュータ環境へのアクセスを提供する。
【００６３】
Ｂ．アプライアンスアーキテクチャ
図２Ａは、アプライアンス２００の例示的実施形態を図示する。図２Ａのアプライアンス２００のアーキテクチャは、例証のみとして提供され、限定的であることを意図していない。図２に示されるように、アプライアンス２００は、ハードウェア層２０６と、ユーザ空間２０２およびカーネル空間２０４に分割されるソフトウェア層とを備える。
【００６４】
ハードウェア層２０６は、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスが実行される、ハードウェア要素を提供する。ハードウェア層２０６はまた、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスがアプライアンス２００に対して内部および外部の両方でデータを通信することを可能にする、構造および要素も提供する。図２に示されるように、ハードウェア層２０６は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット２６２と、ソフトウェアおよびデータを記憶するためのメモリ２６４と、ネットワークを経由してデータを伝送および受信するためのネットワークポート２６６と、ネットワークを経由して伝送および受信されるデータのセキュアなソケット層処理に関連する機能を果たすための暗号化プロセッサ２６０とを含む。いくつかの実施形態では、中央処理ユニット２６２は、単一のプロセッサにおいて暗号化プロセッサ２６０の機能を果たしてもよい。加えて、ハードウェア層２０６は、処理ユニット２６２および暗号化プロセッサ２６０のそれぞれのための複数のプロセッサを備えてもよい。プロセッサ２６２は、図１Ｅおよび１Ｆに関連して上記で説明されるプロセッサ１０１のうちのいずれかを含んでもよい。例えば、一実施形態では、アプライアンス２００は、第１のプロセッサ２６２と、第２のプロセッサ２６２’とを備える。他の実施形態では、プロセッサ２６２または２６２’は、マルチコアプロセッサを備える。
【００６５】
アプライアンス２００のハードウェア層２０６は、概して、暗号化プロセッサ２６０とともに図示されるが、プロセッサ２６０は、セキュアソケットレイヤ（ＳＳＬ）またはトランスポート層セキュリティ（ＴＬＳ）プロトコル等の任意の暗号化プロトコルに関連する機能を果たすためのプロセッサであってもよい。いくつかの実施形態では、プロセッサ２６０は、汎用プロセッサ（ＧＰＰ）であってもよく、さらなる実施形態では、任意のセキュリティ関連プロトコルの処理を行うための実行可能命令を有してもよい。
【００６６】
アプライアンス２００のハードウェア層２０６は、図２のある要素とともに図示されるが、アプライアンス２００のハードウェア部分またはコンポーネントは、図１Ｅおよび１Ｆと併せて本明細書に図示および議論されるコンピューティングデバイス１００等のコンピューティングデバイスの任意のタイプおよび形態の要素、ハードウェア、またはソフトウェアを備えてもよい。いくつかの実施形態では、アプライアンス２００は、サーバ、ゲートウェイ、ルータ、スイッチ、ブリッジ、または他のタイプのコンピューティングまたはネットワークデバイスを備え、それと関連付けられる任意のハードウェアおよび／またはソフトウェア要素を有してもよい。
【００６７】
アプライアンス２００のオペレーティングシステムは、利用可能なシステムメモリをカーネル空間２０４およびユーザ空間２０４の中へ配分、管理、または別様に分離する。例示的ソフトウェアアーキテクチャ２００では、オペレーティングシステムは、任意のタイプおよび／または形態のＵｎｉｘ（登録商標）オペレーティングシステムであってもよいが、本発明は、そのように限定されない。したがって、アプライアンス２００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、ＵＮＩＸ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃ  ＯＳ（Ｒ）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、またはアプライアンス２００上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。
【００６８】
カーネル空間２０４は、任意のデバイスドライバ、カーネル拡張、または他のカーネル関連ソフトウェアを含む、カーネル２３０を起動するために留保される。当業者に公知であるように、カーネル２３０は、オペレーティングシステムのコアであり、アプリケーション１０４のリソースおよびハードウェア関連要素のアクセス、制御、および管理を提供する。アプライアンス２００の実施形態によると、カーネル空間２０４はまた、その利益が本明細書でさらに詳細に説明される、時として、統合キャッシュと称されることもある、キャッシュマネージャ２３２と連動して作動するいくつかのネットワークサービスまたはプロセスも含む。加えて、カーネル２３０の実施形態は、デバイス２００によってインストール、構成、または別様に使用されるオペレーティングシステムの実施形態に依存するであろう。
【００６９】
一実施形態では、デバイス２００は、クライアント１０２および／またはサーバ１０６と通信するために、ＴＣＰ／ＩＰベースのスタック等の１つのネットワークスタック２６７を備える。一実施形態では、ネットワークスタック２６７は、ネットワーク１０８等の第１のネットワークおよび第２のネットワーク１１０と通信するために使用される。いくつかの実施形態では、デバイス２００は、クライアント１０２のＴＣＰ接続等の第１のトランスポート層接続を終了させ、クライアント１０２によって使用するためにサーバ１０６への第２のトランスポート層接続を確立し、例えば、第２のトランスポート層接続は、アプライアンス２００およびサーバ１０６において終了される。第１および第２のトランスポート層接続は、単一のネットワークスタック２６７を介して接続されてもよい。他の実施形態では、デバイス２００は、複数のネットワークスタック、例えば、２６７および２６７’を備えてもよく、第１のトランスポート層接続は、１つのネットワークスタック２６７において、第２のトランスポート層接続は、第２のネットワークスタック２６７上で、確立または終了されてもよい。例えば、１つのネットワークスタックは、第１のネットワーク上でネットワークパケットを受信および伝送するため、別のネットワークスタックは、第２のネットワーク上でネットワークパケットを受信および伝送するためのものであってもよい。一実施形態では、ネットワークスタック２６７は、アプライアンス２００による伝送のために１つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファ２４３を備える。
【００７０】
図２に示されるように、カーネル空間２０４は、キャッシュマネージャ２３２と、高速層２−７統合パケットエンジン２４０と、暗号化エンジン２３４と、ポリシエンジン２３６と、マルチプロトコル圧縮論理２３８とを含む。ユーザ空間２０２の代わりに、カーネル空間２０４またはカーネルモードでこれらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８を起動することは、単独で、および組み合わせて、これらのコンポーネントのそれぞれの性能を改良する。カーネル動作は、これらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８が、デバイス２００のオペレーティングシステムのコアアドレス空間内で起動することを意味する。例えば、カーネルモードで暗号化エンジン２３４を起動することは、暗号化および暗号解読動作をカーネルに移動させ、それによって、カーネルモードにおけるメモリ空間またはカーネルスレッドとユーザモードにおけるメモリ空間またはスレッドとの間の移行の数を削減することによって、暗号化性能を改良する。例えば、カーネルモードで取得されるデータは、カーネルレベルデータ構造からユーザレベルデータ構造まで等、ユーザモードで起動するプロセスまたはスレッドにパスまたはコピーされる必要がなくなり得る。別の側面では、カーネルモードとユーザモードとの間のコンテキスト切替の数も削減される。加えて、コンポーネントまたはプロセス２３２、２４０、２３５、２３６、および２３８のうちのいずれかの同期化およびその間の通信が、カーネル空間２０４内でより効率的に行われることができる。
【００７１】
いくつかの実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８の任意の部分が、カーネル空間２０４内で起動または動作してもよい一方で、これらのコンポーネント２３２、２４０、２３４、２３６、および２３８の他の部分は、ユーザ空間２０２内で起動または動作してもよい。一実施形態では、アプライアンス２００は、１つまたはそれを上回るネットワークパケットの任意の部分、例えば、クライアント１０２からの要求またはサーバ１０６からの応答を備える、ネットワークパケットへのアクセスを提供する、カーネルレベルデータ構造を使用する。いくつかの実施形態では、カーネルレベルデータ構造は、ネットワークスタック２６７へのトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン２４０によって取得されてもよい。カーネルレベルデータ構造は、ネットワークスタック２６７、ネットワークトラフィック、またはネットワークスタック２６７によって受信または伝送されるパケットに関連するカーネル空間２０４を介してアクセス可能である、任意のインターフェースおよび／またはデータを備えてもよい。他の実施形態では、カーネルレベルデータ構造は、コンポーネントまたはプロセスの所望の動作を行うために、コンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８のうちのいずれかによって使用されてもよい。一実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８が、カーネルレベルデータ構造を使用するときにカーネルモード２０４で起動している一方で、別の実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８は、カーネルレベルデータ構造を使用するときにユーザモードで起動している。いくつかの実施形態では、カーネルレベルデータ構造は、第２のカーネルレベルデータ構造または任意の所望のユーザレベルデータ構造にコピーまたはパスされてもよい。
【００７２】
キャッシュマネージャ２３２は、発信サーバ１０６によって供給される、オブジェクトまたは動的に生成されたオブジェクト等の任意のタイプおよび形態のコンテンツのキャッシュアクセス、制御、および管理を提供する、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。キャッシュマネージャ２３２によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、マークアップ言語等の任意の形式である、または任意のプロトコルを介して通信される、データを備えてもよい。いくつかの実施形態では、キャッシュマネージャ２３２は、元のデータが、キャッシュメモリ要素を読み取ることに対して、フェッチ、計算、または別様に取得するためにより長いアクセス時間を要求し得る、他の場所に記憶された元のデータ、または前もって計算、生成、または伝送されたデータを複製する。いったんデータがキャッシュメモリ要素に記憶されると、元のデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスし、それによって、アクセス時間を短縮することによって、将来の使用が行われることができる。いくつかの実施形態では、キャッシュメモリ要素は、デバイス２００のメモリ２６４の中にデータオブジェクトを備えてもよい。他の実施形態では、キャッシュメモリ要素は、メモリ２６４よりも速いアクセス時間を有する、メモリを備えてもよい。別の実施形態では、キャッシュメモリ要素は、ハードディスクの一部等のデバイス２００の任意のタイプおよび形態の記憶要素を備えてもよい。いくつかの実施形態では、処理ユニット２６２は、キャッシュマネージャ２３２によって使用するためのキャッシュメモリを提供してもよい。その上さらなる実施形態では、キャッシュマネージャ２３２は、データ、オブジェクト、および他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組み合わせを使用してもよい。
【００７３】
さらに、キャッシュマネージャ２３２は、本明細書に説明されるアプライアンス２００の技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。例えば、キャッシュマネージャ２３２は、無効化時間周期の満了に基づいて、またはクライアント１０２またはサーバ１０６からの無効化コマンドの受信に応じて、オブジェクトを無効化する論理または機能性を含む。いくつかの実施形態では、キャッシュマネージャ２３２は、カーネル空間２０４内で、他の実施形態では、ユーザ空間２０２内で実行する、プログラム、サービス、プロセス、またはタスクとして動作してもよい。一実施形態では、キャッシュマネージャ２３２の第１の部分が、ユーザ空間２０２内で実行する一方で、第２の部分は、カーネル空間２０４内で実行する。いくつかの実施形態では、キャッシュマネージャ２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブル論理デバイス（ＰＬＤ）、または特定用途向け集積回路（ＡＳＩＣ）等の任意の他のタイプの集積回路を備えることができる。
【００７４】
ポリシエンジン２３６は、例えば、知的統計エンジンまたは他のプログラマブルアプリケーションを含んでもよい。一実施形態では、ポリシエンジン２３６は、ユーザがキャッシングポリシを識別、規定、定義、または構成することを可能にする構成機構を提供する。ポリシエンジン２３６はまた、いくつかの実施形態では、ユーザ選択キャッシングポリシ決定を有効にするように、ルックアップテーブルまたはハッシュテーブル等のデータ構造をサポートするメモリへのアクセスも有する。他の実施形態では、ポリシエンジン２３６は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス２００によって行われる任意の他の機能または動作のアクセス、制御、および管理に加えて、アプライアンス２００によってキャッシュされているオブジェクト、データ、またはコンテンツのアクセス、制御、および管理を判定して提供する、任意の論理、ルール、機能、または動作を備えてもよい。具体的キャッシングポリシのさらなる実施例が、本明細書でさらに説明される。
【００７５】
暗号化エンジン２３４は、ＳＳＬまたはＴＬＳ等の任意のセキュリティ関連プロトコル、またはそれに関連する任意の機能の処理をハンドリングするための任意の論理、ビジネスルール、機能、または動作を備える。例えば、暗号化エンジン２３４は、アプライアンス２００を介して通信されるネットワークパケットまたはその任意の部分を暗号化および解読する。暗号化エンジン２３４はまた、クライアント１０２ａ−１０２ｎ、サーバ１０６ａ−１０６ｎ、またはアプライアンス２００の代わりにＳＳＬまたはＴＬＳ接続を設定または確立してもよい。したがって、暗号化エンジン２３４は、ＳＳＬ処理のオフローディングおよび加速を提供する。一実施形態では、暗号化エンジン２３４は、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間に仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。いくつかの実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０と通信する。他の実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０上で起動する実行可能命令を備える。
【００７６】
マルチプロトコル圧縮エンジン２３８は、デバイス２００のネットワークスタック２６７によって使用されるプロトコルのうちのいずれか等のネットワークパケットの１つまたはそれを上回るプロトコルを圧縮するための任意の論理、ビジネスルール、機能、もしく動作を備える。一実施形態では、マルチプロトコル圧縮エンジン２３８は、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間で双方向性に、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（Ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルを圧縮する。他の実施形態では、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマークアップ言語（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、いくつかの実施形態では、拡張マークアップ言語（ＸＭＬ）等の任意のマークアップ言語の圧縮を提供する。一実施形態では、マルチプロトコル圧縮エンジン２３８は、アプライアンス２００間通信のために設計される任意のプロトコル等の任意の高性能プロトコルの圧縮を提供する。別の実施形態では、マルチプロトコル圧縮エンジン２３８は、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の修正されたトランスポート制御プロトコルを使用して、任意の通信の任意のペイロードまたは任意の通信を圧縮する。
【００７７】
したがって、マルチプロトコル圧縮エンジン２３８は、デスクトップクライアント、例えば、Ｏｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌのような頻用されている企業アプリケーションによって起動される任意のクライアント等のＭｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋおよび非ウェブシンクライアント、およびＰｏｃｋｅｔ  ＰＣ等のモバイルクライアントさえも介して、アプリケーションにアクセスするユーザのために性能を加速する。いくつかの実施形態では、マルチプロトコル圧縮エンジン２３８は、カーネルモード２０４内で実行し、ネットワークスタック２６７にアクセスするパケット処理エンジン２４０と統合することによって、任意のアプリケーション層プロトコル等のＴＣＰ／ＩＰプロトコルによって搬送されるプロトコルのうちのいずれかを圧縮することができる。
【００７８】
概して、パケット処理エンジンまたはパケットエンジンとも称される、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してアプライアンス２００によって受信および伝送されるパケットのカーネルレベル処理を管理する責任がある。高速層２−７統合パケットエンジン２４０は、ネットワークパケットの受信またはネットワークパケットの伝送のため等、処理中に１つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファを備えてもよい。加えて、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してネットワークパケットを送信および受信するように、１つまたはそれを上回るネットワークスタック２６７と通信する。高速層２−７統合パケットエンジン２４０は、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８と連動して作動する。具体的には、暗号化エンジン２３４は、パケットのＳＳＬ処理を行うように構成され、ポリシエンジン２３６は、要求レベルコンテンツ切替および要求レベルキャッシュリダイレクト等のトラフィック管理に関連する機能を果たすように構成され、マルチプロトコル圧縮論理２３８は、データの圧縮および解凍に関連する機能を果たすように構成される。
【００７９】
高速層２−７統合パケットエンジン２４０は、パケット処理タイマ２４２を含む。一実施形態では、パケット処理タイマ２４２は、着信、すなわち、受信された、または発信、すなわち、伝送されたネットワークパケットの処理をトリガするように、１つまたはそれを上回る時間間隔を提供する。いくつかの実施形態では、高速層２−７統合パケットエンジン２４０は、タイマ２４２に応答してネットワークパケットを処理する。パケット処理タイマ２４２は、時間関連イベント、間隔、または発生を通知、トリガ、または通信するように、任意のタイプおよび形態の信号をパケットエンジン２４０に提供する。多くの実施形態では、パケット処理タイマ２４２は、例えば、１００ミリ秒、５０ミリ秒、または２５ミリ秒等、ミリ秒のオーダーで動作する。例えば、いくつかの実施形態では、パケット処理タイマ２４２が、時間間隔を提供する、または別様にネットワークパケットを１０ミリ秒時間間隔で高速層２−７統合パケットエンジン２４０によって処理させる一方で、他の実施形態では、５ミリ秒時間間隔で、依然としてさらに、さらなる実施形態では、３、２、または１ミリ秒ほどの短さの時間間隔で処理させる。高速層２−７統合パケットエンジン２４０は、動作中に暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮エンジン２３８とインターフェースをとられ、統合され、または通信してもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかが、パケット処理タイマ２４２および／またはパケットエンジン２４０に応答して行われてもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかは、パケット処理タイマ２４２を介して提供される時間間隔の粒度で、例えば、１０ミリ秒未満またはそれに等しい時間間隔で行われてもよい。例えば、一実施形態では、キャッシュマネージャ２３２は、高速層２−７統合パケットエンジン２４０および／またはパケット処理タイマ２４２に応答して、任意のキャッシュされたオブジェクトの無効化を行ってもよい。別の実施形態では、キャッシュされたオブジェクトの満了または無効化時間は、１０ミリ秒毎等のパケット処理タイマ２４２の時間間隔と同程度の粒度に設定されることができる。
【００８０】
カーネル空間２０４と対照的に、ユーザ空間２０２は、別様にユーザモードで起動するユーザモードアプリケーションまたはプログラムによって使用される、オペレーティングシステムのメモリ領域または部分である。ユーザモードアプリケーションは、カーネル空間２０４に直接アクセスしなくてもよく、カーネルサービスにアクセスするためにサービスコールを使用する。図２に示されるように、アプライアンス２００のユーザ空間２０２は、グラフィカルユーザインターフェース（ＧＵＩ）２１０と、コマンドラインインターフェース（ＣＬＩ）２１２と、シェルサービス２１４と、健全性監視プログラム２１６と、デーモンサービス２１８とを含む。ＧＵＩ２１０およびＣＬＩ２１２は、システム管理者または他のユーザが、アプライアンス２００のオペレーティングシステムを介して等、アプライアンス２００と相互作用し、その動作を制御することができる、手段を提供する。ＧＵＩ２１０またはＣＬＩ２１２は、ユーザ空間２０２またはカーネル空間２０４内で起動するコードを備えることができる。ＧＵＩ２１０は、任意のタイプおよび形態のグラフィカルユーザインターフェースであってもよく、テキスト、グラフィカルを介して、または別様にブラウザ等の任意のタイプのプログラムまたはアプリケーションによって、提示されてもよい。ＣＬＩ２１２は、オペレーティングシステムによって提供されるコマンドライン等の任意のタイプおよび形態のコマンドラインまたはテキストベースのインターフェースであってもよい。例えば、ＣＬＩ２１２は、ユーザがオペレーティングシステムと相互作用することを可能にするツールである、シェルを備えてもよい。いくつかの実施形態では、ＣＬＩ２１２は、ｂａｓｈ、ｃｓｈ、ｔｃｓｈ、またはｋｓｈタイプシェルを介して提供されてもよい。シェルサービス２１４は、ＧＵＩ２１０および／またはＣＬＩ２１２を介したユーザによるアプライアンス２００またはオペレーティングシステムとの相互作用をサポートする、プログラム、サービス、タスク、プロセス、または実行可能命令を備える。
【００８１】
健全性監視プログラム２１６は、ネットワークシステムが適切に機能していることと、ユーザがネットワークを経由して要求されたコンテンツを受信することとを監視し、チェックし、報告し、確実にするために使用される。健全性監視プログラム２１６は、アプライアンス２００の任意のアクティビティを監視するための論理、ルール、機能、または動作を提供する、１つまたはそれを上回るプログラム、サービス、タスク、プロセス、または実行可能命令を備える。いくつかの実施形態では、健全性監視プログラム２１６は、アプライアンス２００を介してパスされる任意のネットワークトラフィックを傍受して点検する。他の実施形態では、健全性監視プログラム２１６は、任意の好適な手段および／または機構によって、以下、すなわち、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、マルチプロトコル圧縮論理２３８、パケットエンジン２４０、デーモンサービス２１８、およびシェルサービス２１４のうちの１つまたはそれを上回るものとインターフェースをとる。したがって、健全性監視プログラム２１６は、アプライアンス２００の任意の部分の状態、ステータス、または健全性を判定するように、任意のアプリケーションプログラミングインターフェース（ＡＰＩ）を呼び出してもよい。例えば、健全性監視プログラム２１６は、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在起動しているかどうかをチェックするように、周期的基準でステータス問い合わせをｐｉｎｇまたは送信してもよい。別の実施例では、健全性監視プログラム２１６は、アプライアンス２００の任意の部分と任意の条件、ステータス、またはエラーを判定するように、任意のプログラム、プロセス、サービス、またはタスクによって提供される、任意のステータス、エラー、または履歴ログをチェックしてもよい。
【００８２】
デーモンサービス２１８は、連続的に、またはバックグラウンドで起動し、アプライアンス２００によって受信される周期的サービス要求をハンドリングする、プログラムである。いくつかの実施形態では、デーモンサービスは、適宜、別のデーモンサービス２１８等の他のプログラムまたはプロセスに要求を自動転送してもよい。当業者に公知であるように、デーモンサービス２１８は、ネットワーク制御等の連続的または周期的なシステム全体の機能を果たすように、または任意の所望のタスクを行うように、無人で起動してもよい。いくつかの実施形態では、１つまたはそれを上回るデーモンサービス２１８は、ユーザ空間２０２内で起動する一方、他の実施形態では、１つまたはそれを上回るデーモンサービス２１８は、カーネル空間内で起動する。
【００８３】
ここで図２Ｂを参照すると、アプライアンス２００の別の実施形態が描写されている。要するに、アプライアンス２００は、以下のサービス、機能性、または動作、すなわち、ＳＳＬ  ＶＰＮコネクティビティ２８０、切替／負荷平衡２８４、ドメイン名サービス解決２８６、加速２８８、および１つまたはそれを上回るクライアント１０２と１つまたはそれを上回るサーバ１０６との間の通信用のアプリケーションファイアウォール２９０のうちの１つまたはそれを上回るものを提供する。サーバ１０６はそれぞれ、１つまたはそれを上回るネットワーク関連サービス２７０ａ−２７０ｎ（サービス２７０と称される）を提供してもよい。例えば、サーバ１０６は、ｈｔｔｐサービス２７０を提供してもよい。アプライアンス２００は、ｖサーバ、ＶＩＰサーバ、または単にＶＩＰ２７５ａ−２７５ｎと称される（本明細書ではｖサーバ２７５とも称される）、１つまたはそれを上回る仮想サーバまたは仮想インターネットプロトコルサーバを備える。ｖサーバ２７５は、アプライアンス２００の構成および動作に従って、クライアント１０２とサーバ１０６との間の通信を受信、傍受、または別様に処理する。
【００８４】
ｖサーバ２７５は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。ｖサーバ２７５は、アプライアンス２００においてユーザモード２０２、カーネルモード２０４、またはそれらの任意の組み合わせで動作する、任意のタイプおよび形態のプログラム、サービス、タスク、プロセス、または実行可能命令を備えてもよい。ｖサーバ２７５は、ＳＳＬ  ＶＰＮ２８０、切替／負荷平衡２８４、ドメイン名サービス解決２８６、加速２８８、およびアプリケーションファイアウォール２９０等の本明細書に説明される技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。いくつかの実施形態では、ｖサーバ２７５は、サーバ１０６のサービス２７０への接続を確立する。サービス２７５は、アプライアンス２００、クライアント１０２、またはｖサーバ２７５に接続し、それと通信することが可能な任意のプログラム、アプリケーション、プロセス、タスク、または実行可能命令のセットを備えてもよい。例えば、サービス２７５は、ウェブサーバ、ｈｔｔｐサーバ、ｆｔｐ、Ｅメール、またはデータベースサーバを備えてもよい。いくつかの実施形態では、サービス２７０は、Ｅメール、データベース、または企業アプリケーション等のアプリケーションのための通信をリッスン、受信、および／または送信するためのデーモンプロセスまたはネットワークドライバである。いくつかの実施形態では、サービス２７０は、具体的ＩＰアドレス、またはＩＰアドレスおよびポート上で通信してもよい。
【００８５】
いくつかの実施形態では、ｖサーバ２７５は、ポリシエンジン２３６の１つまたはそれを上回るポリシを、クライアント１０２とサーバ１０６との間のネットワーク通信に適用する。一実施形態では、ポリシは、ｖサーバ２７５と関連付けられる。別の実施形態では、ポリシは、ユーザまたはユーザのグループに基づく。さらに別の実施形態では、ポリシは、大域的であり、１つまたはそれを上回るｖサーバ２７５ａ−２７５ｎ、およびアプライアンス２００を介して通信する任意のユーザまたはユーザのグループに適用される。いくつかの実施形態では、ポリシエンジンのポリシは、インターネットプロトコルアドレス、ポート、プロトコルタイプ、ヘッダ、またはパケット内のフィールド等の通信の任意のコンテンツ、またはユーザ、ユーザのグループ、ｖサーバ２７５、トランスポート層接続、および／またはクライアント１０２またはサーバ１０６の識別または属性等の通信のコンテキストに基づいて、ポリシが適用される条件を有する。
【００８６】
他の実施形態では、アプライアンス２００は、サーバ１０６からコンピュータ環境１５、アプリケーション、および／またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント１０２の認証および／または承認を判定するように、ポリシエンジン２３６と通信する、またはインターフェースをとる。別の実施形態では、アプライアンス２００は、アプリケーション配信システム１９０にコンピュータ環境１５、アプリケーション、および／またはデータファイルのうちの１つまたはそれを上回るものを配信させるための遠隔ユーザまたは遠隔クライアント１０２の認証および／または承認を判定するように、ポリシエンジン２３６と通信する、またはインターフェースをとる。さらに別の実施形態では、アプライアンス２００は、ポリシエンジン２３６の認証および／または遠隔ユーザまたは遠隔クライアント１０２の承認に基づいて、ＶＰＮまたはＳＳＬ  ＶＰＮ接続を確立する。一実施形態では、アプライアンス２００は、ポリシエンジン２３６のポリシに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。例えば、アプライアンス２００は、ポリシエンジン２３６に基づいて、コンピュータ環境１５、アプリケーション、またはデータファイルへのアクセスを制御してもよい。
【００８７】
いくつかの実施形態では、ｖサーバ２７５は、クライアントエージェント１２０を介したクライアント１０２とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖサーバ２７５は、クライアント１０２からの通信をリッスンして受信する。他の実施形態では、ｖサーバ２７５は、クライアントサーバ１０６とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖサーバ２７５は、サーバ１０６上で起動するサーバ２７０のインターネットプロトコルアドレスおよびポートへのトランスポート層接続を確立する。別の実施形態では、ｖサーバ２７５は、クライアント１０２への第１のトランスポート層接続をサーバ１０６への第２のトランスポート層接続と関連付ける。いくつかの実施形態では、ｖサーバ２７５は、サーバ１０６へのトランスポート層接続のプールを確立し、プールされたトランスポート層接続を介してクライアント要求を多重化する。
【００８８】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のＳＳＬ  ＶＰＮ接続２８０を提供する。例えば、第１のネットワーク１０２上のクライアント１０２は、第２のネットワーク１０４’上のサーバ１０６への接続を確立することを要求する。いくつかの実施形態では、第２のネットワーク１０４’は、第１のネットワーク１０４からルーティング可能ではない。他の実施形態では、クライアント１０２は、公衆ネットワーク１０４上にあり、サーバ１０６は、企業ネットワーク等のプライベートネットワーク１０４’上にある。一実施形態では、クライアントエージェント１２０は、第１のネットワーク１０４上のクライアント１０２の通信を傍受し、通信を暗号化し、第１のトランスポート層接続を介してアプライアンス２００に通信を伝送する。アプライアンス２００は、第１のネットワーク１０４上の第１のトランスポート層接続を、第２のネットワーク１０４上のサーバ１０６への第２のトランスポート層接続に関連付ける。アプライアンス２００は、クライアントエージェント１０２から傍受された通信を受信し、通信を解読し、第２のトランスポート層接続を介して第２のネットワーク１０４上のサーバ１０６に通信を伝送する。第２のトランスポート層接続は、プールされたトランスポート層接続であってもよい。したがって、アプライアンス２００は、２つのネットワーク１０４、１０４’の間のクライアント１０２のためのエンドツーエンドセキュアトランスポート層接続を提供する。
【００８９】
一実施形態では、アプライアンス２００は、仮想プライベートネットワーク１０４上のクライアント１０２のイントラネットインターネットプロトコルまたはＩｎｔｒａｎｅｔＩＰ２８２アドレスをホストする。クライアント１０２は、第１のネットワーク１０４上のインターネットプロトコル（ＩＰ）アドレスおよび／またはホスト名等のローカルネットワーク識別子を有する。アプライアンス２００を介して第２のネットワーク１０４’に接続されたとき、アプライアンス２００は、第２のネットワーク１０４’上のクライアント１０２のＩＰアドレスおよび／またはホスト名等のネットワーク識別子である、ＩｎｔｒａｎｅｔＩＰアドレス２８２を確立する、割り当てる、または別様に提供する。アプライアンス２００は、クライアントの確立されたＩｎｔｒａｎｅｔＩＰ２８２を使用して、クライアント１０２に向かってダイレクトされる任意の通信のための第２またはプライベートネットワーク１０４’をリッスンし、その上で受信する。一実施形態では、アプライアンス２００は、第２のプライベートネットワーク１０４上のクライアント１０２として、またはその代わりに作用する。例えば、別の実施形態では、ｖサーバ２７５は、クライアント１０２のＩｎｔｒａｎｅｔＩＰ２８２への通信をリッスンし、それに応答する。いくつかの実施形態では、第２のネットワーク１０４’上のコンピューティングデバイス１００が要求を伝送する場合、アプライアンス２００は、それがクライアント１０２であるかのように要求を処理する。例えば、アプライアンス２００は、クライアントのＩｎｔｒａｎｅｔＩＰ２８２へのｐｉｎｇに応答してもよい。別の実施例では、アプライアンスは、クライアントのＩｎｔｒａｎｅｔＩＰ２８２との接続を要求する、第２のネットワーク１０４上のコンピューティングデバイス１００とのＴＣＰまたはＵＤＰ接続等の接続を確立してもよい。
【００９０】
いくつかの実施形態では、アプライアンス２００は、以下の加速技法２８８のうちの１つまたはそれを上回るもの、すなわち、１）圧縮、２）解凍、３）伝送制御プロトコルプーリング、４）伝送制御プロトコル多重化、５）伝送制御プロトコルバッファリング、および６）キャッシングを、クライアント１０２とサーバ１０６との間の通信に提供する。
【００９１】
一実施形態では、アプライアンス２００は、各サーバ１０６との１つまたはそれを上回るトランスポート層接続を開放し、インターネットを介したクライアントによる反復データアクセスを可能にするように、これらの接続を維持することによって、クライアント１０２へのトランスポート層接続を繰り返し開放および閉鎖することによって引き起こされる処理負荷の多くからサーバ１０６を解放する。本技法は、本明細書では「接続プーリング」と称される。
【００９２】
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント１０２からサーバ１０６への通信をシームレスに接合するために、アプライアンス２００は、トランスポート層プロトコルレベルでシーケンス番号および確認応答番号を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、インバウンドパケット（すなわち、クライアント１０２から受信されるパケット）の場合、パケットのソースネットワークアドレスは、アプライアンス２００の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。アウトバウンドパケット（すなわち、サーバ１０６から受信されるもの）の場合、ソースネットワークアドレスは、サーバ１０６のものからアプライアンス２００の出力ポートのものに変更され、宛先アドレスは、アプライアンス２００のものから要求側クライアント１０２のものに変更される。パケットのシーケンス番号および確認応答番号はまた、アプライアンス２００のクライアント１０２へのトランスポート層接続上でクライアント１０２によって予期されるシーケンス番号および確認応答番号に変換される。いくつかの実施形態では、トランスポート層プロトコルのパケットチェックサムが、これらの変換を考慮するように再計算される。
【００９３】
別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のための切替または負荷平衡機能性２８４を提供する。いくつかの実施形態では、アプライアンス２００は、トラフィックを配布し、層４またはアプリケーション層要求データに基づいてクライアント要求をサーバ１０６にダイレクトする。一実施形態では、ネットワークパケットのネットワーク層または層２が宛先サーバ１０６を識別するが、アプライアンス２００は、トランスポート層パケットのペイロードとして搬送されるアプリケーション情報およびデータによってネットワークパケットを分配するサーバ１０６を判定する。一実施形態では、アプライアンス２００の健全性監視プログラム２１６は、クライアントの要求を分配するサーバ１０６を判定するように、サーバの健全性を監視する。いくつかの実施形態では、アプライアンス２００が、サーバ１０６が利用可能ではない、または所定の閾値を上回る負荷を有することを検出する場合、アプライアンス２００は、クライアント要求を別のサーバ１０６にダイレクトまたは分配することができる。
【００９４】
いくつかの実施形態では、アプライアンス２００は、ドメイン名サービス（ＤＮＳ）リゾルバとして作用する、または別様にクライアント１０２からのＤＮＳ要求の解決を提供する。いくつかの実施形態では、アプライアンスは、クライアント１０２によって伝送されるＤＮＳ要求を傍受する。一実施形態では、アプライアンス２００は、アプライアンス２００またはそれによってホストされるＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。本実施形態では、クライアント１０２は、ドメイン名のためのネットワーク通信をアプライアンス２００に伝送する。別の実施形態では、アプライアンス２００は、第２のアプライアンス２００’またはそれによってホストされるＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００によって判定されるサーバ１０６のＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。
【００９５】
さらに別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のためのアプリケーションファイアウォール機能性２９０を提供する。一実施形態では、ポリシエンジン２３６は、違法な要求を検出して遮断するためのルールを提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、サービス妨害（ＤｏＳ）攻撃から保護する。他の実施形態では、アプライアンスは、アプリケーションベースの攻撃を識別して遮断する傍受された要求のコンテンツを点検する。いくつかの実施形態では、ルール／ポリシエンジン２３６は、以下のうちの１つまたはそれを上回るもの、すなわち、１）バッファオーバーフロー、２）ＣＧＩ−ＢＩＮパラメータ操作、３）フォーム／非表示フィールド操作、４）強制的ブラウジング、５）クッキーまたはセッションポイズニング、６）破損したアクセス制御リスト（ＡＣＬ）または弱いパスワード、７）クロスサイトスクリプティング（ＸＳＳ）、８）コマンドインジェクション、９）ＳＱＬインジェクション、１０）エラートリガ型機密情報漏出、１１）暗号化の不安定な使用、１２）サーバ不正構成、１３）バックドアおよびデバッグオプション、１４）ウェブサイト改変、１５）プラットフォームまたはオペレーティングシステム脆弱性、および１６）ゼロデイ攻撃等の種々のクラスおよびタイプのウェブまたはインターネットベースの脆弱性に対する保護を提供するための１つまたはそれを上回るアプリケーションファイアウォールまたはセキュリティ制御ポリシを備える。ある実施形態では、アプリケーションファイアウォール２９０は、以下のうちの１つまたはそれを上回るもの、すなわち、１）要求されたフィールドが返される、２）いかなる追加フィールドも許容されない、３）読取専用および非表示フィールド実行、４）ドロップダウンリストおよびラジオボタンフィールド適合性、および５）フォームフィールド最大長実行のためにネットワーク通信を点検または分析する形態でＨＴＭＬフォームフィールド保護を提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、クッキーが修正されていないことを確実にする。他の実施形態では、アプリケーションファイアウォール２９０は、合法なＵＲＬを実行することによって強制的ブラウジングから保護する。
【００９６】
なおもさらなる他の実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信に含有される任意の極秘情報を保護する。アプリケーションファイアウォール２９０は、ネットワークパケットの任意のフィールド内の任意の極秘情報を識別するように、エンジン２３６のルールまたはポリシに従って任意のネットワーク通信を点検または分析してもよい。いくつかの実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信内で、クレジットカード番号、パスワード、社会保障番号、氏名、患者コード、連絡先情報、および年齢のうちの１つまたはそれを上回る発生を識別する。ネットワーク通信のエンコードされた部分は、これらの発生または極秘情報を備えてもよい。これらの発生に基づいて、一実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信の伝送を防止する等のポリシアクションをネットワーク通信上でとってもよい。別の実施形態では、アプリケーションファイアウォール２９０は、そのような識別された発生または極秘情報を書き換える、除去する、または別様に隠してもよい。
【００９７】
依然として図２Ｂを参照すると、アプライアンス２００は、図１Ｄと併せて上記で議論されるような性能監視エージェント１９７を含んでもよい。一実施形態では、アプライアンス２００は、図１Ｄで描写されるように監視サービス１９８または監視サーバ１０６から監視エージェント１９７を受信する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００と通信する任意のクライアントまたはサーバに配信するために、ディスク等の記憶装置の中に監視エージェント１９７を記憶する。例えば、一実施形態では、アプライアンス２００は、トランスポート層接続を確立する要求を受信することに応じて、監視エージェント１９７をクライアントに伝送する。他の実施形態では、アプライアンス２００は、クライアント１０２とのトランスポート層接続を確立することに応じて、監視エージェント１９７を伝送する。別の実施形態では、アプライアンス２００は、ウェブページの要求を傍受または検出することに応じて、監視エージェント１９７をクライアントに伝送する。さらに別の実施形態では、アプライアンス２００は、監視サーバ１９８からの要求に応答して、監視エージェント１９７をクライアントまたはサーバに伝送する。一実施形態では、アプライアンス２００は、監視エージェント１９７を第２のアプライアンス２００’またはアプライアンス２０５に伝送する。
【００９８】
他の実施形態では、アプライアンス２００は、監視エージェント１９７を実行する。一実施形態では、監視エージェント１９７は、アプライアンス２００上で実行する任意のアプリケーション、プログラム、プロセス、サービス、タスク、またはスレッドの性能を測定して監視する。例えば、監視エージェント１９７は、ｖサーバ２７５Ａ−２７５Ｎの性能および動作を監視して測定してもよい。別の実施形態では、監視エージェント１９７は、アプライアンス２００の任意のトランスポート層接続の性能を測定して監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００をトラバースする任意のユーザセッションの性能を測定して監視する。一実施形態では、監視エージェント１９７は、ＳＳＬ  ＶＰＮセッション等のアプライアンス２００をトラバースする任意の仮想プライベートネットワーク接続および／またはセッションの性能を測定して監視する。なおもさらなる実施形態では、監視エージェント１９７は、アプライアンス２００のメモリ、ＣＰＵ、およびディスク使用量および性能を測定して監視する。さらに別の実施形態では、監視エージェント１９７は、ＳＳＬオフローディング、接続プーリングおよび多重化、キャッシング、および圧縮等のアプライアンス２００によって行われる任意の加速技法２８８の性能を測定して監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００によって行われる任意の負荷平衡および／またはコンテンツ切替２８４の性能を測定して監視する。他の実施形態では、監視エージェント１９７は、アプライアンス２００によって行われるアプリケーションファイアウォール２９０保護および処理の性能を測定して監視する。
【００９９】
Ｃ．クライアントエージェント
ここで図３を参照すると、クライアントエージェント１２０の実施形態が描写されている。クライアント１０２は、ネットワーク１０４を介してアプライアンス２００および／またはサーバ１０６との通信を確立して交換するためのクライアントエージェント１２０を含む。要するに、クライアント１０２は、カーネルモード３０２およびユーザモード３０３を伴うオペレーティングシステムと、１つまたはそれを上回る層３１０ａ−３１０ｂを伴うネットワークスタック３１０とを有する、コンピューティングデバイス１００上で動作する。クライアント１０２は、１つまたはそれを上回るアプリケーションをインストールしている、および／または実行してもよい。いくつかの実施形態では、１つまたはそれを上回るアプリケーションは、ネットワークスタック３１０を介してネットワーク１０４に通信してもよい。ウェブブラウザ等のアプリケーションのうちの１つはまた、第１のプログラム３２２を含んでもよい。例えば、第１のプログラム３２２は、いくつかの実施形態では、クライアントエージェント１２０またはその任意の部分をインストールおよび／または実行するために使用されてもよい。クライアントエージェント１２０は、１つまたはそれを上回るアプリケーションからのネットワークスタック３１０からのネットワーク通信を傍受するための傍受機構またはインターセプタ３５０を含む。
【０１００】
クライアント１０２のネットワークスタック３１０は、ネットワークへのコネクティビティおよびネットワークとの通信を提供するための任意のタイプおよび形態のソフトウェア、またはハードウェア、またはそれらの任意の組み合わせを備えてもよい。一実施形態では、ネットワークスタック３１０は、ネットワークプロトコルスイートのためのソフトウェア実装を備える。ネットワークスタック３１０は、当業者が認識して理解するようなオープンシステム間相互接続（ＯＳＩ）通信モデルの任意のネットワーク層等の１つまたはそれを上回るネットワーク層を備えてもよい。したがって、ネットワークスタック３１０は、ＯＳＩモデルの以下の層、すなわち、１）物理リンク層、２）データリンク層、３）ネットワーク層、４）トランスポート層、５）セッション層、６）プレゼンテーション層、および７）アプリケーション層のうちのいずれかのための任意のタイプおよび形態のプロトコルを備えてもよい。一実施形態では、ネットワークスタック３１０は、概して、ＴＣＰ／ＩＰと称される、インターネットプロトコル（ＩＰ）のネットワーク層プロトコルを経由したトランスポート制御プロトコル（ＴＣＰ）を備えてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰプロトコルは、ＩＥＥＥ８０２．３によって網羅されるこれらのプロトコル等のＩＥＥＥ広域ネットワーク（ＷＡＮ）またはローカルエリアネットワーク（ＬＡＮ）プロトコル群のうちのいずれかを備え得る、イーサネット（登録商標）プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック３１０は、ＩＥＥＥ８０２．１１および／またはモバイルインターネットプロトコル等の任意のタイプおよび形態の無線プロトコルを備える。
【０１０１】
ＴＣＰ／ＩＰベースのネットワークに照らして、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（Ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルが使用されてもよい。別の実施形態では、ネットワークスタック３１０は、修正されたトランスポート制御プロトコル、例えば、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の任意のタイプおよび形態のトランスポート制御プロトコルを備える。他の実施形態では、ＩＰを経由したＵＤＰ等の任意のタイプおよび形態のユーザデータグラムプロトコル（ＵＤＰ）が、音声通信またはリアルタイムデータ通信のため等に、ネットワークスタック３１０によって使用されてもよい。
【０１０２】
さらに、ネットワークスタック３１０は、ＴＣＰドライバまたはネットワーク層ドライバ等の１つまたはそれを上回る層をサポートする、１つまたはそれを上回るネットワークドライバを含んでもよい。ネットワークドライバは、コンピューティングデバイス１００のオペレーティングシステムの一部として、またはコンピューティングデバイス１００の任意のネットワークインターフェースカードまたは他のネットワークアクセスコンポーネントの一部として、含まれてもよい。いくつかの実施形態では、ネットワークスタック３１０のネットワークドライバのうちのいずれかは、本明細書に説明される技法のうちのいずれかをサポートしてネットワークスタック３１０のカスタムまたは修正部分を提供するようにカスタマイズ、修正、または適合されてもよい。他の実施形態では、加速プログラム３０２は、クライアント１０２のオペレーティングシステムによってインストールまたは別様に提供されるネットワークスタック３１０とともに、またはそれと連動して動作するように設計および構築される。
【０１０３】
ネットワークスタック３１０は、クライアント１０２のネットワーク通信に関連する任意の情報およびデータを受信する、取得する、提供する、または別様にそれにアクセスするための任意のタイプおよび形態のインターフェースを備える。一実施形態では、ネットワークスタック３１０へのインターフェースは、アプリケーションプログラミングインターフェース（ＡＰＩ）を備える。インターフェースはまた、任意の機能コール、フッキングおよびフィルタリング機構、イベントまたはコールバック機構、または任意のタイプのインターフェーシング技法を備えてもよい。インターフェースを介したネットワークスタック３１０は、ネットワークスタック３１０の機能性または動作に関連するオブジェクト等の任意のタイプおよび形態のデータ構造を受信または提供してもよい。例えば、データ構造は、ネットワークパケットまたは１つまたはそれを上回るネットワークパケットに関連する情報およびデータを備えてもよい。いくつかの実施形態では、データ構造は、トランスポート層のネットワークパケット等のネットワークスタック３１０のプロトコル層において処理されるネットワークパケットの一部を備える。いくつかの実施形態では、データ構造３２５が、カーネルレベルデータ構造を備える一方で、他の実施形態では、データ構造３２５は、ユーザモードデータ構造を備える。カーネルレベルデータ構造は、取得される、またはカーネルモード３０２で動作するネットワークスタック３１０の一部に関連するデータ構造、またはカーネルモード３０２で起動するネットワークドライバまたは他のソフトウェア、またはオペレーティングシステムのカーネルモードで起動または動作するサービス、プロセス、タスク、スレッド、または他の実行可能命令によって取得または受信される任意のデータ構造を備えてもよい。
【０１０４】
加えて、ネットワークスタック３１０のいくつかの部分、例えば、データリンクまたはネットワーク層が、カーネルモード３０２で実行または動作してもよい一方で、ネットワークスタック３１０のアプリケーション層等の他の部分は、ユーザモード３０３で実行または動作する。例えば、ネットワークスタックの第１の部分３１０ａが、アプリケーションへのネットワークスタック３１０へのユーザモードアクセスを提供してもよい一方で、ネットワークスタック３１０の第２の部分３１０ａは、ネットワークへのアクセスを提供する。いくつかの実施形態では、ネットワークスタックの第１の部分３１０ａは、層５−７のうちのいずれか等のネットワークスタック３１０の１つまたはそれを上回る上層を備えてもよい。他の実施形態では、ネットワークスタック３１０の第２の部分３１０ｂは、層１−４のうちのいずれか等の１つまたはそれを上回る下層を備える。ネットワークスタック３１０の第１の部分３１０ａおよび第２の部分３１０ｂはそれぞれ、ユーザモード２０３、カーネルモード２０２、またはその組み合わせで、いずれか１つまたはそれを上回るネットワーク層において、またはネットワーク層またはネットワーク層へのインターフェース点の任意の部分、またはユーザモード２０３およびカーネルモード２０３の任意の部分またはそこへのインターフェース点において、ネットワークスタック３１０の任意の部分を備えてもよい。
【０１０５】
インターセプタ３５０は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。一実施形態では、インターセプタ３５０は、ネットワークスタック３１０内の任意の点においてネットワーク通信を傍受し、インターセプタ３５０またはクライアントエージェント１２０によって所望、管理、または制御される宛先にネットワーク通信をリダイレクトまたは伝送する。例えば、インターセプタ３５０は、第１のネットワークのネットワークスタック３１０のネットワーク通信を傍受し、第２のネットワーク１０４上で伝送するためにネットワーク通信をアプライアンス２００に伝送してもよい。いくつかの実施形態では、インターセプタ３５０は、ネットワークスタック３１０とインターフェースをとって連動するように構築および設計されるネットワークドライバ等のドライバを備える、任意のタイプのインターセプタ３５０を備える。いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、トランスポート層において等、ネットワークスタック３１０の１つまたはそれを上回る層において動作する。一実施形態では、インターセプタ３５０は、フィルタドライバ、フッキング機構、またはトランスポートドライバインターフェース（ＴＤＩ）を介して等、ネットワークスタックのトランスポート層にインターフェース接続する任意の形態およびタイプの好適なネットワークドライバインターフェースを備える。いくつかの実施形態では、インターセプタ３５０は、トランスポート層等の第１のプロトコル層、およびトランスポートプロトコル層の上方の任意の層、例えば、アプリケーションプロトコル層等の別のプロトコル層にインターフェース接続する。一実施形態では、インターセプタ３５０は、ネットワークドライバインターフェース仕様（ＮＤＩＳ）またはＮＤＩＳドライバに準拠するドライバを備えてもよい。別の実施形態では、インターセプタ３５０は、ミニフィルタまたはミニポートドライバを備えてもよい。一実施形態では、インターセプタ３５０またはその一部は、カーネルモード２０２で動作する。別の実施形態では、インターセプタ３５０またはその一部は、ユーザモード２０３で動作する。いくつかの実施形態では、インターセプタ３５０の一部が、カーネルモード２０２で動作する一方で、インターセプタ３５０の別の部分は、ユーザモード２０３で動作する。他の実施形態では、クライアントエージェント１２０は、ユーザモード２０３で動作するが、カーネルレベルデータ構造２２５を取得するため等に、インターセプタ３５０を介して、カーネルモードドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの一部にインターフェース接続する。さらなる実施形態では、インターセプタ３５０は、アプリケーション等のユーザモードアプリケーションまたはプログラムである。
【０１０６】
一実施形態では、インターセプタ３５０は、任意のトランスポート層接続要求を傍受する。これらの実施形態では、インターセプタ３５０は、場所のための所望の場所への宛先ＩＰアドレスおよび／またはポート等の宛先情報を設定するように、トランスポート層アプリケーションプログラミングインターフェース（ＡＰＩ）コールを実行する。このようにして、インターセプタ３５０は、インターセプタ３５０またはクライアントエージェント１２０によって制御または管理されるＩＰアドレスおよびポートへのトランスポート層接続を傍受してリダイレクトする。一実施形態では、インターセプタ３５０は、クライアントエージェント１２０がリッスンしているクライアント１０２のローカルＩＰアドレスおよびポートへの接続のための宛先情報を設定する。例えば、クライアントエージェント１２０は、リダイレクトされたトランスポート層通信のためのローカルＩＰアドレスおよびポート上でリッスンするプロキシサービスを備えてもよい。いくつかの実施形態では、次いで、クライアントエージェント１２０は、リダイレクトされたトランスポート層通信をアプライアンス２００に通信する。
【０１０７】
いくつかの実施形態では、インターセプタ３５０は、ドメイン名サービス（ＤＮＳ）要求を傍受する。一実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、ＤＮＳ要求を解決する。別の実施形態では、インターセプタは、ＤＮＳ解決のために傍受されたＤＮＳ要求をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００は、ＤＮＳ要求を解決し、ＤＮＳ応答をクライアントエージェント１２０に通信する。いくつかの実施形態では、アプライアンス２００は、別のアプライアンス２００’またはＤＮＳサーバ１０６を介してＤＮＳ要求を解決する。
【０１０８】
さらに別の実施形態では、クライアントエージェント１２０は、２つのエージェント１２０および１２０’を備えてもよい。一実施形態では、第１のエージェント１２０は、ネットワークスタック３１０のネットワーク層において動作するインターセプタ３５０を備えてもよい。いくつかの実施形態では、第１のエージェント１２０は、インターネット制御メッセージプロトコル（ＩＣＭＰ）要求（例えば、ｐｉｎｇおよびトレースルート）等のネットワーク層要求を傍受する。他の実施形態では、第２のエージェント１２０’は、トランスポート層において動作し、トランスポート層通信を傍受してもよい。いくつかの実施形態では、第１のエージェント１２０は、ネットワークスタック２１０の１つの層において通信を傍受し、傍受された通信とインターフェースをとる、またはそれを第２のエージェント１２０’に通信する。
【０１０９】
クライアントエージェント１２０および／またはインターセプタ３５０は、ネットワークスタック３１０の任意の他のプロトコル層に対して透過的な様式で、プロトコル層において動作してもよい、またはそれとインターフェースをとってもよい。例えば、一実施形態では、インターセプタ３５０は、ネットワーク層等のトランスポート層の下方の任意のプロトコル層、およびセッション、プレゼンテーション、またはアプリケーション層プロトコル等のトランスポート層の上方の任意のプロトコル層に対して透過的に、ネットワークスタック３１０のトランスポート層とともに動作する、またはそれとインターフェースをとる。これは、所望に応じて、かつインターセプタ３５０を使用するための修正を伴わずに、ネットワークスタック３１０の他のプロトコル層が動作することを可能にする。したがって、クライアントエージェント１２０および／またはインターセプタ３５０は、ＴＣＰ／ＩＰを経由した任意のアプリケーション層プロトコル等のトランスポート層によって搬送される任意のプロトコルを介して提供される、任意の通信をセキュアにする、最適化する、加速する、ルーティングする、または負荷平衡するように、トランスポート層とインターフェースをとることができる。
【０１１０】
さらに、クライアントエージェント１２０および／またはインターセプタは、任意のアプリケーション、クライアント１０２のユーザ、およびクライアント１０２と通信するサーバ等の任意の他のコンピューティングデバイスに対して透過的な様式で、ネットワークスタック３１０において動作してもよい、またはそれとインターフェースをとってもよい。クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーションの修正を伴わない様式で、クライアント１０２上にインストールおよび／または実行されてもよい。いくつかの実施形態では、クライアント１０２のユーザまたはクライアント１０２と通信するコンピューティングデバイスは、クライアントエージェント１２０および／またはインターセプタ３５０の存在、実行、または動作を認識していない。したがって、いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーション、クライアント１０２のユーザ、サーバ等の別のコンピューティングデバイス、またはインターセプタ３５０によってインターフェース接続されるプロトコル層の上方および／または下方のプロトコル層のうちのいずれかに対して透過的に、インストールされ、実行され、および／または動作される。
【０１１１】
クライアントエージェント１２０は、加速プログラム３０２、ストリーミングクライアント３０６、収集エージェント３０４、および／または監視エージェント１９７を含む。一実施形態では、クライアントエージェント１２０は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発された独立コンピューティングアーキテクチャ（ＩＣＡ）クライアントまたはその一部を備え、ＩＣＡクライアントとも称される。いくつかの実施形態では、クライアント１２０は、サーバ１０６からクライアント１０２にアプリケーションをストリーム配信するためのアプリケーションストリーミングクライアント３０６を備える。いくつかの実施形態では、クライアントエージェント１２０は、クライアント１０２とサーバ１０６との間の通信を加速するための加速プログラム３０２を備える。別の実施形態では、クライアントエージェント１２０は、エンドポイント検出を行う／アプライアンス２００および／またはサーバ１０６のためのエンドポイント情報を走査して収集するための収集エージェント３０４を含む。
【０１１２】
いくつかの実施形態では、加速プログラム３０２は、クライアントのサーバ１０６との通信および／またはサーバ１０６によって提供されるアプリケーションにアクセスすること等のサーバ１０６へのアクセスを加速、強化、または別様に改良するように、１つまたはそれを上回る加速技法を行うためのクライアント側加速プログラムを備える。加速プログラム３０２の実行可能命令の論理、機能、および／または動作は、以下の加速技法のうちの１つまたはそれを上回るもの、すなわち、１）マルチプロトコル圧縮、２）トランスポート制御プロトコルプーリング、３）トランスポート制御プロトコル多重化、４）トランスポート制御プロトコルバッファリング、および５）キャッシュマネージャを介したキャッシングを行ってもよい。加えて、加速プログラム３０２は、クライアント１０２によって受信および／または伝送される任意の通信の暗号化および／または暗号解読を行ってもよい。いくつかの実施形態では、加速プログラム３０２は、統合様式または方式で加速技法のうちの１つまたはそれを上回るものを行う。加えて、加速プログラム３０２は、トランスポート層プロトコルのネットワークパケットのペイロードとして搬送される、プロトコルのうちのいずれかまたは複数のプロトコルに圧縮を行うことができる。
ストリーミングクライアント３０６は、サーバ１０６からストリーム配信されたアプリケーションを受信して実行するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。サーバ１０６は、クライアント１０２上でアプリケーションを再生する、実行する、または別様に実行させられるために、１つまたはそれを上回るアプリケーションデータファイルをストリーミングクライアント３０６にストリーム配信してもよい。いくつかの実施形態では、サーバ１０６は、圧縮またはパッケージ化されたアプリケーションデータファイルのセットをストリーミングクライアント３０６に伝送する。いくつかの実施形態では、複数のアプリケーションファイルは、圧縮され、ＣＡＢ、ＺＩＰ、ＳＩＴ、ＴＡＲ、ＪＡＲ、または他のアーカイブ等のアーカイブファイル内でファイルサーバ上に記憶される。一実施形態では、サーバ１０６は、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化し、ファイルをクライアント１０２に伝送する。別の実施形態では、クライアント１０２が、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化する。ストリーミングクライアント３０６は、アプリケーションまたはその一部を動的にインストールし、アプリケーションを実行する。一実施形態では、ストリーミングクライアント３０６は、実行可能プログラムであってもよい。いくつかの実施形態では、ストリーミングクライアント３０６は、別の実行可能プログラムを起動することが可能であり得る。
【０１１３】
収集エージェント３０４は、クライアント１０２についての情報を識別、取得、および／または収集するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。いくつかの実施形態では、アプライアンス２００は、収集エージェント３０４をクライアント１０２またはクライアントエージェント１２０に伝送する。収集エージェント３０４は、アプライアンスのポリシエンジン２３６の１つまたはそれを上回るポリシに従って構成されてもよい。他の実施形態では、収集エージェント３０４は、クライアント１０２についての収集された情報をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００のポリシエンジン２３６は、クライアントのネットワーク１０４への接続のアクセス、認証、および承認制御を判定して提供するために、収集された情報を使用する。
【０１１４】
一実施形態では、収集エージェント３０４は、クライアントの１つまたはそれを上回る属性または特性を識別して判定する、エンドポイント検出および走査機構を備える。例えば、収集エージェント３０４は、以下のクライアント側属性のうちのいずれか１つまたはそれを上回るもの、すなわち、１）オペレーティングシステムおよび／またはオペレーティングシステムのバージョン、２）オペレーティングシステムのサービスパック、３）起動しているサービス、４）起動しているプロセス、および５）ファイルを識別して判定してもよい。収集エージェント３０４はまた、クライアント上で以下のうちのいずれか１つまたはそれを上回るもの、すなわち、１）ウイルス対策ソフトウェア、２）パーソナルファイアウォールソフトウェア、３）スパム対策ソフトウェア、および４）インターネットセキュリティソフトウェアの存在またはバージョンを識別して判定してもよい。ポリシエンジン２３６は、クライアントの属性または特性またはクライアント側属性のうちのいずれか１つまたはそれを上回るものに基づく、１つまたはそれを上回るポリシを有してもよい。
【０１１５】
いくつかの実施形態では、クライアントエージェント１２０は、図１Ｄおよび２Ｂと併せて議論されるような監視エージェント１９７を含む。監視エージェント１９７は、Ｖｉｓｕａｌ  ＢａｓｉｃまたはＪａｖａ  ｓｃｒｉｐｔ（登録商標）等の任意のタイプおよび形態のスクリプトであってもよい。一実施形態では、監視エージェント１９７は、クライアントエージェント１２０の任意の部分の性能を監視して測定する。例えば、いくつかの実施形態では、監視エージェント１９７は、加速プログラム３０２の性能を監視して測定する。別の実施形態では、監視エージェント１９７は、ストリーミングクライアント３０６の性能を監視して測定する。他の実施形態では、監視エージェント１９７は、収集エージェント３０４の性能を監視して測定する。なおも別の実施形態では、監視エージェント１９７は、インターセプタ３５０の性能を監視して測定する。いくつかの実施形態では、監視エージェント１９７は、メモリ、ＣＰＵ、およびディスク等のクライアント１０２の任意のリソースを監視して測定する。
【０１１６】
監視エージェント１９７は、クライアントの任意のアプリケーションの性能を監視して測定してもよい。一実施形態では、監視エージェント１９７は、クライアント１０２上のブラウザの性能を監視して測定する。いくつかの実施形態では、監視エージェント１９７は、クライアントエージェント１２０を介して配信される任意のアプリケーションの性能を監視して測定する。他の実施形態では、監視エージェント１９７は、ウェブベースまたはＨＴＴＰ応答時間等のアプリケーションのエンドユーザ応答時間を測定して監視する。監視エージェント１９７は、ＩＣＡまたはＲＤＰクライアントの性能を監視して測定してもよい。別の実施形態では、監視エージェント１９７は、ユーザセッションまたはアプリケーションセッションのメトリックを測定して監視する。いくつかの実施形態では、監視エージェント１９７は、ＩＣＡまたはＲＤＰセッションを測定して監視する。一実施形態では、監視エージェント１９７は、クライアント１０２へのアプリケーションおよび／またはデータの配信を加速する際のアプライアンス２００の性能を測定して監視する。
【０１１７】
いくつかの実施形態では、依然として図３を参照すると、第１のプログラム３２２が、自動的に、無音で、透過的に、または別様に、クライアントエージェント１２０またはインターセプタ３５０等のその一部をインストールおよび／または実行するために使用されてもよい。一実施形態では、第１のプログラム３２２は、アプリケーションにロードされ、それによって実行される、ＡｃｔｉｖｅＸ制御またはＪａｖａ（登録商標）制御またはスクリプト等のプラグインコンポーネントを備える。例えば、第１のプログラムは、アプリケーションのメモリ空間またはコンテキスト内等でウェブブラウザアプリケーションによってロードされて起動される、ＡｃｔｉｖｅＸ制御を備える。別の実施形態では、第１のプログラム３２２は、ブラウザ等のアプリケーションにロードされ、それによって起動される、実行可能命令のセットを備える。一実施形態では、第１のプログラム３２２は、クライアントエージェント１２０をインストールするように設計および構築されたプログラムを備える。いくつかの実施形態では、第１のプログラム３２２は、別のコンピューティングデバイスからネットワークを介してクライアントエージェント１２０を取得、ダウンロード、または受信する。別の実施形態では、第１のプログラム３２２は、クライアント１０２のオペレーティングシステム上にネットワークドライバ等のプログラムをインストールするためのインストーラプログラムまたはプラグアンドプレイマネージャである。
【０１１８】
Ｄ．仮想化されたアプリケーション配信コントローラを提供するためのシステムおよび方法
ここで図４Ａを参照すると、ブロック図が、仮想化環境４００の一実施形態を描写する。要するに、コンピューティングデバイス１００は、ハイパーバイザ層と、仮想化層と、ハードウェア層とを含む。ハイパーバイザ層は、仮想化層内で実行する少なくとも１つの仮想マシンによる、ハードウェア層内のいくつかの物理リソース（例えば、プロセッサ４２１およびディスク４２８）へのアクセスを配分して管理する、ハイパーバイザ４０１（仮想化マネージャとも称される）を含む。仮想化層は、少なくとも１つのオペレーティングシステム４１０と、少なくとも１つのオペレーティングシステム４１０に配分される複数の仮想リソースとを含む。仮想リソースは、限定ではないが、複数の仮想プロセッサ４３２ａ、４３２ｂ、４３２ｃ（概して４３２）、および仮想ディスク４４２ａ、４４２ｂ、４４２ｃ（概して４４２）、および仮想メモリおよび仮想ネットワークインターフェース等の仮想リソースを含んでもよい。複数の仮想リソースおよびオペレーティングシステム４１０は、仮想マシン４０６と称されてもよい。仮想マシン４０６は、ハイパーバイザ４０１と通信し、コンピューティングデバイス１００上で他の仮想マシンを管理および構成するためのアプリケーションを実行するために使用される、制御オペレーティングシステム４０５を含んでもよい。
【０１１９】
さらに詳細には、ハイパーバイザ４０１は、物理デバイスへのアクセスを有するオペレーティングシステムをシミュレートする任意の様式で、仮想リソースをオペレーティングシステムに提供してもよい。ハイパーバイザ４０１は、仮想リソースを任意の数のゲストオペレーティングシステム４１０ａ、４１０ｂ（概して、４１０）に提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つまたはそれを上回るタイプのハイパーバイザを実行する。これらの実施形態では、ハイパーバイザは、仮想ハードウェアをエミュレートし、物理ハードウェアをパーティション化し、物理ハードウェアを仮想化し、コンピュータ環境へのアクセスを提供する仮想マシンを実行するために使用されてもよい。ハイパーバイザは、ＶＭＷａｒｅ，  Ｉｎｃ．（Ｐａｌｏ  Ａｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、その開発がオープンソースＸｅｎ．ｏｒｇコミュニティによって監督されるオープンソース製品である、ＸＥＮハイパーバイザ、Ｍｉｃｒｏｓｏｆｔによって提供されるＨｙｐｅｒＶ、Ｖｉｒｔｕａｌサーバ、または仮想ＰＣハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行し得る、仮想マシンプラットフォームを作成する、ハイパーバイザを実行するコンピューティングデバイス１００は、ホストサーバと称される。これらの実施形態のうちの１つでは、例えば、コンピューティングデバイス１００は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  ＦＬ）によって提供されるＸＥＮサーバである。
【０１２０】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス上で実行する、オペレーティングシステム内で実行する。これらの実施形態のうちの１つでは、オペレーティングシステムおよびハイパーバイザ４０１上で実行するコンピューティングデバイスは、ホストオペレーティングシステム（コンピューティングデバイス上で実行するオペレーティングシステム）と、ゲストオペレーティングシステム（ハイパーバイザ４０１によって提供されるコンピューティングリソースパーティション内で実行するオペレーティングシステム）とを有すると言える。他の実施形態では、ハイパーバイザ４０１は、ホストオペレーティングシステム上で実行する代わりに、コンピューティングデバイス上でハードウェアと直接相互作用する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、コンピューティングデバイスを備えるハードウェアを指す、「ベアメタル」上で実行していると言える。
【０１２１】
いくつかの実施形態では、ハイパーバイザ４０１は、オペレーティングシステム４１０が実行する、仮想マシン４０６ａ−ｃ（概して、４０６）を作成してもよい。これらの実施形態のうちの１つでは、例えば、ハイパーバイザ４０１は、仮想マシン４０６を作成するように仮想マシンイメージをロードする。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、仮想マシン４０６内でオペレーティングシステム４１０を実行する。これらの実施形態のうちのなおも別のものでは、仮想マシン４０６は、オペレーティングシステム４１０を実行する。
【０１２２】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス１００上で実行する仮想マシン４０６のためのプロセッサスケジューリングおよびメモリ分割を制御する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、少なくとも１つの仮想マシン４０６の実行を制御する。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、コンピューティングデバイス１００によって提供される少なくとも１つのハードウェアリソースの抽象化を少なくとも１つの仮想マシン４０６に提示する。他の実施形態では、ハイパーバイザ４０１は、物理プロセッサ能力が仮想マシン４０６に提示されるかどうかと、どのようにして提示されるかとを制御する。
【０１２３】
制御オペレーティングシステム４０５は、ゲストオペレーティングシステムを管理して構成するための少なくとも１つのアプリケーションを実行してもよい。一実施形態では、制御オペレーティングシステム４０５は、仮想マシンを実行する、仮想マシンの実行を終了させる、または仮想マシンに配分するための物理リソースのタイプを識別するための機能性を含む、仮想マシンの実行を管理するための機能性へのアクセスを管理者に提供するユーザインターフェースを含むアプリケーション等の管理アプリケーションを実行してもよい。別の実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内で制御オペレーティングシステム４０５を実行する。なおも別の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の物理リソースに直接アクセスする権限を与えられている仮想マシン４０６内で実行する。いくつかの実施形態では、コンピューティングデバイス１００ａ上の制御オペレーティングシステム４０５ａは、ハイパーバイザ４０１ａとハイパーバイザ４０１ｂとの間の通信を介して、コンピューティングデバイス１００ｂ上の制御オペレーティングシステム４０５ｂとデータを交換してもよい。このようにして、１つまたはそれを上回るコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス１００のうちの１つまたはそれを上回るものとデータを交換してもよい。これらの実施形態のうちの１つでは、本機能性は、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。これらの実施形態のうちの別のものでは、複数のハイパーバイザは、コンピューティングデバイス１００のうちの１つの上で実行されるゲストオペレーティングシステムのうちの１つまたはそれを上回るものを管理する。
【０１２４】
一実施形態では、制御オペレーティングシステム４０５は、少なくとも１つのゲストオペレーティングシステム４１０と相互作用する権限を与えられている仮想マシン４０６内で実行する。別の実施形態では、ゲストオペレーティングシステム４１０は、ディスクまたはネットワークへのアクセスを要求するために、ハイパーバイザ４０１を介して制御オペレーティングシステム４０５と通信する。なおも別の実施形態では、ゲストオペレーティングシステム４１０および制御オペレーティングシステム４０５は、例えば、ハイパーバイザ４０１によって利用可能にされる複数の共有メモリページを介して等、ハイパーバイザ４０１によって確立される通信チャネルを介して通信してもよい。
【０１２５】
いくつかの実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００によって提供されるネットワーキングハードウェアと直接通信するためのネットワークバックエンドドライバを含む。これらの実施形態のうちの１つでは、ネットワークバックエンドドライバは、少なくとも１つのゲストオペレーティングシステム１１０からの少なくとも１つの仮想マシン要求を処理する。他の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の記憶装置要素と通信するためのブロックバックエンドドライバを含む。これらの実施形態のうちの１つでは、ブロックバックエンドドライバは、ゲストオペレーティングシステム４１０から受信される少なくとも１つの要求に基づいて、記憶要素からデータを読み取って書き込む。
【０１２６】
一実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を含む。別の実施形態では、ツールスタック４０４は、ハイパーバイザ４０１と相互作用する、（例えば、第２のコンピューティングデバイス１００ｂ上の）他の制御オペレーティングシステム４０５と通信する、またはコンピューティングデバイス１００上の仮想マシン４０６ｂ、４０６ｃを管理するための機能性を提供する。別の実施形態では、ツールスタック４０４は、改良された管理機能性を仮想マシンファームの管理者に提供するためのカスタマイズされたアプリケーションを含む。いくつかの実施形態では、ツールスタック４０４および制御オペレーティングシステム４０５のうちの少なくとも１つは、コンピューティングデバイス１００上で起動する仮想マシン４０６を遠隔で構成して制御するためのインターフェースを提供する、管理ＡＰＩを含む。他の実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を通してハイパーバイザ４０１と通信する。
【０１２７】
一実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内でゲストオペレーティングシステム４１０を実行する。別の実施形態では、ゲストオペレーティングシステム４１０は、コンピュータ環境内のリソースへのアクセスをコンピューティングデバイス１００のユーザに提供する。なおも別の実施形態では、リソースは、プログラム、アプリケーション、文書、ファイル、複数のアプリケーション、複数のファイル、実行可能プログラムファイル、デスクトップ環境、コンピュータ環境、またはコンピューティングデバイス１００のユーザに利用可能にされる他のリソースを含む。さらに別の実施形態では、リソースは、コンピューティングデバイス１００上への従来の直接インストール、アプリケーションストリーミングのための方法を介したコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上のリソースの実行によって生成され、プレゼンテーション層プロトコルを介してコンピューティングデバイス１００に通信される、出力データのコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上で実行する仮想マシンを介したリソースの実行によって生成される、出力データのコンピューティングデバイス１００への配信、またはＵＳＢデバイス等のコンピューティングデバイス１００に接続された可撤性記憶デバイスから、またはコンピューティングデバイス１００上で実行して出力データを生成する仮想マシンを介した実行を含むが、それらに限定されない、複数のアクセス方法を介して、コンピューティングデバイス１００に配信されてもよい。いくつかの実施形態では、コンピューティングデバイス１００は、リソースの実行によって生成される出力データを別のコンピューティングデバイス１００’に伝送する。
【０１２８】
一実施形態では、ゲストオペレーティングシステム４１０は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識していない、完全仮想化仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＨＶＭ（ハードウェア仮想マシン）仮想マシン」と称されてもよい。別の実施形態では、完全仮想化マシンは、完全仮想化マシン内でオペレーティングシステムを実行するために、基本入出力システム（ＢＩＯＳ）をエミュレートするソフトウェアを含む。なおも別の実施形態では、完全仮想化マシンは、ハイパーバイザ４０１と通信することによって機能性を提供するドライバを含んでもよい。そのような実施形態では、ドライバは、それが仮想化された環境内で実行することを認識してもよい。別の実施形態では、ゲストオペレーティングシステム４１０は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識している、準仮想化仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＰＶ仮想マシン」と称されてもよい。別の実施形態では、準仮想化マシンは、完全仮想化マシンが含まない、付加的ドライバを含む。なおも別の実施形態では、準仮想化マシンは、上記で説明されるように、制御オペレーティングシステム４０５に含まれる、ネットワークバックエンドドライバおよびブロックバックエンドドライバを含む。
【０１２９】
ここで図４Ｂを参照すると、ブロック図が、少なくとも１つの物理ホストが仮想マシンを実行する、システム内の複数のネットワーク化されたコンピューティングデバイスの一実施形態を描写する。要するに、本システムは、管理コンポーネント４０４と、ハイパーバイザ４０１とを含む。本システムは、複数のコンピューティングデバイス１００と、複数の仮想マシン４０６と、複数のハイパーバイザ４０１と、ツールスタック４０４または管理コンポーネント４０４と様々に称される、複数の管理コンポーネントと、物理リソース４２１、４２８とを含む。複数の物理マシン１００はそれぞれ、図１Ｅ−１Ｈおよび４Ａに関連して上記で説明される、コンピューティングデバイス１００として提供されてもよい。
【０１３０】
さらに詳細には、物理ディスク４２８が、コンピューティングデバイス１００によって提供され、仮想ディスク４４２の少なくとも一部を記憶する。いくつかの実施形態では、仮想ディスク４４２は、複数の物理ディスク４２８と関連付けられる。これらの実施形態のうちの１つでは、１つまたはそれを上回るコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス１００のうちの１つまたはそれを上回るものとデータを交換してもよく、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。いくつかの実施形態では、仮想マシン４０６が実行するコンピューティングデバイス１００は、物理ホスト１００またはホストマシン１００と称される。
【０１３１】
ハイパーバイザは、コンピューティングデバイス１００上のプロセッサ上で実行する。ハイパーバイザは、物理ディスクへのある量のアクセスを仮想ディスクに配分する。一実施形態では、ハイパーバイザ４０１は、物理ディスク上のある量の空間を配分する。別の実施形態では、ハイパーバイザ４０１は、物理ディスク上の複数のページを配分する。いくつかの実施形態では、ハイパーバイザは、仮想マシン４５０を初期化して実行するプロセスの一部として、仮想ディスク４４２をプロビジョニングする。
【０１３２】
一実施形態では、管理コンポーネント４０４ａは、プール管理コンポーネント４０４ａと称される。別の実施形態では、制御オペレーティングシステム４０５ａと称され得る、管理オペレーティングシステム４０５ａは、管理コンポーネントを含む。いくつかの実施形態では、管理コンポーネントは、ツールスタックと称される。これらの実施形態のうちの１つでは、管理コンポーネントは、図４Ａに関連して上記で説明されるツールスタック４０４である。他の実施形態では、管理コンポーネント４０４は、管理者等のユーザから、プロビジョニングおよび／または実行する仮想マシン４０６の識別を受信するためのユーザインターフェースを提供する。なおも他の実施形態では、管理コンポーネント４０４は、管理者等のユーザから、１つの物理マシン１００から別の物理マシンへの仮想マシン４０６ｂの移動の要求を受信するためのユーザインターフェースを提供する。さらなる実施形態では、管理コンポーネント４０４ａは、要求された仮想マシン４０６ｄを実行するコンピューティングデバイス１００ｂを識別し、識別された仮想マシンを実行するように識別されたコンピューティングデバイス１００ｂ上のハイパーバイザ４０１ｂに命令し、そのような管理コンポーネントは、プール管理コンポーネントと称されてもよい。
【０１３３】
ここで図４Ｃを参照すると、仮想アプリケーション配信コントローラまたは仮想アプライアンス４５０の実施形態が、描写される。要するに、図２Ａおよび２Ｂに関連して上記で説明されるアプライアンス２００（例えば、アプリケーション配信コントローラ）の機能性および／または実施形態のうちのいずれかが、図４Ａおよび４Ｂに関連して上記で説明される仮想化された環境の任意の実施形態で展開されてもよい。アプライアンス２００の形態で展開されているアプリケーション配信コントローラの機能性の代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００で展開されてもよい。
【０１３４】
ここで図４Ｃを参照すると、サーバ１０６のハイパーバイザ４０１上で動作する仮想アプライアンス４５０の実施形態の略図が、描写される。図２Ａおよび２Ｂのアプライアンス２００と同様に、仮想アプライアンス４５０は、可用性、性能、オフロード、およびセキュリティのための機能性を提供してもよい。可用性に関して、仮想アプライアンスは、ネットワークの層４と７との間で負荷平衡を行ってもよく、また、知的サービス健全性監視を行ってもよい。ネットワークトラフィック加速を介した性能増加に関して、仮想アプライアンスは、キャッシングおよび圧縮を行ってもよい。任意のサーバの処理をオフロードするために、仮想アプライアンスは、接続多重化およびプーリングおよび／またはＳＳＬ処理を行ってもよい。セキュリティに関して、仮想アプライアンスは、アプライアンス２００のアプリケーションファイアウォール機能性およびＳＳＬ  ＶＰＮ機能のうちのいずれかを行ってもよい。
【０１３５】
図２Ａに関連して説明されるようなアプライアンス２００のモジュールのうちのいずれかは、既製のサーバ等の任意のサーバ上の仮想化された環境３００または仮想化されていない環境で実行可能な１つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、仮想化されたアプライアンス配信コントローラ４５０の形態でパッケージ化され、組み合わせられ、設計され、または構築されてもよい。例えば、仮想アプライアンスは、コンピューティングデバイス上にインストールするインストールパッケージの形態で提供されてもよい。図２Ａを参照すると、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮２３８、暗号化エンジン２３４、パケットエンジン２４０、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、および健全性監視プログラム２１６のうちのいずれかは、コンピューティングデバイスおよび／または仮想化された環境３００の任意のオペレーティングシステム上で起動するソフトウェアコンポーネントまたはモジュールとして、設計および構築されてもよい。アプライアンス２００の暗号化プロセッサ２６０、プロセッサ２６２、メモリ２６４、およびネットワークスタック２６７を使用する代わりに、仮想化されたアプライアンス４００は、仮想化された環境４００によって提供されるような、または別様にサーバ１０６上で利用可能であるような、これらのリソースのうちのいずれかを使用してもよい。
【０１３６】
依然として図４Ｃを参照すると、要するに、任意の１つまたはそれを上回るｖサーバ２７５Ａ−２７５Ｎが、任意のサーバ１０６等の任意のタイプのコンピューティングデバイス１００の仮想化された環境４００で動作または実行されてもよい。図２Ｂに関連して説明されるアプライアンス２００のモジュールまたは機能性のうちのいずれかは、サーバの仮想化された、または仮想化されていない環境のいずれかで動作するように設計および構築されてもよい。ｖサーバ２７５、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、加速２８８、Ａｐｐ  ＦＷ２９０、および監視エージェントのうちのいずれかは、デバイスおよび／または仮想化された環境４００上で実行可能な１つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、アプリケーション配信コントローラ４５０の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。
【０１３７】
いくつかの実施形態では、サーバは、各仮想マシンが仮想アプリケーション配信コントローラ４５０の同一または異なる実施形態を起動する、仮想化環境で複数の仮想マシン４０６ａ−４０６ｎを実行してもよい。いくつかの実施形態では、サーバは、マルチコア処理システムのコア上の１つまたはそれを上回る仮想マシン上で１つまたはそれを上回る仮想アプライアンス４５０を実行してもよい。いくつかの実施形態では、サーバは、多重プロセッサデバイスの各プロセッサ上の１つまたはそれを上回る仮想マシン上で１つまたはそれを上回る仮想アプライアンス４５０を実行してもよい。
【０１３８】
Ｅ．マルチコアアーキテクチャを提供するためのシステムおよび方法
ムーアの法則によると、集積回路上に置かれ得るトランジスタの数は、約２年毎に倍になり得る。しかしながら、ＣＰＵ速度増加は、停滞状態に達し得、例えば、ＣＰＵ速度は、２００５年以降、約３．５〜４ＧＨｚ範囲になっている。ある場合には、ＣＰＵ製造業者は、付加的性能を獲得するためにＣＰＵ速度増加に依拠しない場合がある。一部のＣＰＵ製造業者は、付加的性能を提供するように、付加的コアをそれらのプロセッサに追加し得る。性能獲得のためにＣＰＵに依拠する、ソフトウェアおよびネットワーキングベンダのもの等の製品は、これらのマルチコアＣＰＵを活用することによって、それらの性能を改良し得る。単一のＣＰＵのために設計および構築されるソフトウェアは、マルチスレッドの並列アーキテクチャを利用するように、または、別様にマルチコアアーキテクチャを利用するように、再設計され、および／または書き換えられてもよい。
【０１３９】
ｎコアまたはマルチコア技術と称される、アプライアンス２００のマルチコアアーキテクチャは、アプライアンスが、いくつかの実施形態では、単一コア性能障壁を突破することと、マルチコアＣＰＵの能力を活用することとを可能にする。図２Ａに関連して説明される前のアーキテクチャでは、単一のネットワークまたはパケットエンジンが起動される。ｎコア技術およびアーキテクチャの複数のコアは、複数のパケットエンジンが同時に、および／または並行して起動することを可能にする。パケットエンジンが各コア上で起動すると、アプライアンスアーキテクチャは、付加的コアの処理容量を活用する。いくつかの実施形態では、これは、性能および拡張可能性の最大７倍の増加を提供する。
【０１４０】
図５Ａには、機能並列性、データ並列性、またはフローベースのデータ並列性等の並列性または並列コンピューティング方式のタイプに従って、１つまたはそれを上回るプロセッサコアを横断する作業、タスク、負荷、またはネットワークトラフィック分布のいくつかの実施形態が、図示されている。要するに、図５Ａは、１からＮの合計コア数である、ｎ個のコアを伴うアプライアンス２００’等のマルチコアシステムの実施形態を図示する。一実施形態では、作業、負荷、またはネットワークトラフィックは、分布がｎ個のコア５０５Ｎ（以降では集合的にコア５０５と称される）のうちの全てまたは２つまたはそれを上回るものを横断するように、第１のコア５０５Ａ、第２のコア５０５Ｂ、第３のコア５０５Ｃ、第４のコア５０５Ｄ、第５のコア５０５Ｅ、第６のコア５０５Ｆ、第７のコア５０５Ｇ等の間に分配されることができる。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のＶＩＰ２７５があってもよい。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のパケットエンジン２４０があってもよい。使用されるアプローチのうちのいずれかは、コアのうちのいずれかを横断する、異なる、様々な、または類似する作業負荷または性能レベル５１５につながり得る。機能並列性アプローチに関して、各コアは、パケットエンジン、ＶＩＰ２７５、またはアプライアンス２００によって提供される機能性のうちの異なる機能を起動してもよい。データ並列性アプローチでは、データは、データを受信するネットワークインターフェースカード（ＮＩＣ）またはＶＩＰ２７５に基づいて、コアを横断して並列化または分配されてもよい。別のデータ並列性アプローチでは、処理は、データフローを各コアに分配することによって、コアを横断して分配されてもよい。
【０１４１】
図５Ａに関してさらに詳細には、いくつかの実施形態では、負荷、作業、またはネットワークトラフィックが、機能並列性５００に従って、コア５０５の間で分配されることができる。機能並列性は、１つまたはそれを上回る個別の機能を果たす各コアに基づいてもよい。いくつかの実施形態では、第１のコアが、第１の機能を果たしてもよい一方で、第２のコアは、第２の機能を果たす。機能並列性アプローチでは、マルチコアシステムによって果たされる機能は、分割され、機能性に従って各コアに分配される。いくつかの実施形態では、機能並列性は、タスク並列性と称されてもよく、各プロセッサまたはコアが同一または異なるデータに異なるプロセスまたは機能を実行するときに、達成されてもよい。コアまたはプロセッサは、同一または異なるコードを実行してもよい。ある場合には、異なる実行スレッドまたはコードは、それらが作動するにつれて相互と通信してもよい。通信は、ワークフローの一部として、１つのスレッドから次のスレッドにデータをパスするように行われてもよい。
【０１４２】
いくつかの実施形態では、機能並列性５００に従って、コア５０５を横断して作業を分配するステップは、ネットワーク入出力管理（ＮＷＩ／Ｏ）５１０Ａ、セキュアソケットレイヤ（ＳＳＬ）暗号化および暗号解読５１０Ｂ、および伝送制御プロトコル（ＴＣＰ）機能５１０Ｃ等の特定の機能に従って、ネットワークトラフィックを分配するステップを含むことができる。これは、使用されている機能性の量またはレベルに基づく、作業、性能、または計算負荷５１５につながり得る。いくつかの実施形態では、データ並列性５４０に従って、コア５０５を横断して作業を分配するステップは、特定のハードウェアまたはソフトウェアコンポーネントと関連付けられるデータを分配することに基づいて、ある量の作業５１５を分配するステップを含むことができる。いくつかの実施形態では、フローベースのデータ並列性５２０に従って、コア５０５を横断して作業を分配するステップは、各コア上の作業５１５Ａ−Ｎの量が、同様である、実質的に等しい、または比較的均等に分配され得るように、コンテキストまたはフローに基づいてデータを分配するステップを含むことができる。
【０１４３】
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンまたはＶＩＰによって提供される複数の機能性のうちの１つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を行ってもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を行う。同様に、コア３が、ＳＳＬオフローディングを行ってもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、１つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図５Ａに図示されるように、機能別の分割は、性能または負荷５１５の異なるレベルで起動する、異なるコアにつながり得る。
【０１４４】
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンによって提供される複数の機能性のうちの１つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を行ってもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を行う。同様に、コア３が、ＳＳＬオフローディングを行ってもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、１つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図５Ａに図示されるように、機能別の分割は、負荷または性能の異なるレベルで起動する、異なるコアにつながり得る。
【０１４５】
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、図５Ａは、第１のコア、すなわち、ネットワークＩ／Ｏ機能性５１０Ａと関連付けられるアプリケーションおよびプロセスを処理する、コア１５０５Ａを図示する。ネットワークＩ／Ｏと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、ＮＷＩ／Ｏ５１０Ａと関連付けられるポート宛先を有する、発信および着信パケットは、ＮＷＩ／Ｏポートと関連付けられる全てのネットワークトラフィックをハンドリングすることに専用である、コア１５０５Ａに向かってダイレクトされるであろう。同様に、コア２  ５０５Ｂは、ＳＳＬ処理と関連付けられる機能性をハンドリングすることに専用であって、コア４  ５０５Ｄは、全てのＴＣＰレベル処理および機能性をハンドリングすることに専用であり得る。
【０１４６】
図５Ａは、ネットワークＩ／Ｏ、ＳＳＬ、およびＴＣＰ等の機能を図示するが、他の機能もコアに割り当てられることができる。これらの他の機能は、本明細書に説明される機能または動作のうちのいずれか１つまたはそれを上回るものを含むことができる。例えば、図２Ａおよび２Ｂと併せて説明される機能のうちのいずれかは、機能性基準でコアを横断して分配されてもよい。ある場合には、第１のＶＩＰ２７５Ａが、第１のコア上で起動してもよい一方で、異なる構成を伴う第２のＶＩＰ２７５Ｂは、第２のコア上で起動してもよい。いくつかの実施形態では、各コア５０５が特定の機能と関連付けられる処理をハンドリングすることができるように、各コア５０５は、その特定の機能性をハンドリングすることができる。例えば、コア２  ５０５Ｂが、ＳＳＬオフローディングをハンドリングしてもよい一方で、コア４  ５０５Ｄは、アプリケーション層処理およびトラフィック管理をハンドリングしてもよい。
【０１４７】
他の実施形態では、作業、負荷、またはネットワークトラフィックが、任意のタイプおよび形態のデータ並列性５４０に従って、コア５０５の間で分配されてもよい。いくつかの実施形態では、データ並列性は、異なる分配されたデータ上で同一のタスクまたは機能性を果たす各コアによって、マルチコアシステムにおいて達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードが、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令が、動作を制御するが、同一コードを実行してもよい。いくつかの実施形態では、データ並列性が、パケットエンジン、ｖサーバ（ＶＩＰ）２７５Ａ−Ｃ、ネットワークインターフェースカード（ＮＩＣ）５４２Ｄ−Ｅ、および／またはアプライアンス２００上に含まれる、またはそれと関連付けられる任意の他のネットワーキングハードウェアまたはソフトウェアの観点から、達成される。例えば、各コアは、同一パケットエンジンまたはＶＩＰコードまたは構成を起動してもよいが、分配されたデータの異なるセット上で動作してもよい。各ネットワーキングハードウェアまたはソフトウェア構築物は、異なる、様々な、または実質的に同一の量のデータを受信することができ、結果として、様々な、異なる、または比較的同一の量の負荷５１５を有し得る。
【０１４８】
データ並列性アプローチの場合、作業は、ＶＩＰ、ＮＩＣ、および／またはＶＩＰまたはＮＩＣのデータフローに基づいて、分割されて分配されてもよい。これらのアプローチのうちの１つでは、マルチコアシステムの作業は、データの分配されたセット上に各ＶＩＰ作業を有することによって、ＶＩＰの間で分割または分配されてもよい。例えば、各コアは、１つまたはそれを上回るＶＩＰを起動するように構成されてもよい。ネットワークトラフィックは、そのトラフィックをハンドリングする各ＶＩＰのためのコアに分配されてもよい。これらのアプローチのうちの別のものでは、アプライアンスの作業は、いずれのＮＩＣがネットワークトラフィックを受信するかに基づいて、コアの間で分割または分配されてもよい。例えば、第１のＮＩＣのネットワークトラフィックが、第１のコアに分配されてもよい一方で、第２のＮＩＣのネットワークトラフィックは、第２のコアに分配されてもよい。ある場合には、コアは、複数のＮＩＣからのデータを処理してもよい。
【０１４９】
図５Ａは、ＶＩＰ１  ２７５Ａ、ＶＩＰ２  ２７５Ｂ、およびＶＩＰ３  ２７５Ｃの場合のように、単一のコア５０５と関連付けられる単一のｖサーバを図示する。いくつかの実施形態では、単一のｖサーバは、１つまたはそれを上回るコア５０５と関連付けられることができる。対照的に、１つまたはそれを上回るｖサーバは、単一のコア５０５と関連付けられることができる。ｖサーバをコア５０５と関連付けるステップは、その特定のｖサーバと関連付けられる全ての機能を処理するように、そのコア５０５を含んでもよい。いくつかの実施形態では、各コアは、同一コードおよび構成を有する、ＶＩＰを実行する。他の実施形態では、各コアは、同一コードを有するが、異なる構成を有する、ＶＩＰを実行する。いくつかの実施形態では、各コアは、異なるコードと、同一または異なる構成とを有する、ＶＩＰを実行する。
【０１５０】
ｖサーバのように、ＮＩＣはまた、特定のコア５０５と関連付けられることもできる。多くの実施形態では、ＮＩＣがデータパケットを受信または伝送するときに、特定のコア５０５がデータパケットを受信および伝送することに関与する処理をハンドリングするように、ＮＩＣは、１つまたはそれを上回るコア５０５に接続されることができる。一実施形態では、単一のＮＩＣは、ＮＩＣ１  ５４２ＤおよびＮＩＣ２  ５４２Ｅの場合のように、単一のコア５０５と関連付けられることができる。他の実施形態では、１つまたはそれを上回るＮＩＣは、単一のコア５０５と関連付けられることができる。他の実施形態では、単一のＮＩＣは、１つまたはそれを上回るコア５０５と関連付けられることができる。これらの実施形態では、負荷は、各コア５０５が実質的に類似する量の負荷を処理するように、１つまたはそれを上回るコア５０５の間で分配され得る。ＮＩＣと関連付けられるコア５０５は、その特定のＮＩＣと関連付けられる全ての機能および／またはデータを処理してもよい。
【０１５１】
ＶＩＰまたはＮＩＣのデータに基づいて、コアを横断して作業を分配するステップは、独立性のレベルを有し得るが、いくつかの実施形態では、これは、図５Ａの様々な負荷５１５によって図示されるように、コアの不平衡使用につながり得る。
【０１５２】
いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、任意のタイプおよび形態のデータフローに基づいて、コア５０５の間で分配されることができる。これらのアプローチのうちの別のものでは、作業は、データフローに基づいてコアの間で分割または分配されてもよい。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス２００’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。
【０１５３】
フローベースのデータ並列性５２０では、データの分布は、要求／応答ペアリング、トランザクション、セッション、接続、またはアプリケーション通信等の任意のタイプのデータのフローに関連する。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。データフローの分布は、各コア５０５が、実質的に等しい、または比較的均等に分配された量の負荷、データ、またはネットワークトラフィックを搬送するようなものであってもよい。
【０１５４】
いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス２００’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。一実施形態では、データフローは、トランザクションまたは一連のトランザクションに基づいて、分配されることができる。本トランザクションは、いくつかの実施形態では、クライアントとサーバとの間にあることができ、ＩＰアドレスまたは他のパケット識別子によって特徴付けられることができる。例えば、コア１  ５０５Ａは、特定のクライアントと特定のサーバとの間のトランザクションに専用であることができ、したがって、コア１  ５０５Ａ上の負荷５１５Ａは、特定のクライアントとサーバとの間のトランザクションと関連付けられるネットワークトラフィックから成ってもよい。ネットワークトラフィックをコア１  ５０５Ａに配分することは、特定のクライアントまたはサーバのいずれかから生じる全てのデータパケットをコア１  ５０５Ａにルーティングすることによって、達成されることができる。
【０１５５】
作業または負荷は、部分的にトランザクションに基づいてコアに分配されることができるが、他の実施形態では、負荷または作業は、パケット毎の基準で配分されることができる。これらの実施形態では、アプライアンス２００は、データパケットを傍受し、それらを、最少量の負荷を有するコア５０５に配分することができる。例えば、コア１上の負荷５１５Ａが、残りのコア５０５Ｂ−Ｎ上の負荷５１５Ｂ−Ｎより少ないため、アプライアンス２００は、第１の着信データパケットをコア１  ５０５Ａに配分し得る。いったん第１のデータパケットがコア１  ５０５Ａに配分されると、コア１  ５０５Ａ上の負荷５１５Ａの量は、第１のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス２００が第２のデータパケットを傍受するとき、コア４  ５０５Ｄが第２の最少量の負荷を有するため、アプライアンス２００は、負荷をコア４  ５０５Ｄに配分するであろう。最少量の負荷を伴うコアにデータパケットを配分することは、いくつかの実施形態では、各コア５０５に分配される負荷５１５Ａ−Ｎが実質的に等しいままであることを確実にすることができる。
【０１５６】
他の実施形態では、負荷は、ネットワークトラフィックのある区分が特定のコア５０５に配分される、単位毎の基準で配分されることができる。上記の実施例は、パケット毎の基準で負荷平衡を例証する。他の実施形態では、負荷は、１０、１００、または１，０００個毎のパケットが、最少量の負荷を有するコア５０５に配分されるように、パケットの数に基づいて配分されることができる。コア５０５に配分されるパケットの数は、アプリケーション、ユーザ、または管理者によって判定される数であることができ、ゼロより大きい任意の数であることができる。なおも他の実施形態では、負荷は、パケットが所定の時間量にわたって特定のコア５０５に分配されるように、時間メトリックに基づいて配分されることができる。これらの実施形態では、パケットは、５ミリ秒にわたって、またはユーザ、プログラム、システム、管理者によって、または別様に判定される、任意の時間周期にわたって、特定のコア５０５に配分されることができる。所定の時間周期が経過した後、データパケットが、所定の時間周期にわたって異なるコア５０５に伝送される。
【０１５７】
１つまたはそれを上回るコア５０５の間で作業、負荷、またはネットワークトラフィックを分配するためのフローベースのデータ並列性方法は、上記の実施形態の任意の組み合わせを備えることができる。これらの方法は、アプライアンス２００の任意の部分によって、パケットエンジン等のコア５０５のうちの１つの上で実行するアプリケーションまたは実行可能命令のセットによって、またはアプライアンス２００と通信するコンピューティングデバイス上で実行する任意のアプリケーション、プログラム、またはエージェントによって、実施されることができる。
【０１５８】
図５Ａに図示される機能およびデータ並列性計算方式は、機能並列性５００、データ並列性５４０、フローベースのデータ並列性５２０、またはそれらの任意の部分を包含する、ハイブリッド並列性または分散処理方式を生成するように、任意の様式で組み合わせられることができる。ある場合には、マルチコアシステムは、１つまたはそれを上回るコア５０５の間で負荷を分配するために、任意のタイプおよび形態の負荷平衡方式を使用してもよい。負荷平衡方式は、機能およびデータ並列性方式のうちのいずれかまたはそれらの組み合わせとの任意の組み合わせで、使用されてもよい。
【０１５９】
図５Ｂには、任意のタイプおよび形態の１つまたはそれを上回るシステム、アプライアンス、デバイス、またはコンポーネントであり得る、マルチコアシステム５４５の実施形態が図示されている。本システム５４５は、いくつかの実施形態では、１つまたはそれを上回る処理コア５０５Ａ−Ｎを有する、アプライアンス２００内に含まれることができる。システム５４５はさらに、メモリバス５５６と通信する、１つまたはそれを上回るパケットエンジン（ＰＥ）またはパケット処理エンジン（ＰＰＥ）５４８Ａ−Ｎを含むことができる。メモリバスは、１つまたはそれを上回る処理コア５０５Ａ−Ｎと通信するために使用されてもよい。また、システム５４５内には、１つまたはそれを上回るネットワークインターフェースカード（ＮＩＣ）５５２と、１つまたはそれを上回る処理コア５０５Ａ−Ｎとさらに通信し得るフローディストリビュータ５５０とが含まれることができる。フローディストリビュータ５５０は、受信側スケーラ（ＲＳＳ）または受信側スケーリング（ＲＳＳ）モジュール５６０を備えることができる。
【０１６０】
さらに図５Ｂを参照すると、さらに詳細には、一実施形態では、パケットエンジン５４８Ａ−Ｎは、図２Ａおよび２Ｂに説明されるアプライアンスの任意の部分等の本明細書に説明されるアプライアンス２００の任意の部分を備えることができる。パケットエンジン５４８Ａ−Ｎは、いくつかの実施形態では、以下の要素、すなわち、パケットエンジン２４０、ネットワークスタック２６７、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮エンジン２３８、暗号化エンジン２３４、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、監視プログラム２１６、およびメモリバス５５６または１つまたはそれを上回るコア５０５Ａ−Ｎのいずれかの１つからデータパケットを受信することが可能な任意の他のソフトウェアまたはハードウェア要素のうちのいずれかを備えることができる。いくつかの実施形態では、パケットエンジン５４８Ａ−Ｎは、１つまたはそれを上回るｖサーバ２７５Ａ−Ｎまたはその任意の部分を備えることができる。他の実施形態では、パケットエンジン５４８Ａ−Ｎは、以下の機能性、すなわち、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、パケット加速２８８、Ａｐｐ  ＦＷ２９０、監視エージェント１９７によって提供される監視等の監視、ＴＣＰスタックとして機能することと関連付けられる機能性、負荷平衡、ＳＳＬオフローディングおよび処理、コンテンツ切替、ポリシ評価、キャッシング、圧縮、エンコード、解凍、デコード、アプリケーションファイアウォール機能性、ＸＭＬ処理および加速、およびＳＳＬ  ＶＰＮコネクティビティの任意の組み合わせを提供することができる。
【０１６１】
パケットエンジン５４８Ａ−Ｎは、いくつかの実施形態では、特定のサーバ、ユーザ、クライアント、またはネットワークと関連付けられることができる。パケットエンジン５４８が特定のエンティティと関連付けられるとき、そのパケットエンジン５４８は、そのエンティティと関連付けられるデータパケットを処理することができる。例えば、パケットエンジン５４８が第１のユーザと関連付けられる場合、そのパケットエンジン５４８は、第１のユーザによって生成されるパケット、または第１のユーザと関連付けられる宛先アドレスを有するパケットを処理し、それに作用するであろう。同様に、パケットエンジン５４８は、パケットエンジン５４８が、特定のエンティティによって生成されていない、またはそのエンティティに向けられていない任意のデータパケットを処理し、別様にそれに作用することができるように、そのエンティティと関連付けられないことを選定してもよい。
【０１６２】
ある事例では、パケットエンジン５４８Ａ−Ｎは、図５Ａに図示される機能および／またはデータ並列性方式のうちのいずれかを実施するように構成されることができる。これらの事例では、パケットエンジン５４８Ａ−Ｎは、分布が並列性または分布方式に従うように、処理コア５０５Ａ−Ｎの間で機能またはデータを分配することができる。いくつかの実施形態では、単一のパケットエンジン５４８Ａ−Ｎが、負荷平衡方式を実施する一方で、他の実施形態では、１つまたはそれを上回るパケットエンジン５４８Ａ−Ｎが、負荷平衡方式を実施する。各コア５０５Ａ−Ｎは、一実施形態では、負荷平衡がパケットエンジンによって実施され得るように、特定のパケットエンジン５４８と関連付けられることができる。負荷平衡は、本実施形態では、パケットエンジン５４８Ａ−Ｎが負荷を分配する場所を集合的に判定することができるように、コア５０５と関連付けられる各パケットエンジン５４８Ａ−Ｎが、コアと関連付けられる他のパケットエンジンと通信することを要求してもよい。本プロセスの一実施形態は、負荷のために各パケットエンジンから投票を受信する、アービタを含むことができる。アービタは、部分的に、エンジンの投票の時期、ある場合には、エンジンの関連付けられるコア５０５上の負荷の現在の量と関連付けられる優先順位値に基づいて、負荷を各パケットエンジン５４８Ａ−Ｎに分配することができる。
【０１６３】
コア上で起動するパケットエンジンのうちのいずれかは、ユーザモード、カーネル、またはそれらの任意の組み合わせで起動してもよい。いくつかの実施形態では、パケットエンジンは、ユーザまたはアプリケーション空間内で起動するアプリケーションまたはプログラムとして動作する。これらの実施形態では、パケットエンジンは、カーネルによって提供される任意の機能性にアクセスするために、任意のタイプおよび形態のインターフェースを使用してもよい。いくつかの実施形態では、パケットエンジンは、カーネルモードで、またはカーネルの一部として動作する。いくつかの実施形態では、パケットエンジンの第１の部分が、ユーザモードで動作する一方で、パケットエンジンの第２の部分は、カーネルモードで動作する。いくつかの実施形態では、第１のコア上の第１のパケットエンジンが、カーネルモードで実行する一方で、第２のコア上の第２のパケットエンジンは、ユーザモードで実行する。いくつかの実施形態では、パケットエンジンまたはその任意の部分は、ＮＩＣまたはその任意のドライバ上で、またはそれと連動して動作する。
【０１６４】
いくつかの実施形態では、メモリバス５５６は、任意のタイプおよび形態のメモリまたはコンピュータバスであることができる。単一のメモリバス５５６が図５Ｂで描写されているが、システム５４５は、任意の数のメモリバス５５６を備えることができる。一実施形態では、各パケットエンジン５４８は、１つまたはそれを上回る個々のメモリバス５５６と関連付けられることができる。
【０１６５】
ＮＩＣ５５２は、いくつかの実施形態では、本明細書に説明されるネットワークインターフェースカードまたは機構のうちのいずれかであることができる。ＮＩＣ５５２は、任意の数のポートを有することができる。ＮＩＣは、任意のタイプおよび形態のネットワーク１０４に接続するように設計および構築されることができる。単一のＮＩＣ５５２が図示されているが、システム５４５は、任意の数のＮＩＣ５５２を備えることができる。いくつかの実施形態では、各コア５０５Ａ−Ｎは、１つまたはそれを上回る単一のＮＩＣ５５２と関連付けられることができる。したがって、各コア５０５は、特定のコア５０５専用の単一のＮＩＣ５５２と関連付けられることができる。
【０１６６】
コア５０５Ａ−Ｎは、本明細書に説明されるプロセッサのうちのいずれかを備えることができる。さらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５構成のうちのいずれかに従って構成されることができる。なおもさらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５機能性のうちのいずれかを有することができる。図５Ｂは、７つのコア５０５Ａ−Ｇを図示するが、任意の数のコア５０５が、システム５４５内に含まれることができる。具体的には、システム５４５は、「Ｎ」個のコアを備えることができ、「Ｎ」は、ゼロより大きい整数である。
【０１６７】
コアは、使用するためにそのコアに配分される、または割り当てられる、メモリを有する、または使用してもよい。メモリは、そのコアのプライベートまたはローカルメモリと見なされ、そのコアのみによってアクセス可能であり得る。コアは、共有される、または複数のコアに割り当てられる、メモリを有する、または使用してもよい。メモリは、１つを上回るコアによってアクセス可能である公共または共有メモリと見なされてもよい。コアは、プライベートおよび公共メモリの任意の組み合わせを使用してもよい。各コアのための別個のアドレス空間を用いることで、あるレベルの協調が、同一アドレス空間を使用する場合から排除される。別個のアドレス空間を用いることで、コアは、他のコアとの対立について心配することなく、コアの独自のアドレス空間内で情報およびデータに作業を行うことができる。各パケットエンジンは、ＴＣＰおよび／またはＳＳＬ接続のための別個のメモリプールを有してもよい。
【０１６８】
さらに図５Ｂを参照すると、図５Ａに関連して上記で説明されるコア５０５の機能性および／または実施形態のうちのいずれかが、図４Ａおよび４Ｂに関連して上記で説明される仮想化された環境の任意の実施形態で展開されることができる。物理プロセッサ５０５の形態で展開されているコア５０５の機能性の代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００で展開されてもよい。他の実施形態では、アプライアンスまたは単一のデバイスの形態で展開されているコア５０５の機能性の代わりに、機能性は、任意の配列で複数のデバイスを横断して展開されてもよい。例えば、１つのデバイスは、２つまたはそれを上回るコアを備えてもよく、別のデバイスは、２つまたはそれを上回るコアを備えてもよい。例えば、マルチコアシステムは、コンピューティングデバイスのクラスタ、サーバファーム、またはコンピューティングデバイスのネットワークを含んでもよい。いくつかの実施形態では、コアの形態で展開されているコア５０５の機能性の代わりに、機能性は、複数の単一コアプロセッサ等の複数のプロセッサ上で展開されてもよい。
【０１６９】
一実施形態では、コア５０５は、任意のタイプおよび形態のプロセッサであってもよい。いくつかの実施形態では、コアは、本明細書に説明される任意のプロセッサまたは中央処理ユニットと実質的に同様に機能することができる。いくつかの実施形態では、コア５０５は、本明細書に説明される任意のプロセッサの任意の部分を備えてもよい。図５Ａは、７つのコアを図示するが、任意の「Ｎ」個のコアがアプライアンス２００内に存在することができ、「Ｎ」は、１より大きい任意の整数である。いくつかの実施形態では、コア５０５は、共通アプライアンス２００内にインストールされることができる一方で、他の実施形態では、コア５０５は、相互に通信可能に接続される１つまたはそれを上回るアプライアンス２００内にインストールされることができる。コア５０５は、いくつかの実施形態では、グラフィックス処理ソフトウェアを備えることができる一方で、他の実施形態では、コア５０５は、一般処理能力を提供する。コア５０５は、物理的に相互の近傍にインストールされることができ、および／または相互に通信可能に接続されることができる。コアは、物理的に任意のタイプおよび形態のバスまたはサブシステムによって接続され、および／またはコアに、コアから、および／またはコアの間でデータを転送するためにコアに通信可能に結合されてもよい。
【０１７０】
各コア５０５は、他のコアと通信するためのソフトウェアを備えることができるが、いくつかの実施形態では、コアマネージャ（図示せず）は、各コア５０５の間の通信を促進することができる。いくつかの実施形態では、カーネルは、コア管理を提供してもよい。コアは、種々のインターフェース機構を使用して、相互とインターフェースをとってもよい、または通信してもよい。いくつかの実施形態では、コア間メッセージングが、コアを接続するバスまたはサブシステムを介してメッセージまたはデータを第２のコアに送信する第１のコア等のコアの間で通信するために使用されてもよい。いくつかの実施形態では、コアは、任意のタイプおよび形態の共有メモリインターフェースを介して通信してもよい。一実施形態では、全てのコアの間で共有される１つまたはそれを上回るメモリ場所があってもよい。いくつかの実施形態では、各コアは、相互のコアと共有される別個のメモリ場所を有してもよい。例えば、第１のコアは、第２のコアとの第１の共有メモリと、第３のコアとの第２の共有メモリとを有してもよい。いくつかの実施形態では、コアは、カーネルを介した機能コール等の任意のタイプのプログラミングまたはＡＰＩを介して通信してもよい。いくつかの実施形態では、オペレーティングシステムは、複数のコアデバイスを認識してサポートし、コア間通信のためのインターフェースおよびＡＰＩを提供してもよい。
【０１７１】
フローディストリビュータ５５０は、任意のタイプおよび形態のハードウェア上で実行する、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、または任意のタイプおよび形態の実行可能命令であることができる。いくつかの実施形態では、フローディストリビュータ５５０は、本明細書に説明される動作および機能のうちのいずれかを果たす回路の任意の設計および構築であることができる。いくつかの実施形態では、フローディストリビュータは、コア５０５および／またはコア上で起動するパケットエンジンまたはＶＩＰの間のデータパケットの分布を分配、自動転送、ルーティング、制御、および／または管理する。フローディストリビュータ５５０は、いくつかの実施形態では、インターフェースマスタと称されることができる。一実施形態では、フローディストリビュータ５５０は、アプライアンス２００のコアまたはプロセッサ上で実行する実行可能命令のセットを備える。別の実施形態では、フローディストリビュータ５５０は、アプライアンス２００と通信するコンピューティングマシン上で実行する実行可能命令のセットを備える。いくつかの実施形態では、フローディストリビュータ５５０は、ファームウェア等のＮＩＣ上で実行する実行可能命令のセットを備える。なおも他の実施形態では、フローディストリビュータ５５０は、コアまたはプロセッサの間でデータパケットを分配するソフトウェアおよびハードウェアの任意の組み合わせを備える。一実施形態では、フローディストリビュータ５５０が、コア５０５Ａ−Ｎのうちの少なくとも１つの上で実行する一方で、他の実施形態では、各コア５０５Ａ−Ｎに割り当てられる別個のフローディストリビュータ５５０が、関連付けられるコア５０５Ａ−Ｎ上で実行する。フローディストリビュータは、コアを横断するフローの平衡をとるために、任意のタイプおよび形態の統計的または確率的アルゴリズムまたは意思決定を使用してもよい。ＮＩＣ等のアプライアンスのハードウェアまたはカーネルは、ＮＩＣおよび／またはコアを横断して順次動作をサポートするように設計および構築されてもよい。
【０１７２】
システム５４５が１つまたはそれを上回るフローディストリビュータ５５０を備える、実施形態では、各フローディストリビュータ５５０は、プロセッサ５０５またはパケットエンジン５４８と関連付けられることができる。フローディストリビュータ５５０は、各フローディストリビュータ５５０が、システム５４５内で実行する他のフローディストリビュータ５５０と通信することを可能にする、インターフェース機構を備えることができる。１つの事例では、１つまたはそれを上回るフローディストリビュータ５５０は、相互と通信することによって、負荷の平衡をとる方法を判定することができる。本プロセスは、次いで、いずれのフローディストリビュータ５５０が負荷を受容するべきかを判定する、アービタに投票を提出するために、上記で説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第１のフローディストリビュータ５５０’は、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が所定の閾値を上回ること、関連付けられるコア上の負荷が所定の閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷より少ないこと、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを自動転送する場所を判定するために使用されることができる任意の他の測定基準のうちのいずれかに基づいて、第１のデータパケットを関連付けられるコアに自動転送するかどうかを判定することができる。
【０１７３】
フローディストリビュータ５５０は、本明細書に説明されるもの等の分布、計算、または負荷平衡方式に従って、コア５０５の間でネットワークトラフィックを分配することができる。一実施形態では、フローディストリビュータは、機能並列性分布方式５５０、データ並列性負荷分布方式５４０、フローベースのデータ並列性分布方式５２０、またはこれらの分布方式または複数のプロセッサの間で負荷を分配するための任意の負荷平衡方式の任意の組み合わせのうちのいずれか１つに従って、ネットワークトラフィックを分配することができる。したがって、フローディストリビュータ５５０は、データパケットを取り込み、動作負荷平衡または分布方式に従って、プロセッサを横断してそれらを分配することによって、負荷ディストリビュータとして作用することができる。一実施形態では、フローディストリビュータ５５０は、それに応じて、パケット、作業、または負荷を分配する方法を判定する１つまたはそれを上回る動作、機能、または論理を備えることができる。なおも他の実施形態では、フローディストリビュータ５５０は、ソースアドレスおよびデータパケットと関連付けられる宛先アドレスを識別し、それに応じて、パケットを分配し得る、１つまたはそれを上回るサブ動作、機能、または論理を備えることができる。
【０１７４】
いくつかの実施形態では、フローディストリビュータ５５０は、１つまたはそれを上回るコア５０５の間でデータパケットを分配する、受信側スケーリング（ＲＳＳ）ネットワークドライバモジュール５６０または任意のタイプおよび形態の実行可能命令を備えることができる。ＲＳＳモジュール５６０は、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、ＲＳＳモジュール５６０は、コア５０５Ａ−Ｎを横断して、またはマルチプロセッサネットワーク内の複数のプロセッサの間でデータパケットを分配するように、フローディストリビュータ５５０と連動して作動する。ＲＳＳモジュール５６０は、いくつかの実施形態では、ＮＩＣ５５２内で実行することができ、他の実施形態では、コア５０５のうちのいずれか１つの上で実行することができる。
【０１７５】
いくつかの実施形態では、ＲＳＳモジュール５６０は、ＭＩＣＲＯＳＯＦＴ受信側スケーリング（ＲＳＳ）方式を使用する。一実施形態では、ＲＳＳは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡をとられることを可能にする、Ｍｉｃｒｏｓｏｆｔ拡張可能ネットワーキングイニシアチブ技術である。ＲＳＳは、ネットワークパケットを処理するためのコアまたはプロセッサを判定するために任意のタイプおよび形態のハッシング方式を使用してもよい。
【０１７６】
ＲＳＳモジュール５６０は、Ｔｏｅｐｌｉｔｚハッシュ関数等の任意のタイプおよび形態のハッシュ関数を適用することができる。ハッシュ関数は、ハッシュタイプまたは一連の値のうちのいずれかに適用されてもよい。ハッシュ関数は、任意のセキュリティレベルのセキュアなハッシュであってもよい、または別様に暗号論的にセキュアである。ハッシュ関数は、ハッシュキーを使用してもよい。キーのサイズは、ハッシュ関数に依存している。Ｔｏｅｐｌｉｔｚハッシュに関して、サイズは、ＩＰｖ６については４０バイト、ＩＰｖ４については１６バイトであってもよい。
【０１７７】
ハッシュ関数は、いずれか１つまたはそれを上回る基準または設計目標に基づいて設計および構築されてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰｖ４、ＴＣＰ／ＩＰｖ６、ＩＰｖ４、およびＩＰｖ６ヘッダを含む、異なるハッシュ入力および異なるハッシュタイプのハッシュ結果の均等な分布を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、少数のバケット（例えば、２つまたは４つ）が存在しているときに均等に分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、多数のバケット（例えば、６４個のバケット）が存在したときにランダムに分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、ハッシュ関数は、計算またはリソース使用量のレベルに基づいて判定される。いくつかの実施形態では、ハッシュ関数は、ハードウェアでハッシュを実装することの容易性または困難に基づいて判定される。いくつかの実施形態では、ハッシュ関数は、悪意のある遠隔ホストが、全てハッシュするであろうパケットを同一バケットに送信することの容易性または困難に基づいて、判定される。
【０１７８】
ＲＳＳは、一連の値等の任意のタイプおよび形態の入力からハッシュを生成してもよい。本一連の値は、ネットワークパケットの任意のヘッダ、フィールド、またはペイロード、またはそれらの部分等のネットワークパケットの任意の部分を含むことができる。いくつかの実施形態では、ハッシュへの入力は、ハッシュタイプと称され、以下、すなわち、少なくとも２つのＩＰアドレスと、２つのポートとを備える、４タプル、値のいずれか４つのセットを備える４タプル、６タプル、２タプル、および／または任意の他の一連の数または値のうちのいずれか等のネットワークパケットまたはデータフローと関連付けられる情報の任意のタプルを含んでもよい。以下は、ＲＳＳによって使用され得る、ハッシュタイプの実施例である。
ソースＴＣＰポート、ソースＩＰバージョン４（ＩＰｖ４）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ４アドレスの４タプル。
ソースＴＣＰポート、ソースＩＰバージョン６（ＩＰｖ６）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ６アドレスの４タプル。
ソースＩＰｖ４アドレスおよび宛先ＩＰｖ４アドレスの２タプル。
ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
ＩＰｖ６拡張ヘッダを解析するためのサポートを含む、ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
【０１７９】
ハッシュ結果またはその任意の部分は、ネットワークパケットを分配するためのパケットエンジンまたはＶＩＰ等のコアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、１つまたはそれを上回るハッシュビットまたはマスクが、ハッシュ結果に適用される。ハッシュビットまたはマスクは、任意の数のビットまたはバイトであってもよい。ＮＩＣは、７ビット等の任意の数のビットをサポートしてもよい。ネットワークスタックは、初期化中に使用される実際のビットの数を設定してもよい。数は、１〜７を含むであろう。
【０１８０】
ハッシュ結果は、バケットテーブルまたは間接テーブル等の任意のタイプおよび形態のテーブルを介して、コアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、ハッシュ結果ビットの数は、テーブルの中へインデックス化するために使用される。ハッシュマスクの範囲は、間接テーブルのサイズを効果的に定義してもよい。ハッシュ結果の任意の部分またはハッシュ結果自体が、間接テーブルをインデックス化するために使用されてもよい。テーブル内の値は、コアまたはプロセッサ識別子によって等、コアまたはプロセッサのうちのいずれかを識別してもよい。いくつかの実施形態では、マルチコアシステムのコアの全てが、テーブル内で識別される。他の実施形態では、マルチコアシステムのコアのポートが、テーブル内で識別される。間接テーブルは、任意の数のバケット、例えば、ハッシュマスクによってインデックス化され得る、２〜１２８個のバケットを備えてもよい。各バケットは、コアまたはプロセッサを識別する、一連のインデックス値を備えてもよい。いくつかの実施形態では、フローコントローラおよび／またはＲＳＳモジュールは、間接テーブルを変更することによって、ネットワークの平衡を再びとり、ネットワーク負荷の平衡を再びとってもよい。
【０１８１】
いくつかの実施形態では、マルチコアシステム５７５は、ＲＳＳドライバまたはＲＳＳモジュール５６０を含まない。これらの実施形態のうちのいくつかでは、ソフトウェアステアリングモジュール（図示せず）またはシステム内のＲＳＳモジュール５６０のソフトウェア実施形態が、パケットをマルチコアシステム５７５内のコア５０５にステアリングするように、フローディストリビュータ５５０と連動して、またはその一部として動作することができる。
【０１８２】
フローディストリビュータ５５０は、いくつかの実施形態では、アプライアンス２００の上、コア５０５のうちのいずれか１つの上、およびマルチコアシステム５７５内に含まれるデバイスまたはコンポーネントのうちのいずれか１つの上の任意のモジュールまたはプログラム内で実行する。いくつかの実施形態では、フローディストリビュータ５５０’が、第１のコア５０５Ａ上で実行することができる一方で、他の実施形態では、フローディストリビュータ５５０’’は、ＮＩＣ５５２上で実行することができる。なおも他の実施形態では、フローディストリビュータ５５０’のインスタンスが、マルチコアシステム５７５に含まれる各コア５０５上で実行することができる。本実施形態では、フローディストリビュータ５５０’の各インスタンスは、コア５０５を横断してパケットを往復して自動転送するように、フローディストリビュータ５５０’の他のインスタンスと通信することができる。要求パケットへの応答が、同一のコアによって処理されない場合がある、すなわち、第１のコアが要求を処理する一方で、第２のコアが応答を処理する、状況が存在する。これらの状況では、フローディストリビュータ５５０’のインスタンスは、パケットを傍受し、それを所望または正しいコア５０５に自動転送することができ、すなわち、フローディストリビュータインスタンス５５０’は、応答を第１のコアに自動転送することができる。フローディストリビュータ５５０’の複数のインスタンスが、任意の数のコア５０５およびコア５０５の任意の組み合わせの上で実行することができる。
【０１８３】
フローディストリビュータは、いずれか１つまたはそれを上回るルールまたはポリシに応答して動作してもよい。ルールは、ネットワークパケット、データ、またはデータフローを受信するようにコアまたはパケット処理エンジンを識別してもよい。ルールは、ソースおよび宛先ＩＰアドレスおよびソースおよび宛先ポートの４タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。ルールによって規定されるタプルに合致する、受信されたパケットに基づいて、フローディストリビュータは、パケットをコアまたはパケットエンジンに自動転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび／またはコア間メッセージングを介して、コアに自動転送される。
【０１８４】
図５Ｂは、マルチコアシステム５７５内で実行するものとしてフローディストリビュータ５５０を図示するが、いくつかの実施形態では、フローディストリビュータ５５０は、マルチコアシステム５７５から遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行することができる。そのような実施形態では、フローディストリビュータ５５０は、データパケットを取り込み、１つまたはそれを上回るコア５０５を横断してパケットを分配するように、マルチコアシステム５７５と通信することができる。フローディストリビュータ５５０は、一実施形態では、アプライアンス２００に向けられているデータパケットを受信し、分布方式を受信されたデータパケットに適用し、データパケットをマルチコアシステム５７５の１つまたはそれを上回るコア５０５に分配することができる。一実施形態では、フローディストリビュータ５５０は、各パケットがマルチコアシステム５７５のサブノードに向かって標的化されるように、各パケットと関連付けられるメタデータを改変することによって、ルータが特定のコア５０５を標的化し得るように、ルータまたは他のアプライアンスに含まれることができる。そのような実施形態では、ＣＩＳＣＯのｖｎタグ機構が、適切なメタデータを用いて各パケットを改変する、またはタグ付けするために使用されることができる。
【０１８５】
図５Ｃには、１つまたはそれを上回る処理コア５０５Ａ−Ｎを備える、マルチコアシステム５７５の実施形態が図示されている。要するに、コア５０５のうちの１つは、制御コア５０５Ａとして指定されることができ、かつ他のコア５０５のための制御プレーン５７０として使用されることができる。他のコアが、データプレーン内で動作する二次コアであってもよい一方で、制御コアは、制御プレーンを提供する。コア５０５Ａ−Ｎは、グローバルキャッシュ５８０を共有してもよい。制御コアが、制御プレーンを提供する一方で、マルチコアシステム内の他のコアは、データプレーンを形成または提供する。これらのコアが、ネットワークトラフィック上でデータ処理機能性を果たす一方で、制御は、マルチコアシステムの初期化、構成、および制御を提供する。
【０１８６】
さらに図５Ｃを参照すると、さらに詳細には、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のプロセッサであることができる。さらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、図５Ｃに説明されるシステム５７５内で機能することが可能な任意のプロセッサであることができる。なおもさらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のコアまたはコアのグループであることができる。制御コアは、他のコアと異なるタイプのコアまたはプロセッサであってもよい。いくつかの実施形態では、制御は、異なるパケットエンジンを動作させてもよい、または他のコアのパケットエンジンと異なって構成されるパケットエンジンを有してもよい。
【０１８７】
コアのそれぞれのメモリの任意の部分は、コアによって共有されるグローバルキャッシュに配分されてもよい、またはそれに使用されてもよい。要するに、各コアのメモリのそれぞれの所定の割合または所定の量が、グローバルキャッシュに使用されてもよい。例えば、各コアの各メモリの５０％が、共有グローバルキャッシュに専用である、または配分されてもよい。すなわち、図示される実施形態では、制御プレーンコアまたはコア１を除外する各コアの２ＧＢが、２８ＧＢ共有グローバルキャッシュを形成するために使用されてもよい。構成サービスを介する等の制御プレーンの構成は、共有グローバルキャッシュに使用されるメモリの量を判定してもよい。いくつかの実施形態では、各コアは、グローバルキャッシュによって使用するための異なる量のメモリを提供してもよい。他の実施形態では、いずれか１つのコアは、いかなるメモリも提供しない、またはグローバルキャッシュを使用しない場合がある。いくつかの実施形態では、コアのうちのいずれかはまた、グローバル共有メモリに配分されていないメモリ内にローカルキャッシュを有してもよい。コアはそれぞれ、ネットワークトラフィックの任意の部分をグローバル共有キャッシュに記憶してもよい。コアはそれぞれ、要求または応答で使用するように、任意のコンテンツのためのキャッシュをチェックしてもよい。コアのうちのいずれかは、データフロー、要求、または応答で使用するように、グローバル共有キャッシュからコンテンツを取得してもよい。
【０１８８】
グローバルキャッシュ５８０は、本明細書に説明される任意のメモリまたは記憶要素等の任意のタイプおよび形態のメモリまたは記憶要素であることができる。いくつかの実施形態では、コア５０５は、所定量のメモリ（すなわち、３２ＧＢまたはシステム５７５にふさわしい任意の他のメモリ量）へのアクセスを有してもよい。グローバルキャッシュ５８０が、その所定量のメモリから配分されることができる一方で、残りの利用可能なメモリは、コア５０５の間で配分されることができる。他の実施形態では、各コア５０５は、所定量のメモリを有することができる。グローバルキャッシュ５８０は、各コア５０５に配分されたメモリの量を備えることができる。本メモリ量は、バイトで測定されることができる、または各コア５０５に配分されたメモリの割合として測定されることができる。したがって、グローバルキャッシュ５８０は、各コア５０５と関連付けられるメモリからの１ＧＢのメモリを備えることができる、または各コア５０５と関連付けられるメモリの２０％または半分を備えることができる。いくつかの実施形態では、コア５０５の一部のみが、メモリをグローバルキャッシュ５８０に提供する一方で、他の実施形態では、グローバルキャッシュ５８０は、コア５０５に割り当てられていないメモリを備えることができる。
【０１８９】
各コア５０５は、ネットワークトラフィックまたはキャッシュデータを記憶するためにグローバルキャッシュ５８０を使用することができる。いくつかの実施形態では、コアのパケットエンジンは、複数のパケットエンジンによって記憶されるデータをキャッシュして使用するために、グローバルキャッシュを使用する。例えば、図２Ａのキャッシュマネージャおよび図２Ｂキャッシュ機能性は、加速のためにデータを共有するようにグローバルキャッシュを使用してもよい。例えば、パケットエンジンはそれぞれ、ＨＴＭＬデータ等の応答をグローバルキャッシュに記憶してもよい。コア上で動作するキャッシュマネージャのうちのいずれかは、クライアント要求へのキャッシュ応答を供給するように、グローバルキャッシュにアクセスしてもよい。
【０１９０】
いくつかの実施形態では、コア５０５は、部分的にポートに基づいてデータフローを判定するために使用され得る、ポート配分テーブルを記憶するために、グローバルキャッシュ５８０を使用することができる。他の実施形態では、コア５０５は、着信および発信データパケットをダイレクトする場所を判定するためにフローディストリビュータによって使用され得る、アドレスルックアップテーブルまたは任意の他のテーブルまたはリストを記憶するために、グローバルキャッシュ５８０を使用することができる。コア５０５は、いくつかの実施形態では、キャッシュ５８０から読み取ること、およびそれに書き込むことができる一方で、他の実施形態では、コア５０５は、キャッシュ５８０から読み取ること、またはそれに書き込むことのみできる。コアは、コア間通信を行うためにグローバルキャッシュを使用してもよい。
【０１９１】
グローバルキャッシュ５８０は、各区分が特定のコア５０５に専用であることができる、個々のメモリ区分に区分化されてもよい。一実施形態では、制御コア５０５Ａが、より多くの量の利用可能なメモリを受信することができる一方で、他のコア５０５は、グローバルキャッシュ５８０への様々な量またはアクセスを受信することができる。
【０１９２】
いくつかの実施形態では、システム５７５は、制御コア５０５Ａを備えることができる。図５Ｃは、制御コアとしてコア１５０５Ａを図示するが、制御コアは、アプライアンス２００またはマルチコアシステム内の任意のコアであることができる。さらに、単一の制御コアのみが描写されているが、システム５７５は、それぞれ、システムに対するあるレベルの制御を有する、１つまたはそれを上回る制御コアを備えることができる。いくつかの実施形態では、１つまたはそれを上回る制御コアはそれぞれ、システム５７５の特定の側面を制御することができる。例えば、１つのコアが、いずれの分布方式を使用するかを決定することを制御することができる一方で、別のコアは、グローバルキャッシュ５８０のサイズを判定することができる。
【０１９３】
マルチコアシステムの制御プレーンは、専用管理コアとして、またはマスタコアとしてのコアの指定および構成であってもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの動作および機能性の制御、管理、および協調を提供してもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの初期化および構成を含む、同一コアの間のシステムのメモリの配分および使用の制御、管理、および協調を提供してもよい。いくつかの実施形態では、制御プレーンは、データフローに基づいて、コアへのデータフローの割当およびコアへのネットワークパケットの分布を制御するためのフローディストリビュータを含む。いくつかの実施形態では、制御プレーンコアは、パケットエンジンを起動し、他の実施形態では、制御プレーンコアは、本システムの他のコアの管理および制御に専用である。
【０１９４】
制御コア５０５Ａは、どれだけのメモリが各コア５０５に配分されるべきかを判定するステップ、またはいずれのコア５０５が特定の機能またはハードウェア／ソフトウェアエンティティをハンドリングするように割り当てられるべきかを判定するステップ等の他のコア５０５に対するあるレベルの制御を実行することができる。制御コア５０５Ａは、いくつかの実施形態では、制御プレーン５７０内でこれらのコア５０５に対する制御を実行してもよい。したがって、制御コア５０５Ａによって制御されないプロセッサが制御プレーン５７０の外側に存在することができる。制御プレーン５７０の境界を判定するステップは、システム５７５内で実行する制御コア５０５Ａまたはエージェントによって、制御コア５０５Ａによって制御される、これらのコア５０５のリストを維持するステップを含むことができる。制御コア５０５Ａは、以下、すなわち、コアの初期化、コアが利用不可能であるときを判定するステップ、１つのコアが故障したときに負荷を他のコア５０５に再配分するステップ、いずれの分布方式を実装するかを判定するステップ、いずれのコアがネットワークトラフィックを受信するべきかを判定するステップ、どれだけのキャッシュが各コアに配分されるべきかを判定するステップ、特定の機能または要素を特定のコアに割り当てるかどうかを判定するステップ、コアが相互と通信することを可能にするかどうかを判定するステップ、グローバルキャッシュ５８０のサイズを判定するステップ、およびシステム５７５内のコアの機能、構成、または動作の任意の他の判定のうちのいずれかを制御することができる。
【０１９５】
Ｆ．分散クラスタアーキテクチャを提供するためのシステムおよび方法
前の節で議論されるように、トランジスタ間隔およびＣＰＵ速度増加に対する限界を克服するために、多くのＣＰＵ製造業者は、単一のより高速のＣＰＵさえも可能なものを超えて性能を改良するように、マルチコアＣＰＵを組み込んでいる。類似する、またはさらなる性能獲得が、単一またはマルチコアのいずれかである複数のアプライアンスを、分散またはクラスタ化アプライアンスとしてともに動作させることによって、得られてもよい。個々のコンピューティングデバイスまたはアプライアンスは、クラスタのノードと称されてもよい。集中型管理システムが、ノードが単一のコンピューティングシステムとして連動することを可能にするように、負荷平衡、分布、構成、または他のタスクを行ってもよい。外部に、またはサーバおよびクライアントを含む、他のデバイスに対して、多くの実施形態では、クラスタは、典型的な個々のアプライアンスの性能を超える性能を伴うものではあるが、単一の仮想アプライアンスまたはコンピューティングデバイスと見なされてもよい。
【０１９６】
ここで図６を参照すると、コンピューティングデバイスクラスタまたはアプライアンスクラスタ６００のいくつかの実施形態が図示されている。複数のアプライアンス２００ａ−２００ｎ、またはデスクトップコンピュータ、サーバ、ラックマウントサーバ、ブレードサーバ、または任意の他のタイプおよび形態のコンピューティングデバイス等の、時として、ノードと称されることもある、他のコンピューティングデバイスが、単一のアプライアンスクラスタ６００に結合されてもよい。アプライアンスクラスタと称されるが、多くの実施形態では、クラスタは、限定ではないが、アプリケーションサーバ、ネットワーク記憶サーバ、バックアップサービス、または任意の他のタイプのコンピューティングデバイスとして動作してもよい。多くの実施形態では、アプライアンスクラスタ６００は、アプライアンス２００、ＷＡＮ最適化デバイス、ネットワーク加速デバイス、または上記で議論される他のデバイスの機能の多くを果たすために使用されてもよい。
【０１９７】
いくつかの実施形態では、アプライアンスクラスタ６００は、同じアプライアンス、１つまたはそれを上回るシャーシ内のブレードサーバ、デスクトップまたはラックマウントコンピューティングデバイス、または他のデバイス等のコンピューティングデバイスの同種セットを備えてもよい。他の実施形態では、アプライアンスクラスタ６００は、アプライアンスの異なるモデル、混合アプライアンスおよびサーバ、またはコンピューティングデバイスの任意の他のセットを含む、デバイスの異種または混合セットを備えてもよい。これは、アプライアンスクラスタ６００が、例えば、新しいモデルまたはデバイスを用いて経時的に拡張またはアップグレードされることを可能にし得る。
【０１９８】
いくつかの実施形態では、アプライアンスクラスタ６００の各コンピューティングデバイスまたはアプライアンス２００は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分布方法は、本明細書で議論されるノード管理および分布方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、１つのアプライアンスがデータを備え、それを複数のノードに配分し、各ノードが処理のためのデータを備え、それを複数のコアに配分する、２層分散システムと考えられてもよい。故に、そのような実施形態では、ノード分布システムは、上記で議論されるようなマスタまたは制御コアによって保護され得るため、個々のコアへのフロー分布を管理する必要がない。
【０１９９】
多くの実施形態では、アプライアンスクラスタ６００は、シャーシ内の複数のブレードサーバまたは単一のラック内の複数のラックマウントデバイス等、物理的にグループ化されてもよいが、他の実施形態では、アプライアンスクラスタ６００は、複数のシャーシ、複数のラック、データセンタ内の複数の部屋、複数のデータセンタ、または任意の他の物理配列で分配されてもよい。故に、アプライアンスクラスタ６００は、物理グループではなく、共通構成、管理、および目的を介してグループ化される、仮想アプライアンスと見なされてもよい。
【０２００】
いくつかの実施形態では、アプライアンスクラスタ６００は、１つまたはそれを上回るネットワーク１０４、１０４’に接続されてもよい。例えば、簡潔に図１Ａを再び参照すると、いくつかの実施形態では、アプライアンス２００は、１つまたはそれを上回るクライアント１０２に結合されたネットワーク１０４と１つまたはそれを上回るサーバ１０６に結合されたネットワーク１０４’との間に展開されてもよい。アプライアンスクラスタ６００は、同様に、単一のアプライアンスとして動作するように展開されてもよい。多くの実施形態では、これは、アプライアンスクラスタ６００の外部の任意のネットワークトポロジ変更を要求しなくてもよく、単一のアプライアンスシナリオからのインストールおよび拡張可能性の容易性を可能にする。他の実施形態では、アプライアンスクラスタ６００は、同様に、図１Ｂ−１Ｄに示される、または上記で議論されるように展開されてもよい。なおも他の実施形態では、アプライアンスクラスタは、１つまたはそれを上回るサーバによって実行される複数の仮想マシンまたはプロセスを備えてもよい。例えば、１つのそのような実施形態では、サーバファームは、複数の仮想マシンを実行してもよく、各仮想マシンは、アプライアンス２００として構成され、複数の仮想マシンは、アプライアンスクラスタ６００として一斉に作用する。さらになおも他の実施形態では、アプライアンスクラスタ６００は、アプライアンス２００またはアプライアンス２００として構成される仮想マシンの混合を備えてもよい。いくつかの実施形態では、アプライアンスクラスタ６００は、同一場所に設置されていない複数のアプライアンス２００を伴って、地理的に分配されてもよい。例えば、図６を再び参照すると、１つのそのような実施形態では、第１のアプライアンス２００ａは、データセンタ等の第１の場所に位置してもよく、第２のアプライアンス２００ｂは、中央オフィスまたは企業の本社等の第２の場所に位置してもよい。さらなる実施形態では、そのように地理的に遠隔のアプライアンスは、Ｔ１またはＴ３ポイントツーポイント接続、ＶＰＮ、または任意の他のタイプおよび形態のネットワーク等の専用ネットワークによって結合されてもよい。故に、同一場所に設置されたアプライアンス２００ａ−２００ｂと比較して、付加的通信待ち時間があり得るが、現場の停電または通信不能状態の場合の信頼性、拡張可能性、または他の利益において利点があってもよい。いくつかの実施形態では、待ち時間の問題は、データフローの地理またはネットワークベースの分布を通して低減させられ得る。例えば、アプライアンスクラスタ６００として構成されるが、企業の本社におけるクライアントおよびサーバからの通信が、現場で展開されるアプライアンス２００ｂにダイレクトされてもよい、負荷平衡が、場所によって加重されてもよい、または類似ステップが、いかなる待ち時間も軽減するようにとられることができる。
【０２０１】
依然として図６を参照すると、アプライアンスクラスタ６００は、クライアントデータプレーン６０２を介してネットワークに接続されてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、クライアントとアプライアンスクラスタ６００との間でデータを搬送する、ネットワーク１０４等の通信ネットワークを備えてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、外部ネットワーク１０４およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータが、外部ネットワーク１０４に接続され、各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。いくつかの実施形態では、本ルータまたはスイッチは、インターフェースマネージャと称されてもよく、さらに、アプリケーションクラスタ６００内のノードを横断してトラフィックを均等に分配するように構成されてもよい。したがって、多くの実施形態では、インターフェースマスタは、アプライアンスクラスタ６００の外部にフローディストリビュータを備えてもよい。他の実施形態では、インターフェースマスタは、アプライアンス２００ａ−２００ｎのうちの１つを備えてもよい。例えば、第１のアプライアンス２００ａは、アプライアンスクラスタ６００のための着信トラフィックを受信し、アプライアンス２００ｂ−２００ｎのそれぞれを横断してトラフィックを分配する、インターフェースマスタとしての役割を果たしてもよい。いくつかの実施形態では、帰還トラフィックが、同様に、インターフェースマスタとしての役割を果たす第１のアプライアンス２００ａを介して、アプライアンス２００ｂ−２００ｎのそれぞれからフローしてもよい。他の実施形態では、アプライアンス２００ｂ−２００ｎのそれぞれからの帰還トラフィックが、ネットワーク１０４、１０４’に直接、または外部ルータ、スイッチ、または他のデバイスを介して、伝送されてもよい。いくつかの実施形態では、インターフェースマスタとしての役割を果たさないアプライアンスクラスタのアプライアンス２００は、インターフェーススレーブ６１０Ａ−６１０Ｎと称されてもよい。
【０２０２】
インターフェースマスタは、種々の方法のうちのいずれかで負荷平衡またはトラフィックフロー分布を行ってもよい。例えば、いくつかの実施形態では、インターフェースマスタは、クラスタのアプライアンスまたはノードを伴って構成されるネクストホップと平等コストマルチパス（ＥＣＭＰ）ルーティングを行う、ルータを備えてもよい。インターフェースマスタは、オープン・ショーテスト・パス・ファースト（ＯＳＰＦ）を使用してもよい。いくつかの実施形態では、インターフェースマスタは、上記で議論されるように、ＩＰアドレスまたは他のパケット情報タプルに基づくハッシュ等のトラフィック分布のためのステートレスハッシュベースの機構を使用してもよい。ハッシュキーおよび／またはソルトが、ノードを横断する均等な分布のために選択されてもよい。他の実施形態では、インターフェースマスタは、リンクアグリゲーション（ＬＡＧ）プロトコル、または任意の他のタイプおよび形態のフロー分布、負荷平衡、およびルーティングを介して、フロー分布を行ってもよい。
【０２０３】
いくつかの実施形態では、アプライアンスクラスタ６００は、サーバデータプレーン６０４を介してネットワークに接続されてもよい。クライアントデータプレーン６０２と同様に、サーバデータプレーン６０４は、サーバとアプライアンスクラスタ６００との間にデータを搬送する、ネットワーク１０４’等の通信ネットワークを備えてもよい。いくつかの実施形態では、サーバデータプレーン６０４は、外部ネットワーク１０４’およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータが、外部ネットワーク１０４’に接続され、各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。多くの実施形態では、各アプライアンス２００ａ−２００ｎは、第１のネットワークインターフェースがクライアントデータプレーン６０２に接続され、第２のネットワークインターフェースがサーバデータプレーン６０４に接続される、複数のネットワークインターフェースを備えてもよい。これは、付加的セキュリティを提供し、仲介デバイスとしてアプライアンスクラスタ６００サーバを有することによって、クライアントおよびサーバネットワークの直接インターフェースを防止し得る。他の実施形態では、クライアントデータプレーン６０２およびサーバデータプレーン６０４は、マージされる、または組み合わせられてもよい。例えば、アプライアンスクラスタ６００は、クライアント１０２およびサーバ１０６とのネットワーク上で非仲介ノードとして展開されてもよい。上記で議論されるように、多くの実施形態では、インターフェースマスタが、サーバおよびネットワーク１０４’からアプライアンスクラスタの各アプライアンスに通信をルーティングして分配するために、サーバデータプレーン６０４上に展開されてもよい。多くの実施形態では、クライアントデータプレーン６０２用のインターフェースマスタおよびサーバデータプレーン６０４用のインターフェースマスタは、同様に構成されてもよく、上記で議論されるようなＥＣＭＰまたはＬＡＧプロトコルを行う。
【０２０４】
いくつかの実施形態では、アプライアンスクラスタ６００内の各アプライアンス２００ａ−２００ｎは、内部通信ネットワークまたはバックプレーン６０６を介して接続されてもよい。バックプレーン６０６は、ノード間またはアプライアンス間制御および構成メッセージ用、およびトラフィックのノード間自動転送用の通信ネットワークを備えてもよい。例えば、第１のアプライアンス２００ａがネットワーク１０４を介してクライアントと通信し、第２のアプライアンス２００ｂがネットワーク１０４’を介してサーバと通信する、一実施形態では、クライアントとサーバとの通信は、クライアントから第１のアプライアンスへ、バックプレーン６０６を介して第１のアプライアンスから第２のアプライアンスへ、および第２のアプライアンスからサーバへ、および逆も同様にフローしてもよい。他の実施形態では、バックプレーン６０６は、インターフェース一時停止またはリセットコマンド、フィルタリングまたは圧縮ポリシ等のポリシ更新、バッファステータス、スループット、またはエラーメッセージ等のステータスメッセージ、または任意の他のタイプおよび形態のノード間通信等の構成メッセージを搬送してもよい。いくつかの実施形態では、ＲＳＳキーまたはハッシュキーは、クラスタ内の全てのノードによって共有されてもよく、バックプレーン６０６を介して通信してもよい。例えば、第１のノードまたはマスタノードは、始動またはブート等のＲＳＳキーを選択してもよく、他のノードによって使用するために本キーを分配してもよい。いくつかの実施形態では、バックプレーン６０６は、各アプライアンス２００のネットワークインターフェースの間にネットワークを備えてもよく、ルータ、スイッチ、または他のネットワークデバイス（図示せず）を備えてもよい。したがって、いくつかの実施形態では、上記で議論されるように、クライアントデータプレーン６０２用のルータが、アプライアンスクラスタ６００とネットワーク１０４との間に展開されてもよく、サーバデータプレーン６０４用のルータが、アプライアンスクラスタ６００とネットワーク１０４’との間に展開されてもよく、バックプレーン６０６用のルータが、アプライアンスクラスタ６００の一部として展開されてもよい。各ルータは、各アプライアンス２００の異なるネットワークインターフェースに接続してもよい。他の実施形態では、１つまたはそれを上回るプレーン６０２−６０６が、組み合わせられてもよい、またはルータまたはスイッチが、複雑性を低減させる、または本システムから余分なデバイスを排除するために、アプライアンス２００ａ−２００ｎの異なるインターフェースに接続し、同時に複数のルーティング機能を果たすように、複数のＬＡＮまたはＶＬＡＮに分割されてもよい。
【０２０５】
いくつかの実施形態では、制御プレーン（図示せず）は、管理者またはユーザからアプライアンスクラスタ６００への構成および制御トラフィックを通信してもよい。いくつかの実施形態では、制御プレーンは、第４の物理ネットワークであってもよい一方で、他の実施形態では、制御プレーンは、プレーン６０２−６０６のうちの１つを介したＶＰＮ、トンネル、または通信を備えてもよい。したがって、制御プレーンは、いくつかの実施形態では、仮想通信プレーンと見なされてもよい。他の実施形態では、管理者は、ＲＳ−２３２等のシリアル通信インターフェース、ＵＳＢ通信インターフェース、または任意の他のタイプおよび形態の通信等の別個のインターフェースを通して、構成および制御を提供してもよい。いくつかの実施形態では、アプライアンス２００は、ボタンおよびディスプレイを伴うフロントパネル、ネットワーク１０４、１０４’またはバックプレーン６０６を介した構成用のウェブサーバ、または任意の他のタイプおよび形態のインターフェース等の管理用のインターフェースを備えてもよい。
【０２０６】
いくつかの実施形態では、上記で議論されるように、アプライアンスクラスタ６００は、内部フロー分布を含んでもよい。例えば、これは、ノードが外部デバイスに透過的に結合／そこから離脱することを可能にするように行われてもよい。外部フローディストリビュータがそのような変更に応じて繰り返し再構成される必要性をなくすために、ノードまたはアプライアンスが、ネットワークパケットをクラスタ６００内の正しいノードにステアリングするためにインターフェースマスタまたはディストリビュータとして作用してもよい。例えば、いくつかの実施形態では、（故障、リセット、または類似する場合に応じて等）ノードがクラスタから離脱するとき、外部ＥＣＭＰルータが、ノードの変更を識別してもよく、かつトラフィックを再分配するように全てのフローを再ハッシュしてもよい。これは、全ての接続をドロップしてリセットさせ得る。同一のドロップおよびリセットが、ノードが再結合するときに起こり得る。いくつかの実施形態では、信頼性のために、アプライアンスクラスタ６００内の２つのアプライアンスまたはノードが、接続ミラーリングを介して外部ルータから通信を受信してもよい。
【０２０７】
多くの実施形態では、アプライアンスクラスタ６００のノードの間のフロー分布は、アプライアンスのコアの間のフロー分布について上記で議論される方法のうちのいずれかを使用してもよい。例えば、一実施形態では、マスタアプライアンス、マスタノード、またはインターフェースマスタは、着信トラフィック上のＴｏｅｐｌｉｔｚハッシュ等のＲＳＳハッシュを計算し、ハッシュの選好リストまたは分布テーブルを参考にしてもよい。多くの実施形態では、フローディストリビュータは、トラフィックを自動転送するときに、ハッシュを受信側アプライアンスに提供してもよい。これは、ノードがコアへのフロー分布のためのハッシュを再計算する必要性を排除し得る。多くのそのような実施形態では、アプライアンスの間の分布のためのハッシュを計算するために使用されるＲＳＳキーは、グローバルＲＳＳキーと称され得る、コアの間の分布のためのハッシュを計算するために使用されるものと同一のキーを備えてもよく、計算されたハッシュの再利用を可能にする。いくつかの実施形態では、ハッシュは、ポート番号、ＩＰアドレスを含むインターネット層ヘッダ、または任意の他のパケットヘッダ情報を含む、トランスポート層ヘッダの入力タプルを用いて計算されてもよい。いくつかの実施形態では、パケット本体情報が、ハッシュに利用されてもよい。例えば、無損失ＴＣＰヘッダを介してカプセル化される損失性ＵＤＰトラフィック等の１つのプロトコルのトラフィックが、別のプロトコルのトラフィック内にカプセル化される、一実施形態では、フローディストリビュータは、カプセル化プロトコル（例えば、ＴＣＰヘッダ）ではなく、カプセル化されたプロトコル（例えば、ＵＤＰヘッダ）のヘッダに基づいて、ハッシュを計算してもよい。同様に、パケットがカプセル化され、暗号化または圧縮される、いくつかの実施形態では、フローディストリビュータは、暗号解読または解凍後のペイロードパケットのヘッダに基づいて、ハッシュを計算してもよい。なおも他の実施形態では、ノードは、構成または管理目的のため等に、内部ＩＰアドレスを有してもよい。これらのＩＰアドレスへのトラフィックは、ハッシュされて分配される必要はなく、むしろ、宛先アドレスを所有するノードに自動転送されてもよい。例えば、アプライアンスは、１．２．３．４のＩＰアドレスにおいて構成または管理目的のために起動するウェブサーバまたは他のサーバを有してもよく、いくつかの実施形態では、その内部ＩＰアドレスとして、本アドレスをフローディストリビュータに登録してもよい。他の実施形態では、フローディストリビュータは、内部ＩＰアドレスをアプライアンスクラスタ６００内の各ノードに割り当ててもよい。アプライアンスの内部ＩＰアドレス（１．２．３．４）にダイレクトされる、管理者によって使用されるワークステーション等の外部クライアントまたはサーバから着信するトラフィックは、ハッシングを要求することなく、直接自動転送されてもよい。
【０２０８】
Ｇ．複数のネットワークパケットスケジューラを同期させるためのシステムおよび方法
前節で議論されるように、ｎＣｏｒｅ技術およびアーキテクチャの複数のコアは、同時に、および／または並行して、複数のパケットエンジンを起動させることを可能にする。１つまたはそれを上回るプロセッサコアを横断した作業、タスク、負荷、またはネットワークトラフィック分布は、機能並列性、データ並列性、もしくはフローベースのデータ並列性等の並列性のタイプまたは並列コンピューティング方式に従って遂行されてもよい。ネットワークパケットスケジューラは、パケットの分布を管理するために使用されてもよい。ネットワークパケットスケジューラは、多くの場合、ヒープ／スタック動作を使用して、ネットワークトラフィックを優先順位付けさせ、単一スケジューラが管理する必要があるパケットの数を低減させ、ヒープ／スタックサイズを低減させ、ＣＰＵ上の歪みを低減させるために実装される。複数のネットワークパケットスケジューラを使用して、同一数のパケットを管理することは、より小さいヒープ／スタック、したがって、より少ないＣＰＵ使用量をもたらす。しかしながら、これは、複数のネットワークパケットスケジューラが同期されることを確実にする必要性をもたらす。
【０２０９】
パケットスケジューラの同期化は、実際のパケットを受信するスケジューラによって他のスケジューラに提供される、ブロードキャストされた仮想パケットの使用を通して実装されてもよい。各スケジューラは、パケットをその待ち行列に追加する（例えば、実際のパケットを受信するスケジューラは、実際のパケットをその待ち行列に追加し、相互のスケジューラは、仮想パケットをその対応する待ち行列に追加する）。各スケジューラの待ち行列は、同期化において高度化され得、実際のパケットは、出力バッファまたはネットワークインターフェースに提供され、仮想パケットは、破棄される。それに応じて、１つのみの「実際の」パケットが、任意の１回において、同期された待ち行列から出力され、競合および輻輳を回避するであろう。
【０２１０】
ここで図７Ａを参照すると、一実施形態による、仮想パケットを受信するための方法７００のフローチャートが、描写される。いくつかの実施形態では、方法７００は、ステップ７０２において、パケットを受信するステップと、ステップ７０４において、パケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップとを含む。パケットが、仮想パケットであるとき（ステップ７０４、仮想）、いくつかの実施形態では、方法７００は、ステップ７０６において、仮想パケットを仮想接続に伝送するステップと、ステップ７０８において、仮想パケットを待ち行列に入れるステップとを含む。パケットは、ネットワークパケットであるとき（ステップ７０４、ネットワーク）、いくつかの実施形態では、方法７００は、ステップ７１０において、ネットワークパケットを待ち行列に入れるステップを含む。いくつかの実施形態では、方法７００は、ステップ７１２において、仮想パケットまたはネットワークパケットを伝送のためのバッファ内の次のパケットとしてスケジューリングするステップと、ステップ７１４において、次のパケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップとを含む。次のパケットが仮想パケットであるとき（ステップ７１４、仮想）、いくつかの実施形態では、方法７００は、ステップ７１６において、仮想パケットを破棄するステップを含む。次のパケットが、ネットワークパケットであるとき（ステップ７１４、ネットワーク）、いくつかの実施形態では、方法７００は、ステップ７１８において、ネットワークパケットを伝送するステップを含む。いくつかの実施形態では、方法７００は、ステップ７２０において、さらなるパケットが存在するかどうかを判定するステップと、ステップ７１２において、さらなるパケットが存在することの判定に応答して、次のパケットをスケジューリングすることに戻るステップと、ステップ７２２において、さらなるパケットが存在しないことの判定に応答して、終了するステップとを含む。
【０２１１】
ステップ７０２においてパケットを受信するステップは、いくつかの実施形態では、第１のネットワークパケットスケジューラによって、１つまたはそれを上回る他のネットワークパケットスケジューラから、複数のトラフィッククラスのトラフィッククラス毎に仮想パケットを受信し、ネットワークパケットの相対的伝送優先順位を定義し、該１つまたはそれを上回る他のネットワークパケットスケジューラによって受信されたネットワークパケットに対応させるステップ、または第１のネットワークパケットスケジューラによって、複数のトラフィッククラスの第１のトラフィッククラスのネットワークパケットを受信するステップを含んでもよい。例えば、一実装では、２つのトラフィッククラス（例えば、Ｃ１、Ｃ２）と、３つのネットワークパケットスケジューラ（例えば、Ｓ１、Ｓ２、Ｓ３）とが存在する場合、スケジューラＳ１は、スケジューラＳ２およびＳ３がクラス毎にネットワークパケットを受信し、合計４つの仮想パケット（例えば、Ｃ１−Ｓ２、Ｃ１−Ｓ３、Ｃ２−Ｓ２、Ｃ２−Ｓ３）を受信したことに応答して、スケジューラＳ２およびスケジューラＳ３のそれぞれからのクラスＣ１のための仮想パケットと、スケジューラＳ２およびＳ３のそれぞれからのクラスＣ２のための仮想パケットとを受信するであろう。スケジューラＳ２およびＳ３は、同様に、仮想パケットをＳ１（例えば、Ｃ１−Ｓ１、Ｃ２−Ｓ１）ならびに他のスケジューラ（例えば、Ｃ１−Ｓ３、Ｃ２−Ｓ３；またはＣ１−Ｓ２、Ｃ２−Ｓ２）から受信するであろう。仮想パケットは、複数のネットワークパケットスケジューラを同期させ、各ネットワークパケットスケジューラに、相互のネットワークパケットスケジューラがハンドリングしているネットワークパケットの数のカウントまたは集計を提供することに役立つために使用される。これは、ネットワークパケットが異なるトラフィッククラスであるとき、特に重要である。いくつかのネットワークパケットは、より高い伝送優先順位を有するため、いくつのネットワークパケットがどの優先順位を有するかを把握することは、パケットがその優先順位に従って伝送されることを確実にすることに役立つ。いくつかの実施形態では、仮想パケットを受信するステップはさらに、第１のネットワークパケットスケジューラによって、相互のネットワークパケットスケジューラから、トラフィッククラスのペアリング毎に仮想パケットを受信し、さらに、トラフィッククラスの伝送のための絶対帯域幅限界およびトラフィッククラスのための絶対帯域幅限界を伝送するネットワークリンクを定義するステップを含む。言い換えると、各仮想パケットは、ボトルネックリンク−トラフィッククラスペアリングを表す。
【０２１２】
ステップ７０４において、パケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップは、いくつかの実施形態では、第１のネットワークパケットスケジューラによって、受信されたパケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップを含む。仮想パケットは、ネットワークパケットスケジューラを同期させるために使用され、実際の伝送のために意図されるものではないため、仮想パケットは、伝送のために意図されるネットワークパケットと区別される。加えて、仮想パケットは、プロセッサまたはアプリケーションではなく、他のネットワークパケットスケジューラから送信されるため、仮想パケットは、異なってハンドリングされる。
【０２１３】
パケットが仮想パケットであることの判定に応答して、パケットは、ステップ７０６において、仮想接続に伝送または提供されてもよく、いくつかの実施形態では、第１のネットワークパケットスケジューラによって、各仮想パケットをトラフィッククラス毎に作成される複数の仮想接続の仮想接続の中に伝送するステップを含む。仮想パケットが、他のネットワークパケットスケジューラから受信されると、接続が、仮想パケットを入手するために確立される必要がある。いくつかの実施形態では、これらの接続は、仮想であって、異なるトラフィッククラスの受信された仮想パケットは、異なるトラフィッククラス毎に対応する仮想接続に伝送される。例えば、スケジューラＳ１は、それぞれ、Ｃ１およびＣ２の仮想パケットを受信するために、仮想接続ＶＣ１およびＶＣ２を作成するであろう。
【０２１４】
ステップ７０８において、仮想パケットを待ち行列に入れ、７１０において、ネットワークパケットを待ち行列に入れるステップは、いくつかの実施形態では、それぞれ、第１のネットワークパケットスケジューラによって、仮想パケットまたはネットワークパケットを複数のトラフィッククラスに対応する複数の待ち行列の第１の待ち行列の中に入れるステップを含んでもよい。いくつかの実施形態では、ステップ７０８において、仮想パケットを待ち行列に入れるステップは、第１のネットワークパケットスケジューラによって、待ち行列内のネットワークパケットの数と第１のトラフィッククラスの仮想パケットの数との和が、待ち行列の最大サイズを超えることに応答して、第１のトラフィッククラスのための各仮想パケットを第１の待ち行列の中に入れるステップを含んでもよい。例えば、スケジューラＳ１は、それぞれ、トラフィッククラスＣ１およびＣ２のパケットを待ち行列に入れるための待ち行列Ｑ１ならびにＱ２を有し得る。最大待ち行列サイズに到達すると、仮想パケットは、依然として、待ち行列に入れられる。例えば、スケジューラＳ１が、仮想パケットＣ１−Ｓ２、Ｃ１−Ｓ３、およびネットワークパケットＣ１を受信し、ともにクラスＣ１の合計３つのパケットを構成すると仮定する。待ち行列Ｑ１は、３の待ち行列サイズを有し、すでに１つのネットワークパケットが待ち行列内に存在し、２つのさらなるパケットのための空間が残っていると仮定する。スケジューラＳ１は、Ｃ１の新しいネットワークパケットを待ち行列Ｑ１内に記憶し、１つのさらなるパケットのための空間を残してもよい。しかしながら、２つの残りのパケットは、仮想であるため、それらは両方とも、待ち行列に入れられる。仮想パケットは、本質的に、小プレースホルダであって、有意な処理時間または任意の伝送時間を要求しないため、本件における待ち行列のオーバーフローは、スケジューラの動作に悪影響を及ぼさない。
【０２１５】
ステップ７１２において、次のパケットをスケジューリングするステップは、いくつかの実施形態では、第１のネットワークパケットスケジューラによって、ネットワークパケットまたは仮想パケットを伝送のためのバッファ内の次のパケットとしてスケジューリングするステップを含んでもよい。ラウンドロビンアルゴリズム、加重ラウンドロビン、ＦＩＦＯ、最短残り時間アルゴリズム、または任意の他のタイプおよび形態のスケジューリングアルゴリズム等、種々のスケジューリングアルゴリズムが、次に伝送される複数のパケットの中のパケットを判定するために使用されてもよい。単一待ち行列に関して、スケジューリングは、伝送のための次のパケットが待ち行列内の次のパケットであるため容易である。しかしながら、複数の待ち行列が存在するとき、待ち行列の先頭または後尾におけるどのパケットが伝送のために次のパケットとなるべきかに関して選択が行われる必要がある。例えば、スケジューラＳ１が、２つの待ち行列Ｑ１およびＱ２を有し、各待ち行列内にパケットを有する場合、伝送のための次のパケットのスケジューリングは、実装されるアルゴリズムに従って、待ち行列Ｑ１の先頭のパケットまたは待ち行列Ｑ２の先頭のパケットのいずれかを選択してもよい。例えば、加重公平待ち行列実装では、次のパケットのスケジューリングは、次のパケット伝送のための基準を満たすパケットをスケジューリングするであろう。本スケジューリングは、パケットのタイプから独立する。すなわち、次のパケットのスケジューリングは、先頭におけるパケットが仮想パケットであるかまたはネットワークパケットであるかを考慮しない。
【０２１６】
ステップ７１４において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、バッファ内の次のパケットが仮想パケットであるかまたはネットワークパケットであるかを判定してもよい。仮想パケットは、ネットワークパケットスケジューラを同期させるために使用され、実際の伝送のために意図されないため、仮想パケットは、伝送のために意図されるネットワークパケットと区別される。しかしながら、ステップ７１２における次のパケットのスケジューリングは、それにもかかわらず、いくつかの実装によると、仮想パケットをスケジューリングし、したがって、次のスケジューリングされたパケットが仮想パケットであるかまたはネットワークパケットであるかの判定が行われる。
【０２１７】
ステップ７１６において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、バッファ内の次のパケットが仮想パケットであることを判定し、第１のネットワークパケットスケジューラによって、バッファ内の次のパケットは、仮想パケットであることの判定に応答して、仮想パケットを破棄してもよい。仮想パケットは、そのような実装において、同期化目的のためだけに使用されたため、破棄されてもよい。仮想パケットは、スケジューリングアルゴリズムに従ってスケジューリングされたため、より低い優先順位を伴うトラフィッククラスのネットワークパケットの前に、次のパケットとしてスケジューリングされている場合があることに留意されたい。例えば、スケジューラＳ１は、クラスＣ２のネットワークパケット（Ｐ−Ｃ２）を受信し、スケジューラＳ２は、クラスＣ１のネットワークパケット（Ｐ−Ｃ１）を受信し、トラフィッククラスＣ１は、クラスＣ２より高い優先順位を有すると仮定する。スケジューラＳ１は、スケジューラＳ２がＰ−Ｃ１を有することを示すための仮想パケットＣ１−Ｓ２をスケジューラＳ２から受信し、スケジューラＳ２は、スケジューラＳ１がネットワークパケットＰ−Ｃ２を有することを示すための仮想パケットＣ２−Ｓ１をスケジューラＳ１から受信する。ステップ７１２における次のパケットのスケジューリングの間、仮想パケットＣ１−Ｓ２、ネットワークパケットＰ−Ｃ２、仮想パケットＣ２−Ｓ１、およびネットワークパケットＰ−Ｃ１は、その個別の待ち行列内の唯一のパケットであると仮定すると、仮想パケットＣ１−Ｓ２は、スケジューラＳ１のための次のパケットとしてスケジューリングされ、ネットワークパケットＰ−Ｃ１は、スケジューラＳ２のための次のパケットとしてスケジューリングされるであろう。ステップ７１４において、スケジューラＳ１は、次のパケットが仮想パケットＣ１−Ｓ２であることを判定し、仮想パケットＣ１−Ｓ２を破棄し、したがって、任意のデータを伝送しなくてもよい。同時に、スケジューラＳ２は、次のパケットがネットワークパケットＰ−Ｃ１であることを判定し、スケジューラＳ１の伝送から競合の任意の可能性を伴わずに、ネットワークパケットＰ−Ｃ１を伝送する。
【０２１８】
ステップ７１８において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、バッファ内の次のパケットがネットワークパケットであることを判定し、第１のネットワークパケットスケジューラによって、次のパケットがネットワークパケットであることの判定に応答して、バッファからのネットワークパケットを伝送してもよい。ネットワークパケットは、スケジューリングアルゴリズムに従ってスケジューリングされたため、より低い優先順位を伴うトラフィッククラスのための仮想パケットの前に、次のパケットとしてスケジューリングされていなければならないことに留意されたい。例えば、スケジューラＳ１が、クラスＣ１のネットワークパケット（例えば、ネットワークパケットＰ−Ｃ１）を受信し、スケジューラＳ２が、クラスＣ２のネットワークパケット（例えば、ネットワークパケットＰ−Ｃ２）を受信し、トラフィッククラスＣ１が、クラスＣ２より高い優先順位を有すると仮定する。スケジューラＳ１は、スケジューラＳ２がネットワークパケットＰ−Ｃ２を有することを示すための仮想パケットＣ２−Ｓ２をスケジューラＳ２から受信し、スケジューラＳ２は、スケジューラＳ１がネットワークパケットＰ−Ｃ１を有することを示すための仮想パケットＣ１−Ｓ１をスケジューラＳ１から受信する。ステップ７１２における次のパケットのスケジューリングの間、仮想パケットＣ１−Ｓ１、ネットワークパケットＰ−Ｃ１、仮想パケットＣ２−Ｓ２、およびネットワークパケットＰ−Ｃ２が、その個別の待ち行列内の唯一のパケットであると仮定すると、ネットワークパケットＰ−Ｃ１は、スケジューラＳ１のための次のパケットとしてスケジューリングされ、仮想パケットＣ１−Ｓ１は、スケジューラＳ２のための次のパケットとしてスケジューリングされるであろう。ステップ７１４が行われると、スケジューラＳ１は、次のパケットがネットワークパケットＰ−Ｃ１であることを判定し、ネットワークパケットＰ−Ｃ１を伝送してもよい。同時に、スケジューラＳ２は、次のパケットが仮想パケットＣ１−Ｓ１であることを判定し、仮想パケットＣ１−Ｓ１を破棄し、したがって、任意のデータを伝送しなくてもよい。
【０２１９】
ステップ７２０において、いくつかの実施形態では、第１のネットワークパケットスケジューラが、任意のさらなるパケットが待ち行列内に残っているかどうかを判定してもよい。依然として、パケットが待ち行列内に残っている場合、ステップ７１２において、次のパケットが、スケジューリングされてもよい。さらなるパケットが存在しない場合、方法７００は、パケットがステップ７０２において再び受信されるまで、終了する。
【０２２０】
ここで図７Ｂを参照すると、一実施形態による、仮想パケットをブロードキャストするための方法７３０のフローチャートが、描写される。仮想パケットをブロードキャストする第１のネットワークパケットスケジューラは、他のネットワークパケットスケジューラが、ネットワークパケットスケジューラが伝送するためのネットワークパケットを有するかどうかを把握することを可能にし、したがって、ネットワークパケット伝送の同期化を可能にする。いくつかの実施形態では、方法７３０は、ステップ７３２において、ネットワークパケットを待ち行列に入れるステップと、ステップ７３４において、ノードを選択するステップと、ステップ７３６において、ノードに対するバイトカウントを判定するステップと、ステップ７３８において、ノードに対するバイトカウントが非ゼロであるかどうかを判定するステップとを含む。ノードに対するバイトカウントが、非ゼロではないとき、例えば、バイトカウントが、ゼロであるとき、方法７３０は、ステップ７３４におけるノードを選択するステップに戻るステップを含む。ノードに対するバイトカウントが非ゼロであるとき、方法７３０は、仮想パケット７４０を生成するステップと、仮想パケット７４２をブロードキャストするステップと、ステップ７３４に戻るステップとを含む。
【０２２１】
ステップ７３２において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、異なるトラフィッククラスの着信ネットワークパケットをトラフィッククラス毎に複数のノードにおいて待ち行列に入れてもよい。ネットワークパケットスケジューラは、ネットワークパケットのスケジューリングおよび伝送を行ってもよい。例えば、各１つのクラスＣ１、Ｃ２、およびＣ３（例えば、ネットワークパケットＰ−Ｃ１、Ｐ−Ｃ２、Ｐ−Ｃ３）の３つのネットワークパケットに関して、ステップ７３２は、ネットワークパケットＰ−Ｃ１をノードＮ１に、ネットワークパケットＰ−Ｃ２をノードＮ２に、およびネットワークパケットＰ−Ｃ３をノードＮ３おいて待ち行列に入れるステップを含んでもよい。トラフィッククラス、したがって、ノードは、ポート、インターフェース、または発信プログラム、もしくは任意の他のそのようなパラメータ等の種々のパラメータに基づいて、分散または選択されてもよい。
【０２２２】
ステップ７３４において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、トラフィッククラス毎に複数のノードの第１のノードを選択してもよい。いくつかの実施形態では、ステップ７３４は、第１のネットワークパケットスケジューラによって、第１のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスに対応するノードを選択し、さらに、トラフィッククラスの伝送のための絶対帯域幅限界を定義するステップを含んでもよい。例えば、階層は、ＩＰアドレス、プロトコル、およびアプリケーションタイプの組み合わせに基づいてもよい。例えば、トラフィッククラス階層は、トラフィッククラスＣ１、Ｃ１．１、Ｃ１．２、Ｃ２、Ｃ２．１、Ｃ２．２を有してもよく、クラスＣ１．１およびＣ１．２は、Ｃ１のサブクラスであって、クラスＣ２．１および２．２は、Ｃ２のサブクラスである。ノードＮ１．１、Ｎ１．２、Ｎ２．１、およびＮ２．２は、最下層トラフィッククラスＣ１．１、Ｃ１．２、Ｃ２．１、Ｃ２．２に対応するノードであってもよく、ノードＮ１およびＮ２は、内側ノードである。そのような実装では、待ち行列に入れるステップは、最下層トラフィッククラス（例えば、Ｎ１．１、Ｎ１．２、Ｎ２．１、およびＮ２．２）に対応するノードにおいて生じてもよく、ステップ７３４において、ノードＮ１．１等の第１のノードが、選択されてもよい。
【０２２３】
ステップ７３６において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、第１のノードが複数のトラフィッククラスの第１のトラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定してもよい。例えば、スケジューラＳ１は、サイズ１のネットワークパケットＰ−Ｃ１と、サイズ２のネットワークパケットＰ−Ｃ１と、サイズ３のネットワークパケットＰ−Ｃ１とを受信すると仮定する（サイズは、バイト、キロバイト、ブロック、最大伝送単位、または任意の他の単位であってもよく、具体的単位を参照せずに、一般的例証のためにここでは使用される）。受信されたネットワークパケットの総サイズは、６（１＋２＋３＝６）であるため、ステップ７３６において、スケジューラは、ノードＮ１のための非ゼロバイトカウントを識別してもよい。ノードは、トラフィッククラスに対応するため、ノードＮ１に対するバイトカウントを判定するとき、第１のトラフィッククラスのネットワークパケットのみが、検討される。いくつかの実施形態では、ステップ７３６はさらに、第１のネットワークパケットスケジューラによって、第１のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスに対応するノードが、最下層トラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定するステップを含む。
【０２２４】
ステップ７３８において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、ステップ７３６において判定されたバイトカウントが非ゼロであるかどうかを判定してもよい。バイトカウントが非ゼロである場合、方法７３０は、ステップ７４０において、仮想パケットの生成に進んでもよい。バイトカウントが非ゼロではない、例えば、バイトカウントがゼロである場合、方法７３０は、ステップ７３４に戻り、複数のノードの次のノードを選択してもよい。例えば、ノードＮ１が、ネットワークパケットを有していない場合、ステップ７３６において、スケジューラは、ゼロのＮ１に対するバイトカウントを判定し、ステップ７３４に戻ってもよい（例えば、次のノードＮ２およびクラスＣ２の総サイズのネットワークパケットのノードに対するバイトカウントを判定する）。
【０２２５】
ステップ７４０において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、第１のトラフィッククラスのための仮想パケットの最後のブロードキャスト以降または第１のノードの最後の判定以降の周期の間に待ち行列に入れられた第１のトラフィッククラスの着信ネットワークパケットのバイト数の識別子を含む、第１のトラフィッククラスのための仮想パケットを生成してもよい（ステップ７３４において）。例えば、時間Ｔ１において、第１のネットワークパケットスケジューラＳ１は、サイズ１キロバイトの１つのネットワークパケットＰ１−Ｃ１を有し、１キロバイトの識別子を伴うトラフィッククラスＣ１のための仮想パケットをブロードキャストしている場合がある（そのような識別子は、例えば、１０ビット数を表す１キロバイトのデータより有意に小さくてもよい）。Ｔ１の後の時間Ｔ２において、スケジューラＳ１は、サイズ２キロバイトの１つのネットワークパケットＰ２−Ｃ１を待ち行列に入れてもよい。ステップ７４０において、仮想パケットは、最後のブロードキャスト以降に待ち行列に入れられたクラスＣ１の着信ネットワークパケットのバイト数（例えば、ネットワークパケットＰ２−Ｃ１のサイズ）を示すための２キロバイト（例えば、１１ビット数）の識別子を含め、第１のトラフィッククラスのために生成されてもよい。いくつかの実施形態では、第１のネットワークパケットスケジューラは、第１のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスのための仮想パケットの最後のブロードキャスト以降または最下層トラフィッククラスに対応するノードの最後の判定以降の周期の間に待ち行列に入れられた最下層トラフィッククラスの着信ネットワークパケットのバイト数の識別子を含む、最下層トラフィッククラスのための仮想パケットを生成してもよい。
【０２２６】
ステップ７４２において、いくつかの実施形態では、第１のネットワークパケットスケジューラは、第１のノードが非ゼロバイトカウントを有することの判定に応答して、第１のトラフィッククラスのための仮想パケットを複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラにブロードキャストしてもよい。例えば、前述の実施例を継続すると、第１のネットワークパケットスケジューラは、クラスＣ１のための仮想パケットを、２キロバイト（例えば、１１ビット値）の識別子とともに、相互のネットワークパケットスケジューラＳ２およびＳ３にブロードキャストしてもよい。方法７３４は、次いで、ステップ７３４に戻り、次のノードを判定するであろう。例えば、トラフィッククラスＣ１のための仮想パケットをブロードキャストするステップ後、第１のネットワークパケットスケジューラは、ステップ７３４において、次のノード（例えば、ノードＮ２）を選択し、ステップ７３６において、ノードに対するバイトカウントを判定してもよい等と続く。
【０２２７】
いくつかの実施形態では、ステップ７４２において、第１のネットワークパケットスケジューラは、第１のネットワークパケットスケジューラによって、最後のブロードキャスト以降の周期の間に第１のトラフィッククラスの着信ネットワークパケットを待ち行列に入れたことに応答して、仮想パケットをブロードキャストしてもよい。例えば、Ｔ２後の時間Ｔ３において、第１のネットワークパケットスケジューラは、サイズ３キロバイトのクラスＣ１のネットワークパケットおよびサイズ４キロバイトのクラスＣ１のネットワークパケットを待ち行列に入れてもよい。スケジューラは、ステップ７３４において、第１のノードＮ１を選択し、ステップ７３６において、ノードＮ１に対するバイトカウント（例えば、７キロバイト）を判定し、ステップ７３８において、バイトカウントが非ゼロであることを判定し、ステップ７４０において、７キロバイトの識別子を伴うクラスＣ１のための仮想パケットを生成してもよい。仮想パケットは、他のネットワークパケットスケジューラにブロードキャストされてもよい。
【０２２８】
いくつかの実施形態では、ステップ７４２において、第１のネットワークパケットスケジューラは、第１のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスのための仮想パケットをブロードキャストしてもよい。例えば、第１のネットワークパケットスケジューラは、ネットワークパケットが対応するノードＮ１．１において待ち行列に入れられると、トラフィッククラスＣ１．１のための仮想パケットをブロードキャストしてもよい。
【０２２９】
ここで図７Ｃを参照すると、前述の方法に従ってネットワークおよび仮想パケットを保持する、ネットワークパケットスケジューラおよび待ち行列の実施形態のブロック図が、図示される。２つのパケットエンジンＡ−Ｂ５４８Ａ−５４８Ｂが、例示的目的のために図示されるが、多くの実施形態では、より多くのパケットエンジンが、システム上に存在してもよく、それぞれ、前述のように、マルチコアアプライアンスのコアによって実行される。そのようなパケットエンジンおよびコアは、前述のように、共有メモリバス５５６を介して接続される、および／または共有グローバルキャッシュ５８０を利用してもよい。他の実装では、パケットエンジン５４８Ａおよび５４８Ｂは、前述のように、マルチアプライアンスクラスタ６００内のような異なるアプライアンス上にあってもよい。そのようなパケットエンジンは、通信バックプレーン６０６を介して通信してもよい。さらに、クラスタ内の各アプライアンスは、複数のコアおよび複数のパケットエンジンを含んでもよい。それに応じて、図７Ｃに図示されるパケットエンジン５４８Ａ−５４８Ｂは、同一デバイスまたは異なるデバイス上にあってもよい。
【０２３０】
各パケットエンジン５４８は、概して、パケットスケジューラ７５０、スケジューラ、ネットワークスケジューラ、または任意の他のそのような用語と称される、パケットスケジューラ７５０Ａ−７５０Ｂを実行してもよい。スケジューラ７５０は、前述のように、待ち行列７５２−７５６内のパケットをスケジューリングし、仮想パケット７６０を生成し、他のパケットエンジンにブロードキャストするためのアプリケーション、デーモン、サービス、サーバ、ルーチン、または他の実行可能論理であってもよい。パケットエンジン５４８の一部として示されるが、多くの実装では、スケジューラ７５０は、別個のプロセッサまたはスレッドとして起動してもよい。
【０２３１】
各パケットエンジン５４８は、１つまたはそれを上回るパケット待ち行列７５２−７５６を維持してもよい。各待ち行列は、ネットワークインターフェースによる伝送のためのネットワークパケットおよび／または仮想パケットを記憶するためのＦＩＦＯバッファもしくは類似メモリ記憶要素を含んでもよい。パケットエンジン５４８の一部として示されるが、多くの実装では、各待ち行列７５２−７５６は、デバイスの共有メモリの一部、ネットワークインターフェースのメモリの一部、または他のそのような記憶場所を含んでもよい。待ち行列は、設定もしくは固定サイズを有する、または可変サイズを有してもよい。複数の待ち行列は、示されるように、前述のような異なるトラフィッククラスまたはタイプのために存在してもよい。３つの待ち行列が、各パケットエンジン上に示されるが、多くの実装では、各パケットエンジンは、より多いまたはそれを上回る少ない待ち行列を有してもよい。
【０２３２】
前述のように、各待ち行列は、ネットワークパケット７５８Ａ−７５８Ｃおよび／または対応する仮想パケット７６０Ａ−７６０Ｃを保持してもよい。概して、ネットワークパケット７５８と称される、ネットワークパケット７５８Ａ−７５８Ｃは、電子メール（例えば、ＳＭＴＰ／ＴＣＰ／ＩＰ）、ウェブブラウジング（例えば、ＨＴＴＰ／ＴＣＰ／ＩＰ）、ボイスオーバーＩＰ（例えば、ＲＴＰ／ＵＤＰ／ＩＰ）、または任意の他のそのような目的のためのパケットを含む、任意のサイズ、タイプ、またはプロトコルであってもよい。各待ち行列は、対応する優先順位のパケットを記憶してもよく、パケットは、各待ち行列のための優先順位に従って、待ち行列からネットワークインターフェースに提供されてもよい。例えば、待ち行列Ａが、待ち行列Ｃより高い優先順位である、待ち行列Ｂより高い優先順位である、１つのそのような実装では、最大４つのパケットが、待ち行列Ａから伝送され、次いで、待ち行列Ｂから最大２つが伝送され、次いで、待ち行列Ｃから最大１つ伝送されてもよい。他の優先順位平衡方法も、優先順位およびトラフィッククラスに応じて使用されてもよい。
【０２３３】
示されるように、各ネットワークパケット７５８Ａ−７５８Ｃ毎に、対応する仮想パケット７６０Ａ−７６０Ｃが、他のパケットスケジューラの待ち行列内に記憶される。例えば、ネットワークパケットＡ７５８Ａは、パケットスケジューラ７５０Ａの待ち行列Ａ７５２Ａ内に記憶される。対応する仮想パケットＡ７６０Ａは、パケットスケジューラ７５０Ｂの待ち行列Ａ７５２Ｂ内に記憶される。図７Ａに関連して前述のように、仮想パケット７６０Ａは、ネットワークパケットＡ７５８Ａの受信に応じて、パケットスケジューラ７５０Ａによって作成され、その待ち行列内に入れるために他のパケットエンジンにブロードキャストされる。
【０２３４】
前述のように、図７Ｄを簡単に参照すると、仮想パケット７６０Ａの実施形態の略図が、図示される。パケットは、ＴＣＰ／ＩＰヘッダ、ＵＤＰ／ＩＰヘッダ、もしくは類似ヘッダ等のヘッダを含んでもよい、または仮想パケットのためだけに利用される軽量ヘッダを有してもよい（仮想パケットが任意の場所に伝送されないため、オーバーヘッドを除去するため）。例えば、１つのそのような実装では、ヘッダは、パケットを仮想パケットとして識別し、随意に、仮想パケットを作成または発信したパケットスケジューラを識別する、ストリングであってもよい。仮想パケット７６０Ａは、クラスまたはタイプ識別子を含み、待ち行列内に適切に入れられることを可能にしてもよい。仮想パケット７６０Ａはまた、対応するネットワークパケット７５８Ａのサイズまたは長さを含んでもよい。いくつかの実装では、サイズまたは長さは、ネットワークパケットの長さを識別する、ビットストリングまたはフィールドであってもよい。例えば、１ＭＢのネットワークパケットを前提とすると、仮想パケットは、長さを１０ビット数として識別してもよい。他の実装では、サイズまたは長さは、対応するネットワークパケットの長さと長さが等しい、フィールドまたはペイロードであってもよい。例えば、１ＭＢのネットワークパケットを前提とすると、仮想パケットは、ヌルまたはランダムデータの１ＭＢのペイロードを有してもよい。これは、仮想パケットが待ち行列内の同一量の空間を「埋める」ことを可能にするために行われ得る。さらなる実装では、仮想パケットのペイロードの長さは、ヘッダおよびペイロードから仮想パケットのヘッダの長さを差し引いたものを含む、ネットワークパケットの全長と等しくてもよい（前述のように、より短くてもよい）。例えば、６４ビットヘッダおよび５００ビットペイロードを伴うネットワークパケットを前提として、軽量１６ビットヘッダを伴う仮想パケットは、５４８ビット「ヌル」ペイロードを有してもよい。そのような実装では、各パケットスケジューラは、待ち行列に入れられたパケットがネットワークパケット（その場合、ビットは、実際には、ネットワークインターフェースに提供される）または仮想パケット（その場合、ビットは、破棄される）であるかどうかにかかわらず、ビットをその待ち行列からネットワークインターフェースに同一ビットレートで「伝送」してもよい。各スケジューラおよび待ち行列は、したがって、同一ビットレートで動作し、完璧な同期化を可能にし得る。仮想パケットのみが、ヌルペイロードではなく、長さ識別子を有する、類似実装では、スケジューラは、単に、長さ識別子内で識別されたビット伝送周期の数を待機してもよい一方、別のスケジューラは、対応する実際のネットワークパケットをネットワークインターフェースに提供し、再び、同期化を確実にする。
【０２３５】
図７Ｃに戻って簡単に参照すると、示されるように、各待ち行列７５２Ａ−７５６Ｂは、ネットワークパケットまたは仮想パケットのいずれかを待ち行列の任意の位置に記憶し、他のパケットエンジンは、ネットワークパケットまたは仮想パケットの他方を同一位置に記憶する。例えば、ネットワークパケットＡ７５８Ａは、待ち行列Ａ７５２Ａの後尾にある。待ち行列Ａ７５２Ａ内のその上方は、仮想パケットおよび別のネットワークパケットである（サイズの区別を伴って図示されるが、前述のように、それらは、いくつかの実装では、同一サイズであってもよい）。それに応じて、対応する仮想パケットＡ７６０Ａは、待ち行列Ａ７５２Ｂの後尾にあって、その上には、待ち行列Ａ７５２Ａ内の仮想パケットおよびネットワークパケットに対応する、ネットワークパケットおよび別の仮想パケットがある。各スケジューラは、したがって、パケットをその待ち行列から同時に「提供」してもよく、１つのみの実際のネットワークパケットが、ネットワークインターフェースに提供され、競合の任意の可能性を回避する。
【０２３６】
上記に説明されるシステムは、それらのコンポーネントの任意またはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型機械上に、またはいくつかの実施形態では、分散型システム内の複数の機械上にのいずれかにおいて提供されてもよいことを理解されたい。上記に説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、または任意のそれらの組み合わせを生産するために、プログラミングおよび／またはエンジニアリング技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記に説明されるシステムおよび方法は、１つまたはそれを上回る製造品上もしくは内で具現化される、１つまたはそれを上回るコンピュータ可読プログラムとして提供されてもよい。用語「製造品」は、本明細書で使用されるように、１つまたはそれを上回るコンピュータ可読デバイス、ファームウェア、プログラム可能論理、メモリデバイス（例えば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＳＲＡＭ等）、ハードウェア（例えば、集積回路チップ、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）等）、電子デバイス、コンピュータ可読不揮発性記憶ユニット（例えば、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、ハードディスクドライブ等）からアクセス可能であって、その中に内蔵される、コードまたは論理を包含することが意図される。製造品は、ネットワーク伝送ライン、無線伝送媒体、空間を通して伝搬する信号、無線波、赤外線信号等を介して、コンピュータ可読プログラムへのアクセスを提供する、ファイルサーバからアクセス可能であってもよい。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、プロセッサによって実行されるコンピュータ可読媒体内に内蔵されるハードウェア論理ならびにソフトウェアまたはプログラム可能コードを含む。一般に、コンピュータ可読プログラムは、ＬＩＳＰ、ＰＥＲＬ、Ｃ、Ｃ＋＋、Ｃ＃、ＰＲＯＬＯＧ等の任意のプログラミング言語、またはＪＡＶＡ（登録商標）等の任意のバイトコード言語において実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして１つまたはそれを上回る製造品上もしくはその中に記憶されてもよい。
【０２３７】
方法およびシステムの種々の実施形態が説明されたが、これらの実施形態は、例示的であって、説明される方法またはシステムの範囲をいかようにも限定するものではない。当業者は、説明される方法およびシステムの最広範囲から逸脱することなく、説明される方法およびシステムの形態および詳細に変更をもたらすことができる。したがって、本明細書に説明される方法およびシステムの範囲は、例示的実施形態のいずれかによって限定されるべきではなく、付随の請求項およびその均等物に従って定義されるべきである。
【図１Ａ】
2019500767.tif 000003
【図１Ｂ】
2019500767.tif 000004
【図１Ｃ】
2019500767.tif 000005
【図１Ｄ】
2019500767.tif 000006
【図１Ｅ】
2019500767.tif 000007
【図１Ｆ】
2019500767.tif 000008
【図１Ｇ】
2019500767.tif 000009
【図１Ｈ】
2019500767.tif 000010
【図２Ａ】
2019500767.tif 000011
【図２Ｂ】
2019500767.tif 000012
【図３】
2019500767.tif 000013
【図４Ａ】
2019500767.tif 000014
【図４Ｂ】
2019500767.tif 000015
【図４Ｃ】
2019500767.tif 000016
【図５Ａ】
2019500767.tif 000017
【図５Ｂ】
2019500767.tif 000018
【図５Ｃ】
2019500767.tif 000019
【図６】
2019500767.tif 000020
【図７Ａ】
2019500767.tif 000021
【図７Ｂ】
2019500767.tif 000022
【図７Ｃ】
2019500767.tif 000023
【図７Ｄ】
2019500767.tif 000024
【国際調査報告】
2019500767.tif 000025
2019500767.tif 000026