本ソリューションの特徴および利点は、同様の参照記号が全体を通して対応する要素を識別する、図面と併せて解釈されるときに、以下に記載される発明を実施するための形態から、より明白となるであろう。図面では、同様の参照数字は、概して、同じ、機能的に類似する、および/または構造的に類似する要素を示す。
以下の種々の実施形態の説明を読む目的で、本明細書の節およびそれらの個別の内容の以下の説明が役立ち得る。
第A節は、本明細書に説明される実施形態を実践するために有用であり得る、ネットワーク環境およびコンピュータ環境を説明する。
第B節は、コンピュータ環境を遠隔ユーザに配信するためのシステムおよび方法の実施形態を説明する。
第C節は、クライアントとサーバとの間の通信を加速するためのシステムおよび方法の実施形態を説明する。
第D節は、アプリケーション配信コントローラを仮想化するためのシステムおよび方法の実施形態を説明する。
第E節は、マルチコアアーキテクチャおよび環境を提供するためのシステムおよび方法の実施形態を説明する。
第F節は、クラスタ化されたアプライアンスアーキテクチャ環境を提供するためのシステムおよび方法の実施形態を説明する。
第G節は、複数のネットワークパケットスケジューラを同期化するためのシステムおよび方法の実施形態を説明する。
A.ネットワークおよびコンピュータ環境
アプライアンスおよび/またはクライアントのシステムおよび方法の実施形態の詳細について議論にすることに先立って、そのような実施形態が展開され得る、ネットワークおよびコンピュータ環境について議論することが役立ち得る。ここで図1Aを参照すると、ネットワーク環境の実施形態が描写されている。要するに、ネットワーク環境は、1つまたはそれを上回るネットワーク104、104’(概して、ネットワーク104と称される)を介して1つまたはそれを上回るサーバ106a−106n(概して、サーバ106または遠隔マシン106とも称される)と通信する1つまたはそれを上回るクライアント102a−102n(概して、ローカルマシン102またはクライアント102とも称される)を備える。いくつかの実施形態では、クライアント102は、アプライアンス200を介してサーバ106と通信する。
図1Aは、クライアント102とサーバ106との間のネットワーク104およびネットワーク104’を示すが、クライアント102およびサーバ106は、同一ネットワーク104上にあってもよい。ネットワーク104および104’は、同一タイプのネットワークまたは異なるタイプのネットワークであることができる。ネットワーク104および/またはネットワーク104’は、企業イントラネット、メトロポリタンエリアネットワーク(MAN)等のローカルエリアネットワーク(LAN)、またはインターネットまたはワールドワイドウェブ等の広域ネットワーク(WAN)であることができる。一実施形態では、ネットワーク104’は、プライベートネットワークであってもよく、ネットワーク104は、公衆ネットワークであってもよい。いくつかの実施形態では、ネットワーク104は、プライベートネットワークであってもよく、ネットワーク104’は、公衆ネットワークであってもよい。別の実施形態では、ネットワーク104および104’は両方とも、プライベートネットワークであってもよい。いくつかの実施形態では、クライアント102は、企業データセンタに位置するサーバ106へのネットワーク104を経由したWAN接続を介して通信する、企業の支店に位置してもよい。
ネットワーク104および/または104’は、任意のタイプおよび/または形態のネットワークであってもよく、以下、すなわち、2点間ネットワーク、放送ネットワーク、広域ネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ATM(非同期転送モード)ネットワーク、SONET(同期光ネットワーク)ネットワーク、SDH(同期デジタル階層)ネットワーク、無線ネットワーク、および有線ネットワークのうちのいずれかを含んでもよい。いくつかの実施形態では、ネットワーク104は、赤外線チャネルまたは衛星帯等の無線リンクを備えてもよい。ネットワーク104および/または104’のトポロジは、バス、スター、またはリングネットワークトポロジであってもよい。ネットワーク104および/または104’およびネットワークトポロジは、本明細書に説明される動作をサポートすることが可能である、当業者に公知であるもの等の任意のネットワークまたはネットワークトポロジであってもよい。
図1Aに示されるように、インターフェースユニット200またはゲートウェイ200とも称され得る、アプライアンス200が、ネットワーク104と104’との間に示されている。いくつかの実施形態では、アプライアンス200は、ネットワーク104上に位置してもよい。例えば、企業の支店が、支店においてアプライアンス200を展開してもよい。他の実施形態では、アプライアンス200は、ネットワーク104’上に位置してもよい。例えば、アプライアンス200は、企業データセンタに位置してもよい。さらに別の実施形態では、複数のアプライアンス200が、ネットワーク104上に展開されてもよい。いくつかの実施形態では、例えば、複数のアプライアンス200が、ネットワーク104’上に展開されてもよい。一実施形態では、第1のアプライアンス200が、第2のアプライアンス200’と通信する。他の実施形態では、アプライアンス200は、任意のクライアント102またはクライアント102と同一または異なるネットワーク104、104’上のサーバ106の一部であり得る。1つまたはそれを上回るアプライアンス200は、クライアント102とサーバ106との間のネットワークまたはネットワーク通信内の任意の点に位置してもよい。
いくつかの実施形態では、アプライアンス200は、NetScaler(R)デバイスと称される、Citrix Systems, Inc.(Ft. Lauderdale Florida)製のネットワークデバイスのうちのいずれかを備える。他の実施形態では、アプライアンス200は、F5 Networks, Inc.(Seattle, Washington)製のWebAcceleratorおよびBigIPと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス205は、DX加速デバイスプラットフォームおよび/またはJuniper Networks, Inc.(Sunnyvale, California))製のSA700、SA2000、SA4000、およびSA6000デバイス等のSSL VPNシリーズのデバイスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス200は、Cisco ACEアプリケーション制御エンジンモジュールサービスソフトウェアおよびネットワークモジュール、およびCisco AVSシリーズアプリケーション速度システム等のCisco Systems, Inc.(SanJose, California)製の任意のアプリケーション加速および/またはセキュリティ関連アプライアンスおよび/またはソフトウェアを含む。
一実施形態では、本システムは、複数の論理的にグループ化されたサーバ106を含んでもよい。これらの実施形態では、サーバの論理グループは、サーバファーム38と称されてもよい。これらの実施形態のうちのいくつかでは、サーバ106は、地理的に分散されてもよい。ある場合には、ファーム38は、単一のエンティティとして運営されてもよい。他の実施形態では、サーバファーム38は、複数のサーバファーム38を備える。一実施形態では、サーバファームは、1つまたはそれを上回るクライアント102の代わりに、1つまたはそれを上回るアプリケーションを実行する。
各ファーム38内のサーバ106は、異種であり得る。サーバ106のうちの1つまたはそれを上回るものが、1つのタイプのオペレーティングシステムプラットフォーム(例えば、Microsoft Corp.(Redmond, Washington)製のWINDOWS NT)に従って動作することができる一方で、他のサーバ106のうちの1つまたはそれを上回るものは、別のタイプのオペレーティングシステムプラットフォーム(例えば、Unix(登録商標)またはLinux(登録商標))に従って動作することができる。各ファーム38のサーバ106は、同一ファーム38内の別のサーバ106に物理的に近接する必要はない。したがって、ファーム38として論理的にグループ化されたサーバ106のグループは、広域ネットワーク(WAN)接続または中域ネットワーク(MAN)接続を使用して、相互接続されてもよい。例えば、ファーム38は、異なる大陸、または大陸、国、州、都市、キャンパス、または部屋の異なる領域の中に物理的に位置する、サーバ106を含んでもよい。ファーム38内のサーバ106の間のデータ伝送速度は、サーバ106がローカルネットワーク(LAN)接続または何らかの形態の直接接続を使用して接続される場合に、増加されることができる。
サーバ106は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、またはゲートウェイサーバと称されてもよい。いくつかの実施形態では、サーバ106は、アプリケーションサーバとして、またはマスタアプリケーションサーバとして機能する能力を有してもよい。一実施形態では、サーバ106は、アクティブディレクトリを含んでもよい。クライアント102はまた、クライアントノードまたはエンドポイントと称されてもよい。いくつかの実施形態では、クライアント102は、サーバ上のアプリケーションへのアクセスを求めるクライアントノードとして、および他のクライアント102a−102nのためのホスト型アプリケーションへのアクセスを提供するアプリケーションサーバとしての両方で機能する能力を有する。
いくつかの実施形態では、クライアント102は、サーバ106と通信する。一実施形態では、クライアント102は、ファーム38内のサーバ106のうちの1つと直接通信する。別の実施形態では、クライアント102は、ファーム38内のサーバ106と通信するように、プログラム隣接アプリケーションを実行する。なおも別の実施形態では、サーバ106は、マスタノードの機能性を提供する。いくつかの実施形態では、クライアント102は、ネットワーク104を通してファーム38内のサーバ106と通信する。ネットワーク104を経由して、クライアント102は、例えば、ファーム38内のサーバ106a−106nによってホストされる種々のアプリケーションの実行を要求し、表示するためにアプリケーション実行の結果の出力を受信することができる。いくつかの実施形態では、マスタノードのみが、要求されたアプリケーションをホストするサーバ106’と関連付けられるアドレス情報を識別して提供するために要求される機能性を提供する。
一実施形態では、サーバ106は、ウェブサーバの機能性を提供する。別の実施形態では、サーバ106aは、クライアント102から要求を受信し、要求を第2のサーバ106bに自動転送し、サーバ106bからの要求への応答とともに、クライアント102による要求に応答する。なおも別の実施形態では、サーバ106は、クライアント102に利用可能なアプリケーションの列挙、およびアプリケーションの列挙によって識別されるアプリケーションをホストするサーバ106と関連付けられるアドレス情報を獲得する。さらに別の実施形態では、サーバ106は、ウェブインターフェースを使用して、要求への応答をクライアント102に提示する。一実施形態では、クライアント102は、識別されたアプリケーションにアクセスするようにサーバ106と直接通信する。別の実施形態では、クライアント102は、サーバ106上の識別されたアプリケーションの実行によって生成される、表示データ等のアプリケーション出力データを受信する。
ここで図1Bを参照すると、複数のアプライアンス200を展開するネットワーク環境の実施形態が描写されている。第1のアプライアンス200が、第1のネットワーク104上に、第2のアプライアンス200’が、第2のネットワーク104’上に展開されてもよい。例えば、企業が、支店において第1のアプライアンス200を、データセンタにおいて第2のアプライアンス200’を展開してもよい。別の実施形態では、第1のアプライアンス200および第2のアプライアンス200’は、同一のネットワーク104またはネットワーク104’上に展開される。例えば、第1のアプライアンス200は、第1のサーバファーム38のために展開されてもよく、第2のアプライアンス200は、第2のサーバファーム38’のために展開されてもよい。別の実施例では、第1のアプライアンス200が、第1の支店において展開されてもよい一方で、第2のアプライアンス200’は、第2の支店’において展開されてもよい。いくつかの実施形態では、第1のアプライアンス200および第2のアプライアンス200’は、ネットワークトラフィックまたはクライアントとサーバとの間のアプリケーションおよびデータの配信を加速するように、相互と協力して、または連動して作動する。
ここで図1Cを参照すると、1つまたはそれを上回るWAN最適化アプライアンス205、205’の間等で1つまたはそれを上回る他のタイプのアプライアンスとともにアプライアンス200を展開する、ネットワーク環境の別の実施形態が描写されている。例えば、第1のWAN最適化アプライアンス205が、ネットワーク104と104’との間に示され、第2のWAN最適化アプライアンス205’が、アプライアンス200と1つまたはそれを上回るサーバ106との間に展開されてもよい。一例として、企業が、支店において第1のWAN最適化アプライアンス205を、データセンタにおいて第2のWAN最適化アプライアンス205’を展開してもよい。いくつかの実施形態では、アプライアンス205は、ネットワーク104’上に位置してもよい。他の実施形態では、アプライアンス205’は、ネットワーク104上に位置してもよい。いくつかの実施形態では、アプライアンス205’は、ネットワーク104’またはネットワーク104”上に位置してもよい。一実施形態では、アプライアンス205および205’は、同一ネットワーク上にある。別の実施形態では、アプライアンス205および205’は、異なるネットワーク上にある。別の実施例では、第1のWAN最適化アプライアンス205が、第1のサーバファーム38のために、第2のWAN最適化アプライアンス205’が、第2のサーバファーム38’のために展開されてもよい。
一実施形態では、アプライアンス205は、WAN接続へ、および/またはそこからのトラフィック等の任意のタイプおよび形態のネットワークトラフィックの性能、動作、またはサービス品質を加速、最適化、または別様に改良するためのデバイスである。いくつかの実施形態では、アプライアンス205は、性能強化プロキシである。他の実施形態では、アプライアンス205は、WAN最適化コントローラと称されることもある、任意のタイプおよび形態のWAN最適化または加速デバイスである。一実施形態では、アプライアンス205は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製のCloudBridge(R)と称される製品実施形態のうちのいずれかである。他の実施形態では、アプライアンス205は、F5 Networks, Inc.(Seattle, Washington)製のBIG−IPリンクコントローラおよびWANjetと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス205は、Juniper Networks, Inc.(Sunnyvale, California)製のWXおよびWXC WAN加速デバイスプラットフォームのうちのいずれかを含む。いくつかの実施形態では、アプライアンス205は、Riverbed Technology(San Francisco, California)製のスチールヘッドラインのWAN最適化アプライアンスのうちのいずれかを含む。他の実施形態では、アプライアンス205は、Expand Networks Inc.(Roseland, New Jersey)製のWAN関連デバイスのうちのいずれかを含む。一実施形態では、アプライアンス205は、Packeteerによって提供されるPacketShaper、iShared、およびSkyX製品実施形態等のPacketeer Inc.(Cupertino, California)製のWAN関連アプライアンスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス205は、Cisco広域ネットワークアプリケーションサービスソフトウェアおよびネットワークモジュール、および広域ネットワークエンジンアプライアンス等のCisco Systems, Inc.(San Jose, California)製の任意のWAN関連アプライアンスおよび/またはソフトウェアを含む。
一実施形態では、アプライアンス205は、支店または遠隔オフィスのためのアプリケーションおよびデータ加速サービスを提供する。一実施形態では、アプライアンス205は、広域ファイルサービス(WAFS)の最適化を含む。別の実施形態では、アプライアンス205は、共通インターネットファイルシステム(CIFS)プロトコルを介して等、ファイルの配信を加速する。他の実施形態では、アプライアンス205は、アプリケーションおよびデータの配信を加速するように、メモリおよび/または記憶装置の中でキャッシングを提供する。一実施形態では、アプライアンス205は、任意のレベルのネットワークスタックにおいて、または任意のプロトコルまたはネットワーク層において、ネットワークトラフィックの圧縮を提供する。別の実施形態では、アプライアンス205は、WAN接続を経由したアプリケーションおよびデータの配信を加速するように、トランスポート層プロトコル最適化、フロー制御、性能強化または修正、および/または管理を提供する。例えば、一実施形態では、アプライアンス205は、トランスポート制御プロトコル(TCP)最適化を提供する。他の実施形態では、アプライアンス205は、任意のセッションまたはアプリケーション層プロトコルのための最適化、フロー制御、性能強化または修正、および/または管理を提供する。
別の実施形態では、アプライアンス205は、存在、機能性、または能力を別のアプライアンス205’にアナウンスするように、任意のタイプおよび形態のデータまたは情報を、ネットワークパケットのカスタムまたは標準TCPおよび/またはIPヘッダフィールドまたはオプションフィールドにエンコードする。別の実施形態では、アプライアンス205’は、TCPおよび/またはIPヘッダフィールドまたはオプションの両方でエンコードされるデータを使用して、別のアプライアンス205’と通信してもよい。例えば、アプライアンスは、WAN加速等の機能性を果たす際に、または相互と連動して作動するために、アプライアンス205、205’によって使用される1つまたはそれを上回るパラメータを通信するようにTCPオプションまたはIPヘッダフィールドまたはオプションを使用してもよい。
いくつかの実施形態では、アプライアンス200は、アプライアンス205と205’との間で通信されるTCPおよび/またはIPヘッダおよび/またはオプションフィールドの中でエンコードされる情報のうちのいずれかを保存する。例えば、アプライアンス200は、クライアントとアプライアンス205および205’をトラバースするサーバとの間からのトランスポート層接続等のアプライアンス200をトラバースするトランスポート層接続を終了させてもよい。一実施形態では、アプライアンス200は、第1のトランスポート層接続を介して第1のアプライアンス205によって伝送されるトランスポート層パケットの中の任意のエンコードされた情報を識別して保存し、第2のトランスポート層接続を介してエンコードされた情報とともにトランスポート層パケットを第2のアプライアンス205’に通信する。
ここで図1Dを参照すると、クライアント102上でコンピュータ環境を配信する、および/または動作させるためのネットワーク環境が描写されている。いくつかの実施形態では、サーバ106は、コンピュータ環境またはアプリケーションおよび/またはデータファイルを1つまたはそれを上回るクライアント102に配信するためのアプリケーション配信システム190を含む。要するに、クライアント10は、ネットワーク104、104’およびアプライアンス200を介してサーバ106と通信する。例えば、クライアント102は、企業の遠隔オフィス、例えば、支店内に常駐してもよく、サーバ106は、企業データセンタに常駐してもよい。クライアント102は、クライアントエージェント120と、コンピュータ環境15とを備える。コンピュータ環境15は、データファイルにアクセスする、それを処理または使用する、アプリケーションを実行または動作させてもよい。コンピュータ環境15、アプリケーション、および/またはデータファイルは、アプライアンス200および/またはサーバ106を介して配信されてもよい。
いくつかの実施形態では、アプライアンス200は、クライアント102へのコンピュータ環境15またはその任意の部分の配信を加速する。一実施形態では、アプライアンス200は、アプリケーション配信システム190によるコンピュータ環境15の配信を加速する。例えば、本明細書に説明される実施形態は、中央企業データセンタから企業の支店等の遠隔ユーザ場所へのアプリケーションによって処理可能なストリーミングアプリケーションおよびデータファイルの配信を加速するために使用されてもよい。別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間のトランスポート層トラフィックを加速する。アプライアンス200は、1)トランスポート層接続プール、2)トランスポート層接続多重化、3)トランスポート制御プロトコルバッファリング、4)圧縮、および5)キャッシング等のサーバ106からクライアント102への任意のトランスポート層ペイロードを加速するための加速技法を提供してもよい。いくつかの実施態では、アプライアンス200は、クライアント102からの要求に応答する際に、サーバ106の負荷平衡を提供する。他の実施形態では、アプライアンス200は、1つまたはそれを上回るサーバ106へのアクセスを提供するように、プロキシまたはアクセスサーバとして作用する。別の実施形態では、アプライアンス200は、SSL VPN接続等のクライアント102の第1のネットワーク104からサーバ106の第2のネットワーク104’へのセキュアな仮想プライベートネットワーク接続を提供する。さらに他の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の接続および通信のアプリケーションファイアウォールセキュリティ、制御、および管理を提供する。
いくつかの実施形態では、アプリケーション配信管理システム190は、複数の実行方法に基づいて、かつポリシエンジン195を介して適用される任意の認証および承認ポリシに基づいて、コンピュータ環境を遠隔または別様にユーザのデスクトップに配信するアプリケーション配信技法を提供する。これらの技法を用いることで、遠隔ユーザは、任意のネットワーク接続されたデバイス100から、コンピュータ環境およびサーバに記憶されたアプリケーションおよびデータファイルへのアクセスを取得してもよい。一実施形態では、アプリケーション配信システム190は、サーバ106上で常駐または実行してもよい。別の実施形態では、アプリケーション配信システム190は、複数のサーバ106a−106n上で常駐または実行してもよい。いくつかの実施形態では、アプリケーション配信システム190は、サーバファーム38内で実行してもよい。一実施形態では、アプリケーション配信システム190を実行するサーバ106はまた、アプリケーションおよびデータファイルを記憶または提供してもよい。別の実施形態では、1つまたはそれを上回るサーバ106の第1のセットが、アプリケーション配信システム190を実行してもよく、異なるサーバ106nが、アプリケーションおよびデータファイルを記憶または提供してもよい。いくつかの実施形態では、アプリケーション配信システム190、アプリケーション、およびデータファイルはそれぞれ、異なるサーバ上に常駐または位置してもよい。さらに別の実施形態では、アプリケーション配信システム190の任意の部分が、アプライアンス200または複数のアプライアンス上に常駐、実行、または記憶される、またはそれに分配されてもよい。
クライアント102は、データファイルを使用または処理するアプリケーションを実行するためのコンピュータ環境15を含んでもよい。ネットワーク104、104’およびアプライアンス200を介したクライアント102は、サーバ106からアプリケーションおよびデータファイルを要求してもよい。一実施形態では、アプライアンス200は、クライアント102からサーバ106に要求を自動転送してもよい。例えば、クライアント102は、ローカルに記憶された、またはアクセス可能であるアプリケーションおよびデータファイルを有していない場合がある。要求に応答して、アプリケーション配信システム190および/またはサーバ106は、アプリケーションおよびデータファイルをクライアント102に配信してもよい。例えば、一実施形態では、サーバ106は、クライアント102上のコンピュータ環境15内で動作するようにアプリケーションストリームとしてアプリケーションを伝送してもよい。
いくつかの実施形態では、アプリケーション配信システム190は、XenApp(R)またはXenDesktop(R)等のCitrix Workspace Suite(TM)(Citrix Systems, Inc.)製の任意の部分および/またはMicrosoft Corporation製のMicrosoft(登録商標)Windows(登録商標) Terminal Servicsのうちのいずれかを備える。一実施形態では、アプリケーション配信システム190は、遠隔表示プロトコルを介して、または別様に遠隔ベースまたはサーバベースの計算を介して、1つまたはそれを上回るアプリケーションをクライアント102またはユーザに配信してもよい。別の実施形態では、アプリケーション配信システム190は、アプリケーションのストリーミングを介して、1つまたはそれを上回るアプリケーションをクライアントまたはユーザに配信してもよい。
一実施形態では、アプリケーション配信システム190は、アプリケーションへのアクセス、アプリケーション実行方法の選択、およびアプリケーションの配信を制御および監視するためのポリシエンジン195を含む。いくつかの実施形態では、ポリシエンジン195は、ユーザまたはクライアント102がアクセスし得る、1つまたはそれを上回るアプリケーションを判定する。別の実施形態では、ポリシエンジン195は、どのようにしてアプリケーションがユーザまたはクライアント102に配信されるべきか、例えば、実行の方法を判定する。いくつかの実施形態では、アプリケーション配信システム190は、サーバベースの計算、ローカル実行のためにローカルにアプリケーションをクライアント120にストリーム配信または配信すること等のアプリケーション実行の方法を選択する、複数の配信技法を提供する。
一実施形態では、クライアント102は、アプリケーションプログラムの実行を要求し、サーバ106を備えるアプリケーション配信システム190は、アプリケーションプログラムを実行する方法を選択する。いくつかの実施形態では、サーバ106は、クライアント102から証明書を受信する。別の実施形態では、サーバ106は、クライアント102から利用可能なアプリケーションの列挙の要求を受信する。一実施形態では、証明書の要求または受信に応答して、アプリケーション配信システム190は、クライアント102に利用可能な複数のアプリケーションプログラムを列挙する。アプリケーション配信システム190は、列挙されたアプリケーションを実行する要求を受信する。アプリケーション配信システム190は、例えば、ポリシエンジンのポリシに応答して、列挙されたアプリケーションを実行するための所定数の方法のうちの1つを選択する。アプリケーション配信システム190は、クライアント102が、サーバ106上のアプリケーションプログラムの実行によって生成されるアプリケーション出力データを受信することを可能にする、アプリケーションの実行の方法を選択してもよい。アプリケーション配信システム190は、アプリケーションを備える複数のアプリケーションファイルを読み出した後に、ローカルマシン10がローカルでアプリケーションプログラムを実行することを可能にする、アプリケーションの実行の方法を選択してもよい。さらに別の実施形態では、アプリケーション配信システム190は、ネットワーク104を介してクライアント102にアプリケーションをストリーム配信するように、アプリケーションの実行の方法を選択してもよい。
クライアント102は、任意のタイプおよび/または形態のウェブブラウザ、ウェブベースのクライアント、クライアント・サーバアプリケーション、シンクライアントコンピューティングクライアント、Active Xコントロール、またはJava(登録商標)アプレット等の任意のタイプおよび/または形態のソフトウェア、プログラム、または実行可能命令、またはクライアント102上で実行することが可能な任意のタイプおよび/または形態の実行可能命令であることができる、アプリケーションを実行、動作、または別様に提供してもよい。いくつかの実施形態では、アプリケーションは、サーバ106上のクライアント102の代わりに実行される、サーバベースまたは遠隔ベースのアプリケーションであってもよい。一実施形態では、サーバ106は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製の独立コンピューティングアーキテクチャ(ICA)プロトコルまたはMicrosoft Corporation(Redmond, Washington)製の遠隔デスクトッププロトコル(RDP)等の任意のシンクライアントまたは遠隔表示プロトコルを使用して、クライアント102への出力を表示してもよい。アプリケーションは、任意のタイプのプロトコルを使用することができ、それは、例えば、HTTPクライアント、FTPクライアント、Oscarクライアント、またはTelnetクライアントであることができる。他の実施形態では、アプリケーションは、ソフトIP電話等のVoIP通信に関連する任意のタイプのソフトウェアを備える。さらなる実施形態では、アプリケーションは、ビデオおよび/またはオーディオをストリーミング配信するためのアプリケーション等のリアルタイムデータ通信に関連する任意のアプリケーションを備える。
いくつかの実施形態では、サーバ106またはサーバファーム38は、シンクライアント計算を提供するアプリケーションまたは遠隔表示プレゼンテーションアプリケーション等の1つまたはそれを上回るアプリケーションを起動していてもよい。一実施形態では、サーバ106またはサーバファーム38は、XenApp(R)またはXenDesktop(R)等のCitrix Workspace Suite(TM)(Citrix
Systems, Inc.)製の任意の部分および/またはMicrosoft Corporation製のMicrosoft(R) Windows(登録商標) Terminal Servicesのうちのいずれかをアプリケーションとして実行する。一実施形態では、アプリケーションは、Citrix Systems, Inc.(Fort Lauderdale, Florida)によって開発されたICAクライアントである。他の実施形態では、アプリケーションは、Microsoft Corporation(Redmond, Washington)によって開発された遠隔デスクトップ(RDP)クライアントを含む。また、サーバ106は、例えば、Microsoft Corporation(Redmond, Washington)製のMicrosoft Exchange等のEメールサービスを提供するアプリケーションサーバ、ウェブまたはインターネットサーバ、またはデスクトップ共有サーバ、または協調サーバであり得る、アプリケーションを起動してもよい。いくつかの実施形態では、アプリケーションのうちのいずれかは、Citrix Systems, Inc.(Fort Lauderdale, Florida)によって提供されるGoToMeeting(TM)、Cisco Systems, Inc.(San Jose, California)によって提供されるWebEx(TM)、またはMicrosoft Corporation(Redmond, Washington)によって提供されるMicrosoft Office Live Meeting等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
依然として図1Dを参照すると、ネットワーク環境の実施形態は、監視サーバ106Aを含んでもよい。監視サーバ106Aは、任意のタイプおよび形態の性能監視サービス198を含んでもよい。性能監視サービス198は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および/または管理ソフトウェアおよび/またはハードウェアを含んでもよい。一実施形態では、性能監視サービス198は、1つまたはそれを上回る監視エージェント197を含む。監視エージェント197は、クライアント102、サーバ106、またはアプライアンス200、205等のデバイス上で監視、測定、およびデータ収集アクティビティを行うための任意のソフトウェア、ハードウェア、またはその組み合わせを含む。いくつかの実施形態では、監視エージェント197は、Visual
BasicスクリプトまたはJavascript(登録商標)等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント197は、デバイスの任意のアプリケーションおよび/またはユーザに対して透過的に実行する。いくつかの実施形態では、監視エージェント197は、アプリケーションまたはクライアントに影響を及ぼすことなくインストールおよび動作される。さらに別の実施形態では、監視エージェント197は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
いくつかの実施形態では、監視エージェント197は、所定の頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント197は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント197は、ウェブページまたはHTTP応答の受信の要求の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント197は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント197は、任意の監視、測定、または収集されたデータを監視サービス198に報告または提供してもよい。一実施形態では、監視エージェント197は、スケジュールまたは所定の頻度に従って、情報を監視サービス198に伝送する。別の実施形態では、監視エージェント197は、イベントの検出に応じて、情報を監視サービス198に伝送する。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、クライアント、サーバ、サーバファーム、アプライアンス200、アプライアンス205、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を行う。一実施形態では、監視サービス198および/または監視エージェント197は、TCPまたはUDP接続等の任意のトランスポート層接続の監視および性能測定を行う。別の実施形態では、監視サービス198および/または監視エージェント197は、ネットワーク待ち時間を監視して測定する。さらなる一実施形態では、監視サービス198および/または監視エージェント197は、帯域幅利用を監視して測定する。
他の実施形態では、監視サービス198および/または監視エージェント197は、エンドユーザ応答時間を監視して測定する。いくつかの実施形態では、監視サービス198は、アプリケーションの監視および性能測定を行う。別の実施形態では、監視サービス198および/または監視エージェント197は、アプリケーションへの任意のセッションまたは接続の監視および性能測定を行う。一実施形態では、監視サービス198および/または監視エージェント197は、ブラウザの性能を監視して測定する。別の実施形態では、監視サービス198および/または監視エージェント197は、HTTPベースのトランザクションの性能を監視して測定する。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、ボイスオーバーIP(VoIP)アプリケーションまたはセッションの性能を監視して測定する。他の実施形態では、監視サービス198および/または監視エージェント197は、ICAクライアントまたはRDPクライアント等の遠隔表示プロトコルアプリケーションの性能を監視して測定する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、任意のタイプおよび形態のストリーミングメディアの性能を監視して測定する。なおもさらなる実施形態では、監視サービス198および/または監視エージェント197は、ホスト型アプリケーションまたはサービスとしてのソフトウェア(SaaS)配信モデルの性能を監視して測定する。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、アプリケーションに関連する1つまたはそれを上回るトランザクション、要求、または応答の監視および性能測定を行う。他の実施形態では、監視サービス198および/または監視エージェント197は、任意の.NETまたはJ2EEコール等のアプリケーション層スタックの任意の部分を監視して測定する。一実施形態では、監視サービス198および/または監視エージェント197は、データベースまたはSQLトランザクションを監視して測定する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、任意の方法、機能、またはアプリケーションプログラミングインターフェース(API)コールを監視して測定する。
一実施形態では、監視サービス198および/または監視エージェント197は、アプライアンス200および/またはアプライアンス205等の1つまたはそれを上回るアプライアンスを介したサーバからクライアントへのアプリケーションおよび/またはデータの配信の監視および性能測定を行う。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、仮想化されたアプリケーションの配信の性能を監視して測定する。他の実施形態では、監視サービス198および/または監視エージェント197は、ストリーミングアプリケーションの配信の性能を監視して測定する。別の実施形態では、監視サービス198および/または監視エージェント197は、クライアントへのデスクトップアプリケーションの配信および/またはクライアント上のデスクトップアプリケーションの実行の性能を監視して測定する。別の実施形態では、監視サービス198および/または監視エージェント197は、クライアント/サーバアプリケーションの性能を監視して測定する。
一実施形態では、監視サービス198および/または監視エージェント197は、アプリケーション配信システム190のためのアプリケーション性能管理を提供するように設計および構築される。例えば、監視サービス198および/または監視エージェント197は、Citrixプレゼンテーションサーバを介して、アプリケーションの配信の性能を監視、測定、および管理してもよい。本実施例では、監視サービス198および/または監視エージェント197は、個々のICAセッションを監視する。監視サービス198および/または監視エージェント197は、合計およびセッション毎のシステムリソース使用料、およびアプリケーションおよびネットワーキング性能を測定してもよい。監視サービス198および/または監視エージェント197は、所与のユーザおよび/またはユーザセッションのためのアクティブなサーバを識別してもよい。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、アプリケーション配信システム190とアプリケーションおよび/またはデータベースサーバとの間のバックエンド接続を監視する。監視サービス198および/または監視エージェント197は、ユーザセッションまたはICAセッションあたりのネットワーク待ち時間、遅延、および量を測定してもよい。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、ユーザセッションあたりおよび/またはプロセスあたりの総メモリ使用量等のアプリケーション配信システム190のためのメモリ使用量を測定して監視する。他の実施形態では、監視サービス198および/または監視エージェント197は、ユーザセッションあたりおよび/またはプロセスあたりの総CPU使用量等のアプリケーション配信システム190のCPU使用量を測定して監視する。別の実施形態では、監視サービス198および/または監視エージェント197は、Citrixプレゼンテーションサーバ等のアプリケーション、サーバ、またはアプリケーション配信システムにログインするために要求される時間を測定して監視する。一実施形態では、監視サービス198および/または監視エージェント197は、ユーザがアプリケーション、サーバ、またはアプリケーション配信システム190にログインされている持続時間を測定して監視する。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、アプリケーション、サーバ、またはアプリケーション配信システムセッションのためのアクティブおよび非アクティブなセッションカウントを測定して監視する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、ユーザセッション待ち時間を測定して監視する。
その上さらなる実施形態では、監視サービス198および/または監視エージェント197は、任意のタイプおよび形態のサーバメトリックを測定して監視する。一実施形態では、監視サービス198および/または監視エージェント197は、システムメモリ、CPU使用量、およびディスク記憶装置に関連するメトリックを測定して監視する。別の実施形態では、監視サービス198および/または監視エージェント197は、1秒あたりのページフォールト等のページフォールトに関連するメトリックを測定して監視する。他の実施形態では、監視サービス198および/または監視エージェント197は、ラウンドトリップタイムメトリックを測定して監視する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、アプリケーションクラッシュ、エラー、および/またはハングアップに関連するメトリックを測定して監視する。
いくつかの実施形態では、監視サービス198および監視エージェント198は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製のEdgeSightと称される製品実施形態のうちのいずれかを含む。別の実施形態では、性能監視サービス198および/または監視エージェント198は、Symphoniq Corporation(PaloAlto, California)製のTrueView製品スイートと称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス198および/または監視エージェント198は、TeaLeaf Technology Inc.(San Francisco, California)製のTeaLeafCX製品スイートと称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス198および/または監視エージェント198は、BMC Software,Inc.(Houston, Texas)製のBMC性能マネージャおよびパトロール製品等のビジネスサービス管理製品の任意の部分を含む。
クライアント102、サーバ106、およびアプライアンス200は、任意のタイプおよび形態のネットワーク上で通信し、本明細書に説明される動作を行うことが可能なコンピュータ、ネットワークデバイス、またはアプライアンス等の任意のタイプおよび形態のコンピューティングデバイスとして展開され、および/またはその上で実行されてもよい。図1Eおよび1Fは、クライアント102、サーバ106、またはアプライアンス200の実施形態を実践するために有用なコンピューティングデバイス100のブロック図を描写する。図1Eおよび1Fに示されるように、各コンピューティングデバイス100は、中央処理ユニット101と、主要メモリユニット122とを含む。図1Eに示されるように、コンピューティングデバイス100は、視覚表示デバイス124、キーボード126、および/またはマウス等のポインティングデバイス127を含んでもよい。各コンピューティングデバイス100はまた、1つまたはそれを上回る入出力デバイス130a−130b(概して、参照数字130を使用して参照される)および中央処理ユニット101と通信するキャッシュメモリ140等の付加的な随意の要素を含んでもよい。
中央処理ユニット101は、主要メモリユニット122からフェッチされた命令に応答し、それらを処理する、任意の論理回路である。多くの実施形態では、中央処理ユニットは、Intel Corporation(Mountain View, California)製のもの、Motorola Corporation(Schaumburg, Illinois)製のもの、Transmeta Corporation(SantaClara, California)製のもの、RS/6000プロセッサ、International Business Machines(White Plains, New York)製のもの、またはAdvanced Micro Devices(Sunnyvale, California)製のもの等のマイクロプロセッサユニットによって提供される。コンピューティングデバイス100は、これらのプロセッサのうちのいずれか、または本明細書に説明されるように動作することが可能な任意の他のプロセッサに基づいてもよい。
主要メモリユニット122は、スタティックランダムアクセスメモリ(SRAM)、バーストSRAMまたは同期バーストSRAM(BSRAM)、ダイナミックランダムアクセスメモリ(DRAM)、高速ページモードDRAM(FPM DRAM)、強化DRAM(EDRAM)、拡張データ出力RAM(EDO RAM)、拡張データ出力DRAM(EDO DRAM)、バースト拡張データ出力DRAM(BEDO DRAM)、強化DRAM(EDRAM)、同期DRAM(SDRAM)、JEDEC SRAM、PC100 SDRAM、ダブルデータレートSDRAM(DDR SDRAM)、強化SDRAM(ESDRAM)、SyncLink DRAM(SLDRAM)、Direct RambusDRAM(DRDRAM)、または強誘電体RAM(FRAM(登録商標))等のデータを記憶することが可能であり、任意の記憶場所がマイクロプロセッサ101によって直接アクセスすることを可能にする、1つまたはそれを上回るメモリチップであってもよい。主要メモリ122は、上記のメモリチップのうちのいずれか、または本明細書に説明されるように動作することが可能である任意の他の利用可能なメモリチップに基づいてもよい。図1Eに示される実施形態では、プロセッサ101は、システムバス150を介して主要メモリ122と通信する(以下でさらに詳細に説明される)。図1Fは、プロセッサがメモリポート103を介して主要メモリ122と直接通信する、コンピューティングデバイス100の実施形態を描写する。例えば、図1Fでは、主要メモリ122は、DRDRAMであってもよい。
図1Fは、主要プロセッサ101が、時として、バックサイドバスと称されることもある二次バスを介して、キャッシュメモリ140と直接通信する、実施形態を描写する。他の実施形態では、主要プロセッサ101は、システムバス150を使用してキャッシュメモリ140と通信する。キャッシュメモリ140は、典型的には、主要メモリ122よりも速い応答時間を有し、典型的には、SRAM、BSRAM、またはEDRAMによって提供される。図1Fに示される実施形態では、プロセッサ101は、ローカルシステムバス150を介して種々のI/Oデバイス130と通信する。中央処理ユニット101をI/Oデバイス130のうちのいずれかに接続するために、VESA VLバス、ISAバス、EISAバス、MicroChannel Architecture(MCA)バス、PCIバス、PCI−Xバス、PCI−Expressバス、またはNuBusを含む、種々のバスが使用されてもよい。I/Oデバイスがビデオディスプレイ124である実施形態に関して、プロセッサ101は、ディスプレイ124と通信するためにAdvanced Graphics Port(AGP)を使用してもよい。図1Fは、主要プロセッサ101が、HyperTransport、Rapid I/O、またはInfiniBandを介してI/Oデバイス130bと直接通信する、コンピュータ100の実施形態を描写する。図1Fはまた、ローカルバスおよび直接通信が混合される、実施形態も描写し、プロセッサ101は、I/Oデバイス130aと直接通信しながら、ローカル相互接続バスを使用してI/Oデバイス130bと通信する。
コンピューティングデバイス100は、3.5インチ、5.25インチディスク、またはZIPディスク等のフロッピー(登録商標)ディスクを受容するためのフロッピー(登録商標)ディスクドライブ、CD−ROMドライブ、CD−R/RWドライブ、DVD−ROMドライブ、種々の形式のテープドライブ、USBデバイス、ハードドライブ、またはソフトウェアおよび任意のクライアントエージェント120またはその一部等のプログラムをインストールするために好適な任意の他のデバイス等の任意の好適なインストールデバイス116をサポートしてもよい。コンピューティングデバイス100はさらに、オペレーティングシステムおよび他の関連ソフトウェアを記憶するため、およびクライアントエージェント120に関連する任意のプログラム等のアプリケーションソフトウェアプログラムを記憶するために、1つまたはそれを上回るハードディスクドライブまたは独立ディスクの冗長アレイ等の記憶デバイス128を備えてもよい。随意に、インストールデバイス116のうちのいずれかはまた、記憶デバイス128としても使用され得る。加えて、オペレーティングシステムおよびソフトウェアは、ブート可能媒体、例えば、knoppix.netからのGNU/Linux(登録商標)配布として入手可能であるGNU/Linux(登録商標)用のブート可能CDである、KNOPPIX(R)等のブート可能CDから起動されることができる。
さらに、コンピューティングデバイス100は、標準電話回線、LANまたはWANリンク(例えば、802.11、T1、T3、56kb、X.25)、ブロードバンド接続(例えば、ISDN、フレームリレー、ATM、)、無線接続、または上記のうちのいずれかまたは全てのある組み合わせを含むが、それらに限定されない、種々の接続を通して、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、またはインターネットにインターフェース接続するように、ネットワークインターフェース118を含んでもよい。ネットワークインターフェース118は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、PCMCIAネットワークカード、カードバスネットワークアダプタ、無線ネットワークアダプタ、USBネットワークアダプタ、モデム、または通信が可能であり、本明細書に説明される動作を行う、任意のタイプのネットワークにコンピューティングデバイス100をインターフェース接続するために好適な任意の他のデバイスを備えてもよい。
多種多様なI/Oデバイス130a−130nが、コンピューティングデバイス100の中に存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、ドローイングタブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および染料昇華プリンタを含む。I/Oデバイス130は、図1Eに示されるようにI/Oコントローラ123によって制御されてもよい。I/Oコントローラは、キーボード126およびポインティングデバイス127、例えば、マウスまたは光学ペン等の1つまたはそれを上回るI/Oデバイスを制御してもよい。さらに、I/Oデバイスはまた、コンピューティングデバイス100用の記憶装置128および/またはインストール媒体116を提供してもよい。なおも他の実施形態では、コンピューティングデバイス100は、Twintech Industry, Inc.(Los Alamitos, California)製のUSBフラッシュドライブ系列のデバイス等のハンドヘルドUSB記憶デバイスを受容するUSB接続を提供してもよい。
いくつかの実施形態では、コンピューティングデバイス100は、それぞれ、同一または異なるタイプおよび/または形態であり得る、複数の表示デバイス124a−124nを備える、またはそれらに接続されてもよい。したがって、I/Oデバイス130a−130nおよび/またはI/Oコントローラ123のうちのいずれかは、コンピューティングデバイス100による複数の表示デバイス124a−124nの接続および使用をサポートする、有効にする、または提供するように、任意のタイプおよび/または形態の好適なハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを備えてもよい。例えば、コンピューティングデバイス100は、表示デバイス124a−124nをインターフェース接続する、通信する、接続する、または別様に使用するように、任意のタイプおよび/または形態のビデオアダプタ、ビデオカード、ドライバ、および/またはライブラリを含んでもよい。一実施形態では、ビデオアダプタは、複数の表示デバイス124a−124nにインターフェース接続するように、複数のコネクタを備えてもよい。他の実施形態では、コンピューティングデバイス100は、複数のビデオアダプタを含んでもよく、各ビデオアダプタは、表示デバイス124a−124nのうちの1つまたはそれを上回るものに接続される。いくつかの実施形態では、コンピューティングデバイス100のオペレーティングシステムの任意の部分が、複数の表示デバイス124a−124nを使用するために構成されてもよい。他の実施形態では、表示デバイス124a−124nのうちの1つまたはそれを上回るものは、例えば、ネットワークを介して、コンピューティングデバイス100に接続されるコンピューティングデバイス100aおよび100b等の1つまたはそれを上回る他のコンピューティングデバイスによって提供されてもよい。これらの実施形態は、コンピューティングデバイス100用の第2の表示デバイス124aとして別のコンピュータの表示デバイスを使用するように設計および構築される、任意のタイプのソフトウェアを含んでもよい。当業者は、コンピューティングデバイス100が複数の表示デバイス124a−124nを有するように構成されてもよい、種々の方法および実施形態を認識して理解するであろう。
さらなる実施形態では、I/Oデバイス130は、システムバス150と、USBバス、Appleデスクトップバス、RS−232シリアル接続、SCSIバス、FireWireバス、FireWire800バス、イーサネット(登録商標)バス、AppleTalkバス、ギガビットイーサネット(登録商標)バス、非同期転送モードバス、HIPPIバス、スーパーHIPPIバス、SerialPlusバス、SCI/LAMPバス、FibreChannelバス、またはシリアルアタッチド小型コンピュータシステムインターフェースバス等の外部通信バスとの間のブリッジ170であってもよい。
図1Eおよび1Fで描写される種類のコンピューティングデバイス100は、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。コンピューティングデバイス100は、Microsoft(登録商標)Windows(登録商標)オペレーティングシステムのバージョンのうちのいずれか、Unix(登録商標)およびLinux(登録商標)オペレーティングシステムの異なるリリース、Macintoshコンピュータ用のMac OS(R)の任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、またはコンピューティングデバイス上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。典型的なオペレーティングシステムは、とりわけ、全てMicrosoft Corporation(Redmond, Washington)製である、WINDOWS(登録商標)3.x、WINDOWS95、WINDOWS98、WINDOWS2000、WINDOWS NT3.51、WINDOWS NT4.0、WINDOWS CE、およびWINDOWS XP、Apple Computer(Cupertino, California)製のMacOS、International Business Machines(Armonk, New York)製のOS/2、およびCaldera Corp.(Salt LakeCity, Utah)によって配布される無料で入手可能なオペレーティングシステムであるLinux(登録商標)、または任意のタイプおよび/または形態のUNIX(登録商標)オペレーティングシステムを含む。
他の実施形態では、コンピューティングデバイス100は、デバイスと一致する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ100は、Palm,Inc製のTreo180、270、1060、600、または650スマートフォンである。本実施形態では、Treoスマートフォンは、PalmOSオペレーティングシステムの制御下で動作され、スタイラス入力デバイスおよび5方向ナビゲータデバイスを含む。また、コンピューティングデバイス100は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または通信が可能であり、本明細書に説明される動作を行うために十分なプロセッサ能力およびメモリ容量を有する、他の形態のコンピューティングまたは電気通信デバイスであることができる。
図1Gに示されるように、コンピューティングデバイス100は、複数のプロセッサを備えてもよく、命令の同時実行のため、または1つよりも多くのデータについての1つの命令の同時実行のための機能性を提供してもよい。いくつかの実施形態では、コンピューティングデバイス100は、1つまたはそれを上回るコアを伴う並列プロセッサを備えてもよい。これらの実施形態のうちの1つでは、コンピューティングデバイス100は、単一のグローバルアドレス空間としての全ての利用可能なメモリにアクセスする、複数のプロセッサおよび/または複数のプロセッサコアを伴う共有メモリ並列デバイスである。これらの実施形態のうちの別のものでは、コンピューティングデバイス100は、それぞれローカルメモリのみにアクセスする、複数のプロセッサを伴う分散型メモリ並列デバイスである。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス100は、共有される、あるメモリと、特定のプロセッサまたはプロセッサのサブセットのみによってアクセスされることができる、あるメモリとの両方を有する。これらの実施形態のうちのなおもさらに別のものでは、マルチコアマイクロプロセッサ等のコンピューティングデバイス100は、2つまたはそれを上回る独立プロセッサを、単一のパッケージ、多くの場合、単一の集積回路(IC)に合体させる。これらの実施形態のうちのさらに別のものでは、コンピューティングデバイス100は、CELL BROADBAND ENGINEアーキテクチャを有し、Powerプロセッサ要素と、複数の相乗的処理要素とを含む、チップを含み、Powerプロセッサ要素および複数の相乗的処理要素は、要素相互接続バスと称され得る、内部高速バスによってともに連結される。
いくつかの実施形態では、プロセッサは、複数のデータについての単一の命令を同時に実行するための機能性(SIMD)を提供する。他の実施形態では、プロセッサは、複数のデータについての複数の命令を同時に実行するための機能性(MIMD)を提供する。なおも他の実施形態では、プロセッサは、単一のデバイスでSIMDおよびMIMDコアの任意の組み合わせを使用してもよい。
いくつかの実施形態では、コンピューティングデバイス100は、グラフィックス処理ユニットを備えてもよい。図1Hで描写される、これらの実施形態のうちの1つでは、コンピューティングデバイス100は、少なくとも1つの中央処理ユニット101と、少なくとも1つのグラフィックス処理ユニットとを含む。これらの実施形態のうちの別のものでは、コンピューティングデバイス100は、少なくとも1つの並列処理ユニットと、少なくとも1つのグラフィックス処理ユニットとを含む。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス100は、任意のタイプの複数の処理ユニットを含み、複数の処理ユニットのうちの1つは、グラフィックス処理ユニットを備える。
いくつかの実施形態では、第1のコンピューティングデバイス100aは、クライアントコンピューティングデバイス100bのユーザの代わりにアプリケーションを実行する。他の実施形態では、コンピューティングデバイス100aは、アプリケーションがユーザまたはクライアントコンピューティングデバイス100bの代わりに実行する、実行セッションを提供する、仮想マシンを実行する。これらの実施形態のうちの1つでは、実行セッションは、ホスト型デスクトップセッションである。これらの実施形態のうちの別のものでは、コンピューティングデバイス100は、端末サービスセッションを実行する。端末サービスセッションは、ホスト型デスクトップ環境を提供してもよい。これらの実施形態のうちのなおも別のものでは、実行セッションは、アプリケーション、複数のアプリケーション、デスクトップアプリケーション、および1つまたはそれを上回るアプリケーションが実行し得るデスクトップセッションのうちの1つまたはそれを上回るものを備え得る、コンピュータ環境へのアクセスを提供する。
B.アプライアンスアーキテクチャ
図2Aは、アプライアンス200の例示的実施形態を図示する。図2Aのアプライアンス200のアーキテクチャは、例証のみとして提供され、限定的であることを意図していない。図2に示されるように、アプライアンス200は、ハードウェア層206と、ユーザ空間202およびカーネル空間204に分割されるソフトウェア層とを備える。
ハードウェア層206は、カーネル空間204およびユーザ空間202内のプログラムおよびサービスが実行される、ハードウェア要素を提供する。ハードウェア層206はまた、カーネル空間204およびユーザ空間202内のプログラムおよびサービスがアプライアンス200に対して内部および外部の両方でデータを通信することを可能にする、構造および要素も提供する。図2に示されるように、ハードウェア層206は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット262と、ソフトウェアおよびデータを記憶するためのメモリ264と、ネットワークを経由してデータを伝送および受信するためのネットワークポート266と、ネットワークを経由して伝送および受信されるデータのセキュアなソケット層処理に関連する機能を果たすための暗号化プロセッサ260とを含む。いくつかの実施形態では、中央処理ユニット262は、単一のプロセッサにおいて暗号化プロセッサ260の機能を果たしてもよい。加えて、ハードウェア層206は、処理ユニット262および暗号化プロセッサ260のそれぞれのための複数のプロセッサを備えてもよい。プロセッサ262は、図1Eおよび1Fに関連して上記で説明されるプロセッサ101のうちのいずれかを含んでもよい。例えば、一実施形態では、アプライアンス200は、第1のプロセッサ262と、第2のプロセッサ262’とを備える。他の実施形態では、プロセッサ262または262’は、マルチコアプロセッサを備える。
アプライアンス200のハードウェア層206は、概して、暗号化プロセッサ260とともに図示されるが、プロセッサ260は、セキュアソケットレイヤ(SSL)またはトランスポート層セキュリティ(TLS)プロトコル等の任意の暗号化プロトコルに関連する機能を果たすためのプロセッサであってもよい。いくつかの実施形態では、プロセッサ260は、汎用プロセッサ(GPP)であってもよく、さらなる実施形態では、任意のセキュリティ関連プロトコルの処理を行うための実行可能命令を有してもよい。
アプライアンス200のハードウェア層206は、図2のある要素とともに図示されるが、アプライアンス200のハードウェア部分またはコンポーネントは、図1Eおよび1Fと併せて本明細書に図示および議論されるコンピューティングデバイス100等のコンピューティングデバイスの任意のタイプおよび形態の要素、ハードウェア、またはソフトウェアを備えてもよい。いくつかの実施形態では、アプライアンス200は、サーバ、ゲートウェイ、ルータ、スイッチ、ブリッジ、または他のタイプのコンピューティングまたはネットワークデバイスを備え、それと関連付けられる任意のハードウェアおよび/またはソフトウェア要素を有してもよい。
アプライアンス200のオペレーティングシステムは、利用可能なシステムメモリをカーネル空間204およびユーザ空間204の中へ配分、管理、または別様に分離する。例示的ソフトウェアアーキテクチャ200では、オペレーティングシステムは、任意のタイプおよび/または形態のUnix(登録商標)オペレーティングシステムであってもよいが、本発明は、そのように限定されない。したがって、アプライアンス200は、Microsoft(登録商標)Windows(登録商標)オペレーティングシステムのバージョンのうちのいずれか、UNIX(登録商標)およびLinux(登録商標)オペレーティングシステムの異なるリリース、Macintoshコンピュータ用のMac OS(R)の任意のバージョン、任意の組み込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、またはアプライアンス200上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。
カーネル空間204は、任意のデバイスドライバ、カーネル拡張、または他のカーネル関連ソフトウェアを含む、カーネル230を起動するために留保される。当業者に公知であるように、カーネル230は、オペレーティングシステムのコアであり、アプリケーション104のリソースおよびハードウェア関連要素のアクセス、制御、および管理を提供する。アプライアンス200の実施形態によると、カーネル空間204はまた、その利益が本明細書でさらに詳細に説明される、時として、統合キャッシュと称されることもある、キャッシュマネージャ232と連動して作動するいくつかのネットワークサービスまたはプロセスも含む。加えて、カーネル230の実施形態は、デバイス200によってインストール、構成、または別様に使用されるオペレーティングシステムの実施形態に依存するであろう。
一実施形態では、デバイス200は、クライアント102および/またはサーバ106と通信するために、TCP/IPベースのスタック等の1つのネットワークスタック267を備える。一実施形態では、ネットワークスタック267は、ネットワーク108等の第1のネットワークおよび第2のネットワーク110と通信するために使用される。いくつかの実施形態では、デバイス200は、クライアント102のTCP接続等の第1のトランスポート層接続を終了させ、クライアント102によって使用するためにサーバ106への第2のトランスポート層接続を確立し、例えば、第2のトランスポート層接続は、アプライアンス200およびサーバ106において終了される。第1および第2のトランスポート層接続は、単一のネットワークスタック267を介して接続されてもよい。他の実施形態では、デバイス200は、複数のネットワークスタック、例えば、267および267’を備えてもよく、第1のトランスポート層接続は、1つのネットワークスタック267において、第2のトランスポート層接続は、第2のネットワークスタック267上で、確立または終了されてもよい。例えば、1つのネットワークスタックは、第1のネットワーク上でネットワークパケットを受信および伝送するため、別のネットワークスタックは、第2のネットワーク上でネットワークパケットを受信および伝送するためのものであってもよい。一実施形態では、ネットワークスタック267は、アプライアンス200による伝送のために1つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファ243を備える。
図2に示されるように、カーネル空間204は、キャッシュマネージャ232と、高速層2−7統合パケットエンジン240と、暗号化エンジン234と、ポリシエンジン236と、マルチプロトコル圧縮論理238とを含む。ユーザ空間202の代わりに、カーネル空間204またはカーネルモードでこれらのコンポーネントまたはプロセス232、240、234、236、および238を起動することは、単独で、および組み合わせて、これらのコンポーネントのそれぞれの性能を改良する。カーネル動作は、これらのコンポーネントまたはプロセス232、240、234、236、および238が、デバイス200のオペレーティングシステムのコアアドレス空間内で起動することを意味する。例えば、カーネルモードで暗号化エンジン234を起動することは、暗号化および暗号解読動作をカーネルに移動させ、それによって、カーネルモードにおけるメモリ空間またはカーネルスレッドとユーザモードにおけるメモリ空間またはスレッドとの間の移行の数を削減することによって、暗号化性能を改良する。例えば、カーネルモードで取得されるデータは、カーネルレベルデータ構造からユーザレベルデータ構造まで等、ユーザモードで起動するプロセスまたはスレッドにパスまたはコピーされる必要がなくなり得る。別の側面では、カーネルモードとユーザモードとの間のコンテキスト切替の数も削減される。加えて、コンポーネントまたはプロセス232、240、235、236、および238のうちのいずれかの同期化およびその間の通信が、カーネル空間204内でより効率的に行われることができる。
いくつかの実施形態では、コンポーネント232、240、234、236、および238の任意の部分が、カーネル空間204内で起動または動作してもよい一方で、これらのコンポーネント232、240、234、236、および238の他の部分は、ユーザ空間202内で起動または動作してもよい。一実施形態では、アプライアンス200は、1つまたはそれを上回るネットワークパケットの任意の部分、例えば、クライアント102からの要求またはサーバ106からの応答を備える、ネットワークパケットへのアクセスを提供する、カーネルレベルデータ構造を使用する。いくつかの実施形態では、カーネルレベルデータ構造は、ネットワークスタック267へのトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン240によって取得されてもよい。カーネルレベルデータ構造は、ネットワークスタック267、ネットワークトラフィック、またはネットワークスタック267によって受信または伝送されるパケットに関連するカーネル空間204を介してアクセス可能である、任意のインターフェースおよび/またはデータを備えてもよい。他の実施形態では、カーネルレベルデータ構造は、コンポーネントまたはプロセスの所望の動作を行うために、コンポーネントまたはプロセス232、240、234、236、および238のうちのいずれかによって使用されてもよい。一実施形態では、コンポーネント232、240、234、236、および238が、カーネルレベルデータ構造を使用するときにカーネルモード204で起動している一方で、別の実施形態では、コンポーネント232、240、234、236、および238は、カーネルレベルデータ構造を使用するときにユーザモードで起動している。いくつかの実施形態では、カーネルレベルデータ構造は、第2のカーネルレベルデータ構造または任意の所望のユーザレベルデータ構造にコピーまたはパスされてもよい。
キャッシュマネージャ232は、発信サーバ106によって供給される、オブジェクトまたは動的に生成されたオブジェクト等の任意のタイプおよび形態のコンテンツのキャッシュアクセス、制御、および管理を提供する、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。キャッシュマネージャ232によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、マークアップ言語等の任意の形式である、または任意のプロトコルを介して通信される、データを備えてもよい。いくつかの実施形態では、キャッシュマネージャ232は、元のデータが、キャッシュメモリ要素を読み取ることに対して、フェッチ、計算、または別様に取得するためにより長いアクセス時間を要求し得る、他の場所に記憶された元のデータ、または前もって計算、生成、または伝送されたデータを複製する。いったんデータがキャッシュメモリ要素に記憶されると、元のデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスし、それによって、アクセス時間を短縮することによって、将来の使用が行われることができる。いくつかの実施形態では、キャッシュメモリ要素は、デバイス200のメモリ264の中にデータオブジェクトを備えてもよい。他の実施形態では、キャッシュメモリ要素は、メモリ264よりも速いアクセス時間を有する、メモリを備えてもよい。別の実施形態では、キャッシュメモリ要素は、ハードディスクの一部等のデバイス200の任意のタイプおよび形態の記憶要素を備えてもよい。いくつかの実施形態では、処理ユニット262は、キャッシュマネージャ232によって使用するためのキャッシュメモリを提供してもよい。その上さらなる実施形態では、キャッシュマネージャ232は、データ、オブジェクト、および他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組み合わせを使用してもよい。
さらに、キャッシュマネージャ232は、本明細書に説明されるアプライアンス200の技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。例えば、キャッシュマネージャ232は、無効化時間周期の満了に基づいて、またはクライアント102またはサーバ106からの無効化コマンドの受信に応じて、オブジェクトを無効化する論理または機能性を含む。いくつかの実施形態では、キャッシュマネージャ232は、カーネル空間204内で、他の実施形態では、ユーザ空間202内で実行する、プログラム、サービス、プロセス、またはタスクとして動作してもよい。一実施形態では、キャッシュマネージャ232の第1の部分が、ユーザ空間202内で実行する一方で、第2の部分は、カーネル空間204内で実行する。いくつかの実施形態では、キャッシュマネージャ232は、任意のタイプの汎用プロセッサ(GPP)、またはフィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理デバイス(PLD)、または特定用途向け集積回路(ASIC)等の任意の他のタイプの集積回路を備えることができる。
ポリシエンジン236は、例えば、知的統計エンジンまたは他のプログラマブルアプリケーションを含んでもよい。一実施形態では、ポリシエンジン236は、ユーザがキャッシングポリシを識別、規定、定義、または構成することを可能にする構成機構を提供する。ポリシエンジン236はまた、いくつかの実施形態では、ユーザ選択キャッシングポリシ決定を有効にするように、ルックアップテーブルまたはハッシュテーブル等のデータ構造をサポートするメモリへのアクセスも有する。他の実施形態では、ポリシエンジン236は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス200によって行われる任意の他の機能または動作のアクセス、制御、および管理に加えて、アプライアンス200によってキャッシュされているオブジェクト、データ、またはコンテンツのアクセス、制御、および管理を判定して提供する、任意の論理、ルール、機能、または動作を備えてもよい。具体的キャッシングポリシのさらなる実施例が、本明細書でさらに説明される。
暗号化エンジン234は、SSLまたはTLS等の任意のセキュリティ関連プロトコル、またはそれに関連する任意の機能の処理をハンドリングするための任意の論理、ビジネスルール、機能、または動作を備える。例えば、暗号化エンジン234は、アプライアンス200を介して通信されるネットワークパケットまたはその任意の部分を暗号化および解読する。暗号化エンジン234はまた、クライアント102a−102n、サーバ106a−106n、またはアプライアンス200の代わりにSSLまたはTLS接続を設定または確立してもよい。したがって、暗号化エンジン234は、SSL処理のオフローディングおよび加速を提供する。一実施形態では、暗号化エンジン234は、クライアント102a−102nとサーバ106a−106nとの間に仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。いくつかの実施形態では、暗号化エンジン234は、暗号化プロセッサ260と通信する。他の実施形態では、暗号化エンジン234は、暗号化プロセッサ260上で起動する実行可能命令を備える。
マルチプロトコル圧縮エンジン238は、デバイス200のネットワークスタック267によって使用されるプロトコルのうちのいずれか等のネットワークパケットの1つまたはそれを上回るプロトコルを圧縮するための任意の論理、ビジネスルール、機能、もしく動作を備える。一実施形態では、マルチプロトコル圧縮エンジン238は、クライアント102a−102nとサーバ106a−106nとの間で双方向性に、メッセージングアプリケーションプログラミングインターフェース(MAPI)(Eメール)、ファイル転送プロトコル(FTP)、ハイパーテキスト転送プロトコル(HTTP)、共通インターネットファイルシステム(CIFS)プロトコル(ファイル転送)、独立コンピューティングアーキテクチャ(ICA)プロトコル、遠隔デスクトッププロトコル(RDP)、無線アプリケーションプロトコル(WAP)、モバイルIPプロトコル、およびボイスオーバーIP(VoIP)プロトコルを含む、任意のTCP/IPベースのプロトコルを圧縮する。他の実施形態では、マルチプロトコル圧縮エンジン238は、ハイパーテキストマークアップ言語(HTML)ベースのプロトコルの圧縮を提供し、いくつかの実施形態では、拡張マークアップ言語(XML)等の任意のマークアップ言語の圧縮を提供する。一実施形態では、マルチプロトコル圧縮エンジン238は、アプライアンス200間通信のために設計される任意のプロトコル等の任意の高性能プロトコルの圧縮を提供する。別の実施形態では、マルチプロトコル圧縮エンジン238は、トランザクションTCP(T/TCP)、選択確認応答を伴うTCP(TCP−SACK)、大型ウィンドウを伴うTCP(TCP−LW)、TCP−Vegasプロトコル等の輻輳予測プロトコル、およびTCPスプーフィングプロトコル等の修正されたトランスポート制御プロトコルを使用して、任意の通信の任意のペイロードまたは任意の通信を圧縮する。
したがって、マルチプロトコル圧縮エンジン238は、デスクトップクライアント、例えば、Oracle、SAP、およびSiebelのような頻用されている企業アプリケーションによって起動される任意のクライアント等のMicrosoft Outlookおよび非ウェブシンクライアント、およびPocket PC等のモバイルクライアントさえも介して、アプリケーションにアクセスするユーザのために性能を加速する。いくつかの実施形態では、マルチプロトコル圧縮エンジン238は、カーネルモード204内で実行し、ネットワークスタック267にアクセスするパケット処理エンジン240と統合することによって、任意のアプリケーション層プロトコル等のTCP/IPプロトコルによって搬送されるプロトコルのうちのいずれかを圧縮することができる。
概して、パケット処理エンジンまたはパケットエンジンとも称される、高速層2−7統合パケットエンジン240は、ネットワークポート266を介してアプライアンス200によって受信および伝送されるパケットのカーネルレベル処理を管理する責任がある。高速層2−7統合パケットエンジン240は、ネットワークパケットの受信またはネットワークパケットの伝送のため等、処理中に1つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファを備えてもよい。加えて、高速層2−7統合パケットエンジン240は、ネットワークポート266を介してネットワークパケットを送信および受信するように、1つまたはそれを上回るネットワークスタック267と通信する。高速層2−7統合パケットエンジン240は、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮論理238と連動して作動する。具体的には、暗号化エンジン234は、パケットのSSL処理を行うように構成され、ポリシエンジン236は、要求レベルコンテンツ切替および要求レベルキャッシュリダイレクト等のトラフィック管理に関連する機能を果たすように構成され、マルチプロトコル圧縮論理238は、データの圧縮および解凍に関連する機能を果たすように構成される。
高速層2−7統合パケットエンジン240は、パケット処理タイマ242を含む。一実施形態では、パケット処理タイマ242は、着信、すなわち、受信された、または発信、すなわち、伝送されたネットワークパケットの処理をトリガするように、1つまたはそれを上回る時間間隔を提供する。いくつかの実施形態では、高速層2−7統合パケットエンジン240は、タイマ242に応答してネットワークパケットを処理する。パケット処理タイマ242は、時間関連イベント、間隔、または発生を通知、トリガ、または通信するように、任意のタイプおよび形態の信号をパケットエンジン240に提供する。多くの実施形態では、パケット処理タイマ242は、例えば、100ミリ秒、50ミリ秒、または25ミリ秒等、ミリ秒のオーダーで動作する。例えば、いくつかの実施形態では、パケット処理タイマ242が、時間間隔を提供する、または別様にネットワークパケットを10ミリ秒時間間隔で高速層2−7統合パケットエンジン240によって処理させる一方で、他の実施形態では、5ミリ秒時間間隔で、依然としてさらに、さらなる実施形態では、3、2、または1ミリ秒ほどの短さの時間間隔で処理させる。高速層2−7統合パケットエンジン240は、動作中に暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮エンジン238とインターフェースをとられ、統合され、または通信してもよい。したがって、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮論理238の論理、機能、または動作のうちのいずれかが、パケット処理タイマ242および/またはパケットエンジン240に応答して行われてもよい。したがって、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮論理238の論理、機能、または動作のうちのいずれかは、パケット処理タイマ242を介して提供される時間間隔の粒度で、例えば、10ミリ秒未満またはそれに等しい時間間隔で行われてもよい。例えば、一実施形態では、キャッシュマネージャ232は、高速層2−7統合パケットエンジン240および/またはパケット処理タイマ242に応答して、任意のキャッシュされたオブジェクトの無効化を行ってもよい。別の実施形態では、キャッシュされたオブジェクトの満了または無効化時間は、10ミリ秒毎等のパケット処理タイマ242の時間間隔と同程度の粒度に設定されることができる。
カーネル空間204と対照的に、ユーザ空間202は、別様にユーザモードで起動するユーザモードアプリケーションまたはプログラムによって使用される、オペレーティングシステムのメモリ領域または部分である。ユーザモードアプリケーションは、カーネル空間204に直接アクセスしなくてもよく、カーネルサービスにアクセスするためにサービスコールを使用する。図2に示されるように、アプライアンス200のユーザ空間202は、グラフィカルユーザインターフェース(GUI)210と、コマンドラインインターフェース(CLI)212と、シェルサービス214と、健全性監視プログラム216と、デーモンサービス218とを含む。GUI210およびCLI212は、システム管理者または他のユーザが、アプライアンス200のオペレーティングシステムを介して等、アプライアンス200と相互作用し、その動作を制御することができる、手段を提供する。GUI210またはCLI212は、ユーザ空間202またはカーネル空間204内で起動するコードを備えることができる。GUI210は、任意のタイプおよび形態のグラフィカルユーザインターフェースであってもよく、テキスト、グラフィカルを介して、または別様にブラウザ等の任意のタイプのプログラムまたはアプリケーションによって、提示されてもよい。CLI212は、オペレーティングシステムによって提供されるコマンドライン等の任意のタイプおよび形態のコマンドラインまたはテキストベースのインターフェースであってもよい。例えば、CLI212は、ユーザがオペレーティングシステムと相互作用することを可能にするツールである、シェルを備えてもよい。いくつかの実施形態では、CLI212は、bash、csh、tcsh、またはkshタイプシェルを介して提供されてもよい。シェルサービス214は、GUI210および/またはCLI212を介したユーザによるアプライアンス200またはオペレーティングシステムとの相互作用をサポートする、プログラム、サービス、タスク、プロセス、または実行可能命令を備える。
健全性監視プログラム216は、ネットワークシステムが適切に機能していることと、ユーザがネットワークを経由して要求されたコンテンツを受信することとを監視し、チェックし、報告し、確実にするために使用される。健全性監視プログラム216は、アプライアンス200の任意のアクティビティを監視するための論理、ルール、機能、または動作を提供する、1つまたはそれを上回るプログラム、サービス、タスク、プロセス、または実行可能命令を備える。いくつかの実施形態では、健全性監視プログラム216は、アプライアンス200を介してパスされる任意のネットワークトラフィックを傍受して点検する。他の実施形態では、健全性監視プログラム216は、任意の好適な手段および/または機構によって、以下、すなわち、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、マルチプロトコル圧縮論理238、パケットエンジン240、デーモンサービス218、およびシェルサービス214のうちの1つまたはそれを上回るものとインターフェースをとる。したがって、健全性監視プログラム216は、アプライアンス200の任意の部分の状態、ステータス、または健全性を判定するように、任意のアプリケーションプログラミングインターフェース(API)を呼び出してもよい。例えば、健全性監視プログラム216は、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在起動しているかどうかをチェックするように、周期的基準でステータス問い合わせをpingまたは送信してもよい。別の実施例では、健全性監視プログラム216は、アプライアンス200の任意の部分と任意の条件、ステータス、またはエラーを判定するように、任意のプログラム、プロセス、サービス、またはタスクによって提供される、任意のステータス、エラー、または履歴ログをチェックしてもよい。
デーモンサービス218は、連続的に、またはバックグラウンドで起動し、アプライアンス200によって受信される周期的サービス要求をハンドリングする、プログラムである。いくつかの実施形態では、デーモンサービスは、適宜、別のデーモンサービス218等の他のプログラムまたはプロセスに要求を自動転送してもよい。当業者に公知であるように、デーモンサービス218は、ネットワーク制御等の連続的または周期的なシステム全体の機能を果たすように、または任意の所望のタスクを行うように、無人で起動してもよい。いくつかの実施形態では、1つまたはそれを上回るデーモンサービス218は、ユーザ空間202内で起動する一方、他の実施形態では、1つまたはそれを上回るデーモンサービス218は、カーネル空間内で起動する。
ここで図2Bを参照すると、アプライアンス200の別の実施形態が描写されている。要するに、アプライアンス200は、以下のサービス、機能性、または動作、すなわち、SSL VPNコネクティビティ280、切替/負荷平衡284、ドメイン名サービス解決286、加速288、および1つまたはそれを上回るクライアント102と1つまたはそれを上回るサーバ106との間の通信用のアプリケーションファイアウォール290のうちの1つまたはそれを上回るものを提供する。サーバ106はそれぞれ、1つまたはそれを上回るネットワーク関連サービス270a−270n(サービス270と称される)を提供してもよい。例えば、サーバ106は、httpサービス270を提供してもよい。アプライアンス200は、vサーバ、VIPサーバ、または単にVIP275a−275nと称される(本明細書ではvサーバ275とも称される)、1つまたはそれを上回る仮想サーバまたは仮想インターネットプロトコルサーバを備える。vサーバ275は、アプライアンス200の構成および動作に従って、クライアント102とサーバ106との間の通信を受信、傍受、または別様に処理する。
vサーバ275は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。vサーバ275は、アプライアンス200においてユーザモード202、カーネルモード204、またはそれらの任意の組み合わせで動作する、任意のタイプおよび形態のプログラム、サービス、タスク、プロセス、または実行可能命令を備えてもよい。vサーバ275は、SSL VPN280、切替/負荷平衡284、ドメイン名サービス解決286、加速288、およびアプリケーションファイアウォール290等の本明細書に説明される技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。いくつかの実施形態では、vサーバ275は、サーバ106のサービス270への接続を確立する。サービス275は、アプライアンス200、クライアント102、またはvサーバ275に接続し、それと通信することが可能な任意のプログラム、アプリケーション、プロセス、タスク、または実行可能命令のセットを備えてもよい。例えば、サービス275は、ウェブサーバ、httpサーバ、ftp、Eメール、またはデータベースサーバを備えてもよい。いくつかの実施形態では、サービス270は、Eメール、データベース、または企業アプリケーション等のアプリケーションのための通信をリッスン、受信、および/または送信するためのデーモンプロセスまたはネットワークドライバである。いくつかの実施形態では、サービス270は、具体的IPアドレス、またはIPアドレスおよびポート上で通信してもよい。
いくつかの実施形態では、vサーバ275は、ポリシエンジン236の1つまたはそれを上回るポリシを、クライアント102とサーバ106との間のネットワーク通信に適用する。一実施形態では、ポリシは、vサーバ275と関連付けられる。別の実施形態では、ポリシは、ユーザまたはユーザのグループに基づく。さらに別の実施形態では、ポリシは、大域的であり、1つまたはそれを上回るvサーバ275a−275n、およびアプライアンス200を介して通信する任意のユーザまたはユーザのグループに適用される。いくつかの実施形態では、ポリシエンジンのポリシは、インターネットプロトコルアドレス、ポート、プロトコルタイプ、ヘッダ、またはパケット内のフィールド等の通信の任意のコンテンツ、またはユーザ、ユーザのグループ、vサーバ275、トランスポート層接続、および/またはクライアント102またはサーバ106の識別または属性等の通信のコンテキストに基づいて、ポリシが適用される条件を有する。
他の実施形態では、アプライアンス200は、サーバ106からコンピュータ環境15、アプリケーション、および/またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント102の認証および/または承認を判定するように、ポリシエンジン236と通信する、またはインターフェースをとる。別の実施形態では、アプライアンス200は、アプリケーション配信システム190にコンピュータ環境15、アプリケーション、および/またはデータファイルのうちの1つまたはそれを上回るものを配信させるための遠隔ユーザまたは遠隔クライアント102の認証および/または承認を判定するように、ポリシエンジン236と通信する、またはインターフェースをとる。さらに別の実施形態では、アプライアンス200は、ポリシエンジン236の認証および/または遠隔ユーザまたは遠隔クライアント102の承認に基づいて、VPNまたはSSL VPN接続を確立する。一実施形態では、アプライアンス200は、ポリシエンジン236のポリシに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。例えば、アプライアンス200は、ポリシエンジン236に基づいて、コンピュータ環境15、アプリケーション、またはデータファイルへのアクセスを制御してもよい。
いくつかの実施形態では、vサーバ275は、クライアントエージェント120を介したクライアント102とのTCPまたはUDP接続等のトランスポート層接続を確立する。一実施形態では、vサーバ275は、クライアント102からの通信をリッスンして受信する。他の実施形態では、vサーバ275は、クライアントサーバ106とのTCPまたはUDP接続等のトランスポート層接続を確立する。一実施形態では、vサーバ275は、サーバ106上で起動するサーバ270のインターネットプロトコルアドレスおよびポートへのトランスポート層接続を確立する。別の実施形態では、vサーバ275は、クライアント102への第1のトランスポート層接続をサーバ106への第2のトランスポート層接続と関連付ける。いくつかの実施形態では、vサーバ275は、サーバ106へのトランスポート層接続のプールを確立し、プールされたトランスポート層接続を介してクライアント要求を多重化する。
いくつかの実施形態では、アプライアンス200は、クライアント102とサーバ106との間のSSL VPN接続280を提供する。例えば、第1のネットワーク102上のクライアント102は、第2のネットワーク104’上のサーバ106への接続を確立することを要求する。いくつかの実施形態では、第2のネットワーク104’は、第1のネットワーク104からルーティング可能ではない。他の実施形態では、クライアント102は、公衆ネットワーク104上にあり、サーバ106は、企業ネットワーク等のプライベートネットワーク104’上にある。一実施形態では、クライアントエージェント120は、第1のネットワーク104上のクライアント102の通信を傍受し、通信を暗号化し、第1のトランスポート層接続を介してアプライアンス200に通信を伝送する。アプライアンス200は、第1のネットワーク104上の第1のトランスポート層接続を、第2のネットワーク104上のサーバ106への第2のトランスポート層接続に関連付ける。アプライアンス200は、クライアントエージェント102から傍受された通信を受信し、通信を解読し、第2のトランスポート層接続を介して第2のネットワーク104上のサーバ106に通信を伝送する。第2のトランスポート層接続は、プールされたトランスポート層接続であってもよい。したがって、アプライアンス200は、2つのネットワーク104、104’の間のクライアント102のためのエンドツーエンドセキュアトランスポート層接続を提供する。
一実施形態では、アプライアンス200は、仮想プライベートネットワーク104上のクライアント102のイントラネットインターネットプロトコルまたはIntranetIP282アドレスをホストする。クライアント102は、第1のネットワーク104上のインターネットプロトコル(IP)アドレスおよび/またはホスト名等のローカルネットワーク識別子を有する。アプライアンス200を介して第2のネットワーク104’に接続されたとき、アプライアンス200は、第2のネットワーク104’上のクライアント102のIPアドレスおよび/またはホスト名等のネットワーク識別子である、IntranetIPアドレス282を確立する、割り当てる、または別様に提供する。アプライアンス200は、クライアントの確立されたIntranetIP282を使用して、クライアント102に向かってダイレクトされる任意の通信のための第2またはプライベートネットワーク104’をリッスンし、その上で受信する。一実施形態では、アプライアンス200は、第2のプライベートネットワーク104上のクライアント102として、またはその代わりに作用する。例えば、別の実施形態では、vサーバ275は、クライアント102のIntranetIP282への通信をリッスンし、それに応答する。いくつかの実施形態では、第2のネットワーク104’上のコンピューティングデバイス100が要求を伝送する場合、アプライアンス200は、それがクライアント102であるかのように要求を処理する。例えば、アプライアンス200は、クライアントのIntranetIP282へのpingに応答してもよい。別の実施例では、アプライアンスは、クライアントのIntranetIP282との接続を要求する、第2のネットワーク104上のコンピューティングデバイス100とのTCPまたはUDP接続等の接続を確立してもよい。
いくつかの実施形態では、アプライアンス200は、以下の加速技法288のうちの1つまたはそれを上回るもの、すなわち、1)圧縮、2)解凍、3)伝送制御プロトコルプーリング、4)伝送制御プロトコル多重化、5)伝送制御プロトコルバッファリング、および6)キャッシングを、クライアント102とサーバ106との間の通信に提供する。
一実施形態では、アプライアンス200は、各サーバ106との1つまたはそれを上回るトランスポート層接続を開放し、インターネットを介したクライアントによる反復データアクセスを可能にするように、これらの接続を維持することによって、クライアント102へのトランスポート層接続を繰り返し開放および閉鎖することによって引き起こされる処理負荷の多くからサーバ106を解放する。本技法は、本明細書では「接続プーリング」と称される。
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント102からサーバ106への通信をシームレスに接合するために、アプライアンス200は、トランスポート層プロトコルレベルでシーケンス番号および確認応答番号を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、インバウンドパケット(すなわち、クライアント102から受信されるパケット)の場合、パケットのソースネットワークアドレスは、アプライアンス200の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。アウトバウンドパケット(すなわち、サーバ106から受信されるもの)の場合、ソースネットワークアドレスは、サーバ106のものからアプライアンス200の出力ポートのものに変更され、宛先アドレスは、アプライアンス200のものから要求側クライアント102のものに変更される。パケットのシーケンス番号および確認応答番号はまた、アプライアンス200のクライアント102へのトランスポート層接続上でクライアント102によって予期されるシーケンス番号および確認応答番号に変換される。いくつかの実施形態では、トランスポート層プロトコルのパケットチェックサムが、これらの変換を考慮するように再計算される。
別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の通信のための切替または負荷平衡機能性284を提供する。いくつかの実施形態では、アプライアンス200は、トラフィックを配布し、層4またはアプリケーション層要求データに基づいてクライアント要求をサーバ106にダイレクトする。一実施形態では、ネットワークパケットのネットワーク層または層2が宛先サーバ106を識別するが、アプライアンス200は、トランスポート層パケットのペイロードとして搬送されるアプリケーション情報およびデータによってネットワークパケットを分配するサーバ106を判定する。一実施形態では、アプライアンス200の健全性監視プログラム216は、クライアントの要求を分配するサーバ106を判定するように、サーバの健全性を監視する。いくつかの実施形態では、アプライアンス200が、サーバ106が利用可能ではない、または所定の閾値を上回る負荷を有することを検出する場合、アプライアンス200は、クライアント要求を別のサーバ106にダイレクトまたは分配することができる。
いくつかの実施形態では、アプライアンス200は、ドメイン名サービス(DNS)リゾルバとして作用する、または別様にクライアント102からのDNS要求の解決を提供する。いくつかの実施形態では、アプライアンスは、クライアント102によって伝送されるDNS要求を傍受する。一実施形態では、アプライアンス200は、アプライアンス200またはそれによってホストされるIPアドレスを用いて、クライアントのDNS要求に応答する。本実施形態では、クライアント102は、ドメイン名のためのネットワーク通信をアプライアンス200に伝送する。別の実施形態では、アプライアンス200は、第2のアプライアンス200’またはそれによってホストされるIPアドレスを用いて、クライアントのDNS要求に応答する。いくつかの実施形態では、アプライアンス200は、アプライアンス200によって判定されるサーバ106のIPアドレスを用いて、クライアントのDNS要求に応答する。
さらに別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の通信のためのアプリケーションファイアウォール機能性290を提供する。一実施形態では、ポリシエンジン236は、違法な要求を検出して遮断するためのルールを提供する。いくつかの実施形態では、アプリケーションファイアウォール290は、サービス妨害(DoS)攻撃から保護する。他の実施形態では、アプライアンスは、アプリケーションベースの攻撃を識別して遮断する傍受された要求のコンテンツを点検する。いくつかの実施形態では、ルール/ポリシエンジン236は、以下のうちの1つまたはそれを上回るもの、すなわち、1)バッファオーバーフロー、2)CGI−BINパラメータ操作、3)フォーム/非表示フィールド操作、4)強制的ブラウジング、5)クッキーまたはセッションポイズニング、6)破損したアクセス制御リスト(ACL)または弱いパスワード、7)クロスサイトスクリプティング(XSS)、8)コマンドインジェクション、9)SQLインジェクション、10)エラートリガ型機密情報漏出、11)暗号化の不安定な使用、12)サーバ不正構成、13)バックドアおよびデバッグオプション、14)ウェブサイト改変、15)プラットフォームまたはオペレーティングシステム脆弱性、および16)ゼロデイ攻撃等の種々のクラスおよびタイプのウェブまたはインターネットベースの脆弱性に対する保護を提供するための1つまたはそれを上回るアプリケーションファイアウォールまたはセキュリティ制御ポリシを備える。ある実施形態では、アプリケーションファイアウォール290は、以下のうちの1つまたはそれを上回るもの、すなわち、1)要求されたフィールドが返される、2)いかなる追加フィールドも許容されない、3)読取専用および非表示フィールド実行、4)ドロップダウンリストおよびラジオボタンフィールド適合性、および5)フォームフィールド最大長実行のためにネットワーク通信を点検または分析する形態でHTMLフォームフィールド保護を提供する。いくつかの実施形態では、アプリケーションファイアウォール290は、クッキーが修正されていないことを確実にする。他の実施形態では、アプリケーションファイアウォール290は、合法なURLを実行することによって強制的ブラウジングから保護する。
なおもさらなる他の実施形態では、アプリケーションファイアウォール290は、ネットワーク通信に含有される任意の極秘情報を保護する。アプリケーションファイアウォール290は、ネットワークパケットの任意のフィールド内の任意の極秘情報を識別するように、エンジン236のルールまたはポリシに従って任意のネットワーク通信を点検または分析してもよい。いくつかの実施形態では、アプリケーションファイアウォール290は、ネットワーク通信内で、クレジットカード番号、パスワード、社会保障番号、氏名、患者コード、連絡先情報、および年齢のうちの1つまたはそれを上回る発生を識別する。ネットワーク通信のエンコードされた部分は、これらの発生または極秘情報を備えてもよい。これらの発生に基づいて、一実施形態では、アプリケーションファイアウォール290は、ネットワーク通信の伝送を防止する等のポリシアクションをネットワーク通信上でとってもよい。別の実施形態では、アプリケーションファイアウォール290は、そのような識別された発生または極秘情報を書き換える、除去する、または別様に隠してもよい。
依然として図2Bを参照すると、アプライアンス200は、図1Dと併せて上記で議論されるような性能監視エージェント197を含んでもよい。一実施形態では、アプライアンス200は、図1Dで描写されるように監視サービス198または監視サーバ106から監視エージェント197を受信する。いくつかの実施形態では、アプライアンス200は、アプライアンス200と通信する任意のクライアントまたはサーバに配信するために、ディスク等の記憶装置の中に監視エージェント197を記憶する。例えば、一実施形態では、アプライアンス200は、トランスポート層接続を確立する要求を受信することに応じて、監視エージェント197をクライアントに伝送する。他の実施形態では、アプライアンス200は、クライアント102とのトランスポート層接続を確立することに応じて、監視エージェント197を伝送する。別の実施形態では、アプライアンス200は、ウェブページの要求を傍受または検出することに応じて、監視エージェント197をクライアントに伝送する。さらに別の実施形態では、アプライアンス200は、監視サーバ198からの要求に応答して、監視エージェント197をクライアントまたはサーバに伝送する。一実施形態では、アプライアンス200は、監視エージェント197を第2のアプライアンス200’またはアプライアンス205に伝送する。
他の実施形態では、アプライアンス200は、監視エージェント197を実行する。一実施形態では、監視エージェント197は、アプライアンス200上で実行する任意のアプリケーション、プログラム、プロセス、サービス、タスク、またはスレッドの性能を測定して監視する。例えば、監視エージェント197は、vサーバ275A−275Nの性能および動作を監視して測定してもよい。別の実施形態では、監視エージェント197は、アプライアンス200の任意のトランスポート層接続の性能を測定して監視する。いくつかの実施形態では、監視エージェント197は、アプライアンス200をトラバースする任意のユーザセッションの性能を測定して監視する。一実施形態では、監視エージェント197は、SSL VPNセッション等のアプライアンス200をトラバースする任意の仮想プライベートネットワーク接続および/またはセッションの性能を測定して監視する。なおもさらなる実施形態では、監視エージェント197は、アプライアンス200のメモリ、CPU、およびディスク使用量および性能を測定して監視する。さらに別の実施形態では、監視エージェント197は、SSLオフローディング、接続プーリングおよび多重化、キャッシング、および圧縮等のアプライアンス200によって行われる任意の加速技法288の性能を測定して監視する。いくつかの実施形態では、監視エージェント197は、アプライアンス200によって行われる任意の負荷平衡および/またはコンテンツ切替284の性能を測定して監視する。他の実施形態では、監視エージェント197は、アプライアンス200によって行われるアプリケーションファイアウォール290保護および処理の性能を測定して監視する。
C.クライアントエージェント
ここで図3を参照すると、クライアントエージェント120の実施形態が描写されている。クライアント102は、ネットワーク104を介してアプライアンス200および/またはサーバ106との通信を確立して交換するためのクライアントエージェント120を含む。要するに、クライアント102は、カーネルモード302およびユーザモード303を伴うオペレーティングシステムと、1つまたはそれを上回る層310a−310bを伴うネットワークスタック310とを有する、コンピューティングデバイス100上で動作する。クライアント102は、1つまたはそれを上回るアプリケーションをインストールしている、および/または実行してもよい。いくつかの実施形態では、1つまたはそれを上回るアプリケーションは、ネットワークスタック310を介してネットワーク104に通信してもよい。ウェブブラウザ等のアプリケーションのうちの1つはまた、第1のプログラム322を含んでもよい。例えば、第1のプログラム322は、いくつかの実施形態では、クライアントエージェント120またはその任意の部分をインストールおよび/または実行するために使用されてもよい。クライアントエージェント120は、1つまたはそれを上回るアプリケーションからのネットワークスタック310からのネットワーク通信を傍受するための傍受機構またはインターセプタ350を含む。
クライアント102のネットワークスタック310は、ネットワークへのコネクティビティおよびネットワークとの通信を提供するための任意のタイプおよび形態のソフトウェア、またはハードウェア、またはそれらの任意の組み合わせを備えてもよい。一実施形態では、ネットワークスタック310は、ネットワークプロトコルスイートのためのソフトウェア実装を備える。ネットワークスタック310は、当業者が認識して理解するようなオープンシステム間相互接続(OSI)通信モデルの任意のネットワーク層等の1つまたはそれを上回るネットワーク層を備えてもよい。したがって、ネットワークスタック310は、OSIモデルの以下の層、すなわち、1)物理リンク層、2)データリンク層、3)ネットワーク層、4)トランスポート層、5)セッション層、6)プレゼンテーション層、および7)アプリケーション層のうちのいずれかのための任意のタイプおよび形態のプロトコルを備えてもよい。一実施形態では、ネットワークスタック310は、概して、TCP/IPと称される、インターネットプロトコル(IP)のネットワーク層プロトコルを経由したトランスポート制御プロトコル(TCP)を備えてもよい。いくつかの実施形態では、TCP/IPプロトコルは、IEEE802.3によって網羅されるこれらのプロトコル等のIEEE広域ネットワーク(WAN)またはローカルエリアネットワーク(LAN)プロトコル群のうちのいずれかを備え得る、イーサネット(登録商標)プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック310は、IEEE802.11および/またはモバイルインターネットプロトコル等の任意のタイプおよび形態の無線プロトコルを備える。
TCP/IPベースのネットワークに照らして、メッセージングアプリケーションプログラミングインターフェース(MAPI)(Eメール)、ファイル転送プロトコル(FTP)、ハイパーテキスト転送プロトコル(HTTP)、共通インターネットファイルシステム(CIFS)プロトコル(ファイル転送)、独立コンピューティングアーキテクチャ(ICA)プロトコル、遠隔デスクトッププロトコル(RDP)、無線アプリケーションプロトコル(WAP)、モバイルIPプロトコル、およびボイスオーバーIP(VoIP)プロトコルを含む、任意のTCP/IPベースのプロトコルが使用されてもよい。別の実施形態では、ネットワークスタック310は、修正されたトランスポート制御プロトコル、例えば、トランザクションTCP(T/TCP)、選択確認応答を伴うTCP(TCP−SACK)、大型ウィンドウを伴うTCP(TCP−LW)、TCP−Vegasプロトコル等の輻輳予測プロトコル、およびTCPスプーフィングプロトコル等の任意のタイプおよび形態のトランスポート制御プロトコルを備える。他の実施形態では、IPを経由したUDP等の任意のタイプおよび形態のユーザデータグラムプロトコル(UDP)が、音声通信またはリアルタイムデータ通信のため等に、ネットワークスタック310によって使用されてもよい。
さらに、ネットワークスタック310は、TCPドライバまたはネットワーク層ドライバ等の1つまたはそれを上回る層をサポートする、1つまたはそれを上回るネットワークドライバを含んでもよい。ネットワークドライバは、コンピューティングデバイス100のオペレーティングシステムの一部として、またはコンピューティングデバイス100の任意のネットワークインターフェースカードまたは他のネットワークアクセスコンポーネントの一部として、含まれてもよい。いくつかの実施形態では、ネットワークスタック310のネットワークドライバのうちのいずれかは、本明細書に説明される技法のうちのいずれかをサポートしてネットワークスタック310のカスタムまたは修正部分を提供するようにカスタマイズ、修正、または適合されてもよい。他の実施形態では、加速プログラム302は、クライアント102のオペレーティングシステムによってインストールまたは別様に提供されるネットワークスタック310とともに、またはそれと連動して動作するように設計および構築される。
ネットワークスタック310は、クライアント102のネットワーク通信に関連する任意の情報およびデータを受信する、取得する、提供する、または別様にそれにアクセスするための任意のタイプおよび形態のインターフェースを備える。一実施形態では、ネットワークスタック310へのインターフェースは、アプリケーションプログラミングインターフェース(API)を備える。インターフェースはまた、任意の機能コール、フッキングおよびフィルタリング機構、イベントまたはコールバック機構、または任意のタイプのインターフェーシング技法を備えてもよい。インターフェースを介したネットワークスタック310は、ネットワークスタック310の機能性または動作に関連するオブジェクト等の任意のタイプおよび形態のデータ構造を受信または提供してもよい。例えば、データ構造は、ネットワークパケットまたは1つまたはそれを上回るネットワークパケットに関連する情報およびデータを備えてもよい。いくつかの実施形態では、データ構造は、トランスポート層のネットワークパケット等のネットワークスタック310のプロトコル層において処理されるネットワークパケットの一部を備える。いくつかの実施形態では、データ構造325が、カーネルレベルデータ構造を備える一方で、他の実施形態では、データ構造325は、ユーザモードデータ構造を備える。カーネルレベルデータ構造は、取得される、またはカーネルモード302で動作するネットワークスタック310の一部に関連するデータ構造、またはカーネルモード302で起動するネットワークドライバまたは他のソフトウェア、またはオペレーティングシステムのカーネルモードで起動または動作するサービス、プロセス、タスク、スレッド、または他の実行可能命令によって取得または受信される任意のデータ構造を備えてもよい。
加えて、ネットワークスタック310のいくつかの部分、例えば、データリンクまたはネットワーク層が、カーネルモード302で実行または動作してもよい一方で、ネットワークスタック310のアプリケーション層等の他の部分は、ユーザモード303で実行または動作する。例えば、ネットワークスタックの第1の部分310aが、アプリケーションへのネットワークスタック310へのユーザモードアクセスを提供してもよい一方で、ネットワークスタック310の第2の部分310aは、ネットワークへのアクセスを提供する。いくつかの実施形態では、ネットワークスタックの第1の部分310aは、層5−7のうちのいずれか等のネットワークスタック310の1つまたはそれを上回る上層を備えてもよい。他の実施形態では、ネットワークスタック310の第2の部分310bは、層1−4のうちのいずれか等の1つまたはそれを上回る下層を備える。ネットワークスタック310の第1の部分310aおよび第2の部分310bはそれぞれ、ユーザモード203、カーネルモード202、またはその組み合わせで、いずれか1つまたはそれを上回るネットワーク層において、またはネットワーク層またはネットワーク層へのインターフェース点の任意の部分、またはユーザモード203およびカーネルモード203の任意の部分またはそこへのインターフェース点において、ネットワークスタック310の任意の部分を備えてもよい。
インターセプタ350は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。一実施形態では、インターセプタ350は、ネットワークスタック310内の任意の点においてネットワーク通信を傍受し、インターセプタ350またはクライアントエージェント120によって所望、管理、または制御される宛先にネットワーク通信をリダイレクトまたは伝送する。例えば、インターセプタ350は、第1のネットワークのネットワークスタック310のネットワーク通信を傍受し、第2のネットワーク104上で伝送するためにネットワーク通信をアプライアンス200に伝送してもよい。いくつかの実施形態では、インターセプタ350は、ネットワークスタック310とインターフェースをとって連動するように構築および設計されるネットワークドライバ等のドライバを備える、任意のタイプのインターセプタ350を備える。いくつかの実施形態では、クライアントエージェント120および/またはインターセプタ350は、トランスポート層において等、ネットワークスタック310の1つまたはそれを上回る層において動作する。一実施形態では、インターセプタ350は、フィルタドライバ、フッキング機構、またはトランスポートドライバインターフェース(TDI)を介して等、ネットワークスタックのトランスポート層にインターフェース接続する任意の形態およびタイプの好適なネットワークドライバインターフェースを備える。いくつかの実施形態では、インターセプタ350は、トランスポート層等の第1のプロトコル層、およびトランスポートプロトコル層の上方の任意の層、例えば、アプリケーションプロトコル層等の別のプロトコル層にインターフェース接続する。一実施形態では、インターセプタ350は、ネットワークドライバインターフェース仕様(NDIS)またはNDISドライバに準拠するドライバを備えてもよい。別の実施形態では、インターセプタ350は、ミニフィルタまたはミニポートドライバを備えてもよい。一実施形態では、インターセプタ350またはその一部は、カーネルモード202で動作する。別の実施形態では、インターセプタ350またはその一部は、ユーザモード203で動作する。いくつかの実施形態では、インターセプタ350の一部が、カーネルモード202で動作する一方で、インターセプタ350の別の部分は、ユーザモード203で動作する。他の実施形態では、クライアントエージェント120は、ユーザモード203で動作するが、カーネルレベルデータ構造225を取得するため等に、インターセプタ350を介して、カーネルモードドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの一部にインターフェース接続する。さらなる実施形態では、インターセプタ350は、アプリケーション等のユーザモードアプリケーションまたはプログラムである。
一実施形態では、インターセプタ350は、任意のトランスポート層接続要求を傍受する。これらの実施形態では、インターセプタ350は、場所のための所望の場所への宛先IPアドレスおよび/またはポート等の宛先情報を設定するように、トランスポート層アプリケーションプログラミングインターフェース(API)コールを実行する。このようにして、インターセプタ350は、インターセプタ350またはクライアントエージェント120によって制御または管理されるIPアドレスおよびポートへのトランスポート層接続を傍受してリダイレクトする。一実施形態では、インターセプタ350は、クライアントエージェント120がリッスンしているクライアント102のローカルIPアドレスおよびポートへの接続のための宛先情報を設定する。例えば、クライアントエージェント120は、リダイレクトされたトランスポート層通信のためのローカルIPアドレスおよびポート上でリッスンするプロキシサービスを備えてもよい。いくつかの実施形態では、次いで、クライアントエージェント120は、リダイレクトされたトランスポート層通信をアプライアンス200に通信する。
いくつかの実施形態では、インターセプタ350は、ドメイン名サービス(DNS)要求を傍受する。一実施形態では、クライアントエージェント120および/またはインターセプタ350は、DNS要求を解決する。別の実施形態では、インターセプタは、DNS解決のために傍受されたDNS要求をアプライアンス200に伝送する。一実施形態では、アプライアンス200は、DNS要求を解決し、DNS応答をクライアントエージェント120に通信する。いくつかの実施形態では、アプライアンス200は、別のアプライアンス200’またはDNSサーバ106を介してDNS要求を解決する。
さらに別の実施形態では、クライアントエージェント120は、2つのエージェント120および120’を備えてもよい。一実施形態では、第1のエージェント120は、ネットワークスタック310のネットワーク層において動作するインターセプタ350を備えてもよい。いくつかの実施形態では、第1のエージェント120は、インターネット制御メッセージプロトコル(ICMP)要求(例えば、pingおよびトレースルート)等のネットワーク層要求を傍受する。他の実施形態では、第2のエージェント120’は、トランスポート層において動作し、トランスポート層通信を傍受してもよい。いくつかの実施形態では、第1のエージェント120は、ネットワークスタック210の1つの層において通信を傍受し、傍受された通信とインターフェースをとる、またはそれを第2のエージェント120’に通信する。
クライアントエージェント120および/またはインターセプタ350は、ネットワークスタック310の任意の他のプロトコル層に対して透過的な様式で、プロトコル層において動作してもよい、またはそれとインターフェースをとってもよい。例えば、一実施形態では、インターセプタ350は、ネットワーク層等のトランスポート層の下方の任意のプロトコル層、およびセッション、プレゼンテーション、またはアプリケーション層プロトコル等のトランスポート層の上方の任意のプロトコル層に対して透過的に、ネットワークスタック310のトランスポート層とともに動作する、またはそれとインターフェースをとる。これは、所望に応じて、かつインターセプタ350を使用するための修正を伴わずに、ネットワークスタック310の他のプロトコル層が動作することを可能にする。したがって、クライアントエージェント120および/またはインターセプタ350は、TCP/IPを経由した任意のアプリケーション層プロトコル等のトランスポート層によって搬送される任意のプロトコルを介して提供される、任意の通信をセキュアにする、最適化する、加速する、ルーティングする、または負荷平衡するように、トランスポート層とインターフェースをとることができる。
さらに、クライアントエージェント120および/またはインターセプタは、任意のアプリケーション、クライアント102のユーザ、およびクライアント102と通信するサーバ等の任意の他のコンピューティングデバイスに対して透過的な様式で、ネットワークスタック310において動作してもよい、またはそれとインターフェースをとってもよい。クライアントエージェント120および/またはインターセプタ350は、アプリケーションの修正を伴わない様式で、クライアント102上にインストールおよび/または実行されてもよい。いくつかの実施形態では、クライアント102のユーザまたはクライアント102と通信するコンピューティングデバイスは、クライアントエージェント120および/またはインターセプタ350の存在、実行、または動作を認識していない。したがって、いくつかの実施形態では、クライアントエージェント120および/またはインターセプタ350は、アプリケーション、クライアント102のユーザ、サーバ等の別のコンピューティングデバイス、またはインターセプタ350によってインターフェース接続されるプロトコル層の上方および/または下方のプロトコル層のうちのいずれかに対して透過的に、インストールされ、実行され、および/または動作される。
クライアントエージェント120は、加速プログラム302、ストリーミングクライアント306、収集エージェント304、および/または監視エージェント197を含む。一実施形態では、クライアントエージェント120は、Citrix Systems, Inc.(Fort Lauderdale, Florida)によって開発された独立コンピューティングアーキテクチャ(ICA)クライアントまたはその一部を備え、ICAクライアントとも称される。いくつかの実施形態では、クライアント120は、サーバ106からクライアント102にアプリケーションをストリーム配信するためのアプリケーションストリーミングクライアント306を備える。いくつかの実施形態では、クライアントエージェント120は、クライアント102とサーバ106との間の通信を加速するための加速プログラム302を備える。別の実施形態では、クライアントエージェント120は、エンドポイント検出を行う/アプライアンス200および/またはサーバ106のためのエンドポイント情報を走査して収集するための収集エージェント304を含む。
いくつかの実施形態では、加速プログラム302は、クライアントのサーバ106との通信および/またはサーバ106によって提供されるアプリケーションにアクセスすること等のサーバ106へのアクセスを加速、強化、または別様に改良するように、1つまたはそれを上回る加速技法を行うためのクライアント側加速プログラムを備える。加速プログラム302の実行可能命令の論理、機能、および/または動作は、以下の加速技法のうちの1つまたはそれを上回るもの、すなわち、1)マルチプロトコル圧縮、2)トランスポート制御プロトコルプーリング、3)トランスポート制御プロトコル多重化、4)トランスポート制御プロトコルバッファリング、および5)キャッシュマネージャを介したキャッシングを行ってもよい。加えて、加速プログラム302は、クライアント102によって受信および/または伝送される任意の通信の暗号化および/または暗号解読を行ってもよい。いくつかの実施形態では、加速プログラム302は、統合様式または方式で加速技法のうちの1つまたはそれを上回るものを行う。加えて、加速プログラム302は、トランスポート層プロトコルのネットワークパケットのペイロードとして搬送される、プロトコルのうちのいずれかまたは複数のプロトコルに圧縮を行うことができる。
ストリーミングクライアント306は、サーバ106からストリーム配信されたアプリケーションを受信して実行するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。サーバ106は、クライアント102上でアプリケーションを再生する、実行する、または別様に実行させられるために、1つまたはそれを上回るアプリケーションデータファイルをストリーミングクライアント306にストリーム配信してもよい。いくつかの実施形態では、サーバ106は、圧縮またはパッケージ化されたアプリケーションデータファイルのセットをストリーミングクライアント306に伝送する。いくつかの実施形態では、複数のアプリケーションファイルは、圧縮され、CAB、ZIP、SIT、TAR、JAR、または他のアーカイブ等のアーカイブファイル内でファイルサーバ上に記憶される。一実施形態では、サーバ106は、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化し、ファイルをクライアント102に伝送する。別の実施形態では、クライアント102が、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化する。ストリーミングクライアント306は、アプリケーションまたはその一部を動的にインストールし、アプリケーションを実行する。一実施形態では、ストリーミングクライアント306は、実行可能プログラムであってもよい。いくつかの実施形態では、ストリーミングクライアント306は、別の実行可能プログラムを起動することが可能であり得る。
収集エージェント304は、クライアント102についての情報を識別、取得、および/または収集するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。いくつかの実施形態では、アプライアンス200は、収集エージェント304をクライアント102またはクライアントエージェント120に伝送する。収集エージェント304は、アプライアンスのポリシエンジン236の1つまたはそれを上回るポリシに従って構成されてもよい。他の実施形態では、収集エージェント304は、クライアント102についての収集された情報をアプライアンス200に伝送する。一実施形態では、アプライアンス200のポリシエンジン236は、クライアントのネットワーク104への接続のアクセス、認証、および承認制御を判定して提供するために、収集された情報を使用する。
一実施形態では、収集エージェント304は、クライアントの1つまたはそれを上回る属性または特性を識別して判定する、エンドポイント検出および走査機構を備える。例えば、収集エージェント304は、以下のクライアント側属性のうちのいずれか1つまたはそれを上回るもの、すなわち、1)オペレーティングシステムおよび/またはオペレーティングシステムのバージョン、2)オペレーティングシステムのサービスパック、3)起動しているサービス、4)起動しているプロセス、および5)ファイルを識別して判定してもよい。収集エージェント304はまた、クライアント上で以下のうちのいずれか1つまたはそれを上回るもの、すなわち、1)ウイルス対策ソフトウェア、2)パーソナルファイアウォールソフトウェア、3)スパム対策ソフトウェア、および4)インターネットセキュリティソフトウェアの存在またはバージョンを識別して判定してもよい。ポリシエンジン236は、クライアントの属性または特性またはクライアント側属性のうちのいずれか1つまたはそれを上回るものに基づく、1つまたはそれを上回るポリシを有してもよい。
いくつかの実施形態では、クライアントエージェント120は、図1Dおよび2Bと併せて議論されるような監視エージェント197を含む。監視エージェント197は、Visual BasicまたはJava script(登録商標)等の任意のタイプおよび形態のスクリプトであってもよい。一実施形態では、監視エージェント197は、クライアントエージェント120の任意の部分の性能を監視して測定する。例えば、いくつかの実施形態では、監視エージェント197は、加速プログラム302の性能を監視して測定する。別の実施形態では、監視エージェント197は、ストリーミングクライアント306の性能を監視して測定する。他の実施形態では、監視エージェント197は、収集エージェント304の性能を監視して測定する。なおも別の実施形態では、監視エージェント197は、インターセプタ350の性能を監視して測定する。いくつかの実施形態では、監視エージェント197は、メモリ、CPU、およびディスク等のクライアント102の任意のリソースを監視して測定する。
監視エージェント197は、クライアントの任意のアプリケーションの性能を監視して測定してもよい。一実施形態では、監視エージェント197は、クライアント102上のブラウザの性能を監視して測定する。いくつかの実施形態では、監視エージェント197は、クライアントエージェント120を介して配信される任意のアプリケーションの性能を監視して測定する。他の実施形態では、監視エージェント197は、ウェブベースまたはHTTP応答時間等のアプリケーションのエンドユーザ応答時間を測定して監視する。監視エージェント197は、ICAまたはRDPクライアントの性能を監視して測定してもよい。別の実施形態では、監視エージェント197は、ユーザセッションまたはアプリケーションセッションのメトリックを測定して監視する。いくつかの実施形態では、監視エージェント197は、ICAまたはRDPセッションを測定して監視する。一実施形態では、監視エージェント197は、クライアント102へのアプリケーションおよび/またはデータの配信を加速する際のアプライアンス200の性能を測定して監視する。
いくつかの実施形態では、依然として図3を参照すると、第1のプログラム322が、自動的に、無音で、透過的に、または別様に、クライアントエージェント120またはインターセプタ350等のその一部をインストールおよび/または実行するために使用されてもよい。一実施形態では、第1のプログラム322は、アプリケーションにロードされ、それによって実行される、ActiveX制御またはJava(登録商標)制御またはスクリプト等のプラグインコンポーネントを備える。例えば、第1のプログラムは、アプリケーションのメモリ空間またはコンテキスト内等でウェブブラウザアプリケーションによってロードされて起動される、ActiveX制御を備える。別の実施形態では、第1のプログラム322は、ブラウザ等のアプリケーションにロードされ、それによって起動される、実行可能命令のセットを備える。一実施形態では、第1のプログラム322は、クライアントエージェント120をインストールするように設計および構築されたプログラムを備える。いくつかの実施形態では、第1のプログラム322は、別のコンピューティングデバイスからネットワークを介してクライアントエージェント120を取得、ダウンロード、または受信する。別の実施形態では、第1のプログラム322は、クライアント102のオペレーティングシステム上にネットワークドライバ等のプログラムをインストールするためのインストーラプログラムまたはプラグアンドプレイマネージャである。
D.仮想化されたアプリケーション配信コントローラを提供するためのシステムおよび方法
ここで図4Aを参照すると、ブロック図が、仮想化環境400の一実施形態を描写する。要するに、コンピューティングデバイス100は、ハイパーバイザ層と、仮想化層と、ハードウェア層とを含む。ハイパーバイザ層は、仮想化層内で実行する少なくとも1つの仮想マシンによる、ハードウェア層内のいくつかの物理リソース(例えば、プロセッサ421およびディスク428)へのアクセスを配分して管理する、ハイパーバイザ401(仮想化マネージャとも称される)を含む。仮想化層は、少なくとも1つのオペレーティングシステム410と、少なくとも1つのオペレーティングシステム410に配分される複数の仮想リソースとを含む。仮想リソースは、限定ではないが、複数の仮想プロセッサ432a、432b、432c(概して432)、および仮想ディスク442a、442b、442c(概して442)、および仮想メモリおよび仮想ネットワークインターフェース等の仮想リソースを含んでもよい。複数の仮想リソースおよびオペレーティングシステム410は、仮想マシン406と称されてもよい。仮想マシン406は、ハイパーバイザ401と通信し、コンピューティングデバイス100上で他の仮想マシンを管理および構成するためのアプリケーションを実行するために使用される、制御オペレーティングシステム405を含んでもよい。
さらに詳細には、ハイパーバイザ401は、物理デバイスへのアクセスを有するオペレーティングシステムをシミュレートする任意の様式で、仮想リソースをオペレーティングシステムに提供してもよい。ハイパーバイザ401は、仮想リソースを任意の数のゲストオペレーティングシステム410a、410b(概して、410)に提供してもよい。いくつかの実施形態では、コンピューティングデバイス100は、1つまたはそれを上回るタイプのハイパーバイザを実行する。これらの実施形態では、ハイパーバイザは、仮想ハードウェアをエミュレートし、物理ハードウェアをパーティション化し、物理ハードウェアを仮想化し、コンピュータ環境へのアクセスを提供する仮想マシンを実行するために使用されてもよい。ハイパーバイザは、VMWare, Inc.(Palo Alto, California)製のもの、その開発がオープンソースXen.orgコミュニティによって監督されるオープンソース製品である、XENハイパーバイザ、Microsoftによって提供されるHyperV、Virtualサーバ、または仮想PCハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行し得る、仮想マシンプラットフォームを作成する、ハイパーバイザを実行するコンピューティングデバイス100は、ホストサーバと称される。これらの実施形態のうちの1つでは、例えば、コンピューティングデバイス100は、Citrix Systems, Inc.(Fort Lauderdale, FL)によって提供されるXENサーバである。
いくつかの実施形態では、ハイパーバイザ401は、コンピューティングデバイス上で実行する、オペレーティングシステム内で実行する。これらの実施形態のうちの1つでは、オペレーティングシステムおよびハイパーバイザ401上で実行するコンピューティングデバイスは、ホストオペレーティングシステム(コンピューティングデバイス上で実行するオペレーティングシステム)と、ゲストオペレーティングシステム(ハイパーバイザ401によって提供されるコンピューティングリソースパーティション内で実行するオペレーティングシステム)とを有すると言える。他の実施形態では、ハイパーバイザ401は、ホストオペレーティングシステム上で実行する代わりに、コンピューティングデバイス上でハードウェアと直接相互作用する。これらの実施形態のうちの1つでは、ハイパーバイザ401は、コンピューティングデバイスを備えるハードウェアを指す、「ベアメタル」上で実行していると言える。
いくつかの実施形態では、ハイパーバイザ401は、オペレーティングシステム410が実行する、仮想マシン406a−c(概して、406)を作成してもよい。これらの実施形態のうちの1つでは、例えば、ハイパーバイザ401は、仮想マシン406を作成するように仮想マシンイメージをロードする。これらの実施形態のうちの別のものでは、ハイパーバイザ401は、仮想マシン406内でオペレーティングシステム410を実行する。これらの実施形態のうちのなおも別のものでは、仮想マシン406は、オペレーティングシステム410を実行する。
いくつかの実施形態では、ハイパーバイザ401は、コンピューティングデバイス100上で実行する仮想マシン406のためのプロセッサスケジューリングおよびメモリ分割を制御する。これらの実施形態のうちの1つでは、ハイパーバイザ401は、少なくとも1つの仮想マシン406の実行を制御する。これらの実施形態のうちの別のものでは、ハイパーバイザ401は、コンピューティングデバイス100によって提供される少なくとも1つのハードウェアリソースの抽象化を少なくとも1つの仮想マシン406に提示する。他の実施形態では、ハイパーバイザ401は、物理プロセッサ能力が仮想マシン406に提示されるかどうかと、どのようにして提示されるかとを制御する。
制御オペレーティングシステム405は、ゲストオペレーティングシステムを管理して構成するための少なくとも1つのアプリケーションを実行してもよい。一実施形態では、制御オペレーティングシステム405は、仮想マシンを実行する、仮想マシンの実行を終了させる、または仮想マシンに配分するための物理リソースのタイプを識別するための機能性を含む、仮想マシンの実行を管理するための機能性へのアクセスを管理者に提供するユーザインターフェースを含むアプリケーション等の管理アプリケーションを実行してもよい。別の実施形態では、ハイパーバイザ401は、ハイパーバイザ401によって作成される仮想マシン406内で制御オペレーティングシステム405を実行する。なおも別の実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100上の物理リソースに直接アクセスする権限を与えられている仮想マシン406内で実行する。いくつかの実施形態では、コンピューティングデバイス100a上の制御オペレーティングシステム405aは、ハイパーバイザ401aとハイパーバイザ401bとの間の通信を介して、コンピューティングデバイス100b上の制御オペレーティングシステム405bとデータを交換してもよい。このようにして、1つまたはそれを上回るコンピューティングデバイス100は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス100のうちの1つまたはそれを上回るものとデータを交換してもよい。これらの実施形態のうちの1つでは、本機能性は、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。これらの実施形態のうちの別のものでは、複数のハイパーバイザは、コンピューティングデバイス100のうちの1つの上で実行されるゲストオペレーティングシステムのうちの1つまたはそれを上回るものを管理する。
一実施形態では、制御オペレーティングシステム405は、少なくとも1つのゲストオペレーティングシステム410と相互作用する権限を与えられている仮想マシン406内で実行する。別の実施形態では、ゲストオペレーティングシステム410は、ディスクまたはネットワークへのアクセスを要求するために、ハイパーバイザ401を介して制御オペレーティングシステム405と通信する。なおも別の実施形態では、ゲストオペレーティングシステム410および制御オペレーティングシステム405は、例えば、ハイパーバイザ401によって利用可能にされる複数の共有メモリページを介して等、ハイパーバイザ401によって確立される通信チャネルを介して通信してもよい。
いくつかの実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100によって提供されるネットワーキングハードウェアと直接通信するためのネットワークバックエンドドライバを含む。これらの実施形態のうちの1つでは、ネットワークバックエンドドライバは、少なくとも1つのゲストオペレーティングシステム110からの少なくとも1つの仮想マシン要求を処理する。他の実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100上の記憶装置要素と通信するためのブロックバックエンドドライバを含む。これらの実施形態のうちの1つでは、ブロックバックエンドドライバは、ゲストオペレーティングシステム410から受信される少なくとも1つの要求に基づいて、記憶要素からデータを読み取って書き込む。
一実施形態では、制御オペレーティングシステム405は、ツールスタック404を含む。別の実施形態では、ツールスタック404は、ハイパーバイザ401と相互作用する、(例えば、第2のコンピューティングデバイス100b上の)他の制御オペレーティングシステム405と通信する、またはコンピューティングデバイス100上の仮想マシン406b、406cを管理するための機能性を提供する。別の実施形態では、ツールスタック404は、改良された管理機能性を仮想マシンファームの管理者に提供するためのカスタマイズされたアプリケーションを含む。いくつかの実施形態では、ツールスタック404および制御オペレーティングシステム405のうちの少なくとも1つは、コンピューティングデバイス100上で起動する仮想マシン406を遠隔で構成して制御するためのインターフェースを提供する、管理APIを含む。他の実施形態では、制御オペレーティングシステム405は、ツールスタック404を通してハイパーバイザ401と通信する。
一実施形態では、ハイパーバイザ401は、ハイパーバイザ401によって作成される仮想マシン406内でゲストオペレーティングシステム410を実行する。別の実施形態では、ゲストオペレーティングシステム410は、コンピュータ環境内のリソースへのアクセスをコンピューティングデバイス100のユーザに提供する。なおも別の実施形態では、リソースは、プログラム、アプリケーション、文書、ファイル、複数のアプリケーション、複数のファイル、実行可能プログラムファイル、デスクトップ環境、コンピュータ環境、またはコンピューティングデバイス100のユーザに利用可能にされる他のリソースを含む。さらに別の実施形態では、リソースは、コンピューティングデバイス100上への従来の直接インストール、アプリケーションストリーミングのための方法を介したコンピューティングデバイス100への配信、第2のコンピューティングデバイス100’上のリソースの実行によって生成され、プレゼンテーション層プロトコルを介してコンピューティングデバイス100に通信される、出力データのコンピューティングデバイス100への配信、第2のコンピューティングデバイス100’上で実行する仮想マシンを介したリソースの実行によって生成される、出力データのコンピューティングデバイス100への配信、またはUSBデバイス等のコンピューティングデバイス100に接続された可撤性記憶デバイスから、またはコンピューティングデバイス100上で実行して出力データを生成する仮想マシンを介した実行を含むが、それらに限定されない、複数のアクセス方法を介して、コンピューティングデバイス100に配信されてもよい。いくつかの実施形態では、コンピューティングデバイス100は、リソースの実行によって生成される出力データを別のコンピューティングデバイス100’に伝送する。
一実施形態では、ゲストオペレーティングシステム410は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識していない、完全仮想化仮想マシンを形成し、そのようなマシンは、「ドメインU HVM(ハードウェア仮想マシン)仮想マシン」と称されてもよい。別の実施形態では、完全仮想化マシンは、完全仮想化マシン内でオペレーティングシステムを実行するために、基本入出力システム(BIOS)をエミュレートするソフトウェアを含む。なおも別の実施形態では、完全仮想化マシンは、ハイパーバイザ401と通信することによって機能性を提供するドライバを含んでもよい。そのような実施形態では、ドライバは、それが仮想化された環境内で実行することを認識してもよい。別の実施形態では、ゲストオペレーティングシステム410は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識している、準仮想化仮想マシンを形成し、そのようなマシンは、「ドメインU PV仮想マシン」と称されてもよい。別の実施形態では、準仮想化マシンは、完全仮想化マシンが含まない、付加的ドライバを含む。なおも別の実施形態では、準仮想化マシンは、上記で説明されるように、制御オペレーティングシステム405に含まれる、ネットワークバックエンドドライバおよびブロックバックエンドドライバを含む。
ここで図4Bを参照すると、ブロック図が、少なくとも1つの物理ホストが仮想マシンを実行する、システム内の複数のネットワーク化されたコンピューティングデバイスの一実施形態を描写する。要するに、本システムは、管理コンポーネント404と、ハイパーバイザ401とを含む。本システムは、複数のコンピューティングデバイス100と、複数の仮想マシン406と、複数のハイパーバイザ401と、ツールスタック404または管理コンポーネント404と様々に称される、複数の管理コンポーネントと、物理リソース421、428とを含む。複数の物理マシン100はそれぞれ、図1E−1Hおよび4Aに関連して上記で説明される、コンピューティングデバイス100として提供されてもよい。
さらに詳細には、物理ディスク428が、コンピューティングデバイス100によって提供され、仮想ディスク442の少なくとも一部を記憶する。いくつかの実施形態では、仮想ディスク442は、複数の物理ディスク428と関連付けられる。これらの実施形態のうちの1つでは、1つまたはそれを上回るコンピューティングデバイス100は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス100のうちの1つまたはそれを上回るものとデータを交換してもよく、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。いくつかの実施形態では、仮想マシン406が実行するコンピューティングデバイス100は、物理ホスト100またはホストマシン100と称される。
ハイパーバイザは、コンピューティングデバイス100上のプロセッサ上で実行する。ハイパーバイザは、物理ディスクへのある量のアクセスを仮想ディスクに配分する。一実施形態では、ハイパーバイザ401は、物理ディスク上のある量の空間を配分する。別の実施形態では、ハイパーバイザ401は、物理ディスク上の複数のページを配分する。いくつかの実施形態では、ハイパーバイザは、仮想マシン450を初期化して実行するプロセスの一部として、仮想ディスク442をプロビジョニングする。
一実施形態では、管理コンポーネント404aは、プール管理コンポーネント404aと称される。別の実施形態では、制御オペレーティングシステム405aと称され得る、管理オペレーティングシステム405aは、管理コンポーネントを含む。いくつかの実施形態では、管理コンポーネントは、ツールスタックと称される。これらの実施形態のうちの1つでは、管理コンポーネントは、図4Aに関連して上記で説明されるツールスタック404である。他の実施形態では、管理コンポーネント404は、管理者等のユーザから、プロビジョニングおよび/または実行する仮想マシン406の識別を受信するためのユーザインターフェースを提供する。なおも他の実施形態では、管理コンポーネント404は、管理者等のユーザから、1つの物理マシン100から別の物理マシンへの仮想マシン406bの移動の要求を受信するためのユーザインターフェースを提供する。さらなる実施形態では、管理コンポーネント404aは、要求された仮想マシン406dを実行するコンピューティングデバイス100bを識別し、識別された仮想マシンを実行するように識別されたコンピューティングデバイス100b上のハイパーバイザ401bに命令し、そのような管理コンポーネントは、プール管理コンポーネントと称されてもよい。
ここで図4Cを参照すると、仮想アプリケーション配信コントローラまたは仮想アプライアンス450の実施形態が、描写される。要するに、図2Aおよび2Bに関連して上記で説明されるアプライアンス200(例えば、アプリケーション配信コントローラ)の機能性および/または実施形態のうちのいずれかが、図4Aおよび4Bに関連して上記で説明される仮想化された環境の任意の実施形態で展開されてもよい。アプライアンス200の形態で展開されているアプリケーション配信コントローラの機能性の代わりに、そのような機能性は、クライアント102、サーバ106、またはアプライアンス200等の任意のコンピューティングデバイス100上の仮想化された環境400で展開されてもよい。
ここで図4Cを参照すると、サーバ106のハイパーバイザ401上で動作する仮想アプライアンス450の実施形態の略図が、描写される。図2Aおよび2Bのアプライアンス200と同様に、仮想アプライアンス450は、可用性、性能、オフロード、およびセキュリティのための機能性を提供してもよい。可用性に関して、仮想アプライアンスは、ネットワークの層4と7との間で負荷平衡を行ってもよく、また、知的サービス健全性監視を行ってもよい。ネットワークトラフィック加速を介した性能増加に関して、仮想アプライアンスは、キャッシングおよび圧縮を行ってもよい。任意のサーバの処理をオフロードするために、仮想アプライアンスは、接続多重化およびプーリングおよび/またはSSL処理を行ってもよい。セキュリティに関して、仮想アプライアンスは、アプライアンス200のアプリケーションファイアウォール機能性およびSSL VPN機能のうちのいずれかを行ってもよい。
図2Aに関連して説明されるようなアプライアンス200のモジュールのうちのいずれかは、既製のサーバ等の任意のサーバ上の仮想化された環境300または仮想化されていない環境で実行可能な1つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、仮想化されたアプライアンス配信コントローラ450の形態でパッケージ化され、組み合わせられ、設計され、または構築されてもよい。例えば、仮想アプライアンスは、コンピューティングデバイス上にインストールするインストールパッケージの形態で提供されてもよい。図2Aを参照すると、キャッシュマネージャ232、ポリシエンジン236、圧縮238、暗号化エンジン234、パケットエンジン240、GUI210、CLI212、シェルサービス214、および健全性監視プログラム216のうちのいずれかは、コンピューティングデバイスおよび/または仮想化された環境300の任意のオペレーティングシステム上で起動するソフトウェアコンポーネントまたはモジュールとして、設計および構築されてもよい。アプライアンス200の暗号化プロセッサ260、プロセッサ262、メモリ264、およびネットワークスタック267を使用する代わりに、仮想化されたアプライアンス400は、仮想化された環境400によって提供されるような、または別様にサーバ106上で利用可能であるような、これらのリソースのうちのいずれかを使用してもよい。
依然として図4Cを参照すると、要するに、任意の1つまたはそれを上回るvサーバ275A−275Nが、任意のサーバ106等の任意のタイプのコンピューティングデバイス100の仮想化された環境400で動作または実行されてもよい。図2Bに関連して説明されるアプライアンス200のモジュールまたは機能性のうちのいずれかは、サーバの仮想化された、または仮想化されていない環境のいずれかで動作するように設計および構築されてもよい。vサーバ275、SSL VPN280、イントラネットUP282、切替284、DNS286、加速288、App FW290、および監視エージェントのうちのいずれかは、デバイスおよび/または仮想化された環境400上で実行可能な1つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、アプリケーション配信コントローラ450の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。
いくつかの実施形態では、サーバは、各仮想マシンが仮想アプリケーション配信コントローラ450の同一または異なる実施形態を起動する、仮想化環境で複数の仮想マシン406a−406nを実行してもよい。いくつかの実施形態では、サーバは、マルチコア処理システムのコア上の1つまたはそれを上回る仮想マシン上で1つまたはそれを上回る仮想アプライアンス450を実行してもよい。いくつかの実施形態では、サーバは、多重プロセッサデバイスの各プロセッサ上の1つまたはそれを上回る仮想マシン上で1つまたはそれを上回る仮想アプライアンス450を実行してもよい。
E.マルチコアアーキテクチャを提供するためのシステムおよび方法
ムーアの法則によると、集積回路上に置かれ得るトランジスタの数は、約2年毎に倍になり得る。しかしながら、CPU速度増加は、停滞状態に達し得、例えば、CPU速度は、2005年以降、約3.5〜4GHz範囲になっている。ある場合には、CPU製造業者は、付加的性能を獲得するためにCPU速度増加に依拠しない場合がある。一部のCPU製造業者は、付加的性能を提供するように、付加的コアをそれらのプロセッサに追加し得る。性能獲得のためにCPUに依拠する、ソフトウェアおよびネットワーキングベンダのもの等の製品は、これらのマルチコアCPUを活用することによって、それらの性能を改良し得る。単一のCPUのために設計および構築されるソフトウェアは、マルチスレッドの並列アーキテクチャを利用するように、または、別様にマルチコアアーキテクチャを利用するように、再設計され、および/または書き換えられてもよい。
nコアまたはマルチコア技術と称される、アプライアンス200のマルチコアアーキテクチャは、アプライアンスが、いくつかの実施形態では、単一コア性能障壁を突破することと、マルチコアCPUの能力を活用することとを可能にする。図2Aに関連して説明される前のアーキテクチャでは、単一のネットワークまたはパケットエンジンが起動される。nコア技術およびアーキテクチャの複数のコアは、複数のパケットエンジンが同時に、および/または並行して起動することを可能にする。パケットエンジンが各コア上で起動すると、アプライアンスアーキテクチャは、付加的コアの処理容量を活用する。いくつかの実施形態では、これは、性能および拡張可能性の最大7倍の増加を提供する。
図5Aには、機能並列性、データ並列性、またはフローベースのデータ並列性等の並列性または並列コンピューティング方式のタイプに従って、1つまたはそれを上回るプロセッサコアを横断する作業、タスク、負荷、またはネットワークトラフィック分布のいくつかの実施形態が、図示されている。要するに、図5Aは、1からNの合計コア数である、n個のコアを伴うアプライアンス200’等のマルチコアシステムの実施形態を図示する。一実施形態では、作業、負荷、またはネットワークトラフィックは、分布がn個のコア505N(以降では集合的にコア505と称される)のうちの全てまたは2つまたはそれを上回るものを横断するように、第1のコア505A、第2のコア505B、第3のコア505C、第4のコア505D、第5のコア505E、第6のコア505F、第7のコア505G等の間に分配されることができる。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のVIP275があってもよい。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のパケットエンジン240があってもよい。使用されるアプローチのうちのいずれかは、コアのうちのいずれかを横断する、異なる、様々な、または類似する作業負荷または性能レベル515につながり得る。機能並列性アプローチに関して、各コアは、パケットエンジン、VIP275、またはアプライアンス200によって提供される機能性のうちの異なる機能を起動してもよい。データ並列性アプローチでは、データは、データを受信するネットワークインターフェースカード(NIC)またはVIP275に基づいて、コアを横断して並列化または分配されてもよい。別のデータ並列性アプローチでは、処理は、データフローを各コアに分配することによって、コアを横断して分配されてもよい。
図5Aに関してさらに詳細には、いくつかの実施形態では、負荷、作業、またはネットワークトラフィックが、機能並列性500に従って、コア505の間で分配されることができる。機能並列性は、1つまたはそれを上回る個別の機能を果たす各コアに基づいてもよい。いくつかの実施形態では、第1のコアが、第1の機能を果たしてもよい一方で、第2のコアは、第2の機能を果たす。機能並列性アプローチでは、マルチコアシステムによって果たされる機能は、分割され、機能性に従って各コアに分配される。いくつかの実施形態では、機能並列性は、タスク並列性と称されてもよく、各プロセッサまたはコアが同一または異なるデータに異なるプロセスまたは機能を実行するときに、達成されてもよい。コアまたはプロセッサは、同一または異なるコードを実行してもよい。ある場合には、異なる実行スレッドまたはコードは、それらが作動するにつれて相互と通信してもよい。通信は、ワークフローの一部として、1つのスレッドから次のスレッドにデータをパスするように行われてもよい。
いくつかの実施形態では、機能並列性500に従って、コア505を横断して作業を分配するステップは、ネットワーク入出力管理(NWI/O)510A、セキュアソケットレイヤ(SSL)暗号化および暗号解読510B、および伝送制御プロトコル(TCP)機能510C等の特定の機能に従って、ネットワークトラフィックを分配するステップを含むことができる。これは、使用されている機能性の量またはレベルに基づく、作業、性能、または計算負荷515につながり得る。いくつかの実施形態では、データ並列性540に従って、コア505を横断して作業を分配するステップは、特定のハードウェアまたはソフトウェアコンポーネントと関連付けられるデータを分配することに基づいて、ある量の作業515を分配するステップを含むことができる。いくつかの実施形態では、フローベースのデータ並列性520に従って、コア505を横断して作業を分配するステップは、各コア上の作業515A−Nの量が、同様である、実質的に等しい、または比較的均等に分配され得るように、コンテキストまたはフローに基づいてデータを分配するステップを含むことができる。
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンまたはVIPによって提供される複数の機能性のうちの1つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア1が、アプライアンス200’のためのネットワークI/O処理を行ってもよい一方で、コア2は、アプライアンスのためのTCP接続管理を行う。同様に、コア3が、SSLオフローディングを行ってもよい一方で、コア4は、層7またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、1つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図2Aおよび2Bと併せて識別および/または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図5Aに図示されるように、機能別の分割は、性能または負荷515の異なるレベルで起動する、異なるコアにつながり得る。
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンによって提供される複数の機能性のうちの1つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア1が、アプライアンス200’のためのネットワークI/O処理を行ってもよい一方で、コア2は、アプライアンスのためのTCP接続管理を行う。同様に、コア3が、SSLオフローディングを行ってもよい一方で、コア4は、層7またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、1つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図2Aおよび2Bと併せて識別および/または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図5Aに図示されるように、機能別の分割は、負荷または性能の異なるレベルで起動する、異なるコアにつながり得る。
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、図5Aは、第1のコア、すなわち、ネットワークI/O機能性510Aと関連付けられるアプリケーションおよびプロセスを処理する、コア1505Aを図示する。ネットワークI/Oと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、NWI/O510Aと関連付けられるポート宛先を有する、発信および着信パケットは、NWI/Oポートと関連付けられる全てのネットワークトラフィックをハンドリングすることに専用である、コア1505Aに向かってダイレクトされるであろう。同様に、コア2 505Bは、SSL処理と関連付けられる機能性をハンドリングすることに専用であって、コア4 505Dは、全てのTCPレベル処理および機能性をハンドリングすることに専用であり得る。
図5Aは、ネットワークI/O、SSL、およびTCP等の機能を図示するが、他の機能もコアに割り当てられることができる。これらの他の機能は、本明細書に説明される機能または動作のうちのいずれか1つまたはそれを上回るものを含むことができる。例えば、図2Aおよび2Bと併せて説明される機能のうちのいずれかは、機能性基準でコアを横断して分配されてもよい。ある場合には、第1のVIP275Aが、第1のコア上で起動してもよい一方で、異なる構成を伴う第2のVIP275Bは、第2のコア上で起動してもよい。いくつかの実施形態では、各コア505が特定の機能と関連付けられる処理をハンドリングすることができるように、各コア505は、その特定の機能性をハンドリングすることができる。例えば、コア2 505Bが、SSLオフローディングをハンドリングしてもよい一方で、コア4 505Dは、アプリケーション層処理およびトラフィック管理をハンドリングしてもよい。
他の実施形態では、作業、負荷、またはネットワークトラフィックが、任意のタイプおよび形態のデータ並列性540に従って、コア505の間で分配されてもよい。いくつかの実施形態では、データ並列性は、異なる分配されたデータ上で同一のタスクまたは機能性を果たす各コアによって、マルチコアシステムにおいて達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードが、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令が、動作を制御するが、同一コードを実行してもよい。いくつかの実施形態では、データ並列性が、パケットエンジン、vサーバ(VIP)275A−C、ネットワークインターフェースカード(NIC)542D−E、および/またはアプライアンス200上に含まれる、またはそれと関連付けられる任意の他のネットワーキングハードウェアまたはソフトウェアの観点から、達成される。例えば、各コアは、同一パケットエンジンまたはVIPコードまたは構成を起動してもよいが、分配されたデータの異なるセット上で動作してもよい。各ネットワーキングハードウェアまたはソフトウェア構築物は、異なる、様々な、または実質的に同一の量のデータを受信することができ、結果として、様々な、異なる、または比較的同一の量の負荷515を有し得る。
データ並列性アプローチの場合、作業は、VIP、NIC、および/またはVIPまたはNICのデータフローに基づいて、分割されて分配されてもよい。これらのアプローチのうちの1つでは、マルチコアシステムの作業は、データの分配されたセット上に各VIP作業を有することによって、VIPの間で分割または分配されてもよい。例えば、各コアは、1つまたはそれを上回るVIPを起動するように構成されてもよい。ネットワークトラフィックは、そのトラフィックをハンドリングする各VIPのためのコアに分配されてもよい。これらのアプローチのうちの別のものでは、アプライアンスの作業は、いずれのNICがネットワークトラフィックを受信するかに基づいて、コアの間で分割または分配されてもよい。例えば、第1のNICのネットワークトラフィックが、第1のコアに分配されてもよい一方で、第2のNICのネットワークトラフィックは、第2のコアに分配されてもよい。ある場合には、コアは、複数のNICからのデータを処理してもよい。
図5Aは、VIP1 275A、VIP2 275B、およびVIP3 275Cの場合のように、単一のコア505と関連付けられる単一のvサーバを図示する。いくつかの実施形態では、単一のvサーバは、1つまたはそれを上回るコア505と関連付けられることができる。対照的に、1つまたはそれを上回るvサーバは、単一のコア505と関連付けられることができる。vサーバをコア505と関連付けるステップは、その特定のvサーバと関連付けられる全ての機能を処理するように、そのコア505を含んでもよい。いくつかの実施形態では、各コアは、同一コードおよび構成を有する、VIPを実行する。他の実施形態では、各コアは、同一コードを有するが、異なる構成を有する、VIPを実行する。いくつかの実施形態では、各コアは、異なるコードと、同一または異なる構成とを有する、VIPを実行する。
vサーバのように、NICはまた、特定のコア505と関連付けられることもできる。多くの実施形態では、NICがデータパケットを受信または伝送するときに、特定のコア505がデータパケットを受信および伝送することに関与する処理をハンドリングするように、NICは、1つまたはそれを上回るコア505に接続されることができる。一実施形態では、単一のNICは、NIC1 542DおよびNIC2 542Eの場合のように、単一のコア505と関連付けられることができる。他の実施形態では、1つまたはそれを上回るNICは、単一のコア505と関連付けられることができる。他の実施形態では、単一のNICは、1つまたはそれを上回るコア505と関連付けられることができる。これらの実施形態では、負荷は、各コア505が実質的に類似する量の負荷を処理するように、1つまたはそれを上回るコア505の間で分配され得る。NICと関連付けられるコア505は、その特定のNICと関連付けられる全ての機能および/またはデータを処理してもよい。
VIPまたはNICのデータに基づいて、コアを横断して作業を分配するステップは、独立性のレベルを有し得るが、いくつかの実施形態では、これは、図5Aの様々な負荷515によって図示されるように、コアの不平衡使用につながり得る。
いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、任意のタイプおよび形態のデータフローに基づいて、コア505の間で分配されることができる。これらのアプローチのうちの別のものでは、作業は、データフローに基づいてコアの間で分割または分配されてもよい。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの1つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求/応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス200’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。
フローベースのデータ並列性520では、データの分布は、要求/応答ペアリング、トランザクション、セッション、接続、またはアプリケーション通信等の任意のタイプのデータのフローに関連する。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの1つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。データフローの分布は、各コア505が、実質的に等しい、または比較的均等に分配された量の負荷、データ、またはネットワークトラフィックを搬送するようなものであってもよい。
いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求/応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス200’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。一実施形態では、データフローは、トランザクションまたは一連のトランザクションに基づいて、分配されることができる。本トランザクションは、いくつかの実施形態では、クライアントとサーバとの間にあることができ、IPアドレスまたは他のパケット識別子によって特徴付けられることができる。例えば、コア1 505Aは、特定のクライアントと特定のサーバとの間のトランザクションに専用であることができ、したがって、コア1 505A上の負荷515Aは、特定のクライアントとサーバとの間のトランザクションと関連付けられるネットワークトラフィックから成ってもよい。ネットワークトラフィックをコア1 505Aに配分することは、特定のクライアントまたはサーバのいずれかから生じる全てのデータパケットをコア1 505Aにルーティングすることによって、達成されることができる。
作業または負荷は、部分的にトランザクションに基づいてコアに分配されることができるが、他の実施形態では、負荷または作業は、パケット毎の基準で配分されることができる。これらの実施形態では、アプライアンス200は、データパケットを傍受し、それらを、最少量の負荷を有するコア505に配分することができる。例えば、コア1上の負荷515Aが、残りのコア505B−N上の負荷515B−Nより少ないため、アプライアンス200は、第1の着信データパケットをコア1 505Aに配分し得る。いったん第1のデータパケットがコア1 505Aに配分されると、コア1 505A上の負荷515Aの量は、第1のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス200が第2のデータパケットを傍受するとき、コア4 505Dが第2の最少量の負荷を有するため、アプライアンス200は、負荷をコア4 505Dに配分するであろう。最少量の負荷を伴うコアにデータパケットを配分することは、いくつかの実施形態では、各コア505に分配される負荷515A−Nが実質的に等しいままであることを確実にすることができる。
他の実施形態では、負荷は、ネットワークトラフィックのある区分が特定のコア505に配分される、単位毎の基準で配分されることができる。上記の実施例は、パケット毎の基準で負荷平衡を例証する。他の実施形態では、負荷は、10、100、または1,000個毎のパケットが、最少量の負荷を有するコア505に配分されるように、パケットの数に基づいて配分されることができる。コア505に配分されるパケットの数は、アプリケーション、ユーザ、または管理者によって判定される数であることができ、ゼロより大きい任意の数であることができる。なおも他の実施形態では、負荷は、パケットが所定の時間量にわたって特定のコア505に分配されるように、時間メトリックに基づいて配分されることができる。これらの実施形態では、パケットは、5ミリ秒にわたって、またはユーザ、プログラム、システム、管理者によって、または別様に判定される、任意の時間周期にわたって、特定のコア505に配分されることができる。所定の時間周期が経過した後、データパケットが、所定の時間周期にわたって異なるコア505に伝送される。
1つまたはそれを上回るコア505の間で作業、負荷、またはネットワークトラフィックを分配するためのフローベースのデータ並列性方法は、上記の実施形態の任意の組み合わせを備えることができる。これらの方法は、アプライアンス200の任意の部分によって、パケットエンジン等のコア505のうちの1つの上で実行するアプリケーションまたは実行可能命令のセットによって、またはアプライアンス200と通信するコンピューティングデバイス上で実行する任意のアプリケーション、プログラム、またはエージェントによって、実施されることができる。
図5Aに図示される機能およびデータ並列性計算方式は、機能並列性500、データ並列性540、フローベースのデータ並列性520、またはそれらの任意の部分を包含する、ハイブリッド並列性または分散処理方式を生成するように、任意の様式で組み合わせられることができる。ある場合には、マルチコアシステムは、1つまたはそれを上回るコア505の間で負荷を分配するために、任意のタイプおよび形態の負荷平衡方式を使用してもよい。負荷平衡方式は、機能およびデータ並列性方式のうちのいずれかまたはそれらの組み合わせとの任意の組み合わせで、使用されてもよい。
図5Bには、任意のタイプおよび形態の1つまたはそれを上回るシステム、アプライアンス、デバイス、またはコンポーネントであり得る、マルチコアシステム545の実施形態が図示されている。本システム545は、いくつかの実施形態では、1つまたはそれを上回る処理コア505A−Nを有する、アプライアンス200内に含まれることができる。システム545はさらに、メモリバス556と通信する、1つまたはそれを上回るパケットエンジン(PE)またはパケット処理エンジン(PPE)548A−Nを含むことができる。メモリバスは、1つまたはそれを上回る処理コア505A−Nと通信するために使用されてもよい。また、システム545内には、1つまたはそれを上回るネットワークインターフェースカード(NIC)552と、1つまたはそれを上回る処理コア505A−Nとさらに通信し得るフローディストリビュータ550とが含まれることができる。フローディストリビュータ550は、受信側スケーラ(RSS)または受信側スケーリング(RSS)モジュール560を備えることができる。
さらに図5Bを参照すると、さらに詳細には、一実施形態では、パケットエンジン548A−Nは、図2Aおよび2Bに説明されるアプライアンスの任意の部分等の本明細書に説明されるアプライアンス200の任意の部分を備えることができる。パケットエンジン548A−Nは、いくつかの実施形態では、以下の要素、すなわち、パケットエンジン240、ネットワークスタック267、キャッシュマネージャ232、ポリシエンジン236、圧縮エンジン238、暗号化エンジン234、GUI210、CLI212、シェルサービス214、監視プログラム216、およびメモリバス556または1つまたはそれを上回るコア505A−Nのいずれかの1つからデータパケットを受信することが可能な任意の他のソフトウェアまたはハードウェア要素のうちのいずれかを備えることができる。いくつかの実施形態では、パケットエンジン548A−Nは、1つまたはそれを上回るvサーバ275A−Nまたはその任意の部分を備えることができる。他の実施形態では、パケットエンジン548A−Nは、以下の機能性、すなわち、SSL VPN280、イントラネットUP282、切替284、DNS286、パケット加速288、App FW290、監視エージェント197によって提供される監視等の監視、TCPスタックとして機能することと関連付けられる機能性、負荷平衡、SSLオフローディングおよび処理、コンテンツ切替、ポリシ評価、キャッシング、圧縮、エンコード、解凍、デコード、アプリケーションファイアウォール機能性、XML処理および加速、およびSSL VPNコネクティビティの任意の組み合わせを提供することができる。
パケットエンジン548A−Nは、いくつかの実施形態では、特定のサーバ、ユーザ、クライアント、またはネットワークと関連付けられることができる。パケットエンジン548が特定のエンティティと関連付けられるとき、そのパケットエンジン548は、そのエンティティと関連付けられるデータパケットを処理することができる。例えば、パケットエンジン548が第1のユーザと関連付けられる場合、そのパケットエンジン548は、第1のユーザによって生成されるパケット、または第1のユーザと関連付けられる宛先アドレスを有するパケットを処理し、それに作用するであろう。同様に、パケットエンジン548は、パケットエンジン548が、特定のエンティティによって生成されていない、またはそのエンティティに向けられていない任意のデータパケットを処理し、別様にそれに作用することができるように、そのエンティティと関連付けられないことを選定してもよい。
ある事例では、パケットエンジン548A−Nは、図5Aに図示される機能および/またはデータ並列性方式のうちのいずれかを実施するように構成されることができる。これらの事例では、パケットエンジン548A−Nは、分布が並列性または分布方式に従うように、処理コア505A−Nの間で機能またはデータを分配することができる。いくつかの実施形態では、単一のパケットエンジン548A−Nが、負荷平衡方式を実施する一方で、他の実施形態では、1つまたはそれを上回るパケットエンジン548A−Nが、負荷平衡方式を実施する。各コア505A−Nは、一実施形態では、負荷平衡がパケットエンジンによって実施され得るように、特定のパケットエンジン548と関連付けられることができる。負荷平衡は、本実施形態では、パケットエンジン548A−Nが負荷を分配する場所を集合的に判定することができるように、コア505と関連付けられる各パケットエンジン548A−Nが、コアと関連付けられる他のパケットエンジンと通信することを要求してもよい。本プロセスの一実施形態は、負荷のために各パケットエンジンから投票を受信する、アービタを含むことができる。アービタは、部分的に、エンジンの投票の時期、ある場合には、エンジンの関連付けられるコア505上の負荷の現在の量と関連付けられる優先順位値に基づいて、負荷を各パケットエンジン548A−Nに分配することができる。
コア上で起動するパケットエンジンのうちのいずれかは、ユーザモード、カーネル、またはそれらの任意の組み合わせで起動してもよい。いくつかの実施形態では、パケットエンジンは、ユーザまたはアプリケーション空間内で起動するアプリケーションまたはプログラムとして動作する。これらの実施形態では、パケットエンジンは、カーネルによって提供される任意の機能性にアクセスするために、任意のタイプおよび形態のインターフェースを使用してもよい。いくつかの実施形態では、パケットエンジンは、カーネルモードで、またはカーネルの一部として動作する。いくつかの実施形態では、パケットエンジンの第1の部分が、ユーザモードで動作する一方で、パケットエンジンの第2の部分は、カーネルモードで動作する。いくつかの実施形態では、第1のコア上の第1のパケットエンジンが、カーネルモードで実行する一方で、第2のコア上の第2のパケットエンジンは、ユーザモードで実行する。いくつかの実施形態では、パケットエンジンまたはその任意の部分は、NICまたはその任意のドライバ上で、またはそれと連動して動作する。
いくつかの実施形態では、メモリバス556は、任意のタイプおよび形態のメモリまたはコンピュータバスであることができる。単一のメモリバス556が図5Bで描写されているが、システム545は、任意の数のメモリバス556を備えることができる。一実施形態では、各パケットエンジン548は、1つまたはそれを上回る個々のメモリバス556と関連付けられることができる。
NIC552は、いくつかの実施形態では、本明細書に説明されるネットワークインターフェースカードまたは機構のうちのいずれかであることができる。NIC552は、任意の数のポートを有することができる。NICは、任意のタイプおよび形態のネットワーク104に接続するように設計および構築されることができる。単一のNIC552が図示されているが、システム545は、任意の数のNIC552を備えることができる。いくつかの実施形態では、各コア505A−Nは、1つまたはそれを上回る単一のNIC552と関連付けられることができる。したがって、各コア505は、特定のコア505専用の単一のNIC552と関連付けられることができる。
コア505A−Nは、本明細書に説明されるプロセッサのうちのいずれかを備えることができる。さらに、コア505A−Nは、本明細書に説明されるコア505構成のうちのいずれかに従って構成されることができる。なおもさらに、コア505A−Nは、本明細書に説明されるコア505機能性のうちのいずれかを有することができる。図5Bは、7つのコア505A−Gを図示するが、任意の数のコア505が、システム545内に含まれることができる。具体的には、システム545は、「N」個のコアを備えることができ、「N」は、ゼロより大きい整数である。
コアは、使用するためにそのコアに配分される、または割り当てられる、メモリを有する、または使用してもよい。メモリは、そのコアのプライベートまたはローカルメモリと見なされ、そのコアのみによってアクセス可能であり得る。コアは、共有される、または複数のコアに割り当てられる、メモリを有する、または使用してもよい。メモリは、1つを上回るコアによってアクセス可能である公共または共有メモリと見なされてもよい。コアは、プライベートおよび公共メモリの任意の組み合わせを使用してもよい。各コアのための別個のアドレス空間を用いることで、あるレベルの協調が、同一アドレス空間を使用する場合から排除される。別個のアドレス空間を用いることで、コアは、他のコアとの対立について心配することなく、コアの独自のアドレス空間内で情報およびデータに作業を行うことができる。各パケットエンジンは、TCPおよび/またはSSL接続のための別個のメモリプールを有してもよい。
さらに図5Bを参照すると、図5Aに関連して上記で説明されるコア505の機能性および/または実施形態のうちのいずれかが、図4Aおよび4Bに関連して上記で説明される仮想化された環境の任意の実施形態で展開されることができる。物理プロセッサ505の形態で展開されているコア505の機能性の代わりに、そのような機能性は、クライアント102、サーバ106、またはアプライアンス200等の任意のコンピューティングデバイス100上の仮想化された環境400で展開されてもよい。他の実施形態では、アプライアンスまたは単一のデバイスの形態で展開されているコア505の機能性の代わりに、機能性は、任意の配列で複数のデバイスを横断して展開されてもよい。例えば、1つのデバイスは、2つまたはそれを上回るコアを備えてもよく、別のデバイスは、2つまたはそれを上回るコアを備えてもよい。例えば、マルチコアシステムは、コンピューティングデバイスのクラスタ、サーバファーム、またはコンピューティングデバイスのネットワークを含んでもよい。いくつかの実施形態では、コアの形態で展開されているコア505の機能性の代わりに、機能性は、複数の単一コアプロセッサ等の複数のプロセッサ上で展開されてもよい。
一実施形態では、コア505は、任意のタイプおよび形態のプロセッサであってもよい。いくつかの実施形態では、コアは、本明細書に説明される任意のプロセッサまたは中央処理ユニットと実質的に同様に機能することができる。いくつかの実施形態では、コア505は、本明細書に説明される任意のプロセッサの任意の部分を備えてもよい。図5Aは、7つのコアを図示するが、任意の「N」個のコアがアプライアンス200内に存在することができ、「N」は、1より大きい任意の整数である。いくつかの実施形態では、コア505は、共通アプライアンス200内にインストールされることができる一方で、他の実施形態では、コア505は、相互に通信可能に接続される1つまたはそれを上回るアプライアンス200内にインストールされることができる。コア505は、いくつかの実施形態では、グラフィックス処理ソフトウェアを備えることができる一方で、他の実施形態では、コア505は、一般処理能力を提供する。コア505は、物理的に相互の近傍にインストールされることができ、および/または相互に通信可能に接続されることができる。コアは、物理的に任意のタイプおよび形態のバスまたはサブシステムによって接続され、および/またはコアに、コアから、および/またはコアの間でデータを転送するためにコアに通信可能に結合されてもよい。
各コア505は、他のコアと通信するためのソフトウェアを備えることができるが、いくつかの実施形態では、コアマネージャ(図示せず)は、各コア505の間の通信を促進することができる。いくつかの実施形態では、カーネルは、コア管理を提供してもよい。コアは、種々のインターフェース機構を使用して、相互とインターフェースをとってもよい、または通信してもよい。いくつかの実施形態では、コア間メッセージングが、コアを接続するバスまたはサブシステムを介してメッセージまたはデータを第2のコアに送信する第1のコア等のコアの間で通信するために使用されてもよい。いくつかの実施形態では、コアは、任意のタイプおよび形態の共有メモリインターフェースを介して通信してもよい。一実施形態では、全てのコアの間で共有される1つまたはそれを上回るメモリ場所があってもよい。いくつかの実施形態では、各コアは、相互のコアと共有される別個のメモリ場所を有してもよい。例えば、第1のコアは、第2のコアとの第1の共有メモリと、第3のコアとの第2の共有メモリとを有してもよい。いくつかの実施形態では、コアは、カーネルを介した機能コール等の任意のタイプのプログラミングまたはAPIを介して通信してもよい。いくつかの実施形態では、オペレーティングシステムは、複数のコアデバイスを認識してサポートし、コア間通信のためのインターフェースおよびAPIを提供してもよい。
フローディストリビュータ550は、任意のタイプおよび形態のハードウェア上で実行する、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、または任意のタイプおよび形態の実行可能命令であることができる。いくつかの実施形態では、フローディストリビュータ550は、本明細書に説明される動作および機能のうちのいずれかを果たす回路の任意の設計および構築であることができる。いくつかの実施形態では、フローディストリビュータは、コア505および/またはコア上で起動するパケットエンジンまたはVIPの間のデータパケットの分布を分配、自動転送、ルーティング、制御、および/または管理する。フローディストリビュータ550は、いくつかの実施形態では、インターフェースマスタと称されることができる。一実施形態では、フローディストリビュータ550は、アプライアンス200のコアまたはプロセッサ上で実行する実行可能命令のセットを備える。別の実施形態では、フローディストリビュータ550は、アプライアンス200と通信するコンピューティングマシン上で実行する実行可能命令のセットを備える。いくつかの実施形態では、フローディストリビュータ550は、ファームウェア等のNIC上で実行する実行可能命令のセットを備える。なおも他の実施形態では、フローディストリビュータ550は、コアまたはプロセッサの間でデータパケットを分配するソフトウェアおよびハードウェアの任意の組み合わせを備える。一実施形態では、フローディストリビュータ550が、コア505A−Nのうちの少なくとも1つの上で実行する一方で、他の実施形態では、各コア505A−Nに割り当てられる別個のフローディストリビュータ550が、関連付けられるコア505A−N上で実行する。フローディストリビュータは、コアを横断するフローの平衡をとるために、任意のタイプおよび形態の統計的または確率的アルゴリズムまたは意思決定を使用してもよい。NIC等のアプライアンスのハードウェアまたはカーネルは、NICおよび/またはコアを横断して順次動作をサポートするように設計および構築されてもよい。
システム545が1つまたはそれを上回るフローディストリビュータ550を備える、実施形態では、各フローディストリビュータ550は、プロセッサ505またはパケットエンジン548と関連付けられることができる。フローディストリビュータ550は、各フローディストリビュータ550が、システム545内で実行する他のフローディストリビュータ550と通信することを可能にする、インターフェース機構を備えることができる。1つの事例では、1つまたはそれを上回るフローディストリビュータ550は、相互と通信することによって、負荷の平衡をとる方法を判定することができる。本プロセスは、次いで、いずれのフローディストリビュータ550が負荷を受容するべきかを判定する、アービタに投票を提出するために、上記で説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第1のフローディストリビュータ550’は、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が所定の閾値を上回ること、関連付けられるコア上の負荷が所定の閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷より少ないこと、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを自動転送する場所を判定するために使用されることができる任意の他の測定基準のうちのいずれかに基づいて、第1のデータパケットを関連付けられるコアに自動転送するかどうかを判定することができる。
フローディストリビュータ550は、本明細書に説明されるもの等の分布、計算、または負荷平衡方式に従って、コア505の間でネットワークトラフィックを分配することができる。一実施形態では、フローディストリビュータは、機能並列性分布方式550、データ並列性負荷分布方式540、フローベースのデータ並列性分布方式520、またはこれらの分布方式または複数のプロセッサの間で負荷を分配するための任意の負荷平衡方式の任意の組み合わせのうちのいずれか1つに従って、ネットワークトラフィックを分配することができる。したがって、フローディストリビュータ550は、データパケットを取り込み、動作負荷平衡または分布方式に従って、プロセッサを横断してそれらを分配することによって、負荷ディストリビュータとして作用することができる。一実施形態では、フローディストリビュータ550は、それに応じて、パケット、作業、または負荷を分配する方法を判定する1つまたはそれを上回る動作、機能、または論理を備えることができる。なおも他の実施形態では、フローディストリビュータ550は、ソースアドレスおよびデータパケットと関連付けられる宛先アドレスを識別し、それに応じて、パケットを分配し得る、1つまたはそれを上回るサブ動作、機能、または論理を備えることができる。
いくつかの実施形態では、フローディストリビュータ550は、1つまたはそれを上回るコア505の間でデータパケットを分配する、受信側スケーリング(RSS)ネットワークドライバモジュール560または任意のタイプおよび形態の実行可能命令を備えることができる。RSSモジュール560は、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、RSSモジュール560は、コア505A−Nを横断して、またはマルチプロセッサネットワーク内の複数のプロセッサの間でデータパケットを分配するように、フローディストリビュータ550と連動して作動する。RSSモジュール560は、いくつかの実施形態では、NIC552内で実行することができ、他の実施形態では、コア505のうちのいずれか1つの上で実行することができる。
いくつかの実施形態では、RSSモジュール560は、MICROSOFT受信側スケーリング(RSS)方式を使用する。一実施形態では、RSSは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡をとられることを可能にする、Microsoft拡張可能ネットワーキングイニシアチブ技術である。RSSは、ネットワークパケットを処理するためのコアまたはプロセッサを判定するために任意のタイプおよび形態のハッシング方式を使用してもよい。
RSSモジュール560は、Toeplitzハッシュ関数等の任意のタイプおよび形態のハッシュ関数を適用することができる。ハッシュ関数は、ハッシュタイプまたは一連の値のうちのいずれかに適用されてもよい。ハッシュ関数は、任意のセキュリティレベルのセキュアなハッシュであってもよい、または別様に暗号論的にセキュアである。ハッシュ関数は、ハッシュキーを使用してもよい。キーのサイズは、ハッシュ関数に依存している。Toeplitzハッシュに関して、サイズは、IPv6については40バイト、IPv4については16バイトであってもよい。
ハッシュ関数は、いずれか1つまたはそれを上回る基準または設計目標に基づいて設計および構築されてもよい。いくつかの実施形態では、TCP/IPv4、TCP/IPv6、IPv4、およびIPv6ヘッダを含む、異なるハッシュ入力および異なるハッシュタイプのハッシュ結果の均等な分布を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、少数のバケット(例えば、2つまたは4つ)が存在しているときに均等に分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、多数のバケット(例えば、64個のバケット)が存在したときにランダムに分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、ハッシュ関数は、計算またはリソース使用量のレベルに基づいて判定される。いくつかの実施形態では、ハッシュ関数は、ハードウェアでハッシュを実装することの容易性または困難に基づいて判定される。いくつかの実施形態では、ハッシュ関数は、悪意のある遠隔ホストが、全てハッシュするであろうパケットを同一バケットに送信することの容易性または困難に基づいて、判定される。
RSSは、一連の値等の任意のタイプおよび形態の入力からハッシュを生成してもよい。本一連の値は、ネットワークパケットの任意のヘッダ、フィールド、またはペイロード、またはそれらの部分等のネットワークパケットの任意の部分を含むことができる。いくつかの実施形態では、ハッシュへの入力は、ハッシュタイプと称され、以下、すなわち、少なくとも2つのIPアドレスと、2つのポートとを備える、4タプル、値のいずれか4つのセットを備える4タプル、6タプル、2タプル、および/または任意の他の一連の数または値のうちのいずれか等のネットワークパケットまたはデータフローと関連付けられる情報の任意のタプルを含んでもよい。以下は、RSSによって使用され得る、ハッシュタイプの実施例である。
ソースTCPポート、ソースIPバージョン4(IPv4)アドレス、宛先TCPポート、および宛先IPv4アドレスの4タプル。
ソースTCPポート、ソースIPバージョン6(IPv6)アドレス、宛先TCPポート、および宛先IPv6アドレスの4タプル。
ソースIPv4アドレスおよび宛先IPv4アドレスの2タプル。
ソースIPv6アドレスおよび宛先IPv6アドレスの2タプル。
IPv6拡張ヘッダを解析するためのサポートを含む、ソースIPv6アドレスおよび宛先IPv6アドレスの2タプル。
ハッシュ結果またはその任意の部分は、ネットワークパケットを分配するためのパケットエンジンまたはVIP等のコアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、1つまたはそれを上回るハッシュビットまたはマスクが、ハッシュ結果に適用される。ハッシュビットまたはマスクは、任意の数のビットまたはバイトであってもよい。NICは、7ビット等の任意の数のビットをサポートしてもよい。ネットワークスタックは、初期化中に使用される実際のビットの数を設定してもよい。数は、1〜7を含むであろう。
ハッシュ結果は、バケットテーブルまたは間接テーブル等の任意のタイプおよび形態のテーブルを介して、コアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、ハッシュ結果ビットの数は、テーブルの中へインデックス化するために使用される。ハッシュマスクの範囲は、間接テーブルのサイズを効果的に定義してもよい。ハッシュ結果の任意の部分またはハッシュ結果自体が、間接テーブルをインデックス化するために使用されてもよい。テーブル内の値は、コアまたはプロセッサ識別子によって等、コアまたはプロセッサのうちのいずれかを識別してもよい。いくつかの実施形態では、マルチコアシステムのコアの全てが、テーブル内で識別される。他の実施形態では、マルチコアシステムのコアのポートが、テーブル内で識別される。間接テーブルは、任意の数のバケット、例えば、ハッシュマスクによってインデックス化され得る、2〜128個のバケットを備えてもよい。各バケットは、コアまたはプロセッサを識別する、一連のインデックス値を備えてもよい。いくつかの実施形態では、フローコントローラおよび/またはRSSモジュールは、間接テーブルを変更することによって、ネットワークの平衡を再びとり、ネットワーク負荷の平衡を再びとってもよい。
いくつかの実施形態では、マルチコアシステム575は、RSSドライバまたはRSSモジュール560を含まない。これらの実施形態のうちのいくつかでは、ソフトウェアステアリングモジュール(図示せず)またはシステム内のRSSモジュール560のソフトウェア実施形態が、パケットをマルチコアシステム575内のコア505にステアリングするように、フローディストリビュータ550と連動して、またはその一部として動作することができる。
フローディストリビュータ550は、いくつかの実施形態では、アプライアンス200の上、コア505のうちのいずれか1つの上、およびマルチコアシステム575内に含まれるデバイスまたはコンポーネントのうちのいずれか1つの上の任意のモジュールまたはプログラム内で実行する。いくつかの実施形態では、フローディストリビュータ550’が、第1のコア505A上で実行することができる一方で、他の実施形態では、フローディストリビュータ550’’は、NIC552上で実行することができる。なおも他の実施形態では、フローディストリビュータ550’のインスタンスが、マルチコアシステム575に含まれる各コア505上で実行することができる。本実施形態では、フローディストリビュータ550’の各インスタンスは、コア505を横断してパケットを往復して自動転送するように、フローディストリビュータ550’の他のインスタンスと通信することができる。要求パケットへの応答が、同一のコアによって処理されない場合がある、すなわち、第1のコアが要求を処理する一方で、第2のコアが応答を処理する、状況が存在する。これらの状況では、フローディストリビュータ550’のインスタンスは、パケットを傍受し、それを所望または正しいコア505に自動転送することができ、すなわち、フローディストリビュータインスタンス550’は、応答を第1のコアに自動転送することができる。フローディストリビュータ550’の複数のインスタンスが、任意の数のコア505およびコア505の任意の組み合わせの上で実行することができる。
フローディストリビュータは、いずれか1つまたはそれを上回るルールまたはポリシに応答して動作してもよい。ルールは、ネットワークパケット、データ、またはデータフローを受信するようにコアまたはパケット処理エンジンを識別してもよい。ルールは、ソースおよび宛先IPアドレスおよびソースおよび宛先ポートの4タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。ルールによって規定されるタプルに合致する、受信されたパケットに基づいて、フローディストリビュータは、パケットをコアまたはパケットエンジンに自動転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび/またはコア間メッセージングを介して、コアに自動転送される。
図5Bは、マルチコアシステム575内で実行するものとしてフローディストリビュータ550を図示するが、いくつかの実施形態では、フローディストリビュータ550は、マルチコアシステム575から遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行することができる。そのような実施形態では、フローディストリビュータ550は、データパケットを取り込み、1つまたはそれを上回るコア505を横断してパケットを分配するように、マルチコアシステム575と通信することができる。フローディストリビュータ550は、一実施形態では、アプライアンス200に向けられているデータパケットを受信し、分布方式を受信されたデータパケットに適用し、データパケットをマルチコアシステム575の1つまたはそれを上回るコア505に分配することができる。一実施形態では、フローディストリビュータ550は、各パケットがマルチコアシステム575のサブノードに向かって標的化されるように、各パケットと関連付けられるメタデータを改変することによって、ルータが特定のコア505を標的化し得るように、ルータまたは他のアプライアンスに含まれることができる。そのような実施形態では、CISCOのvnタグ機構が、適切なメタデータを用いて各パケットを改変する、またはタグ付けするために使用されることができる。
図5Cには、1つまたはそれを上回る処理コア505A−Nを備える、マルチコアシステム575の実施形態が図示されている。要するに、コア505のうちの1つは、制御コア505Aとして指定されることができ、かつ他のコア505のための制御プレーン570として使用されることができる。他のコアが、データプレーン内で動作する二次コアであってもよい一方で、制御コアは、制御プレーンを提供する。コア505A−Nは、グローバルキャッシュ580を共有してもよい。制御コアが、制御プレーンを提供する一方で、マルチコアシステム内の他のコアは、データプレーンを形成または提供する。これらのコアが、ネットワークトラフィック上でデータ処理機能性を果たす一方で、制御は、マルチコアシステムの初期化、構成、および制御を提供する。
さらに図5Cを参照すると、さらに詳細には、コア505A−Nおよび制御コア505Aは、本明細書に説明される任意のプロセッサであることができる。さらに、コア505A−Nおよび制御コア505Aは、図5Cに説明されるシステム575内で機能することが可能な任意のプロセッサであることができる。なおもさらに、コア505A−Nおよび制御コア505Aは、本明細書に説明される任意のコアまたはコアのグループであることができる。制御コアは、他のコアと異なるタイプのコアまたはプロセッサであってもよい。いくつかの実施形態では、制御は、異なるパケットエンジンを動作させてもよい、または他のコアのパケットエンジンと異なって構成されるパケットエンジンを有してもよい。
コアのそれぞれのメモリの任意の部分は、コアによって共有されるグローバルキャッシュに配分されてもよい、またはそれに使用されてもよい。要するに、各コアのメモリのそれぞれの所定の割合または所定の量が、グローバルキャッシュに使用されてもよい。例えば、各コアの各メモリの50%が、共有グローバルキャッシュに専用である、または配分されてもよい。すなわち、図示される実施形態では、制御プレーンコアまたはコア1を除外する各コアの2GBが、28GB共有グローバルキャッシュを形成するために使用されてもよい。構成サービスを介する等の制御プレーンの構成は、共有グローバルキャッシュに使用されるメモリの量を判定してもよい。いくつかの実施形態では、各コアは、グローバルキャッシュによって使用するための異なる量のメモリを提供してもよい。他の実施形態では、いずれか1つのコアは、いかなるメモリも提供しない、またはグローバルキャッシュを使用しない場合がある。いくつかの実施形態では、コアのうちのいずれかはまた、グローバル共有メモリに配分されていないメモリ内にローカルキャッシュを有してもよい。コアはそれぞれ、ネットワークトラフィックの任意の部分をグローバル共有キャッシュに記憶してもよい。コアはそれぞれ、要求または応答で使用するように、任意のコンテンツのためのキャッシュをチェックしてもよい。コアのうちのいずれかは、データフロー、要求、または応答で使用するように、グローバル共有キャッシュからコンテンツを取得してもよい。
グローバルキャッシュ580は、本明細書に説明される任意のメモリまたは記憶要素等の任意のタイプおよび形態のメモリまたは記憶要素であることができる。いくつかの実施形態では、コア505は、所定量のメモリ(すなわち、32GBまたはシステム575にふさわしい任意の他のメモリ量)へのアクセスを有してもよい。グローバルキャッシュ580が、その所定量のメモリから配分されることができる一方で、残りの利用可能なメモリは、コア505の間で配分されることができる。他の実施形態では、各コア505は、所定量のメモリを有することができる。グローバルキャッシュ580は、各コア505に配分されたメモリの量を備えることができる。本メモリ量は、バイトで測定されることができる、または各コア505に配分されたメモリの割合として測定されることができる。したがって、グローバルキャッシュ580は、各コア505と関連付けられるメモリからの1GBのメモリを備えることができる、または各コア505と関連付けられるメモリの20%または半分を備えることができる。いくつかの実施形態では、コア505の一部のみが、メモリをグローバルキャッシュ580に提供する一方で、他の実施形態では、グローバルキャッシュ580は、コア505に割り当てられていないメモリを備えることができる。
各コア505は、ネットワークトラフィックまたはキャッシュデータを記憶するためにグローバルキャッシュ580を使用することができる。いくつかの実施形態では、コアのパケットエンジンは、複数のパケットエンジンによって記憶されるデータをキャッシュして使用するために、グローバルキャッシュを使用する。例えば、図2Aのキャッシュマネージャおよび図2Bキャッシュ機能性は、加速のためにデータを共有するようにグローバルキャッシュを使用してもよい。例えば、パケットエンジンはそれぞれ、HTMLデータ等の応答をグローバルキャッシュに記憶してもよい。コア上で動作するキャッシュマネージャのうちのいずれかは、クライアント要求へのキャッシュ応答を供給するように、グローバルキャッシュにアクセスしてもよい。
いくつかの実施形態では、コア505は、部分的にポートに基づいてデータフローを判定するために使用され得る、ポート配分テーブルを記憶するために、グローバルキャッシュ580を使用することができる。他の実施形態では、コア505は、着信および発信データパケットをダイレクトする場所を判定するためにフローディストリビュータによって使用され得る、アドレスルックアップテーブルまたは任意の他のテーブルまたはリストを記憶するために、グローバルキャッシュ580を使用することができる。コア505は、いくつかの実施形態では、キャッシュ580から読み取ること、およびそれに書き込むことができる一方で、他の実施形態では、コア505は、キャッシュ580から読み取ること、またはそれに書き込むことのみできる。コアは、コア間通信を行うためにグローバルキャッシュを使用してもよい。
グローバルキャッシュ580は、各区分が特定のコア505に専用であることができる、個々のメモリ区分に区分化されてもよい。一実施形態では、制御コア505Aが、より多くの量の利用可能なメモリを受信することができる一方で、他のコア505は、グローバルキャッシュ580への様々な量またはアクセスを受信することができる。
いくつかの実施形態では、システム575は、制御コア505Aを備えることができる。図5Cは、制御コアとしてコア1505Aを図示するが、制御コアは、アプライアンス200またはマルチコアシステム内の任意のコアであることができる。さらに、単一の制御コアのみが描写されているが、システム575は、それぞれ、システムに対するあるレベルの制御を有する、1つまたはそれを上回る制御コアを備えることができる。いくつかの実施形態では、1つまたはそれを上回る制御コアはそれぞれ、システム575の特定の側面を制御することができる。例えば、1つのコアが、いずれの分布方式を使用するかを決定することを制御することができる一方で、別のコアは、グローバルキャッシュ580のサイズを判定することができる。
マルチコアシステムの制御プレーンは、専用管理コアとして、またはマスタコアとしてのコアの指定および構成であってもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの動作および機能性の制御、管理、および協調を提供してもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの初期化および構成を含む、同一コアの間のシステムのメモリの配分および使用の制御、管理、および協調を提供してもよい。いくつかの実施形態では、制御プレーンは、データフローに基づいて、コアへのデータフローの割当およびコアへのネットワークパケットの分布を制御するためのフローディストリビュータを含む。いくつかの実施形態では、制御プレーンコアは、パケットエンジンを起動し、他の実施形態では、制御プレーンコアは、本システムの他のコアの管理および制御に専用である。
制御コア505Aは、どれだけのメモリが各コア505に配分されるべきかを判定するステップ、またはいずれのコア505が特定の機能またはハードウェア/ソフトウェアエンティティをハンドリングするように割り当てられるべきかを判定するステップ等の他のコア505に対するあるレベルの制御を実行することができる。制御コア505Aは、いくつかの実施形態では、制御プレーン570内でこれらのコア505に対する制御を実行してもよい。したがって、制御コア505Aによって制御されないプロセッサが制御プレーン570の外側に存在することができる。制御プレーン570の境界を判定するステップは、システム575内で実行する制御コア505Aまたはエージェントによって、制御コア505Aによって制御される、これらのコア505のリストを維持するステップを含むことができる。制御コア505Aは、以下、すなわち、コアの初期化、コアが利用不可能であるときを判定するステップ、1つのコアが故障したときに負荷を他のコア505に再配分するステップ、いずれの分布方式を実装するかを判定するステップ、いずれのコアがネットワークトラフィックを受信するべきかを判定するステップ、どれだけのキャッシュが各コアに配分されるべきかを判定するステップ、特定の機能または要素を特定のコアに割り当てるかどうかを判定するステップ、コアが相互と通信することを可能にするかどうかを判定するステップ、グローバルキャッシュ580のサイズを判定するステップ、およびシステム575内のコアの機能、構成、または動作の任意の他の判定のうちのいずれかを制御することができる。
F.分散クラスタアーキテクチャを提供するためのシステムおよび方法
前の節で議論されるように、トランジスタ間隔およびCPU速度増加に対する限界を克服するために、多くのCPU製造業者は、単一のより高速のCPUさえも可能なものを超えて性能を改良するように、マルチコアCPUを組み込んでいる。類似する、またはさらなる性能獲得が、単一またはマルチコアのいずれかである複数のアプライアンスを、分散またはクラスタ化アプライアンスとしてともに動作させることによって、得られてもよい。個々のコンピューティングデバイスまたはアプライアンスは、クラスタのノードと称されてもよい。集中型管理システムが、ノードが単一のコンピューティングシステムとして連動することを可能にするように、負荷平衡、分布、構成、または他のタスクを行ってもよい。外部に、またはサーバおよびクライアントを含む、他のデバイスに対して、多くの実施形態では、クラスタは、典型的な個々のアプライアンスの性能を超える性能を伴うものではあるが、単一の仮想アプライアンスまたはコンピューティングデバイスと見なされてもよい。
ここで図6を参照すると、コンピューティングデバイスクラスタまたはアプライアンスクラスタ600のいくつかの実施形態が図示されている。複数のアプライアンス200a−200n、またはデスクトップコンピュータ、サーバ、ラックマウントサーバ、ブレードサーバ、または任意の他のタイプおよび形態のコンピューティングデバイス等の、時として、ノードと称されることもある、他のコンピューティングデバイスが、単一のアプライアンスクラスタ600に結合されてもよい。アプライアンスクラスタと称されるが、多くの実施形態では、クラスタは、限定ではないが、アプリケーションサーバ、ネットワーク記憶サーバ、バックアップサービス、または任意の他のタイプのコンピューティングデバイスとして動作してもよい。多くの実施形態では、アプライアンスクラスタ600は、アプライアンス200、WAN最適化デバイス、ネットワーク加速デバイス、または上記で議論される他のデバイスの機能の多くを果たすために使用されてもよい。
いくつかの実施形態では、アプライアンスクラスタ600は、同じアプライアンス、1つまたはそれを上回るシャーシ内のブレードサーバ、デスクトップまたはラックマウントコンピューティングデバイス、または他のデバイス等のコンピューティングデバイスの同種セットを備えてもよい。他の実施形態では、アプライアンスクラスタ600は、アプライアンスの異なるモデル、混合アプライアンスおよびサーバ、またはコンピューティングデバイスの任意の他のセットを含む、デバイスの異種または混合セットを備えてもよい。これは、アプライアンスクラスタ600が、例えば、新しいモデルまたはデバイスを用いて経時的に拡張またはアップグレードされることを可能にし得る。
いくつかの実施形態では、アプライアンスクラスタ600の各コンピューティングデバイスまたはアプライアンス200は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分布方法は、本明細書で議論されるノード管理および分布方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、1つのアプライアンスがデータを備え、それを複数のノードに配分し、各ノードが処理のためのデータを備え、それを複数のコアに配分する、2層分散システムと考えられてもよい。故に、そのような実施形態では、ノード分布システムは、上記で議論されるようなマスタまたは制御コアによって保護され得るため、個々のコアへのフロー分布を管理する必要がない。
多くの実施形態では、アプライアンスクラスタ600は、シャーシ内の複数のブレードサーバまたは単一のラック内の複数のラックマウントデバイス等、物理的にグループ化されてもよいが、他の実施形態では、アプライアンスクラスタ600は、複数のシャーシ、複数のラック、データセンタ内の複数の部屋、複数のデータセンタ、または任意の他の物理配列で分配されてもよい。故に、アプライアンスクラスタ600は、物理グループではなく、共通構成、管理、および目的を介してグループ化される、仮想アプライアンスと見なされてもよい。
いくつかの実施形態では、アプライアンスクラスタ600は、1つまたはそれを上回るネットワーク104、104’に接続されてもよい。例えば、簡潔に図1Aを再び参照すると、いくつかの実施形態では、アプライアンス200は、1つまたはそれを上回るクライアント102に結合されたネットワーク104と1つまたはそれを上回るサーバ106に結合されたネットワーク104’との間に展開されてもよい。アプライアンスクラスタ600は、同様に、単一のアプライアンスとして動作するように展開されてもよい。多くの実施形態では、これは、アプライアンスクラスタ600の外部の任意のネットワークトポロジ変更を要求しなくてもよく、単一のアプライアンスシナリオからのインストールおよび拡張可能性の容易性を可能にする。他の実施形態では、アプライアンスクラスタ600は、同様に、図1B−1Dに示される、または上記で議論されるように展開されてもよい。なおも他の実施形態では、アプライアンスクラスタは、1つまたはそれを上回るサーバによって実行される複数の仮想マシンまたはプロセスを備えてもよい。例えば、1つのそのような実施形態では、サーバファームは、複数の仮想マシンを実行してもよく、各仮想マシンは、アプライアンス200として構成され、複数の仮想マシンは、アプライアンスクラスタ600として一斉に作用する。さらになおも他の実施形態では、アプライアンスクラスタ600は、アプライアンス200またはアプライアンス200として構成される仮想マシンの混合を備えてもよい。いくつかの実施形態では、アプライアンスクラスタ600は、同一場所に設置されていない複数のアプライアンス200を伴って、地理的に分配されてもよい。例えば、図6を再び参照すると、1つのそのような実施形態では、第1のアプライアンス200aは、データセンタ等の第1の場所に位置してもよく、第2のアプライアンス200bは、中央オフィスまたは企業の本社等の第2の場所に位置してもよい。さらなる実施形態では、そのように地理的に遠隔のアプライアンスは、T1またはT3ポイントツーポイント接続、VPN、または任意の他のタイプおよび形態のネットワーク等の専用ネットワークによって結合されてもよい。故に、同一場所に設置されたアプライアンス200a−200bと比較して、付加的通信待ち時間があり得るが、現場の停電または通信不能状態の場合の信頼性、拡張可能性、または他の利益において利点があってもよい。いくつかの実施形態では、待ち時間の問題は、データフローの地理またはネットワークベースの分布を通して低減させられ得る。例えば、アプライアンスクラスタ600として構成されるが、企業の本社におけるクライアントおよびサーバからの通信が、現場で展開されるアプライアンス200bにダイレクトされてもよい、負荷平衡が、場所によって加重されてもよい、または類似ステップが、いかなる待ち時間も軽減するようにとられることができる。
依然として図6を参照すると、アプライアンスクラスタ600は、クライアントデータプレーン602を介してネットワークに接続されてもよい。いくつかの実施形態では、クライアントデータプレーン602は、クライアントとアプライアンスクラスタ600との間でデータを搬送する、ネットワーク104等の通信ネットワークを備えてもよい。いくつかの実施形態では、クライアントデータプレーン602は、外部ネットワーク104およびアプライアンスクラスタ600の複数のアプライアンス200a−200nをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、1つのそのような実施形態では、ルータが、外部ネットワーク104に接続され、各アプライアンス200a−200nのネットワークインターフェースに接続されてもよい。いくつかの実施形態では、本ルータまたはスイッチは、インターフェースマネージャと称されてもよく、さらに、アプリケーションクラスタ600内のノードを横断してトラフィックを均等に分配するように構成されてもよい。したがって、多くの実施形態では、インターフェースマスタは、アプライアンスクラスタ600の外部にフローディストリビュータを備えてもよい。他の実施形態では、インターフェースマスタは、アプライアンス200a−200nのうちの1つを備えてもよい。例えば、第1のアプライアンス200aは、アプライアンスクラスタ600のための着信トラフィックを受信し、アプライアンス200b−200nのそれぞれを横断してトラフィックを分配する、インターフェースマスタとしての役割を果たしてもよい。いくつかの実施形態では、帰還トラフィックが、同様に、インターフェースマスタとしての役割を果たす第1のアプライアンス200aを介して、アプライアンス200b−200nのそれぞれからフローしてもよい。他の実施形態では、アプライアンス200b−200nのそれぞれからの帰還トラフィックが、ネットワーク104、104’に直接、または外部ルータ、スイッチ、または他のデバイスを介して、伝送されてもよい。いくつかの実施形態では、インターフェースマスタとしての役割を果たさないアプライアンスクラスタのアプライアンス200は、インターフェーススレーブ610A−610Nと称されてもよい。
インターフェースマスタは、種々の方法のうちのいずれかで負荷平衡またはトラフィックフロー分布を行ってもよい。例えば、いくつかの実施形態では、インターフェースマスタは、クラスタのアプライアンスまたはノードを伴って構成されるネクストホップと平等コストマルチパス(ECMP)ルーティングを行う、ルータを備えてもよい。インターフェースマスタは、オープン・ショーテスト・パス・ファースト(OSPF)を使用してもよい。いくつかの実施形態では、インターフェースマスタは、上記で議論されるように、IPアドレスまたは他のパケット情報タプルに基づくハッシュ等のトラフィック分布のためのステートレスハッシュベースの機構を使用してもよい。ハッシュキーおよび/またはソルトが、ノードを横断する均等な分布のために選択されてもよい。他の実施形態では、インターフェースマスタは、リンクアグリゲーション(LAG)プロトコル、または任意の他のタイプおよび形態のフロー分布、負荷平衡、およびルーティングを介して、フロー分布を行ってもよい。
いくつかの実施形態では、アプライアンスクラスタ600は、サーバデータプレーン604を介してネットワークに接続されてもよい。クライアントデータプレーン602と同様に、サーバデータプレーン604は、サーバとアプライアンスクラスタ600との間にデータを搬送する、ネットワーク104’等の通信ネットワークを備えてもよい。いくつかの実施形態では、サーバデータプレーン604は、外部ネットワーク104’およびアプライアンスクラスタ600の複数のアプライアンス200a−200nをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、1つのそのような実施形態では、ルータが、外部ネットワーク104’に接続され、各アプライアンス200a−200nのネットワークインターフェースに接続されてもよい。多くの実施形態では、各アプライアンス200a−200nは、第1のネットワークインターフェースがクライアントデータプレーン602に接続され、第2のネットワークインターフェースがサーバデータプレーン604に接続される、複数のネットワークインターフェースを備えてもよい。これは、付加的セキュリティを提供し、仲介デバイスとしてアプライアンスクラスタ600サーバを有することによって、クライアントおよびサーバネットワークの直接インターフェースを防止し得る。他の実施形態では、クライアントデータプレーン602およびサーバデータプレーン604は、マージされる、または組み合わせられてもよい。例えば、アプライアンスクラスタ600は、クライアント102およびサーバ106とのネットワーク上で非仲介ノードとして展開されてもよい。上記で議論されるように、多くの実施形態では、インターフェースマスタが、サーバおよびネットワーク104’からアプライアンスクラスタの各アプライアンスに通信をルーティングして分配するために、サーバデータプレーン604上に展開されてもよい。多くの実施形態では、クライアントデータプレーン602用のインターフェースマスタおよびサーバデータプレーン604用のインターフェースマスタは、同様に構成されてもよく、上記で議論されるようなECMPまたはLAGプロトコルを行う。
いくつかの実施形態では、アプライアンスクラスタ600内の各アプライアンス200a−200nは、内部通信ネットワークまたはバックプレーン606を介して接続されてもよい。バックプレーン606は、ノード間またはアプライアンス間制御および構成メッセージ用、およびトラフィックのノード間自動転送用の通信ネットワークを備えてもよい。例えば、第1のアプライアンス200aがネットワーク104を介してクライアントと通信し、第2のアプライアンス200bがネットワーク104’を介してサーバと通信する、一実施形態では、クライアントとサーバとの通信は、クライアントから第1のアプライアンスへ、バックプレーン606を介して第1のアプライアンスから第2のアプライアンスへ、および第2のアプライアンスからサーバへ、および逆も同様にフローしてもよい。他の実施形態では、バックプレーン606は、インターフェース一時停止またはリセットコマンド、フィルタリングまたは圧縮ポリシ等のポリシ更新、バッファステータス、スループット、またはエラーメッセージ等のステータスメッセージ、または任意の他のタイプおよび形態のノード間通信等の構成メッセージを搬送してもよい。いくつかの実施形態では、RSSキーまたはハッシュキーは、クラスタ内の全てのノードによって共有されてもよく、バックプレーン606を介して通信してもよい。例えば、第1のノードまたはマスタノードは、始動またはブート等のRSSキーを選択してもよく、他のノードによって使用するために本キーを分配してもよい。いくつかの実施形態では、バックプレーン606は、各アプライアンス200のネットワークインターフェースの間にネットワークを備えてもよく、ルータ、スイッチ、または他のネットワークデバイス(図示せず)を備えてもよい。したがって、いくつかの実施形態では、上記で議論されるように、クライアントデータプレーン602用のルータが、アプライアンスクラスタ600とネットワーク104との間に展開されてもよく、サーバデータプレーン604用のルータが、アプライアンスクラスタ600とネットワーク104’との間に展開されてもよく、バックプレーン606用のルータが、アプライアンスクラスタ600の一部として展開されてもよい。各ルータは、各アプライアンス200の異なるネットワークインターフェースに接続してもよい。他の実施形態では、1つまたはそれを上回るプレーン602−606が、組み合わせられてもよい、またはルータまたはスイッチが、複雑性を低減させる、または本システムから余分なデバイスを排除するために、アプライアンス200a−200nの異なるインターフェースに接続し、同時に複数のルーティング機能を果たすように、複数のLANまたはVLANに分割されてもよい。
いくつかの実施形態では、制御プレーン(図示せず)は、管理者またはユーザからアプライアンスクラスタ600への構成および制御トラフィックを通信してもよい。いくつかの実施形態では、制御プレーンは、第4の物理ネットワークであってもよい一方で、他の実施形態では、制御プレーンは、プレーン602−606のうちの1つを介したVPN、トンネル、または通信を備えてもよい。したがって、制御プレーンは、いくつかの実施形態では、仮想通信プレーンと見なされてもよい。他の実施形態では、管理者は、RS−232等のシリアル通信インターフェース、USB通信インターフェース、または任意の他のタイプおよび形態の通信等の別個のインターフェースを通して、構成および制御を提供してもよい。いくつかの実施形態では、アプライアンス200は、ボタンおよびディスプレイを伴うフロントパネル、ネットワーク104、104’またはバックプレーン606を介した構成用のウェブサーバ、または任意の他のタイプおよび形態のインターフェース等の管理用のインターフェースを備えてもよい。
いくつかの実施形態では、上記で議論されるように、アプライアンスクラスタ600は、内部フロー分布を含んでもよい。例えば、これは、ノードが外部デバイスに透過的に結合/そこから離脱することを可能にするように行われてもよい。外部フローディストリビュータがそのような変更に応じて繰り返し再構成される必要性をなくすために、ノードまたはアプライアンスが、ネットワークパケットをクラスタ600内の正しいノードにステアリングするためにインターフェースマスタまたはディストリビュータとして作用してもよい。例えば、いくつかの実施形態では、(故障、リセット、または類似する場合に応じて等)ノードがクラスタから離脱するとき、外部ECMPルータが、ノードの変更を識別してもよく、かつトラフィックを再分配するように全てのフローを再ハッシュしてもよい。これは、全ての接続をドロップしてリセットさせ得る。同一のドロップおよびリセットが、ノードが再結合するときに起こり得る。いくつかの実施形態では、信頼性のために、アプライアンスクラスタ600内の2つのアプライアンスまたはノードが、接続ミラーリングを介して外部ルータから通信を受信してもよい。
多くの実施形態では、アプライアンスクラスタ600のノードの間のフロー分布は、アプライアンスのコアの間のフロー分布について上記で議論される方法のうちのいずれかを使用してもよい。例えば、一実施形態では、マスタアプライアンス、マスタノード、またはインターフェースマスタは、着信トラフィック上のToeplitzハッシュ等のRSSハッシュを計算し、ハッシュの選好リストまたは分布テーブルを参考にしてもよい。多くの実施形態では、フローディストリビュータは、トラフィックを自動転送するときに、ハッシュを受信側アプライアンスに提供してもよい。これは、ノードがコアへのフロー分布のためのハッシュを再計算する必要性を排除し得る。多くのそのような実施形態では、アプライアンスの間の分布のためのハッシュを計算するために使用されるRSSキーは、グローバルRSSキーと称され得る、コアの間の分布のためのハッシュを計算するために使用されるものと同一のキーを備えてもよく、計算されたハッシュの再利用を可能にする。いくつかの実施形態では、ハッシュは、ポート番号、IPアドレスを含むインターネット層ヘッダ、または任意の他のパケットヘッダ情報を含む、トランスポート層ヘッダの入力タプルを用いて計算されてもよい。いくつかの実施形態では、パケット本体情報が、ハッシュに利用されてもよい。例えば、無損失TCPヘッダを介してカプセル化される損失性UDPトラフィック等の1つのプロトコルのトラフィックが、別のプロトコルのトラフィック内にカプセル化される、一実施形態では、フローディストリビュータは、カプセル化プロトコル(例えば、TCPヘッダ)ではなく、カプセル化されたプロトコル(例えば、UDPヘッダ)のヘッダに基づいて、ハッシュを計算してもよい。同様に、パケットがカプセル化され、暗号化または圧縮される、いくつかの実施形態では、フローディストリビュータは、暗号解読または解凍後のペイロードパケットのヘッダに基づいて、ハッシュを計算してもよい。なおも他の実施形態では、ノードは、構成または管理目的のため等に、内部IPアドレスを有してもよい。これらのIPアドレスへのトラフィックは、ハッシュされて分配される必要はなく、むしろ、宛先アドレスを所有するノードに自動転送されてもよい。例えば、アプライアンスは、1.2.3.4のIPアドレスにおいて構成または管理目的のために起動するウェブサーバまたは他のサーバを有してもよく、いくつかの実施形態では、その内部IPアドレスとして、本アドレスをフローディストリビュータに登録してもよい。他の実施形態では、フローディストリビュータは、内部IPアドレスをアプライアンスクラスタ600内の各ノードに割り当ててもよい。アプライアンスの内部IPアドレス(1.2.3.4)にダイレクトされる、管理者によって使用されるワークステーション等の外部クライアントまたはサーバから着信するトラフィックは、ハッシングを要求することなく、直接自動転送されてもよい。
G.複数のネットワークパケットスケジューラを同期させるためのシステムおよび方法
前節で議論されるように、nCore技術およびアーキテクチャの複数のコアは、同時に、および/または並行して、複数のパケットエンジンを起動させることを可能にする。1つまたはそれを上回るプロセッサコアを横断した作業、タスク、負荷、またはネットワークトラフィック分布は、機能並列性、データ並列性、もしくはフローベースのデータ並列性等の並列性のタイプまたは並列コンピューティング方式に従って遂行されてもよい。ネットワークパケットスケジューラは、パケットの分布を管理するために使用されてもよい。ネットワークパケットスケジューラは、多くの場合、ヒープ/スタック動作を使用して、ネットワークトラフィックを優先順位付けさせ、単一スケジューラが管理する必要があるパケットの数を低減させ、ヒープ/スタックサイズを低減させ、CPU上の歪みを低減させるために実装される。複数のネットワークパケットスケジューラを使用して、同一数のパケットを管理することは、より小さいヒープ/スタック、したがって、より少ないCPU使用量をもたらす。しかしながら、これは、複数のネットワークパケットスケジューラが同期されることを確実にする必要性をもたらす。
パケットスケジューラの同期化は、実際のパケットを受信するスケジューラによって他のスケジューラに提供される、ブロードキャストされた仮想パケットの使用を通して実装されてもよい。各スケジューラは、パケットをその待ち行列に追加する(例えば、実際のパケットを受信するスケジューラは、実際のパケットをその待ち行列に追加し、相互のスケジューラは、仮想パケットをその対応する待ち行列に追加する)。各スケジューラの待ち行列は、同期化において高度化され得、実際のパケットは、出力バッファまたはネットワークインターフェースに提供され、仮想パケットは、破棄される。それに応じて、1つのみの「実際の」パケットが、任意の1回において、同期された待ち行列から出力され、競合および輻輳を回避するであろう。
ここで図7Aを参照すると、一実施形態による、仮想パケットを受信するための方法700のフローチャートが、描写される。いくつかの実施形態では、方法700は、ステップ702において、パケットを受信するステップと、ステップ704において、パケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップとを含む。パケットが、仮想パケットであるとき(ステップ704、仮想)、いくつかの実施形態では、方法700は、ステップ706において、仮想パケットを仮想接続に伝送するステップと、ステップ708において、仮想パケットを待ち行列に入れるステップとを含む。パケットは、ネットワークパケットであるとき(ステップ704、ネットワーク)、いくつかの実施形態では、方法700は、ステップ710において、ネットワークパケットを待ち行列に入れるステップを含む。いくつかの実施形態では、方法700は、ステップ712において、仮想パケットまたはネットワークパケットを伝送のためのバッファ内の次のパケットとしてスケジューリングするステップと、ステップ714において、次のパケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップとを含む。次のパケットが仮想パケットであるとき(ステップ714、仮想)、いくつかの実施形態では、方法700は、ステップ716において、仮想パケットを破棄するステップを含む。次のパケットが、ネットワークパケットであるとき(ステップ714、ネットワーク)、いくつかの実施形態では、方法700は、ステップ718において、ネットワークパケットを伝送するステップを含む。いくつかの実施形態では、方法700は、ステップ720において、さらなるパケットが存在するかどうかを判定するステップと、ステップ712において、さらなるパケットが存在することの判定に応答して、次のパケットをスケジューリングすることに戻るステップと、ステップ722において、さらなるパケットが存在しないことの判定に応答して、終了するステップとを含む。
ステップ702においてパケットを受信するステップは、いくつかの実施形態では、第1のネットワークパケットスケジューラによって、1つまたはそれを上回る他のネットワークパケットスケジューラから、複数のトラフィッククラスのトラフィッククラス毎に仮想パケットを受信し、ネットワークパケットの相対的伝送優先順位を定義し、該1つまたはそれを上回る他のネットワークパケットスケジューラによって受信されたネットワークパケットに対応させるステップ、または第1のネットワークパケットスケジューラによって、複数のトラフィッククラスの第1のトラフィッククラスのネットワークパケットを受信するステップを含んでもよい。例えば、一実装では、2つのトラフィッククラス(例えば、C1、C2)と、3つのネットワークパケットスケジューラ(例えば、S1、S2、S3)とが存在する場合、スケジューラS1は、スケジューラS2およびS3がクラス毎にネットワークパケットを受信し、合計4つの仮想パケット(例えば、C1−S2、C1−S3、C2−S2、C2−S3)を受信したことに応答して、スケジューラS2およびスケジューラS3のそれぞれからのクラスC1のための仮想パケットと、スケジューラS2およびS3のそれぞれからのクラスC2のための仮想パケットとを受信するであろう。スケジューラS2およびS3は、同様に、仮想パケットをS1(例えば、C1−S1、C2−S1)ならびに他のスケジューラ(例えば、C1−S3、C2−S3;またはC1−S2、C2−S2)から受信するであろう。仮想パケットは、複数のネットワークパケットスケジューラを同期させ、各ネットワークパケットスケジューラに、相互のネットワークパケットスケジューラがハンドリングしているネットワークパケットの数のカウントまたは集計を提供することに役立つために使用される。これは、ネットワークパケットが異なるトラフィッククラスであるとき、特に重要である。いくつかのネットワークパケットは、より高い伝送優先順位を有するため、いくつのネットワークパケットがどの優先順位を有するかを把握することは、パケットがその優先順位に従って伝送されることを確実にすることに役立つ。いくつかの実施形態では、仮想パケットを受信するステップはさらに、第1のネットワークパケットスケジューラによって、相互のネットワークパケットスケジューラから、トラフィッククラスのペアリング毎に仮想パケットを受信し、さらに、トラフィッククラスの伝送のための絶対帯域幅限界およびトラフィッククラスのための絶対帯域幅限界を伝送するネットワークリンクを定義するステップを含む。言い換えると、各仮想パケットは、ボトルネックリンク−トラフィッククラスペアリングを表す。
ステップ704において、パケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップは、いくつかの実施形態では、第1のネットワークパケットスケジューラによって、受信されたパケットが仮想パケットであるかまたはネットワークパケットであるかを判定するステップを含む。仮想パケットは、ネットワークパケットスケジューラを同期させるために使用され、実際の伝送のために意図されるものではないため、仮想パケットは、伝送のために意図されるネットワークパケットと区別される。加えて、仮想パケットは、プロセッサまたはアプリケーションではなく、他のネットワークパケットスケジューラから送信されるため、仮想パケットは、異なってハンドリングされる。
パケットが仮想パケットであることの判定に応答して、パケットは、ステップ706において、仮想接続に伝送または提供されてもよく、いくつかの実施形態では、第1のネットワークパケットスケジューラによって、各仮想パケットをトラフィッククラス毎に作成される複数の仮想接続の仮想接続の中に伝送するステップを含む。仮想パケットが、他のネットワークパケットスケジューラから受信されると、接続が、仮想パケットを入手するために確立される必要がある。いくつかの実施形態では、これらの接続は、仮想であって、異なるトラフィッククラスの受信された仮想パケットは、異なるトラフィッククラス毎に対応する仮想接続に伝送される。例えば、スケジューラS1は、それぞれ、C1およびC2の仮想パケットを受信するために、仮想接続VC1およびVC2を作成するであろう。
ステップ708において、仮想パケットを待ち行列に入れ、710において、ネットワークパケットを待ち行列に入れるステップは、いくつかの実施形態では、それぞれ、第1のネットワークパケットスケジューラによって、仮想パケットまたはネットワークパケットを複数のトラフィッククラスに対応する複数の待ち行列の第1の待ち行列の中に入れるステップを含んでもよい。いくつかの実施形態では、ステップ708において、仮想パケットを待ち行列に入れるステップは、第1のネットワークパケットスケジューラによって、待ち行列内のネットワークパケットの数と第1のトラフィッククラスの仮想パケットの数との和が、待ち行列の最大サイズを超えることに応答して、第1のトラフィッククラスのための各仮想パケットを第1の待ち行列の中に入れるステップを含んでもよい。例えば、スケジューラS1は、それぞれ、トラフィッククラスC1およびC2のパケットを待ち行列に入れるための待ち行列Q1ならびにQ2を有し得る。最大待ち行列サイズに到達すると、仮想パケットは、依然として、待ち行列に入れられる。例えば、スケジューラS1が、仮想パケットC1−S2、C1−S3、およびネットワークパケットC1を受信し、ともにクラスC1の合計3つのパケットを構成すると仮定する。待ち行列Q1は、3の待ち行列サイズを有し、すでに1つのネットワークパケットが待ち行列内に存在し、2つのさらなるパケットのための空間が残っていると仮定する。スケジューラS1は、C1の新しいネットワークパケットを待ち行列Q1内に記憶し、1つのさらなるパケットのための空間を残してもよい。しかしながら、2つの残りのパケットは、仮想であるため、それらは両方とも、待ち行列に入れられる。仮想パケットは、本質的に、小プレースホルダであって、有意な処理時間または任意の伝送時間を要求しないため、本件における待ち行列のオーバーフローは、スケジューラの動作に悪影響を及ぼさない。
ステップ712において、次のパケットをスケジューリングするステップは、いくつかの実施形態では、第1のネットワークパケットスケジューラによって、ネットワークパケットまたは仮想パケットを伝送のためのバッファ内の次のパケットとしてスケジューリングするステップを含んでもよい。ラウンドロビンアルゴリズム、加重ラウンドロビン、FIFO、最短残り時間アルゴリズム、または任意の他のタイプおよび形態のスケジューリングアルゴリズム等、種々のスケジューリングアルゴリズムが、次に伝送される複数のパケットの中のパケットを判定するために使用されてもよい。単一待ち行列に関して、スケジューリングは、伝送のための次のパケットが待ち行列内の次のパケットであるため容易である。しかしながら、複数の待ち行列が存在するとき、待ち行列の先頭または後尾におけるどのパケットが伝送のために次のパケットとなるべきかに関して選択が行われる必要がある。例えば、スケジューラS1が、2つの待ち行列Q1およびQ2を有し、各待ち行列内にパケットを有する場合、伝送のための次のパケットのスケジューリングは、実装されるアルゴリズムに従って、待ち行列Q1の先頭のパケットまたは待ち行列Q2の先頭のパケットのいずれかを選択してもよい。例えば、加重公平待ち行列実装では、次のパケットのスケジューリングは、次のパケット伝送のための基準を満たすパケットをスケジューリングするであろう。本スケジューリングは、パケットのタイプから独立する。すなわち、次のパケットのスケジューリングは、先頭におけるパケットが仮想パケットであるかまたはネットワークパケットであるかを考慮しない。
ステップ714において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、バッファ内の次のパケットが仮想パケットであるかまたはネットワークパケットであるかを判定してもよい。仮想パケットは、ネットワークパケットスケジューラを同期させるために使用され、実際の伝送のために意図されないため、仮想パケットは、伝送のために意図されるネットワークパケットと区別される。しかしながら、ステップ712における次のパケットのスケジューリングは、それにもかかわらず、いくつかの実装によると、仮想パケットをスケジューリングし、したがって、次のスケジューリングされたパケットが仮想パケットであるかまたはネットワークパケットであるかの判定が行われる。
ステップ716において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、バッファ内の次のパケットが仮想パケットであることを判定し、第1のネットワークパケットスケジューラによって、バッファ内の次のパケットは、仮想パケットであることの判定に応答して、仮想パケットを破棄してもよい。仮想パケットは、そのような実装において、同期化目的のためだけに使用されたため、破棄されてもよい。仮想パケットは、スケジューリングアルゴリズムに従ってスケジューリングされたため、より低い優先順位を伴うトラフィッククラスのネットワークパケットの前に、次のパケットとしてスケジューリングされている場合があることに留意されたい。例えば、スケジューラS1は、クラスC2のネットワークパケット(P−C2)を受信し、スケジューラS2は、クラスC1のネットワークパケット(P−C1)を受信し、トラフィッククラスC1は、クラスC2より高い優先順位を有すると仮定する。スケジューラS1は、スケジューラS2がP−C1を有することを示すための仮想パケットC1−S2をスケジューラS2から受信し、スケジューラS2は、スケジューラS1がネットワークパケットP−C2を有することを示すための仮想パケットC2−S1をスケジューラS1から受信する。ステップ712における次のパケットのスケジューリングの間、仮想パケットC1−S2、ネットワークパケットP−C2、仮想パケットC2−S1、およびネットワークパケットP−C1は、その個別の待ち行列内の唯一のパケットであると仮定すると、仮想パケットC1−S2は、スケジューラS1のための次のパケットとしてスケジューリングされ、ネットワークパケットP−C1は、スケジューラS2のための次のパケットとしてスケジューリングされるであろう。ステップ714において、スケジューラS1は、次のパケットが仮想パケットC1−S2であることを判定し、仮想パケットC1−S2を破棄し、したがって、任意のデータを伝送しなくてもよい。同時に、スケジューラS2は、次のパケットがネットワークパケットP−C1であることを判定し、スケジューラS1の伝送から競合の任意の可能性を伴わずに、ネットワークパケットP−C1を伝送する。
ステップ718において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、バッファ内の次のパケットがネットワークパケットであることを判定し、第1のネットワークパケットスケジューラによって、次のパケットがネットワークパケットであることの判定に応答して、バッファからのネットワークパケットを伝送してもよい。ネットワークパケットは、スケジューリングアルゴリズムに従ってスケジューリングされたため、より低い優先順位を伴うトラフィッククラスのための仮想パケットの前に、次のパケットとしてスケジューリングされていなければならないことに留意されたい。例えば、スケジューラS1が、クラスC1のネットワークパケット(例えば、ネットワークパケットP−C1)を受信し、スケジューラS2が、クラスC2のネットワークパケット(例えば、ネットワークパケットP−C2)を受信し、トラフィッククラスC1が、クラスC2より高い優先順位を有すると仮定する。スケジューラS1は、スケジューラS2がネットワークパケットP−C2を有することを示すための仮想パケットC2−S2をスケジューラS2から受信し、スケジューラS2は、スケジューラS1がネットワークパケットP−C1を有することを示すための仮想パケットC1−S1をスケジューラS1から受信する。ステップ712における次のパケットのスケジューリングの間、仮想パケットC1−S1、ネットワークパケットP−C1、仮想パケットC2−S2、およびネットワークパケットP−C2が、その個別の待ち行列内の唯一のパケットであると仮定すると、ネットワークパケットP−C1は、スケジューラS1のための次のパケットとしてスケジューリングされ、仮想パケットC1−S1は、スケジューラS2のための次のパケットとしてスケジューリングされるであろう。ステップ714が行われると、スケジューラS1は、次のパケットがネットワークパケットP−C1であることを判定し、ネットワークパケットP−C1を伝送してもよい。同時に、スケジューラS2は、次のパケットが仮想パケットC1−S1であることを判定し、仮想パケットC1−S1を破棄し、したがって、任意のデータを伝送しなくてもよい。
ステップ720において、いくつかの実施形態では、第1のネットワークパケットスケジューラが、任意のさらなるパケットが待ち行列内に残っているかどうかを判定してもよい。依然として、パケットが待ち行列内に残っている場合、ステップ712において、次のパケットが、スケジューリングされてもよい。さらなるパケットが存在しない場合、方法700は、パケットがステップ702において再び受信されるまで、終了する。
ここで図7Bを参照すると、一実施形態による、仮想パケットをブロードキャストするための方法730のフローチャートが、描写される。仮想パケットをブロードキャストする第1のネットワークパケットスケジューラは、他のネットワークパケットスケジューラが、ネットワークパケットスケジューラが伝送するためのネットワークパケットを有するかどうかを把握することを可能にし、したがって、ネットワークパケット伝送の同期化を可能にする。いくつかの実施形態では、方法730は、ステップ732において、ネットワークパケットを待ち行列に入れるステップと、ステップ734において、ノードを選択するステップと、ステップ736において、ノードに対するバイトカウントを判定するステップと、ステップ738において、ノードに対するバイトカウントが非ゼロであるかどうかを判定するステップとを含む。ノードに対するバイトカウントが、非ゼロではないとき、例えば、バイトカウントが、ゼロであるとき、方法730は、ステップ734におけるノードを選択するステップに戻るステップを含む。ノードに対するバイトカウントが非ゼロであるとき、方法730は、仮想パケット740を生成するステップと、仮想パケット742をブロードキャストするステップと、ステップ734に戻るステップとを含む。
ステップ732において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、異なるトラフィッククラスの着信ネットワークパケットをトラフィッククラス毎に複数のノードにおいて待ち行列に入れてもよい。ネットワークパケットスケジューラは、ネットワークパケットのスケジューリングおよび伝送を行ってもよい。例えば、各1つのクラスC1、C2、およびC3(例えば、ネットワークパケットP−C1、P−C2、P−C3)の3つのネットワークパケットに関して、ステップ732は、ネットワークパケットP−C1をノードN1に、ネットワークパケットP−C2をノードN2に、およびネットワークパケットP−C3をノードN3おいて待ち行列に入れるステップを含んでもよい。トラフィッククラス、したがって、ノードは、ポート、インターフェース、または発信プログラム、もしくは任意の他のそのようなパラメータ等の種々のパラメータに基づいて、分散または選択されてもよい。
ステップ734において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、トラフィッククラス毎に複数のノードの第1のノードを選択してもよい。いくつかの実施形態では、ステップ734は、第1のネットワークパケットスケジューラによって、第1のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスに対応するノードを選択し、さらに、トラフィッククラスの伝送のための絶対帯域幅限界を定義するステップを含んでもよい。例えば、階層は、IPアドレス、プロトコル、およびアプリケーションタイプの組み合わせに基づいてもよい。例えば、トラフィッククラス階層は、トラフィッククラスC1、C1.1、C1.2、C2、C2.1、C2.2を有してもよく、クラスC1.1およびC1.2は、C1のサブクラスであって、クラスC2.1および2.2は、C2のサブクラスである。ノードN1.1、N1.2、N2.1、およびN2.2は、最下層トラフィッククラスC1.1、C1.2、C2.1、C2.2に対応するノードであってもよく、ノードN1およびN2は、内側ノードである。そのような実装では、待ち行列に入れるステップは、最下層トラフィッククラス(例えば、N1.1、N1.2、N2.1、およびN2.2)に対応するノードにおいて生じてもよく、ステップ734において、ノードN1.1等の第1のノードが、選択されてもよい。
ステップ736において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、第1のノードが複数のトラフィッククラスの第1のトラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定してもよい。例えば、スケジューラS1は、サイズ1のネットワークパケットP−C1と、サイズ2のネットワークパケットP−C1と、サイズ3のネットワークパケットP−C1とを受信すると仮定する(サイズは、バイト、キロバイト、ブロック、最大伝送単位、または任意の他の単位であってもよく、具体的単位を参照せずに、一般的例証のためにここでは使用される)。受信されたネットワークパケットの総サイズは、6(1+2+3=6)であるため、ステップ736において、スケジューラは、ノードN1のための非ゼロバイトカウントを識別してもよい。ノードは、トラフィッククラスに対応するため、ノードN1に対するバイトカウントを判定するとき、第1のトラフィッククラスのネットワークパケットのみが、検討される。いくつかの実施形態では、ステップ736はさらに、第1のネットワークパケットスケジューラによって、第1のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスに対応するノードが、最下層トラフィッククラスの非ゼロバイトカウントの総サイズの受信されたネットワークパケットを有することを判定するステップを含む。
ステップ738において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、ステップ736において判定されたバイトカウントが非ゼロであるかどうかを判定してもよい。バイトカウントが非ゼロである場合、方法730は、ステップ740において、仮想パケットの生成に進んでもよい。バイトカウントが非ゼロではない、例えば、バイトカウントがゼロである場合、方法730は、ステップ734に戻り、複数のノードの次のノードを選択してもよい。例えば、ノードN1が、ネットワークパケットを有していない場合、ステップ736において、スケジューラは、ゼロのN1に対するバイトカウントを判定し、ステップ734に戻ってもよい(例えば、次のノードN2およびクラスC2の総サイズのネットワークパケットのノードに対するバイトカウントを判定する)。
ステップ740において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、第1のトラフィッククラスのための仮想パケットの最後のブロードキャスト以降または第1のノードの最後の判定以降の周期の間に待ち行列に入れられた第1のトラフィッククラスの着信ネットワークパケットのバイト数の識別子を含む、第1のトラフィッククラスのための仮想パケットを生成してもよい(ステップ734において)。例えば、時間T1において、第1のネットワークパケットスケジューラS1は、サイズ1キロバイトの1つのネットワークパケットP1−C1を有し、1キロバイトの識別子を伴うトラフィッククラスC1のための仮想パケットをブロードキャストしている場合がある(そのような識別子は、例えば、10ビット数を表す1キロバイトのデータより有意に小さくてもよい)。T1の後の時間T2において、スケジューラS1は、サイズ2キロバイトの1つのネットワークパケットP2−C1を待ち行列に入れてもよい。ステップ740において、仮想パケットは、最後のブロードキャスト以降に待ち行列に入れられたクラスC1の着信ネットワークパケットのバイト数(例えば、ネットワークパケットP2−C1のサイズ)を示すための2キロバイト(例えば、11ビット数)の識別子を含め、第1のトラフィッククラスのために生成されてもよい。いくつかの実施形態では、第1のネットワークパケットスケジューラは、第1のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスのための仮想パケットの最後のブロードキャスト以降または最下層トラフィッククラスに対応するノードの最後の判定以降の周期の間に待ち行列に入れられた最下層トラフィッククラスの着信ネットワークパケットのバイト数の識別子を含む、最下層トラフィッククラスのための仮想パケットを生成してもよい。
ステップ742において、いくつかの実施形態では、第1のネットワークパケットスケジューラは、第1のノードが非ゼロバイトカウントを有することの判定に応答して、第1のトラフィッククラスのための仮想パケットを複数のネットワークパケットスケジューラの相互のネットワークパケットスケジューラにブロードキャストしてもよい。例えば、前述の実施例を継続すると、第1のネットワークパケットスケジューラは、クラスC1のための仮想パケットを、2キロバイト(例えば、11ビット値)の識別子とともに、相互のネットワークパケットスケジューラS2およびS3にブロードキャストしてもよい。方法734は、次いで、ステップ734に戻り、次のノードを判定するであろう。例えば、トラフィッククラスC1のための仮想パケットをブロードキャストするステップ後、第1のネットワークパケットスケジューラは、ステップ734において、次のノード(例えば、ノードN2)を選択し、ステップ736において、ノードに対するバイトカウントを判定してもよい等と続く。
いくつかの実施形態では、ステップ742において、第1のネットワークパケットスケジューラは、第1のネットワークパケットスケジューラによって、最後のブロードキャスト以降の周期の間に第1のトラフィッククラスの着信ネットワークパケットを待ち行列に入れたことに応答して、仮想パケットをブロードキャストしてもよい。例えば、T2後の時間T3において、第1のネットワークパケットスケジューラは、サイズ3キロバイトのクラスC1のネットワークパケットおよびサイズ4キロバイトのクラスC1のネットワークパケットを待ち行列に入れてもよい。スケジューラは、ステップ734において、第1のノードN1を選択し、ステップ736において、ノードN1に対するバイトカウント(例えば、7キロバイト)を判定し、ステップ738において、バイトカウントが非ゼロであることを判定し、ステップ740において、7キロバイトの識別子を伴うクラスC1のための仮想パケットを生成してもよい。仮想パケットは、他のネットワークパケットスケジューラにブロードキャストされてもよい。
いくつかの実施形態では、ステップ742において、第1のネットワークパケットスケジューラは、第1のネットワークパケットスケジューラが恣意的トラフィッククラス階層をサポートすることに応答して、最下層トラフィッククラスのための仮想パケットをブロードキャストしてもよい。例えば、第1のネットワークパケットスケジューラは、ネットワークパケットが対応するノードN1.1において待ち行列に入れられると、トラフィッククラスC1.1のための仮想パケットをブロードキャストしてもよい。
ここで図7Cを参照すると、前述の方法に従ってネットワークおよび仮想パケットを保持する、ネットワークパケットスケジューラおよび待ち行列の実施形態のブロック図が、図示される。2つのパケットエンジンA−B548A−548Bが、例示的目的のために図示されるが、多くの実施形態では、より多くのパケットエンジンが、システム上に存在してもよく、それぞれ、前述のように、マルチコアアプライアンスのコアによって実行される。そのようなパケットエンジンおよびコアは、前述のように、共有メモリバス556を介して接続される、および/または共有グローバルキャッシュ580を利用してもよい。他の実装では、パケットエンジン548Aおよび548Bは、前述のように、マルチアプライアンスクラスタ600内のような異なるアプライアンス上にあってもよい。そのようなパケットエンジンは、通信バックプレーン606を介して通信してもよい。さらに、クラスタ内の各アプライアンスは、複数のコアおよび複数のパケットエンジンを含んでもよい。それに応じて、図7Cに図示されるパケットエンジン548A−548Bは、同一デバイスまたは異なるデバイス上にあってもよい。
各パケットエンジン548は、概して、パケットスケジューラ750、スケジューラ、ネットワークスケジューラ、または任意の他のそのような用語と称される、パケットスケジューラ750A−750Bを実行してもよい。スケジューラ750は、前述のように、待ち行列752−756内のパケットをスケジューリングし、仮想パケット760を生成し、他のパケットエンジンにブロードキャストするためのアプリケーション、デーモン、サービス、サーバ、ルーチン、または他の実行可能論理であってもよい。パケットエンジン548の一部として示されるが、多くの実装では、スケジューラ750は、別個のプロセッサまたはスレッドとして起動してもよい。
各パケットエンジン548は、1つまたはそれを上回るパケット待ち行列752−756を維持してもよい。各待ち行列は、ネットワークインターフェースによる伝送のためのネットワークパケットおよび/または仮想パケットを記憶するためのFIFOバッファもしくは類似メモリ記憶要素を含んでもよい。パケットエンジン548の一部として示されるが、多くの実装では、各待ち行列752−756は、デバイスの共有メモリの一部、ネットワークインターフェースのメモリの一部、または他のそのような記憶場所を含んでもよい。待ち行列は、設定もしくは固定サイズを有する、または可変サイズを有してもよい。複数の待ち行列は、示されるように、前述のような異なるトラフィッククラスまたはタイプのために存在してもよい。3つの待ち行列が、各パケットエンジン上に示されるが、多くの実装では、各パケットエンジンは、より多いまたはそれを上回る少ない待ち行列を有してもよい。
前述のように、各待ち行列は、ネットワークパケット758A−758Cおよび/または対応する仮想パケット760A−760Cを保持してもよい。概して、ネットワークパケット758と称される、ネットワークパケット758A−758Cは、電子メール(例えば、SMTP/TCP/IP)、ウェブブラウジング(例えば、HTTP/TCP/IP)、ボイスオーバーIP(例えば、RTP/UDP/IP)、または任意の他のそのような目的のためのパケットを含む、任意のサイズ、タイプ、またはプロトコルであってもよい。各待ち行列は、対応する優先順位のパケットを記憶してもよく、パケットは、各待ち行列のための優先順位に従って、待ち行列からネットワークインターフェースに提供されてもよい。例えば、待ち行列Aが、待ち行列Cより高い優先順位である、待ち行列Bより高い優先順位である、1つのそのような実装では、最大4つのパケットが、待ち行列Aから伝送され、次いで、待ち行列Bから最大2つが伝送され、次いで、待ち行列Cから最大1つ伝送されてもよい。他の優先順位平衡方法も、優先順位およびトラフィッククラスに応じて使用されてもよい。
示されるように、各ネットワークパケット758A−758C毎に、対応する仮想パケット760A−760Cが、他のパケットスケジューラの待ち行列内に記憶される。例えば、ネットワークパケットA758Aは、パケットスケジューラ750Aの待ち行列A752A内に記憶される。対応する仮想パケットA760Aは、パケットスケジューラ750Bの待ち行列A752B内に記憶される。図7Aに関連して前述のように、仮想パケット760Aは、ネットワークパケットA758Aの受信に応じて、パケットスケジューラ750Aによって作成され、その待ち行列内に入れるために他のパケットエンジンにブロードキャストされる。
前述のように、図7Dを簡単に参照すると、仮想パケット760Aの実施形態の略図が、図示される。パケットは、TCP/IPヘッダ、UDP/IPヘッダ、もしくは類似ヘッダ等のヘッダを含んでもよい、または仮想パケットのためだけに利用される軽量ヘッダを有してもよい(仮想パケットが任意の場所に伝送されないため、オーバーヘッドを除去するため)。例えば、1つのそのような実装では、ヘッダは、パケットを仮想パケットとして識別し、随意に、仮想パケットを作成または発信したパケットスケジューラを識別する、ストリングであってもよい。仮想パケット760Aは、クラスまたはタイプ識別子を含み、待ち行列内に適切に入れられることを可能にしてもよい。仮想パケット760Aはまた、対応するネットワークパケット758Aのサイズまたは長さを含んでもよい。いくつかの実装では、サイズまたは長さは、ネットワークパケットの長さを識別する、ビットストリングまたはフィールドであってもよい。例えば、1MBのネットワークパケットを前提とすると、仮想パケットは、長さを10ビット数として識別してもよい。他の実装では、サイズまたは長さは、対応するネットワークパケットの長さと長さが等しい、フィールドまたはペイロードであってもよい。例えば、1MBのネットワークパケットを前提とすると、仮想パケットは、ヌルまたはランダムデータの1MBのペイロードを有してもよい。これは、仮想パケットが待ち行列内の同一量の空間を「埋める」ことを可能にするために行われ得る。さらなる実装では、仮想パケットのペイロードの長さは、ヘッダおよびペイロードから仮想パケットのヘッダの長さを差し引いたものを含む、ネットワークパケットの全長と等しくてもよい(前述のように、より短くてもよい)。例えば、64ビットヘッダおよび500ビットペイロードを伴うネットワークパケットを前提として、軽量16ビットヘッダを伴う仮想パケットは、548ビット「ヌル」ペイロードを有してもよい。そのような実装では、各パケットスケジューラは、待ち行列に入れられたパケットがネットワークパケット(その場合、ビットは、実際には、ネットワークインターフェースに提供される)または仮想パケット(その場合、ビットは、破棄される)であるかどうかにかかわらず、ビットをその待ち行列からネットワークインターフェースに同一ビットレートで「伝送」してもよい。各スケジューラおよび待ち行列は、したがって、同一ビットレートで動作し、完璧な同期化を可能にし得る。仮想パケットのみが、ヌルペイロードではなく、長さ識別子を有する、類似実装では、スケジューラは、単に、長さ識別子内で識別されたビット伝送周期の数を待機してもよい一方、別のスケジューラは、対応する実際のネットワークパケットをネットワークインターフェースに提供し、再び、同期化を確実にする。
図7Cに戻って簡単に参照すると、示されるように、各待ち行列752A−756Bは、ネットワークパケットまたは仮想パケットのいずれかを待ち行列の任意の位置に記憶し、他のパケットエンジンは、ネットワークパケットまたは仮想パケットの他方を同一位置に記憶する。例えば、ネットワークパケットA758Aは、待ち行列A752Aの後尾にある。待ち行列A752A内のその上方は、仮想パケットおよび別のネットワークパケットである(サイズの区別を伴って図示されるが、前述のように、それらは、いくつかの実装では、同一サイズであってもよい)。それに応じて、対応する仮想パケットA760Aは、待ち行列A752Bの後尾にあって、その上には、待ち行列A752A内の仮想パケットおよびネットワークパケットに対応する、ネットワークパケットおよび別の仮想パケットがある。各スケジューラは、したがって、パケットをその待ち行列から同時に「提供」してもよく、1つのみの実際のネットワークパケットが、ネットワークインターフェースに提供され、競合の任意の可能性を回避する。
上記に説明されるシステムは、それらのコンポーネントの任意またはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型機械上に、またはいくつかの実施形態では、分散型システム内の複数の機械上にのいずれかにおいて提供されてもよいことを理解されたい。上記に説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、または任意のそれらの組み合わせを生産するために、プログラミングおよび/またはエンジニアリング技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記に説明されるシステムおよび方法は、1つまたはそれを上回る製造品上もしくは内で具現化される、1つまたはそれを上回るコンピュータ可読プログラムとして提供されてもよい。用語「製造品」は、本明細書で使用されるように、1つまたはそれを上回るコンピュータ可読デバイス、ファームウェア、プログラム可能論理、メモリデバイス(例えば、EEPROM、ROM、PROM、RAM、SRAM等)、ハードウェア(例えば、集積回路チップ、フィールドプログラム可能ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等)、電子デバイス、コンピュータ可読不揮発性記憶ユニット(例えば、CD−ROM、フロッピー(登録商標)ディスク、ハードディスクドライブ等)からアクセス可能であって、その中に内蔵される、コードまたは論理を包含することが意図される。製造品は、ネットワーク伝送ライン、無線伝送媒体、空間を通して伝搬する信号、無線波、赤外線信号等を介して、コンピュータ可読プログラムへのアクセスを提供する、ファイルサーバからアクセス可能であってもよい。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、プロセッサによって実行されるコンピュータ可読媒体内に内蔵されるハードウェア論理ならびにソフトウェアまたはプログラム可能コードを含む。一般に、コンピュータ可読プログラムは、LISP、PERL、C、C++、C#、PROLOG等の任意のプログラミング言語、またはJAVA(登録商標)等の任意のバイトコード言語において実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして1つまたはそれを上回る製造品上もしくはその中に記憶されてもよい。
方法およびシステムの種々の実施形態が説明されたが、これらの実施形態は、例示的であって、説明される方法またはシステムの範囲をいかようにも限定するものではない。当業者は、説明される方法およびシステムの最広範囲から逸脱することなく、説明される方法およびシステムの形態および詳細に変更をもたらすことができる。したがって、本明細書に説明される方法およびシステムの範囲は、例示的実施形態のいずれかによって限定されるべきではなく、付随の請求項およびその均等物に従って定義されるべきである。