以下の種々の実施形態の説明を読む目的で、本明細書の節およびそれらの個別の内容の以下の説明が役立ち得る。
第A節は、本明細書に説明される実施形態を実践するために有用であり得る、ネットワーク環境およびコンピュータ環境を説明する。
第B節は、コンピュータ環境を遠隔ユーザに配信するためのシステムおよび方法の実施形態を説明する。
第C節は、クライアントとサーバとの間の通信を加速するためのシステムおよび方法の実施形態を説明する。
第D節は、アプリケーション配信コントローラを仮想化するためのシステムおよび方法の実施形態を説明する。
第E節は、マルチコアアーキテクチャおよび環境を提供するためのシステムおよび方法の実施形態を説明する。
第F節は、クラスタ化されたアプライアンスアーキテクチャ環境を提供するためのシステムおよび方法の実施形態を説明する。
第G節は、仲介手段を介してセッションを維持するためのシステムおよび方法の実施形態を説明する。
A.ネットワークおよびコンピュータ環境
アプライアンスおよび/またはクライアントのシステムおよび方法の実施形態の詳細について議論にすることに先立って、そのような実施形態が展開され得る、ネットワークおよびコンピュータ環境について議論することが役立ち得る。ここで図1Aを参照すると、ネットワーク環境の実施形態が描写されている。要するに、ネットワーク環境は、1つまたはそれを上回るネットワーク104、104’(概して、ネットワーク104と称される)を介して1つまたはそれを上回るサーバ106a−106n(概して、サーバ106または遠隔マシン106とも称される)と通信する1つまたはそれを上回るクライアント102a−102n(概して、ローカルマシン102またはクライアント102とも称される)を備える。いくつかの実施形態では、クライアント102は、アプライアンス200を介してサーバ106と通信する。
図1Aは、クライアント102とサーバ106との間のネットワーク104およびネットワーク104’を示すが、クライアント102およびサーバ106は、同一ネットワーク104上にあってもよい。ネットワーク104および104’は、同一タイプのネットワークまたは異なるタイプのネットワークであることができる。ネットワーク104および/またはネットワーク104’は、企業イントラネット、メトロポリタンエリアネットワーク(MAN)等のローカルエリアネットワーク(LAN)、またはインターネットまたはワールドワイドウェブ等の広域ネットワーク(WAN)であることができる。一実施形態では、ネットワーク104’は、プライベートネットワークであってもよく、ネットワーク104は、公衆ネットワークであってもよい。いくつかの実施形態では、ネットワーク104は、プライベートネットワークであってもよく、ネットワーク104’は、公衆ネットワークであってもよい。別の実施形態では、ネットワーク104および104’は両方とも、プライベートネットワークであってもよい。いくつかの実施形態では、クライアント102は、企業データセンタに位置するサーバ106へのネットワーク104を経由したWAN接続を介して通信する、企業の支店に位置してもよい。
ネットワーク104および/または104’は、任意のタイプおよび/または形態のネットワークであってもよく、以下、すなわち、2点間ネットワーク、放送ネットワーク、広域ネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ATM(非同期転送モード)ネットワーク、SONET(同期光ネットワーク)ネットワーク、SDH(同期デジタル階層)ネットワーク、無線ネットワーク、および有線ネットワークのうちのいずれかを含んでもよい。いくつかの実施形態では、ネットワーク104は、赤外線チャネルまたは衛星帯等の無線リンクを備えてもよい。ネットワーク104および/または104’のトポロジは、バス、スター、またはリングネットワークトポロジであってもよい。ネットワーク104および/または104’およびネットワークトポロジは、本明細書に説明される動作をサポートすることが可能である、当業者に公知であるもの等の任意のネットワークまたはネットワークトポロジであってもよい。
図1Aに示されるように、インターフェースユニット200またはゲートウェイ200とも称され得る、アプライアンス200が、ネットワーク104と104’との間に示されている。いくつかの実施形態では、アプライアンス200は、ネットワーク104上に位置してもよい。例えば、企業の支店が、支店においてアプライアンス200を展開してもよい。他の実施形態では、アプライアンス200は、ネットワーク104’上に位置してもよい。例えば、アプライアンス200は、企業データセンタに位置してもよい。さらに別の実施形態では、複数のアプライアンス200が、ネットワーク104上に展開されてもよい。いくつかの実施形態では、例えば、複数のアプライアンス200が、ネットワーク104’上に展開されてもよい。一実施形態では、第1のアプライアンス200が、第2のアプライアンス200’と通信する。他の実施形態では、アプライアンス200は、任意のクライアント102またはクライアント102と同一または異なるネットワーク104、104’上のサーバ106の一部であり得る。1つまたはそれを上回るアプライアンス200は、クライアント102とサーバ106との間のネットワークまたはネットワーク通信内の任意の点に位置してもよい。
いくつかの実施形態では、アプライアンス200は、NetScaler(R)デバイスと称される、Citrix Systems, Inc.(Ft. Lauderdale Florida)製のネットワークデバイスのうちのいずれかを備える。他の実施形態では、アプライアンス200は、F5 Networks, Inc.(Seattle, Washington)製のWebAcceleratorおよびBigIPと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス205は、DX加速デバイスプラットフォームおよび/またはJuniper Networks, Inc.(Sunnyvale, California))製のSA700、SA2000、SA4000、およびSA6000デバイス等のSSL VPNシリーズのデバイスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス200は、Cisco ACEアプリケーション制御エンジンモジュールサービスソフトウェアおよびネットワークモジュール、およびCisco AVSシリーズアプリケーション速度システム等のCisco Systems, Inc.(SanJose, California)製の任意のアプリケーション加速および/またはセキュリティ関連アプライアンスおよび/またはソフトウェアを含む。
一実施形態では、本システムは、複数の論理的にグループ化されたサーバ106を含んでもよい。これらの実施形態では、サーバの論理グループは、サーバファーム38と称されてもよい。これらの実施形態のうちのいくつかでは、サーバ106は、地理的に分散されてもよい。ある場合には、ファーム38は、単一のエンティティとして運営されてもよい。他の実施形態では、サーバファーム38は、複数のサーバファーム38を備える。一実施形態では、サーバファームは、1つまたはそれを上回るクライアント102の代わりに、1つまたはそれを上回るアプリケーションを実行する。
各ファーム38内のサーバ106は、異種であり得る。サーバ106のうちの1つまたはそれを上回るものが、1つのタイプのオペレーティングシステムプラットフォーム(例えば、Microsoft Corp.(Redmond, Washington)製のWINDOWS NT)に従って動作することができる一方で、他のサーバ106のうちの1つまたはそれを上回るものは、別のタイプのオペレーティングシステムプラットフォーム(例えば、Unix(登録商標)またはLinux(登録商標))に従って動作することができる。各ファーム38のサーバ106は、同一ファーム38内の別のサーバ106に物理的に近接する必要はない。したがって、ファーム38として論理的にグループ化されたサーバ106のグループは、広域ネットワーク(WAN)接続または中域ネットワーク(MAN)接続を使用して、相互接続されてもよい。例えば、ファーム38は、異なる大陸、または大陸、国、州、都市、キャンパス、または部屋の異なる領域の中に物理的に位置する、サーバ106を含んでもよい。ファーム38内のサーバ106の間のデータ伝送速度は、サーバ106がローカルネットワーク(LAN)接続または何らかの形態の直接接続を使用して接続される場合に、増加されることができる。
サーバ106は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、またはゲートウェイサーバと称されてもよい。いくつかの実施形態では、サーバ106は、アプリケーションサーバとして、またはマスタアプリケーションサーバとして機能する能力を有してもよい。一実施形態では、サーバ106は、アクティブディレクトリを含んでもよい。クライアント102はまた、クライアントノードまたはエンドポイントと称されてもよい。いくつかの実施形態では、クライアント102は、サーバ上のアプリケーションへのアクセスを求めるクライアントノードとして、および他のクライアント102a−102nのためのホスト型アプリケーションへのアクセスを提供するアプリケーションサーバとしての両方で機能する能力を有する。
いくつかの実施形態では、クライアント102は、サーバ106と通信する。一実施形態では、クライアント102は、ファーム38内のサーバ106のうちの1つと直接通信する。別の実施形態では、クライアント102は、ファーム38内のサーバ106と通信するように、プログラム隣接アプリケーションを実行する。なおも別の実施形態では、サーバ106は、マスタノードの機能性を提供する。いくつかの実施形態では、クライアント102は、ネットワーク104を通してファーム38内のサーバ106と通信する。ネットワーク104を経由して、クライアント102は、例えば、ファーム38内のサーバ106a−106nによってホストされる種々のアプリケーションの実行を要求し、表示するためにアプリケーション実行の結果の出力を受信することができる。いくつかの実施形態では、マスタノードのみが、要求されたアプリケーションをホストするサーバ106’と関連付けられるアドレス情報を識別して提供するために要求される機能性を提供する。
一実施形態では、サーバ106は、ウェブサーバの機能性を提供する。別の実施形態では、サーバ106aは、クライアント102から要求を受信し、要求を第2のサーバ106bに自動転送し、サーバ106bからの要求への応答とともに、クライアント102による要求に応答する。なおも別の実施形態では、サーバ106は、クライアント102に利用可能なアプリケーションの列挙、およびアプリケーションの列挙によって識別されるアプリケーションをホストするサーバ106と関連付けられるアドレス情報を獲得する。さらに別の実施形態では、サーバ106は、ウェブインターフェースを使用して、要求への応答をクライアント102に提示する。一実施形態では、クライアント102は、識別されたアプリケーションにアクセスするようにサーバ106と直接通信する。別の実施形態では、クライアント102は、サーバ106上の識別されたアプリケーションの実行によって生成される、表示データ等のアプリケーション出力データを受信する。
ここで図1Bを参照すると、複数のアプライアンス200を展開するネットワーク環境の実施形態が描写されている。第1のアプライアンス200が、第1のネットワーク104上に、第2のアプライアンス200’が、第2のネットワーク104’上に展開されてもよい。例えば、企業が、支店において第1のアプライアンス200を、データセンタにおいて第2のアプライアンス200’を展開してもよい。別の実施形態では、第1のアプライアンス200および第2のアプライアンス200’は、同一のネットワーク104またはネットワーク104’上に展開される。例えば、第1のアプライアンス200は、第1のサーバファーム38のために展開されてもよく、第2のアプライアンス200は、第2のサーバファーム38’のために展開されてもよい。別の実施例では、第1のアプライアンス200が、第1の支店において展開されてもよい一方で、第2のアプライアンス200’は、第2の支店’において展開されてもよい。いくつかの実施形態では、第1のアプライアンス200および第2のアプライアンス200’は、ネットワークトラフィックまたはクライアントとサーバとの間のアプリケーションおよびデータの配信を加速するように、相互と協力して、または連動して作動する。
ここで図1Cを参照すると、1つまたはそれを上回るWAN最適化アプライアンス205、205’の間等で1つまたはそれを上回る他のタイプのアプライアンスとともにアプライアンス200を展開する、ネットワーク環境の別の実施形態が描写されている。例えば、第1のWAN最適化アプライアンス205が、ネットワーク104と104’との間に示され、第2のWAN最適化アプライアンス205’が、アプライアンス200と1つまたはそれを上回るサーバ106との間に展開されてもよい。一例として、企業が、支店において第1のWAN最適化アプライアンス205を、データセンタにおいて第2のWAN最適化アプライアンス205’を展開してもよい。いくつかの実施形態では、アプライアンス205は、ネットワーク104’上に位置してもよい。他の実施形態では、アプライアンス205’は、ネットワーク104上に位置してもよい。いくつかの実施形態では、アプライアンス205’は、ネットワーク104’またはネットワーク104”上に位置してもよい。一実施形態では、アプライアンス205および205’は、同一ネットワーク上にある。別の実施形態では、アプライアンス205および205’は、異なるネットワーク上にある。別の実施例では、第1のWAN最適化アプライアンス205が、第1のサーバファーム38のために、第2のWAN最適化アプライアンス205’が、第2のサーバファーム38’のために展開されてもよい。
一実施形態では、アプライアンス205は、WAN接続へ、および/またはそこからのトラフィック等の任意のタイプおよび形態のネットワークトラフィックの性能、動作、またはサービス品質を加速、最適化、または別様に改良するためのデバイスである。いくつかの実施形態では、アプライアンス205は、性能強化プロキシである。他の実施形態では、アプライアンス205は、WAN最適化コントローラと称されることもある、任意のタイプおよび形態のWAN最適化または加速デバイスである。一実施形態では、アプライアンス205は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製のCloudBridge(R)と称される製品実施形態のうちのいずれかである。他の実施形態では、アプライアンス205は、F5 Networks, Inc.(Seattle, Washington)製のBIG−IPリンクコントローラおよびWANjetと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス205は、Juniper Networks, Inc.(Sunnyvale, California)製のWXおよびWXC WAN加速デバイスプラットフォームのうちのいずれかを含む。いくつかの実施形態では、アプライアンス205は、Riverbed Technology(San Francisco, California)製のスチールヘッドラインのWAN最適化アプライアンスのうちのいずれかを含む。他の実施形態では、アプライアンス205は、Expand Networks Inc.(Roseland, New Jersey)製のWAN関連デバイスのうちのいずれかを含む。一実施形態では、アプライアンス205は、Packeteerによって提供されるPacketShaper、iShared、およびSkyX製品実施形態等のPacketeer Inc.(Cupertino, California)製のWAN関連アプライアンスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス205は、Cisco広域ネットワークアプリケーションサービスソフトウェアおよびネットワークモジュール、および広域ネットワークエンジンアプライアンス等のCisco Systems, Inc.(San Jose, California)製の任意のWAN関連アプライアンスおよび/またはソフトウェアを含む。
一実施形態では、アプライアンス205は、支店または遠隔オフィスのためのアプリケーションおよびデータ加速サービスを提供する。一実施形態では、アプライアンス205は、広域ファイルサービス(WAFS)の最適化を含む。別の実施形態では、アプライアンス205は、共通インターネットファイルシステム(CIFS)プロトコルを介して等、ファイルの配信を加速する。他の実施形態では、アプライアンス205は、アプリケーションおよびデータの配信を加速するように、メモリおよび/または記憶装置の中でキャッシングを提供する。一実施形態では、アプライアンス205は、任意のレベルのネットワークスタックにおいて、または任意のプロトコルまたはネットワーク層において、ネットワークトラフィックの圧縮を提供する。別の実施形態では、アプライアンス205は、WAN接続を経由したアプリケーションおよびデータの配信を加速するように、トランスポート層プロトコル最適化、フロー制御、性能強化または修正、および/または管理を提供する。例えば、一実施形態では、アプライアンス205は、トランスポート制御プロトコル(TCP)最適化を提供する。他の実施形態では、アプライアンス205は、任意のセッションまたはアプリケーション層プロトコルのための最適化、フロー制御、性能強化または修正、および/または管理を提供する。
別の実施形態では、アプライアンス205は、存在、機能性、または能力を別のアプライアンス205’にアナウンスするように、任意のタイプおよび形態のデータまたは情報を、ネットワークパケットのカスタムまたは標準TCPおよび/またはIPヘッダフィールドまたはオプションフィールドにエンコードする。別の実施形態では、アプライアンス205’は、TCPおよび/またはIPヘッダフィールドまたはオプションの両方でエンコードされるデータを使用して、別のアプライアンス205’と通信してもよい。例えば、アプライアンスは、WAN加速等の機能性を果たす際に、または相互と連動して作動するために、アプライアンス205、205’によって使用される1つまたはそれを上回るパラメータを通信するようにTCPオプションまたはIPヘッダフィールドまたはオプションを使用してもよい。
いくつかの実施形態では、アプライアンス200は、アプライアンス205と205’との間で通信されるTCPおよび/またはIPヘッダおよび/またはオプションフィールドの中でエンコードされる情報のうちのいずれかを保存する。例えば、アプライアンス200は、クライアントとアプライアンス205および205’をトラバースするサーバとの間からのトランスポート層接続等のアプライアンス200をトラバースするトランスポート層接続を終了させてもよい。一実施形態では、アプライアンス200は、第1のトランスポート層接続を介して第1のアプライアンス205によって伝送されるトランスポート層パケットの中の任意のエンコードされた情報を識別して保存し、第2のトランスポート層接続を介してエンコードされた情報とともにトランスポート層パケットを第2のアプライアンス205’に通信する。
ここで図1Dを参照すると、クライアント102上でコンピュータ環境を配信する、および/または動作させるためのネットワーク環境が描写されている。いくつかの実施形態では、サーバ106は、コンピュータ環境またはアプリケーションおよび/またはデータファイルを1つまたはそれを上回るクライアント102に配信するためのアプリケーション配信システム190を含む。要するに、クライアント10は、ネットワーク104、104’およびアプライアンス200を介してサーバ106と通信する。例えば、クライアント102は、企業の遠隔オフィス、例えば、支店内に常駐してもよく、サーバ106は、企業データセンタに常駐してもよい。クライアント102は、クライアントエージェント120と、コンピュータ環境15とを備える。コンピュータ環境15は、データファイルにアクセスする、それを処理または使用する、アプリケーションを実行または動作させてもよい。コンピュータ環境15、アプリケーション、および/またはデータファイルは、アプライアンス200および/またはサーバ106を介して配信されてもよい。
いくつかの実施形態では、アプライアンス200は、クライアント102へのコンピュータ環境15またはその任意の部分の配信を加速する。一実施形態では、アプライアンス200は、アプリケーション配信システム190によるコンピュータ環境15の配信を加速する。例えば、本明細書に説明される実施形態は、中央企業データセンタから企業の支店等の遠隔ユーザ場所へのアプリケーションによって処理可能なストリーミングアプリケーションおよびデータファイルの配信を加速するために使用されてもよい。別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間のトランスポート層トラフィックを加速する。アプライアンス200は、1)トランスポート層接続プール、2)トランスポート層接続多重化、3)トランスポート制御プロトコルバッファリング、4)圧縮、および5)キャッシング等のサーバ106からクライアント102への任意のトランスポート層ペイロードを加速するための加速技法を提供してもよい。いくつかの実施態では、アプライアンス200は、クライアント102からの要求に応答する際に、サーバ106の負荷平衡を提供する。他の実施形態では、アプライアンス200は、1つまたはそれを上回るサーバ106へのアクセスを提供するように、プロキシまたはアクセスサーバとして作用する。別の実施形態では、アプライアンス200は、SSL VPN接続等のクライアント102の第1のネットワーク104からサーバ106の第2のネットワーク104’へのセキュアな仮想プライベートネットワーク接続を提供する。さらに他の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の接続および通信のアプリケーションファイアウォールセキュリティ、制御、および管理を提供する。
いくつかの実施形態では、アプリケーション配信管理システム190は、複数の実行方法に基づいて、かつポリシエンジン195を介して適用される任意の認証および承認ポリシに基づいて、コンピュータ環境を遠隔または別様にユーザのデスクトップに配信するアプリケーション配信技法を提供する。これらの技法を用いることで、遠隔ユーザは、任意のネットワーク接続されたデバイス100から、コンピュータ環境およびサーバに記憶されたアプリケーションおよびデータファイルへのアクセスを取得してもよい。一実施形態では、アプリケーション配信システム190は、サーバ106上で常駐または実行してもよい。別の実施形態では、アプリケーション配信システム190は、複数のサーバ106a−106n上で常駐または実行してもよい。いくつかの実施形態では、アプリケーション配信システム190は、サーバファーム38内で実行してもよい。一実施形態では、アプリケーション配信システム190を実行するサーバ106はまた、アプリケーションおよびデータファイルを記憶または提供してもよい。別の実施形態では、1つまたはそれを上回るサーバ106の第1のセットが、アプリケーション配信システム190を実行してもよく、異なるサーバ106nが、アプリケーションおよびデータファイルを記憶または提供してもよい。いくつかの実施形態では、アプリケーション配信システム190、アプリケーション、およびデータファイルはそれぞれ、異なるサーバ上に常駐または位置してもよい。さらに別の実施形態では、アプリケーション配信システム190の任意の部分が、アプライアンス200または複数のアプライアンス上に常駐、実行、または記憶される、またはそれに分配されてもよい。
クライアント102は、データファイルを使用または処理するアプリケーションを実行するためのコンピュータ環境15を含んでもよい。ネットワーク104、104’およびアプライアンス200を介したクライアント102は、サーバ106からアプリケーションおよびデータファイルを要求してもよい。一実施形態では、アプライアンス200は、クライアント102からサーバ106に要求を自動転送してもよい。例えば、クライアント102は、ローカルに記憶された、またはアクセス可能であるアプリケーションおよびデータファイルを有していない場合がある。要求に応答して、アプリケーション配信システム190および/またはサーバ106は、アプリケーションおよびデータファイルをクライアント102に配信してもよい。例えば、一実施形態では、サーバ106は、クライアント102上のコンピュータ環境15内で動作するようにアプリケーションストリームとしてアプリケーションを伝送してもよい。
いくつかの実施形態では、アプリケーション配信システム190は、XenApp(R)またはXenDesktop(R)等のCitrix Workspace Suite(TM)(Citrix Systems, Inc.)製の任意の部分および/またはMicrosoft Corporation製のMicrosoft(登録商標)Windows(登録商標) Terminal Servicsのうちのいずれかを備える。一実施形態では、アプリケーション配信システム190は、遠隔表示プロトコルを介して、または別様に遠隔ベースまたはサーバベースの計算を介して、1つまたはそれを上回るアプリケーションをクライアント102またはユーザに配信してもよい。別の実施形態では、アプリケーション配信システム190は、アプリケーションのストリーミングを介して、1つまたはそれを上回るアプリケーションをクライアントまたはユーザに配信してもよい。
一実施形態では、アプリケーション配信システム190は、アプリケーションへのアクセス、アプリケーション実行方法の選択、およびアプリケーションの配信を制御および監視するためのポリシエンジン195を含む。いくつかの実施形態では、ポリシエンジン195は、ユーザまたはクライアント102がアクセスし得る、1つまたはそれを上回るアプリケーションを判定する。別の実施形態では、ポリシエンジン195は、どのようにしてアプリケーションがユーザまたはクライアント102に配信されるべきか、例えば、実行の方法を判定する。いくつかの実施形態では、アプリケーション配信システム190は、サーバベースの計算、ローカル実行のためにローカルにアプリケーションをクライアント120にストリーム配信または配信すること等のアプリケーション実行の方法を選択する、複数の配信技法を提供する。
一実施形態では、クライアント102は、アプリケーションプログラムの実行を要求し、サーバ106を備えるアプリケーション配信システム190は、アプリケーションプログラムを実行する方法を選択する。いくつかの実施形態では、サーバ106は、クライアント102から証明書を受信する。別の実施形態では、サーバ106は、クライアント102から利用可能なアプリケーションの列挙の要求を受信する。一実施形態では、証明書の要求または受信に応答して、アプリケーション配信システム190は、クライアント102に利用可能な複数のアプリケーションプログラムを列挙する。アプリケーション配信システム190は、列挙されたアプリケーションを実行する要求を受信する。アプリケーション配信システム190は、例えば、ポリシエンジンのポリシに応答して、列挙されたアプリケーションを実行するための所定数の方法のうちの1つを選択する。アプリケーション配信システム190は、クライアント102が、サーバ106上のアプリケーションプログラムの実行によって生成されるアプリケーション出力データを受信することを可能にする、アプリケーションの実行の方法を選択してもよい。アプリケーション配信システム190は、アプリケーションを備える複数のアプリケーションファイルを読み出した後に、ローカルマシン10がローカルでアプリケーションプログラムを実行することを可能にする、アプリケーションの実行の方法を選択してもよい。さらに別の実施形態では、アプリケーション配信システム190は、ネットワーク104を介してクライアント102にアプリケーションをストリーム配信するように、アプリケーションの実行の方法を選択してもよい。
クライアント102は、任意のタイプおよび/または形態のウェブブラウザ、ウェブベースのクライアント、クライアント・サーバアプリケーション、シンクライアントコンピューティングクライアント、Active Xコントロール、またはJava(登録商標)アプレット等の任意のタイプおよび/または形態のソフトウェア、プログラム、または実行可能命令、またはクライアント102上で実行することが可能な任意のタイプおよび/または形態の実行可能命令であることができる、アプリケーションを実行、動作、または別様に提供してもよい。いくつかの実施形態では、アプリケーションは、サーバ106上のクライアント102の代わりに実行される、サーバベースまたは遠隔ベースのアプリケーションであってもよい。一実施形態では、サーバ106は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製の独立コンピューティングアーキテクチャ(ICA)プロトコルまたはMicrosoft Corporation(Redmond, Washington)製の遠隔デスクトッププロトコル(RDP)等の任意のシンクライアントまたは遠隔表示プロトコルを使用して、クライアント102への出力を表示してもよい。アプリケーションは、任意のタイプのプロトコルを使用することができ、それは、例えば、HTTPクライアント、FTPクライアント、Oscarクライアント、またはTelnetクライアントであることができる。他の実施形態では、アプリケーションは、ソフトIP電話等のVoIP通信に関連する任意のタイプのソフトウェアを備える。さらなる実施形態では、アプリケーションは、ビデオおよび/またはオーディオをストリーミング配信するためのアプリケーション等のリアルタイムデータ通信に関連する任意のアプリケーションを備える。
いくつかの実施形態では、サーバ106またはサーバファーム38は、シンクライアント計算を提供するアプリケーションまたは遠隔表示プレゼンテーションアプリケーション等の1つまたはそれを上回るアプリケーションを起動していてもよい。一実施形態では、サーバ106またはサーバファーム38は、XenApp(R)またはXenDesktop(R)等のCitrix Workspace Suite(TM)(Citrix Systems, Inc.)製の任意の部分および/またはMicrosoft Corporation製のMicrosoft(R) Windows(登録商標) Terminal Servicesのうちのいずれかをアプリケーションとして実行する。一実施形態では、アプリケーションは、Citrix Systems, Inc.(Fort Lauderdale, Florida)によって開発されたICAクライアントである。他の実施形態では、アプリケーションは、Microsoft Corporation(Redmond, Washington)によって開発された遠隔デスクトップ(RDP)クライアントを含む。また、サーバ106は、例えば、Microsoft Corporation(Redmond, Washington)製のMicrosoft Exchange等のEメールサービスを提供するアプリケーションサーバ、ウェブまたはインターネットサーバ、またはデスクトップ共有サーバ、または協調サーバであり得る、アプリケーションを起動してもよい。いくつかの実施形態では、アプリケーションのうちのいずれかは、Citrix Systems, Inc.(Fort Lauderdale, Florida)によって提供されるGoToMeeting(TM)、Cisco Systems, Inc.(San Jose, California)によって提供されるWebEx(TM)、またはMicrosoft Corporation(Redmond, Washington)によって提供されるMicrosoft Office Live Meeting等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
依然として図1Dを参照すると、ネットワーク環境の実施形態は、監視サーバ106Aを含んでもよい。監視サーバ106Aは、任意のタイプおよび形態の性能監視サービス198を含んでもよい。性能監視サービス198は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および/または管理ソフトウェアおよび/またはハードウェアを含んでもよい。一実施形態では、性能監視サービス198は、1つまたはそれを上回る監視エージェント197を含む。監視エージェント197は、クライアント102、サーバ106、またはアプライアンス200、205等のデバイス上で監視、測定、およびデータ収集アクティビティを行うための任意のソフトウェア、ハードウェア、またはその組み合わせを含む。いくつかの実施形態では、監視エージェント197は、Visual BasicスクリプトまたはJavascript(登録商標)等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント197は、デバイスの任意のアプリケーションおよび/またはユーザに対して透過的に実行する。いくつかの実施形態では、監視エージェント197は、アプリケーションまたはクライアントに影響を及ぼすことなくインストールおよび動作される。さらに別の実施形態では、監視エージェント197は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
いくつかの実施形態では、監視エージェント197は、所定の頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント197は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント197は、ウェブページまたはHTTP応答の受信の要求の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント197は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント197は、任意の監視、測定、または収集されたデータを監視サービス198に報告または提供してもよい。一実施形態では、監視エージェント197は、スケジュールまたは所定の頻度に従って、情報を監視サービス198に伝送する。別の実施形態では、監視エージェント197は、イベントの検出に応じて、情報を監視サービス198に伝送する。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、クライアント、サーバ、サーバファーム、アプライアンス200、アプライアンス205、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を行う。一実施形態では、監視サービス198および/または監視エージェント197は、TCPまたはUDP接続等の任意のトランスポート層接続の監視および性能測定を行う。別の実施形態では、監視サービス198および/または監視エージェント197は、ネットワーク待ち時間を監視して測定する。さらなる一実施形態では、監視サービス198および/または監視エージェント197は、帯域幅利用を監視して測定する。
他の実施形態では、監視サービス198および/または監視エージェント197は、エンドユーザ応答時間を監視して測定する。いくつかの実施形態では、監視サービス198は、アプリケーションの監視および性能測定を行う。別の実施形態では、監視サービス198および/または監視エージェント197は、アプリケーションへの任意のセッションまたは接続の監視および性能測定を行う。一実施形態では、監視サービス198および/または監視エージェント197は、ブラウザの性能を監視して測定する。別の実施形態では、監視サービス198および/または監視エージェント197は、HTTPベースのトランザクションの性能を監視して測定する。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、ボイスオーバーIP(VoIP)アプリケーションまたはセッションの性能を監視して測定する。他の実施形態では、監視サービス198および/または監視エージェント197は、ICAクライアントまたはRDPクライアント等の遠隔表示プロトコルアプリケーションの性能を監視して測定する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、任意のタイプおよび形態のストリーミングメディアの性能を監視して測定する。なおもさらなる実施形態では、監視サービス198および/または監視エージェント197は、ホスト型アプリケーションまたはサービスとしてのソフトウェア(SaaS)配信モデルの性能を監視して測定する。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、アプリケーションに関連する1つまたはそれを上回るトランザクション、要求、または応答の監視および性能測定を行う。他の実施形態では、監視サービス198および/または監視エージェント197は、任意の.NETまたはJ2EEコール等のアプリケーション層スタックの任意の部分を監視して測定する。一実施形態では、監視サービス198および/または監視エージェント197は、データベースまたはSQLトランザクションを監視して測定する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、任意の方法、機能、またはアプリケーションプログラミングインターフェース(API)コールを監視して測定する。
一実施形態では、監視サービス198および/または監視エージェント197は、アプライアンス200および/またはアプライアンス205等の1つまたはそれを上回るアプライアンスを介したサーバからクライアントへのアプリケーションおよび/またはデータの配信の監視および性能測定を行う。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、仮想化されたアプリケーションの配信の性能を監視して測定する。他の実施形態では、監視サービス198および/または監視エージェント197は、ストリーミングアプリケーションの配信の性能を監視して測定する。別の実施形態では、監視サービス198および/または監視エージェント197は、クライアントへのデスクトップアプリケーションの配信および/またはクライアント上のデスクトップアプリケーションの実行の性能を監視して測定する。別の実施形態では、監視サービス198および/または監視エージェント197は、クライアント/サーバアプリケーションの性能を監視して測定する。
一実施形態では、監視サービス198および/または監視エージェント197は、アプリケーション配信システム190のためのアプリケーション性能管理を提供するように設計および構築される。例えば、監視サービス198および/または監視エージェント197は、Citrixプレゼンテーションサーバを介して、アプリケーションの配信の性能を監視、測定、および管理してもよい。本実施例では、監視サービス198および/または監視エージェント197は、個々のICAセッションを監視する。監視サービス198および/または監視エージェント197は、合計およびセッション毎のシステムリソース使用料、およびアプリケーションおよびネットワーキング性能を測定してもよい。監視サービス198および/または監視エージェント197は、所与のユーザおよび/またはユーザセッションのためのアクティブなサーバを識別してもよい。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、アプリケーション配信システム190とアプリケーションおよび/またはデータベースサーバとの間のバックエンド接続を監視する。監視サービス198および/または監視エージェント197は、ユーザセッションまたはICAセッションあたりのネットワーク待ち時間、遅延、および量を測定してもよい。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、ユーザセッションあたりおよび/またはプロセスあたりの総メモリ使用量等のアプリケーション配信システム190のためのメモリ使用量を測定して監視する。他の実施形態では、監視サービス198および/または監視エージェント197は、ユーザセッションあたりおよび/またはプロセスあたりの総CPU使用量等のアプリケーション配信システム190のCPU使用量を測定して監視する。別の実施形態では、監視サービス198および/または監視エージェント197は、Citrixプレゼンテーションサーバ等のアプリケーション、サーバ、またはアプリケーション配信システムにログインするために要求される時間を測定して監視する。一実施形態では、監視サービス198および/または監視エージェント197は、ユーザがアプリケーション、サーバ、またはアプリケーション配信システム190にログインされている持続時間を測定して監視する。いくつかの実施形態では、監視サービス198および/または監視エージェント197は、アプリケーション、サーバ、またはアプリケーション配信システムセッションのためのアクティブおよび非アクティブなセッションカウントを測定して監視する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、ユーザセッション待ち時間を測定して監視する。
その上さらなる実施形態では、監視サービス198および/または監視エージェント197は、任意のタイプおよび形態のサーバメトリックを測定して監視する。一実施形態では、監視サービス198および/または監視エージェント197は、システムメモリ、CPU使用量、およびディスク記憶装置に関連するメトリックを測定して監視する。別の実施形態では、監視サービス198および/または監視エージェント197は、1秒あたりのページフォールト等のページフォールトに関連するメトリックを測定して監視する。他の実施形態では、監視サービス198および/または監視エージェント197は、ラウンドトリップタイムメトリックを測定して監視する。さらに別の実施形態では、監視サービス198および/または監視エージェント197は、アプリケーションクラッシュ、エラー、および/またはハングアップに関連するメトリックを測定して監視する。
いくつかの実施形態では、監視サービス198および監視エージェント198は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製のEdgeSightと称される製品実施形態のうちのいずれかを含む。別の実施形態では、性能監視サービス198および/または監視エージェント198は、Symphoniq Corporation(PaloAlto, California)製のTrueView製品スイートと称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス198および/または監視エージェント198は、TeaLeaf Technology Inc.(San Francisco, California)製のTeaLeafCX製品スイートと称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス198および/または監視エージェント198は、BMC Software,Inc.(Houston, Texas)製のBMC性能マネージャおよびパトロール製品等のビジネスサービス管理製品の任意の部分を含む。
クライアント102、サーバ106、およびアプライアンス200は、任意のタイプおよび形態のネットワーク上で通信し、本明細書に説明される動作を行うことが可能なコンピュータ、ネットワークデバイス、またはアプライアンス等の任意のタイプおよび形態のコンピューティングデバイスとして展開され、および/またはその上で実行されてもよい。図1Eおよび1Fは、クライアント102、サーバ106、またはアプライアンス200の実施形態を実践するために有用なコンピューティングデバイス100のブロック図を描写する。図1Eおよび1Fに示されるように、各コンピューティングデバイス100は、中央処理ユニット101と、主要メモリユニット122とを含む。図1Eに示されるように、コンピューティングデバイス100は、視覚表示デバイス124、キーボード126、および/またはマウス等のポインティングデバイス127を含んでもよい。各コンピューティングデバイス100はまた、1つまたはそれを上回る入出力デバイス130a−130b(概して、参照数字130を使用して参照される)および中央処理ユニット101と通信するキャッシュメモリ140等の付加的な随意の要素を含んでもよい。
中央処理ユニット101は、主要メモリユニット122からフェッチされた命令に応答し、それらを処理する、任意の論理回路である。多くの実施形態では、中央処理ユニットは、Intel Corporation(Mountain View, California)製のもの、Motorola Corporation(Schaumburg, Illinois)製のもの、Transmeta Corporation(SantaClara, California)製のもの、RS/6000プロセッサ、International Business Machines(White Plains, New York)製のもの、またはAdvanced Micro Devices(Sunnyvale, California)製のもの等のマイクロプロセッサユニットによって提供される。コンピューティングデバイス100は、これらのプロセッサのうちのいずれか、または本明細書に説明されるように動作することが可能な任意の他のプロセッサに基づいてもよい。
主要メモリユニット122は、スタティックランダムアクセスメモリ(SRAM)、バーストSRAMまたは同期バーストSRAM(BSRAM)、ダイナミックランダムアクセスメモリ(DRAM)、高速ページモードDRAM(FPM DRAM)、強化DRAM(EDRAM)、拡張データ出力RAM(EDO RAM)、拡張データ出力DRAM(EDO DRAM)、バースト拡張データ出力DRAM(BEDO DRAM)、強化DRAM(EDRAM)、同期DRAM(SDRAM)、JEDEC SRAM、PC100 SDRAM、ダブルデータレートSDRAM(DDR SDRAM)、強化SDRAM(ESDRAM)、SyncLink DRAM(SLDRAM)、Direct RambusDRAM(DRDRAM)、または強誘電体RAM(FRAM(登録商標))等のデータを記憶することが可能であり、任意の記憶場所がマイクロプロセッサ101によって直接アクセスすることを可能にする、1つまたはそれを上回るメモリチップであってもよい。主要メモリ122は、上記のメモリチップのうちのいずれか、または本明細書に説明されるように動作することが可能である任意の他の利用可能なメモリチップに基づいてもよい。図1Eに示される実施形態では、プロセッサ101は、システムバス150を介して主要メモリ122と通信する(以下でさらに詳細に説明される)。図1Fは、プロセッサがメモリポート103を介して主要メモリ122と直接通信する、コンピューティングデバイス100の実施形態を描写する。例えば、図1Fでは、主要メモリ122は、DRDRAMであってもよい。
図1Fは、主要プロセッサ101が、時として、バックサイドバスと称されることもある二次バスを介して、キャッシュメモリ140と直接通信する、実施形態を描写する。他の実施形態では、主要プロセッサ101は、システムバス150を使用してキャッシュメモリ140と通信する。キャッシュメモリ140は、典型的には、主要メモリ122よりも速い応答時間を有し、典型的には、SRAM、BSRAM、またはEDRAMによって提供される。図1Fに示される実施形態では、プロセッサ101は、ローカルシステムバス150を介して種々のI/Oデバイス130と通信する。中央処理ユニット101をI/Oデバイス130のうちのいずれかに接続するために、VESA VLバス、ISAバス、EISAバス、MicroChannel Architecture(MCA)バス、PCIバス、PCI−Xバス、PCI−Expressバス、またはNuBusを含む、種々のバスが使用されてもよい。I/Oデバイスがビデオディスプレイ124である実施形態に関して、プロセッサ101は、ディスプレイ124と通信するためにAdvanced Graphics Port(AGP)を使用してもよい。図1Fは、主要プロセッサ101が、HyperTransport、Rapid I/O、またはInfiniBandを介してI/Oデバイス130bと直接通信する、コンピュータ100の実施形態を描写する。図1Fはまた、ローカルバスおよび直接通信が混合される、実施形態も描写し、プロセッサ101は、I/Oデバイス130aと直接通信しながら、ローカル相互接続バスを使用してI/Oデバイス130bと通信する。
コンピューティングデバイス100は、3.5インチ、5.25インチディスク、またはZIPディスク等のフロッピー(登録商標)ディスクを受容するためのフロッピー(登録商標)ディスクドライブ、CD−ROMドライブ、CD−R/RWドライブ、DVD−ROMドライブ、種々の形式のテープドライブ、USBデバイス、ハードドライブ、またはソフトウェアおよび任意のクライアントエージェント120またはその一部等のプログラムをインストールするために好適な任意の他のデバイス等の任意の好適なインストールデバイス116をサポートしてもよい。コンピューティングデバイス100はさらに、オペレーティングシステムおよび他の関連ソフトウェアを記憶するため、およびクライアントエージェント120に関連する任意のプログラム等のアプリケーションソフトウェアプログラムを記憶するために、1つまたはそれを上回るハードディスクドライブまたは独立ディスクの冗長アレイ等の記憶デバイス128を備えてもよい。随意に、インストールデバイス116のうちのいずれかはまた、記憶デバイス128としても使用され得る。加えて、オペレーティングシステムおよびソフトウェアは、ブート可能媒体、例えば、knoppix.netからのGNU/Linux(登録商標)配布として入手可能であるGNU/Linux(登録商標)用のブート可能CDである、KNOPPIX(R)等のブート可能CDから起動されることができる。
さらに、コンピューティングデバイス100は、標準電話回線、LANまたはWANリンク(例えば、802.11、T1、T3、56kb、X.25)、ブロードバンド接続(例えば、ISDN、フレームリレー、ATM、)、無線接続、または上記のうちのいずれかまたは全てのある組み合わせを含むが、それらに限定されない、種々の接続を通して、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、またはインターネットにインターフェース接続するように、ネットワークインターフェース118を含んでもよい。ネットワークインターフェース118は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、PCMCIAネットワークカード、カードバスネットワークアダプタ、無線ネットワークアダプタ、USBネットワークアダプタ、モデム、または通信が可能であり、本明細書に説明される動作を行う、任意のタイプのネットワークにコンピューティングデバイス100をインターフェース接続するために好適な任意の他のデバイスを備えてもよい。
多種多様なI/Oデバイス130a−130nが、コンピューティングデバイス100の中に存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、ドローイングタブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および染料昇華プリンタを含む。I/Oデバイス130は、図1Eに示されるようにI/Oコントローラ123によって制御されてもよい。I/Oコントローラは、キーボード126およびポインティングデバイス127、例えば、マウスまたは光学ペン等の1つまたはそれを上回るI/Oデバイスを制御してもよい。さらに、I/Oデバイスはまた、コンピューティングデバイス100用の記憶装置128および/またはインストール媒体116を提供してもよい。なおも他の実施形態では、コンピューティングデバイス100は、Twintech Industry, Inc.(Los Alamitos, California)製のUSBフラッシュドライブ系列のデバイス等のハンドヘルドUSB記憶デバイスを受容するUSB接続を提供してもよい。
いくつかの実施形態では、コンピューティングデバイス100は、それぞれ、同一または異なるタイプおよび/または形態であり得る、複数の表示デバイス124a−124nを備える、またはそれらに接続されてもよい。したがって、I/Oデバイス130a−130nおよび/またはI/Oコントローラ123のうちのいずれかは、コンピューティングデバイス100による複数の表示デバイス124a−124nの接続および使用をサポートする、有効にする、または提供するように、任意のタイプおよび/または形態の好適なハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを備えてもよい。例えば、コンピューティングデバイス100は、表示デバイス124a−124nをインターフェース接続する、通信する、接続する、または別様に使用するように、任意のタイプおよび/または形態のビデオアダプタ、ビデオカード、ドライバ、および/またはライブラリを含んでもよい。一実施形態では、ビデオアダプタは、複数の表示デバイス124a−124nにインターフェース接続するように、複数のコネクタを備えてもよい。他の実施形態では、コンピューティングデバイス100は、複数のビデオアダプタを含んでもよく、各ビデオアダプタは、表示デバイス124a−124nのうちの1つまたはそれを上回るものに接続される。いくつかの実施形態では、コンピューティングデバイス100のオペレーティングシステムの任意の部分が、複数の表示デバイス124a−124nを使用するために構成されてもよい。他の実施形態では、表示デバイス124a−124nのうちの1つまたはそれを上回るものは、例えば、ネットワークを介して、コンピューティングデバイス100に接続されるコンピューティングデバイス100aおよび100b等の1つまたはそれを上回る他のコンピューティングデバイスによって提供されてもよい。これらの実施形態は、コンピューティングデバイス100用の第2の表示デバイス124aとして別のコンピュータの表示デバイスを使用するように設計および構築される、任意のタイプのソフトウェアを含んでもよい。当業者は、コンピューティングデバイス100が複数の表示デバイス124a−124nを有するように構成されてもよい、種々の方法および実施形態を認識して理解するであろう。
さらなる実施形態では、I/Oデバイス130は、システムバス150と、USBバス、Appleデスクトップバス、RS−232シリアル接続、SCSIバス、FireWireバス、FireWire800バス、イーサネット(登録商標)バス、AppleTalkバス、ギガビットイーサネット(登録商標)バス、非同期転送モードバス、HIPPIバス、スーパーHIPPIバス、SerialPlusバス、SCI/LAMPバス、FibreChannelバス、またはシリアルアタッチド小型コンピュータシステムインターフェースバス等の外部通信バスとの間のブリッジ170であってもよい。
図1Eおよび1Fで描写される種類のコンピューティングデバイス100は、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。コンピューティングデバイス100は、Microsoft(登録商標)Windows(登録商標)オペレーティングシステムのバージョンのうちのいずれか、Unix(登録商標)およびLinux(登録商標)オペレーティングシステムの異なるリリース、Macintoshコンピュータ用のMac OS(R)の任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、またはコンピューティングデバイス上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。典型的なオペレーティングシステムは、とりわけ、全てMicrosoft Corporation(Redmond, Washington)製である、WINDOWS(登録商標)3.x、WINDOWS95、WINDOWS98、WINDOWS2000、WINDOWS NT3.51、WINDOWS NT4.0、WINDOWS CE、およびWINDOWS XP、Apple Computer(Cupertino, California)製のMacOS、International Business Machines(Armonk, New York)製のOS/2、およびCaldera Corp.(Salt LakeCity, Utah)によって配布される無料で入手可能なオペレーティングシステムであるLinux(登録商標)、または任意のタイプおよび/または形態のUNIX(登録商標)オペレーティングシステムを含む。
他の実施形態では、コンピューティングデバイス100は、デバイスと一致する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ100は、Palm,Inc製のTreo180、270、1060、600、または650スマートフォンである。本実施形態では、Treoスマートフォンは、PalmOSオペレーティングシステムの制御下で動作され、スタイラス入力デバイスおよび5方向ナビゲータデバイスを含む。また、コンピューティングデバイス100は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または通信が可能であり、本明細書に説明される動作を行うために十分なプロセッサ能力およびメモリ容量を有する、他の形態のコンピューティングまたは電気通信デバイスであることができる。
図1Gに示されるように、コンピューティングデバイス100は、複数のプロセッサを備えてもよく、命令の同時実行のため、または1つよりも多くのデータについての1つの命令の同時実行のための機能性を提供してもよい。いくつかの実施形態では、コンピューティングデバイス100は、1つまたはそれを上回るコアを伴う並列プロセッサを備えてもよい。これらの実施形態のうちの1つでは、コンピューティングデバイス100は、単一のグローバルアドレス空間としての全ての利用可能なメモリにアクセスする、複数のプロセッサおよび/または複数のプロセッサコアを伴う共有メモリ並列デバイスである。これらの実施形態のうちの別のものでは、コンピューティングデバイス100は、それぞれローカルメモリのみにアクセスする、複数のプロセッサを伴う分散型メモリ並列デバイスである。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス100は、共有される、あるメモリと、特定のプロセッサまたはプロセッサのサブセットのみによってアクセスされることができる、あるメモリとの両方を有する。これらの実施形態のうちのなおもさらに別のものでは、マルチコアマイクロプロセッサ等のコンピューティングデバイス100は、2つまたはそれを上回る独立プロセッサを、単一のパッケージ、多くの場合、単一の集積回路(IC)に合体させる。これらの実施形態のうちのさらに別のものでは、コンピューティングデバイス100は、CELL BROADBAND ENGINEアーキテクチャを有し、Powerプロセッサ要素と、複数の相乗的処理要素とを含む、チップを含み、Powerプロセッサ要素および複数の相乗的処理要素は、要素相互接続バスと称され得る、内部高速バスによってともに連結される。
いくつかの実施形態では、プロセッサは、複数のデータについての単一の命令を同時に実行するための機能性(SIMD)を提供する。他の実施形態では、プロセッサは、複数のデータについての複数の命令を同時に実行するための機能性(MIMD)を提供する。なおも他の実施形態では、プロセッサは、単一のデバイスでSIMDおよびMIMDコアの任意の組み合わせを使用してもよい。
いくつかの実施形態では、コンピューティングデバイス100は、グラフィックス処理ユニットを備えてもよい。図1Hで描写される、これらの実施形態のうちの1つでは、コンピューティングデバイス100は、少なくとも1つの中央処理ユニット101と、少なくとも1つのグラフィックス処理ユニットとを含む。これらの実施形態のうちの別のものでは、コンピューティングデバイス100は、少なくとも1つの並列処理ユニットと、少なくとも1つのグラフィックス処理ユニットとを含む。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス100は、任意のタイプの複数の処理ユニットを含み、複数の処理ユニットのうちの1つは、グラフィックス処理ユニットを備える。
いくつかの実施形態では、第1のコンピューティングデバイス100aは、クライアントコンピューティングデバイス100bのユーザの代わりにアプリケーションを実行する。他の実施形態では、コンピューティングデバイス100aは、アプリケーションがユーザまたはクライアントコンピューティングデバイス100bの代わりに実行する、実行セッションを提供する、仮想マシンを実行する。これらの実施形態のうちの1つでは、実行セッションは、ホスト型デスクトップセッションである。これらの実施形態のうちの別のものでは、コンピューティングデバイス100は、端末サービスセッションを実行する。端末サービスセッションは、ホスト型デスクトップ環境を提供してもよい。これらの実施形態のうちのなおも別のものでは、実行セッションは、アプリケーション、複数のアプリケーション、デスクトップアプリケーション、および1つまたはそれを上回るアプリケーションが実行し得るデスクトップセッションのうちの1つまたはそれを上回るものを備え得る、コンピュータ環境へのアクセスを提供する。
B.アプライアンスアーキテクチャ
図2Aは、アプライアンス200の例示的実施形態を図示する。図2Aのアプライアンス200のアーキテクチャは、例証のみとして提供され、限定的であることを意図していない。図2に示されるように、アプライアンス200は、ハードウェア層206と、ユーザ空間202およびカーネル空間204に分割されるソフトウェア層とを備える。
ハードウェア層206は、カーネル空間204およびユーザ空間202内のプログラムおよびサービスが実行される、ハードウェア要素を提供する。ハードウェア層206はまた、カーネル空間204およびユーザ空間202内のプログラムおよびサービスがアプライアンス200に対して内部および外部の両方でデータを通信することを可能にする、構造および要素も提供する。図2に示されるように、ハードウェア層206は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット262と、ソフトウェアおよびデータを記憶するためのメモリ264と、ネットワークを経由してデータを伝送および受信するためのネットワークポート266と、ネットワークを経由して伝送および受信されるデータのセキュアなソケット層処理に関連する機能を果たすための暗号化プロセッサ260とを含む。いくつかの実施形態では、中央処理ユニット262は、単一のプロセッサにおいて暗号化プロセッサ260の機能を果たしてもよい。加えて、ハードウェア層206は、処理ユニット262および暗号化プロセッサ260のそれぞれのための複数のプロセッサを備えてもよい。プロセッサ262は、図1Eおよび1Fに関連して上記で説明されるプロセッサ101のうちのいずれかを含んでもよい。例えば、一実施形態では、アプライアンス200は、第1のプロセッサ262と、第2のプロセッサ262’とを備える。他の実施形態では、プロセッサ262または262’は、マルチコアプロセッサを備える。
アプライアンス200のハードウェア層206は、概して、暗号化プロセッサ260とともに図示されるが、プロセッサ260は、セキュアソケットレイヤ(SSL)またはトランスポート層セキュリティ(TLS)プロトコル等の任意の暗号化プロトコルに関連する機能を果たすためのプロセッサであってもよい。いくつかの実施形態では、プロセッサ260は、汎用プロセッサ(GPP)であってもよく、さらなる実施形態では、任意のセキュリティ関連プロトコルの処理を行うための実行可能命令を有してもよい。
アプライアンス200のハードウェア層206は、図2のある要素とともに図示されるが、アプライアンス200のハードウェア部分またはコンポーネントは、図1Eおよび1Fと併せて本明細書に図示および議論されるコンピューティングデバイス100等のコンピューティングデバイスの任意のタイプおよび形態の要素、ハードウェア、またはソフトウェアを備えてもよい。いくつかの実施形態では、アプライアンス200は、サーバ、ゲートウェイ、ルータ、スイッチ、ブリッジ、または他のタイプのコンピューティングまたはネットワークデバイスを備え、それと関連付けられる任意のハードウェアおよび/またはソフトウェア要素を有してもよい。
アプライアンス200のオペレーティングシステムは、利用可能なシステムメモリをカーネル空間204およびユーザ空間204の中へ配分、管理、または別様に分離する。例示的ソフトウェアアーキテクチャ200では、オペレーティングシステムは、任意のタイプおよび/または形態のUnix(登録商標)オペレーティングシステムであってもよいが、本発明は、そのように限定されない。したがって、アプライアンス200は、Microsoft(登録商標)Windows(登録商標)オペレーティングシステムのバージョンのうちのいずれか、UNIX(登録商標)およびLinux(登録商標)オペレーティングシステムの異なるリリース、Macintoshコンピュータ用のMac OS(R)の任意のバージョン、任意の組み込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、またはアプライアンス200上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。
カーネル空間204は、任意のデバイスドライバ、カーネル拡張、または他のカーネル関連ソフトウェアを含む、カーネル230を起動するために留保される。当業者に公知であるように、カーネル230は、オペレーティングシステムのコアであり、アプリケーション104のリソースおよびハードウェア関連要素のアクセス、制御、および管理を提供する。アプライアンス200の実施形態によると、カーネル空間204はまた、その利益が本明細書でさらに詳細に説明される、時として、統合キャッシュと称されることもある、キャッシュマネージャ232と連動して作動するいくつかのネットワークサービスまたはプロセスも含む。加えて、カーネル230の実施形態は、デバイス200によってインストール、構成、または別様に使用されるオペレーティングシステムの実施形態に依存するであろう。
一実施形態では、デバイス200は、クライアント102および/またはサーバ106と通信するために、TCP/IPベースのスタック等の1つのネットワークスタック267を備える。一実施形態では、ネットワークスタック267は、ネットワーク108等の第1のネットワークおよび第2のネットワーク110と通信するために使用される。いくつかの実施形態では、デバイス200は、クライアント102のTCP接続等の第1のトランスポート層接続を終了させ、クライアント102によって使用するためにサーバ106への第2のトランスポート層接続を確立し、例えば、第2のトランスポート層接続は、アプライアンス200およびサーバ106において終了される。第1および第2のトランスポート層接続は、単一のネットワークスタック267を介して接続されてもよい。他の実施形態では、デバイス200は、複数のネットワークスタック、例えば、267および267’を備えてもよく、第1のトランスポート層接続は、1つのネットワークスタック267において、第2のトランスポート層接続は、第2のネットワークスタック267上で、確立または終了されてもよい。例えば、1つのネットワークスタックは、第1のネットワーク上でネットワークパケットを受信および伝送するため、別のネットワークスタックは、第2のネットワーク上でネットワークパケットを受信および伝送するためのものであってもよい。一実施形態では、ネットワークスタック267は、アプライアンス200による伝送のために1つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファ243を備える。
図2に示されるように、カーネル空間204は、キャッシュマネージャ232と、高速層2−7統合パケットエンジン240と、暗号化エンジン234と、ポリシエンジン236と、マルチプロトコル圧縮論理238とを含む。ユーザ空間202の代わりに、カーネル空間204またはカーネルモードでこれらのコンポーネントまたはプロセス232、240、234、236、および238を起動することは、単独で、および組み合わせて、これらのコンポーネントのそれぞれの性能を改良する。カーネル動作は、これらのコンポーネントまたはプロセス232、240、234、236、および238が、デバイス200のオペレーティングシステムのコアアドレス空間内で起動することを意味する。例えば、カーネルモードで暗号化エンジン234を起動することは、暗号化および暗号解読動作をカーネルに移動させ、それによって、カーネルモードにおけるメモリ空間またはカーネルスレッドとユーザモードにおけるメモリ空間またはスレッドとの間の移行の数を削減することによって、暗号化性能を改良する。例えば、カーネルモードで取得されるデータは、カーネルレベルデータ構造からユーザレベルデータ構造まで等、ユーザモードで起動するプロセスまたはスレッドにパスまたはコピーされる必要がなくなり得る。別の側面では、カーネルモードとユーザモードとの間のコンテキスト切替の数も削減される。加えて、コンポーネントまたはプロセス232、240、234、236、および238のうちのいずれかの同期化およびその間の通信が、カーネル空間204内でより効率的に行われることができる。
いくつかの実施形態では、コンポーネント232、240、234、236、および238の任意の部分が、カーネル空間204内で起動または動作してもよい一方で、これらのコンポーネント232、240、234、236、および238の他の部分は、ユーザ空間202内で起動または動作してもよい。一実施形態では、アプライアンス200は、1つまたはそれを上回るネットワークパケットの任意の部分、例えば、クライアント102からの要求またはサーバ106からの応答を備える、ネットワークパケットへのアクセスを提供する、カーネルレベルデータ構造を使用する。いくつかの実施形態では、カーネルレベルデータ構造は、ネットワークスタック267へのトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン240によって取得されてもよい。カーネルレベルデータ構造は、ネットワークスタック267、ネットワークトラフィック、またはネットワークスタック267によって受信または伝送されるパケットに関連するカーネル空間204を介してアクセス可能である、任意のインターフェースおよび/またはデータを備えてもよい。他の実施形態では、カーネルレベルデータ構造は、コンポーネントまたはプロセスの所望の動作を行うために、コンポーネントまたはプロセス232、240、234、236、および238のうちのいずれかによって使用されてもよい。一実施形態では、コンポーネント232、240、234、236、および238が、カーネルレベルデータ構造を使用するときにカーネルモード204で起動している一方で、別の実施形態では、コンポーネント232、240、234、236、および238は、カーネルレベルデータ構造を使用するときにユーザモードで起動している。いくつかの実施形態では、カーネルレベルデータ構造は、第2のカーネルレベルデータ構造または任意の所望のユーザレベルデータ構造にコピーまたはパスされてもよい。
キャッシュマネージャ232は、発信サーバ106によって供給される、オブジェクトまたは動的に生成されたオブジェクト等の任意のタイプおよび形態のコンテンツのキャッシュアクセス、制御、および管理を提供する、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。キャッシュマネージャ232によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、マークアップ言語等の任意の形式である、または任意のプロトコルを介して通信される、データを備えてもよい。いくつかの実施形態では、キャッシュマネージャ232は、元のデータが、キャッシュメモリ要素を読み取ることに対して、フェッチ、計算、または別様に取得するためにより長いアクセス時間を要求し得る、他の場所に記憶された元のデータ、または前もって計算、生成、または伝送されたデータを複製する。いったんデータがキャッシュメモリ要素に記憶されると、元のデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスし、それによって、アクセス時間を短縮することによって、将来の使用が行われることができる。いくつかの実施形態では、キャッシュメモリ要素は、デバイス200のメモリ264の中にデータオブジェクトを備えてもよい。他の実施形態では、キャッシュメモリ要素は、メモリ264よりも速いアクセス時間を有する、メモリを備えてもよい。別の実施形態では、キャッシュメモリ要素は、ハードディスクの一部等のデバイス200の任意のタイプおよび形態の記憶要素を備えてもよい。いくつかの実施形態では、処理ユニット262は、キャッシュマネージャ232によって使用するためのキャッシュメモリを提供してもよい。その上さらなる実施形態では、キャッシュマネージャ232は、データ、オブジェクト、および他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組み合わせを使用してもよい。
さらに、キャッシュマネージャ232は、本明細書に説明されるアプライアンス200の技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。例えば、キャッシュマネージャ232は、無効化時間周期の満了に基づいて、またはクライアント102またはサーバ106からの無効化コマンドの受信に応じて、オブジェクトを無効化する論理または機能性を含む。いくつかの実施形態では、キャッシュマネージャ232は、カーネル空間204内で、他の実施形態では、ユーザ空間202内で実行する、プログラム、サービス、プロセス、またはタスクとして動作してもよい。一実施形態では、キャッシュマネージャ232の第1の部分が、ユーザ空間202内で実行する一方で、第2の部分は、カーネル空間204内で実行する。いくつかの実施形態では、キャッシュマネージャ232は、任意のタイプの汎用プロセッサ(GPP)、またはフィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理デバイス(PLD)、または特定用途向け集積回路(ASIC)等の任意の他のタイプの集積回路を備えることができる。
ポリシエンジン236は、例えば、知的統計エンジンまたは他のプログラマブルアプリケーションを含んでもよい。一実施形態では、ポリシエンジン236は、ユーザがキャッシングポリシを識別、規定、定義、または構成することを可能にする構成機構を提供する。ポリシエンジン236はまた、いくつかの実施形態では、ユーザ選択キャッシングポリシ決定を有効にするように、ルックアップテーブルまたはハッシュテーブル等のデータ構造をサポートするメモリへのアクセスも有する。他の実施形態では、ポリシエンジン236は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス200によって行われる任意の他の機能または動作のアクセス、制御、および管理に加えて、アプライアンス200によってキャッシュされているオブジェクト、データ、またはコンテンツのアクセス、制御、および管理を判定して提供する、任意の論理、ルール、機能、または動作を備えてもよい。具体的キャッシングポリシのさらなる実施例が、本明細書でさらに説明される。
暗号化エンジン234は、SSLまたはTLS等の任意のセキュリティ関連プロトコル、またはそれに関連する任意の機能の処理をハンドリングするための任意の論理、ビジネスルール、機能、または動作を備える。例えば、暗号化エンジン234は、アプライアンス200を介して通信されるネットワークパケットまたはその任意の部分を暗号化および解読する。暗号化エンジン234はまた、クライアント102a−102n、サーバ106a−106n、またはアプライアンス200の代わりにSSLまたはTLS接続を設定または確立してもよい。したがって、暗号化エンジン234は、SSL処理のオフローディングおよび加速を提供する。一実施形態では、暗号化エンジン234は、クライアント102a−102nとサーバ106a−106nとの間に仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。いくつかの実施形態では、暗号化エンジン234は、暗号化プロセッサ260と通信する。他の実施形態では、暗号化エンジン234は、暗号化プロセッサ260上で起動する実行可能命令を備える。
マルチプロトコル圧縮エンジン238は、デバイス200のネットワークスタック267によって使用されるプロトコルのうちのいずれか等のネットワークパケットの1つまたはそれを上回るプロトコルを圧縮するための任意の論理、ビジネスルール、機能、もしく動作を備える。一実施形態では、マルチプロトコル圧縮エンジン238は、クライアント102a−102nとサーバ106a−106nとの間で双方向性に、メッセージングアプリケーションプログラミングインターフェース(MAPI)(Eメール)、ファイル転送プロトコル(FTP)、ハイパーテキスト転送プロトコル(HTTP)、共通インターネットファイルシステム(CIFS)プロトコル(ファイル転送)、独立コンピューティングアーキテクチャ(ICA)プロトコル、遠隔デスクトッププロトコル(RDP)、無線アプリケーションプロトコル(WAP)、モバイルIPプロトコル、およびボイスオーバーIP(VoIP)プロトコルを含む、任意のTCP/IPベースのプロトコルを圧縮する。他の実施形態では、マルチプロトコル圧縮エンジン238は、ハイパーテキストマークアップ言語(HTML)ベースのプロトコルの圧縮を提供し、いくつかの実施形態では、拡張マークアップ言語(XML)等の任意のマークアップ言語の圧縮を提供する。一実施形態では、マルチプロトコル圧縮エンジン238は、アプライアンス200間通信のために設計される任意のプロトコル等の任意の高性能プロトコルの圧縮を提供する。別の実施形態では、マルチプロトコル圧縮エンジン238は、トランザクションTCP(T/TCP)、選択確認応答を伴うTCP(TCP−SACK)、大型ウィンドウを伴うTCP(TCP−LW)、TCP−Vegasプロトコル等の輻輳予測プロトコル、およびTCPスプーフィングプロトコル等の修正されたトランスポート制御プロトコルを使用して、任意の通信の任意のペイロードまたは任意の通信を圧縮する。
したがって、マルチプロトコル圧縮エンジン238は、デスクトップクライアント、例えば、Oracle、SAP、およびSiebelのような頻用されている企業アプリケーションによって起動される任意のクライアント等のMicrosoft Outlookおよび非ウェブシンクライアント、およびPocket PC等のモバイルクライアントさえも介して、アプリケーションにアクセスするユーザのために性能を加速する。いくつかの実施形態では、マルチプロトコル圧縮エンジン238は、カーネルモード204内で実行し、ネットワークスタック267にアクセスするパケット処理エンジン240と統合することによって、任意のアプリケーション層プロトコル等のTCP/IPプロトコルによって搬送されるプロトコルのうちのいずれかを圧縮することができる。
概して、パケット処理エンジンまたはパケットエンジンとも称される、高速層2−7統合パケットエンジン240は、ネットワークポート266を介してアプライアンス200によって受信および伝送されるパケットのカーネルレベル処理を管理する責任がある。高速層2−7統合パケットエンジン240は、ネットワークパケットの受信またはネットワークパケットの伝送のため等、処理中に1つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファを備えてもよい。加えて、高速層2−7統合パケットエンジン240は、ネットワークポート266を介してネットワークパケットを送信および受信するように、1つまたはそれを上回るネットワークスタック267と通信する。高速層2−7統合パケットエンジン240は、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮論理238と連動して作動する。具体的には、暗号化エンジン234は、パケットのSSL処理を行うように構成され、ポリシエンジン236は、要求レベルコンテンツ切替および要求レベルキャッシュリダイレクト等のトラフィック管理に関連する機能を果たすように構成され、マルチプロトコル圧縮論理238は、データの圧縮および解凍に関連する機能を果たすように構成される。
高速層2−7統合パケットエンジン240は、パケット処理タイマ242を含む。一実施形態では、パケット処理タイマ242は、着信、すなわち、受信された、または発信、すなわち、伝送されたネットワークパケットの処理をトリガするように、1つまたはそれを上回る時間間隔を提供する。いくつかの実施形態では、高速層2−7統合パケットエンジン240は、タイマ242に応答してネットワークパケットを処理する。パケット処理タイマ242は、時間関連イベント、間隔、または発生を通知、トリガ、または通信するように、任意のタイプおよび形態の信号をパケットエンジン240に提供する。多くの実施形態では、パケット処理タイマ242は、例えば、100ミリ秒、50ミリ秒、または25ミリ秒等、ミリ秒のオーダーで動作する。例えば、いくつかの実施形態では、パケット処理タイマ242が、時間間隔を提供する、または別様にネットワークパケットを10ミリ秒時間間隔で高速層2−7統合パケットエンジン240によって処理させる一方で、他の実施形態では、5ミリ秒時間間隔で、依然としてさらに、さらなる実施形態では、3、2、または1ミリ秒ほどの短さの時間間隔で処理させる。高速層2−7統合パケットエンジン240は、動作中に暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮エンジン238とインターフェースをとられ、統合され、または通信してもよい。したがって、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮論理238の論理、機能、または動作のうちのいずれかが、パケット処理タイマ242および/またはパケットエンジン240に応答して行われてもよい。したがって、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、およびマルチプロトコル圧縮論理238の論理、機能、または動作のうちのいずれかは、パケット処理タイマ242を介して提供される時間間隔の粒度で、例えば、10ミリ秒未満またはそれに等しい時間間隔で行われてもよい。例えば、一実施形態では、キャッシュマネージャ232は、高速層2−7統合パケットエンジン240および/またはパケット処理タイマ242に応答して、任意のキャッシュされたオブジェクトの無効化を行ってもよい。別の実施形態では、キャッシュされたオブジェクトの満了または無効化時間は、10ミリ秒毎等のパケット処理タイマ242の時間間隔と同程度の粒度に設定されることができる。
カーネル空間204と対照的に、ユーザ空間202は、別様にユーザモードで起動するユーザモードアプリケーションまたはプログラムによって使用される、オペレーティングシステムのメモリ領域または部分である。ユーザモードアプリケーションは、カーネル空間204に直接アクセスしなくてもよく、カーネルサービスにアクセスするためにサービスコールを使用する。図2に示されるように、アプライアンス200のユーザ空間202は、グラフィカルユーザインターフェース(GUI)210と、コマンドラインインターフェース(CLI)212と、シェルサービス214と、健全性監視プログラム216と、デーモンサービス218とを含む。GUI210およびCLI212は、システム管理者または他のユーザが、アプライアンス200のオペレーティングシステムを介して等、アプライアンス200と相互作用し、その動作を制御することができる、手段を提供する。GUI210またはCLI212は、ユーザ空間202またはカーネル空間204内で起動するコードを備えることができる。GUI210は、任意のタイプおよび形態のグラフィカルユーザインターフェースであってもよく、テキスト、グラフィカルを介して、または別様にブラウザ等の任意のタイプのプログラムまたはアプリケーションによって、提示されてもよい。CLI212は、オペレーティングシステムによって提供されるコマンドライン等の任意のタイプおよび形態のコマンドラインまたはテキストベースのインターフェースであってもよい。例えば、CLI212は、ユーザがオペレーティングシステムと相互作用することを可能にするツールである、シェルを備えてもよい。いくつかの実施形態では、CLI212は、bash、csh、tcsh、またはkshタイプシェルを介して提供されてもよい。シェルサービス214は、GUI210および/またはCLI212を介したユーザによるアプライアンス200またはオペレーティングシステムとの相互作用をサポートする、プログラム、サービス、タスク、プロセス、または実行可能命令を備える。
健全性監視プログラム216は、ネットワークシステムが適切に機能していることと、ユーザがネットワークを経由して要求されたコンテンツを受信することとを監視し、チェックし、報告し、確実にするために使用される。健全性監視プログラム216は、アプライアンス200の任意のアクティビティを監視するための論理、ルール、機能、または動作を提供する、1つまたはそれを上回るプログラム、サービス、タスク、プロセス、または実行可能命令を備える。いくつかの実施形態では、健全性監視プログラム216は、アプライアンス200を介してパスされる任意のネットワークトラフィックを傍受して点検する。他の実施形態では、健全性監視プログラム216は、任意の好適な手段および/または機構によって、以下、すなわち、暗号化エンジン234、キャッシュマネージャ232、ポリシエンジン236、マルチプロトコル圧縮論理238、パケットエンジン240、デーモンサービス218、およびシェルサービス214のうちの1つまたはそれを上回るものとインターフェースをとる。したがって、健全性監視プログラム216は、アプライアンス200の任意の部分の状態、ステータス、または健全性を判定するように、任意のアプリケーションプログラミングインターフェース(API)を呼び出してもよい。例えば、健全性監視プログラム216は、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在起動しているかどうかをチェックするように、周期的基準でステータス問い合わせをpingまたは送信してもよい。別の実施例では、健全性監視プログラム216は、アプライアンス200の任意の部分と任意の条件、ステータス、またはエラーを判定するように、任意のプログラム、プロセス、サービス、またはタスクによって提供される、任意のステータス、エラー、または履歴ログをチェックしてもよい。
デーモンサービス218は、連続的に、またはバックグラウンドで起動し、アプライアンス200によって受信される周期的サービス要求をハンドリングする、プログラムである。いくつかの実施形態では、デーモンサービスは、適宜、別のデーモンサービス218等の他のプログラムまたはプロセスに要求を自動転送してもよい。当業者に公知であるように、デーモンサービス218は、ネットワーク制御等の連続的または周期的なシステム全体の機能を果たすように、または任意の所望のタスクを行うように、無人で起動してもよい。いくつかの実施形態では、1つまたはそれを上回るデーモンサービス218は、ユーザ空間202内で起動する一方、他の実施形態では、1つまたはそれを上回るデーモンサービス218は、カーネル空間内で起動する。
ここで図2Bを参照すると、アプライアンス200の別の実施形態が描写されている。要するに、アプライアンス200は、以下のサービス、機能性、または動作、すなわち、SSL VPNコネクティビティ280、切替/負荷平衡284、ドメイン名サービス解決286、加速288、および1つまたはそれを上回るクライアント102と1つまたはそれを上回るサーバ106との間の通信用のアプリケーションファイアウォール290のうちの1つまたはそれを上回るものを提供する。サーバ106はそれぞれ、1つまたはそれを上回るネットワーク関連サービス270a−270n(サービス270と称される)を提供してもよい。例えば、サーバ106は、httpサービス270を提供してもよい。アプライアンス200は、vサーバ、VIPサーバ、または単にVIP275a−275nと称される(本明細書ではvサーバ275とも称される)、1つまたはそれを上回る仮想サーバまたは仮想インターネットプロトコルサーバを備える。vサーバ275は、アプライアンス200の構成および動作に従って、クライアント102とサーバ106との間の通信を受信、傍受、または別様に処理する。
vサーバ275は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。vサーバ275は、アプライアンス200においてユーザモード202、カーネルモード204、またはそれらの任意の組み合わせで動作する、任意のタイプおよび形態のプログラム、サービス、タスク、プロセス、または実行可能命令を備えてもよい。vサーバ275は、SSL VPN280、切替/負荷平衡284、ドメイン名サービス解決286、加速288、およびアプリケーションファイアウォール290等の本明細書に説明される技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。いくつかの実施形態では、vサーバ275は、サーバ106のサービス270への接続を確立する。サービス275は、アプライアンス200、クライアント102、またはvサーバ275に接続し、それと通信することが可能な任意のプログラム、アプリケーション、プロセス、タスク、または実行可能命令のセットを備えてもよい。例えば、サービス275は、ウェブサーバ、httpサーバ、ftp、Eメール、またはデータベースサーバを備えてもよい。いくつかの実施形態では、サービス270は、Eメール、データベース、または企業アプリケーション等のアプリケーションのための通信をリッスン、受信、および/または送信するためのデーモンプロセスまたはネットワークドライバである。いくつかの実施形態では、サービス270は、具体的IPアドレス、またはIPアドレスおよびポート上で通信してもよい。
いくつかの実施形態では、vサーバ275は、ポリシエンジン236の1つまたはそれを上回るポリシを、クライアント102とサーバ106との間のネットワーク通信に適用する。一実施形態では、ポリシは、vサーバ275と関連付けられる。別の実施形態では、ポリシは、ユーザまたはユーザのグループに基づく。さらに別の実施形態では、ポリシは、大域的であり、1つまたはそれを上回るvサーバ275a−275n、およびアプライアンス200を介して通信する任意のユーザまたはユーザのグループに適用される。いくつかの実施形態では、ポリシエンジンのポリシは、インターネットプロトコルアドレス、ポート、プロトコルタイプ、ヘッダ、またはパケット内のフィールド等の通信の任意のコンテンツ、またはユーザ、ユーザのグループ、vサーバ275、トランスポート層接続、および/またはクライアント102またはサーバ106の識別または属性等の通信のコンテキストに基づいて、ポリシが適用される条件を有する。
他の実施形態では、アプライアンス200は、サーバ106からコンピュータ環境15、アプリケーション、および/またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント102の認証および/または承認を判定するように、ポリシエンジン236と通信する、またはインターフェースをとる。別の実施形態では、アプライアンス200は、アプリケーション配信システム190にコンピュータ環境15、アプリケーション、および/またはデータファイルのうちの1つまたはそれを上回るものを配信させるための遠隔ユーザまたは遠隔クライアント102の認証および/または承認を判定するように、ポリシエンジン236と通信する、またはインターフェースをとる。さらに別の実施形態では、アプライアンス200は、ポリシエンジン236の認証および/または遠隔ユーザまたは遠隔クライアント102の承認に基づいて、VPNまたはSSL VPN接続を確立する。一実施形態では、アプライアンス200は、ポリシエンジン236のポリシに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。例えば、アプライアンス200は、ポリシエンジン236に基づいて、コンピュータ環境15、アプリケーション、またはデータファイルへのアクセスを制御してもよい。
いくつかの実施形態では、vサーバ275は、クライアントエージェント120を介したクライアント102とのTCPまたはUDP接続等のトランスポート層接続を確立する。一実施形態では、vサーバ275は、クライアント102からの通信をリッスンして受信する。他の実施形態では、vサーバ275は、クライアントサーバ106とのTCPまたはUDP接続等のトランスポート層接続を確立する。一実施形態では、vサーバ275は、サーバ106上で起動するサーバ270のインターネットプロトコルアドレスおよびポートへのトランスポート層接続を確立する。別の実施形態では、vサーバ275は、クライアント102への第1のトランスポート層接続をサーバ106への第2のトランスポート層接続と関連付ける。いくつかの実施形態では、vサーバ275は、サーバ106へのトランスポート層接続のプールを確立し、プールされたトランスポート層接続を介してクライアント要求を多重化する。
いくつかの実施形態では、アプライアンス200は、クライアント102とサーバ106との間のSSL VPN接続280を提供する。例えば、第1のネットワーク102上のクライアント102は、第2のネットワーク104’上のサーバ106への接続を確立することを要求する。いくつかの実施形態では、第2のネットワーク104’は、第1のネットワーク104からルーティング可能ではない。他の実施形態では、クライアント102は、公衆ネットワーク104上にあり、サーバ106は、企業ネットワーク等のプライベートネットワーク104’上にある。一実施形態では、クライアントエージェント120は、第1のネットワーク104上のクライアント102の通信を傍受し、通信を暗号化し、第1のトランスポート層接続を介してアプライアンス200に通信を伝送する。アプライアンス200は、第1のネットワーク104上の第1のトランスポート層接続を、第2のネットワーク104上のサーバ106への第2のトランスポート層接続に関連付ける。アプライアンス200は、クライアントエージェント102から傍受された通信を受信し、通信を解読し、第2のトランスポート層接続を介して第2のネットワーク104上のサーバ106に通信を伝送する。第2のトランスポート層接続は、プールされたトランスポート層接続であってもよい。したがって、アプライアンス200は、2つのネットワーク104、104’の間のクライアント102のためのエンドツーエンドセキュアトランスポート層接続を提供する。
一実施形態では、アプライアンス200は、仮想プライベートネットワーク104上のクライアント102のイントラネットインターネットプロトコルまたはIntranetIP282アドレスをホストする。クライアント102は、第1のネットワーク104上のインターネットプロトコル(IP)アドレスおよび/またはホスト名等のローカルネットワーク識別子を有する。アプライアンス200を介して第2のネットワーク104’に接続されたとき、アプライアンス200は、第2のネットワーク104’上のクライアント102のIPアドレスおよび/またはホスト名等のネットワーク識別子である、IntranetIPアドレス282を確立する、割り当てる、または別様に提供する。アプライアンス200は、クライアントの確立されたIntranetIP282を使用して、クライアント102に向かってダイレクトされる任意の通信のための第2またはプライベートネットワーク104’をリッスンし、その上で受信する。一実施形態では、アプライアンス200は、第2のプライベートネットワーク104上のクライアント102として、またはその代わりに作用する。例えば、別の実施形態では、vサーバ275は、クライアント102のIntranetIP282への通信をリッスンし、それに応答する。いくつかの実施形態では、第2のネットワーク104’上のコンピューティングデバイス100が要求を伝送する場合、アプライアンス200は、それがクライアント102であるかのように要求を処理する。例えば、アプライアンス200は、クライアントのIntranetIP282へのpingに応答してもよい。別の実施例では、アプライアンスは、クライアントのIntranetIP282との接続を要求する、第2のネットワーク104上のコンピューティングデバイス100とのTCPまたはUDP接続等の接続を確立してもよい。
いくつかの実施形態では、アプライアンス200は、以下の加速技法288のうちの1つまたはそれを上回るもの、すなわち、1)圧縮、2)解凍、3)伝送制御プロトコルプーリング、4)伝送制御プロトコル多重化、5)伝送制御プロトコルバッファリング、および6)キャッシングを、クライアント102とサーバ106との間の通信に提供する。
一実施形態では、アプライアンス200は、各サーバ106との1つまたはそれを上回るトランスポート層接続を開放し、インターネットを介したクライアントによる反復データアクセスを可能にするように、これらの接続を維持することによって、クライアント102へのトランスポート層接続を繰り返し開放および閉鎖することによって引き起こされる処理負荷の多くからサーバ106を解放する。本技法は、本明細書では「接続プーリング」と称される。
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント102からサーバ106への通信をシームレスに接合するために、アプライアンス200は、トランスポート層プロトコルレベルでシーケンス番号および確認応答番号を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、インバウンドパケット(すなわち、クライアント102から受信されるパケット)の場合、パケットのソースネットワークアドレスは、アプライアンス200の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。アウトバウンドパケット(すなわち、サーバ106から受信されるもの)の場合、ソースネットワークアドレスは、サーバ106のものからアプライアンス200の出力ポートのものに変更され、宛先アドレスは、アプライアンス200のものから要求側クライアント102のものに変更される。パケットのシーケンス番号および確認応答番号はまた、アプライアンス200のクライアント102へのトランスポート層接続上でクライアント102によって予期されるシーケンス番号および確認応答番号に変換される。いくつかの実施形態では、トランスポート層プロトコルのパケットチェックサムが、これらの変換を考慮するように再計算される。
別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の通信のための切替または負荷平衡機能性284を提供する。いくつかの実施形態では、アプライアンス200は、トラフィックを配布し、層4またはアプリケーション層要求データに基づいてクライアント要求をサーバ106にダイレクトする。一実施形態では、ネットワークパケットのネットワーク層または層2が宛先サーバ106を識別するが、アプライアンス200は、トランスポート層パケットのペイロードとして搬送されるアプリケーション情報およびデータによってネットワークパケットを分配するサーバ106を判定する。一実施形態では、アプライアンス200の健全性監視プログラム216は、クライアントの要求を分配するサーバ106を判定するように、サーバの健全性を監視する。いくつかの実施形態では、アプライアンス200が、サーバ106が利用可能ではない、または所定の閾値を上回る負荷を有することを検出する場合、アプライアンス200は、クライアント要求を別のサーバ106にダイレクトまたは分配することができる。
いくつかの実施形態では、アプライアンス200は、ドメイン名サービス(DNS)リゾルバとして作用する、または別様にクライアント102からのDNS要求の解決を提供する。いくつかの実施形態では、アプライアンスは、クライアント102によって伝送されるDNS要求を傍受する。一実施形態では、アプライアンス200は、アプライアンス200またはそれによってホストされるIPアドレスを用いて、クライアントのDNS要求に応答する。本実施形態では、クライアント102は、ドメイン名のためのネットワーク通信をアプライアンス200に伝送する。別の実施形態では、アプライアンス200は、第2のアプライアンス200’またはそれによってホストされるIPアドレスを用いて、クライアントのDNS要求に応答する。いくつかの実施形態では、アプライアンス200は、アプライアンス200によって判定されるサーバ106のIPアドレスを用いて、クライアントのDNS要求に応答する。
さらに別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の通信のためのアプリケーションファイアウォール機能性290を提供する。一実施形態では、ポリシエンジン236は、違法な要求を検出して遮断するためのルールを提供する。いくつかの実施形態では、アプリケーションファイアウォール290は、サービス妨害(DoS)攻撃から保護する。他の実施形態では、アプライアンスは、アプリケーションベースの攻撃を識別して遮断する傍受された要求のコンテンツを点検する。いくつかの実施形態では、ルール/ポリシエンジン236は、以下のうちの1つまたはそれを上回るもの、すなわち、1)バッファオーバーフロー、2)CGI−BINパラメータ操作、3)フォーム/非表示フィールド操作、4)強制的ブラウジング、5)クッキーまたはセッションポイズニング、6)破損したアクセス制御リスト(ACL)または弱いパスワード、7)クロスサイトスクリプティング(XSS)、8)コマンドインジェクション、9)SQLインジェクション、10)エラートリガ型機密情報漏出、11)暗号化の不安定な使用、12)サーバ不正構成、13)バックドアおよびデバッグオプション、14)ウェブサイト改変、15)プラットフォームまたはオペレーティングシステム脆弱性、および16)ゼロデイ攻撃等の種々のクラスおよびタイプのウェブまたはインターネットベースの脆弱性に対する保護を提供するための1つまたはそれを上回るアプリケーションファイアウォールまたはセキュリティ制御ポリシを備える。ある実施形態では、アプリケーションファイアウォール290は、以下のうちの1つまたはそれを上回るもの、すなわち、1)要求されたフィールドが返される、2)いかなる追加フィールドも許容されない、3)読取専用および非表示フィールド実行、4)ドロップダウンリストおよびラジオボタンフィールド適合性、および5)フォームフィールド最大長実行のためにネットワーク通信を点検または分析する形態でHTMLフォームフィールド保護を提供する。いくつかの実施形態では、アプリケーションファイアウォール290は、クッキーが修正されていないことを確実にする。他の実施形態では、アプリケーションファイアウォール290は、合法なURLを実行することによって強制的ブラウジングから保護する。
なおもさらなる他の実施形態では、アプリケーションファイアウォール290は、ネットワーク通信に含有される任意の極秘情報を保護する。アプリケーションファイアウォール290は、ネットワークパケットの任意のフィールド内の任意の極秘情報を識別するように、エンジン236のルールまたはポリシに従って任意のネットワーク通信を点検または分析してもよい。いくつかの実施形態では、アプリケーションファイアウォール290は、ネットワーク通信内で、クレジットカード番号、パスワード、社会保障番号、氏名、患者コード、連絡先情報、および年齢のうちの1つまたはそれを上回る発生を識別する。ネットワーク通信のエンコードされた部分は、これらの発生または極秘情報を備えてもよい。これらの発生に基づいて、一実施形態では、アプリケーションファイアウォール290は、ネットワーク通信の伝送を防止する等のポリシアクションをネットワーク通信上でとってもよい。別の実施形態では、アプリケーションファイアウォール290は、そのような識別された発生または極秘情報を書き換える、除去する、または別様に隠してもよい。
依然として図2Bを参照すると、アプライアンス200は、図1Dと併せて上記で議論されるような性能監視エージェント197を含んでもよい。一実施形態では、アプライアンス200は、図1Dで描写されるように監視サービス198または監視サーバ106から監視エージェント197を受信する。いくつかの実施形態では、アプライアンス200は、アプライアンス200と通信する任意のクライアントまたはサーバに配信するために、ディスク等の記憶装置の中に監視エージェント197を記憶する。例えば、一実施形態では、アプライアンス200は、トランスポート層接続を確立する要求を受信することに応じて、監視エージェント197をクライアントに伝送する。他の実施形態では、アプライアンス200は、クライアント102とのトランスポート層接続を確立することに応じて、監視エージェント197を伝送する。別の実施形態では、アプライアンス200は、ウェブページの要求を傍受または検出することに応じて、監視エージェント197をクライアントに伝送する。さらに別の実施形態では、アプライアンス200は、監視サーバ198からの要求に応答して、監視エージェント197をクライアントまたはサーバに伝送する。一実施形態では、アプライアンス200は、監視エージェント197を第2のアプライアンス200’またはアプライアンス205に伝送する。
他の実施形態では、アプライアンス200は、監視エージェント197を実行する。一実施形態では、監視エージェント197は、アプライアンス200上で実行する任意のアプリケーション、プログラム、プロセス、サービス、タスク、またはスレッドの性能を測定して監視する。例えば、監視エージェント197は、vサーバ275A−275Nの性能および動作を監視して測定してもよい。別の実施形態では、監視エージェント197は、アプライアンス200の任意のトランスポート層接続の性能を測定して監視する。いくつかの実施形態では、監視エージェント197は、アプライアンス200をトラバースする任意のユーザセッションの性能を測定して監視する。一実施形態では、監視エージェント197は、SSL VPNセッション等のアプライアンス200をトラバースする任意の仮想プライベートネットワーク接続および/またはセッションの性能を測定して監視する。なおもさらなる実施形態では、監視エージェント197は、アプライアンス200のメモリ、CPU、およびディスク使用量および性能を測定して監視する。さらに別の実施形態では、監視エージェント197は、SSLオフローディング、接続プーリングおよび多重化、キャッシング、および圧縮等のアプライアンス200によって行われる任意の加速技法288の性能を測定して監視する。いくつかの実施形態では、監視エージェント197は、アプライアンス200によって行われる任意の負荷平衡および/またはコンテンツ切替284の性能を測定して監視する。他の実施形態では、監視エージェント197は、アプライアンス200によって行われるアプリケーションファイアウォール290保護および処理の性能を測定して監視する。
C.クライアントエージェント
ここで図3を参照すると、クライアントエージェント120の実施形態が描写されている。クライアント102は、ネットワーク104を介してアプライアンス200および/またはサーバ106との通信を確立して交換するためのクライアントエージェント120を含む。要するに、クライアント102は、カーネルモード302およびユーザモード303を伴うオペレーティングシステムと、1つまたはそれを上回る層310a−310bを伴うネットワークスタック310とを有する、コンピューティングデバイス100上で動作する。クライアント102は、1つまたはそれを上回るアプリケーションをインストールしている、および/または実行してもよい。いくつかの実施形態では、1つまたはそれを上回るアプリケーションは、ネットワークスタック310を介してネットワーク104に通信してもよい。ウェブブラウザ等のアプリケーションのうちの1つはまた、第1のプログラム322を含んでもよい。例えば、第1のプログラム322は、いくつかの実施形態では、クライアントエージェント120またはその任意の部分をインストールおよび/または実行するために使用されてもよい。クライアントエージェント120は、1つまたはそれを上回るアプリケーションからのネットワークスタック310からのネットワーク通信を傍受するための傍受機構またはインターセプタ350を含む。
クライアント102のネットワークスタック310は、ネットワークへのコネクティビティおよびネットワークとの通信を提供するための任意のタイプおよび形態のソフトウェア、またはハードウェア、またはそれらの任意の組み合わせを備えてもよい。一実施形態では、ネットワークスタック310は、ネットワークプロトコルスイートのためのソフトウェア実装を備える。ネットワークスタック310は、当業者が認識して理解するようなオープンシステム間相互接続(OSI)通信モデルの任意のネットワーク層等の1つまたはそれを上回るネットワーク層を備えてもよい。したがって、ネットワークスタック310は、OSIモデルの以下の層、すなわち、1)物理リンク層、2)データリンク層、3)ネットワーク層、4)トランスポート層、5)セッション層、6)プレゼンテーション層、および7)アプリケーション層のうちのいずれかのための任意のタイプおよび形態のプロトコルを備えてもよい。一実施形態では、ネットワークスタック310は、概して、TCP/IPと称される、インターネットプロトコル(IP)のネットワーク層プロトコルを経由したトランスポート制御プロトコル(TCP)を備えてもよい。いくつかの実施形態では、TCP/IPプロトコルは、IEEE802.3によって網羅されるこれらのプロトコル等のIEEE広域ネットワーク(WAN)またはローカルエリアネットワーク(LAN)プロトコル群のうちのいずれかを備え得る、イーサネット(登録商標)プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック310は、IEEE802.11および/またはモバイルインターネットプロトコル等の任意のタイプおよび形態の無線プロトコルを備える。
TCP/IPベースのネットワークに照らして、メッセージングアプリケーションプログラミングインターフェース(MAPI)(Eメール)、ファイル転送プロトコル(FTP)、ハイパーテキスト転送プロトコル(HTTP)、共通インターネットファイルシステム(CIFS)プロトコル(ファイル転送)、独立コンピューティングアーキテクチャ(ICA)プロトコル、遠隔デスクトッププロトコル(RDP)、無線アプリケーションプロトコル(WAP)、モバイルIPプロトコル、およびボイスオーバーIP(VoIP)プロトコルを含む、任意のTCP/IPベースのプロトコルが使用されてもよい。別の実施形態では、ネットワークスタック310は、修正されたトランスポート制御プロトコル、例えば、トランザクションTCP(T/TCP)、選択確認応答を伴うTCP(TCP−SACK)、大型ウィンドウを伴うTCP(TCP−LW)、TCP−Vegasプロトコル等の輻輳予測プロトコル、およびTCPスプーフィングプロトコル等の任意のタイプおよび形態のトランスポート制御プロトコルを備える。他の実施形態では、IPを経由したUDP等の任意のタイプおよび形態のユーザデータグラムプロトコル(UDP)が、音声通信またはリアルタイムデータ通信のため等に、ネットワークスタック310によって使用されてもよい。
さらに、ネットワークスタック310は、TCPドライバまたはネットワーク層ドライバ等の1つまたはそれを上回る層をサポートする、1つまたはそれを上回るネットワークドライバを含んでもよい。ネットワークドライバは、コンピューティングデバイス100のオペレーティングシステムの一部として、またはコンピューティングデバイス100の任意のネットワークインターフェースカードまたは他のネットワークアクセスコンポーネントの一部として、含まれてもよい。いくつかの実施形態では、ネットワークスタック310のネットワークドライバのうちのいずれかは、本明細書に説明される技法のうちのいずれかをサポートしてネットワークスタック310のカスタムまたは修正部分を提供するようにカスタマイズ、修正、または適合されてもよい。他の実施形態では、加速プログラム302は、クライアント102のオペレーティングシステムによってインストールまたは別様に提供されるネットワークスタック310とともに、またはそれと連動して動作するように設計および構築される。
ネットワークスタック310は、クライアント102のネットワーク通信に関連する任意の情報およびデータを受信する、取得する、提供する、または別様にそれにアクセスするための任意のタイプおよび形態のインターフェースを備える。一実施形態では、ネットワークスタック310へのインターフェースは、アプリケーションプログラミングインターフェース(API)を備える。インターフェースはまた、任意の機能コール、フッキングおよびフィルタリング機構、イベントまたはコールバック機構、または任意のタイプのインターフェーシング技法を備えてもよい。インターフェースを介したネットワークスタック310は、ネットワークスタック310の機能性または動作に関連するオブジェクト等の任意のタイプおよび形態のデータ構造を受信または提供してもよい。例えば、データ構造は、ネットワークパケットまたは1つまたはそれを上回るネットワークパケットに関連する情報およびデータを備えてもよい。いくつかの実施形態では、データ構造は、トランスポート層のネットワークパケット等のネットワークスタック310のプロトコル層において処理されるネットワークパケットの一部を備える。いくつかの実施形態では、データ構造325が、カーネルレベルデータ構造を備える一方で、他の実施形態では、データ構造325は、ユーザモードデータ構造を備える。カーネルレベルデータ構造は、取得される、またはカーネルモード302で動作するネットワークスタック310の一部に関連するデータ構造、またはカーネルモード302で起動するネットワークドライバまたは他のソフトウェア、またはオペレーティングシステムのカーネルモードで起動または動作するサービス、プロセス、タスク、スレッド、または他の実行可能命令によって取得または受信される任意のデータ構造を備えてもよい。
加えて、ネットワークスタック310のいくつかの部分、例えば、データリンクまたはネットワーク層が、カーネルモード302で実行または動作してもよい一方で、ネットワークスタック310のアプリケーション層等の他の部分は、ユーザモード303で実行または動作する。例えば、ネットワークスタックの第1の部分310aが、アプリケーションへのネットワークスタック310へのユーザモードアクセスを提供してもよい一方で、ネットワークスタック310の第2の部分310aは、ネットワークへのアクセスを提供する。いくつかの実施形態では、ネットワークスタックの第1の部分310aは、層5−7のうちのいずれか等のネットワークスタック310の1つまたはそれを上回る上層を備えてもよい。他の実施形態では、ネットワークスタック310の第2の部分310bは、層1−4のうちのいずれか等の1つまたはそれを上回る下層を備える。ネットワークスタック310の第1の部分310aおよび第2の部分310bはそれぞれ、ユーザモード203、カーネルモード202、またはその組み合わせで、いずれか1つまたはそれを上回るネットワーク層において、またはネットワーク層またはネットワーク層へのインターフェース点の任意の部分、またはユーザモード203およびカーネルモード202の任意の部分またはそこへのインターフェース点において、ネットワークスタック310の任意の部分を備えてもよい。
インターセプタ350は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。一実施形態では、インターセプタ350は、ネットワークスタック310内の任意の点においてネットワーク通信を傍受し、インターセプタ350またはクライアントエージェント120によって所望、管理、または制御される宛先にネットワーク通信をリダイレクトまたは伝送する。例えば、インターセプタ350は、第1のネットワークのネットワークスタック310のネットワーク通信を傍受し、第2のネットワーク104上で伝送するためにネットワーク通信をアプライアンス200に伝送してもよい。いくつかの実施形態では、インターセプタ350は、ネットワークスタック310とインターフェースをとって連動するように構築および設計されるネットワークドライバ等のドライバを備える、任意のタイプのインターセプタ350を備える。いくつかの実施形態では、クライアントエージェント120および/またはインターセプタ350は、トランスポート層において等、ネットワークスタック310の1つまたはそれを上回る層において動作する。一実施形態では、インターセプタ350は、フィルタドライバ、フッキング機構、またはトランスポートドライバインターフェース(TDI)を介して等、ネットワークスタックのトランスポート層にインターフェース接続する任意の形態およびタイプの好適なネットワークドライバインターフェースを備える。いくつかの実施形態では、インターセプタ350は、トランスポート層等の第1のプロトコル層、およびトランスポートプロトコル層の上方の任意の層、例えば、アプリケーションプロトコル層等の別のプロトコル層にインターフェース接続する。一実施形態では、インターセプタ350は、ネットワークドライバインターフェース仕様(NDIS)またはNDISドライバに準拠するドライバを備えてもよい。別の実施形態では、インターセプタ350は、ミニフィルタまたはミニポートドライバを備えてもよい。一実施形態では、インターセプタ350またはその一部は、カーネルモード202で動作する。別の実施形態では、インターセプタ350またはその一部は、ユーザモード203で動作する。いくつかの実施形態では、インターセプタ350の一部が、カーネルモード202で動作する一方で、インターセプタ350の別の部分は、ユーザモード203で動作する。他の実施形態では、クライアントエージェント120は、ユーザモード203で動作するが、カーネルレベルデータ構造225を取得するため等に、インターセプタ350を介して、カーネルモードドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの一部にインターフェース接続する。さらなる実施形態では、インターセプタ350は、アプリケーション等のユーザモードアプリケーションまたはプログラムである。
一実施形態では、インターセプタ350は、任意のトランスポート層接続要求を傍受する。これらの実施形態では、インターセプタ350は、場所のための所望の場所への宛先IPアドレスおよび/またはポート等の宛先情報を設定するように、トランスポート層アプリケーションプログラミングインターフェース(API)コールを実行する。このようにして、インターセプタ350は、インターセプタ350またはクライアントエージェント120によって制御または管理されるIPアドレスおよびポートへのトランスポート層接続を傍受してリダイレクトする。一実施形態では、インターセプタ350は、クライアントエージェント120がリッスンしているクライアント102のローカルIPアドレスおよびポートへの接続のための宛先情報を設定する。例えば、クライアントエージェント120は、リダイレクトされたトランスポート層通信のためのローカルIPアドレスおよびポート上でリッスンするプロキシサービスを備えてもよい。いくつかの実施形態では、次いで、クライアントエージェント120は、リダイレクトされたトランスポート層通信をアプライアンス200に通信する。
いくつかの実施形態では、インターセプタ350は、ドメイン名サービス(DNS)要求を傍受する。一実施形態では、クライアントエージェント120および/またはインターセプタ350は、DNS要求を解決する。別の実施形態では、インターセプタは、DNS解決のために傍受されたDNS要求をアプライアンス200に伝送する。一実施形態では、アプライアンス200は、DNS要求を解決し、DNS応答をクライアントエージェント120に通信する。いくつかの実施形態では、アプライアンス200は、別のアプライアンス200’またはDNSサーバ106を介してDNS要求を解決する。
さらに別の実施形態では、クライアントエージェント120は、2つのエージェント120および120’を備えてもよい。一実施形態では、第1のエージェント120は、ネットワークスタック310のネットワーク層において動作するインターセプタ350を備えてもよい。いくつかの実施形態では、第1のエージェント120は、インターネット制御メッセージプロトコル(ICMP)要求(例えば、pingおよびトレースルート)等のネットワーク層要求を傍受する。他の実施形態では、第2のエージェント120’は、トランスポート層において動作し、トランスポート層通信を傍受してもよい。いくつかの実施形態では、第1のエージェント120は、ネットワークスタック210の1つの層において通信を傍受し、傍受された通信とインターフェースをとる、またはそれを第2のエージェント120’に通信する。
クライアントエージェント120および/またはインターセプタ350は、ネットワークスタック310の任意の他のプロトコル層に対して透過的な様式で、プロトコル層において動作してもよい、またはそれとインターフェースをとってもよい。例えば、一実施形態では、インターセプタ350は、ネットワーク層等のトランスポート層の下方の任意のプロトコル層、およびセッション、プレゼンテーション、またはアプリケーション層プロトコル等のトランスポート層の上方の任意のプロトコル層に対して透過的に、ネットワークスタック310のトランスポート層とともに動作する、またはそれとインターフェースをとる。これは、所望に応じて、かつインターセプタ350を使用するための修正を伴わずに、ネットワークスタック310の他のプロトコル層が動作することを可能にする。したがって、クライアントエージェント120および/またはインターセプタ350は、TCP/IPを経由した任意のアプリケーション層プロトコル等のトランスポート層によって搬送される任意のプロトコルを介して提供される、任意の通信をセキュアにする、最適化する、加速する、ルーティングする、または負荷平衡するように、トランスポート層とインターフェースをとることができる。
さらに、クライアントエージェント120および/またはインターセプタは、任意のアプリケーション、クライアント102のユーザ、およびクライアント102と通信するサーバ等の任意の他のコンピューティングデバイスに対して透過的な様式で、ネットワークスタック310において動作してもよい、またはそれとインターフェースをとってもよい。クライアントエージェント120および/またはインターセプタ350は、アプリケーションの修正を伴わない様式で、クライアント102上にインストールおよび/または実行されてもよい。いくつかの実施形態では、クライアント102のユーザまたはクライアント102と通信するコンピューティングデバイスは、クライアントエージェント120および/またはインターセプタ350の存在、実行、または動作を認識していない。したがって、いくつかの実施形態では、クライアントエージェント120および/またはインターセプタ350は、アプリケーション、クライアント102のユーザ、サーバ等の別のコンピューティングデバイス、またはインターセプタ350によってインターフェース接続されるプロトコル層の上方および/または下方のプロトコル層のうちのいずれかに対して透過的に、インストールされ、実行され、および/または動作される。
クライアントエージェント120は、加速プログラム302、ストリーミングクライアント306、収集エージェント304、および/または監視エージェント197を含む。一実施形態では、クライアントエージェント120は、Citrix Systems, Inc.(Fort Lauderdale, Florida)によって開発された独立コンピューティングアーキテクチャ(ICA)クライアントまたはその一部を備え、ICAクライアントとも称される。いくつかの実施形態では、クライアント120は、サーバ106からクライアント102にアプリケーションをストリーム配信するためのアプリケーションストリーミングクライアント306を備える。いくつかの実施形態では、クライアントエージェント120は、クライアント102とサーバ106との間の通信を加速するための加速プログラム302を備える。別の実施形態では、クライアントエージェント120は、エンドポイント検出を行う/アプライアンス200および/またはサーバ106のためのエンドポイント情報を走査して収集するための収集エージェント304を含む。
いくつかの実施形態では、加速プログラム302は、クライアントのサーバ106との通信および/またはサーバ106によって提供されるアプリケーションにアクセスすること等のサーバ106へのアクセスを加速、強化、または別様に改良するように、1つまたはそれを上回る加速技法を行うためのクライアント側加速プログラムを備える。加速プログラム302の実行可能命令の論理、機能、および/または動作は、以下の加速技法のうちの1つまたはそれを上回るもの、すなわち、1)マルチプロトコル圧縮、2)トランスポート制御プロトコルプーリング、3)トランスポート制御プロトコル多重化、4)トランスポート制御プロトコルバッファリング、および5)キャッシュマネージャを介したキャッシングを行ってもよい。加えて、加速プログラム302は、クライアント102によって受信および/または伝送される任意の通信の暗号化および/または暗号解読を行ってもよい。いくつかの実施形態では、加速プログラム302は、統合様式または方式で加速技法のうちの1つまたはそれを上回るものを行う。加えて、加速プログラム302は、トランスポート層プロトコルのネットワークパケットのペイロードとして搬送される、プロトコルのうちのいずれかまたは複数のプロトコルに圧縮を行うことができる。
ストリーミングクライアント306は、サーバ106からストリーム配信されたアプリケーションを受信して実行するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。サーバ106は、クライアント102上でアプリケーションを再生する、実行する、または別様に実行させられるために、1つまたはそれを上回るアプリケーションデータファイルをストリーミングクライアント306にストリーム配信してもよい。いくつかの実施形態では、サーバ106は、圧縮またはパッケージ化されたアプリケーションデータファイルのセットをストリーミングクライアント306に伝送する。いくつかの実施形態では、複数のアプリケーションファイルは、圧縮され、CAB、ZIP、SIT、TAR、JAR、または他のアーカイブ等のアーカイブファイル内でファイルサーバ上に記憶される。一実施形態では、サーバ106は、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化し、ファイルをクライアント102に伝送する。別の実施形態では、クライアント102が、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化する。ストリーミングクライアント306は、アプリケーションまたはその一部を動的にインストールし、アプリケーションを実行する。一実施形態では、ストリーミングクライアント306は、実行可能プログラムであってもよい。いくつかの実施形態では、ストリーミングクライアント306は、別の実行可能プログラムを起動することが可能であり得る。
収集エージェント304は、クライアント102についての情報を識別、取得、および/または収集するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。いくつかの実施形態では、アプライアンス200は、収集エージェント304をクライアント102またはクライアントエージェント120に伝送する。収集エージェント304は、アプライアンスのポリシエンジン236の1つまたはそれを上回るポリシに従って構成されてもよい。他の実施形態では、収集エージェント304は、クライアント102についての収集された情報をアプライアンス200に伝送する。一実施形態では、アプライアンス200のポリシエンジン236は、クライアントのネットワーク104への接続のアクセス、認証、および承認制御を判定して提供するために、収集された情報を使用する。
一実施形態では、収集エージェント304は、クライアントの1つまたはそれを上回る属性または特性を識別して判定する、エンドポイント検出および走査機構を備える。例えば、収集エージェント304は、以下のクライアント側属性のうちのいずれか1つまたはそれを上回るもの、すなわち、1)オペレーティングシステムおよび/またはオペレーティングシステムのバージョン、2)オペレーティングシステムのサービスパック、3)起動しているサービス、4)起動しているプロセス、および5)ファイルを識別して判定してもよい。収集エージェント304はまた、クライアント上で以下のうちのいずれか1つまたはそれを上回るもの、すなわち、1)ウイルス対策ソフトウェア、2)パーソナルファイアウォールソフトウェア、3)スパム対策ソフトウェア、および4)インターネットセキュリティソフトウェアの存在またはバージョンを識別して判定してもよい。ポリシエンジン236は、クライアントの属性または特性またはクライアント側属性のうちのいずれか1つまたはそれを上回るものに基づく、1つまたはそれを上回るポリシを有してもよい。
いくつかの実施形態では、クライアントエージェント120は、図1Dおよび2Bと併せて議論されるような監視エージェント197を含む。監視エージェント197は、Visual BasicまたはJava script(登録商標)等の任意のタイプおよび形態のスクリプトであってもよい。一実施形態では、監視エージェント197は、クライアントエージェント120の任意の部分の性能を監視して測定する。例えば、いくつかの実施形態では、監視エージェント197は、加速プログラム302の性能を監視して測定する。別の実施形態では、監視エージェント197は、ストリーミングクライアント306の性能を監視して測定する。他の実施形態では、監視エージェント197は、収集エージェント304の性能を監視して測定する。なおも別の実施形態では、監視エージェント197は、インターセプタ350の性能を監視して測定する。いくつかの実施形態では、監視エージェント197は、メモリ、CPU、およびディスク等のクライアント102の任意のリソースを監視して測定する。
監視エージェント197は、クライアントの任意のアプリケーションの性能を監視して測定してもよい。一実施形態では、監視エージェント197は、クライアント102上のブラウザの性能を監視して測定する。いくつかの実施形態では、監視エージェント197は、クライアントエージェント120を介して配信される任意のアプリケーションの性能を監視して測定する。他の実施形態では、監視エージェント197は、ウェブベースまたはHTTP応答時間等のアプリケーションのエンドユーザ応答時間を測定して監視する。監視エージェント197は、ICAまたはRDPクライアントの性能を監視して測定してもよい。別の実施形態では、監視エージェント197は、ユーザセッションまたはアプリケーションセッションのメトリックを測定して監視する。いくつかの実施形態では、監視エージェント197は、ICAまたはRDPセッションを測定して監視する。一実施形態では、監視エージェント197は、クライアント102へのアプリケーションおよび/またはデータの配信を加速する際のアプライアンス200の性能を測定して監視する。
いくつかの実施形態では、依然として図3を参照すると、第1のプログラム322が、自動的に、無音で、透過的に、または別様に、クライアントエージェント120またはインターセプタ350等のその一部をインストールおよび/または実行するために使用されてもよい。一実施形態では、第1のプログラム322は、アプリケーションにロードされ、それによって実行される、ActiveX制御またはJava(登録商標)制御またはスクリプト等のプラグインコンポーネントを備える。例えば、第1のプログラムは、アプリケーションのメモリ空間またはコンテキスト内等でウェブブラウザアプリケーションによってロードされて起動される、ActiveX制御を備える。別の実施形態では、第1のプログラム322は、ブラウザ等のアプリケーションにロードされ、それによって起動される、実行可能命令のセットを備える。一実施形態では、第1のプログラム322は、クライアントエージェント120をインストールするように設計および構築されたプログラムを備える。いくつかの実施形態では、第1のプログラム322は、別のコンピューティングデバイスからネットワークを介してクライアントエージェント120を取得、ダウンロード、または受信する。別の実施形態では、第1のプログラム322は、クライアント102のオペレーティングシステム上にネットワークドライバ等のプログラムをインストールするためのインストーラプログラムまたはプラグアンドプレイマネージャである。
D.仮想化されたアプリケーション配信コントローラを提供するためのシステムおよび方法
ここで図4Aを参照すると、ブロック図が、仮想化環境400の一実施形態を描写する。要するに、コンピューティングデバイス100は、ハイパーバイザ層と、仮想化層と、ハードウェア層とを含む。ハイパーバイザ層は、仮想化層内で実行する少なくとも1つの仮想マシンによる、ハードウェア層内のいくつかの物理リソース(例えば、プロセッサ421およびディスク428)へのアクセスを配分して管理する、ハイパーバイザ401(仮想化マネージャとも称される)を含む。仮想化層は、少なくとも1つのオペレーティングシステム410と、少なくとも1つのオペレーティングシステム410に配分される複数の仮想リソースとを含む。仮想リソースは、限定ではないが、複数の仮想プロセッサ432a、432b、432c(概して432)、および仮想ディスク442a、442b、442c(概して442)、および仮想メモリおよび仮想ネットワークインターフェース等の仮想リソースを含んでもよい。複数の仮想リソースおよびオペレーティングシステム410は、仮想マシン406と称されてもよい。仮想マシン406は、ハイパーバイザ401と通信し、コンピューティングデバイス100上で他の仮想マシンを管理および構成するためのアプリケーションを実行するために使用される、制御オペレーティングシステム405を含んでもよい。
さらに詳細には、ハイパーバイザ401は、物理デバイスへのアクセスを有するオペレーティングシステムをシミュレートする任意の様式で、仮想リソースをオペレーティングシステムに提供してもよい。ハイパーバイザ401は、仮想リソースを任意の数のゲストオペレーティングシステム410a、410b(概して、410)に提供してもよい。いくつかの実施形態では、コンピューティングデバイス100は、1つまたはそれを上回るタイプのハイパーバイザを実行する。これらの実施形態では、ハイパーバイザは、仮想ハードウェアをエミュレートし、物理ハードウェアをパーティション化し、物理ハードウェアを仮想化し、コンピュータ環境へのアクセスを提供する仮想マシンを実行するために使用されてもよい。ハイパーバイザは、VMWare, Inc.(Palo Alto, California)製のもの、その開発がオープンソースXen.orgコミュニティによって監督されるオープンソース製品である、XENハイパーバイザ、Microsoftによって提供されるHyperV、Virtualサーバ、または仮想PCハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行し得る、仮想マシンプラットフォームを作成する、ハイパーバイザを実行するコンピューティングデバイス100は、ホストサーバと称される。これらの実施形態のうちの1つでは、例えば、コンピューティングデバイス100は、Citrix Systems, Inc.(Fort Lauderdale, FL)によって提供されるXENサーバである。
いくつかの実施形態では、ハイパーバイザ401は、コンピューティングデバイス上で実行する、オペレーティングシステム内で実行する。これらの実施形態のうちの1つでは、オペレーティングシステムおよびハイパーバイザ401上で実行するコンピューティングデバイスは、ホストオペレーティングシステム(コンピューティングデバイス上で実行するオペレーティングシステム)と、ゲストオペレーティングシステム(ハイパーバイザ401によって提供されるコンピューティングリソースパーティション内で実行するオペレーティングシステム)とを有すると言える。他の実施形態では、ハイパーバイザ401は、ホストオペレーティングシステム上で実行する代わりに、コンピューティングデバイス上でハードウェアと直接相互作用する。これらの実施形態のうちの1つでは、ハイパーバイザ401は、コンピューティングデバイスを備えるハードウェアを指す、「ベアメタル」上で実行していると言える。
いくつかの実施形態では、ハイパーバイザ401は、オペレーティングシステム410が実行する、仮想マシン406a−c(概して、406)を作成してもよい。これらの実施形態のうちの1つでは、例えば、ハイパーバイザ401は、仮想マシン406を作成するように仮想マシンイメージをロードする。これらの実施形態のうちの別のものでは、ハイパーバイザ401は、仮想マシン406内でオペレーティングシステム410を実行する。これらの実施形態のうちのなおも別のものでは、仮想マシン406は、オペレーティングシステム410を実行する。
いくつかの実施形態では、ハイパーバイザ401は、コンピューティングデバイス100上で実行する仮想マシン406のためのプロセッサスケジューリングおよびメモリ分割を制御する。これらの実施形態のうちの1つでは、ハイパーバイザ401は、少なくとも1つの仮想マシン406の実行を制御する。これらの実施形態のうちの別のものでは、ハイパーバイザ401は、コンピューティングデバイス100によって提供される少なくとも1つのハードウェアリソースの抽象化を少なくとも1つの仮想マシン406に提示する。他の実施形態では、ハイパーバイザ401は、物理プロセッサ能力が仮想マシン406に提示されるかどうかと、どのようにして提示されるかとを制御する。
制御オペレーティングシステム405は、ゲストオペレーティングシステムを管理して構成するための少なくとも1つのアプリケーションを実行してもよい。一実施形態では、制御オペレーティングシステム405は、仮想マシンを実行する、仮想マシンの実行を終了させる、または仮想マシンに配分するための物理リソースのタイプを識別するための機能性を含む、仮想マシンの実行を管理するための機能性へのアクセスを管理者に提供するユーザインターフェースを含むアプリケーション等の管理アプリケーションを実行してもよい。別の実施形態では、ハイパーバイザ401は、ハイパーバイザ401によって作成される仮想マシン406内で制御オペレーティングシステム405を実行する。なおも別の実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100上の物理リソースに直接アクセスする権限を与えられている仮想マシン406内で実行する。いくつかの実施形態では、コンピューティングデバイス100a上の制御オペレーティングシステム405aは、ハイパーバイザ401aとハイパーバイザ401bとの間の通信を介して、コンピューティングデバイス100b上の制御オペレーティングシステム405bとデータを交換してもよい。このようにして、1つまたはそれを上回るコンピューティングデバイス100は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス100のうちの1つまたはそれを上回るものとデータを交換してもよい。これらの実施形態のうちの1つでは、本機能性は、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。これらの実施形態のうちの別のものでは、複数のハイパーバイザは、コンピューティングデバイス100のうちの1つの上で実行されるゲストオペレーティングシステムのうちの1つまたはそれを上回るものを管理する。
一実施形態では、制御オペレーティングシステム405は、少なくとも1つのゲストオペレーティングシステム410と相互作用する権限を与えられている仮想マシン406内で実行する。別の実施形態では、ゲストオペレーティングシステム410は、ディスクまたはネットワークへのアクセスを要求するために、ハイパーバイザ401を介して制御オペレーティングシステム405と通信する。なおも別の実施形態では、ゲストオペレーティングシステム410および制御オペレーティングシステム405は、例えば、ハイパーバイザ401によって利用可能にされる複数の共有メモリページを介して等、ハイパーバイザ401によって確立される通信チャネルを介して通信してもよい。
いくつかの実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100によって提供されるネットワーキングハードウェアと直接通信するためのネットワークバックエンドドライバを含む。これらの実施形態のうちの1つでは、ネットワークバックエンドドライバは、少なくとも1つのゲストオペレーティングシステム110からの少なくとも1つの仮想マシン要求を処理する。他の実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100上の記憶装置要素と通信するためのブロックバックエンドドライバを含む。これらの実施形態のうちの1つでは、ブロックバックエンドドライバは、ゲストオペレーティングシステム410から受信される少なくとも1つの要求に基づいて、記憶要素からデータを読み取って書き込む。
一実施形態では、制御オペレーティングシステム405は、ツールスタック404を含む。別の実施形態では、ツールスタック404は、ハイパーバイザ401と相互作用する、(例えば、第2のコンピューティングデバイス100b上の)他の制御オペレーティングシステム405と通信する、またはコンピューティングデバイス100上の仮想マシン406b、406cを管理するための機能性を提供する。別の実施形態では、ツールスタック404は、改良された管理機能性を仮想マシンファームの管理者に提供するためのカスタマイズされたアプリケーションを含む。いくつかの実施形態では、ツールスタック404および制御オペレーティングシステム405のうちの少なくとも1つは、コンピューティングデバイス100上で起動する仮想マシン406を遠隔で構成して制御するためのインターフェースを提供する、管理APIを含む。他の実施形態では、制御オペレーティングシステム405は、ツールスタック404を通してハイパーバイザ401と通信する。
一実施形態では、ハイパーバイザ401は、ハイパーバイザ401によって作成される仮想マシン406内でゲストオペレーティングシステム410を実行する。別の実施形態では、ゲストオペレーティングシステム410は、コンピュータ環境内のリソースへのアクセスをコンピューティングデバイス100のユーザに提供する。なおも別の実施形態では、リソースは、プログラム、アプリケーション、文書、ファイル、複数のアプリケーション、複数のファイル、実行可能プログラムファイル、デスクトップ環境、コンピュータ環境、またはコンピューティングデバイス100のユーザに利用可能にされる他のリソースを含む。さらに別の実施形態では、リソースは、コンピューティングデバイス100上への従来の直接インストール、アプリケーションストリーミングのための方法を介したコンピューティングデバイス100への配信、第2のコンピューティングデバイス100’上のリソースの実行によって生成され、プレゼンテーション層プロトコルを介してコンピューティングデバイス100に通信される、出力データのコンピューティングデバイス100への配信、第2のコンピューティングデバイス100’上で実行する仮想マシンを介したリソースの実行によって生成される、出力データのコンピューティングデバイス100への配信、またはUSBデバイス等のコンピューティングデバイス100に接続された可撤性記憶デバイスから、またはコンピューティングデバイス100上で実行して出力データを生成する仮想マシンを介した実行を含むが、それらに限定されない、複数のアクセス方法を介して、コンピューティングデバイス100に配信されてもよい。いくつかの実施形態では、コンピューティングデバイス100は、リソースの実行によって生成される出力データを別のコンピューティングデバイス100’に伝送する。
一実施形態では、ゲストオペレーティングシステム410は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識していない、完全仮想化仮想マシンを形成し、そのようなマシンは、「ドメインU HVM(ハードウェア仮想マシン)仮想マシン」と称されてもよい。別の実施形態では、完全仮想化マシンは、完全仮想化マシン内でオペレーティングシステムを実行するために、基本入出力システム(BIOS)をエミュレートするソフトウェアを含む。なおも別の実施形態では、完全仮想化マシンは、ハイパーバイザ401と通信することによって機能性を提供するドライバを含んでもよい。そのような実施形態では、ドライバは、それが仮想化された環境内で実行することを認識してもよい。別の実施形態では、ゲストオペレーティングシステム410は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識している、準仮想化仮想マシンを形成し、そのようなマシンは、「ドメインU PV仮想マシン」と称されてもよい。別の実施形態では、準仮想化マシンは、完全仮想化マシンが含まない、付加的ドライバを含む。なおも別の実施形態では、準仮想化マシンは、上記で説明されるように、制御オペレーティングシステム405に含まれる、ネットワークバックエンドドライバおよびブロックバックエンドドライバを含む。
ここで図4Bを参照すると、ブロック図が、少なくとも1つの物理ホストが仮想マシンを実行する、システム内の複数のネットワーク化されたコンピューティングデバイスの一実施形態を描写する。要するに、本システムは、管理コンポーネント404と、ハイパーバイザ401とを含む。本システムは、複数のコンピューティングデバイス100と、複数の仮想マシン406と、複数のハイパーバイザ401と、ツールスタック404または管理コンポーネント404と様々に称される、複数の管理コンポーネントと、物理リソース421、428とを含む。複数の物理マシン100はそれぞれ、図1E−1Hおよび4Aに関連して上記で説明される、コンピューティングデバイス100として提供されてもよい。
さらに詳細には、物理ディスク428が、コンピューティングデバイス100によって提供され、仮想ディスク442の少なくとも一部を記憶する。いくつかの実施形態では、仮想ディスク442は、複数の物理ディスク428と関連付けられる。これらの実施形態のうちの1つでは、1つまたはそれを上回るコンピューティングデバイス100は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス100のうちの1つまたはそれを上回るものとデータを交換してもよく、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。いくつかの実施形態では、仮想マシン406が実行するコンピューティングデバイス100は、物理ホスト100またはホストマシン100と称される。
ハイパーバイザは、コンピューティングデバイス100上のプロセッサ上で実行する。ハイパーバイザは、物理ディスクへのある量のアクセスを仮想ディスクに配分する。一実施形態では、ハイパーバイザ401は、物理ディスク上のある量の空間を配分する。別の実施形態では、ハイパーバイザ401は、物理ディスク上の複数のページを配分する。いくつかの実施形態では、ハイパーバイザは、仮想マシン450を初期化して実行するプロセスの一部として、仮想ディスク442をプロビジョニングする。
一実施形態では、管理コンポーネント404aは、プール管理コンポーネント404aと称される。別の実施形態では、制御オペレーティングシステム405aと称され得る、管理オペレーティングシステム405aは、管理コンポーネントを含む。いくつかの実施形態では、管理コンポーネントは、ツールスタックと称される。これらの実施形態のうちの1つでは、管理コンポーネントは、図4Aに関連して上記で説明されるツールスタック404である。他の実施形態では、管理コンポーネント404は、管理者等のユーザから、プロビジョニングおよび/または実行する仮想マシン406の識別を受信するためのユーザインターフェースを提供する。なおも他の実施形態では、管理コンポーネント404は、管理者等のユーザから、1つの物理マシン100から別の物理マシンへの仮想マシン406bの移動の要求を受信するためのユーザインターフェースを提供する。さらなる実施形態では、管理コンポーネント404aは、要求された仮想マシン406dを実行するコンピューティングデバイス100bを識別し、識別された仮想マシンを実行するように識別されたコンピューティングデバイス100b上のハイパーバイザ401bに命令し、そのような管理コンポーネントは、プール管理コンポーネントと称されてもよい。
ここで図4Cを参照すると、仮想アプリケーション配信コントローラまたは仮想アプライアンス450の実施形態が、描写される。要するに、図2Aおよび2Bに関連して上記で説明されるアプライアンス200(例えば、アプリケーション配信コントローラ)の機能性および/または実施形態のうちのいずれかが、図4Aおよび4Bに関連して上記で説明される仮想化された環境の任意の実施形態で展開されてもよい。アプライアンス200の形態で展開されているアプリケーション配信コントローラの機能性の代わりに、そのような機能性は、クライアント102、サーバ106、またはアプライアンス200等の任意のコンピューティングデバイス100上の仮想化された環境400で展開されてもよい。
ここで図4Cを参照すると、サーバ106のハイパーバイザ401上で動作する仮想アプライアンス450の実施形態の略図が、描写される。図2Aおよび2Bのアプライアンス200と同様に、仮想アプライアンス450は、可用性、性能、オフロード、およびセキュリティのための機能性を提供してもよい。可用性に関して、仮想アプライアンスは、ネットワークの層4と7との間で負荷平衡を行ってもよく、また、知的サービス健全性監視を行ってもよい。ネットワークトラフィック加速を介した性能増加に関して、仮想アプライアンスは、キャッシングおよび圧縮を行ってもよい。任意のサーバの処理をオフロードするために、仮想アプライアンスは、接続多重化およびプーリングおよび/またはSSL処理を行ってもよい。セキュリティに関して、仮想アプライアンスは、アプライアンス200のアプリケーションファイアウォール機能性およびSSL VPN機能のうちのいずれかを行ってもよい。
図2Aに関連して説明されるようなアプライアンス200のモジュールのうちのいずれかは、既製のサーバ等の任意のサーバ上の仮想化された環境300または仮想化されていない環境で実行可能な1つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、仮想化されたアプライアンス配信コントローラ450の形態でパッケージ化され、組み合わせられ、設計され、または構築されてもよい。例えば、仮想アプライアンスは、コンピューティングデバイス上にインストールするインストールパッケージの形態で提供されてもよい。図2Aを参照すると、キャッシュマネージャ232、ポリシエンジン236、圧縮238、暗号化エンジン234、パケットエンジン240、GUI210、CLI212、シェルサービス214、および健全性監視プログラム216のうちのいずれかは、コンピューティングデバイスおよび/または仮想化された環境300の任意のオペレーティングシステム上で起動するソフトウェアコンポーネントまたはモジュールとして、設計および構築されてもよい。アプライアンス200の暗号化プロセッサ260、プロセッサ262、メモリ264、およびネットワークスタック267を使用する代わりに、仮想化されたアプライアンス400は、仮想化された環境400によって提供されるような、または別様にサーバ106上で利用可能であるような、これらのリソースのうちのいずれかを使用してもよい。
依然として図4Cを参照すると、要するに、任意の1つまたはそれを上回るvサーバ275A−275Nが、任意のサーバ106等の任意のタイプのコンピューティングデバイス100の仮想化された環境400で動作または実行されてもよい。図2Bに関連して説明されるアプライアンス200のモジュールまたは機能性のうちのいずれかは、サーバの仮想化された、または仮想化されていない環境のいずれかで動作するように設計および構築されてもよい。vサーバ275、SSL VPN280、イントラネットUP282、切替284、DNS286、加速288、App FW290、および監視エージェントのうちのいずれかは、デバイスおよび/または仮想化された環境400上で実行可能な1つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、アプリケーション配信コントローラ450の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。
いくつかの実施形態では、サーバは、各仮想マシンが仮想アプリケーション配信コントローラ450の同一または異なる実施形態を起動する、仮想化環境で複数の仮想マシン406a−406nを実行してもよい。いくつかの実施形態では、サーバは、マルチコア処理システムのコア上の1つまたはそれを上回る仮想マシン上で1つまたはそれを上回る仮想アプライアンス450を実行してもよい。いくつかの実施形態では、サーバは、多重プロセッサデバイスの各プロセッサ上の1つまたはそれを上回る仮想マシン上で1つまたはそれを上回る仮想アプライアンス450を実行してもよい。
E.マルチコアアーキテクチャを提供するためのシステムおよび方法
ムーアの法則によると、集積回路上に置かれ得るトランジスタの数は、約2年毎に倍になり得る。しかしながら、CPU速度増加は、停滞状態に達し得、例えば、CPU速度は、2005年以降、約3.5〜4GHz範囲になっている。ある場合には、CPU製造業者は、付加的性能を獲得するためにCPU速度増加に依拠しない場合がある。一部のCPU製造業者は、付加的性能を提供するように、付加的コアをそれらのプロセッサに追加し得る。性能獲得のためにCPUに依拠する、ソフトウェアおよびネットワーキングベンダのもの等の製品は、これらのマルチコアCPUを活用することによって、それらの性能を改良し得る。単一のCPUのために設計および構築されるソフトウェアは、マルチスレッドの並列アーキテクチャを利用するように、または、別様にマルチコアアーキテクチャを利用するように、再設計され、および/または書き換えられてもよい。
nコアまたはマルチコア技術と称される、アプライアンス200のマルチコアアーキテクチャは、アプライアンスが、いくつかの実施形態では、単一コア性能障壁を突破することと、マルチコアCPUの能力を活用することとを可能にする。図2Aに関連して説明される前のアーキテクチャでは、単一のネットワークまたはパケットエンジンが起動される。nコア技術およびアーキテクチャの複数のコアは、複数のパケットエンジンが同時に、および/または並行して起動することを可能にする。パケットエンジンが各コア上で起動すると、アプライアンスアーキテクチャは、付加的コアの処理容量を活用する。いくつかの実施形態では、これは、性能および拡張可能性の最大7倍の増加を提供する。
図5Aには、機能並列性、データ並列性、またはフローベースのデータ並列性等の並列性または並列コンピューティング方式のタイプに従って、1つまたはそれを上回るプロセッサコアを横断する作業、タスク、負荷、またはネットワークトラフィック分布のいくつかの実施形態が、図示されている。要するに、図5Aは、1からNの合計コア数である、n個のコアを伴うアプライアンス200’等のマルチコアシステムの実施形態を図示する。一実施形態では、作業、負荷、またはネットワークトラフィックは、分布がn個のコア505N(以降では集合的にコア505と称される)のうちの全てまたは2つまたはそれを上回るものを横断するように、第1のコア505A、第2のコア505B、第3のコア505C、第4のコア505D、第5のコア505E、第6のコア505F、第7のコア505G等の間に分配されることができる。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のVIP275があってもよい。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のパケットエンジン240があってもよい。使用されるアプローチのうちのいずれかは、コアのうちのいずれかを横断する、異なる、様々な、または類似する作業負荷または性能レベル515につながり得る。機能並列性アプローチに関して、各コアは、パケットエンジン、VIP275、またはアプライアンス200によって提供される機能性のうちの異なる機能を起動してもよい。データ並列性アプローチでは、データは、データを受信するネットワークインターフェースカード(NIC)またはVIP275に基づいて、コアを横断して並列化または分配されてもよい。別のデータ並列性アプローチでは、処理は、データフローを各コアに分配することによって、コアを横断して分配されてもよい。
図5Aに関してさらに詳細には、いくつかの実施形態では、負荷、作業、またはネットワークトラフィックが、機能並列性500に従って、コア505の間で分配されることができる。機能並列性は、1つまたはそれを上回る個別の機能を果たす各コアに基づいてもよい。いくつかの実施形態では、第1のコアが、第1の機能を果たしてもよい一方で、第2のコアは、第2の機能を果たす。機能並列性アプローチでは、マルチコアシステムによって果たされる機能は、分割され、機能性に従って各コアに分配される。いくつかの実施形態では、機能並列性は、タスク並列性と称されてもよく、各プロセッサまたはコアが同一または異なるデータに異なるプロセスまたは機能を実行するときに、達成されてもよい。コアまたはプロセッサは、同一または異なるコードを実行してもよい。ある場合には、異なる実行スレッドまたはコードは、それらが作動するにつれて相互と通信してもよい。通信は、ワークフローの一部として、1つのスレッドから次のスレッドにデータをパスするように行われてもよい。
いくつかの実施形態では、機能並列性500に従って、コア505を横断して作業を分配するステップは、ネットワーク入出力管理(NWI/O)510A、セキュアソケットレイヤ(SSL)暗号化および暗号解読510B、および伝送制御プロトコル(TCP)機能510C等の特定の機能に従って、ネットワークトラフィックを分配するステップを含むことができる。これは、使用されている機能性の量またはレベルに基づく、作業、性能、または計算負荷515につながり得る。いくつかの実施形態では、データ並列性540に従って、コア505を横断して作業を分配するステップは、特定のハードウェアまたはソフトウェアコンポーネントと関連付けられるデータを分配することに基づいて、ある量の作業515を分配するステップを含むことができる。いくつかの実施形態では、フローベースのデータ並列性520に従って、コア505を横断して作業を分配するステップは、各コア上の作業515A−Nの量が、同様である、実質的に等しい、または比較的均等に分配され得るように、コンテキストまたはフローに基づいてデータを分配するステップを含むことができる。
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンまたはVIPによって提供される複数の機能性のうちの1つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア1が、アプライアンス200’のためのネットワークI/O処理を行ってもよい一方で、コア2は、アプライアンスのためのTCP接続管理を行う。同様に、コア3が、SSLオフローディングを行ってもよい一方で、コア4は、層7またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、1つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図2Aおよび2Bと併せて識別および/または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図5Aに図示されるように、機能別の分割は、性能または負荷515の異なるレベルで起動する、異なるコアにつながり得る。
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンによって提供される複数の機能性のうちの1つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア1が、アプライアンス200’のためのネットワークI/O処理を行ってもよい一方で、コア2は、アプライアンスのためのTCP接続管理を行う。同様に、コア3が、SSLオフローディングを行ってもよい一方で、コア4は、層7またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、1つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図2Aおよび2Bと併せて識別および/または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図5Aに図示されるように、機能別の分割は、負荷または性能の異なるレベルで起動する、異なるコアにつながり得る。
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、図5Bは、第1のコア、すなわち、ネットワークI/O機能性510Aと関連付けられるアプリケーションおよびプロセスを処理する、コア1505Aを図示する。ネットワークI/Oと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、NWI/O510Aと関連付けられるポート宛先を有する、発信および着信パケットは、NWI/Oポートと関連付けられる全てのネットワークトラフィックをハンドリングすることに専用である、コア1505Aに向かってダイレクトされるであろう。同様に、コア2 505Bは、SSL処理と関連付けられる機能性をハンドリングすることに専用であって、コア4 505Dは、全てのTCPレベル処理および機能性をハンドリングすることに専用であり得る。
図5Aは、ネットワークI/O、SSL、およびTCP等の機能を図示するが、他の機能もコアに割り当てられることができる。これらの他の機能は、本明細書に説明される機能または動作のうちのいずれか1つまたはそれを上回るものを含むことができる。例えば、図2Aおよび2Bと併せて説明される機能のうちのいずれかは、機能性基準でコアを横断して分配されてもよい。ある場合には、第1のVIP275Aが、第1のコア上で起動してもよい一方で、異なる構成を伴う第2のVIP275Bは、第2のコア上で起動してもよい。いくつかの実施形態では、各コア505が特定の機能と関連付けられる処理をハンドリングすることができるように、各コア505は、その特定の機能性をハンドリングすることができる。例えば、コア2 505Bが、SSLオフローディングをハンドリングしてもよい一方で、コア4 505Dは、アプリケーション層処理およびトラフィック管理をハンドリングしてもよい。
他の実施形態では、作業、負荷、またはネットワークトラフィックが、任意のタイプおよび形態のデータ並列性540に従って、コア505の間で分配されてもよい。いくつかの実施形態では、データ並列性は、異なる分配されたデータ上で同一のタスクまたは機能性を果たす各コアによって、マルチコアシステムにおいて達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードが、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令が、動作を制御するが、同一コードを実行してもよい。いくつかの実施形態では、データ並列性が、パケットエンジン、vサーバ(VIP)275A−C、ネットワークインターフェースカード(NIC)542D−E、および/またはアプライアンス200上に含まれる、またはそれと関連付けられる任意の他のネットワーキングハードウェアまたはソフトウェアの観点から、達成される。例えば、各コアは、同一パケットエンジンまたはVIPコードまたは構成を起動してもよいが、分配されたデータの異なるセット上で動作してもよい。各ネットワーキングハードウェアまたはソフトウェア構築物は、異なる、様々な、または実質的に同一の量のデータを受信することができ、結果として、様々な、異なる、または比較的同一の量の負荷515を有し得る。
データ並列性アプローチの場合、作業は、VIP、NIC、および/またはVIPまたはNICのデータフローに基づいて、分割されて分配されてもよい。これらのアプローチのうちの1つでは、マルチコアシステムの作業は、データの分配されたセット上に各VIP作業を有することによって、VIPの間で分割または分配されてもよい。例えば、各コアは、1つまたはそれを上回るVIPを起動するように構成されてもよい。ネットワークトラフィックは、そのトラフィックをハンドリングする各VIPのためのコアに分配されてもよい。これらのアプローチのうちの別のものでは、アプライアンスの作業は、いずれのNICがネットワークトラフィックを受信するかに基づいて、コアの間で分割または分配されてもよい。例えば、第1のNICのネットワークトラフィックが、第1のコアに分配されてもよい一方で、第2のNICのネットワークトラフィックは、第2のコアに分配されてもよい。ある場合には、コアは、複数のNICからのデータを処理してもよい。
図5Aは、VIP1 275A、VIP2 275B、およびVIP3 275Cの場合のように、単一のコア505と関連付けられる単一のvサーバを図示する。いくつかの実施形態では、単一のvサーバは、1つまたはそれを上回るコア505と関連付けられることができる。対照的に、1つまたはそれを上回るvサーバは、単一のコア505と関連付けられることができる。vサーバをコア505と関連付けるステップは、その特定のvサーバと関連付けられる全ての機能を処理するように、そのコア505を含んでもよい。いくつかの実施形態では、各コアは、同一コードおよび構成を有する、VIPを実行する。他の実施形態では、各コアは、同一コードを有するが、異なる構成を有する、VIPを実行する。いくつかの実施形態では、各コアは、異なるコードと、同一または異なる構成とを有する、VIPを実行する。
vサーバのように、NICはまた、特定のコア505と関連付けられることもできる。多くの実施形態では、NICがデータパケットを受信または伝送するときに、特定のコア505がデータパケットを受信および伝送することに関与する処理をハンドリングするように、NICは、1つまたはそれを上回るコア505に接続されることができる。一実施形態では、単一のNICは、NIC1 542DおよびNIC2 542Eの場合のように、単一のコア505と関連付けられることができる。他の実施形態では、1つまたはそれを上回るNICは、単一のコア505と関連付けられることができる。他の実施形態では、単一のNICは、1つまたはそれを上回るコア505と関連付けられることができる。これらの実施形態では、負荷は、各コア505が実質的に類似する量の負荷を処理するように、1つまたはそれを上回るコア505の間で分配され得る。NICと関連付けられるコア505は、その特定のNICと関連付けられる全ての機能および/またはデータを処理してもよい。
VIPまたはNICのデータに基づいて、コアを横断して作業を分配するステップは、独立性のレベルを有し得るが、いくつかの実施形態では、これは、図5Aの様々な負荷515によって図示されるように、コアの不平衡使用につながり得る。
いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、任意のタイプおよび形態のデータフローに基づいて、コア505の間で分配されることができる。これらのアプローチのうちの別のものでは、作業は、データフローに基づいてコアの間で分割または分配されてもよい。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの1つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求/応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス200’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。
フローベースのデータ並列性520では、データの分布は、要求/応答ペアリング、トランザクション、セッション、接続、またはアプリケーション通信等の任意のタイプのデータのフローに関連する。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの1つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。データフローの分布は、各コア505が、実質的に等しい、または比較的均等に分配された量の負荷、データ、またはネットワークトラフィックを搬送するようなものであってもよい。
いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求/応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス200’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。一実施形態では、データフローは、トランザクションまたは一連のトランザクションに基づいて、分配されることができる。本トランザクションは、いくつかの実施形態では、クライアントとサーバとの間にあることができ、IPアドレスまたは他のパケット識別子によって特徴付けられることができる。例えば、コア1 505Aは、特定のクライアントと特定のサーバとの間のトランザクションに専用であることができ、したがって、コア1 505A上の負荷515Aは、特定のクライアントとサーバとの間のトランザクションと関連付けられるネットワークトラフィックから成ってもよい。ネットワークトラフィックをコア1 505Aに配分することは、特定のクライアントまたはサーバのいずれかから生じる全てのデータパケットをコア1 505Aにルーティングすることによって、達成されることができる。
作業または負荷は、部分的にトランザクションに基づいてコアに分配されることができるが、他の実施形態では、負荷または作業は、パケット毎の基準で配分されることができる。これらの実施形態では、アプライアンス200は、データパケットを傍受し、それらを、最少量の負荷を有するコア505に配分することができる。例えば、コア1上の負荷515Aが、残りのコア505B−N上の負荷515B−Nより少ないため、アプライアンス200は、第1の着信データパケットをコア1 505Aに配分し得る。いったん第1のデータパケットがコア1 505Aに配分されると、コア1 505A上の負荷515Aの量は、第1のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス200が第2のデータパケットを傍受するとき、コア4 505Dが第2の最少量の負荷を有するため、アプライアンス200は、負荷をコア4 505Dに配分するであろう。最少量の負荷を伴うコアにデータパケットを配分することは、いくつかの実施形態では、各コア505に分配される負荷515A−Nが実質的に等しいままであることを確実にすることができる。
他の実施形態では、負荷は、ネットワークトラフィックのある区分が特定のコア505に配分される、単位毎の基準で配分されることができる。上記の実施例は、パケット毎の基準で負荷平衡を例証する。他の実施形態では、負荷は、10、100、または1,000個毎のパケットが、最少量の負荷を有するコア505に配分されるように、パケットの数に基づいて配分されることができる。コア505に配分されるパケットの数は、アプリケーション、ユーザ、または管理者によって判定される数であることができ、ゼロより大きい任意の数であることができる。なおも他の実施形態では、負荷は、パケットが所定の時間量にわたって特定のコア505に分配されるように、時間メトリックに基づいて配分されることができる。これらの実施形態では、パケットは、5ミリ秒にわたって、またはユーザ、プログラム、システム、管理者によって、または別様に判定される、任意の時間周期にわたって、特定のコア505に配分されることができる。所定の時間周期が経過した後、データパケットが、所定の時間周期にわたって異なるコア505に伝送される。
1つまたはそれを上回るコア505の間で作業、負荷、またはネットワークトラフィックを分配するためのフローベースのデータ並列性方法は、上記の実施形態の任意の組み合わせを備えることができる。これらの方法は、アプライアンス200の任意の部分によって、パケットエンジン等のコア505のうちの1つの上で実行するアプリケーションまたは実行可能命令のセットによって、またはアプライアンス200と通信するコンピューティングデバイス上で実行する任意のアプリケーション、プログラム、またはエージェントによって、実施されることができる。
図5Aに図示される機能およびデータ並列性計算方式は、機能並列性500、データ並列性540、フローベースのデータ並列性520、またはそれらの任意の部分を包含する、ハイブリッド並列性または分散処理方式を生成するように、任意の様式で組み合わせられることができる。ある場合には、マルチコアシステムは、1つまたはそれを上回るコア505の間で負荷を分配するために、任意のタイプおよび形態の負荷平衡方式を使用してもよい。負荷平衡方式は、機能およびデータ並列性方式のうちのいずれかまたはそれらの組み合わせとの任意の組み合わせで、使用されてもよい。
図5Bには、任意のタイプおよび形態の1つまたはそれを上回るシステム、アプライアンス、デバイス、またはコンポーネントであり得る、マルチコアシステム545の実施形態が図示されている。本システム545は、いくつかの実施形態では、1つまたはそれを上回る処理コア505A−Nを有する、アプライアンス200内に含まれることができる。システム545はさらに、メモリバス556と通信する、1つまたはそれを上回るパケットエンジン(PE)またはパケット処理エンジン(PPE)548A−Nを含むことができる。メモリバスは、1つまたはそれを上回る処理コア505A−Nと通信するために使用されてもよい。また、システム545内には、1つまたはそれを上回るネットワークインターフェースカード(NIC)552と、1つまたはそれを上回る処理コア505A−Nとさらに通信し得るフローディストリビュータ550とが含まれることができる。フローディストリビュータ550は、受信側スケーラ(RSS)または受信側スケーリング(RSS)モジュール560を備えることができる。
さらに図5Bを参照すると、さらに詳細には、一実施形態では、パケットエンジン548A−Nは、図2Aおよび2Bに説明されるアプライアンスの任意の部分等の本明細書に説明されるアプライアンス200の任意の部分を備えることができる。パケットエンジン548A−Nは、いくつかの実施形態では、以下の要素、すなわち、パケットエンジン240、ネットワークスタック267、キャッシュマネージャ232、ポリシエンジン236、圧縮エンジン238、暗号化エンジン234、GUI210、CLI212、シェルサービス214、監視プログラム216、およびメモリバス556または1つまたはそれを上回るコア505A−Nのいずれかの1つからデータパケットを受信することが可能な任意の他のソフトウェアまたはハードウェア要素のうちのいずれかを備えることができる。いくつかの実施形態では、パケットエンジン548A−Nは、1つまたはそれを上回るvサーバ275A−Nまたはその任意の部分を備えることができる。他の実施形態では、パケットエンジン548A−Nは、以下の機能性、すなわち、SSL VPN280、イントラネットUP282、切替284、DNS286、パケット加速288、App FW290、監視エージェント197によって提供される監視等の監視、TCPスタックとして機能することと関連付けられる機能性、負荷平衡、SSLオフローディングおよび処理、コンテンツ切替、ポリシ評価、キャッシング、圧縮、エンコード、解凍、デコード、アプリケーションファイアウォール機能性、XML処理および加速、およびSSL VPNコネクティビティの任意の組み合わせを提供することができる。
パケットエンジン548A−Nは、いくつかの実施形態では、特定のサーバ、ユーザ、クライアント、またはネットワークと関連付けられることができる。パケットエンジン548が特定のエンティティと関連付けられるとき、そのパケットエンジン548は、そのエンティティと関連付けられるデータパケットを処理することができる。例えば、パケットエンジン548が第1のユーザと関連付けられる場合、そのパケットエンジン548は、第1のユーザによって生成されるパケット、または第1のユーザと関連付けられる宛先アドレスを有するパケットを処理し、それに作用するであろう。同様に、パケットエンジン548は、パケットエンジン548が、特定のエンティティによって生成されていない、またはそのエンティティに向けられていない任意のデータパケットを処理し、別様にそれに作用することができるように、そのエンティティと関連付けられないことを選定してもよい。
ある事例では、パケットエンジン548A−Nは、図5Aに図示される機能および/またはデータ並列性方式のうちのいずれかを実施するように構成されることができる。これらの事例では、パケットエンジン548A−Nは、分布が並列性または分布方式に従うように、処理コア505A−Nの間で機能またはデータを分配することができる。いくつかの実施形態では、単一のパケットエンジン548A−Nが、負荷平衡方式を実施する一方で、他の実施形態では、1つまたはそれを上回るパケットエンジン548A−Nが、負荷平衡方式を実施する。各コア505A−Nは、一実施形態では、負荷平衡がパケットエンジンによって実施され得るように、特定のパケットエンジン548と関連付けられることができる。負荷平衡は、本実施形態では、パケットエンジン548A−Nが負荷を分配する場所を集合的に判定することができるように、コア505と関連付けられる各パケットエンジン548A−Nが、コアと関連付けられる他のパケットエンジンと通信することを要求してもよい。本プロセスの一実施形態は、負荷のために各パケットエンジンから投票を受信する、アービタを含むことができる。アービタは、部分的に、エンジンの投票の時期、ある場合には、エンジンの関連付けられるコア505上の負荷の現在の量と関連付けられる優先順位値に基づいて、負荷を各パケットエンジン548A−Nに分配することができる。
コア上で起動するパケットエンジンのうちのいずれかは、ユーザモード、カーネル、またはそれらの任意の組み合わせで起動してもよい。いくつかの実施形態では、パケットエンジンは、ユーザまたはアプリケーション空間内で起動するアプリケーションまたはプログラムとして動作する。これらの実施形態では、パケットエンジンは、カーネルによって提供される任意の機能性にアクセスするために、任意のタイプおよび形態のインターフェースを使用してもよい。いくつかの実施形態では、パケットエンジンは、カーネルモードで、またはカーネルの一部として動作する。いくつかの実施形態では、パケットエンジンの第1の部分が、ユーザモードで動作する一方で、パケットエンジンの第2の部分は、カーネルモードで動作する。いくつかの実施形態では、第1のコア上の第1のパケットエンジンが、カーネルモードで実行する一方で、第2のコア上の第2のパケットエンジンは、ユーザモードで実行する。いくつかの実施形態では、パケットエンジンまたはその任意の部分は、NICまたはその任意のドライバ上で、またはそれと連動して動作する。
いくつかの実施形態では、メモリバス556は、任意のタイプおよび形態のメモリまたはコンピュータバスであることができる。単一のメモリバス556が図5Bで描写されているが、システム545は、任意の数のメモリバス556を備えることができる。一実施形態では、各パケットエンジン548は、1つまたはそれを上回る個々のメモリバス556と関連付けられることができる。
NIC552は、いくつかの実施形態では、本明細書に説明されるネットワークインターフェースカードまたは機構のうちのいずれかであることができる。NIC552は、任意の数のポートを有することができる。NICは、任意のタイプおよび形態のネットワーク104に接続するように設計および構築されることができる。単一のNIC552が図示されているが、システム545は、任意の数のNIC552を備えることができる。いくつかの実施形態では、各コア505A−Nは、1つまたはそれを上回る単一のNIC552と関連付けられることができる。したがって、各コア505は、特定のコア505専用の単一のNIC552と関連付けられることができる。
コア505A−Nは、本明細書に説明されるプロセッサのうちのいずれかを備えることができる。さらに、コア505A−Nは、本明細書に説明されるコア505構成のうちのいずれかに従って構成されることができる。なおもさらに、コア505A−Nは、本明細書に説明されるコア505機能性のうちのいずれかを有することができる。図5Bは、7つのコア505A−Gを図示するが、任意の数のコア505が、システム545内に含まれることができる。具体的には、システム545は、「N」個のコアを備えることができ、「N」は、ゼロより大きい整数である。
コアは、使用するためにそのコアに配分される、または割り当てられる、メモリを有する、または使用してもよい。メモリは、そのコアのプライベートまたはローカルメモリと見なされ、そのコアのみによってアクセス可能であり得る。コアは、共有される、または複数のコアに割り当てられる、メモリを有する、または使用してもよい。メモリは、1つを上回るコアによってアクセス可能である公共または共有メモリと見なされてもよい。コアは、プライベートおよび公共メモリの任意の組み合わせを使用してもよい。各コアのための別個のアドレス空間を用いることで、あるレベルの協調が、同一アドレス空間を使用する場合から排除される。別個のアドレス空間を用いることで、コアは、他のコアとの対立について心配することなく、コアの独自のアドレス空間内で情報およびデータに作業を行うことができる。各パケットエンジンは、TCPおよび/またはSSL接続のための別個のメモリプールを有してもよい。
さらに図5Bを参照すると、図5Aに関連して上記で説明されるコア505の機能性および/または実施形態のうちのいずれかが、図4Aおよび4Bに関連して上記で説明される仮想化された環境の任意の実施形態で展開されることができる。物理プロセッサ505の形態で展開されているコア505の機能性の代わりに、そのような機能性は、クライアント102、サーバ106、またはアプライアンス200等の任意のコンピューティングデバイス100上の仮想化された環境400で展開されてもよい。他の実施形態では、アプライアンスまたは単一のデバイスの形態で展開されているコア505の機能性の代わりに、機能性は、任意の配列で複数のデバイスを横断して展開されてもよい。例えば、1つのデバイスは、2つまたはそれを上回るコアを備えてもよく、別のデバイスは、2つまたはそれを上回るコアを備えてもよい。例えば、マルチコアシステムは、コンピューティングデバイスのクラスタ、サーバファーム、またはコンピューティングデバイスのネットワークを含んでもよい。いくつかの実施形態では、コアの形態で展開されているコア505の機能性の代わりに、機能性は、複数の単一コアプロセッサ等の複数のプロセッサ上で展開されてもよい。
一実施形態では、コア505は、任意のタイプおよび形態のプロセッサであってもよい。いくつかの実施形態では、コアは、本明細書に説明される任意のプロセッサまたは中央処理ユニットと実質的に同様に機能することができる。いくつかの実施形態では、コア505は、本明細書に説明される任意のプロセッサの任意の部分を備えてもよい。図5Aは、7つのコアを図示するが、任意の「N」個のコアがアプライアンス200内に存在することができ、「N」は、1より大きい任意の整数である。いくつかの実施形態では、コア505は、共通アプライアンス200内にインストールされることができる一方で、他の実施形態では、コア505は、相互に通信可能に接続される1つまたはそれを上回るアプライアンス200内にインストールされることができる。コア505は、いくつかの実施形態では、グラフィックス処理ソフトウェアを備えることができる一方で、他の実施形態では、コア505は、一般処理能力を提供する。コア505は、物理的に相互の近傍にインストールされることができ、および/または相互に通信可能に接続されることができる。コアは、物理的に任意のタイプおよび形態のバスまたはサブシステムによって接続され、および/またはコアに、コアから、および/またはコアの間でデータを転送するためにコアに通信可能に結合されてもよい。
各コア505は、他のコアと通信するためのソフトウェアを備えることができるが、いくつかの実施形態では、コアマネージャ(図示せず)は、各コア505の間の通信を促進することができる。いくつかの実施形態では、カーネルは、コア管理を提供してもよい。コアは、種々のインターフェース機構を使用して、相互とインターフェースをとってもよい、または通信してもよい。いくつかの実施形態では、コア間メッセージングが、コアを接続するバスまたはサブシステムを介してメッセージまたはデータを第2のコアに送信する第1のコア等のコアの間で通信するために使用されてもよい。いくつかの実施形態では、コアは、任意のタイプおよび形態の共有メモリインターフェースを介して通信してもよい。一実施形態では、全てのコアの間で共有される1つまたはそれを上回るメモリ場所があってもよい。いくつかの実施形態では、各コアは、相互のコアと共有される別個のメモリ場所を有してもよい。例えば、第1のコアは、第2のコアとの第1の共有メモリと、第3のコアとの第2の共有メモリとを有してもよい。いくつかの実施形態では、コアは、カーネルを介した機能コール等の任意のタイプのプログラミングまたはAPIを介して通信してもよい。いくつかの実施形態では、オペレーティングシステムは、複数のコアデバイスを認識してサポートし、コア間通信のためのインターフェースおよびAPIを提供してもよい。
フローディストリビュータ550は、任意のタイプおよび形態のハードウェア上で実行する、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、または任意のタイプおよび形態の実行可能命令であることができる。いくつかの実施形態では、フローディストリビュータ550は、本明細書に説明される動作および機能のうちのいずれかを果たす回路の任意の設計および構築であることができる。いくつかの実施形態では、フローディストリビュータは、コア505および/またはコア上で起動するパケットエンジンまたはVIPの間のデータパケットの分布を分配、自動転送、ルーティング、制御、および/または管理する。フローディストリビュータ550は、いくつかの実施形態では、インターフェースマスタと称されることができる。一実施形態では、フローディストリビュータ550は、アプライアンス200のコアまたはプロセッサ上で実行する実行可能命令のセットを備える。別の実施形態では、フローディストリビュータ550は、アプライアンス200と通信するコンピューティングマシン上で実行する実行可能命令のセットを備える。いくつかの実施形態では、フローディストリビュータ550は、ファームウェア等のNIC上で実行する実行可能命令のセットを備える。なおも他の実施形態では、フローディストリビュータ550は、コアまたはプロセッサの間でデータパケットを分配するソフトウェアおよびハードウェアの任意の組み合わせを備える。一実施形態では、フローディストリビュータ550が、コア505A−Nのうちの少なくとも1つの上で実行する一方で、他の実施形態では、各コア505A−Nに割り当てられる別個のフローディストリビュータ550が、関連付けられるコア505A−N上で実行する。フローディストリビュータは、コアを横断するフローの平衡をとるために、任意のタイプおよび形態の統計的または確率的アルゴリズムまたは意思決定を使用してもよい。NIC等のアプライアンスのハードウェアまたはカーネルは、NICおよび/またはコアを横断して順次動作をサポートするように設計および構築されてもよい。
システム545が1つまたはそれを上回るフローディストリビュータ550を備える、実施形態では、各フローディストリビュータ550は、プロセッサ505またはパケットエンジン548と関連付けられることができる。フローディストリビュータ550は、各フローディストリビュータ550が、システム545内で実行する他のフローディストリビュータ550と通信することを可能にする、インターフェース機構を備えることができる。1つの事例では、1つまたはそれを上回るフローディストリビュータ550は、相互と通信することによって、負荷の平衡をとる方法を判定することができる。本プロセスは、次いで、いずれのフローディストリビュータ550が負荷を受容するべきかを判定する、アービタに投票を提出するために、上記で説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第1のフローディストリビュータ550’は、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が所定の閾値を上回ること、関連付けられるコア上の負荷が所定の閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷より少ないこと、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを自動転送する場所を判定するために使用されることができる任意の他の測定基準のうちのいずれかに基づいて、第1のデータパケットを関連付けられるコアに自動転送するかどうかを判定することができる。
フローディストリビュータ550は、本明細書に説明されるもの等の分布、計算、または負荷平衡方式に従って、コア505の間でネットワークトラフィックを分配することができる。一実施形態では、フローディストリビュータは、機能並列性分布方式550、データ並列性負荷分布方式540、フローベースのデータ並列性分布方式520、またはこれらの分布方式または複数のプロセッサの間で負荷を分配するための任意の負荷平衡方式の任意の組み合わせのうちのいずれか1つに従って、ネットワークトラフィックを分配することができる。したがって、フローディストリビュータ550は、データパケットを取り込み、動作負荷平衡または分布方式に従って、プロセッサを横断してそれらを分配することによって、負荷ディストリビュータとして作用することができる。一実施形態では、フローディストリビュータ550は、それに応じて、パケット、作業、または負荷を分配する方法を判定する1つまたはそれを上回る動作、機能、または論理を備えることができる。なおも他の実施形態では、フローディストリビュータ550は、ソースアドレスおよびデータパケットと関連付けられる宛先アドレスを識別し、それに応じて、パケットを分配し得る、1つまたはそれを上回るサブ動作、機能、または論理を備えることができる。
いくつかの実施形態では、フローディストリビュータ550は、1つまたはそれを上回るコア505の間でデータパケットを分配する、受信側スケーリング(RSS)ネットワークドライバモジュール560または任意のタイプおよび形態の実行可能命令を備えることができる。RSSモジュール560は、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、RSSモジュール560は、コア505A−Nを横断して、またはマルチプロセッサネットワーク内の複数のプロセッサの間でデータパケットを分配するように、フローディストリビュータ550と連動して作動する。RSSモジュール560は、いくつかの実施形態では、NIC552内で実行することができ、他の実施形態では、コア505のうちのいずれか1つの上で実行することができる。
いくつかの実施形態では、RSSモジュール560は、MICROSOFT受信側スケーリング(RSS)方式を使用する。一実施形態では、RSSは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡をとられることを可能にする、Microsoft拡張可能ネットワーキングイニシアチブ技術である。RSSは、ネットワークパケットを処理するためのコアまたはプロセッサを判定するために任意のタイプおよび形態のハッシング方式を使用してもよい。
RSSモジュール560は、Toeplitzハッシュ関数等の任意のタイプおよび形態のハッシュ関数を適用することができる。ハッシュ関数は、ハッシュタイプまたは一連の値のうちのいずれかに適用されてもよい。ハッシュ関数は、任意のセキュリティレベルのセキュアなハッシュであってもよい、または別様に暗号論的にセキュアである。ハッシュ関数は、ハッシュキーを使用してもよい。キーのサイズは、ハッシュ関数に依存している。Toeplitzハッシュに関して、サイズは、IPv6については40バイト、IPv4については16バイトであってもよい。
ハッシュ関数は、いずれか1つまたはそれを上回る基準または設計目標に基づいて設計および構築されてもよい。いくつかの実施形態では、TCP/IPv4、TCP/IPv6、IPv4、およびIPv6ヘッダを含む、異なるハッシュ入力および異なるハッシュタイプのハッシュ結果の均等な分布を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、少数のバケット(例えば、2つまたは4つ)が存在しているときに均等に分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、多数のバケット(例えば、64個のバケット)が存在したときにランダムに分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、ハッシュ関数は、計算またはリソース使用量のレベルに基づいて判定される。いくつかの実施形態では、ハッシュ関数は、ハードウェアでハッシュを実装することの容易性または困難に基づいて判定される。いくつかの実施形態では、ハッシュ関数は、悪意のある遠隔ホストが、全てハッシュするであろうパケットを同一バケットに送信することの容易性または困難に基づいて、判定される。
RSSは、一連の値等の任意のタイプおよび形態の入力からハッシュを生成してもよい。本一連の値は、ネットワークパケットの任意のヘッダ、フィールド、またはペイロード、またはそれらの部分等のネットワークパケットの任意の部分を含むことができる。いくつかの実施形態では、ハッシュへの入力は、ハッシュタイプと称され、以下、すなわち、少なくとも2つのIPアドレスと、2つのポートとを備える、4タプル、値のいずれか4つのセットを備える4タプル、6タプル、2タプル、および/または任意の他の一連の数または値のうちのいずれか等のネットワークパケットまたはデータフローと関連付けられる情報の任意のタプルを含んでもよい。以下は、RSSによって使用され得る、ハッシュタイプの実施例である。
ソースTCPポート、ソースIPバージョン4(IPv4)アドレス、宛先TCPポート、および宛先IPv4アドレスの4タプル。
ソースTCPポート、ソースIPバージョン6(IPv6)アドレス、宛先TCPポート、および宛先IPv6アドレスの4タプル。
ソースIPv4アドレスおよび宛先IPv4アドレスの2タプル。
ソースIPv6アドレスおよび宛先IPv6アドレスの2タプル。
IPv6拡張ヘッダを解析するためのサポートを含む、ソースIPv6アドレスおよび宛先IPv6アドレスの2タプル。
ハッシュ結果またはその任意の部分は、ネットワークパケットを分配するためのパケットエンジンまたはVIP等のコアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、1つまたはそれを上回るハッシュビットまたはマスクが、ハッシュ結果に適用される。ハッシュビットまたはマスクは、任意の数のビットまたはバイトであってもよい。NICは、7ビット等の任意の数のビットをサポートしてもよい。ネットワークスタックは、初期化中に使用される実際のビットの数を設定してもよい。数は、1〜7を含むであろう。
ハッシュ結果は、バケットテーブルまたは間接テーブル等の任意のタイプおよび形態のテーブルを介して、コアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、ハッシュ結果ビットの数は、テーブルの中へインデックス化するために使用される。ハッシュマスクの範囲は、間接テーブルのサイズを効果的に定義してもよい。ハッシュ結果の任意の部分またはハッシュ結果自体が、間接テーブルをインデックス化するために使用されてもよい。テーブル内の値は、コアまたはプロセッサ識別子によって等、コアまたはプロセッサのうちのいずれかを識別してもよい。いくつかの実施形態では、マルチコアシステムのコアの全てが、テーブル内で識別される。他の実施形態では、マルチコアシステムのコアのポートが、テーブル内で識別される。間接テーブルは、任意の数のバケット、例えば、ハッシュマスクによってインデックス化され得る、2〜128個のバケットを備えてもよい。各バケットは、コアまたはプロセッサを識別する、一連のインデックス値を備えてもよい。いくつかの実施形態では、フローコントローラおよび/またはRSSモジュールは、間接テーブルを変更することによって、ネットワークの平衡を再びとり、ネットワーク負荷の平衡を再びとってもよい。
いくつかの実施形態では、マルチコアシステム575は、RSSドライバまたはRSSモジュール560を含まない。これらの実施形態のうちのいくつかでは、ソフトウェアステアリングモジュール(図示せず)またはシステム内のRSSモジュール560のソフトウェア実施形態が、パケットをマルチコアシステム575内のコア505にステアリングするように、フローディストリビュータ550と連動して、またはその一部として動作することができる。
フローディストリビュータ550は、いくつかの実施形態では、アプライアンス200の上、コア505のうちのいずれか1つの上、およびマルチコアシステム575内に含まれるデバイスまたはコンポーネントのうちのいずれか1つの上の任意のモジュールまたはプログラム内で実行する。いくつかの実施形態では、フローディストリビュータ550’が、第1のコア505A上で実行することができる一方で、他の実施形態では、フローディストリビュータ550’’は、NIC552上で実行することができる。なおも他の実施形態では、フローディストリビュータ550’のインスタンスが、マルチコアシステム575に含まれる各コア505上で実行することができる。本実施形態では、フローディストリビュータ550’の各インスタンスは、コア505を横断してパケットを往復して自動転送するように、フローディストリビュータ550’の他のインスタンスと通信することができる。要求パケットへの応答が、同一のコアによって処理されない場合がある、すなわち、第1のコアが要求を処理する一方で、第2のコアが応答を処理する、状況が存在する。これらの状況では、フローディストリビュータ550’のインスタンスは、パケットを傍受し、それを所望または正しいコア505に自動転送することができ、すなわち、フローディストリビュータインスタンス550’は、応答を第1のコアに自動転送することができる。フローディストリビュータ550’の複数のインスタンスが、任意の数のコア505およびコア505の任意の組み合わせの上で実行することができる。
フローディストリビュータは、いずれか1つまたはそれを上回るルールまたはポリシに応答して動作してもよい。ルールは、ネットワークパケット、データ、またはデータフローを受信するようにコアまたはパケット処理エンジンを識別してもよい。ルールは、ソースおよび宛先IPアドレスおよびソースおよび宛先ポートの4タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。ルールによって規定されるタプルに合致する、受信されたパケットに基づいて、フローディストリビュータは、パケットをコアまたはパケットエンジンに自動転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび/またはコア間メッセージングを介して、コアに自動転送される。
図5Bは、マルチコアシステム575内で実行するものとしてフローディストリビュータ550を図示するが、いくつかの実施形態では、フローディストリビュータ550は、マルチコアシステム575から遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行することができる。そのような実施形態では、フローディストリビュータ550は、データパケットを取り込み、1つまたはそれを上回るコア505を横断してパケットを分配するように、マルチコアシステム575と通信することができる。フローディストリビュータ550は、一実施形態では、アプライアンス200に向けられているデータパケットを受信し、分布方式を受信されたデータパケットに適用し、データパケットをマルチコアシステム575の1つまたはそれを上回るコア505に分配することができる。一実施形態では、フローディストリビュータ550は、各パケットがマルチコアシステム575のサブノードに向かって標的化されるように、各パケットと関連付けられるメタデータを改変することによって、ルータが特定のコア505を標的化し得るように、ルータまたは他のアプライアンスに含まれることができる。そのような実施形態では、CISCOのvnタグ機構が、適切なメタデータを用いて各パケットを改変する、またはタグ付けするために使用されることができる。
図5Cには、1つまたはそれを上回る処理コア505A−Nを備える、マルチコアシステム575の実施形態が図示されている。要するに、コア505のうちの1つは、制御コア505Aとして指定されることができ、かつ他のコア505のための制御プレーン570として使用されることができる。他のコアが、データプレーン内で動作する二次コアであってもよい一方で、制御コアは、制御プレーンを提供する。コア505A−Nは、グローバルキャッシュ580を共有してもよい。制御コアが、制御プレーンを提供する一方で、マルチコアシステム内の他のコアは、データプレーンを形成または提供する。これらのコアが、ネットワークトラフィック上でデータ処理機能性を果たす一方で、制御は、マルチコアシステムの初期化、構成、および制御を提供する。
さらに図5Cを参照すると、さらに詳細には、コア505A−Nおよび制御コア505Aは、本明細書に説明される任意のプロセッサであることができる。さらに、コア505A−Nおよび制御コア505Aは、図5Cに説明されるシステム575内で機能することが可能な任意のプロセッサであることができる。なおもさらに、コア505A−Nおよび制御コア505Aは、本明細書に説明される任意のコアまたはコアのグループであることができる。制御コアは、他のコアと異なるタイプのコアまたはプロセッサであってもよい。いくつかの実施形態では、制御は、異なるパケットエンジンを動作させてもよい、または他のコアのパケットエンジンと異なって構成されるパケットエンジンを有してもよい。
コアのそれぞれのメモリの任意の部分は、コアによって共有されるグローバルキャッシュに配分されてもよい、またはそれに使用されてもよい。要するに、各コアのメモリのそれぞれの所定の割合または所定の量が、グローバルキャッシュに使用されてもよい。例えば、各コアの各メモリの50%が、共有グローバルキャッシュに専用である、または配分されてもよい。すなわち、図示される実施形態では、制御プレーンコアまたはコア1を除外する各コアの2GBが、28GB共有グローバルキャッシュを形成するために使用されてもよい。構成サービスを介する等の制御プレーンの構成は、共有グローバルキャッシュに使用されるメモリの量を判定してもよい。いくつかの実施形態では、各コアは、グローバルキャッシュによって使用するための異なる量のメモリを提供してもよい。他の実施形態では、いずれか1つのコアは、いかなるメモリも提供しない、またはグローバルキャッシュを使用しない場合がある。いくつかの実施形態では、コアのうちのいずれかはまた、グローバル共有メモリに配分されていないメモリ内にローカルキャッシュを有してもよい。コアはそれぞれ、ネットワークトラフィックの任意の部分をグローバル共有キャッシュに記憶してもよい。コアはそれぞれ、要求または応答で使用するように、任意のコンテンツのためのキャッシュをチェックしてもよい。コアのうちのいずれかは、データフロー、要求、または応答で使用するように、グローバル共有キャッシュからコンテンツを取得してもよい。
グローバルキャッシュ580は、本明細書に説明される任意のメモリまたは記憶要素等の任意のタイプおよび形態のメモリまたは記憶要素であることができる。いくつかの実施形態では、コア505は、所定量のメモリ(すなわち、32GBまたはシステム575にふさわしい任意の他のメモリ量)へのアクセスを有してもよい。グローバルキャッシュ580が、その所定量のメモリから配分されることができる一方で、残りの利用可能なメモリは、コア505の間で配分されることができる。他の実施形態では、各コア505は、所定量のメモリを有することができる。グローバルキャッシュ580は、各コア505に配分されたメモリの量を備えることができる。本メモリ量は、バイトで測定されることができる、または各コア505に配分されたメモリの割合として測定されることができる。したがって、グローバルキャッシュ580は、各コア505と関連付けられるメモリからの1GBのメモリを備えることができる、または各コア505と関連付けられるメモリの20%または半分を備えることができる。いくつかの実施形態では、コア505の一部のみが、メモリをグローバルキャッシュ580に提供する一方で、他の実施形態では、グローバルキャッシュ580は、コア505に割り当てられていないメモリを備えることができる。
各コア505は、ネットワークトラフィックまたはキャッシュデータを記憶するためにグローバルキャッシュ580を使用することができる。いくつかの実施形態では、コアのパケットエンジンは、複数のパケットエンジンによって記憶されるデータをキャッシュして使用するために、グローバルキャッシュを使用する。例えば、図2Aのキャッシュマネージャおよび図2Bキャッシュ機能性は、加速のためにデータを共有するようにグローバルキャッシュを使用してもよい。例えば、パケットエンジンはそれぞれ、HTMLデータ等の応答をグローバルキャッシュに記憶してもよい。コア上で動作するキャッシュマネージャのうちのいずれかは、クライアント要求へのキャッシュ応答を供給するように、グローバルキャッシュにアクセスしてもよい。
いくつかの実施形態では、コア505は、部分的にポートに基づいてデータフローを判定するために使用され得る、ポート配分テーブルを記憶するために、グローバルキャッシュ580を使用することができる。他の実施形態では、コア505は、着信および発信データパケットをダイレクトする場所を判定するためにフローディストリビュータによって使用され得る、アドレスルックアップテーブルまたは任意の他のテーブルまたはリストを記憶するために、グローバルキャッシュ580を使用することができる。コア505は、いくつかの実施形態では、キャッシュ580から読み取ること、およびそれに書き込むことができる一方で、他の実施形態では、コア505は、キャッシュ580から読み取ること、またはそれに書き込むことのみできる。コアは、コア間通信を行うためにグローバルキャッシュを使用してもよい。
グローバルキャッシュ580は、各区分が特定のコア505に専用であることができる、個々のメモリ区分に区分化されてもよい。一実施形態では、制御コア505Aが、より多くの量の利用可能なメモリを受信することができる一方で、他のコア505は、グローバルキャッシュ580への様々な量またはアクセスを受信することができる。
いくつかの実施形態では、システム575は、制御コア505Aを備えることができる。図5Cは、制御コアとしてコア1505Aを図示するが、制御コアは、アプライアンス200またはマルチコアシステム内の任意のコアであることができる。さらに、単一の制御コアのみが描写されているが、システム575は、それぞれ、システムに対するあるレベルの制御を有する、1つまたはそれを上回る制御コアを備えることができる。いくつかの実施形態では、1つまたはそれを上回る制御コアはそれぞれ、システム575の特定の側面を制御することができる。例えば、1つのコアが、いずれの分布方式を使用するかを決定することを制御することができる一方で、別のコアは、グローバルキャッシュ580のサイズを判定することができる。
マルチコアシステムの制御プレーンは、専用管理コアとして、またはマスタコアとしてのコアの指定および構成であってもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの動作および機能性の制御、管理、および協調を提供してもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの初期化および構成を含む、同一コアの間のシステムのメモリの配分および使用の制御、管理、および協調を提供してもよい。いくつかの実施形態では、制御プレーンは、データフローに基づいて、コアへのデータフローの割当およびコアへのネットワークパケットの分布を制御するためのフローディストリビュータを含む。いくつかの実施形態では、制御プレーンコアは、パケットエンジンを起動し、他の実施形態では、制御プレーンコアは、本システムの他のコアの管理および制御に専用である。
制御コア505Aは、どれだけのメモリが各コア505に配分されるべきかを判定するステップ、またはいずれのコア505が特定の機能またはハードウェア/ソフトウェアエンティティをハンドリングするように割り当てられるべきかを判定するステップ等の他のコア505に対するあるレベルの制御を実行することができる。制御コア505Aは、いくつかの実施形態では、制御プレーン570内でこれらのコア505に対する制御を実行してもよい。したがって、制御コア505Aによって制御されないプロセッサが制御プレーン570の外側に存在することができる。制御プレーン570の境界を判定するステップは、システム575内で実行する制御コア505Aまたはエージェントによって、制御コア505Aによって制御される、これらのコア505のリストを維持するステップを含むことができる。制御コア505Aは、以下、すなわち、コアの初期化、コアが利用不可能であるときを判定するステップ、1つのコアが故障したときに負荷を他のコア505に再配分するステップ、いずれの分布方式を実装するかを判定するステップ、いずれのコアがネットワークトラフィックを受信するべきかを判定するステップ、どれだけのキャッシュが各コアに配分されるべきかを判定するステップ、特定の機能または要素を特定のコアに割り当てるかどうかを判定するステップ、コアが相互と通信することを可能にするかどうかを判定するステップ、グローバルキャッシュ580のサイズを判定するステップ、およびシステム575内のコアの機能、構成、または動作の任意の他の判定のうちのいずれかを制御することができる。
F.分散クラスタアーキテクチャを提供するためのシステムおよび方法
前の節で議論されるように、トランジスタ間隔およびCPU速度増加に対する限界を克服するために、多くのCPU製造業者は、単一のより高速のCPUさえも可能なものを超えて性能を改良するように、マルチコアCPUを組み込んでいる。類似する、またはさらなる性能獲得が、単一またはマルチコアのいずれかである複数のアプライアンスを、分散またはクラスタ化アプライアンスとしてともに動作させることによって、得られてもよい。個々のコンピューティングデバイスまたはアプライアンスは、クラスタのノードと称されてもよい。集中型管理システムが、ノードが単一のコンピューティングシステムとして連動することを可能にするように、負荷平衡、分布、構成、または他のタスクを行ってもよい。外部に、またはサーバおよびクライアントを含む、他のデバイスに対して、多くの実施形態では、クラスタは、典型的な個々のアプライアンスの性能を超える性能を伴うものではあるが、単一の仮想アプライアンスまたはコンピューティングデバイスと見なされてもよい。
ここで図6を参照すると、コンピューティングデバイスクラスタまたはアプライアンスクラスタ600の実施形態が図示されている。複数のアプライアンス200a−200n、またはデスクトップコンピュータ、サーバ、ラックマウントサーバ、ブレードサーバ、または任意の他のタイプおよび形態のコンピューティングデバイス等の、時として、ノードと称されることもある、他のコンピューティングデバイスが、単一のアプライアンスクラスタ600に結合されてもよい。アプライアンスクラスタと称されるが、多くの実施形態では、クラスタは、限定ではないが、アプリケーションサーバ、ネットワーク記憶サーバ、バックアップサービス、または任意の他のタイプのコンピューティングデバイスとして動作してもよい。多くの実施形態では、アプライアンスクラスタ600は、アプライアンス200、WAN最適化デバイス、ネットワーク加速デバイス、または上記で議論される他のデバイスの機能の多くを果たすために使用されてもよい。
いくつかの実施形態では、アプライアンスクラスタ600は、同じアプライアンス、1つまたはそれを上回るシャーシ内のブレードサーバ、デスクトップまたはラックマウントコンピューティングデバイス、または他のデバイス等のコンピューティングデバイスの同種セットを備えてもよい。他の実施形態では、アプライアンスクラスタ600は、アプライアンスの異なるモデル、混合アプライアンスおよびサーバ、またはコンピューティングデバイスの任意の他のセットを含む、デバイスの異種または混合セットを備えてもよい。これは、アプライアンスクラスタ600が、例えば、新しいモデルまたはデバイスを用いて経時的に拡張またはアップグレードされることを可能にし得る。
いくつかの実施形態では、アプライアンスクラスタ600の各コンピューティングデバイスまたはアプライアンス200は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分布方法は、本明細書で議論されるノード管理および分布方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、1つのアプライアンスがデータを備え、それを複数のノードに配分し、各ノードが処理のためのデータを備え、それを複数のコアに配分する、2層分散システムと考えられてもよい。故に、そのような実施形態では、ノード分布システムは、上記で議論されるようなマスタまたは制御コアによって保護され得るため、個々のコアへのフロー分布を管理する必要がない。
多くの実施形態では、アプライアンスクラスタ600は、シャーシ内の複数のブレードサーバまたは単一のラック内の複数のラックマウントデバイス等、物理的にグループ化されてもよいが、他の実施形態では、アプライアンスクラスタ600は、複数のシャーシ、複数のラック、データセンタ内の複数の部屋、複数のデータセンタ、または任意の他の物理配列で分配されてもよい。故に、アプライアンスクラスタ600は、物理グループではなく、共通構成、管理、および目的を介してグループ化される、仮想アプライアンスと見なされてもよい。
いくつかの実施形態では、アプライアンスクラスタ600は、1つまたはそれを上回るネットワーク104、104’に接続されてもよい。例えば、簡潔に図1Aを再び参照すると、いくつかの実施形態では、アプライアンス200は、1つまたはそれを上回るクライアント102に結合されたネットワーク104と1つまたはそれを上回るサーバ106に結合されたネットワーク104’との間に展開されてもよい。アプライアンスクラスタ600は、同様に、単一のアプライアンスとして動作するように展開されてもよい。多くの実施形態では、これは、アプライアンスクラスタ600の外部の任意のネットワークトポロジ変更を要求しなくてもよく、単一のアプライアンスシナリオからのインストールおよび拡張可能性の容易性を可能にする。他の実施形態では、アプライアンスクラスタ600は、同様に、図1B−1Dに示される、または上記で議論されるように展開されてもよい。なおも他の実施形態では、アプライアンスクラスタは、1つまたはそれを上回るサーバによって実行される複数の仮想マシンまたはプロセスを備えてもよい。例えば、1つのそのような実施形態では、サーバファームは、複数の仮想マシンを実行してもよく、各仮想マシンは、アプライアンス200として構成され、複数の仮想マシンは、アプライアンスクラスタ600として一斉に作用する。さらになおも他の実施形態では、アプライアンスクラスタ600は、アプライアンス200またはアプライアンス200として構成される仮想マシンの混合を備えてもよい。いくつかの実施形態では、アプライアンスクラスタ600は、同一場所に設置されていない複数のアプライアンス200を伴って、地理的に分配されてもよい。例えば、図6を再び参照すると、1つのそのような実施形態では、第1のアプライアンス200aは、データセンタ等の第1の場所に位置してもよく、第2のアプライアンス200bは、中央オフィスまたは企業の本社等の第2の場所に位置してもよい。さらなる実施形態では、そのように地理的に遠隔のアプライアンスは、T1またはT3ポイントツーポイント接続、VPN、または任意の他のタイプおよび形態のネットワーク等の専用ネットワークによって結合されてもよい。故に、同一場所に設置されたアプライアンス200a−200bと比較して、付加的通信待ち時間があり得るが、現場の停電または通信不能状態の場合の信頼性、拡張可能性、または他の利益において利点があってもよい。いくつかの実施形態では、待ち時間の問題は、データフローの地理またはネットワークベースの分布を通して低減させられ得る。例えば、アプライアンスクラスタ600として構成されるが、企業の本社におけるクライアントおよびサーバからの通信が、現場で展開されるアプライアンス200bにダイレクトされてもよい、負荷平衡が、場所によって加重されてもよい、または類似ステップが、いかなる待ち時間も軽減するようにとられることができる。
依然として図6を参照すると、アプライアンスクラスタ600は、クライアントデータプレーン602を介してネットワークに接続されてもよい。いくつかの実施形態では、クライアントデータプレーン602は、クライアントとアプライアンスクラスタ600との間でデータを搬送する、ネットワーク104等の通信ネットワークを備えてもよい。いくつかの実施形態では、クライアントデータプレーン602は、外部ネットワーク104およびアプライアンスクラスタ600の複数のアプライアンス200a−200nをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、1つのそのような実施形態では、ルータが、外部ネットワーク104に接続され、各アプライアンス200a−200nのネットワークインターフェースに接続されてもよい。いくつかの実施形態では、本ルータまたはスイッチは、インターフェースマネージャと称されてもよく、さらに、アプリケーションクラスタ600内のノードを横断してトラフィックを均等に分配するように構成されてもよい。したがって、多くの実施形態では、インターフェースマスタは、アプライアンスクラスタ600の外部にフローディストリビュータを備えてもよい。他の実施形態では、インターフェースマスタは、アプライアンス200a−200nのうちの1つを備えてもよい。例えば、第1のアプライアンス200aは、アプライアンスクラスタ600のための着信トラフィックを受信し、アプライアンス200b−200nのそれぞれを横断してトラフィックを分配する、インターフェースマスタとしての役割を果たしてもよい。いくつかの実施形態では、帰還トラフィックが、同様に、インターフェースマスタとしての役割を果たす第1のアプライアンス200aを介して、アプライアンス200b−200nのそれぞれからフローしてもよい。他の実施形態では、アプライアンス200b−200nのそれぞれからの帰還トラフィックが、ネットワーク104、104’に直接、または外部ルータ、スイッチ、または他のデバイスを介して、伝送されてもよい。いくつかの実施形態では、インターフェースマスタとしての役割を果たさないアプライアンスクラスタのアプライアンス200は、インターフェーススレーブ610A−610Nと称されてもよい。
インターフェースマスタは、種々の方法のうちのいずれかで負荷平衡またはトラフィックフロー分布を行ってもよい。例えば、いくつかの実施形態では、インターフェースマスタは、クラスタのアプライアンスまたはノードを伴って構成されるネクストホップと平等コストマルチパス(ECMP)ルーティングを行う、ルータを備えてもよい。インターフェースマスタは、オープン・ショーテスト・パス・ファースト(OSPF)を使用してもよい。いくつかの実施形態では、インターフェースマスタは、上記で議論されるように、IPアドレスまたは他のパケット情報タプルに基づくハッシュ等のトラフィック分布のためのステートレスハッシュベースの機構を使用してもよい。ハッシュキーおよび/またはソルトが、ノードを横断する均等な分布のために選択されてもよい。他の実施形態では、インターフェースマスタは、リンクアグリゲーション(LAG)プロトコル、または任意の他のタイプおよび形態のフロー分布、負荷平衡、およびルーティングを介して、フロー分布を行ってもよい。
いくつかの実施形態では、アプライアンスクラスタ600は、サーバデータプレーン604を介してネットワークに接続されてもよい。クライアントデータプレーン602と同様に、サーバデータプレーン604は、サーバとアプライアンスクラスタ600との間にデータを搬送する、ネットワーク104’等の通信ネットワークを備えてもよい。いくつかの実施形態では、サーバデータプレーン604は、外部ネットワーク104’およびアプライアンスクラスタ600の複数のアプライアンス200a−200nをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、1つのそのような実施形態では、ルータが、外部ネットワーク104’に接続され、各アプライアンス200a−200nのネットワークインターフェースに接続されてもよい。多くの実施形態では、各アプライアンス200a−200nは、第1のネットワークインターフェースがクライアントデータプレーン602に接続され、第2のネットワークインターフェースがサーバデータプレーン604に接続される、複数のネットワークインターフェースを備えてもよい。これは、付加的セキュリティを提供し、仲介デバイスとしてアプライアンスクラスタ600サーバを有することによって、クライアントおよびサーバネットワークの直接インターフェースを防止し得る。他の実施形態では、クライアントデータプレーン602およびサーバデータプレーン604は、マージされる、または組み合わせられてもよい。例えば、アプライアンスクラスタ600は、クライアント102およびサーバ106とのネットワーク上で非仲介ノードとして展開されてもよい。上記で議論されるように、多くの実施形態では、インターフェースマスタが、サーバおよびネットワーク104’からアプライアンスクラスタの各アプライアンスに通信をルーティングして分配するために、サーバデータプレーン604上に展開されてもよい。多くの実施形態では、クライアントデータプレーン602用のインターフェースマスタおよびサーバデータプレーン604用のインターフェースマスタは、同様に構成されてもよく、上記で議論されるようなECMPまたはLAGプロトコルを行う。
いくつかの実施形態では、アプライアンスクラスタ600内の各アプライアンス200a−200nは、内部通信ネットワークまたはバックプレーン606を介して接続されてもよい。バックプレーン606は、ノード間またはアプライアンス間制御および構成メッセージ用、およびトラフィックのノード間自動転送用の通信ネットワークを備えてもよい。例えば、第1のアプライアンス200aがネットワーク104を介してクライアントと通信し、第2のアプライアンス200bがネットワーク104’を介してサーバと通信する、一実施形態では、クライアントとサーバとの通信は、クライアントから第1のアプライアンスへ、バックプレーン606を介して第1のアプライアンスから第2のアプライアンスへ、および第2のアプライアンスからサーバへ、および逆も同様にフローしてもよい。他の実施形態では、バックプレーン606は、インターフェース一時停止またはリセットコマンド、フィルタリングまたは圧縮ポリシ等のポリシ更新、バッファステータス、スループット、またはエラーメッセージ等のステータスメッセージ、または任意の他のタイプおよび形態のノード間通信等の構成メッセージを搬送してもよい。いくつかの実施形態では、RSSキーまたはハッシュキーは、クラスタ内の全てのノードによって共有されてもよく、バックプレーン606を介して通信してもよい。例えば、第1のノードまたはマスタノードは、始動またはブート等のRSSキーを選択してもよく、他のノードによって使用するために本キーを分配してもよい。いくつかの実施形態では、バックプレーン606は、各アプライアンス200のネットワークインターフェースの間にネットワークを備えてもよく、ルータ、スイッチ、または他のネットワークデバイス(図示せず)を備えてもよい。したがって、いくつかの実施形態では、上記で議論されるように、クライアントデータプレーン602用のルータが、アプライアンスクラスタ600とネットワーク104との間に展開されてもよく、サーバデータプレーン604用のルータが、アプライアンスクラスタ600とネットワーク104’との間に展開されてもよく、バックプレーン606用のルータが、アプライアンスクラスタ600の一部として展開されてもよい。各ルータは、各アプライアンス200の異なるネットワークインターフェースに接続してもよい。他の実施形態では、1つまたはそれを上回るプレーン602−606が、組み合わせられてもよい、またはルータまたはスイッチが、複雑性を低減させる、または本システムから余分なデバイスを排除するために、アプライアンス200a−200nの異なるインターフェースに接続し、同時に複数のルーティング機能を果たすように、複数のLANまたはVLANに分割されてもよい。
いくつかの実施形態では、制御プレーン(図示せず)は、管理者またはユーザからアプライアンスクラスタ600への構成および制御トラフィックを通信してもよい。いくつかの実施形態では、制御プレーンは、第4の物理ネットワークであってもよい一方で、他の実施形態では、制御プレーンは、プレーン602−606のうちの1つを介したVPN、トンネル、または通信を備えてもよい。したがって、制御プレーンは、いくつかの実施形態では、仮想通信プレーンと見なされてもよい。他の実施形態では、管理者は、RS−232等のシリアル通信インターフェース、USB通信インターフェース、または任意の他のタイプおよび形態の通信等の別個のインターフェースを通して、構成および制御を提供してもよい。いくつかの実施形態では、アプライアンス200は、ボタンおよびディスプレイを伴うフロントパネル、ネットワーク104、104’またはバックプレーン606を介した構成用のウェブサーバ、または任意の他のタイプおよび形態のインターフェース等の管理用のインターフェースを備えてもよい。
いくつかの実施形態では、上記で議論されるように、アプライアンスクラスタ600は、内部フロー分布を含んでもよい。例えば、これは、ノードが外部デバイスに透過的に結合/そこから離脱することを可能にするように行われてもよい。外部フローディストリビュータがそのような変更に応じて繰り返し再構成される必要性をなくすために、ノードまたはアプライアンスが、ネットワークパケットをクラスタ600内の正しいノードにステアリングするためにインターフェースマスタまたはディストリビュータとして作用してもよい。例えば、いくつかの実施形態では、(故障、リセット、または類似する場合に応じて等)ノードがクラスタから離脱するとき、外部ECMPルータが、ノードの変更を識別してもよく、かつトラフィックを再分配するように全てのフローを再ハッシュしてもよい。これは、全ての接続をドロップしてリセットさせ得る。同一のドロップおよびリセットが、ノードが再結合するときに起こり得る。いくつかの実施形態では、信頼性のために、アプライアンスクラスタ600内の2つのアプライアンスまたはノードが、接続ミラーリングを介して外部ルータから通信を受信してもよい。
多くの実施形態では、アプライアンスクラスタ600のノードの間のフロー分布は、アプライアンスのコアの間のフロー分布について上記で議論される方法のうちのいずれかを使用してもよい。例えば、一実施形態では、マスタアプライアンス、マスタノード、またはインターフェースマスタは、着信トラフィック上のToeplitzハッシュ等のRSSハッシュを計算し、ハッシュの選好リストまたは分布テーブルを参考にしてもよい。多くの実施形態では、フローディストリビュータは、トラフィックを自動転送するときに、ハッシュを受信側アプライアンスに提供してもよい。これは、ノードがコアへのフロー分布のためのハッシュを再計算する必要性を排除し得る。多くのそのような実施形態では、アプライアンスの間の分布のためのハッシュを計算するために使用されるRSSキーは、グローバルRSSキーと称され得る、コアの間の分布のためのハッシュを計算するために使用されるものと同一のキーを備えてもよく、計算されたハッシュの再利用を可能にする。いくつかの実施形態では、ハッシュは、ポート番号、IPアドレスを含むインターネット層ヘッダ、または任意の他のパケットヘッダ情報を含む、トランスポート層ヘッダの入力タプルを用いて計算されてもよい。いくつかの実施形態では、パケット本体情報が、ハッシュに利用されてもよい。例えば、無損失TCPヘッダを介してカプセル化される損失性UDPトラフィック等の1つのプロトコルのトラフィックが、別のプロトコルのトラフィック内にカプセル化される、一実施形態では、フローディストリビュータは、カプセル化プロトコル(例えば、TCPヘッダ)ではなく、カプセル化されたプロトコル(例えば、UDPヘッダ)のヘッダに基づいて、ハッシュを計算してもよい。同様に、パケットがカプセル化され、暗号化または圧縮される、いくつかの実施形態では、フローディストリビュータは、暗号解読または解凍後のペイロードパケットのヘッダに基づいて、ハッシュを計算してもよい。なおも他の実施形態では、ノードは、構成または管理目的のため等に、内部IPアドレスを有してもよい。これらのIPアドレスへのトラフィックは、ハッシュされて分配される必要はなく、むしろ、宛先アドレスを所有するノードに自動転送されてもよい。例えば、アプライアンスは、1.2.3.4のIPアドレスにおいて構成または管理目的のために起動するウェブサーバまたは他のサーバを有してもよく、いくつかの実施形態では、その内部IPアドレスとして、本アドレスをフローディストリビュータに登録してもよい。他の実施形態では、フローディストリビュータは、内部IPアドレスをアプライアンスクラスタ600内の各ノードに割り当ててもよい。アプライアンスの内部IPアドレス(1.2.3.4)にダイレクトされる、管理者によって使用されるワークステーション等の外部クライアントまたはサーバから着信するトラフィックは、ハッシングを要求することなく、直接自動転送されてもよい。
G.仲介デバイスを介してセッションを維持するためのシステムおよび方法
本開示は、仲介デバイスを介してセッションを維持するためのシステムおよび方法を対象とする。特に、本ソリューションは、一次デバイスが障害を起こすと、スタンバイ仲介デバイスに維持される大量の動的状態を用いて、アプリケーションセッションを再開するためのシステムおよび方法に関する。仲介デバイスは、第1の仲介デバイス(または第1のデバイス)と、第2の仲介デバイス(または第2のデバイス)とを含む、アクティブ−スタンバイアプライアンスペア(または仲介アプライアンスペア)を指し得る。第1のデバイスは、第1のデバイスが、クライアントから受信されたパケットを解析する、クライアントにサーバから受信された応答パケットを提供する、または別様にクライアントにサーバによって実行されるアプリケーションへのアクセスを提供することによって、クライアントからの要求にアクティブにサービス提供する、アクティブモードにあることができる。ある場合には、最初に、アクティブモードにあるように構成される、仲介アプライアンスペアの第1のデバイスは、一次デバイスと称され得る。仲介アプライアンスペアは、最初に、スタンバイモードであるように構成される、第2のデバイスを含むことができる。第2のデバイスは、クライアントデバイスからの要求にアクティブにサービス提供しなくてもよい。第2のデバイスは、スタンバイモードにあって、クライアントから受信された要求にアクティブにサービス提供しない、またはサーバから受信された応答をクライアントに提供しないため、二次デバイスと称され得る。一次デバイスが、障害を起こす、無応答となる、スケジュールされた保守のためにダウンされる、または別様にクライアントデバイスから受信された要求を処理不能となる場合、サーバから受信された自動転送する、または別様にクライアントデバイスがアプリケーションと相互作用することができるように、クライアントデバイスに好適なアクセスをサーバによって実行されるアプリケーションへ提供し、二次デバイスは、新しい一次デバイスとなり、クライアント要求を処理することによって、クライアントデバイスにサービス提供することができる。
仲介デバイスは、ディープパケットインスペクションをアプリケーションネットワークトラフィックで行うように構成されることができる。アプリケーショントラフィックは、処理される、またはサーバに提供されるべき、クライアントから受信されたパケット、または処理される、またはクライアントに提供されるべき、サーバから受信されたパケットを指し得る。仲介デバイスは、ディープパケットインスペクションを行い、セッション状態の可視性を得る、または問題または課題のトラブルシューティングまたは識別を促進することができる。そのような展開では、一次デバイスが、障害を起こし、二次デバイスが、新しい一次デバイスになる場合、アプリケーションサーバプロトコル(例えば、独立コンピューティングアーキテクチャ「ICA」)を経由してアプリケーションまたはデスクトップセッションにアクセスする、クライアントデバイスは、セッションから接続解除され得る。クライアントデバイスは、次いで、セッションに再ログインし、仲介デバイスを介してサーバによって提供されるアプリケーションまたはデスクトップセッションにアクセスする必要があり得る。
本ソリューションのシステムおよび方法は、新しい一次仲介デバイス上で影響されたセッションをシームレスに再開することができる。影響されたセッションを新しい一次仲介デバイス上でシームレスに再開することによって、クライアントデバイスは、オリジナル一次仲介デバイスの障害によって影響されず、スタンバイ二次を新しい一次にさせ得る。
例えば、コンピューティングネットワークは、アクティブ−スタンバイアプライアンスペア内に展開される、ネットワーク仲介デバイス(例えば、Citrix Systems,Inc.(Ft. Lauderdale, Florida)によって製造されたNetScaler(R))を使用して、アプリケーションリソースの高可用性を提供することができる。アクティブ−スタンバイアプライアンスペアでは、第1の仲介デバイスは、クライアントデバイスにアクティブにサービス提供する一方、第2の仲介デバイスは、スタンバイモードに維持される。例えば、実施形態では、第1の仲介デバイスは、アクティブモードにあることができ、ICAセッション等のアプリケーションセッションを解析および処理することができる。第1の仲介デバイスは、スタンバイモードに維持される、第2の仲介デバイスとペアリングされることができる。第1の仲介デバイスは、動的であって、パケット毎に(例えば、各パケットが処理されるにつれて)変化し得る、有意な状態情報を維持することができる。第1の仲介デバイスが、障害を起こす場合、スタンバイデバイスは、新しい一次デバイスになることができる。二次デバイスは、新しい一次デバイスになり、クライアントデバイスによって提供されるユーザ体験に影響を及ぼすことなく、セッションを再開することができる。
仲介アプライアンスペア(例えば、第1の仲介デバイスおよび第2の仲介デバイス)は、クライアントデバイスとアプリケーションを提供するサーバとの間のセッションの可視性を提供するように構成されることができる。例えば、仲介アプライアンスペアは、トラブルシューティングまたは分析目的のために、プロトコル(例えば、ICAプロトコルまたは高精細体験「HDX」プロトコル)の可視性を提供することができる。プロトコルを解析するために、アプライアンスペアは、デバイス内の大量の状態情報を管理する。本状態情報は、例えば、ICAプロトコルの解析、共通ゲートウェイプロトコル(「CGP」)の解析、ICAフレームのの解読および再暗号化、またはICAフレームの解凍から生じる情報を含むことができる。その結果、仲介デバイスによって維持される状態情報は、非常に大きくなり得(例えば、5メガバイト、50メガバイト、100メガバイト、500メガバイト、または1ギガバイト)、本状態情報は、1つまたはそれを上回るパケットが仲介アプライアンスペアによって処理されることに伴って変化し得る(例えば、全てのパケットが処理されることに伴って変化し得る)。
一次仲介デバイスは、セッションあたりの状態を一次仲介デバイスのメモリ内に維持することができる。パケット毎に更新される状態のサイズのため、一次仲介デバイスが状態を外部デバイス(例えば、別の仲介デバイス)内に共有および更新することは、困難または不可能であり得る。一次仲介デバイスが、状態を外部デバイス内に共有および状態を更新することができない場合、一次仲介デバイスのメモリ内に維持される状態は、一次仲介デバイスがオフラインになると、喪失され得る。一次仲介デバイスがオフラインになるにつれて、一次仲介デバイスの接続(例えば、伝送制御プロトコル「TCP」接続)は、リセットされ得る。クライアントデバイスと一次仲介デバイスとの間の接続が、リセットされると、クライアントデバイスを実行するエージェントは、セッション再接続を開始し得る。クライアントデバイスのエージェントによって開始されるセッション再接続を介して確立される新しい接続(例えば、TCP接続)は、新しい一次仲介デバイス(例えば、以前にスタンバイモードであった第2の仲介デバイス)を介して、ランドオン(land on)されるかまたは確立されることができる。本新しい一次仲介デバイスが、セッションに関する状態情報を有していない場合、新しい一次仲介手段は、セッションを再開することが不可能となり得る。本ソリューションのシステムおよび方法は、第2の仲介デバイス(または二次デバイス)が、スタンバイモードにある間、一次仲介デバイスと連携して、状態を第2のデバイス上で維持することを可能にすることができる。したがって、一次仲介デバイスがオフラインになり、二次仲介デバイスが新しい一次役割を引き継ぐと、二次デバイスは、クライアントエージェントによって開始されるセッション再接続を用いてサポートおよび継続することができる。
いくつかの実施形態では、一次仲介デバイスおよび二次仲介デバイスは両方とも、準備完了状態にあることができる。準備完了状態は、デバイスが、準備完了状態であって、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを搬送する、パケットを解析することを示すことができる。アプリケーション起動の間、クライアントデバイス上で実行するエージェントは、プロトコル接続を介して、バックエンドサーバまたは一次仲介デバイスを介してホストに接続するための要求を開始することができる。一次仲介デバイスは、接続を開始し、新しいプロトコル接続に対応するアプリケーションを起動するための要求を検出することができ、一次仲介デバイスは、要求を解析および処理することができる。
一次仲介デバイスが、クライアントデバイス上で実行するエージェントからの要求または他のデータパケットを解析および処理する間、一次仲介デバイスは、二次仲介デバイスが準備完了状態にあることを検出することができる。二次仲介デバイスが準備完了状態にあることの検出に応答して、一次仲介デバイスは、セッションを更新状態にマーキングし、また、要求またはデータパケットに対応するアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを二次仲介デバイスに自動転送することができる。アプリケーションプロトコルデータおよびアプリケーションセッションメタデータは、集合的に、アプリケーションデータと称され得る。アプリケーションプロトコルデータは、高精細体験(「HDX」)プロトコルデータを指し得る。アプリケーションセッションデータは、HDXセッションメタデータを指し得る。二次仲介手段は、アプリケーションデータを受信し、アプリケーションデータまたはそのアプリケーションプロトコルデータまたはアプリケーションセッションメタデータを解析することができる。
したがって、アプリケーションデータを一次デバイスから二次デバイスに自動転送し、二次デバイスに、一次仲介デバイスとして同一アプリケーションプロトコルデータを解析するように命令することによって、本ソリューションのシステムおよび方法は、同一セッション状態を一次仲介デバイスおよび二次仲介デバイスの両方に維持することができる。同一セッション状態を一次および二次仲介デバイスの両方に維持することによって、二次仲介デバイスは、一次仲介デバイスが、障害を起こす、または別様に無応答になると、シームレスに引き継ぐことができる。例えば、一次仲介デバイスが、障害を起こすと、全てのTCP接続は、リセットされ得る。クライアントデバイス上で実行するエージェントは、セッション再接続プロセスを介して、新しいCGP/ICA接続を確立するための要求を送信する。新しい接続は、新しい一次仲介デバイス(例えば、スタンバイモードにある以前の二次仲介デバイス)においてランドオンすることができる。新しい一次仲介デバイスは、セッション再接続を点検、処理、または分析し、本セッション再接続と関連付けられたセッション状態情報を識別し、読み出すことができる。本セッション状態情報は、新しい一次デバイスが二次仲介デバイスであるとき、前の(例えば、オリジナルまたは初期)一次仲介デバイスからパケット中継を介して、新しい一次デバイスによって作成および維持され得る。
本プロセスのある時点において、オリジナル一次仲介デバイスが、二次仲介デバイス(例えば、スタンバイデバイス)が準備完了状態にない(例えば、二次仲介手段の障害、二次仲介デバイスが無応答である、またはスケジュールまたは未スケジュール保守に起因してオフラインであることに起因して)ことを判定または検出する場合、一次仲介デバイスは、セッションをダウン状態または非準備完了状態にマーキングすることができる。一次仲介デバイスが、セッションをダウン状態にマーキングすると、一次仲介デバイスは、二次仲介デバイスへのアプリケーションプロトコルデータまたはアプリケーションセッションメタデータの自動転送を停止、ブロック、防止、または中止することができる。したがって、セッションがダウン状態にある場合、一次仲介デバイスは、アプリケーションデータを二次仲介デバイスに自動転送しない。
ある後の時点で、一次仲介デバイスが、二次仲介デバイスが、準備完了状態であって、アプリケーションプロトコルデータを解析し、セッション状態を二次仲介デバイスのメモリ内に維持することを示す、二次仲介デバイスが、オンラインに戻った、または準備完了状態に戻ったことを検出する場合、一次仲介デバイスは、セッションをセッション更新状態にマーキングすることができる。ダウン状態から更新状態へのセッション状態の遷移に応答して、一次仲介デバイスは、二次仲介デバイスを最新状態にするように、アプリケーションプロトコルセッション状態を二次仲介デバイスにプッシュ配信、提供、転送、または別様に自動転送することができる。例えば、一次二次デバイスは、完全なアプリケーションプロトコルセッション状態を二次仲介デバイスにプッシュ配信し、二次仲介デバイスを単一通信において最新状態にすることができる。その後、いったん二次仲介デバイスが、一次仲介デバイス内のセッション状態に合致するセッション状態を二次仲介デバイスのメモリ内に維持すると、一次仲介デバイスは、アプリケーションデータを二次仲介デバイスに自動転送または中継し続け、二次仲介デバイスによって維持されるセッション状態と一次仲介デバイスのセッション状態を同期させることができる。
ここで図7Aを参照すると、セッションを維持するためのシステムの実施形態のブロック図が、示される。システム700は、第1の仲介デバイス200aと、第2の仲介デバイス200bとを含む、アクティブ−スタンバイアプライアンスペア740を含む。ある場合には、アクティブ−スタンバイアプライアンスペア740は、アプライアンスペア740、アプライアンスペア740、仲介アプライアンスペア740、またはデバイス740と称され得る。アプライアンスペア740は、図6に描写されるアプリケーションクラスタ600の1つまたはそれを上回る機能性またはコンポーネントを含むことができる。アクティブ−スタンバイペア740の第1のデバイス200aは、第1の仲介デバイス200a、一次仲介デバイス200a、一次デバイス200a、初期一次デバイス200a、またはオリジナル一次デバイス200aと称され得る。アクティブ−スタンバイペア740の第2のデバイス200bは、第2の仲介デバイス200b、二次仲介デバイス200b、第2のデバイス200b、初期スタンバイデバイス200b、および新しい一次デバイス200bと称され得る。仲介デバイス200aおよび200bまたはアプライアンスペア740は、複数のサーバ106a−nおよび複数のクライアント102a−nを仲介する。アプライアンス200aおよび200bは、アプリケーションレベルセキュリティ、最適化、またはトラフィック管理を提供することによって、ネットワーク104またはネットワーク104’を経由して、サーバ106a−nを介して提供される、ウェブサイトコンテンツ、サービス、リソース、またはアプリケーションの配信を管理または最適化することができる。クライアント102は、クライアント102の1つまたはそれを上回るコンポーネントまたは機能性を含んでもよい。サーバ106は、サーバ106の1つまたはそれを上回るコンポーネントまたは機能性を含んでもよい。仲介デバイス200aおよび200bは、図1−6に関して上記に説明されるアプライアンス200と同一またはそれに類似する、またはその1つまたはそれを上回る機能性またはコンポーネントを含んでもよい。アプライアンスペア740は、図1−6に関して上記に説明されるアプライアンスクラスタ600と同一またはそれに類似する、またはその1つまたはそれを上回る機能性またはコンポーネントを含んでもよい。いくつかの実施形態では、クライアント102a−nは、図1−6に関して上記に説明されるクライアント102a−nと同一またはそれに類似し、サーバ106a−nは、サーバ106a−nと同一またはそれに類似する、またはその1つまたはそれを上回る機能性またはコンポーネントを含む。いくつかの実施形態では、システム700のクライアント102およびサーバ106はさらに、クライアントを認証するための機能を行う、またはそのための特徴を提供するように構成される。
依然として、図7Aを参照すると、さらなる詳細では、アプライアンスペア740は、インターフェース705を含む。インターフェース705は、アプリケーションプログラミングインターフェース、グラフィカルユーザインターフェース、通信ポートを含む、またはTCP/IP等の1つまたはそれを上回る通信またはネットワーキングプロトコルを用いて構成されることができる。インターフェース705は、ネットワーク104またはネットワーク104’を介して、データパケットを受信またはインターセプトする、データパケットを受信する、ネットワークトラフィックを監視する、または別様に情報を得る、または伝送/伝達するように構成されることができる。
いくつかの実施形態では、インターフェース705は、要求を複数のクライアント102a−nのクライアント102aから受信する。インターフェース705は、要求をネットワーキングプロトコル、通信プロトコル、アプリケーション層プロトコル、トランスポートプロトコル、または暗号化プロトコルを介して受信してもよい。プロトコルは、例えば、HTTP、TCP、ICA、またはHDXを含むことができる。プロトコルは、ステートフルプロトコルまたはステートレスプロトコルであることができる。要求は、クライアントまたはクライアント102aがアクセスを要求するリソースについての情報を含んでもよい。いくつかの実施形態では、サーバ106a−nによって提供されるリソースは、クライアントまたはクライアントデバイスのユーザが、アクセスが付与される前に、認証、承認、または認可を要求し得る、セキュアリソースであってもよい。
いくつかの実施形態では、アプライアンスペア740は、ネットワーク通信を1つまたはそれを上回るクライアント102a−nから受信するように設計および構築される、インターフェース705を含むことができる。インターフェース705は、図1−6に関して上記に説明されるインターフェース608または610a−nと同一またはそれに類似する、またはその1つまたはそれを上回る機能性またはコンポーネントを含んでもよい。インターフェース705は、クライアントエージェント120aを介して等、データパケットをクライアント102aから受信することができる。インターフェース705は、クライアント102aから受信されたデータパケットを第1のデバイス200aに自動転送または中継することができる。例えば、インターフェース705は、クライアントエージェント120aから受信されたデータパケットを第1のデバイス200aに自動的に自動転送するように構成されることができる。インターフェース705はさらに、データパケットを一次デバイス200aに自動転送または中継するように構成されることができる。一次デバイス200aは、現在アクティブモードにある、アクティブ−スタンバイ仲介アプライアンスペア740の仲介デバイスを指し得る。したがって、インターフェース705は、仲介デバイス200aおよび200bのいずれが、クライアントエージェント120からの要求にアクティブにサービス提供し、要求を一次デバイスに自動転送するように構成される、現在一次デバイスであるかを判定することができる。
仲介デバイス200a−bのうちのいずれが現在一次デバイスであるかを判定するために、インターフェース705は、メモリ内に、仲介デバイス200a−bの役割についての情報を維持することができる。例えば、インターフェース705は、仲介デバイス200aおよび200bのうちの1つまたはそれを上回るものにポーリングし、アクティブである、すなわち、一次デバイスであるデバイスに関するインジケーションを識別、判定、または受信することができる。インターフェース705は、そのインジケーションをインターフェース705のメモリ内の役割データ構造内に記憶することができる。インターフェース705は、1秒、5秒、10秒、60秒、5分、または10分毎等の時間間隔に基づいて、仲介デバイス200a−bをポーリングすることができる。別の実施例では、インターフェース705は、イベント、条件、またはトリガに応答して、仲介デバイス200a−bをポーリングすることができる。例えば、インターフェース705は、パケットをクライアントエージェント120から仲介デバイス200aに自動転送することを試み得るが、仲介デバイス200aがオフラインまたは別様に無応答であることを発見し得る。インターフェース705は、インターフェース705のメモリ内の役割データ構造を更新情報で更新することができる。仲介デバイス200aがオフラインまたは無応答であることの判定に応答して、インターフェース705は、受信されたデータパケットを、新しい一次デバイス200bとして作用し得る、第2の仲介デバイス200bに自動転送することができる。
第1の仲介デバイス200aおよび第2の仲介デバイス200bは、アプライアンス200の1つまたはそれを上回るコンポーネントまたは機能性を含むことができる。第1の仲介デバイス200aは、モニタ710aと、パケットエンジン715aと、データリポジトリ720aとを含むことができる。データリポジトリ720aは、セッションデータ725a、モード情報730a、およびパラメータ735aを含む、または記憶することができる。第2の仲介デバイス200bは、モニタ710bと、パケットエンジン715bと、データリポジトリ720bとを含むことができる。データリポジトリ720bは、セッションデータ725b、モード情報730b、およびパラメータ735bを含む、または記憶することができる。モニタ710aは、セッション状態を検出または判定する、デバイス状態を判定する、デバイスモードを判定する、または状態またはモードを更新するように設計、構築、および構成される、デジタル回路、ハードウェア、1つまたはそれを上回るプロセッサ、メモリ、またはソフトウェアを含むことができる。パケットエンジン715a−bは、データパケットを解析または処理するように設計、構築、および構成される、デジタル回路、ハードウェア、1つまたはそれを上回るプロセッサ、メモリ、またはソフトウェアを含むことができる。パケットエンジン715a−bは、図1−6に関して上記に説明されるパケットエンジン240と同一またはそれに類似する、またはその1つまたはそれを上回る機能性またはコンポーネントを含んでもよい。
各デバイス200a−bは、デバイスモードまたはモードと関連付けられる、またはそれに対応することができる。デバイス200a−bのモードは、アクティブまたはスタンバイのうちの1つであることができる。モードは、経時的に、またはセッションの間、変化し得る。アクティブモードは、デバイス200aが、クライアントまたはそのクライアントエージェント120から受信された要求またはデータパケットを解析および処理することによって、クライアント102にアクティブにサービス提供する、モードを指し得る。アクティブモードでは、デバイス200aは、データパケットをクライアント102から受信し、パケットを解析および処理し、処理されたパケットに対応するデータを対応するサーバ106a−nに自動転送する。アクティブモードでは、デバイスは、セッション状態をデバイスのメモリ内に維持することができる。その後、アクティブモードにおけるデバイス200aは、応答をサーバ106から受信し、応答を解析および処理し、応答に対応するデータを同一クライアント102に自動転送することができる。
スタンバイモードでは、デバイス200b等のデバイスは、クライアントから受信されたデータパケットに対応するデータを受信し、データを解析および処理し、セッション状態をデバイス200bのメモリ内に維持することができる。スタンバイモードでは、デバイス200bは、デバイス200a等のアクティブモードにおけるデバイスのメモリ内に維持されるセッション状態と同一セッション状態を維持することができる。しかしながら、スタンバイモードにある間、デバイス200bは、クライアント要求に応答する、または要求をサーバ106に送信することによって、クライアント要求にアクティブにサービス提供しなくてもよい。
アクティブモードにおける第1のデバイス200aは、スタンバイモードにおける第2のデバイス200bと通信可能に結合されるか、または、インターフェースをとられることができる。第1および第2のデバイス200a−bは、モード情報を対応するモードデータ構造730a−b内に記憶することができる。例えば、第1のデバイス200aは、モードデータ構造730aを含む、データリポジトリ720aまたはメモリ場所720aを含むことができる。モードデータ構造730aは、モードに関するデータフィールドまたはパラメータフィールドを含むことができる。パラメータフィールドは、アクティブまたはスタンバイ等のモードに関する値を記憶することができる。パラメータフィールドは、デバイスがアクティブモードにあるかまたはスタンバイモードにあるかを示し得る、他の値、用語、文字、シンボル、ストリング、またはバイナリインジケータを含むことができる。例えば、用語「機能的」、「動作時」、または「サービス」は、アクティブモードを示すことができる。例えば、用語「受動的」、「待機中」、または「バックアップ」は、デバイスがスタンバイモードであることを示すことができる。
モニタ710aは、デバイス200a−bが準備完了状態にあるかまたは非準備完了(すなわち、準備ができていない)状態にあるかを判定するように構成されることができる。準備完了状態は、デバイスのメモリ内に、クライアントデバイスとのセッションの状態を維持するために、デバイスが準備完了状態であって、データパケットに対応するデータを解析することを示す、デバイスの状態を指し得る。準備完了状態は、アクティブモードと異なり得る。例えば、スタンバイモードにおけるデバイスは、準備完了状態にあることができる。デバイスが、スタンバイモードおよび準備完了状態にあるとき、デバイスは、クライアント要求にアクティブにサービス提供しなくてもよいが、依然として、セッション状態をデバイスのメモリ内に維持し得る。例えば、スタンバイモードおよび準備完了状態におけるデバイスは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを受信し、デバイスのメモリ内に、アクティブモードにおけるデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することができる。
デバイスが準備完了状態にあるかどうかを判定するために、モニタ710は、デバイスをポーリングすることができる。例えば、第1のデバイス200aのモニタ710aは、ステータス要求を用いて、第2のデバイス200bをポーリングすることができる。要求の受信に応答して、第2のデバイス200bは、要求にステータス更新で応答することができる。例えば、第2のデバイス200bのモニタ710bは、第2のデバイスが、データパケットを解析および処理し、セッション状態を維持するように動作する、またはそれが可能であるかどうかを判定することができる。モニタ710bは、システムコンポーネントをチェックし、それらがセッション状態を維持するように動作する、またはそのように適切に構成されているかどうかを確認する、診断ルーチンまたは試験ルーチンを開始または実行することができる。モニタ710bはさらに、第1のデバイス200aがオフラインになる場合、第2のデバイス200bがクライアントとセッションを再開し得るかどうかを判定することができる。例えば、モニタ710bは、第2のデバイス200bの1つまたはそれを上回るハードウェアまたはソフトウェアコンポーネントが、機能し、所定の基準、閾値、またはステータスチェックを満たすことを判定することができる。したがって、モニタ710bは、第2のデバイス200bが準備完了状態にあることを判定し、準備完了状態のインジケーションを第1のデバイス200aに伝送することができる。第1のデバイス200aは(例えば、モニタ710aを介して)、インジケーションを受信し、第2のデバイス200bが準備完了状態にあることを検出することができる。
いくつかの実施形態では、第1のデバイス200aは、応答時間に基づくハンドシェイクルーチンを行う、または状態情報を記憶する構成ファイルを使用することによって、第2のデバイス200bが準備完了状態にあることを検出することができる。例えば、アプライアンスペア740は、デバイスが、準備完了状態または非準備完了、すなわち、準備ができていない状態にあるかどうかを示す、値を記憶するフィールドを含む、データリポジトリ内の構成ファイルを含む、それにアクセスする、それを読み出す、またはそれを維持することができる。準備完了状態または非準備完了状態のインジケーションは、デバイスが準備完了状態にあるかまたは非準備完了状態にあるかを示し得る、他の値、用語、文字、シンボル、ストリング、またはバイナリインジケータを含むことができる。
第2のデバイス200bが準備完了状態にあるかまたは非準備完了状態にあるかの判定に応じて、モニタ710aは、クライアント102とのセッションのセッション状態をマーキングすることができる。モニタ710は、セッション状態を、例えば、更新状態またはダウン状態を含む、1つまたはそれを上回るインジケータを用いてマーキングすることができる。更新状態は、第1のデバイスがクライアントから受信されたデータパケットに対応するデータを第2のデバイス200bに自動転送または中継する、状態を指し得る。データパケットの中継は、受信されたデータパケットの情報の一部または全部の再伝送を指し得る。例えば、第1のデバイス200aは、クライアントデバイスから受信されたアプリケーションプロトコルデータを第2のデバイスに伝送することによって、アプリケーションプロトコルデータを第2のデバイス200bに中継することができる。第1のデバイス200aは、アプリケーションプロトコルデータをキャッシュし、アプリケーションプロトコルデータのキャッシュされたバージョンを送信する、または別様にアプリケーションデータを第2のデバイス200bに自動転送または中継することができる。ダウン状態は、第1のデバイス200aがクライアントから受信されたデータパケットに対応するデータを第2のデバイス200bに自動転送または中継しない、状態を指し得る。
第1のデバイス200a(アクティブモードにおける)のモニタ710aは、第2のデバイス200b(スタンバイモードにおける)が準備完了状態にあるかまたは非準備完了状態にあるかの判定または検出に応答して、セッション状態を更新状態またはダウン状態にマーキングすることができる。第2のデバイス200bが、準備完了状態にある場合、モニタ710aは、セッション状態を更新状態にマーキングする。第2のデバイス200bが、非準備完了、すなわち、準備ができていない状態にある場合、モニタ710aは、セッション状態をダウン状態にマーキングする。
モニタ710aは、データリポジトリ720a内に記憶されるパラメータの値を設定することによって、セッション状態を更新状態またはダウン状態にマーキングすることができる。例えば、セッションデータ構造725aは、セッションが更新状態にあるかまたはダウン状態にあるかを示す値を記憶する、パラメータフィールドを含むことができる。ある場合には、データリポジトリ720は、セッションが更新状態にあるかまたはダウン状態にあるかを示す値を記憶する、パラメータデータ構造735aを含むことができる。本セッション状態は、クライアント102との単一セッションに適用される、またはそれと関連付けられることができる。ある場合には、本セッション状態は、第1のデバイス200aによってアクティブに管理またはサービス提供される1つまたはそれを上回るセッションに適用される、またはそれと関連付けられることができる。例えば、モニタ710aは、第2のデバイス200bがスタンバイモードおよび準備完了状態にあることを判定することができる。モニタ710aは、次いで、第2のデバイス200bが準備完了状態にあることに応答して、セッション状態を更新状態に設定することを判定することができる。モニタ710aは、セッション状態をパラメータデータ構造735a内の値として記憶することができる。モニタ710aは、パラメータデータ構造735a内に記憶される値を第1のデバイス200aによってサービス提供される1つまたはそれを上回るセッションに使用または適用することができる。例えば、値が、セッション状態が更新状態にあることを示す場合、第1のデバイス200aは、1つまたはそれを上回るセッションに関する1つまたはそれを上回るクライアントデバイスから受信されたパケットに対応するデータを第2のデバイス200bに自動転送または中継し、第2のデバイス200aに、セッションの状態を第2のデバイス200bのメモリ内に維持させる、それを有効にさせる、またはそれを可能にさせることができる。
第1のデバイス200aは、クライアント102a(例えば、クライアントエージェント120aを介して)から、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含む、セッションのパケットを受信することができる。アプリケーションプロトコルデータは、状態ベースのプロトコルまたはステートフルプロトコルのデータを指し得る。ステートフルプロトコルは、プロトコルが、リソースにアクセスするように機能する、またはリソースへのアクセスを提供するために、内部状態がサーバまたは仲介デバイス上に維持される、プロトコルを指し得る。セッションの状態は、デバイス、アプリケーション、またはセッションがアクセスを有する、パケットの受信および処理の所与の瞬間において、またはそれに続いて記憶された情報を指し得る。セッションの状態情報または状態またはアプリケーションの状態は、データリポジトリ720a−b内のセッションデータ構造725a−bとしてメモリ内に記憶されることができる。例えば、セッションの状態は、アプリケーションの状態、デスクトップセッションの状態、または通信チャネルの状態を指し得る。例えば、所与の時間におけるアプリケーションの出力は、アプリケーションおよびアプリケーションの状態への現在の入力によって判定されることができる。
セッションの状態は、構文解析、ファイアウォール、通信プロトコル、および暗号化プログラム等のデータのストリームに順次(または連続して)作用する、コンピュータプログラムを指し得る。シリアルプログラムは、一度に1回、連続して、着信データ文字またはパケットに作用することができる。これらのプログラムのうちのいくつかでは、受信された前のデータ文字またはパケットについての情報は、変数としてメモリ内(例えば、セッションデータ構造725a−b内)に記憶され、パケットエンジン715a−bによって、現在の文字またはパケットの処理に影響を及ぼすために使用される。したがって、ステートフルプロトコルでは、前の処理サイクルから持ち越されるデータは、状態を示すことができる、または状態であることができる。
ステートフルプロトコルを利用するとき、第1の仲介デバイスまたは第2の仲介デバイス(または両方)は、記憶装置またはメモリ(例えば、データリポジトリ720a−b内のセッションデータ725a−b)を配分し、進行中の変換をハンドリングする、またはクライアントが中間トランザクションにおいて障害を起こす場合、現在の状態を消去することができる。例えば、FTPサーバは、ステートフルプロトコルを利用して、クライアントとの双方向セッションを実施することができる。セッションの間、クライアントは、認証され、クライアントの状態の一部としてサーバまたは仲介デバイス上に記憶され得る、種々の変数(例えば、作業ディレクトリまたは転送モード)を設定するための手段が提供される。
ある場合には、仲介デバイス200a−bは、異なるプロトコル層間におけるステートフルおよびステートレスプロトコル間の相互作用を管理、確立、または処理することができる。例えば、HTTPは、TCPの上に層化されるステートレスプロトコル、IPの上に層化されるステートフルプロトコル、ボーダゲートウェイプロトコル(「BGP」)を採用する、ネットワーク上でルーティングされる、別のステートレスプロトコル、ネットワークを経由してIPパケットをダイレクトするための別のステートフルプロトコルの実施例である。
いくつかの実施形態では、第1のデバイス200aは、ステートフルプロトコルを経由して、パケットをクライアント102から受信することができる。アプリケーションプロトコルは、TCP/IPに基づく、ステートフルプロトコルであることができる。ある場合には、アプリケーションプロトコルは、アプリケーションまたはリソースへのアクセスを効率的に提供するための機能性を提供する、1つまたはそれを上回るプロトコルまたは技法に基づくことができる。例えば、アプリケーションプロトコルは、インテリジェントリダイレクション、適応圧縮、またはデータ重複排除等の機能性または技法を含むことができる。インテリジェントリダイレクションは、例えば、クライアントデバイスのスクリーンアクティビティの検査、アプリケーションコマンドの検査、アクセスされているサーバ106の検査、ネットワーク104またはネットワーク104’の検査能力、またはアプリケーションまたはデスクトップアクティビティのレンダリングの方法または場所を判定するためのサーバ106能力の検査を含むことができる。例えば、クライアントリダイレクションは、タスクをサーバからオフロードし、それらをクライアント上に設置することができる。デバイスおよび周辺機器ダイレクションを用いることで、ウェブキャメラ、プリンタ、およびスキャナは、ローカルに終端され、クライアントデバイスがネイティブUSB速度においてこれらのデバイスと相互作用することを可能にすることができる。
いくつかの実施形態では、アプリケーションプロトコルは、適応圧縮を有効にする、または提供するように構成されることができる。適応圧縮は、異なるネットワーク条件の間に使用されるコーデックを設定または構成することができる。適応圧縮は、CPUまたはGPUリソースの利用を判定または最適化することができる。いくつかの実施形態では、アプリケーションプロトコルは、ネットワークトラフィックの重複排除を提供するように構成されることができる。アプリケーションプロトコルは、マルチキャストおよびキャッシュ技法を通して、ネットワークトラフィックの重複排除を促進することができる。例えば、マルチメディアストリームのマルチキャストは、1対多の通信を介したソースサーバ106から複数のクライアント102への単一伝送の配信を含むことができる。アプリケーションプロトコルは、キャッシュを使用して、例えば、ビットマップグラフィック、ファイル、プリントジョブ、およびストリーミングされたメディアを含む、一般にアクセスされるデータを重複排除することができる。いくつかの実施形態では、アプリケーションプロトコルは、高ネットワーク待ち時間およびパケット損失を感知し、それに応答することによって、TCPベースのトラフィックのフローを加速するように構成される、ステートフルプロトコルである、またはそれを含むことができる。
いくつかの実施形態では、第1のデバイス200aは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを備える、セッションのパケットを受信する。アプリケーションプロトコルデータは、セッションの状態を示す、変数または他のデータ等の情報を指すことができ、セッションの状態を維持または更新するために使用されることができる。アプリケーションプロトコルデータは、パケットに関するシーケンス識別子を含むことができる。アプリケーションプロトコルデータは、クライアントデバイス102から受信されたパケットによって搬送されるデータを含むことができる。ある場合には、アプリケーションプロトコルデータは、セッションの状態を更新、変更、または改変する、データを含むことができる。例えば、アプリケーションプロトコルデータは、FTPプロトコルのために確立されるディレクトリ、パケット損失または待ち時間等の現在のネットワークセッションに関するネットワーク性能メトリック、クライアントデバイスと結合される周辺デバイスの状態、リソースにアクセスする、またはそれと相互作用するための要求、多因子認証プロセスにおける認証情報または状態情報等を含むことができる。アプリケーションセッションメタデータは、例えば、セッションを識別し得る情報、セッションのプロファイル、使用されているプロトコルのタイプ、リソースのタイプ、クライアントデバイス102の識別子、クライアントデバイス102のIPアドレス、ソースまたは宛先アドレス、サーバIPアドレス、アクセスされているリソースの識別子、場所、クライアントデバイスのタイプ(例えば、モバイルデバイス、スマートフォン、ラップトップ、デスクトップ、またはタブレット)、ネットワークのタイプ(例えば、携帯電話ネットワーク、3Gネットワーク、4Gネットワーク、LTEネットワーク、WIFIネットワーク、またはEthernet(登録商標))、セッションの開始に対応するタイムスタンプ、またはアプリケーションセッションについての他の情報を含むことができる。アプリケーションセッションメタデータは、アプリケーションプロトコルデータを含む、またはそれに基づくことができる。ある場合には、アプリケーションデータは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを指し得る。
いくつかの実施形態では、第1のデバイス200a(例えば、パケットエンジン715aを介して)は、パケット毎に、アプリケーションプロトコルデータを解析および処理する。第1のデバイス200aは、パケット毎に、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを解析および処理することができる。第1のデバイス200aは、アプリケーションプロトコルまたはアプリケーションセッションデータを解析および処理し、セッションの状態を第1のデバイス200aのメモリ内に維持し、クライアント102にアクティブにサービス提供することができる。第1のデバイス200aが、パケットを受信すると、第1のデバイスはさらに、セッション状態が更新状態またはダウン状態であるかどうかを判定することができる。例えば、第1のデバイス200a(または第2のデバイス200b)は、セッション状態を更新状態またはダウン状態に事前にマーキングしている場合がある。第1のデバイス200aは、次いで、第2のデバイス200bが準備完了状態にあることを判定することができる。セッション状態が更新状態にあって、第2のデバイス200bが準備完了状態にあることの判定に応答して、第1のデバイス200aは、アプリケーションプロトコルデータまたはアプリケーションセッションメタデータ(または両方)を第2のデバイス200bに自動転送または中継することができる。第2のデバイス200bは、アプリケーションプロトコルデータまたはアプリケーションセッションデータまたは両方の受信に応じて、第2のデバイス上で、第1のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することができる。したがって、第1のデバイス200aは、第1のデバイス200aが、セッションの間に、クライアント102にアクティブにサービス提供する間、第2のデバイスのメモリ200b内のセッションの状態が第1のデバイス200aのメモリ内のセッションの状態に合致するように、第2のデバイス200bが、セッションの状態を第2のデバイスのメモリ200b内に維持することを有効にする、またはそのようにさせることができる。
クライアントおよび第1のデバイス200aを介して確立されるセッションの間、第1のデバイス200aが、故障する、オーバーロードとなる、サービスの妨害攻撃またはウイルスを被る、障害を起こす、保守または修理を受ける、電力を喪失する、または別様にソフトウェアまたはハードウェア障害に起因してオフラインまたは無応答になり得る。第1のデバイス200aがオフラインになると、第1のデバイスによって、またはそれと確立された接続は、喪失またはリセットされ得る。例えば、第1のデバイス200aによってクライアント102と確立されたTCP接続は、リセットされ得る。第1のデバイス200aがオフラインになる場合、第2のデバイス200bは、第1のデバイス200aがオフラインになることに先立って、第1のデバイス200aによって維持されるセッションの現在の状態を用いてセッションを自動的に再開することができる。例えば、第1のデバイス200aは、最初に、一次デバイス200aとして構成されてもよく、第2のデバイス200bは、二次デバイス200bとして構成されることができる。第1のデバイス200aがオフラインになると、第2のデバイス200bは、新しい一次デバイスとなり、クライアント102と新しい接続を確立し、セッションを再開することができる。
いくつかの実施形態では、第2のデバイス200bのモニタ710bは、第1のデバイス200aをポーリングし、第1のデバイス200aのステータスを判定することができる。モニタ710bは、ある時間間隔に基づいて、またはイベント、条件、またはトリガに応答して、第1のデバイス200aをポーリングすることができる。いくつかの実施形態では、モニタ710bは、第1のデバイス200aがオフラインになると、モニタ710bが第1のデバイスとの接続が喪失またはリセットされることを検出し得るように、第1のデバイス200aとのアクティブ接続を維持することができる。したがって、いくつかの実施形態では、アプライアンスペア740は、アクティブ−スタンバイペアが、一次デバイスが、パケットを受信し、クライアントにアクティブにサービス提供し、一次デバイスが、パケットを二次デバイスに中継し、第2のデバイス上でセッションの状態を維持し、二次デバイスが古い一次デバイスがオフラインであることを判定することに応答して、二次デバイスが、自動的に、新しい一次デバイスになるように構成され得るため、インターフェース705を使用せずに、仲介デバイス200a−bのアクティブ−スタンバイペアを使用して、セッションを再開することができる。
いくつかの実施形態では、インターフェース705は、第1のデバイス200aおよび第2のデバイス200bとのアクティブ接続を維持し、接続の喪失に基づいて、デバイスがオフラインになるときを判定することができる。インターフェース705は、第1のデバイス200aがオフラインであることの検出、判定、または識別に応答して、信号を第2のデバイス200bに伝送し、第1のデバイス200aがオフラインであることを示すことができる。いくつかの実施形態では、インターフェース705は、信号を第2のデバイス200bに伝送し、第2のデバイス200bに、新しい一次デバイス200bになるように命令する。信号はさらに、第2のデバイス200bに、新しい一次デバイス200bである、第2のデバイス200bが、クライアント102にアクティブにサービス提供する、アクティブモードに入るように命令することができる。
例えば、いくつかの実施形態では、第1のデバイス200aがオフラインになり、第1のデバイス200aとクライアント102との間の接続が喪失されるとき、クライアントエージェント120aは、セッション再接続を開始することができる。インターフェース705は、クライアントエージェント120aによって開始されるセッション再接続要求を受信し、第2のデバイス200bが新しい一次デバイス200bであるため、セッション再接続を第2のデバイス200bに自動転送することができる。第2のデバイス200bは、第2のデバイス200bのセッションデータ構造725bとしてメモリ内に維持される状態情報を使用して、クライアント102とのセッションをシームレスに再開することができる。第2のデバイス200bは、第1のデバイス200aがオフラインになる直前まで、現在の状態情報を維持するため、第2のデバイス200bは、クライアントデバイス102のユーザがセッションに再びログインする必要なく、クライアント102とのセッションを再開することができる。したがって、クライアント102のユーザは、クライアントエージェント120aがセッション再接続を自動的に開始することができ、第2のデバイス200bが第1のデバイス200a上に以前に維持されていた状態と同一状態でセッションをシームレスに再開することができるため、第1のデバイス200aがオフラインになったことに気付かない場合がある。セッションをシームレスに再開することは、第1のデバイスがオフラインになることに先立った第1のデバイス200a上のセッションの状態に合致する、同一状態を伴ってセッションを再開することを指し得る。いくつかの実施形態では、セッションをシームレスに再開することは、ユーザにセッションに再ログインすることを要求せずに、セッションを再開することを指し得る。いくつかの実施形態では、セッションをシームレスに再開することは、セッション再接続要求を受信せずに、セッションを再開することを指し得る。
いくつかの実施形態では、セッションをシームレスに再開することは、第2のデバイス200bが、第1のデバイス200aによって受信された最後のパケットを処理するが、第1のデバイスパケットの処理の間に障害を起こすことに起因して、第1のデバイス200aによって(例えば、パケットエンジン715aによって)完全に解析および処理されていないことを指し得る。アプリケーションプロトコルデータを完全に解析および処理することは、アプリケーションプロトコルデータに基づいて、状態情報を更新することと、アプリケーションプロトコルデータを、要求されるリソースまたはアプリケーションを提供する、対応するサーバ106に自動転送することとを含むことができる。ある場合には、第1のデバイス200aは、パケットを解析または処理することに先立って、パケットを第2のデバイス200bに中継することができる。ある場合には、第1のデバイス200aは(例えば、モニタ710aを介して)、パケットエンジン715aがパケットを並行して解析および処理する間、パケットを第2のデバイス200bに中継することができる。したがって、パケットエンジン715aは、モニタ710aがパケットを第2のデバイス200bに中継し、第2のデバイス200bに、第2のデバイス200bのメモリ内のセッション状態を維持させ、クライアントにアクティブにサービス提供している第1のデバイスのメモリ内のセッションのセッション状態に合致させることと並行して、パケットを処理することができる。
いくつかの実施形態では、モニタ710aは、第2のデバイスが準備完了状態にないことを判定することができる。モニタ710aは、セッションのパラメータを第2の値に設定し、第1のデバイス200aに、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第2のデバイスに自動転送しないことを示すことができる。例えば、モニタ710aは、パラメータの値をダウン状態に設定し、セッションをダウン状態にマーキングすることができる。したがって、パラメータの第2の値を介して、セッションをダウン状態にマーキングすることに応答して、第1のデバイス710aは、クライアント102から受信されたセッションの第2のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しなくてもよい。モニタ710aは、第2のデバイス200bが非準備完了状態にあることに起因して、セッション状態がダウン状態にマーキングされたため、データリポジトリ720a内(例えば、パラメータデータ構造735a内)に、1つまたはそれを上回るパケットが第1のデバイス200aによって解析または処理されたが、第2のデバイス200bに自動転送または中継されないことのインジケーションを記憶することができる。
第2のデバイス200aが非準備完了状態にあることの判定に応答して、セッションをダウン状態にマーキングしたことに続いて、モニタ710aは、第2のデバイスが現在準備完了状態にあることを判定または検出することができる。例えば、第2のデバイス200aは、保守または修理を受けた、または別様にオンラインになり得る(例えば、リセット後)。モニタ710aは、パラメータデータ構造735aにアクセスし、パラメータの値を更新、設定、修正、または変更し、セッションが更新状態にあることを示すことができる。モニタ710aはさらに、パラメータデータ構造735aから、1つまたはそれを上回るパケットが第2のデバイス200bに自動転送または中継されなかったことを判定することができる。モニタ710aは、次いで、第2のデバイス200b上のセッションの状態が最新ではないことを判定することができる。モニタ710aは、次いで、状態情報を第2のデバイス200bにプッシュ配信、自動転送、伝送、または別様に提供することを判定し、セッションの状態が第1のデバイス200aのメモリ内のセッションの状態に合致するように、第2のデバイス200bが第2のデバイス200bのメモリ内に記憶されるセッションの状態を更新することを可能にすることができる。例えば、モニタ710aは、完全なセッション状態情報を第2のデバイス200bにプッシュ配信または提供することができる。完全なセッション状態は、第2のデバイスに自動転送されない1つまたはそれを上回るパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。第2のデバイスは、第2のデバイスのメモリ内に記憶される状態を完全なセッション状態で更新し、第1のデバイス上に維持される現在のセッション状態に合致させることができる。いくつかの実施形態では、モニタ710aは、第2のデバイス200bに中継されなかったデータを判定または識別し、対応するデータを第2のデバイス200bにプッシュ配信することができる。いくつかの実施形態では、第1のデバイス200aは、第1のデバイスと第2のデバイスとの間のデルタ状態を判定し、デルタ状態情報を第2のデバイス200bにプッシュ配信する。いくつかの実施形態では、第1のデバイス200aは、第2のデバイス200b上に記憶される最後の状態情報を識別するための要求を第2のデバイス200bに送信する。
ここで図7Bを参照すると、セッションを維持する方法の実施形態のブロック図が、示される。方法750は、図1−7Aに説明される1つまたはそれを上回るシステムまたはコンポーネントを使用して行われることができる。簡潔にすると、いくつかの実施形態では、方法750は、複数のクライアントおよび複数のサーバを仲介し、ステップ752において、アプリケーションデータを含むセッションのパケットを受信する、第1のデバイスを含む。ステップ754では、第1のデバイスは、第2のデバイスが準備完了状態にあることを判定する。ステップ756では、第1のデバイスは、セッションのセッション状態を更新状態にマーキングする。ステップ758では、第2のデバイスが準備完了状態にあって、セッション状態が更新状態にあることの判定に応答して、第1のデバイスは、アプリケーションデータを第2のデバイスに自動転送し、第2のデバイスに、第2のデバイス上で、第1のデバイス上に維持されるセッションの同一状態を維持させる。
依然として、図7Bを参照すると、さらなる詳細では、複数のクライアントおよび複数のサーバを仲介する、第1のデバイスは、ステップ752において、アプリケーションデータを含むセッションのパケットを受信する。第1のデバイスは、第1のデバイスと、第2のデバイスとを含む、仲介デバイスのアクティブ−スタンバイペア内の第1のデバイスであることができる。第1のデバイスは、クライアント要求にアクティブにサービス提供する、アクティブデバイスであることができる。第2のデバイスは、スタンバイデバイスであることができる。したがって、第1のデバイスは、クライアントにアクティブにサービス提供する、一次デバイスであってもよく、第2のデバイスは、スタンバイモードにおける二次デバイスであることができる。第1のデバイスは、セッションを介してアクセスされるアプリケーションの状態を維持するために使用される、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含む、セッションのパケットを受信することができる。
例えば、第1のデバイスは、クライアントデバイスまたはクライアントデバイスのエージェントから、アプリケーションサーバによって提供されるアプリケーションを起動するためのインジケーションを受信することができる。第1のデバイスは、クライアントデバイスからのインジケーションに応答して、アプリケーションを実行するように構成される、アプリケーションサーバへの接続を開始することができる。例えば、アプリケーションサーバは、アプリケーションとともに、かつ第1の仲介デバイスを介して、アプリケーションを実行し、クライアントデバイスに配信するための好適な算出およびメモリリソースを有するように構成されてもよい。第1のデバイスは、ログ情報をクライアントから受信し、ログイン情報をクライアントから受信することに応答して、ログイン情報を使用して、クライアントデバイスと複数のサーバのサーバとの間のセッションを確立することができる。例えば、第1のデバイスは、ユーザ名、パスワード、バイオメトリック情報、指紋、セキュアコード、動的コード、テキストベースのコード、音声、または多因子認証等の証明書を使用して、認証または承認プロセスを促進する、または行うように構成されることができる。したがって、第1のデバイスは、クライアントとサーバとの間のセッションを確立し、サーバによって実行されるアプリケーションへのアクセスを提供することができる。
ステップ754では、第1のデバイスは、第2のデバイスが準備完了状態であって、セッションのセッション状態が更新状態にあることを判定する。第1のデバイスは、クライアントおよび複数のサーバを仲介する第2のデバイスが準備完了状態にあって、セッションのセッション状態が更新状態であることを判定することができる。例えば、第1のデバイスは、第2のデバイスをポーリングし、第2のデバイスのデバイス状態を判定することができる。第1のデバイスは、第2のデバイスをポーリングし、第2のデバイスが準備完了状態にあるかまたは非準備完了状態にあるかを判定することができる。準備完了状態は、第2のデバイスが準備完了状態であって、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを解析し、第2のデバイスのメモリ内に、第1のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することを示すことができる。
いくつかの実施形態では、第2のデバイスは、準備完了状態または非準備完了状態等の第2のデバイスのステータスまたは状態を示す、ステータスインジケータを提示または提供することができる。いくつかの実施形態では、第1のデバイスは、第2のデバイスとのアクティブ接続を維持し、接続がアクティブおよびオンラインである限り、第2のデバイスが準備完了状態にあることを判定することができる。いくつかの実施形態では、第1のデバイスは、接続と関連付けられた性能特性を分析し、第2のデバイスが準備完了状態にあるかどうかを判定することができる。例えば、第1のデバイスは、ハンドシェイクプロトコルを使用して、第2のデバイスとの接続と関連付けられた喪失パケット数、待ち時間、または応答時間を識別することができる。第2のデバイスの応答時間が、閾値(例えば、1秒、2秒、5秒、10秒、0.5秒、0.1秒、または1分)を下回る場合、第1のデバイスは、第2のデバイスが準備完了状態にないことを判定することができる。第2のデバイスによってドロップされたパケットの数が、閾値(例えば、5、10、25、50、100、3、または2)を上回る場合、第1のデバイスは、第2のデバイスが準備完了状態にないことを判定することができる。
ステップ756では、第1のデバイスは、セッションのセッション状態を更新状態にマーキングする。例えば、第1のデバイスが第2のデバイスが準備完了状態にあることを判定することに応答して、第1のデバイスは、セッションのセッション状態を更新状態にマーキングすることができる。更新状態は、第1のデバイスに、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第2のデバイスに自動転送し、第1のデバイスが、クライアントにアクティブにサービス提供する間、第2のデバイスが、セッションまたはアプリケーションの状態を第2のデバイスのメモリ内に維持することを有効にする、それを行わせる、またはそれを可能にすることを示す、または命令することができる。例えば、第1のデバイスは、セッションのパラメータを第1の値に設定し、第2のデバイスが準備完了状態にあることの判定に応答して、第1のデバイスにアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第2のデバイスに自動転送することを示すことができる。第1の値は、例えば、更新状態を含むことができる。
ステップ758では、第2のデバイスが準備完了状態にあって、セッション状態が更新状態にあることの判定に応答して、第1のデバイスは、アプリケーションデータを第2のデバイスに自動転送し、第2のデバイスに、第2のデバイス上で、第1のデバイス上に維持されるセッションの同一状態を維持させる。第1のデバイスは、第2のデバイスが準備完了状態にあって、セッションが更新状態にあることの判定に応答して、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第2のデバイスに自動転送することができる。第1のデバイスは、パラメータの第1の値に応答して、データを自動転送することができる。第2のデバイスは、本アプリケータプロトコルデータおよびアプリケーションセッションメタデータを使用して、第1のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することができる。
例えば、第1のデバイスは、パケットを解析し、セッションの少なくとも一部の間、クライアントにアクティブにサービス提供する一方、第2のデバイスは、第1のデバイスが、クライアントにアクティブにサービス提供する間、第2のデバイスのメモリ内に、第1のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの状態を維持する。本構成では、第2のデバイスは、スタンバイモードで構成されることができ、第1のデバイスは、アクティブモードで構成されることができる。
いくつかの実施形態では、第1のデバイスは、第1のデバイスが、クライアントにアクティブにサービス提供することができない、またはしない、オフラインモードに入り得る。第1のデバイスは、クライアントに、アプリケーションへのアクセスを提供し得ない。第1のデバイスが、オフラインモードに入ると、第1のデバイスは、例えば、クライアントデバイスとの接続を含む、1つまたはそれを上回る接続をリセット、喪失、またはそこから接続解除し得る。第1のデバイスがオフラインモードに入ることに応答して、第2のデバイスのモードは、スタンバイからアクティブに変化することができ、第2のデバイスは、新しい一次デバイスになることができる。新しい一次デバイス(または第2のデバイス)は、第2のデバイス上でセッションを再開することができる。例えば、第2のデバイス(または新しい一次デバイス)は、第2のデバイスのメモリ内のセッションデータ構造から、セッションまたはアプリケーションの状態を読み出し、セッションの現在の状態を使用して、クライアントデバイスから受信されたパケットを処理することができる。第2のデバイスのメモリから読み出されるセッションの状態は、第1のデバイスがオフラインモードに入ることに先立った第1のデバイスのメモリ内のセッションの状態に合致することができる。
いくつかの実施形態では、クライアントデバイスによって実行されるクライアントエージェントは、クライアントデバイスと第1のデバイスとの間の第1の接続が終端または終了したことを判定する。クライアントエージェントが第1のデバイスから接続解除されたことの判定に応答して、クライアントエージェントは、セッション再接続プロシージャを開始することができる。クライアントエージェントは、セッションに再接続または再確立するための要求を伝送することができる。第1のデバイスは、オフラインであって、もはや一次デバイスではないため、新しい一次デバイス(または第2のデバイス)は、セッション再接続要求を受信し、第2の接続を確立し、第2のデバイスのメモリ内に維持される最新状態情報を使用して、セッションを再確立することができる。いくつかの実施形態では、第2のデバイスは、第2のデバイスが現在の状態情報を第2のデバイスのメモリから読み出し得るため、第2のデバイスがログイン情報をクライアントから受信することなく、セッションを再開することができる。状態情報を第2のデバイスのメモリ内に記憶および維持することによって、第2のデバイスは、シームレスに、自動的に、かつ効率的に、セッションを再開することができる。
いくつかの実施形態では、第1のデバイスは、セッションの間のある時点で、第2のデバイスがもはや準備完了状態ではないことを判定することができる。第1のデバイスは、次いで、セッションのパラメータをダウン状態等の第2の値に設定することによって、セッションのマーキングを更新することができる。第2の値またはダウン状態は、第1のデバイスが、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第2のデバイスに自動転送しないことを示すことができる。セッションがダウン状態にマーキングされる限り、第1のデバイスは、クライアントから受信されたセッションの第2のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定することができる。
セッションの間、セッションをダウン状態にマーキングし、第2のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定することに続いて、第1のデバイスは、第2のデバイスが準備完了状態に戻ったことを検出することができる。例えば、第2のデバイスは、信号またはインジケーションを第1のデバイスに伝送し、第2のデバイスが準備完了状態に戻ったことを示すことができる。第2のデバイスは、準備完了状態に戻ったことに応答して、信号を伝送することができる。ある場合には、第1のデバイスは、ある時間間隔に基づいて、第2のデバイスをポーリングまたは監視することができる。第2のデバイスをポーリングまたは監視することによって、第1のデバイスは、第2のデバイスが準備完了状態に戻ったことを検出することができる。デバイスをポーリングまたは監視することは、ピングまたはクエリを送信し、接続があるかどうかを判定する、または接続のステータスまたはデバイスのステータスを判定することを含むことができる。
第2のデバイスが準備完了状態にあることの判定に応じて、第1のデバイスは、パラメータを第1の値に戻し、セッションが更新状態に戻ったことを示すことができる。セッションが更新状態にあることに応答して、第1のデバイスは、完全なセッション状態を第2のデバイスに提供することができる。完全なセッション状態は、第2のデバイスに自動転送されない第2のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。第1のデバイスは、完全なセッション状態を第2のデバイスに提供することができ、第2のデバイスに、第2のデバイスのメモリ内に記憶される状態を完全なセッション状態で更新し、第1のデバイス上に維持される現在のセッション状態に合致させることができる。
いくつかの実施形態では、セッション状態は、第2のデバイスのデバイス状態に基づいて、更新状態またはダウン状態に設定されることができる。例えば、第2のデバイスが準備完了状態にある場合、セッション状態は、更新状態に設定されることができる。いくつかの実施形態では、セッション状態は、二次デバイスのデバイス状態から独立して、更新状態またはダウン状態に設定されることができる。例えば、セッション状態は、セッション、クライアントデバイス、アプリケーションプロトコル、または第1のデバイスのアドミニストレータによって設定される構成と関連付けられた構成パラメータに応答して、更新状態またはダウン状態に設定されることができる。例えば、セッションのための所定の構成、セッションのタイプ、ネットワークのタイプ、コンピューティングデバイスのタイプ、またはアプリケーションのタイプは、更新状態またはダウン状態に対応することができる。例えば、エンティティは、セッションをシームレスに再開する追加機能性に起因して、セッションが更新状態にある間、より高い料金を請求してもよい。したがって、顧客が、より高いレベルのサービスを所望しない場合、第1のデバイスのアドミニストレータは、第2のデバイスが準備完了状態にある場合でも、第2のデバイスもまたセッション状態を維持しないように、セッション状態をダウン状態に構成することができる。したがって、第1のデバイスは、セッション状態が更新状態にあって、かつ第2のデバイスのデバイス状態が準備完了状態にある両方の場合、アプリケーションプロトコルデータおよびアプリケーションセッションデータを第2のデバイスに自動転送することができる。
ここで図8Aを参照すると、仲介デバイス(または第1の仲介デバイスおよび第2の仲介デバイスを含む、アプライアンスペア)を介してセッションを維持する実施形態のフロー図800が、示される。プロセス800は、図1−7Aに描写される1つまたはそれを上回るコンポーネントまたはシステムによって行われることができる。ステップ805では、仲介デバイスのアクティブ−スタンバイペアの一次デバイスは、クライアントデバイスから、ステートフルアプリケーションプロトコル接続等の新しいプロトコル接続のための要求を受信する。810では、一次デバイスは、仲介デバイスのアクティブ−スタンバイペアの二次デバイスが準備完了状態にあるかどうかを判定することができる。二次デバイスが「はい」によって示される準備完了状態にある場合815、一次デバイスは、ステップ820において、セッションを更新状態にマーキングすることができる。一次デバイスはさらに、クライアントから受信されたアプリケーションデータを二次デバイスに自動転送することができる。アプリケーションデータは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。一次デバイスはさらに、アプリケーションプロトコルデータを処理し、クライアントデバイスから受信された要求に対応するサーバに自動転送することができる。しかしながら、一次デバイスが、二次デバイスが「いいえ」によって示される準備完了状態にないことを判定する場合825、一次デバイスは、セッションをダウン状態にマーキングすることができる。一次デバイスは、次いで、アプリケーションプロトコルデータを処理し、クライアントから受信された要求に対応するサーバに自動転送し続けることができる。
ここで図8Bを参照すると、仲介デバイス(または第1の仲介デバイスおよび第2の仲介デバイスを含む、アプライアンスペア)を介してセッションを維持する実施形態のフロー図801が、示される。プロセス801は、図1−7Aに描写される1つまたはそれを上回るコンポーネントまたはシステムによって行われることができる。ステップ835では、一次デバイスは、アプリケーションプロトコルデータを受信することができる。840では、一次デバイスは、セッション状態が更新状態にあるかまたはダウン状態にあるかを判定することができる。セッションが「はい」によって示される更新状態にある場合845、一次デバイスは、ステップ850において、二次デバイスが準備完了状態にあるかどうかを判定することができる。一次デバイスが、二次デバイスが「はい」によって示される準備完了状態にあることを判定する場合855、一次デバイスは、ステップ860において、アプリケーションデータ(例えば、アプリケーションプロトコルデータまたはアプリケーションセッションメタデータ)を二次デバイスに自動転送することができる。一次デバイスはさらに、プロトコルデータ835を処理し、ステップ860において、対応するサーバに自動転送することができる。
一次デバイスが、二次デバイスが「いいえ」によって示される準備完了状態にないことを判定する場合865、一次デバイスは、ステップ870において、セッションをダウン状態にマーキングすることができる。一次デバイスはさらに、ステップ870において、プロトコルデータ835を処理し、対応するサーバに自動転送することができる。したがって、一次デバイスは、二次デバイスが準備完了状態にあるかどうかにかかわらず、クライアントにアクティブにサービス提供することができる。
一次デバイスが、セッションが「いいえ」によって示される更新状態にないことを判定する場合875、一次デバイスは、ステップ880において、二次デバイスが準備完了状態にあるかどうかを判定することができる。一次デバイスが、二次デバイスが「はい」によって示される準備完了状態にあることを判定する場合885、一次デバイスは、ステップ890において、セッションを更新状態にマーキングすることができる。例えば、一次デバイスは、890において、セッションのマーキングをダウン状態から更新状態に変化させることができる。一次デバイスはさらに、ステップ890において、完全なセッション状態を二次デバイスにプッシュ配信することができる。二次デバイスが「はい」によって示される準備完了状態にある場合885、一次デバイスはまた、ステップ895において、アプリケーションデータを二次デバイスに自動転送することができる。一次デバイスは、一次デバイスが、ステップ890において、完全なセッション状態を二次デバイスにプッシュ配信した後、ステップ895において、アプリケーションデータを二次デバイスに自動転送することができる。例えば、一次デバイスは、ステップ895において、最初に、二次デバイスを最新状態にし、次いで、新しいアプリケーションプロトコルデータ835を自動転送し、二次デバイスがセッションの状態を二次デバイスのメモリ内に維持することを有効にすることができる。
一次デバイスが、二次デバイスが「いいえ」によって示される準備完了状態にないことを判定する場合896、一次デバイスは、アプリケーションプロトコルデータ835を処理し、対応するサーバに自動転送することに進むことができる。
上記に説明されるシステムは、それらのコンポーネントの任意またはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型機械上に、またはいくつかの実施形態では、分散型システム内の複数の機械上にのいずれかにおいて提供されてもよいことを理解されたい。上記に説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、または任意のそれらの組み合わせを生産するために、プログラミングおよび/またはエンジニアリング技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記に説明されるシステムおよび方法は、1つまたはそれを上回る製造品上または内で具現化される、1つまたはそれを上回るコンピュータ可読プログラムとして提供されてもよい。用語「製造品」は、本明細書で使用されるように、1つまたはそれを上回るコンピュータ可読デバイス、ファームウェア、プログラム可能論理、メモリデバイス(例えば、EEPROM、ROM、PROM、RAM、SRAM等)、ハードウェア(例えば、集積回路チップ、フィールドプログラム可能ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等)、電子デバイス、コンピュータ可読不揮発性記憶ユニット(例えば、CD−ROM、フロッピー(登録商標)ディスク、ハードディスクドライブ等)からアクセス可能であって、その中に内蔵される、コードまたは論理を包含することが意図される。製造品は、ネットワーク伝送ライン、無線伝送媒体、空間を通して伝搬する信号、無線波、赤外線信号等を介して、コンピュータ可読プログラムへのアクセスを提供する、ファイルサーバからアクセス可能であってもよい。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、プロセッサによって実行されるコンピュータ可読媒体内に内蔵されるハードウェア論理およびソフトウェアまたはプログラム可能コードを含む。一般に、コンピュータ可読プログラムは、LISP、PERL、C、C++、C#、PROLOG等の任意のプログラミング言語、またはJAVA(登録商標)等の任意のバイトコード言語において実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして1つまたはそれを上回る製造品上またはその中に記憶されてもよい。
「または」の言及は、「または」を使用して説明される任意の用語が、説明される用語の単一、1つを上回る、および全てののいずれかを示し得るように、包含的なものとして解釈され得る。
方法およびシステムの種々の実施形態が説明されたが、これらの実施形態は、例示的であって、説明される方法またはシステムの範囲をいかようにも限定するものではない。当業者は、説明される方法およびシステムの最広範囲から逸脱することなく、説明される方法およびシステムの形態および詳細に変更をもたらすことができる。したがって、本明細書に説明される方法およびシステムの範囲は、例示的実施形態のいずれかによって限定されるべきではなく、付随の請求項およびその均等物に従って定義されるべきである。