本ソリューションの特徴および利点は、同様の参照記号が全体を通して対応する要素を識別する、図面と併せて解釈されるときに、以下に記載される発明を実施するための形態から、より明白となるであろう。図面では、同様の参照番号は、概して、同じ、機能的に類似する、および/または構造的に類似する要素を示す。
以下の種々の実施形態の説明を熟読する目的で、本明細書の節およびそれらの個別の内容の以下の説明が役立ち得る。
第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.(San Jose, California)製の任意のアプリケーション加速および/またはセキュリティ関連アプライアンスおよび/またはソフトウェアを含む。
一実施形態では、本システムは、複数の論理的にグループ化されたサーバ106を含んでもよい。これらの実施形態では、サーバの論理グループは、サーバファーム38と称されてもよい。これらの実施形態のうちのいくつかでは、サーバ106は、地理的に分散されてもよい。ある場合には、ファーム38は、単一のエンティティとして運営されてもよい。他の実施形態では、サーバファーム38は、複数のサーバファーム38を備える。一実施形態では、サーバファームは、1つ以上のクライアント102の代わりに、1つ以上のアプリケーションを実行する。
各ファーム38内のサーバ106は、異種であり得る。サーバ106のうちの1つ以上のものが、1つのタイプのオペレーティングシステムプラットフォーム(例えば、Microsoft Corp.(Redmond, Washington)製のWINDOWS(登録商標) NT)に従って動作することができる一方で、他のサーバ106のうちの1つ以上のものは、別のタイプのオペレーティングシステムプラットフォーム(例えば、Unix(登録商標)またはLinux(登録商標))に従って動作することができる。各ファーム38のサーバ106は、同一ファーム38内の別のサーバ106に物理的に近接する必要はない。したがって、ファーム38として論理的にグループ化されたサーバ106のグループは、広域ネットワーク(WAN)接続または中域ネットワーク(MAN)接続を使用して、相互接続されてもよい。例えば、ファーム38は、異なる大陸、または大陸、国、州、都市、キャンパス、または部屋の異なる領域の中に物理的に位置する、サーバ106を含んでもよい。ファーム38内のサーバ106の間のデータ伝送速度は、サーバ106がローカルネットワーク(LAN)接続または何らかの形態の直接接続を使用して接続される場合に、増加されることができる。
サーバ106は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、またはゲートウェイサーバと称されてもよい。いくつかの実施形態では、サーバ106は、アプリケーションサーバとして、またはマスタアプリケーションサーバとして機能する能力を有してもよい。一実施形態では、サーバ106は、アクティブディレクトリを含んでもよい。クライアント102はまた、クライアントノードまたはエンドポイントと称されてもよい。いくつかの実施形態では、クライアント102は、サーバ上のアプリケーションへのアクセスを求めるクライアントノードとして、および他のクライアント102a−102nのためのホスト型アプリケーションへのアクセスを提供するアプリケーションサーバとしての両方で機能する能力を有する。
いくつかの実施形態では、クライアント102は、サーバ106と通信する。一実施形態では、クライアント102は、ファーム38内のサーバ106のうちの1つと直接通信する。別の実施形態では、クライアント102は、ファーム38内のサーバ106と通信するように、プログラム隣接アプリケーションを実行する。なおも別の実施形態では、サーバ106は、マスタノードの機能性を提供する。いくつかの実施形態では、クライアント102は、ネットワーク104を通してファーム38内のサーバ106と通信する。ネットワーク104を経由して、クライアント102は、例えば、ファーム38内のサーバ106a−106nによってホストされる種々のアプリケーションの実行を要求し、表示するためにアプリケーション実行の結果の出力を受信することができる。いくつかの実施形態では、マスタノードのみが、要求されたアプリケーションをホストするサーバ106’と関連付けられるアドレス情報を識別して提供するために要求される機能性を提供する。
一実施形態では、サーバ106は、ウェブサーバの機能性を提供する。別の実施形態では、サーバ106aは、クライアント102から要求を受信し、要求を第2のサーバ106bに転送し、サーバ106bからの要求への応答とともに、クライアント102による要求に応答する。なおも別の実施形態では、サーバ106は、クライアント102に利用可能なアプリケーションの列挙、およびアプリケーションの列挙によって識別されるアプリケーションをホストするサーバ106と関連付けられるアドレス情報を獲得する。さらに別の実施形態では、サーバ106は、ウェブインターフェースを使用して、要求への応答をクライアント102に提示する。一実施形態では、クライアント102は、識別されたアプリケーションにアクセスするようにサーバ106と直接通信する。別の実施形態では、クライアント102は、サーバ106上の識別されたアプリケーションの実行によって生成される、表示データ等のアプリケーション出力データを受信する。
ここで図1Bを参照すると、複数のアプライアンス200を展開するネットワーク環境の実施形態が描写されている。第1のアプライアンス200が、第1のネットワーク104上に、第2のアプライアンス200’が、第2のネットワーク104’上に展開されてもよい。例えば、企業が、支店において第1のアプライアンス200を、データセンタにおいて第2のアプライアンス200’を展開してもよい。別の実施形態では、第1のアプライアンス200および第2のアプライアンス200’は、同一のネットワーク104またはネットワーク104’上に展開される。例えば、第1のアプライアンス200は、第1のサーバファーム38のために展開されてもよく、第2のアプライアンス200は、第2のサーバファーム38’のために展開されてもよい。別の実施例では、第1のアプライアンス200が、第1の支店において展開されてもよい一方で、第2のアプライアンス200’は、第2の支店’において展開されてもよい。いくつかの実施形態では、第1のアプライアンス200および第2のアプライアンス200’は、ネットワークトラフィックまたはクライアントとサーバとの間のアプリケーションおよびデータの配信を加速するように、相互と協力して、または連動して作動する。
ここで図1Cを参照すると、1つ以上のWAN最適化アプライアンス205、205’の間等で1つ以上の他のタイプのアプライアンスとともにアプライアンス200を展開する、ネットワーク環境の別の実施形態が描写されている。例えば、第1のWAN最適化アプライアンス205が、ネットワーク104と104’との間に示され、第2のWAN最適化アプライアンス205’が、アプライアンス200と1つ以上のサーバ106との間に展開されてもよい。一例として、企業が、支店において第1のWAN最適化アプライアンス205を、データセンタにおいて第2のWAN最適化アプライアンス205’を展開してもよい。いくつかの実施形態では、アプライアンス205は、ネットワーク104’上に位置してもよい。他の実施形態では、アプライアンス205’は、ネットワーク104上に位置してもよい。いくつかの実施形態では、アプライアンス205’は、ネットワーク104’またはネットワーク104”上に位置してもよい。一実施形態では、アプライアンス205および205’は、同一ネットワーク上にある。別の実施形態では、アプライアンス205および205’は、異なるネットワーク上にある。別の実施例では、第1のWAN最適化アプライアンス205が、第1のサーバファーム38のために、第2のWAN最適化アプライアンス205’が、第2のサーバファーム38’のために展開されてもよい。
一実施形態では、アプライアンス205は、WAN接続へ、および/またはそこからのトラフィック等の任意のタイプおよび形態のネットワークトラフィックの性能、動作、またはサービス品質を加速、最適化、または別様に改良するためのデバイスである。いくつかの実施形態では、アプライアンス205は、性能強化プロキシである。他の実施形態では、アプライアンス205は、WAN最適化コントローラと称されることもある、任意のタイプおよび形態のWAN最適化または加速デバイスである。一実施形態では、アプライアンス205は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製のCloudBridge(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, NewJersey)製の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 Systems, Inc.によるCitrix Workspace SuiteTMの任意の部分、および/またはMicrosoft Corporation製のMicrosoft(R) Windows(登録商標) Terminal Servicesのうちのいずれかを備える。一実施形態では、アプリケーション配信システム190は、遠隔表示プロトコルを介して、または別様に遠隔ベースまたはサーバベースの計算を介して、1つ以上のアプリケーションをクライアント102またはユーザに配信してもよい。別の実施形態では、アプリケーション配信システム190は、アプリケーションのストリーミングを介して、1つ以上のアプリケーションをクライアントまたはユーザに配信してもよい。
一実施形態では、アプリケーション配信システム190は、アプリケーションへのアクセス、アプリケーション実行方法の選択、およびアプリケーションの配信を制御および管理するためのポリシエンジン195を含む。いくつかの実施形態では、ポリシエンジン195は、ユーザまたはクライアント102がアクセスし得る、1つ以上のアプリケーションを決定する。別の実施形態では、ポリシエンジン195は、アプリケーションがユーザまたはクライアント102に配信されるべき方法、例えば、実行の方法を決定する。いくつかの実施形態では、アプリケーション配信システム190は、サーバベースの計算、ローカル実行のためにローカルにアプリケーションをクライアント120にストリーミングまたは配信すること等のアプリケーション実行の方法を選択する、複数の配信技法を提供する。
一実施形態では、クライアント102は、アプリケーションプログラムの実行を要求し、サーバ106を備えるアプリケーション配信システム190は、アプリケーションプログラムを実行する方法を選択する。いくつかの実施形態では、サーバ106は、クライアント102から証明書を受信する。別の実施形態では、サーバ106は、クライアント102から利用可能なアプリケーションの列挙の要求を受信する。一実施形態では、証明書の要求または受信に応答して、アプリケーション配信システム190は、クライアント102に利用可能な複数のアプリケーションプログラムを列挙する。アプリケーション配信システム190は、列挙されたアプリケーションを実行する要求を受信する。アプリケーション配信システム190は、例えば、ポリシエンジンのポリシに応答して、列挙されたアプリケーションを実行するための所定数の方法のうちの1つを選択する。アプリケーション配信システム190は、クライアント102が、サーバ106上のアプリケーションプログラムの実行によって生成されるアプリケーション出力データを受信することを可能にする、アプリケーションの実行の方法を選択してもよい。アプリケーション配信システム190は、アプリケーションを備える複数のアプリケーションファイルを読み出した後に、ローカルマシン10がローカルでアプリケーションプログラムを実行することを可能にする、アプリケーションの実行の方法を選択してもよい。さらに別の実施形態では、アプリケーション配信システム190は、ネットワーク104を介してクライアント102にアプリケーションをストリーミングするように、アプリケーションの実行の方法を選択してもよい。
クライアント102は、任意のタイプおよび/または形態のウェブブラウザ、ウェブベースのクライアント、クライアント・サーバアプリケーション、シンクライアントコンピューティングクライアント、ActiveXコントロール、またはJava(登録商標)アプレット等の任意のタイプおよび/または形態のソフトウェア、プログラム、または実行可能命令、またはクライアント102上で実行することが可能な任意のタイプおよび/または形態の実行可能命令であることができる、アプリケーションを実行、動作、または別様に提供してもよい。いくつかの実施形態では、アプリケーションは、サーバ106上のクライアント102の代わりに実行される、サーバベースまたは遠隔ベースのアプリケーションであってもよい。一実施形態では、サーバ106は、Citrix Systems, Inc.(Ft. Lauderdale, Florida)製の独立コンピューティングアーキテクチャ(ICA)プロトコルまたはMicrosoft Corporation(Redmond, Washington)製の遠隔デスクトッププロトコル(RDP)等の任意のシンクライアントまたは遠隔表示プロトコルを使用して、クライアント102への出力を表示してもよい。アプリケーションは、任意のタイプのプロトコルを使用することができ、それは、例えば、HTTPクライアント、FTPクライアント、Oscarクライアント、またはTelnetクライアントであることができる。他の実施形態では、アプリケーションは、ソフトIP電話等のVoIP通信に関連する任意のタイプのソフトウェアを備える。さらなる実施形態では、アプリケーションは、ビデオおよび/またはオーディオをストリーミングするためのアプリケーション等のリアルタイムデータ通信に関連する任意のアプリケーションを備える。
いくつかの実施形態では、サーバ106またはサーバファーム38は、シンクライアント計算を提供するアプリケーションまたは遠隔表示プレゼンテーションアプリケーション等の1つ以上のアプリケーションを起動していてもよい。一実施形態では、サーバ106またはサーバファーム38は、XenApp(R)またはXenDesktop(R)等のCitrix Systems, Inc.によるCitrix Workspace SuiteTMの任意の部分、および/またはMicrosoft Corporation製のMicrosoft(登録商標) Windows(登録商標) Terminal Servicesのうちのいずれかをアプリケーションとして実行する。一実施形態では、アプリケーションは、Citrix Systems,Inc.(Fort Lauderdale, Florida)によって開発されたICAクライアントである。他の実施形態では、アプリケーションは、Microsoft Corporation(Redmond, Washington)によって開発された遠隔デスクトップ(RDP)クライアントを含む。また、サーバ106は、例えば、Microsoft Corporation(Redmond, Washington)製のMicrosoft Exchange等の電子メールサービスを提供するアプリケーションサーバ、ウェブまたはインターネットサーバ、またはデスクトップ共有サーバ、または協調サーバであり得る、アプリケーションを起動してもよい。いくつかの実施形態では、アプリケーションのうちのいずれかは、Citrix Systems, Inc.(Fort Lauderdale, Florida)によって提供されるGoToMeetingTM、Cisco Systems, Inc.(San Jose, California)によって提供されるWebExTM、またはMicrosoft Corporation(Redmond, Washington)によって提供されるMicrosoft Office Live Meeting等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
依然として図1Dを参照すると、ネットワーク環境の実施形態は、監視サーバ106Aを含んでもよい。監視サーバ106Aは、任意のタイプおよび形態の性能監視サービス198を含んでもよい。性能監視サービス198は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および/または管理ソフトウェアおよび/またはハードウェアを含んでもよい。一実施形態では、性能監視サービス198は、1つ以上の監視エージェント197を含む。監視エージェント197は、クライアント102、サーバ106、またはアプライアンス200、205等のデバイス上で監視、測定、およびデータ収集アクティビティを実施するための任意のソフトウェア、ハードウェア、またはその組み合わせを含む。いくつかの実施形態では、監視エージェント197は、Visual BasicスクリプトまたはJava(登録商標)script等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント197は、デバイスの任意のアプリケーションおよび/またはユーザに対して透過的に実行する。いくつかの実施形態では、監視エージェント197は、アプリケーションまたはクライアントに影響を及ぼすことなくインストールおよび動作される。さらに別の実施形態では、監視エージェント197は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
いくつかの実施形態では、監視エージェント197は、所定の頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント197は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント197は、ウェブページまたはHTTP応答の受信の要求の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント197は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント197は、任意の監視、測定、または収集されたデータを監視サービス198に報告または提供してもよい。一実施形態では、監視エージェント197は、スケジュールまたは所定の頻度に従って、情報を監視サービス198に伝送する。別の実施形態では、監視エージェント197は、イベントの検出に応じて、情報を監視サービス198に伝送する。
いくつかの実施形態では、監視サービス198および/または監視エージェント197は、クライアント、サーバ、サーバファーム、アプライアンス200、アプライアンス205、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を実施する。一実施形態では、監視サービス198および/または監視エージェント197は、TCPまたはUDP接続等の任意のトランスポート層接続の監視および性能測定を実施する。別の実施形態では、監視サービス198および/または監視エージェント197は、ネットワーク待ち時間を監視して測定する。さらなる一実施形態では、監視サービス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(Palo Alto, California)製のTrueView製品スイートと称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス198および/または監視エージェント198は、TeaLeaf Technology Inc.(San Francisco, California)製のTeaLeaf CX製品スイートと称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス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(Santa Clara, California)製のもの、RS/6000プロセッサ、International Business Machines(White Plains, NewYork)製のもの、または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、PC100SDRAM、ダブルデータレートSDRAM(DDR SDRAM)、強化SDRAM(ESDRAM)、SyncLink DRAM(SLDRAM)、Direct Rambus DRAM(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 Desktopバス、RS−232シリアル接続、SCSIバス、FireWireバス、FireWire 800バス、イーサネット(登録商標)バス、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、WINDOWS(登録商標) 95、WINDOWS(登録商標) 98、WINDOWS(登録商標) 2000、WINDOWS(登録商標) NT 3.51、WINDOWS(登録商標) NT 4.0、WINDOWS(登録商標) CE、およびWINDOWS(登録商標) XP、Apple Computer(Cupertino, California)製のMacOS、International Business Machines(Armonk, New York)製のOS/2、およびCaldera Corp.(Salt Lake City, Utah)によって配布される無料で入手可能なオペレーティングシステムであるLinux(登録商標)、または任意のタイプおよび/または形態のUNIX(登録商標)オペレーティングシステムを含む。
他の実施形態では、コンピューティングデバイス100は、デバイスに準拠する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ100は、Palm, Inc製のTreo 180、270、1060、600、または650スマートフォンである。本実施形態では、Treoスマートフォンは、PalmOSオペレーティングシステムの制御下で動作され、スタイラス入力デバイスおよび5方向ナビゲータデバイスを含む。また、コンピューティングデバイス100は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または通信が可能であり、本明細書に説明される動作を実施するために十分なプロセッサ能力およびメモリ容量を有する、他の形態のコンピューティングまたは電気通信デバイスであることができる。
図1Gに示されるように、コンピューティングデバイス100は、複数のプロセッサを備えてもよく、命令の同時実行のための機能性、または1つを上回るデータについての1つの命令の同時実行のための機能性を提供してもよい。いくつかの実施形態では、コンピューティングデバイス100は、1つ以上のコアを伴う並列プロセッサを備えてもよい。これらの実施形態のうちの1つでは、コンピューティングデバイス100は、単一のグローバルアドレス空間としての全ての利用可能なメモリにアクセスする、複数のプロセッサおよび/または複数のプロセッサコアを伴う共有メモリ並列デバイスである。これらの実施形態のうちの別のものでは、コンピューティングデバイス100は、それぞれがローカルメモリのみにアクセスする複数のプロセッサを伴う分散型メモリ並列デバイスである。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス100は、共有されるいくつかのメモリと、特定のプロセッサまたはプロセッサのサブセットのみによってアクセスされることができるいくつかのメモリとの両方を有する。これらの実施形態のうちのなおもさらに別のものでは、マルチコアマイクロプロセッサ等のコンピューティングデバイス100は、2つ以上の独立プロセッサを、単一のパッケージ、多くの場合、単一の集積回路(IC)に組み合わされる。これらの実施形態のうちのさらに別のものでは、コンピューティングデバイス100は、CELL BROADBAND ENGINEアーキテクチャを有し、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コンピュータ用のMacOS(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)(電子メール)、ファイル転送プロトコル(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は、vServer、VIPサーバ、または単にVIP275a−275nと称される(本明細書ではvServer275とも称される)、1つ以上の仮想サーバまたは仮想インターネットプロトコルサーバを備える。vServer275は、アプライアンス200の構成および動作に従って、クライアント102とサーバ106との間の通信を受信、傍受、または別様に処理する。
vServer275は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。vServer275は、アプライアンス200においてユーザモード202、カーネルモード204、またはそれらの任意の組み合わせで動作する、任意のタイプおよび形態のプログラム、サービス、タスク、プロセス、または実行可能命令を備えてもよい。vServer275は、SSL VPN280、切替/負荷平衡284、ドメイン名サービス解決286、加速288、およびアプリケーションファイアウォール290等の本明細書に説明される技法の任意の実施形態を実施する任意の論理、機能、ルール、または動作を含む。いくつかの実施形態では、vServer275は、サーバ106のサービス270への接続を確立する。サービス275は、アプライアンス200、クライアント102、またはvServer275に接続し、それと通信することが可能な任意のプログラム、アプリケーション、プロセス、タスク、または実行可能命令のセットを備えてもよい。例えば、サービス275は、ウェブサーバ、httpサーバ、ftp、電子メール、またはデータベースサーバを備えてもよい。いくつかの実施形態では、サービス270は、電子メール、データベース、または企業アプリケーション等のアプリケーションのための通信をリッスン、受信、および/または送信するためのデーモンプロセスまたはネットワークドライバである。いくつかの実施形態では、サービス270は、具体的IPアドレス、またはIPアドレスおよびポート上で通信してもよい。
いくつかの実施形態では、vServer275は、ポリシエンジン236の1つ以上のポリシを、クライアント102とサーバ106との間のネットワーク通信に適用する。一実施形態では、ポリシは、vServer275と関連付けられる。別の実施形態では、ポリシは、ユーザまたはユーザのグループに基づく。さらに別の実施形態では、ポリシは、大域的であり、1つ以上のvServer275a−275n、およびアプライアンス200を介して通信する任意のユーザまたはユーザのグループに適用される。いくつかの実施形態では、ポリシエンジンのポリシは、インターネットプロトコルアドレス、ポート、プロトコルタイプ、ヘッダ、またはパケット内のフィールド等の通信の任意のコンテンツ、またはユーザ、ユーザのグループ、vServer275、トランスポート層接続、および/またはクライアント102またはサーバ106の識別または属性等の通信のコンテキストに基づいて、ポリシが適用される条件を有する。
他の実施形態では、アプライアンス200は、サーバ106からコンピューティング環境15、アプリケーション、および/またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント102の認証および/または承認を決定するように、ポリシエンジン236と通信する、またはインターフェースをとる。別の実施形態では、アプライアンス200は、アプリケーション配信システム190にコンピューティング環境15、アプリケーション、および/またはデータファイルのうちの1つ以上のものを配信させるための遠隔ユーザまたは遠隔クライアント102の認証および/または承認を決定するように、ポリシエンジン236と通信する、またはインターフェースをとる。さらに別の実施形態では、アプライアンス200は、ポリシエンジン236の認証および/または遠隔ユーザまたは遠隔クライアント102の承認に基づいて、VPNまたはSSL VPN接続を確立する。一実施形態では、アプライアンス200は、ポリシエンジン236のポリシに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。例えば、アプライアンス200は、ポリシエンジン236に基づいて、コンピューティング環境15、アプリケーション、またはデータファイルへのアクセスを制御してもよい。
いくつかの実施形態では、vServer275は、クライアントエージェント120を介したクライアント102とのTCPまたはUDP接続等のトランスポート層接続を確立する。一実施形態では、vServer275は、クライアント102からの通信をリッスンして受信する。他の実施形態では、vServer275は、クライアントサーバ106とのTCPまたはUDP接続等のトランスポート層接続を確立する。一実施形態では、vServer275は、サーバ106上で起動するサーバ270のインターネットプロトコルアドレスおよびポートへのトランスポート層接続を確立する。別の実施形態では、vServer275は、クライアント102への第1のトランスポート層接続をサーバ106への第2のトランスポート層接続と関連付ける。いくつかの実施形態では、vServer275は、サーバ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として、またはその代わりに作用する。例えば、別の実施形態では、vServer275は、クライアント102のIntranetIP282への通信をリッスンし、それに応答する。いくつかの実施形態では、第2のネットワーク104’上のコンピューティングデバイス100が要求を伝送する場合、アプライアンス200は、それがクライアント102であるかのように要求を処理する。例えば、アプライアンス200は、クライアントのIntranetIP282へのpingに応答してもよい。別の実施例では、アプライアンスは、クライアントのIntranetIP282との接続を要求する、第2のネットワーク104上のコンピューティングデバイス100とのTCPまたはUDP接続等の接続を確立してもよい。
いくつかの実施形態では、アプライアンス200は、以下の加速技法288、すなわち、1)圧縮、2)解凍、3)伝送制御プロトコルプーリング、4)伝送制御プロトコル多重化、5)伝送制御プロトコルバッファリング、および6)キャッシング、のうちの1つ以上のものをクライアント102とサーバ106との間の通信に提供する。
一実施形態では、アプライアンス200は、各サーバ106との1つ以上のトランスポート層接続を開放し、インターネットを介したクライアントによる反復データアクセスを可能にするように、これらの接続を維持することによって、クライアント102へのトランスポート層接続を繰り返し開放および閉鎖することによって引き起こされる処理負荷の多くからサーバ106を解放する。本技法は、本明細書では「接続プーリング」と称される。
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント102からサーバ106への通信をシームレスに接合するために、アプライアンス200は、トランスポート層プロトコルレベルでシーケンス番号および確認応答番号を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、インバウンドパケット(すなわち、クライアント102から受信されるパケット)の場合、パケットのソースネットワークアドレスは、アプライアンス200の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。アウトバウンドパケット(すなわち、サーバ106から受信されるもの)の場合、ソースネットワークアドレスは、サーバ106のものからアプライアンス200の出力ポートのものに変更され、宛先アドレスは、アプライアンス200のものから要求側クライアント102のものに変更される。パケットのシーケンス番号および確認応答番号はまた、クライアント102へのアプライアンス200のトランスポート層接続上でクライアント102によって予期されるシーケンス番号および確認応答番号に変換される。いくつかの実施形態では、トランスポート層プロトコルのパケットチェックサムが、これらの変換を考慮するように再計算される。
別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の通信のための切替または負荷平衡機能性284を提供する。いくつかの実施形態では、アプライアンス200は、トラフィックを配布し、層4またはアプリケーション層要求データに基づいてクライアント要求をサーバ106にダイレクトする。一実施形態では、ネットワークパケットのネットワーク層または層2が宛先サーバ106を識別するが、アプライアンス200は、トランスポート層パケットのペイロードとして搬送されるアプリケーション情報およびデータによってネットワークパケットを分配するサーバ106を決定する。一実施形態では、アプライアンス200の健全性監視プログラム216は、クライアントの要求を分配するサーバ106を決定するように、サーバの健全性を監視する。いくつかの実施形態では、アプライアンス200が、サーバ106が利用可能ではない、または所定の閾値を上回る負荷を有することを検出する場合、アプライアンス200は、クライアント要求を別のサーバ106にダイレクトまたは分配することができる。
いくつかの実施形態では、アプライアンス200は、ドメイン名サービス(DNS)リゾルバとして作用する、または別様にクライアント102からのDNS要求の解決を提供する。いくつかの実施形態では、アプライアンスは、クライアント102によって伝送されるDNS要求を傍受する。一実施形態では、アプライアンス200は、アプライアンス200の、またはそれによってホストされるIPアドレスを用いて、クライアントのDNS要求に応答する。本実施形態では、クライアント102は、ドメイン名のためのネットワーク通信をアプライアンス200に伝送する。別の実施形態では、アプライアンス200は、第2のアプライアンス200’の、またはそれによってホストされるIPアドレスを用いて、クライアントのDNS要求に応答する。いくつかの実施形態では、アプライアンス200は、アプライアンス200によって決定されるサーバ106のIPアドレスを用いて、クライアントのDNS要求に応答する。
さらに別の実施形態では、アプライアンス200は、クライアント102とサーバ106との間の通信のためのアプリケーションファイアウォール機能性290を提供する。一実施形態では、ポリシエンジン236は、違法な要求を検出してブロックするためのルールを提供する。いくつかの実施形態では、アプリケーションファイアウォール290は、サービス妨害(DoS)攻撃から保護する。他の実施形態では、アプライアンスは、アプリケーションベースの攻撃を識別してブロックする傍受された要求のコンテンツを点検する。いくつかの実施形態では、ルール/ポリシエンジン236は、以下、すなわち、1)バッファオーバーフロー、2)CGI−BINパラメータ操作、3)フォーム/非表示フィールド操作、4)強制的ブラウジング、5)クッキーまたはセッションポイズニング、6)破損したアクセス制御リスト(ACL)または弱いパスワード、7)クロスサイトスクリプティング(XSS)、8)コマンドインジェクション、9)SQLインジェクション、10)エラートリガ型機密情報漏出、11)暗号化の不安定な使用、12)サーバ不正構成、13)バックドアおよびデバッグオプション、14)ウェブサイト改変、15)プラットフォームまたはオペレーティングシステム脆弱性、および16)ゼロデイ攻撃、のうちの1つ以上のもの等の種々のクラスおよびタイプのウェブまたはインターネットベースの脆弱性に対する保護を提供するための1つ以上のアプリケーションファイアウォールまたはセキュリティ制御ポリシを備える。ある実施形態では、アプリケーションファイアウォール290は、以下、すなわち、1)要求されたフィールドが返されること、2)いかなる追加フィールドも許容されないこと、3)読取専用および非表示フィールド実行、4)ドロップダウンリストおよびラジオボタンフィールド適合性、および5)フォームフィールド最大長実行、のうちの1つ以上のもののためにネットワーク通信を点検または分析する形態で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は、vServer275A−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プロトコルは、IEEE 802.3によって網羅されるプロトコル等のIEEE広域ネットワーク(WAN)またはローカルエリアネットワーク(LAN)プロトコル群のうちのいずれかを備え得る、イーサネット(登録商標)プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック310は、IEEE 802.11および/またはモバイルインターネットプロトコル等の任意のタイプおよび形態の無線プロトコルを備える。
TCP/IPベースのネットワークに照らして、メッセージングアプリケーションプログラミングインターフェース(MAPI)(電子メール)、ファイル転送プロトコル(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)マルチプロトコル圧縮、2)トランスポート制御プロトコルプーリング、3)トランスポート制御プロトコル多重化、4)トランスポート制御プロトコルバッファリング、および5)キャッシュマネージャを介したキャッシング、のうちの1つ以上のものを実施してもよい。加えて、加速プログラム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)オペレーティングシステムおよび/またはオペレーティングシステムのバージョン、2)オペレーティングシステムのサービスパック、3)起動しているサービス、4)起動しているプロセス、および5)ファイル、のうちのいずれか1つ以上のものを識別して決定してもよい。収集エージェント304はまた、クライアント上で以下、すなわち、1)ウイルス対策ソフトウェア、2)パーソナルファイアウォールソフトウェア、3)スパム対策ソフトウェア、および4)インターネットセキュリティソフトウェア、のうちのいずれか1つ以上のものの存在またはバージョンを識別して決定してもよい。ポリシエンジン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、VirtualServer、または仮想PCハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行し得る、仮想マシンプラットフォームを作成する、ハイパーバイザを実行するコンピューティングデバイス100は、ホストサーバと称される。これらの実施形態のうちの1つでは、例えば、コンピューティングデバイス100は、Citrix Systems, Inc.(Fort Lauderdale, FL)によって提供されるXEN SERVERである。
いくつかの実施形態では、ハイパーバイザ401は、コンピューティングデバイス上で実行する、オペレーティングシステム内で実行する。これらの実施形態のうちの1つでは、オペレーティングシステムおよびハイパーバイザ401上で実行するコンピューティングデバイスは、ホストオペレーティングシステム(コンピューティングデバイス上で実行するオペレーティングシステム)と、ゲストオペレーティングシステム(ハイパーバイザ401によって提供されるコンピューティングリソースパーティション内で実行するオペレーティングシステム)とを有すると言える。他の実施形態では、ハイパーバイザ401は、ホストオペレーティングシステム上で実行する代わりに、コンピューティングデバイス上でハードウェアと直接相互作用する。これらの実施形態のうちの1つでは、ハイパーバイザ401は、コンピューティングデバイスを備えるハードウェアを指す、「ベアメタル」上で実行していると言える。
いくつかの実施形態では、ハイパーバイザ401は、オペレーティングシステム410が実行する、仮想マシン406a−c(概して406)を作成してもよい。これらの実施形態のうちの1つでは、例えば、ハイパーバイザ401は、仮想マシン406を作成するように仮想マシンイメージをロードする。これらの実施形態のうちの別のものでは、ハイパーバイザ401は、仮想マシン406内でオペレーティングシステム410を実行する。これらの実施形態のうちのなおも別のものでは、仮想マシン406は、オペレーティングシステム410を実行する。
いくつかの実施形態では、ハイパーバイザ401は、コンピューティングデバイス100上で実行する仮想マシン406のためのプロセッサスケジューリングおよびメモリパーティション化を制御する。これらの実施形態のうちの1つでは、ハイパーバイザ401は、少なくとも1つの仮想マシン406の実行を制御する。これらの実施形態のうちの別のものでは、ハイパーバイザ401は、コンピューティングデバイス100によって提供される少なくとも1つのハードウェアリソースの抽象化を少なくとも1つの仮想マシン406に提示する。他の実施形態では、ハイパーバイザ401は、物理的プロセッサ能力が仮想マシン406に提示されるかどうかと、どのようにして提示されるかとを制御する。
制御オペレーティングシステム405は、ゲストオペレーティングシステムを管理して構成するための少なくとも1つのアプリケーションを実行してもよい。一実施形態では、制御オペレーティングシステム405は、管理アプリケーションを実行してもよく、そのような管理アプリケーションは、例えば、仮想マシンを実行すること、仮想マシンの実行を終了させること、または仮想マシンに配分するための物理リソースのタイプを識別することのための機能性を含む仮想マシンの実行を管理するための機能性へのアクセスを管理者に提供するユーザインターフェースを含むアプリケーション等である。別の実施形態では、ハイパーバイザ401は、ハイパーバイザ401によって作成される仮想マシン406内で制御オペレーティングシステム405を実行する。なおも別の実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100上の物理リソースに直接アクセスする権限を与えられている仮想マシン406内で実行する。いくつかの実施形態では、コンピューティングデバイス100a上の制御オペレーティングシステム405aは、ハイパーバイザ401aとハイパーバイザ401bとの間の通信を介して、コンピューティングデバイス100b上の制御オペレーティングシステム405bとデータを交換してもよい。このようにして、1つ以上のコンピューティングデバイス100は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス100のうちの1つ以上のものとデータを交換してもよい。これらの実施形態のうちの1つでは、本機能性は、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。これらの実施形態のうちの別のものでは、複数のハイパーバイザは、コンピューティングデバイス100のうちの1つの上で実行されるゲストオペレーティングシステムのうちの1つ以上のものを管理する。
一実施形態では、制御オペレーティングシステム405は、少なくとも1つのゲストオペレーティングシステム410と相互作用する権限を与えられている仮想マシン406内で実行する。別の実施形態では、ゲストオペレーティングシステム410は、ディスクまたはネットワークへのアクセスを要求するために、ハイパーバイザ401を介して制御オペレーティングシステム405と通信する。なおも別の実施形態では、ゲストオペレーティングシステム410および制御オペレーティングシステム405は、例えば、ハイパーバイザ401によって利用可能にされる複数の共有メモリページを介して等、ハイパーバイザ401によって確立される通信チャネルを介して通信してもよい。
いくつかの実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100によって提供されるネットワーキングハードウェアと直接通信するためのネットワークバックエンドドライバを含む。これらの実施形態のうちの1つでは、ネットワークバックエンドドライバは、少なくとも1つのゲストオペレーティングシステム110からの少なくとも1つの仮想マシン要求を処理する。他の実施形態では、制御オペレーティングシステム405は、コンピューティングデバイス100上の記憶要素と通信するためのブロックバックエンドドライバを含む。これらの実施形態のうちの1つでは、ブロックバックエンドドライバは、ゲストオペレーティングシステム410から受信される少なくとも1つの要求に基づいて、記憶要素からデータを読み取って書き込む。
一実施形態では、制御オペレーティングシステム405は、ツールスタック404を含む。別の実施形態では、ツールスタック404は、ハイパーバイザ401と相互作用すること、(例えば、第2のコンピューティングデバイス100b上の)他の制御オペレーティングシステム405と通信すること、またはコンピューティングデバイス100上の仮想マシン406b、406cを管理することのための機能性を提供する。別の実施形態では、ツールスタック404は、改良された管理機能性を仮想マシンファームの管理者に提供するためのカスタマイズされたアプリケーションを含む。いくつかの実施形態では、ツールスタック404および制御オペレーティングシステム405のうちの少なくとも1つは、コンピューティングデバイス100上で起動する仮想マシン406を遠隔で構成して制御するためのインターフェースを提供する、管理APIを含む。他の実施形態では、制御オペレーティングシステム405は、ツールスタック404を通してハイパーバイザ401と通信する。
一実施形態では、ハイパーバイザ401は、ハイパーバイザ401によって作成される仮想マシン406内でゲストオペレーティングシステム410を実行する。別の実施形態では、ゲストオペレーティングシステム410は、コンピューティング環境内のリソースへのアクセスをコンピューティングデバイス100のユーザに提供する。なおも別の実施形態では、リソースは、プログラム、アプリケーション、文書、ファイル、複数のアプリケーション、複数のファイル、実行可能プログラムファイル、デスクトップ環境、コンピューティング環境、またはコンピューティングデバイス100のユーザに利用可能にされる他のリソースを含む。さらに別の実施形態では、リソースは、コンピューティングデバイス100上への従来の直接インストール、アプリケーションストリーミングのための方法を介したコンピューティングデバイス100への配信、第2のコンピューティングデバイス100’上のリソースの実行によって生成され、プレゼンテーション層プロトコルを介してコンピューティングデバイス100に通信される、出力データのコンピューティングデバイス100への配信、第2のコンピューティングデバイス100’上で実行する仮想マシンを介したリソースの実行によって生成される、出力データのコンピューティングデバイス100への配信、またはUSBデバイス等のコンピューティングデバイス100に接続された可撤性記憶デバイスからの実行、またはコンピューティングデバイス100上で実行して出力データを生成する仮想マシンを介した実行を含むが、それらに限定されない、複数のアクセス方法を介して、コンピューティングデバイス100に配信されてもよい。いくつかの実施形態では、コンピューティングデバイス100は、リソースの実行によって生成される出力データを別のコンピューティングデバイス100’に伝送する。
一実施形態では、ゲストオペレーティングシステム410は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識していない完全仮想化仮想マシンを形成し、そのようなマシンは、「ドメインU HVM(ハードウェア仮想マシン)仮想マシン」と称されてもよい。別の実施形態では、完全仮想化マシンは、完全仮想化マシン内でオペレーティングシステムを実行するために、基本入出力システム(BIOS)をエミュレートするソフトウェアを含む。なおも別の実施形態では、完全仮想化マシンは、ハイパーバイザ401と通信することによって機能性を提供するドライバを含んでもよい。そのような実施形態では、ドライバは、それが仮想化された環境内で実行することを認識してもよい。別の実施形態では、ゲストオペレーティングシステム410は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識している、準仮想化仮想マシンを形成し、そのようなマシンは、「ドメインU PV仮想マシン」と称されてもよい。別の実施形態では、準仮想化マシンは、完全仮想化マシンが含まない、付加的ドライバを含む。なおも別の実施形態では、準仮想化マシンは、上記で説明されるように、制御オペレーティングシステム405に含まれる、ネットワークバックエンドドライバおよびブロックバックエンドドライバを含む。
ここで図4Bを参照すると、ブロック図が、少なくとも1つの物理ホストが仮想マシンを実行する、システム内の複数のネットワーク化されたコンピューティングデバイスの一実施形態を描写する。要するに、本システムは、管理コンポーネント404と、ハイパーバイザ401とを含む。本システムは、複数のコンピューティングデバイス100と、複数の仮想マシン406と、複数のハイパーバイザ401と、ツールスタック404または管理コンポーネント404と様々に称される複数の管理コンポーネントと、物理リソース421、428とを含む。複数の物理マシン100はそれぞれ、図1E−1Hおよび4Aに関連して上記で説明される、コンピューティングデバイス100として提供されてもよい。
さらに詳細には、物理ディスク428が、コンピューティングデバイス100によって提供され、仮想ディスク442の少なくとも一部を記憶する。いくつかの実施形態では、仮想ディスク442は、複数の物理ディスク428と関連付けられる。これらの実施形態のうちの1つでは、1つ以上のコンピューティングデバイス100は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス100のうちの1つ以上のものとデータを交換してもよく、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。いくつかの実施形態では、仮想マシン406が実行するコンピューティングデバイス100は、物理ホスト100またはホストマシン100と称される。
ハイパーバイザは、コンピューティングデバイス100上のプロセッサ上で実行する。ハイパーバイザは、物理ディスクへのある量のアクセスを仮想ディスクに配分する。一実施形態では、ハイパーバイザ401は、物理ディスク上のある量の空間を配分する。別の実施形態では、ハイパーバイザ401は、物理ディスク上の複数のページを配分する。いくつかの実施形態では、ハイパーバイザは、仮想マシン450を初期化して実行するプロセスの一部として、仮想ディスク442をプロビジョニングする。
一実施形態では、管理コンポーネント404aは、プール管理コンポーネント404aと称される。別の実施形態では、制御オペレーティングシステム405aと称され得る管理オペレーティングシステム405aは、管理コンポーネントを含む。いくつかの実施形態では、管理コンポーネントは、ツールスタックと称される。これらの実施形態のうちの1つでは、管理コンポーネントは、図4Aに関連して上記で説明されるツールスタック404である。他の実施形態では、管理コンポーネント404は、管理者等のユーザから、プロビジョニングおよび/または実行する仮想マシン406の識別を受信するためのユーザインターフェースを提供する。なおも他の実施形態では、管理コンポーネント404は、管理者等のユーザから、1つの物理マシン100から別の物理マシンへの仮想マシン406bの移動の要求を受信するためのユーザインターフェースを提供する。さらなる実施形態では、管理コンポーネント404aは、要求された仮想マシン406dを実行するコンピューティングデバイス100bを識別し、識別された仮想マシンを実行するように識別されたコンピューティングデバイス100b上のハイパーバイザ401bに命令し、そのような管理コンポーネントは、プール管理コンポーネントと称されてもよい。
ここで図4Cを参照すると、仮想アプリケーション配信コントローラまたは仮想アプライアンス450の実施形態が描写されている。要するに、図2Aおよび2Bに関連して上記で説明されるアプライアンス200(例えば、アプリケーション配信コントローラ)の機能性および/または実施形態のうちのいずれかが、図4Aおよび4Bに関連して上記で説明される仮想化された環境の任意の実施形態で展開されてもよい。アプライアンス200の形態で展開されているアプリケーション配信コントローラの機能性の代わりに、そのような機能性は、クライアント102、サーバ106、またはアプライアンス200等の任意のコンピューティングデバイス100上の仮想化された環境400で展開されてもよい。
ここで図4Cを参照すると、サーバ106のハイパーバイザ401上で動作する仮想アプライアンス450の実施形態の略図が描写されている。図2Aおよび2Bのアプライアンス200と同様に、仮想アプライアンス450は、可用性、性能、オフロード、およびセキュリティのための機能性を提供してもよい。可用性に関して、仮想アプライアンスは、ネットワークの層4と7との間で負荷平衡を行ってもよく、また、知的サービス健全性監視を実施してもよい。ネットワークトラフィック加速を介した性能増加に関して、仮想アプライアンスは、キャッシングおよび圧縮を実施してもよい。任意のサーバの処理をオフロードするために、仮想アプライアンスは、接続多重化およびプーリングおよび/またはSSL処理を実施してもよい。セキュリティに関して、仮想アプライアンスは、アプライアンス200のアプリケーションファイアウォール機能性およびSSL VPN機能のうちのいずれかを実施してもよい。
図2Aに関連して説明されるようなアプライアンス200のモジュールのうちのいずれかは、既製のサーバ等の任意のサーバ上の仮想化された環境300または仮想化されていない環境で実行可能な1つ以上のソフトウェアモジュールまたはコンポーネントとして展開可能である、仮想化されたアプライアンス配信コントローラ450の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。例えば、仮想アプライアンスは、コンピューティングデバイス上にインストールするインストールパッケージの形態で提供されてもよい。図2Aを参照すると、キャッシュマネージャ232、ポリシエンジン236、圧縮238、暗号化エンジン234、パケットエンジン240、GUI210、CLI212、シェルサービス214、および健全性監視プログラム216のうちのいずれかは、コンピューティングデバイスおよび/または仮想化された環境300の任意のオペレーティングシステム上で起動するソフトウェアコンポーネントまたはモジュールとして、設計および構築されてもよい。アプライアンス200の暗号化プロセッサ260、プロセッサ262、メモリ264、およびネットワークスタック267を使用する代わりに、仮想化されたアプライアンス400は、仮想化された環境400によって提供されるような、または別様にサーバ106上で利用可能であるような、これらのリソースのうちのいずれかを使用してもよい。
依然として図4Cを参照すると、要するに、いずれか1つ以上のvServer275A−275Nが、任意のサーバ106等の任意のタイプのコンピューティングデバイス100の仮想化された環境400で動作または実行されてもよい。図2Bに関連して説明されるアプライアンス200のモジュールまたは機能性のうちのいずれかは、サーバの仮想化された、または仮想化されていない環境のいずれかで動作するように設計および構築されてもよい。vServer275、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のために設計および構築されるソフトウェアは、マルチスレッドの並列アーキテクチャまたは別様にマルチコアアーキテクチャを利用するように、再設計され、および/または書き換えられてもよい。
nCoreまたはマルチコア技術と称される、アプライアンス200のマルチコアアーキテクチャは、アプライアンスが、いくつかの実施形態では、単一コア性能障壁を突破することと、マルチコアCPUの能力を活用することとを可能にする。図2Aに関連して説明される前のアーキテクチャでは、単一のネットワークまたはパケットエンジンが起動される。nCore技術およびアーキテクチャの複数のコアは、複数のパケットエンジンが同時に、および/または並行して起動することを可能にする。パケットエンジンが各コア上で起動すると、アプライアンスアーキテクチャは、付加的コアの処理容量を活用する。いくつかの実施形態では、これは、性能および拡張可能性の最大7倍の増加を提供する。
いくつかの実施形態では、システムは、機能並列性、データ並列性、またはフローベースのデータ並列性等の並列性または並列コンピューティング方式のタイプに従って、1つ以上のプロセッサコアにわたって、作業、タスク、負荷、またはネットワークトラフィック分布を実施することができる。例えば、n個のコアを伴うアプライアンス200’等のマルチコアシステムの実施形態は、図5に示される1からNの合計コア数を含むことができる。一実施形態では、作業、負荷、またはネットワークトラフィックは、分布がn個のコア505N(以降では集合的にコア505と称される)のうちの全てまたは2つ以上のものを横断するように、第1のコア505A、第2のコア505B、第3のコア505C、第4のコア505D、第5のコア505E、第6のコア505F、第7のコア505G等の間に分配されることができる。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のVIP275があってもよい。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のパケットエンジン240があってもよい。使用されるアプローチのうちのいずれかは、コアのうちのいずれかを横断する、異なる、様々な、または類似する作業負荷または性能レベルにつながり得る。機能並列性アプローチに関して、各コアは、パケットエンジン、VIP275、またはアプライアンス200によって提供される機能性のうちの異なる機能を起動してもよい。データ並列性アプローチでは、データは、データを受信するネットワークインターフェースカード(NIC)またはVIP275に基づいて、コアを横断して並列化または分配されてもよい。別のデータ並列性アプローチでは、処理は、データフローを各コアに分配することによって、コアを横断して分配されてもよい。
図5に関してさらに詳細には、いくつかの実施形態では、負荷、作業、またはネットワークトラフィックが、機能並列性に従って、コア505の間で分配されることができる。機能並列性は、1つ以上の個別の機能を果たす各コアに基づいてもよい。いくつかの実施形態では、第1のコアが、第1の機能を果たしてもよい一方で、第2のコアは、第2の機能を果たす。機能並列性アプローチでは、マルチコアシステムによって果たされる機能は、分割され、機能性に従って各コアに分配される。いくつかの実施形態では、機能並列性は、タスク並列性と称されてもよく、各プロセッサまたはコアが同一または異なるデータに異なるプロセスまたは機能を実行するときに、達成されてもよい。コアまたはプロセッサは、同一または異なるコードを実行してもよい。ある場合には、異なる実行スレッドまたはコードは、それらが作動するにつれて相互と通信してもよい。通信は、ワークフローの一部として、1つのスレッドから次のスレッドにデータをパスするように行われてもよい。
いくつかの実施形態では、機能並列性に従って、コア505を横断して作業を分配するステップは、ネットワーク入出力管理(NWI/O)、セキュアソケットレイヤ(SSL)暗号化および暗号解読、および伝送制御プロトコル(TCP)機能等の特定の機能に従って、ネットワークトラフィックを分配するステップを含むことができる。これは、使用されている機能性の量またはレベルに基づく、作業、性能、または計算負荷につながり得る。いくつかの実施形態では、データ並列性に従って、コア505を横断して作業を分配するステップは、特定のハードウェアまたはソフトウェアコンポーネントと関連付けられるデータを分配することに基づいて、ある量の作業を分配するステップを含むことができる。いくつかの実施形態では、フローベースのデータ並列性に従って、コア505を横断して作業を分配するステップは、各コア上の作業の量が、同様である、実質的に等しい、または比較的均等に分配され得るように、コンテキストまたはフローに基づいてデータを分配するステップを含むことができる。
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンまたはVIPによって提供される複数の機能性のうちの1つ以上の機能性を起動するように構成されてもよい。例えば、コア1が、アプライアンス200’のためのネットワークI/O処理を実施してもよい一方で、コア2は、アプライアンスのためのTCP接続管理を実施する。同様に、コア3が、SSLオフローディングを実施してもよい一方で、コア4は、層7またはアプリケーション層処理およびトラフィック管理を実施してもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、1つを上回る機能を果たしてもよい。コアのうちのいずれかは、図2Aおよび2Bと併せて識別および/または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、機能別の分割は、性能または負荷の異なるレベルで起動する、異なるコアにつながり得る。
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンによって提供される複数の機能性のうちの1つ以上の機能性を起動するように構成されてもよい。例えば、コア1が、アプライアンス200’のためのネットワークI/O処理を実施してもよい一方で、コア2は、アプライアンスのためのTCP接続管理を実施する。同様に、コア3が、SSLオフローディングを実施してもよい一方で、コア4は、層7またはアプリケーション層処理およびトラフィック管理を実施してもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、1つを上回る機能を果たしてもよい。コアのうちのいずれかは、図2Aおよび2Bと併せて識別および/または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、機能別の分割は、負荷または性能の異なるレベルで起動する、異なるコアにつながり得る。
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、第1のコア、すなわち、コア1 505AがネットワークI/O機能性と関連付けられる処理アプリケーションおよびプロセスを実行し得る。ネットワークI/Oと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、NW I/Oと関連付けられるポート宛先を有する、発信および着信パケットは、NW I/Oポートと関連付けられる全てのネットワークトラフィックをハンドリングすることに専用である、コア1 505Aに向かってダイレクトされるであろう。同様に、コア2 505Bは、SSL処理と関連付けられる機能性をハンドリングすることに専用であって、コア4 505Dは、全てのTCPレベル処理および機能性をハンドリングすることに専用であり得る。
ネットワークI/O、SSL、およびTCP等の機能を図示するが、他の機能もコアに割り当てられることができる。これらの他の機能は、本明細書に説明される機能または動作のうちのいずれか1つ以上のものを含むことができる。例えば、図2Aおよび2Bと併せて説明される機能のうちのいずれかは、機能性ベースでコアを横断して分配されてもよい。ある場合には、第1のVIP275Aが、第1のコア上で起動してもよい一方で、異なる構成を伴う第2のVIP275Bは、第2のコア上で起動してもよい。いくつかの実施形態では、各コア505が特定の機能と関連付けられる処理をハンドリングすることができるように、各コア505は、その特定の機能性をハンドリングすることができる。例えば、コア2 505Bが、SSLオフローディングをハンドリングしてもよい一方で、コア4 505Dは、アプリケーション層処理およびトラフィック管理をハンドリングしてもよい。
他の実施形態では、作業、負荷、またはネットワークトラフィックが、任意のタイプおよび形態のデータ並列性に従って、コア505の間で分配されてもよい。いくつかの実施形態では、データ並列性は、異なる分配されたデータ上で同一のタスクまたは機能性を果たす各コアによって、マルチコアシステムにおいて達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードが、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令が、動作を制御するが、同一コードを実行してもよい。いくつかの実施形態では、データ並列性が、パケットエンジン、vServer(VIP)275A−C、ネットワークインターフェースカード(NIC)、および/またはアプライアンス200上に含まれる、またはそれと関連付けられる任意の他のネットワーキングハードウェアまたはソフトウェアの観点から、達成される。例えば、各コアは、同一パケットエンジンまたはVIPコードまたは構成を起動してもよいが、分配されたデータの異なるセット上で動作してもよい。各ネットワーキングハードウェアまたはソフトウェア構築物は、異なる、様々な、または実質的に同一の量のデータを受信することができ、結果として、様々な、異なる、または比較的同一の量の負荷を有し得る。
データ並列性アプローチの場合、作業は、VIP、NIC、および/またはVIPまたはNICのデータフローに基づいて、分割されて分配されてもよい。これらのアプローチのうちの1つでは、マルチコアシステムの作業は、データの分配されたセット上に各VIP作業を有することによって、VIPの間で分割または分配されてもよい。例えば、各コアは、1つ以上のVIPを起動するように構成されてもよい。ネットワークトラフィックは、そのトラフィックをハンドリングする各VIPのためのコアに分配されてもよい。これらのアプローチのうちの別のものでは、アプライアンスの作業は、いずれのNICがネットワークトラフィックを受信するかに基づいて、コアの間で分割または分配されてもよい。例えば、第1のNICのネットワークトラフィックが、第1のコアに分配されてもよい一方で、第2のNICのネットワークトラフィックは、第2のコアに分配されてもよい。ある場合には、コアは、複数のNICからのデータを処理してもよい。
VIP1 275A、VIP2 275B、およびVIP3 275Cの場合のように、単一のコア505と関連付けられる単一のvServerを図示する。いくつかの実施形態では、単一のvServerは、1つ以上のコア505と関連付けられることができる。対照的に、1つ以上のvServerは、単一のコア505と関連付けられることができる。vServerをコア505と関連付けるステップは、その特定のvServerと関連付けられる全ての機能を処理するように、そのコア505を含んでもよい。いくつかの実施形態では、各コアは、同一コードおよび構成を有する、VIPを実行する。他の実施形態では、各コアは、同一コードを有するが、異なる構成を有する、VIPを実行する。いくつかの実施形態では、各コアは、異なるコードと、同一または異なる構成とを有する、VIPを実行する。
vServerのように、NICはまた、特定のコア505と関連付けられることもできる。多くの実施形態では、NICがデータパケットを受信または伝送するときに、特定のコア505がデータパケットを受信および伝送することに関与する処理をハンドリングするように、NICは、1つ以上のコア505に接続されることができる。一実施形態では、単一のNICは、NIC1およびNIC2の場合のように、単一のコア505と関連付けられることができる。他の実施形態では、1つ以上のNICは、単一のコア505と関連付けられることができる。他の実施形態では、単一のNICは、1つ以上のコア505と関連付けられることができる。これらの実施形態では、負荷は、各コア505が実質的に類似する量の負荷を処理するように、1つ以上のコア505の間で分配され得る。NICと関連付けられるコア505は、その特定のNICと関連付けられる全ての機能および/またはデータを処理してもよい。
VIPまたはNICのデータに基づいて、コアを横断して作業を分配するステップは、独立性のレベルを有し得るが、いくつかの実施形態では、これは、コアの不平衡使用または変動する負荷につながり得る。
いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、任意のタイプおよび形態のデータフローに基づいて、コア505の間で分配されることができる。これらのアプローチのうちの別のものでは、作業は、データフローに基づいてコアの間で分割または分配されてもよい。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの1つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求/応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス200’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。
フローベースのデータ並列性では、データの分布は、要求/応答ペアリング、トランザクション、セッション、接続、またはアプリケーション通信等の任意のタイプのデータのフローに関連する。例えば、クライアントとアプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの1つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。データフローの分布は、各コア505が、実質的に等しい、または比較的均等に分配された量の負荷、データ、またはネットワークトラフィックを搬送するようなものであってもよい。
いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求/応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス200’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。一実施形態では、データフローは、トランザクションまたは一連のトランザクションに基づいて、分配されることができる。本トランザクションは、いくつかの実施形態では、クライアントとサーバとの間にあることができ、IPアドレスまたは他のパケット識別子によって特徴付けられることができる。例えば、コア1 505Aは、特定のクライアントと特定のサーバとの間のトランザクションに専用であることができ、したがって、コア1 505A上の負荷は、特定のクライアントとサーバとの間のトランザクションと関連付けられるネットワークトラフィックから成ってもよい。ネットワークトラフィックをコア1 505Aに配分することは、特定のクライアントまたはサーバのいずれかから生じる全てのデータパケットをコア1 505Aにルーティングすることによって、達成されることができる。
作業または負荷は、部分的にトランザクションに基づいてコアに分配されることができるが、他の実施形態では、負荷または作業は、パケット毎ベースで配分されることができる。これらの実施形態では、アプライアンス200は、データパケットを傍受し、それらを、最少量の負荷を有するコア505に配分することができる。例えば、コア1上の負荷515Aが、残りのコア505B−N上の負荷より少ないため、アプライアンス200は、第1の着信データパケットをコア1 505Aに配分し得る。いったん第1のデータパケットがコア1 505Aに配分されると、コア1 505A上の負荷515Aの量は、第1のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス200が第2のデータパケットを傍受するとき、コア4 505Dが第2の最少量の負荷を有するため、アプライアンス200は、負荷をコア4 505Dに配分するであろう。最少量の負荷を伴うコアにデータパケットを配分することは、いくつかの実施形態では、各コア505に分配される負荷が実質的に等しいままであることを確実にすることができる。
他の実施形態では、負荷は、ネットワークトラフィックのある区分が特定のコア505に配分される、単位毎ベースで配分されることができる。上記の実施例は、パケット毎ベースで負荷平衡を例証する。他の実施形態では、負荷は、10、100、または1,000個毎のパケットが、最少量の負荷を有するコア505に配分されるように、パケットの数に基づいて配分されることができる。コア505に配分されるパケットの数は、アプリケーション、ユーザ、または管理者によって決定される数であることができ、ゼロより大きい任意の数であることができる。なおも他の実施形態では、負荷は、パケットが所定の時間量にわたって特定のコア505に分配されるように、時間メトリックに基づいて配分されることができる。これらの実施形態では、パケットは、5ミリ秒にわたって、またはユーザ、プログラム、システム、管理者によって、または別様に決定される、任意の時間期間にわたって、特定のコア505に配分されることができる。所定の時間期間が経過した後、データパケットが、所定の時間期間にわたって異なるコア505に伝送される。
1つ以上のコア505の間で作業、負荷、またはネットワークトラフィックを分配するためのフローベースのデータ並列性方法は、上記の実施形態の任意の組み合わせを備えることができる。これらの方法は、アプライアンス200の任意の部分によって、パケットエンジン等のコア505のうちの1つの上で実行するアプリケーションまたは実行可能命令のセットによって、またはアプライアンス200と通信するコンピューティングデバイス上で実行する任意のアプリケーション、プログラム、またはエージェントによって、実施されることができる。
機能およびデータ並列性計算方式は、機能並列性、データ並列性、フローベースのデータ並列性、またはそれらの任意の部分を包含する、ハイブリッド並列性または分散処理方式を生成するように、任意の様式で組み合わせられることができる。ある場合には、マルチコアシステムは、1つ以上のコア505の間で負荷を分配するために、任意のタイプおよび形態の負荷平衡方式を使用してもよい。負荷平衡方式は、機能およびデータ並列性方式のうちのいずれかまたはそれらの組み合わせとの任意の組み合わせで、使用されてもよい。
マルチコアシステムの実施形態は、任意のタイプおよび形態の1つ以上のシステム、アプライアンス、デバイス、またはコンポーネントであってもよい。本システムは、いくつかの実施形態では、1つ以上の処理コア505A−Nを有する、アプライアンス200内に含まれることができる。システムはさらに、メモリバスと通信する、1つ以上のパケットエンジン(PE)またはパケット処理エンジン(PPE)を含むことができる。メモリバスは、1つ以上の処理コア505A−Nと通信するために使用されてもよい。また、システム内には、1つ以上のネットワークインターフェースカード(NIC)と、1つ以上の処理コア505A−Nとさらに通信し得るフローディストリビュータとが含まれることができる。フローディストリビュータは、受信側スケーラ(RSS)または受信側スケーリング(RSS)モジュールを備えることができる。
一実施形態では、パケットエンジンは、図2Aおよび2Bに説明されるアプライアンスの任意の部分等の本明細書に説明されるアプライアンス200の任意の部分を備えることができる。パケットエンジンは、いくつかの実施形態では、以下の要素、すなわち、パケットエンジン240、ネットワークスタック267、キャッシュマネージャ232、ポリシエンジン236、圧縮エンジン238、暗号化エンジン234、GUI210、CLI212、シェルサービス214、監視プログラム216、およびメモリバスまたは1つ以上のコア505A−Nのいずれかの1つからデータパケットを受信することが可能な任意の他のソフトウェアまたはハードウェア要素のうちのいずれかを備えることができる。いくつかの実施形態では、パケットエンジンは、1つ以上のvServer275A−Nまたはその任意の部分を備えることができる。他の実施形態では、パケットエンジンは、以下の機能性、すなわち、SSL VPN280、イントラネットUP282、切替284、DNS286、パケット加速288、App FW290、監視エージェント197によって提供される監視等の監視、TCPスタックとして機能することと関連付けられる機能性、負荷平衡、SSLオフローディングおよび処理、コンテンツ切替、ポリシ評価、キャッシング、圧縮、エンコード、解凍、デコード、アプリケーションファイアウォール機能性、XML処理および加速、およびSSL VPNコネクティビティの任意の組み合わせを提供することができる。
パケットエンジンは、いくつかの実施形態では、特定のサーバ、ユーザ、クライアント、またはネットワークと関連付けられることができる。パケットエンジンが特定のエンティティと関連付けられるとき、そのパケットエンジンは、そのエンティティと関連付けられるデータパケットを処理することができる。例えば、パケットエンジンが第1のユーザと関連付けられる場合、そのパケットエンジンは、第1のユーザによって生成されるパケット、または第1のユーザと関連付けられる宛先アドレスを有するパケットを処理し、それに作用するであろう。同様に、パケットエンジンは、パケットエンジンが、特定のエンティティによって生成されていない、またはそのエンティティに向けられていない任意のデータパケットを処理し、別様にそれに作用することができるように、そのエンティティと関連付けられないことを選定してもよい。
ある事例では、パケットエンジンは、機能および/またはデータ並列性方式のうちのいずれかを実施するように構成されることができる。これらの事例では、パケットエンジンは、分布が並列性または分布方式に従うように、処理コア505A−Nの間で機能またはデータを分配することができる。いくつかの実施形態では、単一のパケットエンジンが、負荷平衡方式を実施する一方で、他の実施形態では、1つ以上のパケットエンジンが、負荷平衡方式を実施する。各コア505A−Nは、一実施形態では、負荷平衡がパケットエンジンによって実施され得るように、特定のパケットエンジンと関連付けられることができる。負荷平衡は、本実施形態では、パケットエンジンが負荷を分配する場所を集合的に決定することができるように、コア505と関連付けられる各パケットエンジンが、コアと関連付けられる他のパケットエンジンと通信することを要求してもよい。本プロセスの一実施形態は、負荷のために各パケットエンジンから投票を受信する、アービタを含むことができる。アービタは、部分的に、エンジンの投票の時期、ある場合には、エンジンの関連付けられるコア505上の負荷の現在の量と関連付けられる優先順位値に基づいて、負荷を各パケットエンジンに分配することができる。
コア上で起動するパケットエンジンのうちのいずれかは、ユーザモード、カーネル、またはそれらの任意の組み合わせで起動してもよい。いくつかの実施形態では、パケットエンジンは、ユーザまたはアプリケーション空間内で起動するアプリケーションまたはプログラムとして動作する。これらの実施形態では、パケットエンジンは、カーネルによって提供される任意の機能性にアクセスするために、任意のタイプおよび形態のインターフェースを使用してもよい。いくつかの実施形態では、パケットエンジンは、カーネルモードで、またはカーネルの一部として動作する。いくつかの実施形態では、パケットエンジンの第1の部分が、ユーザモードで動作する一方で、パケットエンジンの第2の部分は、カーネルモードで動作する。いくつかの実施形態では、第1のコア上の第1のパケットエンジンが、カーネルモードで実行する一方で、第2のコア上の第2のパケットエンジンは、ユーザモードで実行する。いくつかの実施形態では、パケットエンジンまたはその任意の部分は、NICまたはその任意のドライバ上で、またはそれと連動して動作する。
いくつかの実施形態では、メモリバスは、任意のタイプおよび形態のメモリまたはコンピュータバスであることができる。システムは、任意の数のメモリバスを備えることができる。一実施形態では、各パケットエンジンは、1つ以上の個々のメモリバスと関連付けられることができる。
NICは、いくつかの実施形態では、本明細書に説明されるネットワークインターフェースカードまたは機構のうちのいずれかであることができる。NICは、任意の数のポートを有することができる。NICは、任意のタイプおよび形態のネットワーク104に接続するように設計および構築されることができる。システムは、任意の数のNICを備えることができる。いくつかの実施形態では、各コア505A−Nは、1つ以上の単一のNICと関連付けられることができる。したがって、各コア505は、特定のコア505専用の単一のNICと関連付けられることができる。
コア505A−Nは、本明細書に説明されるプロセッサのうちのいずれかを備えることができる。さらに、コア505A−Nは、本明細書に説明されるコア505構成のうちのいずれかに従って構成されることができる。なおもさらに、コア505A−Nは、本明細書に説明されるコア505機能性のうちのいずれかを有することができる。図5は、7つのコア505A−Gを図示するが、任意の数のコア505が、システム内に含まれることができる。具体的には、システムは、「N」個のコアを備えることができ、「N」は、ゼロより大きい整数である。
コアは、使用するためにそのコアに配分される、または割り当てられる、メモリを有する、または使用してもよい。メモリは、そのコアのプライベートまたはローカルメモリと見なされ、そのコアのみによってアクセス可能であり得る。コアは、共有される、または複数のコアに割り当てられる、メモリを有する、または使用してもよい。メモリは、1つを上回るコアによってアクセス可能である公共または共有メモリと見なされてもよい。コアは、プライベートおよび公共メモリの任意の組み合わせを使用してもよい。各コアに対する別個のアドレス空間を用いることで、あるレベルの協調が、同一アドレス空間を使用する場合から排除される。別個のアドレス空間を用いることで、コアは、他のコアとの対立について心配することなく、コアの独自のアドレス空間内で情報およびデータに作業を実施することができる。各パケットエンジンは、TCPおよび/またはSSL接続のための別個のメモリプールを有してもよい。
図5に関連して上記で説明されるコア505の機能性および/または実施形態のうちのいずれかが、図4Aおよび4Bに関連して上記で説明される仮想化された環境の任意の実施形態で展開されることができる。物理プロセッサ505の形態で展開されているコア505の機能性の代わりに、そのような機能性は、クライアント102、サーバ106、またはアプライアンス200等の任意のコンピューティングデバイス100上の仮想化された環境400で展開されてもよい。他の実施形態では、アプライアンスまたは単一のデバイスの形態で展開されているコア505の機能性の代わりに、機能性は、任意の配列で複数のデバイスを横断して展開されてもよい。例えば、1つのデバイスは、2つ以上のコアを備えてもよく、別のデバイスは、2つ以上のコアを備えてもよい。例えば、マルチコアシステムは、コンピューティングデバイスのクラスタ、サーバファーム、またはコンピューティングデバイスのネットワークを含んでもよい。いくつかの実施形態では、コアの形態で展開されているコア505の機能性の代わりに、機能性は、複数の単一コアプロセッサ等の複数のプロセッサ上で展開されてもよい。
一実施形態では、コア505は、任意のタイプおよび形態のプロセッサであってもよい。いくつかの実施形態では、コアは、本明細書に説明される任意のプロセッサまたは中央処理ユニットと実質的に同様に機能することができる。いくつかの実施形態では、コア505は、本明細書に説明される任意のプロセッサの任意の部分を備えてもよい。図5は、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を提供してもよい。
フローディストリビュータは、任意のタイプおよび形態のハードウェア上で実行する、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、または任意のタイプおよび形態の実行可能命令であることができる。いくつかの実施形態では、フローディストリビュータは、本明細書に説明される動作および機能のうちのいずれかを果たす回路の任意の設計および構築であることができる。いくつかの実施形態では、フローディストリビュータは、コア505および/またはコア上で起動するパケットエンジンまたはVIPの間のデータパケットの分布を分配、転送、ルーティング、および/または管理する。フローディストリビュータは、いくつかの実施形態では、インターフェースマスタと称されることができる。一実施形態では、フローディストリビュータは、アプライアンス200のコアまたはプロセッサ上で実行する実行可能命令のセットを備える。別の実施形態では、フローディストリビュータは、アプライアンス200と通信するコンピューティングマシン上で実行する実行可能命令のセットを備える。いくつかの実施形態では、フローディストリビュータは、ファームウェア等のNIC上で実行する実行可能命令のセットを備える。なおも他の実施形態では、フローディストリビュータは、コアまたはプロセッサの間でデータパケットを分配するソフトウェアおよびハードウェアの任意の組み合わせを備える。一実施形態では、フローディストリビュータが、コア505A−Nのうちの少なくとも1つの上で実行する一方で、他の実施形態では、各コア505A−Nに割り当てられる別個のフローディストリビュータが、関連付けられるコア505A−N上で実行する。フローディストリビュータは、コアを横断するフローの平衡をとるために、任意のタイプおよび形態の統計的または確率的アルゴリズムまたは意思決定を使用してもよい。NIC等のアプライアンスのハードウェアまたはカーネルは、NICおよび/またはコアを横断して順次動作をサポートするように設計および構築されてもよい。
システムが1つ以上のフローディストリビュータを備える、実施形態では、各フローディストリビュータは、プロセッサ505またはパケットエンジンと関連付けられることができる。フローディストリビュータは、各フローディストリビュータが、システム内で実行する他のフローディストリビュータと通信することを可能にする、インターフェース機構を備えることができる。1つの事例では、1つ以上のフローディストリビュータは、相互と通信することによって、負荷の平衡をとる方法を決定することができる。本プロセスは、次いで、いずれのフローディストリビュータが負荷を受容するべきかを決定する、アービタに投票を提出するために、上記で説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第1のフローディストリビュータは、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が所定の閾値を上回ること、関連付けられるコア上の負荷が所定の閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷より少ないこと、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを転送する場所を決定するために使用されることができる任意の他の測定基準のうちのいずれかに基づいて、第1のデータパケットを関連付けられるコアに転送するかどうかを決定することができる。
フローディストリビュータは、本明細書に説明されるもの等の分布、計算、または負荷平衡方式に従って、コア505の間でネットワークトラフィックを分配することができる。一実施形態では、フローディストリビュータは、機能並列性分布方式、データ並列性負荷分布方式、フローベースのデータ並列性分布方式、またはこれらの分布方式または複数のプロセッサの間で負荷を分配するための任意の負荷平衡方式の任意の組み合わせのうちのいずれか1つに従って、ネットワークトラフィックを分配することができる。したがって、フローディストリビュータは、データパケットを取り込み、動作負荷平衡または分布方式に従って、プロセッサを横断してそれらを分配することによって、負荷ディストリビュータとして作用することができる。一実施形態では、フローディストリビュータは、それに応じて、パケット、作業、または負荷を分配する方法を決定する1つ以上の動作、機能、または論理を備えることができる。なおも他の実施形態では、フローディストリビュータは、ソースアドレスおよびデータパケットと関連付けられる宛先アドレスを識別し、それに応じて、パケットを分配し得る、1つ以上のサブ動作、機能、または論理を備えることができる。
いくつかの実施形態では、フローディストリビュータは、1つ以上のコア505の間でデータパケットを分配する、受信側スケーリング(RSS)ネットワークドライバ、モジュール、または任意のタイプおよび形態の実行可能命令を備えることができる。RSSモジュールは、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、RSSモジュールは、コア505A−Nを横断して、またはマルチプロセッサネットワーク内の複数のプロセッサの間でデータパケットを分配するように、フローディストリビュータと連動して作動する。RSSモジュールは、いくつかの実施形態では、NIC内で実行することができ、他の実施形態では、コア505のうちのいずれか1つの上で実行することができる。
いくつかの実施形態では、RSSモジュールは、MICROSOFT受信側スケーリング(RSS)方式を使用する。一実施形態では、RSSは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡をとられることを可能にする、Microsoft拡張可能ネットワーキングイニシアチブ技術である。RSSは、ネットワークパケットを処理するためのコアまたはプロセッサを決定するために任意のタイプおよび形態のハッシング方式を使用してもよい。
RSSモジュールは、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モジュールは、間接テーブルを変更することによって、ネットワークの平衡を再びとり、ネットワーク負荷の平衡を再びとってもよい。
いくつかの実施形態では、マルチコアシステムは、RSSドライバまたはRSSモジュールを含まない。これらの実施形態のうちのいくつかでは、ソフトウェアステアリングモジュール(図示せず)またはシステム内のRSSモジュールのソフトウェア実施形態が、パケットをマルチコアシステム内のコア505にステアリングするように、フローディストリビュータと連動して、またはその一部として動作することができる。
フローディストリビュータは、いくつかの実施形態では、アプライアンス200の上、コア505のうちのいずれか1つの上、およびマルチコアシステム内に含まれるデバイスまたはコンポーネントのうちのいずれか1つの上の任意のモジュールまたはプログラム内で実行する。いくつかの実施形態では、フローディストリビュータが、第1のコア505A上で実行することができる一方で、他の実施形態では、フローディストリビュータは、NIC上で実行することができる。なおも他の実施形態では、フローディストリビュータのインスタンスが、マルチコアシステムに含まれる各コア505上で実行することができる。本実施形態では、フローディストリビュータの各インスタンスは、コア505を横断してパケットを往復して転送するように、フローディストリビュータの他のインスタンスと通信することができる。要求パケットへの応答が、同一のコアによって処理されない場合がある、すなわち、第1のコアが要求を処理する一方で、第2のコアが応答を処理する、状況が存在する。これらの状況では、フローディストリビュータのインスタンスは、パケットを傍受し、それを所望または正しいコア505に転送することができ、すなわち、フローディストリビュータインスタンスは、応答を第1のコアに転送することができる。フローディストリビュータの複数のインスタンスが、任意の数のコア505およびコア505の任意の組み合わせの上で実行することができる。
フローディストリビュータは、いずれか1つ以上のルールまたはポリシに応答して動作してもよい。ルールは、ネットワークパケット、データ、またはデータフローを受信するようにコアまたはパケット処理エンジンを識別してもよい。ルールは、ソースおよび宛先IPアドレスおよびソースおよび宛先ポートの4タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。ルールによって規定されるタプルに合致する、受信されたパケットに基づいて、フローディストリビュータは、パケットをコアまたはパケットエンジンに転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび/またはコア間メッセージングを介して、コアに転送される。
フローディストリビュータは、マルチコアシステム内で実行することができるが、いくつかの実施形態では、フローディストリビュータは、マルチコアシステムから遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行することができる。そのような実施形態では、フローディストリビュータは、データパケットを取り込み、1つ以上のコア505を横断してパケットを分配するように、マルチコアシステムと通信することができる。フローディストリビュータは、一実施形態では、アプライアンス200に向けられているデータパケットを受信し、分布方式を受信されたデータパケットに適用し、データパケットをマルチコアシステムの1つ以上のコア505に分配することができる。一実施形態では、フローディストリビュータは、各パケットがマルチコアシステムのサブノードに向かって標的化されるように、各パケットと関連付けられるメタデータを改変することによって、ルータが特定のコア505を標的化し得るように、ルータまたは他のアプライアンスに含まれることができる。そのような実施形態では、CISCOのvnタグ機構が、適切なメタデータを用いて各パケットを改変する、またはタグ付けするために使用されることができる。
図5には、1つ以上の処理コア505A−Nを備える、マルチコアシステム575の実施形態が図示されている。要するに、コア505のうちの1つは、制御コア505Aとして指定されることができ、かつ他のコア505のための制御プレーン570として使用されることができる。他のコアが、データプレーン内で動作する二次コアであってもよい一方で、制御コアは、制御プレーンを提供する。コア505A−Nは、グローバルキャッシュ580を共有してもよい。制御コアが、制御プレーンを提供する一方で、マルチコアシステム内の他のコアは、データプレーンを形成または提供する。これらのコアが、ネットワークトラフィック上でデータ処理機能性を果たす一方で、制御は、マルチコアシステムの初期化、構成、および制御を提供する。
さらに図5を参照すると、さらに詳細には、コア505A−Nおよび制御コア505Aは、本明細書に説明される任意のプロセッサであることができる。さらに、コア505A−Nおよび制御コア505Aは、図5に説明されるシステム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を備えることができる。図5は、制御コアとしてコア1 505Aを図示するが、制御コアは、アプライアンス200またはマルチコアシステム内の任意のコアであることができる。さらに、単一の制御コアのみが描写されているが、システム575は、それぞれ、システムに対するあるレベルの制御を有する、1つ以上の制御コアを備えることができる。いくつかの実施形態では、1つ以上の制御コアはそれぞれ、システム575の特定の側面を制御することができる。例えば、1つのコアが、いずれの分布方式を使用するかを決定することを制御することができる一方で、別のコアは、グローバルキャッシュ580のサイズを決定することができる。
マルチコアシステムの制御プレーンは、専用管理コアとして、またはマスタコアとしてのコアの指定および構成であってもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの動作および機能性の制御、管理、および協調を提供してもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの初期化および構成を含む、同一コアの間のシステムのメモリの配分および使用の制御、管理、および協調を提供してもよい。いくつかの実施形態では、制御プレーンは、データフローに基づいて、コアへのデータフローの割当およびコアへのネットワークパケットの分布を制御するためのフローディストリビュータを含む。いくつかの実施形態では、制御プレーンコアは、パケットエンジンを起動し、他の実施形態では、制御プレーンコアは、本システムの他のコアの管理および制御に専用である。
制御コア505Aは、どれだけのメモリが各コア505に配分されるべきかを決定するステップ、またはいずれのコア505が特定の機能またはハードウェア/ソフトウェアエンティティをハンドリングするように割り当てられるべきかを決定するステップ等の他のコア505に対するあるレベルの制御を実行することができる。制御コア505Aは、いくつかの実施形態では、制御プレーン570内でこれらのコア505に対する制御を実行してもよい。したがって、制御コア505Aによって制御されないプロセッサが制御プレーン570の外側に存在することができる。制御プレーン570の境界を決定するステップは、システム575内で実行する制御コア505Aまたはエージェントによって、制御コア505Aによって制御される、これらのコア505のリストを維持するステップを含むことができる。制御コア505Aは、以下、すなわち、コアの初期化、コアが利用不可能であるときを決定するステップ、1つのコアが故障したときに負荷を他のコア505に再配分するステップ、いずれの分布方式を実装するかを決定するステップ、いずれのコアがネットワークトラフィックを受信するべきかを決定するステップ、どれだけのキャッシュが各コアに配分されるべきかを決定するステップ、特定の機能または要素を特定のコアに割り当てるかどうかを決定するステップ、コアが相互と通信することを可能にするかどうかを決定するステップ、グローバルキャッシュ580のサイズを決定するステップ、およびシステム575内のコアの機能、構成、または動作の任意の他の決定のうちのいずれかを制御することができる。
(F.分散クラスタアーキテクチャを提供するためのシステムおよび方法)
前の節で議論されるように、トランジスタ間隔およびCPU速度増加に対する限界を克服するために、多くのCPU製造業者は、単一だがより高速のCPUで可能なものを超えるよう性能を改良するように、マルチコアCPUを組み込んでいる。類似する、またはさらなる性能獲得が、単一またはマルチコアのいずれかである複数のアプライアンスを、分散またはクラスタ化アプライアンスとしてともに動作させることによって、得られてもよい。個々のコンピューティングデバイスまたはアプライアンスは、クラスタのノードと称されてもよい。集中型管理システムが、ノードが単一のコンピューティングシステムとして連動することを可能にするように、負荷平衡、分布、構成、または他のタスクを実施してもよい。外部に、またはサーバおよびクライアントを含む、他のデバイスに対して、多くの実施形態では、クラスタは、典型的な個々のアプライアンスの性能を超える性能を伴うものではあるが、単一の仮想アプライアンスまたはコンピューティングデバイスと見なされてもよい。
ここで図6を参照すると、コンピューティングデバイスクラスタまたはアプライアンスクラスタ600の実施形態が図示されている。複数のアプライアンス200a−200n、またはデスクトップコンピュータ、サーバ、ラックマウントサーバ、ブレードサーバ、または任意の他のタイプおよび形態のコンピューティングデバイス等のノードと称されることもある、他のコンピューティングデバイスが、単一のアプライアンスクラスタ600に参入されてもよい。アプライアンスクラスタと称されるが、多くの実施形態では、クラスタは、限定ではないが、アプリケーションサーバ、ネットワーク記憶サーバ、バックアップサービス、または任意の他のタイプのコンピューティングデバイスとして動作してもよい。多くの実施形態では、アプライアンスクラスタ600は、アプライアンス200、WAN最適化デバイス、ネットワーク加速デバイス、または上記で議論される他のデバイスの機能の多くを果たすために使用されてもよい。
いくつかの実施形態では、アプライアンスクラスタ600は、同じアプライアンス、1つ以上のシャーシ内のブレードサーバ、デスクトップまたはラックマウントコンピューティングデバイス、または他のデバイス等のコンピューティングデバイスの同種セットを備えてもよい。他の実施形態では、アプライアンスクラスタ600は、アプライアンスの異なるモデル、混合アプライアンスおよびサーバ、またはコンピューティングデバイスの任意の他のセットを含む、デバイスの異種または混合セットを備えてもよい。これは、アプライアンスクラスタ600が、例えば、新しいモデルまたはデバイスを用いて経時的に拡張またはアップグレードされることを可能にし得る。
いくつかの実施形態では、アプライアンスクラスタ600の各コンピューティングデバイスまたはアプライアンス200は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分布方法は、本明細書で議論されるノード管理および分布方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、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のサービスのインスタンスと、第2のサービスのインスタンスとを有する、パスをそれぞれ含む、サービスチェーンを識別し、サービスチェーンの各々に対するパス重量を決定し、負荷平衡機能およびパス重量に基づいて、サービスチェーンから1つのサービスチェーンを選択することができる。
サービスチェーンは、ともにリンクまたはグループ化されるサービスのインスタンスを指すことができる。例えば、クライアントコンピューティングデバイスは、サーバに向かってネットワークを通してパケットを伝送することができる。パケットは、パケットが宛先サーバに到達することに先立って、種々の方法で処理されてもよい。例えば、ネットワークのプロバイダは、宛先サーバに転送されることができる前に、パケット(またはフロー)上で行われる具体的動作についてのポリシのセットを有してもよい。パケットのパスの中のアプライアンスは、例えば、ファイアウォールまたは侵入検出システムを含み得る、これらのポリシを実装することができる。
ファイアウォールは、ネットワークアドレス変換、ディープパケットインスペクション、およびアクセス制御等のサービスのセットを提供してもよい。ファイアウォールは、これらの異なるサービスに分割または分離され、コンピューティングインフラストラクチャによって実行されることができる。例えば、コンピューティングインフラストラクチャによって実行される第1のインスタンスまたは仮想マシンは、ネットワークアドレス変換の第1のサービスを実施することができ、コンピューティングインフラストラクチャによって実行される第2のインスタンスまたは仮想マシンは、ディープパケットインスペクションの第2のサービスを実施することができ、インフラストラクチャによって実行される第3のインスタンスまたは仮想マシンは、アクセス制御の第3のサービスを実施することができる。これらの3つのサービスは、ファイアウォールを提供するように、サービスチェーンとしてともにグループ化またはリンクされることができる。
例えば、サービスチェーンは、ネットワークアドレスのリスト、識別子のリスト、またはサービスチェーンのサービスのインスタンスを識別する標識のリストを含む、それに対応する、またはそれと関連付けられることができる。例えば、サービスチェーンは、マルチプロトコル標識切替(MPLS)技法を用いて構成されることができる。MPLSは、パス標識に基づいて、1つのネットワークノードから次のネットワークノードにデータをダイレクトするように構成される、データ搬送技法であることができる。MPLS標識または他の識別子は、ノードの間の仮想リンクまたはパスを識別することができる。標識技法は、種々のネットワークプロトコルのパケットをカプセル化することができる。
識別子または標識のリストを使用して、コントローラは、サービスチェーンに沿ってパケットをダイレクトすることができる。例えば、第1の標識は、ネットワークに、トラフィックをサービスチェーン内の第1のサービスへ転送させることができ、これは、次いで、その標識をポップし、一緒にパケットを転送する。第2の標識は、パケットを第2のサービスに送信させることができ、これは、次いで、第2の標識をポップし、一緒にパケットを転送する。
しかしながら、サービスのインスタンスが、複数の領域、可用性ゾーン、およびそれ以上にわたって分配され得るため、パケットを複数のサービスノードに転送し、サービスのセット(例えば、ファイアウォール)を提供することは、ネットワークを通る期間を増加させ、パケットが1つ以上のデータセンターゾーンまたはパーティションを通って進行するにつれて付加的オーバーヘッドを導入し得る。例えば、ネットワークコアを一度通過するのではなく、パケットは、サービスにつき1回、ファブリックを横断し得る。これはまた、ネットワークを通した付加的待ち時間および遅延も導入し得る。
そのようなマルチホップ処理展開(例えば、サービスチェイニング)では、各ホップは、負荷平衡システムであってもよい。しかしながら、全ホップレベル(サービスノードレベル)での負荷平衡は、大域的に最適なマルチホップ処理につながらない場合がある。全ホップレベルでの負荷平衡は、他のホップレベル処理から独立し得るため、最適なエンドツーエンドトラフィック処理を提供しない場合がある。例えば、サービスチェーンクラウド展開またはコンピューティングインフラストラクチャでは、クライアント・サーバトラフィックは、エンドツーエンド処理のために、種々のクラウドパーティション境界を複数回横断し得る。これは、スループットに悪影響を及ぼす、待ち時間およびネットワークオーバーヘッドの増加をもたらし得る。
本開示のシステムおよび方法は、マルチホップ展開の大域的視野を決定し、可能性として考えられるパスを分析し、最適なパスを識別し、識別された最適なパスにわたってトラフィックを負荷平衡することによって、サービスチェーン負荷平衡を提供する。例えば、コントローラは、APIを使用し、全インスタンスについてのメタデータを取得する、読み出す、受信する、またはフェッチすることができる。コントローラは、ユーザアカウント情報およびそれらのリソース配分を維持するコンピューティングインフラストラクチャの情報記憶またはデータベースから、メタデータを受信することができる。コントローラは、コンピューティングインフラストラクチャ内のインスタンスの配置、リソース配分(CPU、メモリ、帯域幅)、確保のタイプ、コネクティビティのタイプ等を決定することができる。読み出された情報を使用して、コントローラは、全インスタンスと関連付けられるコストを導出することができる。ある場合には、コンピューティングインフラストラクチャが情報記憶を有していない、またはコントローラが情報記憶にアクセスするように構成されない、または別様にアクセスすることができない場合、コントローラは、管理者から入力を受信し、インスタンスと関連付けられるコストを計算することができる。
例えば、いくつかの実施形態では、コンピューティングインフラストラクチャは、以下のサービスをともにグループ化するサービスチェーン、すなわち、ファイアウォール(FW)・侵入検出システム(IDS)・ウェブサービス(WS)を伴って構成されることができる。コンピューティングインフラストラクチャは、以下のような各サービスの複数のインスタンス、すなわち、ファイアウォールサービスの3つのインスタンス、IDSサービスの2つのインスタンス、およびウェブサービスの3つのインスタンスを含むことができる。コントローラは、以下のような各サービスチェーンの数に基づくサービスチェーンのためのパスの総数、すなわち、3つのFW×2つのIDS×3つのWS=18個のパスを決定することができる。
コントローラは、情報リポジトリから受信されるメタデータを使用して、エッジ重量を決定することができる。コントローラは、エッジ重量を使用し、パス重量を決定することができる。パス重量は、1つ以上のパス重量計算技法またはアルゴリズムを使用して、決定されることができる。コントローラは、重量割当アルゴリズムに応じて、昇順または降順でパス重量をソートすることができる。例えば、コントローラは、最高ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も効率的から最も非効率的までパス重量をランク付けすることができる。ある場合には、コントローラは、最低ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も非効率的から最も効率的までパス重量をランク付けすることができる。
コントローラは、ソートまたはランク付けされたテーブルに基づいて、1つ以上の最適なサービスチェーンまたはパスを選択することができる。コントローラは、所定数の最高ランキングパスを選択することができ、最高ランキングは、最も効率的または最適なパスに対応することができる。例えば、コントローラは、以下のようなソートされた表の最上位の3つのエントリ、すなわち、P1:FW1→IDS1→WS1(最適なパス1)、P7:FW2→IDS1→WS1(最適なパス2)、P3:FW1→IDS1→WS3(最適なパス3)を選択することができる。コントローラは、最上位の3つのエントリによって示されるパスを使用し、より効率的に(例えば、少ない待ち時間、より少ないオーバーヘッド、高いスループット、低いコスト等)トラフィックを処理することができる。
いくつかの実施形態では、コントローラは、18個全ての可能性として考えられるパスを分析し、最高ランキングパスを選択することができる。いくつかの実施形態では、コントローラは、機械学習技法またはプルーニング技法を使用し、全ての可能性として考えられるパスを分析することなく、最適なパスを選択することができる。例えば、コントローラは、少なくとも2つのインスタンスが同一のデータセンターゾーンまたはパーティション内にないパスが、あまり効率的ではないことを決定し、これらのパスをソートする前に、それらを除外することができる。
いくつかの実施形態では、コントローラは、選択された最適なパスから欠落している、コンピューティングインフラストラクチャによって提供される任意のインスタンスがあるかどうかを決定することができ、全てのインスタンスを網羅する付加的パスを含む。コントローラは、欠落しているインスタンスを識別し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、サービスチェーンを負荷平衡するためにコントローラによって利用されるように、付加的パスを選択することができる。例えば、3つの選択された最適なパス1、2、または3のうちのいずれも、インスタンスFW3、IDS2、およびWS2を含まない。コントローラは、次いで、ソートされた表を解析し、これらのインスタンスのうちの1つ以上のものを含む、付加的な最適なパスを識別することができる。例えば、コントローラは、P17:FW3→IDS2→WS2(最適なパス4)として、欠落しているインスタンスのうちの1つ以上のものを含む、最高ランキングパスを選択することができる。ある場合には、コントローラは、表を繰り返し解析し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、選択された最適なパスの中で表されるまで、欠落しているインスタンスを含む最高ランキングパスを選択することができる。
コントローラは、負荷平衡技法またはアルゴリズムを使用して、最適なパスを負荷平衡することができる。コントローラは、加重負荷平衡ソリューションとしての負荷平衡アルゴリズムとともに、選択された最適なパスの決定されたパス重量を使用し、性能を改良することができる。
本明細書に開示される技法は、ADC環境で使用されることができるが、本開示のシステムおよび方法は、ファイアウォール、ルータ、最適化システム、速度制限システム、アクセス制御システム等のネットワーキングデバイスの動作を改良することができる。
ここで図7Aを参照すると、サービスチェーンを負荷平衡するためのシステムの実施形態のブロック図が示されている。システム700は、1つ以上のアプライアンス200a−nを含むことができる。アプライアンス200a−nは、1つ以上の特徴または機能性を伴って構成されることができる。アプライアンス200a−nはそれぞれ、類似機能性または異なる機能性を伴って構成されることができる。いくつかの実施形態では、アプライアンス200aは、コントローラ705を含む。コントローラ705は、クライアント102a−n、サーバ106a−n、およびメタデータサーバ735とインターフェースをとる、または通信するように構成される、インターフェース710を含むことができる。コントローラ705は、メタデータサーバ735から、コンピューティングインフラストラクチャ内のサービスのサービスチェーンまたはインスタンスに関連するメタデータまたはアカウント情報を読み出す、クラウドデーモン715を含むことができる。コントローラ705は、メタデータを使用し、各サービスの各インスタンスに対するエッジ重量および各サービスチェーンに対するパス重量を生成する、加重エンジン720を含むことができる。コントローラ705は、加重エンジン720によって生成される重量を使用し、サービスチェーンを選択してクライアント102からネットワークトラフィックをダイレクトするように構成される、負荷平衡装置725を含むことができる。コントローラ705は、vServer275を含むことができる。コントローラ705は、vServer275を実行することができる。コントローラ705は、アプライアンス200aの1つ以上のプロセッサ上で実行する、vServer275上で実行することができる。システム700は、コンピューティングインフラストラクチャを指す、または含むことができる。コンピューティングインフラストラクチャは、1つ以上のサーバ106a−nを指す、または含むことができる。
システム700は、メタデータサーバ735を含む、またはそれにアクセスすることができる。メタデータサーバは、管理者またはIaaSサービスのプロバイダ等のコンピューティングインフラストラクチャと関連付けられる他のエンティティによって、維持または管理されることができる。IaaSサービスは、例えば、計算(仮想化またはベアメタル)、記憶、ネットワーキング、およびネットワーキングサービス(例えば、ファイアウォール)等の遠隔データセンターインフラストラクチャにアクセスし、それを監視し、管理するためのセルフサービスモデルを含むことができる。IaaSクラウドサービスのユーザまたは顧客は、無条件にハードウェアを購入するのではなく、電気または他の公共料金請求と同様に、消費に基づいてIaaSを購入することができる。ある場合には、IaaSの顧客は、アプリケーション、データ、ランタイム、ミドルウェア、およびオペレーティングシステムを管理してもよい。しかしながら、IaaSプロバイダは、仮想化、サーバ、ハードドライブ、記憶、およびネットワーキングを管理してもよい。IaaSプロバイダは、仮想化層の上方でデータベース、メッセージング待ち行列、および他のサービスを提供することができる。
メタデータサーバ735は、メタデータを記憶する1つ以上のメタデータデータ構造を含む、メタデータ情報記憶740またはメタデータデータベース740を含む、またはそれにアクセスすることができる。メタデータは、クラウド環境のアカウントについて、またはそれと関連付けられる情報を含むことができる。メタデータは、クラウド環境に関連するアカウント情報を含むことができる。例えば、クラウドインフラストラクチャのプロバイダ(またはIaaSプロバイダ)は、それらの顧客アカウントについての情報記憶またはメタデータデータベース740を維持することができる。メタデータデータベース740は、顧客またはユーザアカウント情報を含むことができる。アカウント情報は、顧客によって消費されるリソースの数量またはタイプを示す、顧客のリソース配分を含むことができる。IaaSプロバイダは、請求、保守、分析等のために、メタデータデータベース740の中に記憶されたユーザのリソース配分情報を使用することができる。
コンピューティングインフラストラクチャは、異なるゾーン、パーティション、ラック、または地理的地域の中に位置する、サーバ、プロセッサ、またはメモリ等の計算リソースを含むことができる。例えば、パーティションは、IaaSの分割を描写し、IaaSの顧客によって使用されるIaaSクラウドのエリアを定義することができる。パーティションは、プロバイダレベル、領域レベル、ゾーンレベル、またはラックレベル等の1つ以上のレベルで作製されることができる。パーティショングループは、パーティション定義の中で定義され、メタデータデータベース740の中に記憶されることができる。パーティショングループ(またはネットワークパーティション)は、IaaSの1つのネットワークによって境界され得る、IaaSのエリア(例えば、領域)を含むことができる。各領域は、別個の地理的地域の境界を定めることができる。各領域は、ゾーンと称される、複数の単離された場所を有することができる。それによって、いくつかのパーティションが、ネットワークパーティションの内側に含まれることができる。ある場合には、複数のパーティショングループは、高い可用性の目的のために、複数のパーティションを有することができる。例えば、複数のパーティションが、複数のエリア(例えば、領域、ゾーン、またはラック)内でインスタンスをスポーンするようにアプライアンス200aもしくサービスに命令するために定義されることができる。複数の可用性ゾーン内にスポーンされるインスタンスは、たとえ1つの可用性ゾーンがダウンしていてもシステムが機能的なままであること、または異なるゾーンの間で負荷平衡することを可能にすることができる。
アプライアンス200は、図6で描写されるアプライアンスクラスタ600の1つ以上の機能性またはコンポーネントを含むことができる。アプライアンス200は、アプリケーションレベルセキュリティ、最適化、またはトラフィック管理を提供することによって、ネットワーク104またはネットワーク104’を経由してサーバ106a−nを介して提供される、サービス、ウェブサイトコンテンツ、リソース、またはアプリケーションの配信を管理または最適化することができる。アプライアンス200は、図1−6に関して上記で説明されるアプライアンスクラスタ600と同一または類似であり得る、またはその1つ以上の機能性またはコンポーネントを含んでもよい。いくつかの実施形態では、クライアント102a−nは、クライアント102a−nと同一または類似であり、サーバ106a−nは、図1−6に関して上記で説明されるようなサーバ106a−nと同一または類似である、またはその1つ以上の機能性またはコンポーネントを含む。いくつかの実施形態では、システム700のクライアント102およびサーバ106はさらに、クライアントを認証するための機能を果たす、または特徴を提供するように構成される。コントローラ705、インターフェース710、クラウドデーモン715、加重エンジン720、または負荷平衡装置725は、クラウドベースのサービスを管理することを促進するように設計、構築、および構成される、デジタル回路、ハードウェア、1つ以上のプロセッサ、メモリ、またはソフトウェアを含むことができる。
図7Aを依然として参照すると、さらに詳細には、アプライアンス200aは、インターフェース710を含む。インターフェース710は、アプリケーションプログラミングインターフェース、グラフィカルユーザインターフェース、通信ポートを含む、またはTCP/IP等の1つ以上の通信またはネットワーキングプロトコルを伴って構成されることができる。インターフェース710は、データパケットを受信または傍受する、データパケットを受信する、ネットワークトラフィックを監視する、または別様にネットワーク104またはネットワーク104’を介して情報を取得または伝送/伝達するように構成されることができる。
いくつかの実施形態では、インターフェース710は、複数のクライアント102a−nのクライアント102aから要求を受信する。インターフェース710は、ネットワーキングプロトコル、通信プロトコル、アプリケーション層プロトコル、トランスポートプロトコル、または暗号化プロトコルを介して、要求を受信してもよい。プロトコルは、例えば、HTTP、TCP、ICA、またはHDXを含むことができる。プロトコルは、ステートフルプロトコルまたはステートレスプロトコルであることができる。要求は、クライアント102aがアクセスを要求している、クライアントまたはリソースについての情報を含んでもよい。いくつかの実施形態では、サーバ106a−nによって提供されるリソースは、アクセスが許可される前に、クライアントデバイスのクライアントまたはユーザが、認証、承諾、または承認を要求し得る、セキュアなリソースであってもよい。
いくつかの実施形態では、インターフェース710は、1つ以上のクライアント102a−nからネットワーク通信を受信し、ネットワーク通信を1つ以上のサーバ106a−nに転送またはダイレクトするように設計および構築される。インターフェース710は、図1−6に関して上記で説明されるインターフェース608または610a−nと同一または類似であり得る、またはその1つ以上の機能性またはコンポーネントを含むことができる。インターフェース710は、クライアント102aからデータパケットを受信することができる。インターフェース710は、クライアント102aから受信されるデータパケットを宛先サーバに転送または中継することができる。例えば、インターフェース710は、クライアントエージェント120aから受信されるデータパケットをサーバ106aまたはインスタンス745に自動的に転送するように構成されることができる。インターフェース710はさらに、アプライアンス200aの状態またはモードに基づいて、クライアント102a−nからネットワークトラフィックを引き込むように構成されることができる。例えば、アプライアンス200aは、一次デバイス200aであってもよい。一次デバイス200aは、現在アクティブモードである、アクティブ・スタンバイ中間アプライアンスペアの中間デバイスを指すことができる。したがって、アプライアンス200aのインターフェース710は、アプライアンス200aが、現在、クライアントからの要求を能動的に果たし、要求を1つ以上のサーバ106a−nに転送するように構成される、一次デバイスである場合、クライアント102a−nからネットワークトラフィックを受信することができる。
いくつかの実施形態では、コントローラ705は、クラウド環境またはコンピューティングインフラストラクチャの1つ以上のサーバによって提供される、1つ以上のサービスの複数のインスタンス(例えば、インスタンス745a−n、インスタンス750a−n、またはインスタンス755a−n)のそれぞれに関連する、アカウント情報を受信するように設計および構築される、クラウドデーモン715を含む。クラウドデーモン715は、1つ以上のプロセッサ上で実行するように構成されることができる。クラウドデーモン715は、バックグラウンドプロセスを実行または起動するように構成されることができる。ある場合には、クラウドデーモン715は、時間間隔に基づいて、周期的に、または条件またはトリガイベントに応答して、構成されることができる。例えば、クラウドデーモン715は、1分、5分、10分、30分毎、1時間毎、12時間毎、毎日、一晩等で、実行または起動することができる。ある場合には、クラウドデーモン715は、クラウド環境のユーザまたは管理者からのインジケーションに応答して、実行または起動するように構成されることができる。いくつかの実施形態では、クラウドデーモン715は、サービスの新しいインスタンスが立ち上がったという決定、インスタンスのフェイルオーバー、インスタンスの終了、クライアント102aからの新しい要求、または顧客アカウントの追加、更新、または修正等の条件に基づいて、起動するように構成されることができる。
コントローラ705は、(例えば、インターフェース710またはクラウドデーモン710を介して)サービス、インスタンス、およびサービスチェーンを決定または識別することができる。インスタンスは、サービスを1つ以上のクライアント102a−nに提供することを促進する、サービスのインスタンスを指すことができる。コントローラ705は、パケットを、1つ以上のサービスを提供するサービスチェーンにダイレクトすることができる。インスタンスは、1つ以上の利用可能なインスタンスを含むことができる。インスタンスは、能動インスタンスまたは受動インスタンスを含むことができる。インスタンスは、アプライアンス200aまたはサーバ106a−n上で実行している仮想マシンまたはvServer275を含むことができる。
コントローラ705は、複数のクライアント102a−nから複数のサーバ106a−nにネットワークトラフィックをダイレクトするように実行している、1つ以上のvServer275を含むことができる。クラウドデーモン715は、インスタンスにpingを送る、インスタンスをポーリングする、要求する、または別様に識別することができる。例えば、クラウドデーモン715は、全てのアクティブサービスチェーン、サービス、またはそのインスタンスからの応答についてpingまたは要求を生成することができる。pingまたは要求に応答して、クラウドデーモン715は、各インスタンスから応答を受信することができる。応答は、サービスチェーンまたはインスタンスの識別子を含むことができる。応答は、サービスチェーンまたはインスタンスと関連付けられる顧客のアカウント識別子を含むことができる。例えば、応答は、コンピューティングインフラストラクチャによって提供されるIaaSサービスチェーンを識別することができる。
コントローラ705は、パスを含む、複数のサービスチェーンを識別することができる。パスは、コンピューティングインフラストラクチャ(例えば、サーバ106a−n)によって提供される第1のサービスの第1のインスタンス(例えば、745a)と、コンピューティングインフラストラクチャ(例えば、サーバ106a−n)によって提供される第2のサービスのインスタンス(例えば、745b)とを有することができる。コントローラ705は、(例えば、クラウドデーモン715を介して)インスタンスと関連付けられるメタデータまたはアカウント情報を受信する、読み出す、またはフェッチすることができる。メタデータは、インスタンスがアクセスを提供する、サービスについてのメタデータを含むことができる。コントローラ705は、メタデータサーバ735からメタデータを読み出すことができる。
いくつかの実施形態では、コントローラ705は、クラウドアプリケーションプログラミングインターフェース(API)を使用し、1つ以上のクエリを生成して、複数のサービスチェーンの各インスタンスを識別することができる。コントローラ705は、1つ以上のクエリに応答して、サービスの1つ以上のインスタンスをそれぞれ有する、1つ以上のパスを含む、1つ以上のサービスチェーンのインジケーションを受信することができる。コントローラ705は、クラウドAPIを使用して1つ以上のクエリを生成し、複数のサービスチェーンの各インスタンスに対してメタデータを読み出すことができる。情報は、インスタンスを介して提供されるサービスと関連付けられるメタデータを含む、または指すことができる。クエリは、サービスのリソース配分、クラウド配置、リソース消費、確保のタイプ、またはコネクティビティのタイプに関する情報についての要求を含むことができる。サービスのクラウド配置は、サービスが実行する、ゾーン、データセンタ、地理的地域、ネットワークパーティション、またはドライブパーティション等のパーティション情報を示すことができる。確保のタイプは、サービスのための十分な容量を有するマシンをプロビジョニングするために、使用されることができる。確保のタイプは、十分な記憶、計算能力、プロセッサ速度、メモリ、アプリケーション、グラフィカル処理ユニット、帯域幅等のサービスのための十分な容量を伴うマシンをプロビジョニングするために使用されるポリシを含むことができる。確保は、仮想確保を含むことができる。仮想確保は、IaaSサービスを提供または実行するためにサーバ106a−nに利用可能なメモリ、CPU、ネットワーキング、および記憶リソースの共有を含むことができる。コネクティビティのタイプは、サーバ106aがアプライアンス200a−nまたはクライアント102a−nと通信するために使用する、ネットワーク104’のタイプを指すことができる。コネクティビティのタイプは、サービスのために利用可能な帯域幅の量を示すことができる。
コントローラ705は、クラウドAPIを使用して、1つ以上のクエリを生成することができる。ある場合には、コントローラ705は、1つ以上のクラウドAPIを伴って構成されることができる。コントローラ705は、コントローラ705のデータベースの中に記憶された複数のクラウドAPIからクラウドAPIを選択することができる。コントローラ705は、インスタンスを介して提供されるインスタンスまたはサービスと関連付けられる識別子に基づいて、クラウドAPIを選択することができる。例えば、コントローラ705は、インスタンスまたはサービスの識別子に基づいて、アカウント識別子を決定することができる。コントローラ705は、アカウント識別子を使用し、コントローラ705のメモリの中に記憶されたデータベース内で検索を行い、アカウント識別子にマップされたクラウドAPIを選択することができる。例えば、APIを監視するクラウドは、AMAZON WEB SERVICES, Inc.(Seattle, Washington)によって提供されるAMAZON CLOUDWATCHTMを含むことができる。
クラウドAPIを使用して、コントローラ705は、1つ以上のクエリを生成し、サービスについてのメタデータを読み出すことができる。クエリは、サービスのための配置情報についてのクエリを含むことができる。インスタンスのための配置情報は、クラウド環境内のパーティションを指すことができる。インスタンスのための配置情報は、インスタンスがサービスを提供するためにアクセスする、クラウド環境内のパーティションを指すことができる。例えば、IaaSクラウドサービスは、対応する配置において実行してもよい。したがって、インスタンスのための配置情報は、インスタンスがアクセスを提供する、サービスの配置を指すことができる。
コントローラ705は、ネットワーク104’を介して、生成されたクエリをメタデータサーバ735に伝送することができる。コントローラ705は、メタデータサーバ735から、インスタンスのためのメタデータを含むクエリへの応答を受信することができる。インスタンスのためのメタデータは、インスタンスがアクセスを提供するサービスについてのメタデータを含むことができる。インスタンスのためのメタデータは、インスタンスと関連付けられるサービスのためのメタデータを含むことができる。
ある場合には、コントローラ705は、別個のクエリを生成し、各サービスチェーン、各インスタンス、または各関連付けられるサービスに対してメタデータサーバ735に伝送することができる。ある場合には、コントローラ705は、複数のインスタンスによって提供される複数のサービスを識別する、クエリを生成して伝送することができる。ある場合には、コントローラ705は、ともにサービスチェーンにグループ化またはリンクされた複数のインスタンスを識別する、クエリを生成して伝送することができる。コントローラ705は、1つ以上のサービス、サービスチェーン、またはインスタンスのためのメタデータを含む、応答を受信することができる。例えば、コントローラ705は、各クエリに対する応答、または複数のクエリへの応答を含む応答を受信することができる。
コントローラ705は、メタデータサーバ735から受信されるメタデータを使用して、各サービスチェーンに対してパス重量を決定するように設計および構築される加重エンジン720を含むことができる。パス重量は、サービスチェーンによる、サービスを配信することの効率のレベルを示すことができる。パス重量は、サービスチェーンのパス内の各インスタンスの個々の重量に基づき得る、待ち時間、リソースオーバーヘッド、スループット、またはリソースコスト等のコンピューティングインフラストラクチャ性能特性に基づいて、性能コンピューティングインフラストラクチャまたはユーザ体験を示すことができる。パス重量は、IaaSサービス等のホスト型システムへのクラウド環境影響の論理測定を示すことができる。重量は、クラウド環境を介して提供されるサービスのインスタンスの性能を示すことができる。
コントローラ705は、受信されたメタデータを使用して、サービスチェーンのためのパス重量を決定するように、1つ以上の技法、機能、またはアルゴリズムを用いて構成されることができる。コントローラ705は、サービスチェーンの各インスタンスに対してエッジ重量を決定し、サービスチェーンの各インスタンスのエッジ重量を組み合わせて、サービスチェーンのためのパス重量を決定することができる。例えば、コンピューティングインフラストラクチャは、3つのサービスを提供してもよい。第1のサービスは、サーバ106a上で実行するインスタンス745aおよびサーバ106b上で実行するインスタンス745bによって提供されることができる。第2のサービスは、サーバ106b上で実行するインスタンス750aによって提供されることができる。第3のサービスは、サーバ106a上で実行するインスタンス755aによって提供されることができる。サーバ106aおよび106bは、異なるゾーン、パーティション、または地理的地域内にあることができる。
インスタンスは、アクティブインスタンスまたは潜在的な利用可能なインスタンスであることができる。加重エンジン720は、読み出されたメタデータを使用し、インスタンス745a、745b、750a、および755aの各々に対するエッジ重量を決定することができる。加重エンジン720は、種々の効率または性能考慮事項に基づいて、より高いまたは低い重量をインスタンスに割り当てることができる。例えば、サービスチェーンは、第1のサービスから第2のサービスおよび第3のサービスに進むようなパスを定義してもよい。コントローラ705は、コントローラ705とインスタンス745aとの間のネットワークパスが、コントローラ705とインスタンス745bとの間のネットワークパスよりも効率的または高性能であり得ることを決定または識別してもよい。したがって、コントローラ705は、インスタンス745bと比較して、より高い重量をインスタンス745aに割り当ててもよい。コントローラ705はまた、インスタンス745aとインスタンス750aとの間のネットワークパスが、インスタンス745aとインスタンス750nとの間のネットワークパスと比較して、非効率的または低性能であることを決定してもよい。したがって、コントローラ705は、インスタンス750nと比較して、より高い重量をインスタンス750aに割り当てることができる。コントローラ705は、インスタンス750aとインスタンス755aとの間のネットワークパスが、750aと755nとの間のネットワークパスよりも効率的または高性能であることを決定することができる。
したがって、コントローラ705は、サービスチェーンの各インスタンスに対してエッジ重量を決定することができる。加重エンジン720は、ネットワークパス、プロセッサ速度、帯域幅、メモリ、構成、場所、または可用性に基づいて、より高いまたは低い重量をインスタンスに割り当てることができる。ある場合には、コントローラ705がインスタンスと同一のゾーン内にある場合、パケットを同一のゾーン内のインスタンスにダイレクトすることが、短縮した待ち時間および増加したスループットをもたらし得るため、コントローラは、より高い重量を割り当てることができる。加重エンジン720は、アプライアンスおよびサービスが異なるゾーン内にあり、増加した待ち時間および低減したスループットをもたらし得るため、より低い重量を第2のインスタンスに割り当てることができる。例えば、加重エンジン720は、1、2、3、5、10、または別の数の重量を第1のインスタンスに割り当てることができる。加重エンジン720は、マイナス1(−1)、0、1、2、3の重量、またはある他の重量を第2のインスタンスに割り当てることができる。加重エンジン720は、サービスのインスタンスのためにクラウド環境によって提供される性能のレベルを示す重量を割り当てることができる。
加重エンジン720は、コントローラ705とインスタンスを提供するサーバとの間の距離に基づいて、重量を割り当てることができる。例えば、加重エンジン720は、アプライアンス200a−nのための地理的場所を決定することができる。加重エンジン720は、受信されたメタデータを使用し、サービスのインスタンスを提供するサーバ106a−nの地理的場所を決定することができる。加重エンジン720は、地理的場所に基づいて、各アプライアンスと各インスタンスとの間の距離を決定することができる。例えば、加重エンジン720は、アプライアンス200とインスタンスを実行するサーバとの間の地理的距離を決定する、マッピングエンジンまたはマッピングツールにクエリを行うことができる。別の実施例では、加重エンジン720は、アプライアンスに、pingをサーバに送らせ、ping応答時間を使用し、距離または応答時間を決定させることができる。加重エンジン720は、距離または応答時間に基づいて、重量を割り当てることができる。例えば、加重エンジン720は、応答に基づいて、アプライアンスおよびサービスのインスタンスをランク付けし、最高重量を最短応答時間に対応するサービスのインスタンスに、第2の最高重量を第2の最短応答時間に対応するサービスのインスタンスに等、割り当てることができる。
加重エンジン720は、配置、サービスのインスタンスの確保のタイプまたは容量、帯域幅、またはコネクティビティのタイプ等の1つ以上の要因に基づいて、重量をサービスのインスタンスに割り当てることができる。例えば、加重エンジン720は、受信されたメタデータに基づいて、以下のようにサービスの第1のインスタンスのための重量を決定することができ、すなわち、instance_one_weight=+5(同一のゾーンに起因する)+2(500Mbpsの利用可能な帯域幅に起因する)=7である。加重エンジン720は、受信されたメタデータに基づいて、以下のようにサービスの第2のインスタンスのための重量を決定することができ、すなわち、instance_two_weight=+1(異なるゾーンに起因する)+4(1,000Mbpsの利用可能な帯域幅に起因する)=5である。加重エンジン720は、第1の重量を第2の重量と比較し、最高重量に対応するインスタンスを決定することができる。加重エンジン720は、各サービスチェーンの各インスタンスに対して本重量決定を実施することができる。
コントローラ720は、各サービスチェーンの各インスタンスに対して重量を使用し、サービスチェーンのためのパス重量を決定することができる。例えば、利用可能なパスは、以下を含んでもよい。
表1に図示されるように、コンピューティングインフラストラクチャによって提供される3つのサービスのインスタンスの間のパスをそれぞれ含む、合計8つの可能性として考えられるサービスチェーンがある。コントローラ705は、各インスタンスに対してエッジ重量を決定することができる(例えば、W001、W111、W211)。コントローラ705は、次いで、エッジ重量を組み合わせ、パス重量を決定することができる。コントローラ705は、任意の機能、アルゴリズム、または技法を使用して、エッジ重量を組み合わせることができる。例えば、コントローラ705は、サービスチェーンの各インスタンスに対してエッジ重量を合計する、エッジ重量を乗算する、サービスチェーンの1つ以上のエッジ重量の比を決定する、エッジ重量を関数に入力する、エッジ重量の平均をとる等を行うことができる。
コントローラ705は、サービスチェーンの効率のレベルに基づいて、パス重量をランク付けまたはソートすることができる。例えば、サービスチェーンは、表2に図示されるように、第1のサービスチェーンが最適なサービスチェーンまたは最高性能サービスチェーンであり、最後のサービスチェーンが準最適なサービスまたは最低性能サービスチェーンであるように、降順でランク付けまたはソートされることができる。
コントローラ705は、表2に図示されるように、パス重量に基づいてサービスチェーンをソートすることができる。例えば、パス重量PW8に対応するサービスチェーン#1は、最高ランキングまたは最高性能サービスチェーンであることができる。これは、3つ全てのサービスのインスタンスが同一のサーバによって実行されるためであり得る。したがって、インスタンス745nがコントローラ705からより遠く離れているため、たとえインスタンス745nのエッジ重量W003が、実際にはインスタンス745aのエッジ重量W001を上回り得ても、コントローラ705がホップ毎のレベルではなく、マルチホップまたはサービスチェーンベースで負荷平衡を実施しているため、コントローラ705は、サービスチェーンが全体的により良好に機能し、大域的に最適なサービスチェーンであることを決定することができる。
コントローラ705は、所定数の最上位性能サービスチェーンを選択し、次いで、所定数のサービスチェーンのみを使用して、負荷平衡を実施することができる。例えば、最上位性能サービスチェーンの所定数は、2、3、4、5、6、7、10、15、20、またはサービスチェーン負荷平衡促進する、ある他の数であることができる。ある場合には、所定数は、固定数または動的数であることができる。例えば、所定数は、利用可能なサービスチェーンの数の半分、3分の1、4分の1、5分の1、6分の1、または他の分数または割合等の利用可能なサービスの数に基づくことができる。
いくつかの実施形態では、コントローラ705は、サービスチェーンを所定数の最上位性能サービスチェーンの選択されたサブセットに追加することができる。コントローラ705は、所定数の最上位性能サービスチェーンのうちの選択されたサービスチェーンを分析し、コンピューティングインフラストラクチャによって提供される1つ以上のインスタンスがサブセットから欠落していることを決定することができる。例えば、最上位の3つのサービスチェーンが表2から選択される場合、コントローラ705は、インスタンス745aが欠落している、または利用されていないことを決定することができる。コントローラ705は、インスタンスが選択されたサービスチェーンから欠落していると決定することに応答して、表2を解析し、欠落しているインスタンスを含む最高ランキングサービスチェーンを識別することができる。本実施例では、コントローラ705は、パス重量PW4に対応する第4のサービスチェーンを識別し、本サービスチェーンを負荷平衡に使用されるサービスチェーンのサブセットに追加することができる。
いくつかの実施形態では、コントローラ705は、機械学習技法を使用し、パス重量を決定することに先立って、サービスチェーンをランク付けまたはソートすることに先立って、または最適なサービスチェーンのサブセットを決定することに先立って、サービスチェーンをプルーニングすることができる。前処理、フィルタリング、またはプルーニング技法を実施することによって、コントローラ705は、最適なサービスチェーンを識別する効率を向上させることができる。
いくつかの実施形態では、コントローラ705は、サービスチェーンをプルーニングするように機械学習技法を用いて構成されることができる。例えば、機械学習技法は、同一のゾーン内にインスタンスを全て含む任意のサービスチェーンが、2つ以上のゾーン内にインスタンスを含むサービスチェーンよりも高性能であることを決定することができる。機械学習技法はさらに、2つの異なるゾーン内にインスタンスを含む任意のサービスチェーンが、3つ以上のゾーン内にインスタンスを含むサービスチェーンよりも高性能であることを決定することができる。したがって、コントローラ705は、サービスチェーンのためのパス重量を決定することに先立って、またはパス重量に基づいてサービスチェーンをソートまたはランク付けすることに先立って、3つ以上の異なるゾーン内にインスタンスを含むサービスチェーンを除外することができる。
いくつかの実施形態では、機械学習技法は、履歴データに基づいて、インスタンス745aを含む任意のサービスチェーンが、最適なサービスチェーンとして選択されない低性能インスタンスであることを決定することができる。したがって、コントローラは、パス重量を決定することに先立って、またはパス重量に基づいてサービスチェーンをソートすることに先立って、本インスタンスを含む任意のサービスチェーンを除外することができる。
コントローラ705は、負荷平衡機能およびサービスチェーンの各々に対する決定されたパス重量を使用し、サービスチェーンインスタンスを選択して、クライアントからネットワークトラフィックをダイレクトするように設計および構築される、負荷平衡装置725を含むことができる。負荷平衡装置725は、複数のコンピューティングリソースにわたって作業負荷を分配し、リソース使用を最適化し、スループットを最大限にし、応答時間を最小限にし、単一のリソースの過負荷を回避することができる。ある場合には、負荷平衡機能は、負荷平衡装置725に、最高重量に対応するサービスチェーンを選択させることができる。例えば、負荷平衡装置725は、クライアント102からデータパケットまたは要求を受信することができる。負荷平衡装置725は、コンピューティングインフラストラクチャのために最適として識別される、要求に対応するサービスチェーンを読み出すことまたは識別することができる。例えば、負荷平衡装置725は、最適なサービスチェーンがパス重量PW8、PW5、PW7、およびPW4に対応することを決定することができる。負荷平衡装置725は、パス重量を使用して負荷平衡機能を適用し、サービスチェーンを選択してクライアントからネットワークトラフィックをダイレクトすることができる。
いくつかの実施形態では、負荷平衡装置725は、アプライアンス200aがトラフィックをダイレクトするサービスチェーンを選択するために使用し得る、基準を定義する、負荷平衡アルゴリズム(または負荷平衡技法)を使用することができる。負荷平衡装置725が、構成された基準が1つのサーバについて満たされることを決定するとき、アプライアンスは、次いで、異なるサービスを選択することができる。ある場合には、負荷平衡装置は、最小接続技法を使用して、サービスチェーンを選択することができる。最小接続技法は、最小数のアクティブ接続を伴うサービスチェーンを選択し、サービスチェーンおよびそのインスタンスの間でアクティブ要求の負荷を平衡させることができる。
負荷平衡装置725は、パス重量を使用することによって、構成のさらなる粒度を提供することができる。例えば、負荷平衡装置725は、決定されたパス重量を最小接続負荷平衡機能に適用することができる。負荷平衡装置725は、以下の式の加重値N{w}、すなわち、N{パス重量}=(アクティブ接続の数)×(10000/パス重量)に基づいて、サービスチェーンを選択することができる。
例えば、第1のサービスチェーンは、50のアクティブトランザクションを有し、3の重量を割り当てられることができる。第2のサービスチェーンは、80のアクティブトランザクションを有し、5の重量を割り当てられることができる。したがって、第1のサービスチェーンのための加重値N{パス重量}は、50×(10000/3)=166,667であることができる。第2のサービスチェーンのための加重値N{パス重量}は、80×(10000/5)=160,000であることができる。負荷平衡装置725は、加重最小接続技法を使用し、各要求に対して最小のN{パス重量}値を伴うサービスチェーンを選択することができる。以下の表2は、クラウド認識負荷平衡装置725が、メタデータを使用し、パス重量を生成し、サービスチェーンを選択して、以下の要求のためにネットワークトラフィックをダイレクトし得る方法を図示する。
上記の表3に図示されるように、第2のサービスチェーンは、4つの要求のための最小のN{pw}値を有し、1つ以上のクライアントからネットワークトラフィックをダイレクトするように選択される。各要求が1つ以上のクライアントから受信されると、第2のサービスチェーンのためのN{pw}は、最小接続機能に基づいて増加する。第5の要求が入ってくるときに、第1のサービスチェーンが最小のN{pw}を有するため、負荷平衡装置は、第1のサービスチェーンを選択する。第6の要求がクライアントから受信されるとき、第2のサービスチェーンが最小のN{pw}を有するため、負荷平衡装置は、第2のサービスチェーンを選択する。第7の要求が受信されるとき、第1および第2のサービスチェーンは両方とも、同一のN{pw}を有する。本時点で、負荷平衡装置は、ラウンドロビンアプローチに基づいてサービスチェーンのうちの1つを選択する、または一方または他方のサービスチェーンを無作為に選択する、またはデフォルトで第1のサービスチェーンまたは第2のサービスチェーンになるように構成されることができる。
いくつかの実施形態では、コントローラ705は、メタデータを使用し、アプライアンスのメモリまたは記憶装置の中にデータをキャッシュすることを促進することができる。コントローラ705は、受信されたメタデータを使用し、コンピューティングインフラストラクチャによって提供される各サービスチェーンの各インスタンスに対してゾーン情報を決定することができる。コントローラは、受信されたメタデータを使用して、第1のサービスの第1のインスタンスが第1のゾーンを介して提供され、第2のサービスの第2のインスタンスが第2のゾーンを介して提供されることを決定することができる。コントローラ705は、クラウド情報または重量を使用して、コントローラ705が、第1のゾーンの中に位置する、近傍に位置する、または第2のゾーンと比較して第1のゾーンではより短い応答時間を有することを決定することができる。したがって、コントローラ705は、クラウド性能を改良するために、コントローラ705またはアプライアンス200aのメモリまたは記憶装置の中に第2のインスタンスに関連するデータを記憶またはキャッシュすることを決定することができる。データは、例えば、第2のサービスから頻繁に要求される、または第2のサービスによって提供される、データファイルまたはアプリケーションを含んでもよい。
ここで図7Bを参照すると、サービスチェーンを負荷平衡する方法の実施形態のブロック図が示されている。方法700は、図1−7A、8、または9A−9Cに説明される、1つ以上のシステムまたはコンポーネントを使用して実施されることができる。要するに、いくつかの実施形態では、コントローラは、ステップ780において、第1のサービスのインスタンスと、第2のサービスのインスタンスとを有する、パスをそれぞれ含む、サービスチェーンを識別する。ステップ785では、コントローラは、サービスの各々に対するパス重量を決定する。ステップ790では、コントローラは、負荷平衡機能およびパス重量に基づいて、サービスチェーンから1つのサービスチェーンを選択し、選択されたサービスチェーンを介してクライアントからネットワークトラフィックをダイレクトする。
図7Bを依然として参照すると、さらに詳細には、コントローラは、ステップ780において、第1のサービスのインスタンスと、第2のサービスのインスタンスとを有する、パスをそれぞれ含む、サービスチェーンを識別する。コントローラは、1つ以上のクライアントと、1つ以上のサービスを提供する1つ以上のサーバとの中間にあり得る。1つ以上のサーバは、1つ以上のネットワーク化環境(例えば、1つ以上のゾーン、パーティション、またはサブパーティション)内にあることができる。サーバは、IaaSクラウド等のクラウド環境の一部であることができる。クラウド環境は、コントローラを含むことができる、またはコントローラは、クラウド環境のサーバへのアクセスをクライアントに提供することができる。コントローラは、クラウド環境と関連付けられる各インスタンスを決定または識別することができる。コントローラは、クラウド環境と関連付けられるインスタンスにpingを送る、インスタンスをポーリングする、要求する、監視する、追跡する、または別様に決定することができる。例えば、コントローラは、クラウドがサービスチェーンの中でともに連鎖されたサービスのセットを含むサービスを提供することを決定することができる。サービスチェーンは、ファイアウォール、侵入検出システム、およびウェブサービス等のサービスを含むことができる。サービスチェーンは、パスを有する、またはクライアントからファイアウォール、侵入検出システム、およびウェブサービスにトラフィックまたはデータをダイレクトするパスを定義することができる。コントローラは、クラウド環境がサービスチェーンの中のサービスのそれぞれの1つ以上のインスタンスを提供することを決定または識別することができる。例えば、コントローラは、クライアントからのトラフィックと関連付けられるサービスまたはサービスチェーンに対応するアカウント情報を記憶する、メタデータサーバへの1つ以上のクエリを生成することができる。例えば、コントローラは、メタデータサーバに周期的にクエリを行い、コンピューティングインフラストラクチャによって提供される全てのインスタンスを識別してもよい。ある場合には、コントローラは、コンピューティングインフラストラクチャによって提供されるサービスチェーンまたはインスタンスのうちのいくつかまたは全てにサービスチェーン負荷平衡を実施してもよい。例えば、いくつかのアカウントが、サービスチェーン負荷平衡のために構成されてもよい一方で、他のサービスまたはサービスチェーンのための他のアカウントは、サービスチェーン負荷平衡のために構成されない、またはサービスチェーン負荷平衡を可能にしない場合がある。
クラウド環境内でクライアントトラフィックを1つ以上のサービスにダイレクトするために構成される、または利用可能であるインスタンスを識別することに応じて、コントローラは、複数のインスタンスのそれぞれと関連付けられるアカウント情報またはメタデータを読み出すことができる。コントローラは、クラウドアプリケーションプログラミングインターフェースを使用し、1つ以上のクエリを生成して、複数のインスタンスの各々に対するアカウント情報を読み出すことができる。1つ以上のクエリは、配置(例えば、クラウドパーティション内、または場所)、リソース配分、確保のタイプ、またはコネクティビティのタイプのうちの少なくとも1つのための情報を読み出すように構成されることができる。コントローラは、対応するサービスについての情報を読み出すように構成される各インスタンスに対してクエリを生成することができる。コントローラは、クエリを、インスタンス、サービス、またはサービスチェーンのためのメタデータを記憶するメタデータサーバに伝送することができる。
いくつかの実施形態では、コントローラは、複数のサービス、複数のサービスチェーン、またはその複数のインスタンスについての情報の要求を含む、クエリを生成することができる。いくつかの実施形態では、クエリは、サービスのために構築され、クエリへの応答は、サービスのアクティブまたは利用可能なインスタンスを識別する。いくつかの実施形態では、第1のクエリは、サービスチェーンのために構築され、クエリへの応答は、サービスチェーンによって提供されるサービスのリストである。第2のクエリは、受信されたサービスのリストの中の各サービスに対して構築されてもよい。コントローラは、次いで、1つ以上の第2のクエリを伝送し、サービスの各々に対する利用可能な、アクティブな、または立ち上げられたインスタンスを識別する情報を受信することができる。
いくつかの実施形態では、コントローラは、複数のインスタンスについてクエリを生成することができる。コントローラは、インスタンスおよびサービスについての異なるタイプの情報を取得することができる。例えば、コントローラは、クラウドアプリケーションプログラミングインターフェースを使用し、クエリを生成して、複数のインスタンスのうちの第1のインスタンスのための配置情報を読み出すことができる。配置情報は、例えば、コントローラがネットワークトラフィックをダイレクトするサービスのインスタンスの配置を含むことができる。配置情報は、例えば、コントローラがネットワークトラフィックをダイレクトする各インスタンスに対応する、配置情報を含むことができる。コントローラは、クエリをクラウドコンピューティングインフラストラクチャのプロバイダによって維持されるメタデータサーバに伝送することができる。メタデータサーバは、インスタンスのための配置情報を記憶するデータベースを含むことができる。コントローラは、クエリに応答して、メタデータサーバから第1のインスタンスのための配置情報を受信することができる。
いくつかの実施形態では、コントローラは、更新されたアカウント情報を周期的に受信またはフェッチすることができる。コントローラは、クライアントから要求を受信することに応答して、時間間隔に基づいて、または条件またはイベント(例えば、新しいサーバの追加、またはサーバがオフラインになること、フェイルオーバー、新しいまたは更新された負荷平衡アルゴリズムまたは重量ポリシ等)に応答して、アカウント情報を要求することができる。
ステップ785では、コントローラは、アカウント情報に基づいて、サービスチェーンの各々に対するパス重量を決定することができる。コントローラは、複数のサービスチェーンの各々に対するパス重量を決定することができる。パス重量は、サービスチェーンによる、サービスを配信することの効率のレベルを示すことができる。パス重量は、サービスチェーンによって識別されるパスによる、サービスを配信することの効率または性能のレベルの数値、スコア、グレード、文字列、テキスト、または他のインジケーションを含むことができる。パス重量は、クラウド環境を介して提供されるサービスチェーンのパスの性能を示すことができる。パス重量は、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストに基づくことができる。パス重量は、サービスチェーンのパスの中の各インスタンスの個々の重量に基づき得る、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストを示すことができる。
パス重量を決定するために、コントローラは、メタデータサーバから受信されるメタデータまたはアカウント情報を使用して、サービスチェーンのそれぞれの各インスタンスに対してエッジ重量を決定することができる。例えば、コントローラは、インスタンスが位置するパーティション、リソース配分、接続タイプ、または他のメタデータに基づいて、インスタンスのためのより高い重量を決定することができる。例えば、コントローラは、インスタンスがコントローラと異なるクラウドパーティションまたはゾーン内にある場合に、インスタンスのためのより低い重量を決定することができる。コントローラは、正または負の重量、または負の数から正の数(例えば、−100〜+100)に及ぶ数値重量を割り当てることができる。コントローラは、整数、2進値、分数、または小数として重量を割り当てることができる。コントローラは、指数関数的加重技法または線形加重技法を使用することができる。例えば、コントローラとサービスとの間の距離が増加すると、インスタンスに割り当てられた重量は、指数関数的または直線的に増加することができる。
例えば、コントローラは、第1のサービスの第1のインスタンスと、第2のサービスの第1のインスタンスとを有する、第1のパスを含む、サービスチェーンを識別することができる。コントローラは、第1のサービスの第2のインスタンスと、第2のサービスの第2のインスタンスとを有する、第2のパスを含む、第2のサービスチェーンを識別することができる。コントローラは、メタデータサーバへのクエリを生成することによって、利用可能なインスタンスをポーリングすることによって、またはコントローラの中にキャッシュされたデータファイルから、インスタンスを識別することができる。例えば、コントローラは、クライアントからネットワークトラフィックをダイレクトするために、サービスの利用可能なインスタンスのリストを伴って構成される、またはそれを記憶することができる。コントローラは、クラウドAPIを使用し、第1のサービスの第1のインスタンス、第1のサービスの第2のインスタンス、第2のサービスの第1のインスタンス、および第2のサービスの第2のインスタンスの各々に対するメタデータを受信することができる。例えば、コントローラは、クラウドAPIを使用して、1つ以上のクエリを生成することができる。コントローラは、メタデータに基づいて、第1のサービスの第1のインスタンスのための第1のエッジ重量、第1のサービスの第2のインスタンスのための第2のエッジ重量、第2のサービスの第1のインスタンスのための第3のエッジ重量、および第2のサービスの第2のインスタンスのための第4のエッジ重量を決定することができる。エッジ重量は、インスタンスのための環境重量を含む、または示すことができる。重量は、クラウド上のインスタンスの性能のレベルを示すことができる。重量は、インスタンスの効率のレベルを示すことができる。重量は、サービスチェーン内で1つのインスタンスから別のインスタンスにデータを伝送する効率のレベルを示すことができる。コントローラは、第3のエッジ重量との第1のエッジ重量の組み合わせに基づいて、第1のパスのための第1のパス重量を生成することができる。コントローラは、第4のエッジ重量との第2のエッジ重量の組み合わせに基づいて、第2のパスのための第2のパス重量を生成することができる。
コントローラは、インスタンスのためのアカウント情報およびデバイスの属性に基づいて、重量を決定することができる。インスタンスまたはインスタンスの仮想サーバのためのアカウント情報は、インスタンスがトラフィックをダイレクトするサービスのメタデータを指すことができる。デバイスの属性は、アプライアンス、中間デバイス、インスタンス、または負荷平衡装置の属性を指すことができる。属性は、例えば、場所、配置、容量、アクティブ接続の数、メモリ、CPU使用量、帯域幅、またはネットワークコネクティビティを含むことができる。コントローラは、インスタンス自体またはインスタンスの仮想サーバの属性に基づいて、およびインスタンスのためのアカウント情報(例えば、インスタンスがトラフィックをダイレクトするバックエンドサーバと関連付けられるアカウント情報)を使用して、重量を決定することができる。
いくつかの実施形態では、コントローラは、サービスチェーンの各々に対するパス重量に基づいて、各サービスチェーンをランク付けすることができる。コントローラは、昇順または降順でサービスチェーンをランク付けすることができる。コントローラは、ランキングに基づいて、複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することができる。サービスチェーンのサブセットは、サービスチェーンの最適なセットまたは最適なサービスチェーンを指すことができる。これらのサービスチェーンは、クラウドコンピューティング環境の同一のサービスを提供するように構成される他の利用可能なサービスチェーンに対して、最適または最良性能であり得る。例えば、全てのサービスチェーンは、1つまたは複数の同一のサービスを提供することができるが、各サービスチェーンは、別のサービスチェーンと異なる少なくとも1つのインスタンスを含むため、別のサービスチェーンと異なり得る。例えば、サービスチェーンのうちのいずれも、別のサービスチェーンと同一のサービスチェーンの全てを含まない。
いくつかの実施形態では、コントローラは、最適なサービスチェーンのセットを分析または解析し、利用可能である、またはコンピューティングインフラストラクチャによって提供される1つ以上のインスタンスが、最適なサービスチェーンのセットの中に表されない、または含まれないことを決定することができる。少なくとも1つの欠落しているインスタンスがあることを決定することに応答して、コントローラは、欠落しているインスタンスを決定することができる。コントローラは、次いで、パス重量に基づいて、記憶されたサービスチェーンのリストを記憶するテーブルにアクセスし、欠落しているサービスチェーンを含む、次の最高性能サービスチェーンを識別することができる。コントローラは、本付加的サービスチェーンを最適なサービスチェーンのサブセットに追加することができる。コントローラは、全ての利用可能なインスタンスが最適なサービスチェーンのセットの中に表される、または含まれるまで、本プロセスを繰り返すことができる。したがって、コントローラは、サービスチェーンのサブセットを修正し、複数のサービスチェーンのうちの1つ以上の付加的サービスチェーンを含むことができ、1つ以上の付加的サービスチェーンは、サービスの1つ以上の欠落しているインスタンスを備える。
ステップ790では、コントローラは、複数のサービスチェーンのうちのサービスチェーンを選択し、クライアントからネットワークトラフィックをダイレクトすることができる。コントローラは、負荷平衡機能およびインスタンスの各々に対するパス重量に基づいて、サービスチェーンを選択することができる。例えば、コントローラは、より高い重量が改良された性能を示す場合に、最高パス重量に対応するサービスチェーンを選択することができる。別の実施例では、より高い重量は、減少した性能を示してもよく、したがって、コントローラは、最低パス重量に対応するサービスチェーンを選択してもよい。いくつかの実施形態では、コントローラは、加重最小接続機能等の加重負荷平衡機能を使用することができる。コントローラは、選択された最適なサービスチェーンを負荷平衡装置に入力し、または別様に選択された最適なサービスチェーンについての情報を識別し、または負荷平衡装置に提供し、クライアントからの要求、またはクライアントからトラフィックを受信することに応答して、サービスチェーンを負荷平衡することができる。
いくつかの実施形態では、負荷平衡機能およびパス重量に基づいてサービスチェーンを選択することに応じて、コントローラは、選択されたサービスチェーンのパスを介して、クライアントからネットワークをダイレクトすることができる。コントローラは、選択されたサービスチェーンのパスの中のインスタンスを識別する情報とともに、クライアントからのトラフィックをカプセル化することができる。コントローラは、選択されたサービスチェーンのパスの中のインスタンスのそれぞれの標識または他の識別子とともに、トラフィックをカプセル化することができる。コントローラは、トラフィックを選択されたサービスチェーンの中の第1のインスタンスにダイレクトすることができる。第1のインスタンスは、次いで、トラフィックを選択されたサービスチェーンの中の第2のインスタンスにダイレクトしてもよい。第1のインスタンスは、カプセル化された情報に基づいて、第2のインスタンスを識別することができる。ある場合には、第1のインスタンスは、トラフィックを処理し、次いで、カプセル化された情報を解析し、選択されたサービスチェーンのパスの中の第2のインスタンスを識別し得る、ルータまたはスイッチに処理されたトラフィックを転送することができる。ある場合には、カプセル化された情報は、サービスチェーンのパスの中のインスタンスの各々に対するIPアドレスを含む、または示すことができる。
ここで図8を参照すると、サービスチェーンを負荷平衡するためのシステム800の実施形態の機能ブロック図が示されている。システム800は、図1−7Aまたは9A−9Cで描写される1つ以上のコンポーネントまたはシステムによって実施されることができる。システム800は、コンピューティングインフラストラクチャ805またはクラウド環境805を含むことができる。コンピューティングインフラストラクチャ805は、ネットワーク(例えば、ネットワーク104)を介して、1つ以上のクライアント102a−nからクライアントトラフィック850を受信および伝送することができる。コンピューティングインフラストラクチャ805は、コントローラ705、メタデータサーバ820、および1つ以上のサービスまたはサーバ845a−eを含む、提供する、またはそれらと関連付けられることができる。コントローラ705は、1つ以上の制御プレーンデーモン825a−cを含むことができる。制御プレーンデーモンのうちの1つ以上のものは、クラウド認識デーモン825aを含むことができる。コントローラ705は、データプレーン835を含むことができる。データプレーンは、VIP2 840(例えば、クライアントトラフィックを1つ以上のサーバにダイレクトするように構成されるvServer275)を含むことができる。
ステップ865では、クラウド認識デーモン825aは、メタデータサーバ820からメタデータをフェッチする、または読み出すことができる。ステップ870では、クラウド認識デーモン825aは、受信されたメタデータを使用して、インスタンスの各々に対してクラウド重量を決定することができる。例えば、VIP2 840インスタンスのためのクラウド重量は、a、b、c、d、およびeであることができる。ステップ875では、クラウド認識デーモン825aは、クラウド重量をデータプレーン835にパスする。コントローラ705は、次いで、クラウド重量を使用し、コンピューティングインフラストラクチャ805によって提供される各サービスチェーンに対してパス重量を決定することができる。ステップ880では、コントローラ705は、1つ以上の負荷平衡アルゴリズムとともにパス重量を使用し、サービスチェーンを選択して、1つ以上のクライアント102a−nからトラフィックをダイレクトすることができる。
ここで図9Aを参照すると、サービスチェーンを負荷平衡するように構成されるコンピューティングインフラストラクチャ900の実施形態の機能ブロック図が示されている。コンピューティングインフラストラクチャ900(またはクラウド環境900)は、サービスチェーンを介して、サービスを1つ以上のクライアント102a−nに配信する。例えば、いくつかの実施形態では、コンピューティングインフラストラクチャ900は、以下のサービスをともにグループ化、リンク、または連鎖するサービスチェーン、すなわち、ファイアウォール(FW)・侵入検出システム(IDS)・ウェブサービス(WS)を伴って構成されることができる。コンピューティングインフラストラクチャは、以下のような各サービスの複数のインスタンス、すなわち、ファイアウォールサービスの3つのインスタンス、IDSサービスの2つのインスタンス、およびウェブサービスの3つのインスタンスを含むことができる。コントローラは、以下のような各サービスチェーンの数に基づくサービスチェーンのためのパスの総数、すなわち、3つのFW×2つのIDS×3つのWS=18個のパスを決定することができる。
サービスのインスタンスは、1つ以上のゾーンまたはクラウドパーティション内で実行することができる。例えば、コンピューティングインフラストラクチャ900は、第1のクラウドパーティションCP1と、第2のクラウドパーティションCP2とを含むことができる。第1のクラウドパーティションCP1はさらに、2つのサブパーティションCP1.1およびCP1.2を含むことができる。第2のクラウドパーティションCP2は、サブパーティションCP2.1を含むことができる。コンピューティングインフラストラクチャ900は、以下のようにクラウドパーティション上の3つの異なるサービスの1つ以上のインスタンスを実行することができる、すなわち、ファイアウォール(FW1)の第1のインスタンスは、CP1.1上で実行することができ、ファイアウォール(FW2)の第2のインスタンスは、CP1.2上で実行することができ、ファイアウォール(FW3)の第3のインスタンスは、CP2.1上で実行することができ、侵入検出システム(IDS1)の第1のインスタンスは、CP1.2上で実行することができ、侵入検出システム(IDS2)の第2のインスタンスは、CP2.1上で実行することができ、ウェブサービス(WS1)の第1のインスタンスは、CP1.2上で実行することができ、ウェブサービス(WS2)の第2のインスタンスは、CP2.1上で実行することができ、ウェブサービス(WS3)の第3のインスタンスは、CP1.1上で実行することができる。
コントローラ705は、インスタンスの各々に対する情報リポジトリからメタデータを受信し、インスタンスの場所、容量、プロセッサ、構成、メモリ、ネットワーク接続、またはインスタンスのそれぞれの重量に基づいてパス重量を決定することを促進し得る、他のメタデータまたは情報を決定することができる。コントローラは、情報リポジトリから受信されるメタデータを使用して、各インスタンスに対してエッジ重量を決定することができる。コントローラは、エッジ重量を使用し、表4に図示されるようなパス重量を決定することができる。
表4に図示されるパス重量は、1つ以上のパス重量計算技法またはアルゴリズムを使用して、決定されることができる。コントローラは、重量割当アルゴリズムに応じて、昇順または降順で表4に図示されるパス重量をソートすることができる。例えば、コントローラは、最高ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も効率的から最も非効率的までパス重量をランク付けすることができる。ある場合には、コントローラは、最低ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も非効率的から最も効率的までパス重量をランク付けすることができる。表5は、ランク付けまたはソートされたパス重量を図示する。
コントローラは、表5に示されるソートまたはランク付けされた表に基づいて、1つ以上の最適なサービスチェーンまたはパスを選択することができる。コントローラは、所定数の最高ランキングパスを選択することができ、最高ランキングは、最も効率的または最適なパスに対応することができる。例えば、コントローラは、以下のようなソートされた表の最上位の3つのエントリ、すなわち、P1:FW1→IDS1→WS1(最適なパス1)、P7:FW2→IDS1→WS1(最適なパス2)、P3:FW1→IDS1→WS3(最適なパス3)を選択することができる。コントローラは、最上位の3つのエントリによって示されるパスを使用し、より効率的に(例えば、少ない待ち時間、より少ないオーバーヘッド、高いスループット、低いコスト等)トラフィックを処理することができる。
いくつかの実施形態では、コントローラは、18個全ての可能性として考えられるパスを分析し、最高ランキングパスを選択することができる。いくつかの実施形態では、コントローラは、機械学習技法またはプルーニング技法を使用し、全ての可能性として考えられるパスを分析することなく、最適なパスを選択することができる。例えば、コントローラは、少なくとも2つのインスタンスが同一のデータセンターゾーンまたはパーティション内にないパスが、あまり効率的ではないことを決定し、ソートされた表5を作成することに先立って、表4からこれらのパスを除外することができる。
いくつかの実施形態では、コントローラは、選択された最適なパスから欠落している、コンピューティングインフラストラクチャによって提供される任意のインスタンスがあるかどうかを決定することができ、全てのインスタンスを網羅する付加的パスを含む。コントローラは、欠落しているインスタンスを識別し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、サービスチェーンを負荷平衡するためにコントローラによって利用されるように、付加的パスを選択することができる。例えば、3つの選択された最適なパス1、2、または3のうちのいずれも、インスタンスFW3、IDS2、およびWS2を含まない。コントローラは、次いで、ソートされた表3を解析し、これらのインスタンスのうちの1つ以上のものを含む、付加的な最適なパスを識別することができる。例えば、コントローラは、P17:FW3→IDS2→WS2(最適なパス4)として、欠落しているインスタンスのうちの1つ以上のものを含む、最高ランキングパスを選択することができる。ある場合には、コントローラは、表を繰り返し解析し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、選択された最適なパスの中で表されるまで、欠落しているインスタンスを含む最高ランキングパスを選択することができる。
ここで図9Bを参照すると、サービスチェーンを負荷平衡するように構成されるコンピューティングインフラストラクチャ900の実施形態の機能ブロック図が示されている。コントローラ705によって選択される4つの最適なパスまたはサービスチェーンが、負荷平衡装置アルゴリズムの中へロードされる。例えば、コントローラ705は、対応するパス重量とともに、選択された最適なパスを受信するように構成される、負荷平衡装置を含むことができる。選択された最適なパスは、
インスタンスFW1、IDS1、およびWS1、およびP1のパス重量を有する、サービスチェーン1と、
インスタンスFW2、IDS1、およびWS1、およびP7のパス重量を有する、サービスチェーン2と、
インスタンスFW1、IDS1、およびWS3、およびP3のパス重量を有する、サービスチェーン3と、
インスタンスFW3、IDS2、およびWS2、およびP17のパス重量を有する、サービスチェーン4と、
を含むことができる。
コントローラ705は、これら4つのサービスチェーンが最適なサービスチェーンであることを決定することができる。コントローラ705がクライアントからトラフィックを受信するとき、コントローラ705は、負荷平衡機能および4つの最適なサービスチェーンのそれぞれのパス重量に基づいて、4つの最適なサービスチェーンからサービスチェーンを選択することができる。コントローラ705は、次いで、クライアントから、選択されたサービスチェーンまたは選択されたサービスチェーンのインスタンスへとトラフィックをダイレクトすることができる。いくつかの実施形態では、コントローラ705は、サービスチェーンのインスタンスのインジケーション、識別子、または標識とともに、クライアントからのトラフィックのデータパケットをカプセル化することができる。例えば、コントローラは、マルチプロトコル標識技法を用いて、データパケットをカプセル化することができる。標識は、パケットをサービスチェーンの中の後続のノードまたはインスタンスへとダイレクトするようにサービスチェーンの中のコンポーネントに命令することができる。標識は、サービスチェーンのインスタンスのIPアドレスまたは他の識別子を含むことができる。インスタンスは、識別子を使用して検索を実施し、サービスチェーンの後続のインスタンスのIPアドレスを決定し、次いで、データパケットを識別されたインスタンスにダイレクトするように構成されることができる。いくつかの実施形態では、インターフェースまたはルータは、データパケットをカプセル化する情報に基づいて、1つのインスタンスから次のインスタンスにデータをダイレクトすることができる。例えば、第1のインスタンスがデータパケットを処理するとき、第1のインスタンスは、パケットをカプセル化し、第1のインスタンスがパケットを処理したことを示すことができる。ルータまたはスイッチは、パケットを解析し、第1のインスタンスがパケットをすでに処理しており、パケットがコントローラ705によって実施されるカプセル化によって識別される第2のインスタンスに転送される準備ができていることを決定することができる。
ここで図9Cを参照すると、サービスチェーンを負荷平衡するように構成されるコンピューティングインフラストラクチャ900の実施形態の機能ブロック図が示されている。図9Cは、コントローラ705によって選択された4つの最適なサービスチェーンを図示する。最適なサービスチェーンを決定することによって、コントローラ705は、クラウドパーティションまたはクラウドサブパーティションの間の横断の数を削減することができる。図9Cに図示されるように、選択された最適なパスは、任意のパスの中の2回の横断から4回の横断に及ぶ。例えば、サービスチェーン1は、インスタンスFW1、IDS1、およびWS1を有する。コントローラ705は、第1に、クライアントからFW1にパケットをダイレクトする。本初期リンクは、コントローラ705およびFW1が両方とも同一のクラウドサブパーティションCP1.1内にあるため、任意のクラウドパーティションを横断するようにパケットに要求しない。第2に、FW1は、データパケットをIDS1に転送することができる。本第2のリンクは、パケットにCP1.1およびCP1.2の境界を横断させ、IDS1に到達させる。したがって、データパケットは、チェーンの中の第2のリンクをトラバースするときに、2つのパーティション境界を横断する。IDS1は、次いで、データパケットをWS1に転送することができる。IDS1およびWS1が同一のサブパーティションCP1.2内にあるため、データは、いかなるさらなる境界も横断しない。したがって、サービスチェーン1は、2つのパーティション境界を横断するパスを有する。しかしながら、パスは、クラウドパーティションCP1内に留まる。サービスチェーン1が2回だけの横断を有し、サービスチェーンがCP1内に留まり、コントローラ705およびFW1が同一のクラウドサブパーティションCP1.1内にあるため、サービスチェーン1は、他の3つのサービスチェーンに対して最高パス重量を有してもよい。
サービスチェーン2は、インスタンスFW2、IDS1、およびWS1を有する。第1に、コントローラ705は、クライアントからFW2にデータを転送する。本初期リンクでは、データは、CP1.1からCP1.2まで横断するが、CP1内に留まる。したがって、パスの中の第1のリンクは、2回の横断を有する。第2に、データは、FW2から、同一のCP1.2サブパーティション内にあるIDS1までトラバースする。第3に、データは、IDS1から、同一のCP1.2サブパーティション内にあるWS1までトラバースする。したがって、サービスチェーン2は、パスが2回だけの横断を有するため、第2の最高パス重量を有してもよい。これは、コントローラ705がFW2と異なるサブパーティション内にあるため、2番目に最高であり得る。
サービスチェーン3は、インスタンスFW1、IDS1、およびWS3を有する。第1に、コントローラ705は、クライアントからFW1にパケットを転送する。本初期リンクは、いかなる境界も横断せず、サブパーティションCP1.1に封入される。第2に、データは、サブパーティションCP1.1からサブパーティションCP1.2まで進むことによって、FW1からIDS1までトラバースする。パスの本区間は、2回の横断を有するが、クラウドパーティションCP1内に留まる。第3に、データは、CP1.2からCP1.1に戻ることによって、IDS1からWS3まで横断する。パスの本区間は、さらに2回の横断を導入する。したがって、サービスチェーン3は、サブパーティションを通して4回のカットまたは横断を含むが、パーティションCP1内に留まる。本サービスチェーンは、より高い性能のサービスチェーンよりも2つ多い横断である、4回の横断を有するため、第3の最高性能のサービスチェーンであってもよい。
サービスチェーン4は、インスタンスFW3、IDS2、およびWS2を有する。第1に、コントローラ705は、CP1.1からCP2.1までトラバースすることによって、クライアントから受信されるデータをFW3に転送する。パスの本区間は、データがサブパーティションCP1.1の境界、パーティションCP1の境界、パーティションCP2の境界、次いで、サブパーティションCP2.1の境界を横断するため、4回の横断を含む。第2に、データは、FW3からIDS2まで進む。パスの本区間は、FW3およびIDS2が両方ともクラウドサブパーティションCP2.1の中に位置するため、いかなるさらなる横断も導入しない。第3に、データは、IDS2からWS2まで進む。パスの本区間は、IDS2およびWS2が両方ともクラウドサブパーティションCP2.1の中に位置するため、いかなるさらなる横断も導入しない。本サービスチェーンのパスは、4回の横断を含む。これは、2つの最上位性能サービスチェーンよりも2つ多い横断である、4回の横断を有するため、かつパスが高レベルクラウドパーティションCP1からCP2を横断するため、4つの選択された最適なサービスチェーンのうちの最低性能サービスチェーンであってもよい。例えば、CP1およびCP2は、異なるデータセンタまたは異なるラック内で地理的に分散されてもよい。
図10は、サービスチェーンを負荷平衡する実施形態の機能フロー図である。フロー1000は、図1−7A、8、または9A−9Cに説明される1つ以上のシステムまたはコンポーネントを使用して、実施されることができる。フロー1000のステップ1005では、コントローラは、コンピューティングインフラストラクチャによって提供されるインスタンスの全ての重量をゼロまたはデフォルト値(例えば、0、1、2、3、4、またはある他のデフォルト値)に初期化する。ステップ1010では、コントローラは、コンピューティングインフラストラクチャによって提供されるインスタンスについてのメタデータを記憶する情報リポジトリを有する、メタデータサーバのための1つ以上のクエリを生成することができる。コントローラは、要求をメタデータサーバに伝送することができる。要求に応答して、コントローラは、各インスタンスに対してメタデータを受信することができる。ステップ1015では、コントローラは、各インスタンスに対して環境の暗示的重量を計算または決定することができる。重量は、各インスタンスに対してエッジ重量または環境重量を指すことができる。
ステップ1020では、コントローラは、ステップ1015において各インスタンスに対して計算される重量を、インスタンスのそれぞれについて前もって決定された重量と比較することができる。例えば、コントローラは、重量の前の値または履歴重量値を記憶することができる。各インスタンスに対する前の重量値は、インスタンスを備えるサービスチェーンのためのパス重量を決定するために使用されている場合がある。コントローラは、ステップ1015において決定される新しい重量を前の重量と比較し、重量に差があるかどうかを決定することができる。重量の差は、ステップ1010においてメタデータサーバから受信される、新しいまたは更新されたメタデータに応答し得る。重量の差がない場合、コントローラは、ステップ1025に進むことができ、その時点で、コントローラは、所定の時間間隔にわたってスリープする、またはスタンバイモードになることができる。所定の時間間隔の満了に応じて、コントローラは、ステップ1010に進み、再びメタデータサーバにクエリを行うことができる。コントローラは、コントローラがステップ1020において重量の変化を識別するまで、サイクルを繰り返すことができる。
コントローラが、同一のインスタンスの前の重量と比較して、ステップ1020において任意のインスタンスの重量の変化があることを決定する場合、コントローラは、ステップ1030に進むことができる。ステップ1030では、コントローラは、コンピューティングインフラストラクチャのインスタンスから形成される、全ての可能性として考えられるパスのためのパス重量を計算することができる。コントローラは、サービスチェーンの各インスタンスの環境重量またはエッジ重量を組み合わせることによって、各サービスチェーンに対してパス重量を決定することができる。ステップ1035では、コントローラは、最高性能サービスチェーンが最上位サービスチェーンとしてランク付けまたはソートされるように、パス重量に基づいてサービスチェーンをソートすることができる。ある場合には、コントローラは、パス重量に基づいて、最後のランクのサービスチェーンが最高性能サービスチェーンであるように、昇順でサービスチェーンをソートすることができる。
ステップ1040では、コントローラは、ソートされた表から、3つのサービスチェーン等の所定数の最上位性能サービスチェーンを選択することができる。ステップ1045では、コントローラは、最上位の3つの選択されたサービスチェーンを解析し、選択されたサービスチェーンが、少なくとも1回、コンピューティングインフラストラクチャによって提供される全インスタンスを含むかどうかを決定することができる。コントローラが、コンピューティングインフラストラクチャによって提供されるインスタンスが選択されたサービスチェーンから欠落していることを決定する場合、コントローラは、ステップ1050に進むことができる。ステップ1050では、欠落しているインスタンスがあることを決定することに応答して、コントローラは、ソートされた表を解析し、欠落しているインスタンスを含む、次の最高ランクのサービスチェーンを識別することができる。コントローラは、本付加的インスタンスを選択されたインスタンスのセットに追加することができる。例えば、選択されたインスタンスのセットが最初に3つのサービスチェーンを含んだ場合、コントローラは、第4のサービスチェーンを本セットに追加することができ、第4のサービスチェーンは、欠落しているインスタンスを含む。
コントローラは、ステップ1045に戻り、4つの選択されたサービスチェーンのセットが、少なくとも1回、サービスチェーンによって提供される全てのインスタンスを含むかどうかを決定することができる。コントローラは、選択されたサービスチェーンのセットが、クラウドコンピューティングインフラストラクチャによって提供されるインスタンスの全てを含むまで、プロセスを繰り返すことができる。
ステップ1055では、選択されたサービスチェーンが、コンピューティングインフラストラクチャによって提供されるサービスのインスタンスの全てを含むことを決定することに応答して、コントローラは、負荷平衡システムにおいてサービスチェーンとして選択された最適なパスを構成することができる。ある場合には、コントローラは、負荷平衡装置を含むことができる。ある場合には、負荷平衡装置は、コントローラの外部にあり得る、またはコントローラと異なる仮想マシンによって実行されてもよい。ステップ1060では、コントローラは、各サービスチェーンのパス重量を使用し、サービスチェーンを負荷平衡するように、負荷平衡装置を構成することができる。コントローラまたは負荷平衡装置は、次いで、負荷平衡機能およびパス重量に基づいて、選択された最適なサービスチェーンからサービスチェーンを選択することができる。
コントローラは、次いで、ステップ1025に進み、所定の時間間隔(例えば、5秒、10秒、30秒、5分、10分、30分、1時間、2時間、3時間、6時間、12時間、24時間、48時間、72時間、1週間、またはサービスチェーンを負荷平衡することを促進するある他の間隔)にわたってスリープまたはスタンバイモードになることができる。
上記で説明されるシステムは、これらのコンポーネントのうちのいずれかまたはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型マシンの上、またはいくつかの実施形態では、分散システム内の複数のマシンのいずれかの上に提供され得ることを理解されたい。上記で説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせを生産するために、プログラミングおよび/または工学技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記で説明されるシステムおよび方法は、1つ以上の製造品の上または中で具現化される、1つ以上のコンピュータ可読プログラムとして提供されてもよい。本明細書で使用されるような「製造品」という用語は、1つ以上のコンピュータ可読デバイス、ファームウェア、プログラマブル論理、メモリデバイス(例えば、EEPROM、ROM、PROM、RAM、SRAM等)、ハードウェア(例えば、集積回路チップ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等)、電子デバイス、コンピュータ可読不揮発性記憶ユニット(例えば、CD−ROM、フロッピー(登録商標)ディスク、ハードディスクドライブ等)からアクセス可能であり、かつそれに組み込まれる、コードまたは論理を包含することを意図している。製造品は、ネットワーク伝送線、無線伝送媒体、空間を通して伝搬する信号、電波、赤外線信号等を介したコンピュータ可読プログラムへのアクセスを提供する、ファイルサーバからアクセス可能であり得る。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、ハードウェア論理、およびプロセッサによって実行されるコンピュータ可読媒体に組み込まれるソフトウェアまたはプログラマブルコードを含む。一般に、コンピュータ可読プログラムは、LISP、PERL、C、C++、C#、PROLOG等の任意のプログラミング言語で、またはJAVA(登録商標)等の任意のバイトコード言語で実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして1つ以上の製造品の上または中に記憶されてもよい。
「または」の言及は、「または」を使用して説明される任意の用語が、単一、1つを上回る、または全ての説明される用語のうちのいずれかを示し得るように、包括的として解釈され得る。
方法およびシステムの種々の実施形態が説明されているが、これらの実施形態は、例示的であり、説明される方法またはシステムの範囲をいかようにも限定しない。当業者は、説明される方法およびシステムの最も広い範囲から逸脱することなく、説明される方法およびシステムの形態および詳細への変更を達成することができる。したがって、本明細書に説明される方法およびシステムの範囲は、例示的実施形態のうちのいずれによっても限定されるべきではなく、付随の請求項およびそれらの均等物に従って定義されるべきである。