本ソリューションの特徴および利点は、同様の参照記号が全体を通して対応する要素を識別する、図面と併せて解釈されると、下記に記載される詳細な説明からより明白となるであろう。図面では、同様の参照記号は、概して、同じ、機能的に類似する、および/または構造的に類似する要素を示す。
下記の種々の実施形態の説明を熟読する目的のために、本明細書の節およびそれらの内容の以下の説明が、役立ち得る。
第A節は、本明細書に説明される実施形態を実践するために有用であり得る、ネットワーク環境およびコンピューティング環境を説明する。
第B節は、コンピューティング環境を遠隔ユーザに配信するためのシステムおよび方法の実施形態を説明する。
第C節は、クライアントとサーバとの間の通信を加速するためのシステムおよび方法の実施形態を説明する。
第D節は、アプリケーション配信コントローラを仮想化するためのシステムおよび方法の実施形態を説明する。
第E節は、マルチコアアーキテクチャおよび環境を提供するためのシステムおよび方法の実施形態を説明する。
第F節は、クラスタ化されたアプライアンスアーキテクチャ環境を提供するためのシステムおよび方法の実施形態を説明する。
第G節は、DNS応答並べ替えのためのシステムおよび方法の実施形態を説明する。
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’は、企業イントラネット等のローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、またはインターネットまたはワールドワイドウェブ等の広域ネットワーク(WAN)であり得る。一実施形態では、ネットワーク104’は、私設ネットワークであってもよく、ネットワーク104は、公衆ネットワークであってもよい。いくつかの実施形態では、ネットワーク104は、私設ネットワークであってもよく、ネットワーク104’は、公衆ネットワークであってもよい。別の実施形態では、ネットワーク104および104’は両方とも、私設ネットワークであってもよい。いくつかの実施形態では、クライアント102は、企業データセンタに位置するサーバ106にネットワーク104を経由したWAN接続を介して通信する企業の支社に位置してもよい。
ネットワーク104および/または104’は、任意のタイプおよび/または形態のネットワークであり、以下のうちのいずれか、すなわち、ポイントツーポイントネットワーク、放送ネットワーク、広域ネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、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(登録商標)デバイスと称される、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製のネットワークデバイスのうちのいずれかを備える。他の実施形態では、アプライアンス200は、F5 Networks, Inc.(Seattle, Washington)製のWebAcceleratorおよびBigIPと称される、製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス205は、Juniper Networks, Inc.(Sunnyvale, California)製のDX加速デバイスプラットフォームおよび/またはSA700、SA2000、SA4000、およびSA6000デバイス等のSSL VPNシリーズのデバイスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス200は、Cisco ACE Application Control Engine Moduleサービスソフトウェアおよびネットワークモジュール、およびCisco AVS Series Application Velocity System等のCisco Systems, Inc.(San Jose, 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(登録商標)と称される、製品実施形態のうちのいずれかである。他の実施形態では、アプライアンス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 Wide Area Network Application Servicesソフトウェアおよびネットワークモジュール、および広域ネットワークエンジンアプライアンス等のCisco Systems, Inc.(San Jose, California)製の任意のWAN関連アプライアンスおよび/またはソフトウェアを含む。
一実施形態では、アプライアンス205は、支社または遠隔オフィス用のアプリケーションおよびデータ加速サービスを提供する。一実施形態では、アプライアンス205は、広域ファイルサービス(WAFS)の最適化を含む。別の実施形態では、アプライアンス205は、共通インターネットファイルシステム(CIFS)プロトコルを介して等、ファイルの配信を加速する。他の実施形態では、アプライアンス205は、メモリおよび/または記憶装置内のキャッシングを提供し、アプリケーションおよびデータの配信を加速する。一実施形態では、アプライアンス205は、ネットワークスタックの任意のレベルにおいて、または任意のプロトコルまたはネットワーク層において、ネットワークトラフィックの圧縮を提供する。別の実施形態では、アプライアンス205は、トランスポート層プロトコル最適化、フロー制御、性能増進、または修正、および/または管理を提供し、WAN接続を経由してアプリケーションおよびデータの配信を加速する。例えば、一実施形態では、アプライアンス205は、トランスポート制御プロトコル(TCP)最適化を提供する。他の実施形態では、アプライアンス205は、任意のセッションまたはアプリケーション層プロトコルのための最適化、フロー制御、性能増進、または修正、および/または管理を提供する。
別の実施形態では、アプライアンス205は、任意のタイプおよび形態のデータまたは情報を、ネットワークパケットのカスタムまたは標準TCPおよび/またはIPヘッダフィールドまたはオプションフィールドに符号化し、存在、機能性、または能力を別のアプライアンス205’にアナウンスする。別の実施形態では、アプライアンス205’は、TCPおよび/またはIPヘッダフィールドまたはオプションフィールドで符号化されたデータを使用して、別のアプライアンス205’と通信してもよい。例えば、アプライアンスは、TCPオプションまたはIPヘッダフィールドまたはオプションを使用し、WAN加速等の機能性を実施する際に、または相互と併せて稼働するために、アプライアンス205、205’によって使用される1つ以上のパラメータを通信してもよい。
いくつかの実施形態では、アプライアンス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(登録商標)またはXenDesktop(登録商標)等のCitrix Systems,
Inc.によるCitrix Workspace SuiteTMの任意の部分、および/またはMicrosoft Corporation製のMicrosoft(登録商標) Windows(登録商標) Terminal Servicesのうちのいずれかを備える。一実施形態では、アプリケーション配信システム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は、任意のタイプおよび/または形態のウェブブラウザ、ウェブベースのクライアント、クライアントサーバアプリケーション、シンクライアントコンピューティングクライアント、ActiveX制御、または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(登録商標)またはXenDesktop(登録商標)等のCitrix Systems, Inc.によるCitrix Workspace SuiteTMの任意の部分、および/またはMicrosoft Corporation製のMicrosoft(登録商標) 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)によって提供されるGoToMeetingTM、Cisco Systems, Inc.(San Jose, California)によって提供されるWebExTM、またはMicrosoft Corporation(Redmond, Washington)によって提供されるMicrosoft Office Live Meeting等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
依然として図1Dを参照すると、ネットワーク環境の実施形態は、監視サーバ106Aを含んでもよい。監視サーバ106Aは、任意のタイプおよび形態の性能監視サービス198を含んでもよい。性能監視サービス198は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および/または管理ソフトウェアおよび/またはハードウェアを含んでもよい。一実施形態では、性能監視サービス198は、1つ以上の監視エージェント197を含む。監視エージェント197は、クライアント102、サーバ106、またはアプライアンス200、205等のデバイス上の性能監視、測定、およびデータ収集アクティビティのための任意のソフトウェア、ハードウェア、またはそれらの組み合わせを含む。いくつかの実施形態では、監視エージェント197は、VisualBasicスクリプトまたはJava(登録商標)script等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント197は、デバイスの任意のアプリケーションおよび/またはユーザに透過的に実行される。いくつかの実施形態では、監視エージェント197は、アプリケーションまたはクライアントに邪魔にならないようにインストールおよび動作される。さらに別の実施形態では、監視エージェント197は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
いくつかの実施形態では、監視エージェント197は、事前決定された頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント197は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント197は、ウェブページの要求またはHTTP応答の受信の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント197は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント197は、任意の監視、測定、または収集されたデータを監視サービス198に報告または提供してもよい。一実施形態では、監視エージェント197は、スケジュールまたは事前決定された頻度に従って、情報を監視サービス198に伝送する。別の実施形態では、監視エージェント197は、イベントの検出に応じて、情報を監視サービス198に伝送する。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、クライアント、サーバ、サーバファーム、アプライアンス200、アプライアンス205、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を実施する。一実施形態では、監視サービス198および/または監視エージェント197は、TCPまたはUDP接続等の任意のトランスポート層接続の監視および性能測定を実施する。別の実施形態では、監視サービス198および/または監視エージェント197は、ネットワーク待ち時間を監視および測定する。さらに1つの実施形態では、監視サービス198および/または監視エージェント197は、帯域幅利用を監視および測定する。
他の実施形態では、監視サービス198および/または監視エージェント197は、エンドユーザ応答時間を監視および測定する。いくつかの実施形態では、監視サービス198は、アプリケーションの監視および性能測定を実施する。別の実施形態では、監視サービス198および/または監視エージェント197は、アプリケーションへの任意のセッションまたは接続の監視および性能測定を実施する。一実施形態では、監視サービス198および/または監視エージェント197は、ブラウザの性能を監視および測定する。別の実施形態では、監視サービス198および/または監視エージェント197は、トランザクションに基づいてHTTPの性能を監視および測定する。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、ボイスオーバーIP(VoIP)アプリケーションまたはセッションの性能を監視および測定する。他の実施形態では、監視サービス198および/または監視エージェント197は、ICAクライアントまたはRDPクライアント等の遠隔表示プロトコルアプリケーションの性能を監視および測定する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、任意のタイプおよび形態のストリーミングメディアの性能を監視および測定する。なおもさらなる実施形態では、監視サービス198および/または監視エージェント197は、ホスト型アプリケーションまたはSoftware−As−A−Service(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および監視エージェント197は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製のEdgeSightと称される、製品実施形態のうちのいずれかを含む。別の実施形態では、性能監視サービス198および/または監視エージェント197は、Symphoniq Corporation(Palo Alto, California)製のTrueView製品一式と称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス198および/または監視エージェント197は、TeaLeaf Technology Inc.(San Francisco, California)製のTeaLeaf CX製品一式と称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス198および/または監視エージェント197は、BMC Software, Inc.(Houston, Texas)製のBMCPerformance ManagerおよびPatrol製品等のビジネスサービス管理製品の任意の部分を含む。
クライアント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(Santa Clara, 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)、同期リンクDRAM(SLDRAM)、直接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と通信する。VESA VLバス、ISAバス、EISAバス、マイクロチャネルアーキテクチャ(MCA)バス、PCIバス、PCI−Xバス、PCI−Expressバス、またはNuBusを含む、種々のバスが、中央処理ユニット101をI/Oデバイス130のうちのいずれかに接続するために、使用されてもよい。I/Oデバイスがビデオディスプレイ124である、実施形態に関して、プロセッサ101は、先進グラフィックスポート(AGP)を使用し、ディスプレイ124と通信してもよい。図1Fは、メインプロセッサ101が、ハイパートランスポート、高速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(登録商標)等のブータブルCD、knoppix.netからGNU/Linux(登録商標)配布として利用可能であるGNU/Linux(登録商標)用のブータブル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等の1つ以上のI/Oデバイス、およびポインティングデバイス127、例えば、マウスまたは光学ペンを制御してもよい。さらに、I/Oデバイスはまた、コンピューティングデバイス100用の記憶装置128および/またはインストール媒体116を提供してもよい。なおも他の実施形態では、コンピューティングデバイス100は、USB接続を提供し、Twintech Industry, Inc.(Los Alamitos, California)製の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 Desktopバス、RS−232シリアル接続、SCSIバス、FireWireバス、FireWire 800バス、イーサネット(登録商標)バス、AppleTalkバス、ギガビットイーサネット(登録商標)バス、非同期転送モードバス、HIPPIバス、Super HIPPIバス、SerialPlusバス、SCI/LAMPバス、FibreChannelバス、またはSerial Attached小型コンピュータシステムインターフェースバス等の外部通信バスとの間のブリッジ170であってもよい。
図1Eおよび1Fに描写される種類のコンピューティングデバイス100は、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。コンピューティングデバイス100は、Microsoft(登録商標)Windows(登録商標)オペレーティングシステムのバージョンのうちのいずれか、Unix(登録商標)およびLinux(登録商標)オペレーティングシステムの異なるリリース、Macintoshコンピュータ用のMacOS(登録商標)の任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専用オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、またはコンピューティングデバイス上で起動し、本明細書に説明される動作を実施することが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。典型的オペレーティングシステムは、とりわけ、全てMicrosoft Corporation(Redmond, Washington)製である、WINDOWS(登録商標) 3.x、WINDOWS(登録商標) 95、WINDOWS(登録商標) 98、WINDOWS(登録商標)
2000、WINDOWS(登録商標) NT 3.51、WINDOWS(登録商標) NT 4.0、WINDOWS(登録商標) CE、およびWINDOWS(登録商標) XP、Apple Computer(Cupertino, Californi)製のMacOS、International Business Machines(Armonk, New York)製のOS/2、およびCaldera Corp.(Salt Lake City, Utah)によって配布される無料で入手可能なオペレーティングシステムであるLinux(登録商標)、または任意のタイプおよび/または形態のUNIX(登録商標)オペレーティングシステムを含む。
他の実施形態では、コンピューティングデバイス100は、本デバイスと一致する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ100は、Palm, Inc.製のTreo 180、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アーキテクチャを有し、電力プロセッサ要素および複数の相乗処理要素であって、要素相互接続バスと称され得る、内部高速バスによってともにリンクされる、電力プロセッサ要素および複数の相乗処理要素を含む、チップを含む。
いくつかの実施形態では、プロセッサは、複数のデータ上で同時に単一の命令を実行するための機能性(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(登録商標)の任意のバージョン、任意の組み込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専用オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、またはアプライアンス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に関連するカーネル空間204を介してアクセス可能な任意のインターフェースおよび/またはデータ、ネットワークスタック267によって受信または伝送されるネットワークトラフィックまたはパケットを備えてもよい。他の実施形態では、カーネルレベルデータ構造は、コンポーネントまたはプロセスの所望の動作を実施するために、コンポーネントまたはプロセス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とアプライアンス200との通信のために設計される任意のプロトコル等の任意の高性能プロトコルの圧縮を提供する。別の実施形態では、マルチプロトコル圧縮エンジン238は、トランザクションTCP(T/TCP)、選択確認応答を伴うTCP(TCP−SACK)、大型ウィンドウを伴うTCP(TCP−LW)、TCP−Vegasプロトコル等の輻輳予測プロトコル、およびTCPスプーフィングプロトコル等の修正されたトランスポート制御プロトコルの任意のペイロード、またはそれを使用する任意の通信を圧縮する。
したがって、マルチプロトコル圧縮エンジン238は、デスクトップクライアント、例えば、Microsoft Outlook、およびOracle、SAP、およびSiebelのような頻用されている企業アプリケーションによって立ち上げられた任意のクライアント等の非ウェブシンクライアント、およびさらにポケットPC等のモバイルクライアントを介して、アプリケーションにアクセスするユーザのための性能を加速する。いくつかの実施形態では、マルチプロトコル圧縮エンジン238は、カーネルモード204内で実行され、ネットワークスタック267にアクセスするパケット処理エンジン240と統合することによって、任意のアプリケーション層プロトコル等のTCP/IPプロトコルによって搬送されるプロトコルのうちのいずれかを圧縮することができる。
概して、パケット処理エンジンまたはパケットエンジンとも称される、高速層2−7統合パケットエンジン240は、ネットワークポート266を介してアプライアンス200によって受信および伝送されるパケットのカーネルレベル処理を管理することに関わる。高速層2−7統合パケットエンジン240は、ネットワークパケットの受信またはネットワークパケットの伝送のため等に、処理中に1つ以上のネットワークパケットを待ち行列に入れるためのバッファを備えてもよい。加えて、高速層2−7統合パケットエンジン240は、1つ以上のネットワークスタック267と通信し、ネットワークポート266を介してネットワークパケットを送信および受信する。高速層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ミリ秒時間間隔において、一方で他の実施形態では、5ミリ秒時間間隔において、なおもその上さらなる実施形態では、3、2、または1ミリ秒時間間隔と同程度に短く、ネットワークパケットを高速層2−7統合パケットエンジン240によって処理させる。高速層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は、任意の好適な手段および/または機構によって、以下のうちの1つ以上のもの、すなわち、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、マルチプロトコル圧縮論理238、パケットエンジン240、デーモンサービス218、およびシェルサービス214とインターフェースをとる。したがって、健全性監視プログラム216は、任意のアプリケーションプログラミングインターフェース(API)を呼び出し、アプライアンス200の任意の部分の状態、ステータス、または健全性を決定してもよい。例えば、健全性監視プログラム216は、周期的にping送信し、またはステータス問い合わせを送信し、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在起動しているかどうかをチェックしてもよい。別の実施例では、健全性監視プログラム216は、任意のプログラム、プロセス、サービス、またはタスクによって提供される任意のステータス、エラー、または履歴ログをチェックし、アプライアンス200の任意の部分との任意の状態、ステータス、またはエラーを決定してもよい。
デーモンサービス218は、連続的に、または背景で起動し、アプライアンス200によって受信される周期的サービス要求を取り扱う、プログラムである。いくつかの実施形態では、デーモンサービスは、適宜、要求を別のデーモンサービス218等の他のプログラムまたはプロセスに転送してもよい。当業者に公知であるように、デーモンサービス218は、ネットワーク制御等の連続的または周期的なシステム全体の機能を果たすように、または任意の所望のタスクを実施するように、無人で起動してもよい。いくつかの実施形態では、1つ以上のデーモンサービス218が、ユーザ空間202内で起動する一方で、他の実施形態では、1つ以上のデーモンサービス218は、カーネル空間内で起動する。
ここで図2Bを参照すると、アプライアンス200の別の実施形態が描写される。要するに、アプライアンス200は、以下のサービス、機能性、または動作のうちの1つ以上のもの、すなわち、SSL VPNコネクティビティ280、切替/負荷分散284、ドメイン名サービス解決286、加速288、および1つ以上のクライアント102と1つ以上のサーバ106との間の通信用のアプリケーションファイアウォール290を提供する。サーバ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は、ポリシエンジン236と通信し、またはインターフェースをとり、サーバ106からコンピューティング環境15、アプリケーション、および/またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント102の認証および/または認可を決定する。別の実施形態では、アプライアンス200は、ポリシエンジン236と通信し、またはインターフェースをとり、コンピューティング環境15、アプリケーション、および/またはデータファイルのうちの1つ以上のものをアプリケーション配信システム190に配信させるための遠隔ユーザまたは遠隔クライアント102の認証および/または認可を決定する。さらに別の実施形態では、アプライアンス200は、遠隔ユーザまたは遠隔クライアント102のポリシエンジンの236認証および/または認可に基づいて、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の通信を傍受し、通信を暗号化し、アプライアンス200への第1のトランスポート層接続を介して通信を伝送する。アプライアンス200は、第1のネットワーク104上の第1のトランスポート層接続を、第2のネットワーク104上のサーバ106への第2のトランスポート層接続に関連付ける。アプライアンス200は、クライアントエージェント102からの傍受された通信を受信し、通信を暗号解読し、第2のトランスポート層接続を介して第2のネットワーク104上のサーバ106に通信を伝送する。第2のトランスポート層接続は、プールされたトランスポート層接続であってもよい。したがって、アプライアンス200は、2つのネットワーク104、104’の間のクライアント102のためのエンドツーエンドセキュアトランスポート層接続を提供する。
一実施形態では、アプライアンス200は、仮想私設ネットワーク104上のクライアント102のイントラネットインターネットプロトコルまたはイントラネットIP282アドレスをホストする。クライアント102は、第1のネットワーク104上のインターネットプロトコル(IP)アドレスおよび/またはホスト名等のローカルネットワーク識別子を有する。アプライアンス200を介して第2のネットワーク104’に接続されたとき、アプライアンス200は、第2のネットワーク104’上のクライアント102のためのIPアドレスおよび/またはホスト名等のネットワーク識別子である、イントラネットIPアドレス282を確立する、割り当てる、または別様に提供する。アプライアンス200は、クライアントの確立されたイントラネットIP282を使用して、クライアント102に向かってダイレクトされる任意の通信に関して、第2または私設ネットワーク104’をリッスンし、その上で受信する。一実施形態では、アプライアンス200は、第2の私設ネットワーク104上のクライアント102として、またはその代わりに作用する。例えば、別の実施形態では、vサーバ275は、クライアント102のイントラネットIP282への通信をリッスンし、それに応答する。いくつかの実施形態では、第2のネットワーク104’上のコンピューティングデバイス100が要求を伝送する場合、アプライアンス200は、それがクライアント102であった場合のように要求を処理する。例えば、アプライアンス200は、クライアントのイントラネットIP282へのpingに応答してもよい。別の実施例では、アプライアンスは、第2のネットワーク104上のコンピューティングデバイス100とTCPまたはUDP接続等の接続を確立し、クライアントのイントラネットIP282との接続を要求してもよい。
いくつかの実施形態では、アプライアンス200は、クライアント102とサーバ106との間の通信への以下の加速技法288のうちの1つ以上のもの、すなわち、1)圧縮、2)展開、3)伝送制御プロトコルプーリング、4)伝送制御プロトコル多重化、5)伝送制御プロトコルバッファリング、および6)キャッシングを提供する。
一実施形態では、アプライアンス200は、各サーバ106との1つ以上のトランスポート層接続を開放し、これらの接続を維持して、インターネットを介したクライアントによる反復データアクセスを可能にすることによって、クライアント102へのトランスポート層接続を繰り返し開閉することによって引き起こされる、処理負荷の多くからサーバ106を解放する。本技法は、本明細書では「接続プーリング」と称される。
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント102からサーバ106への通信をシームレスに接合するために、アプライアンス200は、トランスポート層プロトコルレベルにおけるシーケンス数および確認応答数を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、着信パケット(すなわち、クライアント102から受信されるパケット)の場合、パケットのソースネットワークアドレスは、アプライアンス200の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。発信パケット(すなわち、クライアント106から受信されるもの)の場合、ソースネットワークアドレスは、サーバ106のものからアプライアンス200の出力ポートのものに変更され、宛先ネットワークアドレスは、アプライアンス200のものから要求クライアント102のものに変更される。パケットのシーケンス数および確認応答数もまた、クライアント102へのアプライアンス200のトランスポート層接続上でクライアント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は、メモリ、CPU、およびディスク使用量、およびアプライアンス200の性能を測定および監視する。さらに別の実施形態では、監視エージェント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プロトコルは、IEEE 802.3によって網羅されるこれらのプロトコル等のIEEE広域ネットワーク(WAN)またはローカルエリアネットワーク(LAN)プロトコル群のうちのいずれかを備え得る、イーサネット(登録商標)プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック310は、IEEE 802.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はそれぞれ、いずれか1つ以上のネットワーク層において、ユーザモード203、カーネル−モード202、またはそれらの組み合わせで、またはネットワーク層またはネットワーク層へのインターフェース点の任意の部分、またはユーザモード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は、トランスポート層アプリケーションプログラミングインターフェース(API)コールを実行し、場所のための所望の場所への宛先IPアドレスおよび/またはポート等の宛先情報を設定する。このようにして、インターセプタ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のトランスポート層と動作する、またはインターフェースをとる。これは、ネットワークスタック310の他のプロトコル層が、所望に応じて、かつインターセプタ350を使用するための修正を伴わずに、動作することを可能にする。したがって、クライアントエージェント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とのクライアントの通信および/またはそこへのアクセスを加速する、増進する、または別様に改良するための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(登録商標)スクリプト等の任意のタイプおよび形態のスクリプトであってもよい。一実施形態では、監視エージェント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、VirtualServer、または仮想PCハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行され得る、仮想マシンプラットフォームを作成するハイパーバイザを実行する、コンピューティングデバイス100は、ホストサーバと称される。これらの実施形態のうちの1つでは、例えば、コンピューティングデバイス100は、Citrix Systems, Inc.(Fort Lauderdale, FL)によって提供されるXEN SERVERである。
いくつかの実施形態では、ハイパーバイザ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、アプリ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に図示されるように、機能別の分割は、負荷または性能の異なるレベルにおいて起動する異なるコアにつながり得る。
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、図5Bは、第1のコア、コア1 505A、ネットワークI/O機能性510Aと関連付けられる処理アプリケーションおよびプロセスを図示する。ネットワークI/Oと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、NW I/O510Aと関連付けられるポート宛先を有する、発信および着信パケットは、NW I/Oポートと関連付けられる全てのネットワークトラフィックを取り扱うことに専念するコア1 505Aに向かってダイレクトされるであろう。同様に、コア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の間で分配されてもよい。いくつかの実施形態では、データ並列処理は、異なる分配されたデータに同一のタスクまたは機能性を実施する各コアによって、マルチコアシステム内で達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードは、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令は、動作を制御するが、同一のコードを実行してもよい。いくつかの実施形態では、データ並列処理は、アプライアンス200上に含まれる、またはそれと関連付けられる、パケットエンジン、vサーバ(VIP)275A−C、ネットワークインターフェースカード(NIC)542D−E、および/または任意の他のネットワーキングハードウェアまたはソフトウェアの視点から達成される。例えば、各コアは、同一のパケットエンジンまたは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は、NICがデータパケットを受信または伝送するときに、特定のコア505がデータパケットを受信または伝送することに関与する処理を取り扱うように、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にそれらを配分することができる。例えば、アプライアンス200は、コア1上の負荷515Aが残りのコア505B−N上の負荷515B−N未満であるため、第1の着信データパケットをコア1 505Aに配分し得る。いったん第1のデータパケットがコア1 505Aに配分されると、コア1 505A上の負荷515Aの量は、第1のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス200が第2のデータパケットを傍受するとき、アプライアンス200は、コア4 505Dが第2の最少量の負荷を有するため、負荷をコア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、アプリ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」が1を上回る任意の整数である、任意の「N」の数のコアがアプライアンス200内に存在し得る。いくつかの実施形態では、コア505が、共通アプライアンス200内にインストールされることができる一方で、他の実施形態では、コア505は、相互に通信可能に接続される1つ以上のアプライアンス200内にインストールされることができる。コア505が、いくつかの実施形態では、グラフィックス処理ソフトウェアを備えることができる一方で、他の実施形態では、コア505は、一般処理能力を提供する。コア505は、物理的に相互の近傍にインストールされることができる、および/または相互に通信可能に接続されることができる。コアは、データをコアに、そこから、および/またはその間で転送するためのコアに物理的および/または通信可能に結合される、任意のタイプおよび形態のバスまたはサブシステムによって接続されてもよい。
各コア505は、他のコアと通信するためのソフトウェアを備えることができるが、いくつかの実施形態では、コアマネージャ(図示せず)は、各コア505の間の通信を促進することができる。いくつかの実施形態では、カーネルは、コア管理を提供してもよい。コアは、種々のインターフェース機構を使用して、相互とインターフェースをとる、または通信してもよい。いくつかの実施形態では、コア間メッセージングが、コアを接続するバスまたはサブシステムを介して、第1のコアがメッセージまたはデータを第2のコアに送信すること等、コアの間で通信するために使用されてもよい。いくつかの実施形態では、コアは、任意のタイプおよび形態の共有メモリインターフェースを介して通信してもよい。一実施形態では、全てのコアの間で共有される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つ以上のフロー分配器550は、相互と通信することによって、負荷の平衡を保つ方法を決定することができる。本プロセスは、次いで、負荷を受容するべきであるフロー分配器550を決定する、アービタに投票を提出するために、上記に説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第1のフロー分配器550’は、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が事前決定された閾値を上回ること、関連付けられるコア上の負荷が事前決定された閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷未満であること、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを転送する場所を決定するために使用され得る任意の他のメトリックのうちのいずれかに基づいて、第1のデータパケットを関連付けられるコアに転送するかどうかを決定することができる。
フロー分配器550は、本明細書に説明されるもの等の分配、コンピューティング、または負荷分散方式に従って、コア505の間でネットワークトラフィックを分配することができる。一実施形態では、フロー分配器は、機能並列処理分配方式550、データ並列処理負荷分配方式540、フローベースのデータ並列処理分配方式520、またはこれらの分配方式の任意の組み合わせ、または複数のプロセッサの間で負荷を分配するための任意の負荷分散方式のうちのいずれか1つに従って、ネットワークトラフィックを分配することができる。フロー分配器550は、したがって、データパケットを取り入れ、動作負荷分散または分配方式に従ってプロセッサを横断してそれらを分配することによって、負荷分配器として作用することができる。一実施形態では、フロー分配器550は、1つ以上の動作、機能、または論理を備え、故に、パケット、作業、または負荷を分配する方法を決定することができる。なおも他の実施形態では、フロー分配器550は、データパケットと関連付けられるソースアドレスおよび宛先アドレスを識別し得る、1つ以上の副次動作、機能、または論理を備え、故に、パケットを分配することができる。
いくつかの実施形態では、フロー分配器550は、受信側スケーリング(RSS)ネットワークドライバ、モジュール560、または1つ以上のコア505の間でデータパケットを分配する任意のタイプおよび形態の実行可能命令を備えることができる。RSSモジュール560は、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、RSSモジュール560は、フロー分配器550と併せて稼働し、コア505A−Nを横断して、またはマルチプロセッサネットワーク内で複数のプロセッサの間で、データパケットを分配する。RSSモジュール560は、いくつかの実施形態では、NIC552内で実行されることができ、他の実施形態では、コア505のうちのいずれか1つの上で実行されることができる。
いくつかの実施形態では、RSSモジュール560は、MICROSOFT受信側スケーリング(RSS)方式を使用する。一実施形態では、RSSは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡を保たれることを可能にする、Microsoft拡張可能ネットワーキングイニシアチブ技術である。RSSは、任意のタイプおよび形態のハッシング方式を使用し、ネットワークパケットを処理するためのコアまたはプロセッサを決定してもよい。
RSSモジュール560は、テプリッツハッシュ関数等の任意のタイプおよび形態のハッシュ関数を適用することができる。ハッシュ関数は、ハッシュタイプまたは任意の一連の値に適用されてもよい。ハッシュ関数は、任意のセキュリティレベルのセキュアハッシュであってもよい、または別様に暗号論的にセキュアである。ハッシュ関数は、ハッシュキーを使用してもよい。キーのサイズは、ハッシュ関数に依存する。テプリッツハッシュに関して、サイズは、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モジュールのソフトウェア実施形態が、フロー分配器550と併せて、またはその一部として動作し、パケットをマルチコアシステム575内のコア505に操向することができる。
フロー分配器550は、いくつかの実施形態では、アプライアンス200上、コア505のうちのいずれか1つの上、およびマルチコアシステム575内に含まれるデバイスまたはコンポーネントのうちのいずれか1つの上の任意のモジュールまたはプログラム内で実行される。いくつかの実施形態では、フロー分配器550’が、第1のコア505A上で実行されることができる一方で、他の実施形態では、フロー分配器550”は、NIC552上で実行されることができる。なおも他の実施形態では、フロー分配器550’のインスタンスが、マルチコアシステム575の中に含まれる各コア505上で実行されることができる。本実施形態では、フロー分配器550’の各インスタンスは、フロー分配器550’の他のインスタンスと通信し、コア505を横断して前後にパケットを転送することができる。要求パケットへの応答が同一のコアによって処理されない場合がある、すなわち、第1のコアが要求を処理する一方で、第2のコアが応答を処理する、状況が存在する。これらの状況では、フロー分配器550’のインスタンスは、パケットを傍受し、それを所望されるまたは正しいコア505に転送することができる、すなわち、フロー分配器インスタンス550’は、応答を第1のコアに転送することができる。フロー分配器550’の複数のインスタンスは、任意の数のコア505およびコア505の任意の組み合わせの上で実行されることができる。
フロー分配器は、いずれか1つ以上の規則またはポリシに応答して動作してもよい。規則は、ネットワークパケット、データ、またはデータフローを受信するためのコアまたはパケット処理エンジンを識別してもよい。規則は、ソースおよび宛先IPアドレスおよびソースおよび宛先ポートの4タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。規則によって規定されるタプルに合致する受信されたパケットに基づいて、フロー分配器は、パケットをコアまたはパケットエンジンに転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび/またはコア間メッセージングを介して、コアに転送される。
図5Bは、マルチコアシステム575内で実行されるようなフロー分配器550を図示するが、いくつかの実施形態では、フロー分配器550は、マルチコアシステム575から遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行されることができる。そのような実施形態では、フロー分配器550は、マルチコアシステム575と通信し、データパケットを取り入れ、1つ以上のコア505を横断してパケットを分配することができる。フロー分配器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は、コア1 505Aを制御コアとして図示するが、制御コアは、アプライアンス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は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分配方法が、本明細書で議論されるノード管理および分配方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、2層分散システムであると考えられ得、1つのアプライアンスは、データを備え、それを複数のノードに分配し、各ノードは、処理のためのデータを備え、それを複数のコアに分配する。故に、そのような実施形態では、ノード分配システムは、上記で議論されるようなマスタまたは制御コアによって対処され得るものとして、個々のコアへのフロー分配を管理する必要はない。
多くの実施形態では、アプライアンスクラスタ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のノードの間のフロー分配は、アプライアンスのコアの間のフロー分配に関して上記で議論される方法のうちのいずれかを使用してもよい。例えば、一実施形態では、マスタアプライアンス、マスタノード、またはインターフェースマスタは、着信トラフィック上のテプリッツハッシュ等の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.DNS応答並べ替えのためのシステムおよび方法
WAN仮想化を実施するミドルボックスまたは中間デバイスは、異なるWANネットワークを介して接続され得る、一対のデバイスとして稼働することができる。これらのネットワークは、企業、データセンタ、ドメイン、または他の分散システムの複数のサイトを接続することができる。複数のサイトを横断して位置するコンピューティングデバイスは、冗長性、負荷分散、および障害回復のために複数のサイトを横断して分配されることができる。本ソリューションは、仮想WANアプライアンスに面する分岐内のDNS記録を解析するための機構を説明する。本ソリューションは、接続の優先度を決定し、測定されたサービス品質(QoS)メトリックに基づいて、接続を行う好ましいサイトを選定することによって、DNSサーバによって送信されるDNS応答を並べ替えることができる。QoSメトリックは、分岐とサイトとの間のリンクのリンク利用、待ち時間、ジッタ、およびパケットドロップを含むことができる。本ソリューションは、2つのサイト(またはサイトと分岐と)の間の最良の利用可能なパスを決定することができる。本ソリューションは、接続のQoS要件を最良に満たすことができる利用可能なリンクを選択することによって、接続の品質を向上させることができる。
本ソリューションは、DNS応答内のIPアドレスを並べ替えるためのシステムおよび方法について議論する。IPアドレスを並べ替えることによって、本システムは、クライアントが接続する複数のサイトを制御することができ、接続が接続の品質要件を満たし得るパスを経由して行われることを確実にすることができる。本ソリューションは、クライアントの接続要求を満たし得る、複数のサイトを横断した最良のリンクの選択を可能にする。
図7は、例示的ネットワーク環境700のブロック図を図示する。ネットワーク環境700は、ネットワーク104を介して仮想WAN702(a)と通信するクライアント102を含むことができる。仮想WAN702(a)は、仮想WAN702(b)および仮想WAN702(c)と通信することができる。仮想WAN702は、WANのコンポーネントを形成する、またはそれであり得る。仮想WAN702(b)および仮想WAN702(c)はそれぞれ、個別のサーバ106(a)および106(b)と通信する(またはそれを含む)ことができる。例えば、仮想WAN702はそれぞれ、データセンタを形成する複数のサーバ106を含むことができる。
ネットワーク104は、企業のイントラネット等のローカルエリアネットワーク(LAN)であり得る。例えば、ネットワーク104は、仮想WAN702を介して企業データセンタに位置するサーバ106に通信する、企業の支社のローカルLANであり得る。仮想WAN702のうちの1つ以上のものは、物理的WANと置換される、またはそれを含むことができる。仮想WAN702はそれぞれ、公衆、私設、またはインターネット等の他のネットワークを通して、相互と通信することができる。
サイトは、冗長性、負荷分散、および障害回復のために、異なる地理的場所に、または異なる場所を横断して位置することができる。サイトは、1つ以上のノード、サーバ106、データセンタ、または他のコンピューティングデバイスを含むことができる。各サイトは、複数の物理的場所を横断して分散されることができる、または1つの物理的場所は、複数のサイトを含むことができる。サイトは、仮想WAN702によって接続される一対のデバイスとして稼働することができる。サイトは、仮想WAN702を通した複数のパスを通して、相互に接続されることができる。サイトは、同一のドメインと関連付けられることができ、1つ以上の場所を横断して分散される単一のエンティティとして作用することができる。例えば、サイトは、同一のウェブサイトドメイン(例えば、abc.com)または分散データベースと関連付けられることができる。ウェブサイトまたはデータベースサーバは、負荷分散、冗長性、または障害回復のために複数の場所を横断して分散されることができる。例えば、サイトBにおけるサーバ106(a)は、ウェブサイトabc.comと関連付けられ、IPアドレス10.1.2.5を有することができ、サイトCにおけるサーバ106(b)もまた、ウェブサイトabc.comと関連付けられ、IPアドレス10.1.3.5を有することができる。DNSサーバは、DNSサーバがDNS要求を解決する、abc.comドメインと関連付けられる2つのIPアドレスのうちのいずれかまで回転することによって、2つのサイトの間で負荷分散することができる。DNS応答は、IPアドレスの並べ替えられたリストを含むことができる。上記の実施例を続けると、DNS応答は、応答{10.1.2.5,10.1.3.5}を含むことができる。負荷分散するために、DNSサーバは、DNS応答の第1の位置に位置するIPアドレスを交互に入れ替えることができる。DNS応答を受信するクライアントは、DNS応答の第1のインデックスに位置するIPアドレスと関連付けられるサイトまたはノードとの接続(例えば、TCP接続)を確立しようとすることができる。接続が行われることができない場合、クライアントは、DNS応答の次のインデックスに位置するIPアドレスと接続を行おうとすることができる。
仮想WAN702は、DNS応答の中に列挙されるIPアドレスを並べ替え得る、DNS応答アレンジャを含むことができる。DNS応答アレンジャは、図8に関連してさらに議論される。概観として、DNS応答アレンジャは、クライアントへのDNS応答を傍受し、DNS応答内のIPアドレスのリストを並べ替えることができる。DNS応答アレンジャは、アクティブQoSポリシおよびクライアントとクライアントが接続を確立しようとしているサイトとの間のリンク品質に基づいて、IPアドレスのリストを並べ替えることができる。リンク品質は、ジッタ、待ち時間、パケットドロップレート、およびリンク利用レートを含むことができる。
図8は、DNS応答並べ替えシステム800の実装のブロック図である。システム800は、サイト間通信フローまたはTCPプロキシセッションの確立中にDNS応答の中のIPアドレスのリストを並べ替えることができる。例えば、システム800は、クライアントがドメインのサーバとの接続を確立しているときに、クライアントへのDNS応答の中のIPアドレスのリストを並べ替えることができる。システム800は、サイトの間に確立される接続の優先度およびクライアントとサイトとの間の可能性として考えられるリンクのリンク品質に基づいて、IPアドレスのリストを並べ替えることができる。
概観として、DNS応答並べ替えシステム800は、複数のリンクを通して1つ以上のWAN、LAN、サーバ、クライアント、ノード、またはサイトと結合される、リンク切替装置808を含むことができる。システム800はまた、それを経由してリンク切替装置808が接続を行い得る、リンクのそれぞれのリンク品質を決定し得る、リンク品質推定器806を含むこともできる。システム800はまた、接続のための優先度要件または確立される接続を決定し得る、QoSモジュール804を含むこともできる。システム800はまた、TCP/IP処理(加速および最適化タスク)を実施し、セキュリティポリシを施行し得る、パケット処理エンジン548を含むこともできる。パケット処理エンジン548からLANまで進行するパケットは、DNS応答解析器810によって処理されることができる。DNS応答を含むパケットは、DNS応答アレンジャ802に伝送されることができ、DNS応答を含まないパケットは、DNS応答アレンジャ802を迂回してLANに転送されることができる。
DNS応答並べ替えシステム800は、フロー分配器またはパケットエンジンによって実行されることができる、またはアプライアンスのコアまたはアプライアンスのクラスタによって(例えば、マスタコア、スレーブコア、または事前決定されたコアによって)別個に実行されてもよい。いくつかの実装では、DNS応答並べ替えシステム800は、コンピューティングデバイスのハイパーバイザ上で実行される仮想マシンによって実行されてもよい。いくつかの実装では、DNS応答並べ替えシステム800は、デバイスのオペレーティングシステムのネットワークスタックの一部である、またはネットワークスタックの層において(例えば、ネットワークまたはトランスポート層において)実行されてもよい。
DNS応答並べ替えシステム800は、QoSモジュール804を含むことができる。QoSモジュール804は、パケット処理エンジン548から通信フローのアプリケーションまたはセッションタイプを受信するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。QoSモジュール804は、パケット処理エンジン548から受信されるパケットヘッダ(またはパケットの中の他のそのような情報)を走査することに基づいて、QoS要件または接続優先度を決定することができる。QoSモジュール804は、ポリシデータベース内のアプリケーションまたはセッションタイプを調べ、接続のための接続優先度およびQoS要件を決定することができる。QoS要件は、DNS応答のIPアドレスの並べ替え中に考慮されてもよい。QoSモジュール804は、QoS要件および接続優先度情報をDNS応答アレンジャ802に提供することができる。
DNS応答並べ替えシステム800は、リンク品質推定器806を含んでもよい。リンク品質推定器806は、図7に図示されるクライアント102およびサーバ106のそれぞれ等の2つのサイトの間の1つ以上のネットワークリンクの特性を測定する、および/または品質を決定するためのアプリケーション、サービス、ルーチン、デーモン、または他の実行可能論理を含むことができる。いくつかの実装では、リンク品質推定器806は、異なるリンクを介して、リンク切替装置808を介した制御パケットを中間デバイスに伝送し、各リンクのリンク品質を決定することができる。リンク品質は、限定ではないが、リンク利用、リンク待ち時間、リンクジッタ、リンクドロップレート、またはそれらの任意の組み合わせ等のメトリックを含むことができる。リンク品質推定器806はまた、すでにリンクをトラバースしているパケット(例えば、具体的に生成されていない制御パケット)を使用し、リンク品質の周期的測定を実施することもできる。一実施例では、リンク品質推定器806は、複数のTCPパケットを伝送し、遠隔デバイスからのパケットの確認応答の受信までの往復時間を測定することができる。リンク品質推定器806は、確認されていないパケットまたは否定応答された(nACK)パケットを識別することによって、損失レートを決定することができる。リンク品質推定器806はまた、接続の帯域幅、最大区画サイズ、ウィンドウサイズ、輻輳、またはネットワークリンクの任意の他の特性を測定してもよい。リンク品質推定器806は、パケットの往復時間に基づいて待ち時間を測定してもよい。往復時間は、パケットの伝送からパケット確認応答の受信までの時間量であり得る。リンク品質推定器806は、リンク品質スコア、および利用、ジッタ、待ち時間、パケットドロップレート、およびDNS応答アレンジャ802へのリンク毎の他のネットワーク特性の測定を提供することができる。
DNS応答並べ替えシステム800はまた、リンク切替装置808を含むこともできる。リンク切替装置806は、リンク切替装置808が結合される複数のリンクまたは他の接続を介して、パケットを選択的に多重化するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。例えば、リンク切替装置806は、パケット処理エンジン548(および/またはフロー分配器)と複数の中間接続との間でパケットをルーティングするために、パケット修正器と、制御論理と、マルチプレクサおよびデマルチプレクサとを含んでもよい。リンク切替装置806は、中間リンクを往復して通信フローのパケットをルーティングしてもよく、いくつかの実装では、パケットを修正し、フローを識別する、またはフローまたは接続が転送されているリンクを識別してもよい。
DNS応答並べ替えシステム800はまた、DNS応答解析器810を含むこともできる。DNS応答解析器810は、DNS応答を識別および解析するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。DNS応答解析器810は、LANに指向されるパケットを受信する、または別様に傍受することができる。DNS応答解析器810は、着信パケットを処理または監視し、パケットがDNS応答を含むかどうかを決定することができる。DNS応答を含まないパケットは、DNS応答アレンジャ802を迂回してLANに転送されることができる。DNS応答解析器810は、DNS応答と関連付けられるパケットを傍受し、DNS応答アレンジャ802に転送することができる。
DNS応答並べ替えシステム800はまた、DNS応答アレンジャ802を含むこともできる。DNS応答アレンジャ802は、DNS応答の中のIPアドレスのリストを並べ替える、または別様に修正するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。リンク品質推定器806から受信されるリンク品質メトリックおよびQoSモジュール804から受信される接続優先度に基づいて、DNS応答アレンジャ802は、DNS応答の中のIPアドレスのリストの順序を修正することができる。修正されたDNS応答は、クライアントに送信されることができる。クライアントは、次いで、サイトに位置するサーバ106との接続を確立する際に、DNS応答を使用することができる。DNS応答の中のIPアドレスの順序を修正するための方法は、図9に関連して説明される。
図9は、DNS応答並べ替えのための例示的方法900の例示的フロー図を図示する。方法900は、ドメインと関連付けられる複数のサイトに対応するIPアドレスのリストを含む、クライアントのDNS応答を受信するステップを含む(ブロック902)。方法900は、クライアントとドメインとの間の接続の優先度を識別するステップを含むことができる(ブロック904)。方法900は、クライアントと複数のサイトとの間の複数のリンク毎に、リンク品質を決定するステップを含むことができる(ブロック906)。方法900は、リンク品質および接続優先度に基づいて、DNS応答の中のIPアドレスのリストの順序を修正するステップを含むことができる(ブロック908)。方法900はまた、IPアドレスのリストの修正された順序をクライアントに伝送するステップも含む(ブロック910)。
上記に記載されるように、例示的方法900は、DNS要求へのDNS応答を受信するステップを含む(ブロック902)。DNS応答は、DNS要求をDNS応答アレンジャに転送し得る、DNS応答解析器によって識別されることができる。DNS応答解析器は、データパケットのコンテンツを精査することによって、着信データパケットがDNS応答であるかどうかを決定することができる。いくつかの実装では、DNS応答解析器は、DNS応答と関連付けられる事前決定されたポートを経由して伝送されるデータパケットを精査することができる。DNS応答は、複数のサイトのうちの1つにそれぞれ対応する、IPアドレスのリストを含むことができる。複数のサイトはそれぞれ、同一のホスト名またはドメイン名と関連付けられる、異なるサーバまたはデバイスであり得る。例えば、ドメインabc.comは、別個の場所における4つのサーバ上でホストされることができる。本実施例では、DNS応答は、4つのサーバのそれぞれに1つずつ、IPアドレスのリストを含むことができる。
方法900は、クライアントとドメインとの間の接続の優先度を識別するステップを含むことができる(ブロック904)。システムのQoSモジュールは、クライアントが接続を確立しようとしているドメインに基づいて、接続の優先度を決定することができる。例えば、QoSモジュールは、QoSポリシデータベースを参照し、ドメインと関連付けられる接続優先度を調べることができる。本実施例では、潜在感受性データをサービス提供するドメインは、比較的に高い優先度と関連付けられることができる。QoSモジュールは、優先度およびクラス情報をフロー識別と関連付けることができる。接続の優先度は、接続のQoS分類に基づくことができる。例えば、パケットヘッダを走査することによってQoS分類を決定して、QoSモジュールは、ルックアップテーブルを参照し、決定されたQoSクラスに対応する優先度を決定することができる。QoS分類は、UDPトラフィックパターン、TCP:リアルタイムトラフィックパターン、TCP:双方向トラフィックパターン、TCP:バルクトラフィックパターン、またはTCP:バックグラウンドトラフィックパターンであり得る。TCP:リアルタイムトラフィックパターンは、オーディオトラフィックを含むことができ、比較的に非常に高い優先度に割り当てられることができる。TCP:双方向(TCP:チャッティとも称される)は、比較的に高い優先度に割り当てられることができ、グラフィック、キーボード、およびマウストラフィックを含むことができる。TCP:バルクは、比較的に中程度の優先度に割り当てられることができ、クライアント駆動マッピングおよびUSBリダイレクトトラフィックを含むことができる。TCP:バックグラウンドは、比較的に低い優先度に割り当てられることができ、印刷およびCOMポートマッピングトラフィックを含むことができる。いくつかの実装では、QoSモジュールは、優先度ポリシに基づいて、優先度をデバイスとドメインとの間に接続に割り当てることができる。例えば、優先度ポリシは、関連付けられる接続優先度を伴う既知のドメインまたは接続分類のリストを含むことができる。ドメインまたは接続分類に基づいて、QoSモジュールは、接続優先度を接続に割り当てることができる。例えば、優先度ポリシは、abc.comへの接続が中程度の優先度を与えられるべきであることを示すことができる。
方法900はまた、デバイスと個別のサイトとの間の複数のリンクのうちのリンク毎に、リンク品質を決定するステップを含むこともできる(ブロック906)。リンクのそれぞれの品質は、DNS応答並べ替えシステムのリンク品質推定器によって決定されることができる。上記で説明されるように、リンク品質推定器は、制御パケットをサイトのそれぞれに伝送することによって、リンクのそれぞれの品質を決定することができる。リンク品質は、ドロップされた制御パケットの数、制御パケット(またはその確認応答)の進行時間、待ち時間、ジッタ、リンクの利用可能および全帯域幅能力、リンク利用、またはそれらの任意の組み合わせに基づくことができる。一実施例では、リンク品質メトリックはそれぞれ、ランキングを含み、リンク品質は、リンク品質メトリックの組み合わせに基づくことができる。例えば、下記の表は、サイトAからサイトBへの第1のリンクおよびサイトAからサイトCへの第2のリンクの例示的リンク品質メトリックを提供する。待ち時間、ジッタ、およびパケット損失が、決定された優先度接続のために重要である、実施例では、待ち時間、ジッタ、およびパケット損失レートが、A−Cリンクよりも本リンクから少ないため、本システムは、サイトAとサイトBとの間のリンクを使用することを選択することができる。
いくつかの実装では、本システムは、DNS応答がDNS応答並べ替えシステムによって受信される度にリンク品質を決定することができる。他の実装では、本システムは、リンク品質を決定し、事前決定された時間量にわたって有効であるような測定を維持することができる。例えば、リンク品質は、とりわけ、1分、1時間、3時間、6時間、18時間、1日、または1週間にわたって有効なままであることができる。リンク品質の期限後、リンク品質推定器は、リンクの品質を再決定することができる。
本方法はまた、リンク品質および接続優先度に基づいて、IPアドレスの順序付けられたリストを修正するステップを含むこともできる(ブロック908)。DNS応答は、IPアドレスの順序付けられたリストを含むことができる。アレンジャは、IPアドレスのそれぞれが関連付けられる、1つまたは複数のリンクを決定することができる。例えば、アレンジャは、データパケットが規定IPアドレスに到達するようにトラバースするであろうリンクを決定することができる。アレンジャは、ルーティングテーブルを参照することによって、データパケットがIPアドレスに到達するようにトラバースするであろうリンク(または複数のリンク)を決定することができる。DNS応答アレンジャは、次いで、異なるサイトへのリンクのリンク品質に基づいて、IPアドレスのそれぞれをランク付けすることができる。アレンジャは、DNS応答を修正し、それらの個別のリンク品質に基づく順序でIPアドレスを含むことができる。DNS応答アレンジャは、最高リンク品質と関連付けられるIPアドレスが応答の最上部に位置付けられるように、リストを並べ替えることができる。
いくつかの実装では、アレンジャは、接続優先度が閾値を上回るときのIPアドレスのリストを降順に並べ替える。降順は、IPアドレスのそれぞれと関連付けられるリンク品質に基づくことができる。降順に配列されたとき、最高リンク品質と関連付けられるIPアドレスは、順序付けられたリストの中で最初に設置され、順序付けられたリストの中の各後続のIPアドレスは、最低リンク品質と関連付けられる最後のIPアドレスまで、前のIPアドレスよりも低いリンク品質と関連付けられる。IPアドレスは、それを経由してパケットがIPアドレスに到達するようにトラバースする、リンクと関連付けられることができる。一実施例では、アレンジャは、接続優先度が閾値を下回るときではなくて、接続優先度が閾値を上回るときに、DNS応答の第1の位置における第1のIPアドレスを、より高いリンク品質を有する第2のIPアドレスと置換することができる。本構成では、比較的により高い優先度を伴う接続は、より高いリンク品質を伴うリンクをトラバースするように割り当てられることができる。
いくつかの実装では、接続優先度が閾値を下回るとき、DNS応答アレンジャは、最低リンク品質と関連付けられるIPアドレスが、DNS応答の中の第1のIPアドレスであり、最高リンク品質と関連付けられるIPアドレスが、IPアドレスの並べ替えられたリストの中の最後のIPアドレスであるように、DNS応答の中のIPアドレスのリストを昇順に並べ替えることができる。接続優先度が閾値を下回るときに昇順にIPアドレスを順序付けることは、比較的に低いリンク品質を伴うリンクを経由して、比較的に低い優先度の接続をルーティングすることができる。これは、比較的に高い優先度の接続のために高いリンク品質を伴うリンクを留保することができる。DNS応答アレンジャはまた、非昇または降順にIPアドレスを並べ替えることもできる。IPアドレスは、接続の優先度に合致するように配列されることができる。例えば、接続が中程度の優先度であると決定される場合、IPアドレスは、中程度のリンク品質と関連付けられるIPアドレスが、DNS応答の第1の位置に設置されるように、配列されることができる。接続優先度が低いまたは中程度であるとき、低いまたは中程度のリンク品質と関連付けられるIPアドレスが、第1の位置に(かつ高いリンク品質と関連付けられるIPアドレスの前に)位置付けられるように、DNS応答を並べ替えることは、後続の高優先度接続のために高いリンク品質を伴うリンクを留保することができる。
方法900はまた、IPアドレスのリストの修正された順序をクライアントに伝送するステップを含むこともできる(ブロック910)。DNS応答は、IPアドレスの修正された順序を含むように修正されることができる。DNS応答アレンジャは、次いで、修正された応答をクライアントに転送することができる。クライアントは、修正されたDNS応答を受信することができる。クライアントは、修正されたDNS応答を読み取り、修正されたDNS応答の中の第1のIPアドレスとの接続を作成しようとすることができる。
上記に説明されるシステムは、これらのコンポーネントのうちのいずれかまたはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型マシン上、またはいくつかの実施形態では、分散システム内の複数のマシン上のいずれかで、提供され得ることを理解されたい。上記に説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせを生成するように、プログラミングおよび/または工学技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記に説明されるシステムおよび方法は、1つ以上の製造品の上または中で具現化される、1つ以上のコンピュータ可読プログラムとして提供されてもよい。本明細書で使用されるような用語「製造品」は、1つ以上のコンピュータ可読デバイス、ファームウェア、プログラマブル論理、メモリデバイス(例えば、EEPROM、ROM、PROM、RAM、SRAM等)、ハードウェア(例えば、集積回路チップ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等)、電子デバイス、コンピュータ可読不揮発性記憶ユニット(例えば、CD−ROM、フロッピー(登録商標)ディスク、ハードディスクドライブ等)からアクセス可能であり、それに組み込まれる、コードまたは論理を包含することを意図している。製造品は、ファイルサーバからアクセス可能であり得、ネットワーク伝送ライン、無線伝送媒体、空間を通して伝搬する信号、電波、赤外線信号等を介したコンピュータ可読プログラムへのアクセスを提供する。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、ハードウェア論理、およびプロセッサによって実行されるコンピュータ可読媒体に組み込まれるソフトウェアまたはプログラマブルコードを含む。一般に、コンピュータ可読プログラムは、LISP、PERL、C、C++、C#、PROLOG等の任意のプログラミング言語で、またはJAVA(登録商標)等の任意のバイトコード言語で、実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして、1つ以上の製造品の上または中に記憶されてもよい。
方法およびシステムの種々の実施形態が説明されているが、これらの実施形態は、例証的であり、説明される方法またはシステムの範囲をいかようにも限定しない。当業者は、説明される方法およびシステムの最も広い範囲から逸脱することなく、説明される方法およびシステムの形態および詳細に変更を生じさせることができる。したがって、本明細書に説明される方法およびシステムの範囲は、例証的実施形態のうちのいずれかによって限定されるべきではなく、付随する請求項およびそれらの均等物に従って定義されるべきである。