(57)【要約】本開示は、サービスチェーン負荷平衡のシステムおよび方法を対象とする。クライアントとコンピューティングインフラストラクチャとの中間にあるコントローラは、複数のサービスチェーンを識別する。複数のサービスチェーンはそれぞれ、コンピューティングインフラストラクチャによって提供される第１のサービスのインスタンスと、コンピューティングインフラストラクチャによって提供される第２のサービスとを有する、パスを含む。コントローラは、複数のサービスチェーンの各々に対するパス重量を決定する。パス重量は、サービスチェーンによる、サービスを配信することの効率のレベルを示す。コントローラは、負荷平衡機能および複数のサービスチェーンの各々に対するパス重量に基づいて、複数のサービスチェーンからサービスチェーンを選択し、クライアントからネットワークトラフィックをダイレクトする。
2019518272.tif 000002
【特許請求の範囲】
【請求項１】
サービスチェーンを負荷平衡する方法であって、前記方法は、
クライアントと、１つ以上のネットワーク化環境内の１つ以上のサーバを含むコンピューティングインフラストラクチャとの中間にあるコントローラによって、複数のサービスチェーンを識別することであって、前記複数のサービスチェーンの各々は、前記コンピューティングインフラストラクチャによって提供される第１のサービスのインスタンスと、前記コンピューティングインフラストラクチャによって提供される第２のサービスのインスタンスとを有するパスを含む、ことと、
前記コントローラによって、前記複数のサービスチェーンの各々に対するパス重量を決定することであって、前記パス重量は、前記サービスチェーンによる、サービスを配信することの効率のレベルを示す、ことと、
前記コントローラによって、負荷平衡機能および前記複数のサービスチェーンの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンからサービスチェーンを選択し、クライアントからネットワークトラフィックをダイレクトすることと
を含む、方法。
【請求項２】
前記複数のサービスチェーンを識別することは、
クラウドアプリケーションプログラミングインターフェースを使用する前記コントローラによって、１つ以上のクエリを生成し、前記複数のサービスチェーンの各インスタンスを識別することと、
前記１つ以上のクエリに応答する前記コントローラによって、前記第１のサービスの第１のインスタンスと前記第２のサービスの第１のインスタンスとを有する第１のパスを含む第１のサービスチェーンのインジケーションと、前記第１のサービスの第２のインスタンスと前記第２のサービスの第２のインスタンスとを有する第２のパスを含む第２のサービスチェーンのインジケーションとを受信することと
を含む、請求項１に記載の方法。
【請求項３】
クラウドアプリケーションプログラミングインターフェースを使用する前記コントローラによって、１つ以上のクエリを生成し、前記複数のサービスチェーンの各インスタンスに対してメタデータを読み出すことを含み、前記１つ以上のクエリは、配置、リソース配分、確保のタイプ、またはコネクティビティのタイプのうちの少なくとも１つのための情報を読み出すように構成される、請求項１に記載の方法。
【請求項４】
前記コントローラによって、前記第１のサービスの第１のインスタンスと前記第２のサービスの第１のインスタンスとを有する第１のパスを含む前記複数のサービスチェーンのうちの前記サービスチェーンを識別することと、
前記コントローラによって、前記第１のサービスの第２のインスタンスと前記第２のサービスの第２のインスタンスとを有する第２のパスを含む前記複数のサービスチェーンのうちの第２のサービスチェーンを識別することと、
クラウドアプリケーションプログラミングインターフェースを使用する前記コントローラによって、前記第１のサービスの前記第１のインスタンス、前記第１のサービスの前記第２のインスタンス、前記第２のサービスの前記第１のインスタンス、および前記第２のサービスの前記第２のインスタンスの各々に対するメタデータを受信することと、
前記コントローラによって、前記メタデータに基づいて、前記第１のサービスの前記第１のインスタンスのための第１のエッジ重量、前記第１のサービスの前記第２のインスタンスのための第２のエッジ重量、前記第２のサービスの前記第１のインスタンスのための第３のエッジ重量、および前記第２のサービスの前記第２のインスタンスのための第４のエッジ重量を決定することと、
前記コントローラによって、前記第３のエッジ重量との前記第１のエッジ重量の組み合わせに基づいて、前記第１のパスのための第１のパス重量を生成することと、
前記コントローラによって、前記第４のエッジ重量との前記第２のエッジ重量の組み合わせに基づいて、前記第２のパスのための第２のパス重量を生成することと、
前記コントローラによって、前記第２のパス重量よりも高い前記第１のパス重量のランキングに基づいて、前記第１のパスに対応する前記サービスチェーンを選択することと
を含む、請求項１に記載の方法。
【請求項５】
前記サービスチェーンを選択することは、
前記コントローラによって、前記複数のサービスチェーンの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンのうちの各サービスチェーンをランク付けすることと、
前記コントローラによって、前記ランキングに基づいて、前記複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することと、
前記コントローラによって、前記サービスチェーンのサブセットの各々に対する前記パス重量を前記負荷平衡機能に入力し、前記サービスチェーンを選択することと
を含む、請求項１に記載の方法。
【請求項６】
前記コントローラによって、前記複数のサービスチェーンの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンのうちの各サービスチェーンをランク付けすることと、
前記コントローラによって、前記ランキングに基づいて、前記複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することと、
前記コントローラによって、前記サービスチェーンのサブセットから欠落している前記第１のサービスの１つ以上のインスタンスを識別することと、
前記コントローラによって、前記複数のサービスチェーンのうちの１つ以上の付加的サービスチェーンを含むように前記サービスチェーンのサブセットを修正することであって、前記１つ以上の付加的サービスチェーンは、前記第１のサービスの前記１つ以上のインスタンスを含む、ことと
を含む、請求項１に記載の方法。
【請求項７】
機械学習技法を使用する前記コントローラによって、前記複数のサービスチェーンをプルーニングし、前記複数のサービスチェーンのサブセットを生成することと、
前記コントローラによって、前記負荷平衡機能および前記複数のサービスチェーンの前記サブセットの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンの前記サブセットから前記サービスチェーンを選択することと
を含む、請求項１に記載の方法。
【請求項８】
前記複数のサービスチェーンの各々の各インスタンスのエッジ重量に基づいて、前記複数のサービスチェーンの各々に対する前記パス重量を決定することであって、前記パス重量は、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストのうちの少なくとも１つに基づく、こと
を含む、請求項１に記載の方法。
【請求項９】
前記複数のサービスチェーンの各々は、異なるパスを含み、同一のサービスを提供する、請求項１に記載の方法。
【請求項１０】
前記コントローラによって、前記クライアントから前記選択されたサービスチェーンの前記第１のインスタンスにネットワークトラフィックを転送することを含む、請求項１に記載の方法。
【請求項１１】
サービスチェーンを負荷平衡するシステムであって、前記システムは、
クライアントと１つ以上のネットワーク化環境内の１つ以上のサーバを含むコンピューティングインフラストラクチャとの中間にあるコントローラであって、前記コントローラは、
複数のサービスチェーンを識別することであって、前記複数のサービスチェーンの各々は、前記コンピューティングインフラストラクチャによって提供される第１のサービスのインスタンスと、前記コンピューティングインフラストラクチャによって提供される第２のサービスのインスタンスとを有するパスを含む、ことと、
前記複数のサービスチェーンの各々に対するパス重量を決定することであって、前記パス重量は、前記サービスチェーンによる、サービスを配信することの効率のレベルを示す、ことと、
負荷平衡機能および前記複数のサービスチェーンの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンからサービスチェーンを選択し、クライアントからネットワークトラフィックをダイレクトすることと
を行うように構成される、コントローラ
を備える、システム。
【請求項１２】
前記コントローラはさらに、
クラウドアプリケーションプログラミングインターフェースに基づいて、１つ以上のクエリを生成し、前記複数のサービスチェーンの各インスタンスを識別することと、
前記１つ以上のクエリに応答して、前記第１のサービスの第１のインスタンスと前記第２のサービスの第１のインスタンスとを有する第１のパスを含む第１のサービスチェーンのインジケーションと、前記第１のサービスの第２のインスタンスと前記第２のサービスの第２のインスタンスとを有する第２のパスを含む第２のサービスチェーンのインジケーションとを受信することと
を行うように構成される、請求項１１に記載のシステム。
【請求項１３】
前記コントローラはさらに、クラウドアプリケーションプログラミングインターフェースに基づいて、１つ以上のクエリを生成し、前記複数のサービスチェーンの各インスタンスに対してメタデータを読み出すように構成され、前記１つ以上のクエリは、配置、リソース配分、確保のタイプ、またはコネクティビティのタイプのうちの少なくとも１つのための情報を読み出すように構成される、請求項１１に記載のシステム。
【請求項１４】
前記コントローラはさらに、
前記第１のサービスの第１のインスタンスと前記第２のサービスの第１のインスタンスとを有する第１のパスを含む前記複数のサービスチェーンのうちの前記サービスチェーンを識別することと、
前記第１のサービスの第２のインスタンスと前記第２のサービスの第２のインスタンスとを有する第２のパスを含む前記複数のサービスチェーンのうちの第２のサービスチェーンを識別することと、
クラウドアプリケーションプログラミングインターフェースを介して、前記第１のサービスの前記第１のインスタンス、前記第１のサービスの前記第２のインスタンス、前記第２のサービスの前記第１のインスタンス、および前記第２のサービスの前記第２のインスタンスの各々に対するメタデータを受信することと、
前記メタデータに基づいて、前記第１のサービスの前記第１のインスタンスのための第１のエッジ重量、前記第１のサービスの前記第２のインスタンスのための第２のエッジ重量、前記第２のサービスの前記第１のインスタンスのための第３のエッジ重量、および前記第２のサービスの前記第２のインスタンスのための第４のエッジ重量を決定することと、
前記第３のエッジ重量との前記第１のエッジ重量の組み合わせに基づいて、前記第１のパスのための第１のパス重量を生成することと、
前記第４のエッジ重量との前記第２のエッジ重量の組み合わせに基づいて、前記第２のパスのための第２のパス重量を生成することと、
前記第２のパス重量よりも高い前記第１のパス重量のランキングに基づいて、前記第１のパスに対応する前記サービスチェーンを選択することと
を行うように構成される、請求項１１に記載のシステム。
【請求項１５】
前記コントローラはさらに、
前記複数のサービスチェーンの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンのうちの各サービスチェーンをランク付けすることと、
前記ランクに基づいて、前記複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することと、
前記サービスチェーンのサブセットの各々に対する前記パス重量を前記負荷平衡機能に入力し、前記サービスチェーンを選択することと
を行うように構成される、請求項１１に記載のシステム。
【請求項１６】
前記コントローラはさらに、
前記複数のサービスチェーンの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンのうちの各サービスチェーンをランク付けすることと、
前記ランクに基づいて、前記複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することと、
前記サービスチェーンのサブセットから欠落している前記第１のサービスの１つ以上のインスタンスを識別することと、
前記複数のサービスチェーンのうちの１つ以上の付加的サービスチェーンを含むように前記サービスチェーンのサブセットを修正することであって、前記１つ以上の付加的サービスチェーンは、前記第１のサービスの前記１つ以上のインスタンスを含む、ことと
を行うように構成される、請求項１１に記載のシステム。
【請求項１７】
前記コントローラはさらに、
機械学習技法に基づいて、前記複数のサービスチェーンをプルーニングし、前記複数のサービスチェーンのサブセットを生成することと、
前記負荷平衡機能および前記複数のサービスチェーンの前記サブセットの各々に対する前記パス重量に基づいて、前記複数のサービスチェーンの前記サブセットから前記サービスチェーンを選択することと
を行うように構成される、請求項１１に記載のシステム。
【請求項１８】
前記コントローラはさらに、前記複数のサービスチェーンの各々の各インスタンスのエッジ重量に基づいて、前記複数のサービスチェーンの各々に対する前記パス重量を決定することであって、前記パス重量は、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストのうちの少なくとも１つに基づく、こと
を行うように構成される、請求項１１に記載のシステム。
【請求項１９】
前記複数のサービスチェーンの各々は、異なるパスを含み、同一のサービスを提供する、請求項１１に記載のシステム。
【請求項２０】
前記コントローラはさらに、前記クライアントから前記選択されたサービスチェーンの前記第１のインスタンスにネットワークトラフィックを転送するように構成される、請求項１１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本願は、２０１６年４月２９日に出願され“ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＳＥＲＶＩＣＥ  ＣＨＡＩＮ  ＬＯＡＤ  ＢＡＬＡＮＣＩＮＧ”と題された米国仮出願第１５／１４３，１８１号の利益およびそれに対する優先権を主張するものであり、該米国仮出願は、あらゆる目的のためにその全体が参照により本明細書中に援用される。
【０００２】
本願は、概して、コンピューティングインフラストラクチャ内の負荷平衡サービスチェーンに関する。具体的には、本願は、サービスチェーンのインスタンスに関連するメタデータを使用して、サービスチェーンを負荷平衡するためのシステムおよび方法に関する。
【背景技術】
【０００３】
クライアントデバイスは、１つ以上のサーバを含むクラウド環境を介して提供される、アプリケーション、サービス、またはインフラストラクチャにアクセスする、またはそれを使用することができる。クライアントデバイスは、クライアントデバイスとサーバとの中間にある中間デバイスを介して、クラウド環境または１つ以上のサーバにアクセスすることができる。しかしながら、サービスのインスタンスは、クラウド環境内の複数の領域または可用性ゾーンにわたって分配され得る。インスタンスの分布が、オーバーヘッド、コスト、待ち時間、スループット、または負荷に影響を及ぼし得るため、クラウド環境にわたって分配されるインスタンスのためのサービスを効率的に提供することは困難であり得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
本開示は、ネットワークを介してクラウドベースのサービスを管理するためのシステムおよび方法を対象とする。１つ以上のネットワーク化環境内の１つ以上のプロセッサまたはサーバを備える、コンピューティングインフラストラクチャでは、サービスのインスタンスは、複数の領域、可用性ゾーン、およびそれ以上にわたって分配され得る。コンピューティングインフラストラクチャは、サービスとしてのインフラストラクチャ（ＩａａＳ）環境、サービスとしてのソフトウェア（ＳａａＳ）環境、またはサービスとしてのプラットフォーム（ＰａａＳ）環境等のクラウド環境を含むことができる。ＩａａＳ環境は、共有コンピューティングリソース、データ、および情報が、オンデマンドでコンピューティングデバイスに提供される、クラウドコンピューティングを指すことができる。
【０００５】
コンピューティングインフラストラクチャは、マルチホップ処理展開（例えば、サービスチェイニング）を含むことができる。マルチホップ処理展開では、各ホップは、負荷平衡システムであることができる。しかしながら、全ホップレベルまたはサービスノードレベルにおける負荷平衡は、大域的な最適マルチホップ処理をもたらさない場合がある。本開示のシステムおよび方法は、マルチホップ展開の大域的視野を識別し、全ての可能性として考えられるパスを分析し、最適なパスを識別し、識別された最適なパスにわたってトラフィックを負荷平衡することができる。したがって、本開示のシステムおよび方法は、大域的に最適なサービスチェーン負荷平衡を使用することによって、コンピューティングインフラストラクチャの性能を改良することができる。
【０００６】
アプリケーション配信コントローラ（ＡＤＣ）等のクラウド環境のサーバとクライアントデバイスとの中間にあるデバイスは、クラウド環境によって提供されるサービスを提供または配信することを促進することができる。本開示のコントローラは、ＩａａＳ  ＡＰＩ等のクラウドアプリケーションプログラミングインターフェース（ＡＰＩ）にクエリを行い、ＩａａＳクラウドによって提供されるサービスのインスタンスに対応するメタデータを発見または決定することができる。メタデータは、分布、利用可能なリソース、またはリソース消費等のクラウド環境のプロバイダと関連付けられるアカウント情報を含むことができる。コントローラは、本メタデータを使用し、アプリケーション配信コントローラの特徴または機能性を自動的に調整し、ＡＤＣシステムにクラウド認識をもたらすことができる。クラウド環境と関連付けられるメタデータを使用することは、コントローラが、オーバーヘッド、コスト、待ち時間、スループット、または負荷を削減することによって、クラウド環境にわたって分配されるインスタンスのためのサービスをより効率的に提供することを可能にする。
【０００７】
例えば、公衆または私設クラウド環境内のホスト型システムは、クラウドパーティションまたは境界を識別または決定する１つ以上のＡＰＩを含むことができる。ＡＰＩは、ホスト型システムまたはホスト型システムとインターフェースをとるシステムが、内部ダイナミズムを監視し、オーバーヘッド、コスト、待ち時間、スループット、または負荷への環境影響を識別することを可能にする。いったん本システムが利用可能なメタデータを使用することによってインフラストラクチャおよびそのダイナミズムを認識すると、本システムは、本システムがクラウド環境により好適であるように自動的にそれ自体を調整することができ、より効率的に機能することができる。したがって、本開示のシステムおよび方法は、１）クラウドパーティション／境界を識別することと、２）クラウド内の内部ダイナミズムを監視することと、３）システムへのクラウド／環境影響を決定することと、４）環境変数に適応するようにホスト型システムを調整することとを行うことができる。
【０００８】
私設または公衆クラウドインフラストラクチャ（例えば、クラウド環境）のプロバイダは、クラウドインフラストラクチャの顧客のためのアカウント情報を含む、情報記憶またはデータリポジトリを維持することができる。本システムは、データベースとして本情報記憶を使用し、請求、保守、分析、または他の目的のためにユーザアカウント情報およびそれらのリソース配分を追跡することができる。クラウドＡＰＩは、データベースにクエリを実施するように構成されることができる。これらのＡＰＩを使用して、本システムは、クラウド内のインスタンスの配置、リソース配分（ＣＰＵ、メモリ、帯域幅）、確保のタイプ、コネクティビティのタイプ、またはインスタンスと関連付けられる他の属性または特性をフェッチすることを含む、インスタンスについてのメタデータをフェッチすることができる。
【０００９】
ＡＤＣは、読み出されたメタデータを使用し、負荷平衡動作を実施することができる。例えば、ＡＤＣは、クライアントからデータパケットまたはネットワークトラフィックを受信し、データパケットを宛先に転送することができる。１つ以上のサービスは、ネットワークデータまたはデータパケットを処理し、宛先に到達してもよい。サービスは、例えば、ファイアウォール、認証、侵入検出システム、ウェブサービス等を含むことができる。ＡＤＣは、メタデータを使用し、コンピューティングインフラストラクチャ内の複数のサービスのインスタンス識別することができる。ある場合には、インスタンスは、サービスチェーンと呼ばれ得る、パスを形成するように、ともにグループ化またはリンクされることができる。例えば、サービスチェーンは、ファイアウォールのインスタンスと、侵入検出システムのインスタンスと、ウェブサービスのインスタンスとを含む、パスを有することができる。
【００１０】
ＡＤＣは、メタデータを使用し、サービスチェーン負荷平衡を実施することができる。例えば、サービスノードレベルで（例えば、各サービスのインスタンスにおいて）負荷平衡を実施するのではなく、ＡＤＣは、サービスチェーンの各インスタンスに対してエッジ重量を決定し、各サービスチェーンの各インスタンスに対してエッジを組み合わせ、サービスチェーンのためのパス重量を決定し、次いで、パス重量に基づいてサービスチェーンを選択することができる。したがって、ＡＤＣは、クラウド環境を調整し、コンピューティングインフラストラクチャへの負荷を削減し、ネットワークオーバーヘッドを削減し、費用を削減し、改良された負荷平衡サービスを提供することができる。
【００１１】
例えば、本システムは、クラウド環境を介して提供されるサービスチェーンのサービスのいくつかまたは全てのインスタンス、およびインスタンスに関連するメタデータまたはアカウント情報を周期的にフェッチする、制御プレーンデーモンを伴って構成されることができる。本システムは、メタデータを分析し、サービスチェーンの各インスタンスに対するエッジ重量および各サービスチェーンに対するパス重量を識別、生成、または決定することができる。重量は、クラウドインフラストラクチャの性能の論理測定を示す、または指すことができる。パス重量は、改良されたシステム性能を達成するために、（例えば、加重ＬＢアルゴリズムとして）種々の負荷平衡（ＬＢ）アルゴリズムとともに使用されることができる。
【００１２】
少なくとも１つの側面は、サービスチェーンを負荷平衡する方法を対象とする。本方法は、コントローラが、コンピューティングインフラストラクチャによって提供される第１のサービスのインスタンスと、コンピューティングインフラストラクチャによって提供される第２のサービスのインスタンスとを有する、パスをそれぞれ含む、複数のサービスチェーンを識別するステップを含むことができる。コントローラは、クライアントとコンピューティングインフラストラクチャとの中間にあり得る。コンピューティングインフラストラクチャは、１つ以上のネットワーク化環境内の１つ以上のサーバを含むことができる。本方法は、コントローラが、複数のサービスチェーンの各々に対してパス重量を決定するステップを含むことができる。パス重量は、サービスチェーンによる、サービスを配信することの効率のレベルを示すことができる。本方法は、コントローラが、複数のサービスチェーンからサービスチェーンを選択し、クライアントからネットワークトラフィックをダイレクトするステップを含むことができる。コントローラは、負荷平衡機能および複数のサービスチェーンの各々に対するパス重量に基づいて、サービスチェーンを選択することができる。
【００１３】
いくつかの実施形態では、コントローラは、クラウドアプリケーションプログラミングインターフェースを使用して、１つ以上のクエリを生成し、複数のサービスチェーンの各インスタンスに対してメタデータを読み出すことができ、１つ以上のクエリは、配置、リソース配分、確保のタイプ、またはコネクティビティのタイプのうちの少なくとも１つのための情報を読み出すように構成される。いくつかの実施形態では、コントローラは、１つ以上のクエリを使用して複数のサービスチェーンを識別し、複数のサービスチェーンの各インスタンスを識別することができる。１つ以上のクエリに応答して、コントローラは、第１のパスを備える、第１のサービスチェーンのインジケーションを受信することができる。第１のパスは、第１のサービスの第１のインスタンスと、第２のサービスの第１のインスタンスとを有することができる。コントローラはまた、第２のパスを備える、第２のサービスチェーンのインジケーションを受信することもできる。第２のパスは、第１のサービスの第２のインスタンスと、第２のサービスの第２のインスタンスとを有することができる。
【００１４】
いくつかの実施形態では、コントローラは、第１のサービスの第１のインスタンスと、第２のサービスの第１のインスタンスとを有する、第１のパスを備える、複数のサービスチェーンのうちのサービスチェーンを識別することができる。コントローラは、第１のサービスの第２のインスタンスと、第２のサービスの第２のインスタンスとを有する、第２のパスを備える、複数のサービスチェーンのうちの第２のサービスチェーンを識別することができる。コントローラは、クラウドアプリケーションプログラミングインターフェースを使用して、第１のサービスの第１のインスタンス、第１のサービスの第２のインスタンス、第２のサービスの第１のインスタンス、および第２のサービスの第２のインスタンスの各々に対するメタデータを受信することができる。コントローラは、メタデータに基づいて、第１のサービスの第１のインスタンスのための第１のエッジ重量、第１のサービスの第２のインスタンスのための第２のエッジ重量、第２のサービスの第１のインスタンスのための第３のエッジ重量、および第２のサービスの第２のインスタンスのための第４のエッジ重量を決定することができる。コントローラは、第３のエッジ重量との第１のエッジ重量の組み合わせに基づいて、第１のパスのための第１のパス重量を生成することができる。コントローラは、第４のエッジ重量との第２のエッジ重量の組み合わせに基づいて、第２のパスのための第２のパス重量を生成することができる。コントローラは、第２のパス重量よりも高い第１のパス重量のランキングに基づいて、第１のパスに対応するサービスチェーンを選択することができる。
【００１５】
いくつかの実施形態では、コントローラは、複数のサービスチェーンの各々に対するパス重量に基づいて、複数のサービスチェーンのうちの各サービスチェーンをランク付けすることによって、サービスチェーンを選択することができる。コントローラは、ランキングに基づいて、複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することができる。コントローラは、サービスチェーンのサブセットの各々に対するパス重量を負荷平衡機能に入力し、サービスチェーンを選択することができる。
【００１６】
いくつかの実施形態では、コントローラは、複数のサービスチェーンの各々に対するパス重量に基づいて、複数のサービスチェーンのうちの各サービスチェーンをランク付けすることができる。コントローラは、ランキングに基づいて、複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することができる。コントローラは、サービスチェーンのサブセットから欠落している第１のサービスの１つ以上のインスタンスを識別することができる。コントローラは、サービスチェーンのサブセットを修正し、複数のサービスチェーンのうちの１つ以上の付加的サービスチェーンを含むことができる。１つ以上の付加的サービスチェーンは、第１のサービスの１つ以上のインスタンスを含むことができる。
【００１７】
いくつかの実施形態では、コントローラは、機械学習技法を使用し、複数のサービスチェーンをプルーニングし、複数のサービスチェーンのサブセットを生成することができる。コントローラは、負荷平衡機能および複数のサービスチェーンのサブセットの各々に対するパス重量に基づいて、複数のサービスチェーンのサブセットからサービスチェーンを選択することができる。
【００１８】
いくつかの実施形態では、コントローラは、複数のサービスチェーンのそれぞれの各インスタンスのエッジ重量に基づいて、複数のサービスチェーンの各々に対するパス重量を決定することができる。パス重量は、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストのうちの少なくとも１つに基づくことができる。いくつかの実施形態では、複数のサービスチェーンはそれぞれ、異なるパスを備え、同一のサービスを提供する。いくつかの実施形態では、コントローラは、クライアントから、選択されたサービスチェーンの第１のインスタンスへとネットワークトラフィックを転送する。
【００１９】
別の側面は、サービスチェーンを負荷平衡するシステムを対象とする。本システムは、クライアントとコンピューティングインフラストラクチャとの中間にあるコントローラを含むことができる。コンピューティングインフラストラクチャは、１つ以上のネットワーク化環境内の１つ以上のサーバを含むことができる。コントローラは、各々がパスを含む複数のサービスチェーンを識別するように構成されることができる。パスのそれぞれは、コンピューティングインフラストラクチャによって提供される第１のサービスのインスタンスと、コンピューティングインフラストラクチャによって提供される第２のサービスのインスタンスとを有することができる。コントローラは、複数のサービスチェーンの各々に対するパス重量を決定することができる。パス重量は、サービスチェーンによる、サービスを配信することの効率のレベルを示すことができる。コントローラは、負荷平衡機能および複数のサービスチェーンの各々に対するパス重量に基づいて、複数のサービスチェーンからサービスチェーンを選択し、クライアントからネットワークトラフィックをダイレクトすることができる。
【００２０】
いくつかの実施形態では、コントローラは、クラウドアプリケーションプログラミングインターフェースに基づいて、１つ以上のクエリを生成し、複数のサービスチェーンの各インスタンスを識別することができる。コントローラは、１つ以上のクエリに応答して、第１のサービスの第１のインスタンスと、第２のサービスの第１のインスタンスとを有する、第１のパスを備える、第１のサービスチェーンのインジケーションを受信することができる。コントローラは、第１のサービスの第２のインスタンスと、第２のサービスの第２のインスタンスとを有する、第２のパスを備える、第２のサービスチェーンのインジケーションを受信することができる。
【００２１】
いくつかの実施形態では、コントローラは、クラウドアプリケーションプログラミングインターフェースに基づいて、１つ以上のクエリを生成し、複数のサービスチェーンの各インスタンスに対してメタデータを読み出すことができ、１つ以上のクエリは、配置、リソース配分、確保のタイプ、またはコネクティビティのタイプのうちの少なくとも１つのための情報を読み出すように構成される。
【００２２】
いくつかの実施形態では、コントローラは、第１のサービスの第１のインスタンスと、第２のサービスの第１のインスタンスとを有する、第１のパスを備える、複数のサービスチェーンのうちのサービスチェーンを識別することができる。コントローラは、第１のサービスの第２のインスタンスと、第２のサービスの第２のインスタンスとを有する、第２のパスを備える、複数のサービスチェーンのうちの第２のサービスチェーンを識別することができる。コントローラは、クラウドアプリケーションプログラミングインターフェースを介して、第１のサービスの第１のインスタンス、第１のサービスの第２のインスタンス、第２のサービスの第１のインスタンス、および第２のサービスの第２のインスタンスの各々に対するメタデータを受信することができる。コントローラは、メタデータに基づいて、第１のサービスの第１のインスタンスのための第１のエッジ重量、第１のサービスの第２のインスタンスのための第２のエッジ重量、第２のサービスの第１のインスタンスのための第３のエッジ重量、および第２のサービスの第２のインスタンスのための第４のエッジ重量を決定することができる。コントローラは、第３のエッジ重量との第１のエッジ重量の組み合わせに基づいて、第１のパスのための第１のパス重量を生成することができる。コントローラは、第４のエッジ重量との第２のエッジ重量の組み合わせに基づいて、第２のパスのための第２のパス重量を生成することができる。コントローラは、第２のパス重量よりも高い第１のパス重量のランキングに基づいて、第１のパスに対応するサービスチェーンを選択することができる。
【００２３】
いくつかの実施形態では、コントローラは、複数のサービスチェーンの各々に対するパス重量に基づいて、複数のサービスチェーンのうちの各サービスチェーンをランク付けすることができる。コントローラは、ランクに基づいて、複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することができる。コントローラは、サービスチェーンのサブセットの各々に対するパス重量を負荷平衡機能に入力し、サービスチェーンを選択することができる。
【００２４】
いくつかの実施形態では、コントローラは、複数のサービスチェーンの各々に対するパス重量に基づいて、複数のサービスチェーンのうちの各サービスチェーンをランク付けすることができる。コントローラは、ランクに基づいて、複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することができる。コントローラは、サービスチェーンのサブセットから欠落している第１のサービスの１つ以上のインスタンスを識別することができる。コントローラは、サービスチェーンのサブセットを修正し、複数のサービスチェーンのうちの１つ以上の付加的サービスチェーンを含むことができる。１つ以上の付加的サービスチェーンは、第１のサービスの１つ以上のインスタンスを含むことができる。
【００２５】
いくつかの実施形態では、コントローラは、機械学習技法に基づいて、複数のサービスチェーンをプルーニングし、複数のサービスチェーンのサブセットを生成することができる。コントローラは、負荷平衡機能および複数のサービスチェーンのサブセットの各々に対するパス重量に基づいて、複数のサービスチェーンのサブセットからサービスチェーンを選択することができる。いくつかの実施形態では、コントローラは、複数のサービスチェーンのそれぞれの各インスタンスのエッジ重量に基づいて、複数のサービスチェーンの各々に対するパス重量を決定することができ、パス重量は、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストのうちの少なくとも１つに基づく。複数のサービスチェーンはそれぞれ、異なるパスを含み、同一のサービスを提供することができる。コントローラは、クライアントから選択されたサービスチェーンの第１のインスタンスにネットワークトラフィックを転送することができる。
【図面の簡単な説明】
【００２６】
本ソリューションの先述および他の目的、側面、特徴、および利点は、付随の図面と併せて解釈される以下の説明を参照することによって、より明白となり、より理解されるであろう。
【００２７】
【図１Ａ】図１Ａは、クライアントがアプライアンスを介してサーバにアクセスするためのネットワーク環境の実施形態のブロック図である。
【図１Ｂ】図１Ｂは、アプライアンスを介してサーバからクライアントにコンピューティング環境を配信するための環境の実施形態のブロック図である。
【図１Ｃ】図１Ｃは、アプライアンスを介してサーバからクライアントにコンピューティング環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｄ】図１Ｄは、アプライアンスを介してサーバからクライアントにコンピューティング環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｅ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｆ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｇ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｈ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図２Ａ】図２Ａは、クライアントとサーバとの間の通信を処理するためのアプライアンスの実施形態のブロック図である。
【図２Ｂ】図２Ｂは、クライアントとサーバとの間の通信を最適化、加速、負荷平衡、およびルーティングするためのアプライアンスの別の実施形態のブロック図である。
【図３】図３は、アプライアンスを介してサーバと通信するためのクライアントの実施形態のブロック図である。
【図４Ａ】図４Ａは、仮想化環境の実施形態のブロック図である。
【図４Ｂ】図４Ｂは、仮想化環境の別の実施形態のブロック図である。
【図４Ｃ】図４Ｃは、仮想化されたアプライアンスの実施形態のブロック図である。
【図５】図５は、マルチコアシステムの側面の別の実施形態のブロック図である。
【図６】図６は、クラスタシステムの実施形態のブロック図である。
【図７Ａ】図７Ａは、サービスチェーンを負荷平衡するためのシステムの実施形態のブロック図である。
【図７Ｂ】図７Ｂは、サービスチェーンを負荷平衡する方法の実施形態のブロック図である。
【図８】図８は、サービスチェーンを負荷平衡するためのシステムの実施形態の機能ブロック図である。
【図９Ａ】図９Ａ−９Ｃは、サービスチェーンを負荷平衡するためのシステムの実施形態の機能ブロック図である。
【図９Ｂ】図９Ａ−９Ｃは、サービスチェーンを負荷平衡するためのシステムの実施形態の機能ブロック図である。
【図９Ｃ】図９Ａ−９Ｃは、サービスチェーンを負荷平衡するためのシステムの実施形態の機能ブロック図である。
【図１０】図１０は、サービスチェーンを負荷平衡する実施形態の機能フロー図である。
【発明を実施するための形態】
【００２８】
本ソリューションの特徴および利点は、同様の参照記号が全体を通して対応する要素を識別する、図面と併せて解釈されるときに、以下に記載される発明を実施するための形態から、より明白となるであろう。図面では、同様の参照番号は、概して、同じ、機能的に類似する、および／または構造的に類似する要素を示す。
【００２９】
以下の種々の実施形態の説明を熟読する目的で、本明細書の節およびそれらの個別の内容の以下の説明が役立ち得る。
第Ａ節は、本明細書に説明される実施形態を実践するために有用であり得る、ネットワーク環境およびコンピューティング環境を説明する。
第Ｂ節は、コンピューティング環境を遠隔ユーザに配信するためのシステムおよび方法の実施形態を説明する。
第Ｃ節は、クライアントとサーバとの間の通信を加速するためのシステムおよび方法の実施形態を説明する。
第Ｄ節は、アプリケーション配信コントローラを仮想化するためのシステムおよび方法の実施形態を説明する。
第Ｅ節は、マルチコアアーキテクチャおよび環境を提供するためのシステムおよび方法の実施形態を説明する。
第Ｆ節は、クラスタ化されたアプライアンスアーキテクチャ環境を提供するためのシステムおよび方法の実施形態を説明する。
第Ｇ節は、ネットワークを介してサービスチェーンを負荷平衡するためのシステムおよび方法の実施形態を説明する。
（Ａ．ネットワークおよびコンピューティング環境）
【００３０】
アプライアンスおよび／またはクライアントのシステムおよび方法の実施形態の詳細について議論することに先立って、そのような実施形態が展開され得る、ネットワークおよびコンピューティング環境について議論することが役立ち得る。ここで図１Ａを参照すると、ネットワーク環境の実施形態が描写されている。要するに、ネットワーク環境は、１つ以上のネットワーク１０４、１０４’（概して、ネットワーク１０４と称される）を介して１つ以上のサーバ１０６ａ−１０６ｎ（概して、サーバ１０６または遠隔マシン１０６とも称される）と通信する１つ以上のクライアント１０２ａ−１０２ｎ（概して、ローカルマシン１０２またはクライアント１０２とも称される）を備える。いくつかの実施形態では、クライアント１０２は、アプライアンス２００を介してサーバ１０６と通信する。
【００３１】
図１Ａは、クライアント１０２とサーバ１０６との間のネットワーク１０４およびネットワーク１０４’を示すが、クライアント１０２およびサーバ１０６は、同一ネットワーク１０４上にあってもよい。ネットワーク１０４および１０４’は、同一タイプのネットワークまたは異なるタイプのネットワークであることができる。ネットワーク１０４および／またはネットワーク１０４’は、企業イントラネット、メトロポリタンエリアネットワーク（ＭＡＮ）等のローカルエリアネットワーク（ＬＡＮ）、またはインターネットまたはワールドワイドウェブ等の広域ネットワーク（ＷＡＮ）であることができる。一実施形態では、ネットワーク１０４’は、私設ネットワークであってもよく、ネットワーク１０４は、公衆ネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、私設ネットワークであってもよく、ネットワーク１０４’は、公衆ネットワークであってもよい。別の実施形態では、ネットワーク１０４および１０４’は両方とも、私設ネットワークであってもよい。いくつかの実施形態では、クライアント１０２は、企業データセンタに位置するサーバ１０６へのネットワーク１０４を経由したＷＡＮ接続を介して通信する、企業の支店に位置してもよい。
【００３２】
ネットワーク１０４および／または１０４’は、任意のタイプおよび／または形態のネットワークであってもよく、以下、すなわち、２点間ネットワーク、放送ネットワーク、広域ネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ＡＴＭ（非同期転送モード）ネットワーク、ＳＯＮＥＴ（同期光ネットワーク）ネットワーク、ＳＤＨ（同期デジタル階層）ネットワーク、無線ネットワーク、および有線ネットワークのうちのいずれかを含んでもよい。いくつかの実施形態では、ネットワーク１０４は、赤外線チャネルまたは衛星帯等の無線リンクを備えてもよい。ネットワーク１０４および／または１０４’のトポロジは、バス、スター、またはリングネットワークトポロジであってもよい。ネットワーク１０４および／または１０４’およびネットワークトポロジは、本明細書に説明される動作をサポートすることが可能である、当業者に公知であるもの等の任意のネットワークまたはネットワークトポロジであってもよい。
【００３３】
図１Ａに示されるように、インターフェースユニット２００またはゲートウェイ２００とも称され得る、アプライアンス２００が、ネットワーク１０４と１０４’との間に示されている。いくつかの実施形態では、アプライアンス２００は、ネットワーク１０４上に位置してもよい。例えば、企業の支店が、支店においてアプライアンス２００を展開してもよい。他の実施形態では、アプライアンス２００は、ネットワーク１０４’上に位置してもよい。例えば、アプライアンス２００は、企業データセンタに位置してもよい。さらに別の実施形態では、複数のアプライアンス２００が、ネットワーク１０４上に展開されてもよい。いくつかの実施形態では、複数のアプライアンス２００が、ネットワーク１０４’上に展開されてもよい。一実施形態では、第１のアプライアンス２００が、第２のアプライアンス２００’と通信する。他の実施形態では、アプライアンス２００は、任意のクライアント１０２またはクライアント１０２と同一または異なるネットワーク１０４、１０４’上のサーバ１０６の一部であり得る。１つ以上のアプライアンス２００は、クライアント１０２とサーバ１０６との間のネットワークまたはネットワーク通信内の任意の点に位置してもよい。
【００３４】
いくつかの実施形態では、アプライアンス２００は、ＮｅｔＳｃａｌｅｒ（Ｒ）デバイスと称される、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ  Ｆｌｏｒｉｄａ）製のネットワークデバイスのうちのいずれかを備える。他の実施形態では、アプライアンス２００は、Ｆ５  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷｅｂＡｃｃｅｌｅｒａｔｏｒおよびＢｉｇＩＰと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、ＤＸ加速デバイスプラットフォームおよび／またはＪｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ））製のＳＡ７００、ＳＡ２０００、ＳＡ４０００、およびＳＡ６０００デバイス等のＳＳＬ  ＶＰＮシリーズのデバイスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２００は、Ｃｉｓｃｏ  ＡＣＥアプリケーション制御エンジンモジュールサービスソフトウェアおよびネットワークモジュール、およびＣｉｓｃｏ  ＡＶＳシリーズアプリケーション速度システム等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のアプリケーション加速および／またはセキュリティ関連アプライアンスおよび／またはソフトウェアを含む。
【００３５】
一実施形態では、本システムは、複数の論理的にグループ化されたサーバ１０６を含んでもよい。これらの実施形態では、サーバの論理グループは、サーバファーム３８と称されてもよい。これらの実施形態のうちのいくつかでは、サーバ１０６は、地理的に分散されてもよい。ある場合には、ファーム３８は、単一のエンティティとして運営されてもよい。他の実施形態では、サーバファーム３８は、複数のサーバファーム３８を備える。一実施形態では、サーバファームは、１つ以上のクライアント１０２の代わりに、１つ以上のアプリケーションを実行する。
【００３６】
各ファーム３８内のサーバ１０６は、異種であり得る。サーバ１０６のうちの１つ以上のものが、１つのタイプのオペレーティングシステムプラットフォーム（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷＩＮＤＯＷＳ（登録商標）  ＮＴ）に従って動作することができる一方で、他のサーバ１０６のうちの１つ以上のものは、別のタイプのオペレーティングシステムプラットフォーム（例えば、Ｕｎｉｘ（登録商標）またはＬｉｎｕｘ（登録商標））に従って動作することができる。各ファーム３８のサーバ１０６は、同一ファーム３８内の別のサーバ１０６に物理的に近接する必要はない。したがって、ファーム３８として論理的にグループ化されたサーバ１０６のグループは、広域ネットワーク（ＷＡＮ）接続または中域ネットワーク（ＭＡＮ）接続を使用して、相互接続されてもよい。例えば、ファーム３８は、異なる大陸、または大陸、国、州、都市、キャンパス、または部屋の異なる領域の中に物理的に位置する、サーバ１０６を含んでもよい。ファーム３８内のサーバ１０６の間のデータ伝送速度は、サーバ１０６がローカルネットワーク（ＬＡＮ）接続または何らかの形態の直接接続を使用して接続される場合に、増加されることができる。
【００３７】
サーバ１０６は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、またはゲートウェイサーバと称されてもよい。いくつかの実施形態では、サーバ１０６は、アプリケーションサーバとして、またはマスタアプリケーションサーバとして機能する能力を有してもよい。一実施形態では、サーバ１０６は、アクティブディレクトリを含んでもよい。クライアント１０２はまた、クライアントノードまたはエンドポイントと称されてもよい。いくつかの実施形態では、クライアント１０２は、サーバ上のアプリケーションへのアクセスを求めるクライアントノードとして、および他のクライアント１０２ａ−１０２ｎのためのホスト型アプリケーションへのアクセスを提供するアプリケーションサーバとしての両方で機能する能力を有する。
【００３８】
いくつかの実施形態では、クライアント１０２は、サーバ１０６と通信する。一実施形態では、クライアント１０２は、ファーム３８内のサーバ１０６のうちの１つと直接通信する。別の実施形態では、クライアント１０２は、ファーム３８内のサーバ１０６と通信するように、プログラム隣接アプリケーションを実行する。なおも別の実施形態では、サーバ１０６は、マスタノードの機能性を提供する。いくつかの実施形態では、クライアント１０２は、ネットワーク１０４を通してファーム３８内のサーバ１０６と通信する。ネットワーク１０４を経由して、クライアント１０２は、例えば、ファーム３８内のサーバ１０６ａ−１０６ｎによってホストされる種々のアプリケーションの実行を要求し、表示するためにアプリケーション実行の結果の出力を受信することができる。いくつかの実施形態では、マスタノードのみが、要求されたアプリケーションをホストするサーバ１０６’と関連付けられるアドレス情報を識別して提供するために要求される機能性を提供する。
【００３９】
一実施形態では、サーバ１０６は、ウェブサーバの機能性を提供する。別の実施形態では、サーバ１０６ａは、クライアント１０２から要求を受信し、要求を第２のサーバ１０６ｂに転送し、サーバ１０６ｂからの要求への応答とともに、クライアント１０２による要求に応答する。なおも別の実施形態では、サーバ１０６は、クライアント１０２に利用可能なアプリケーションの列挙、およびアプリケーションの列挙によって識別されるアプリケーションをホストするサーバ１０６と関連付けられるアドレス情報を獲得する。さらに別の実施形態では、サーバ１０６は、ウェブインターフェースを使用して、要求への応答をクライアント１０２に提示する。一実施形態では、クライアント１０２は、識別されたアプリケーションにアクセスするようにサーバ１０６と直接通信する。別の実施形態では、クライアント１０２は、サーバ１０６上の識別されたアプリケーションの実行によって生成される、表示データ等のアプリケーション出力データを受信する。
【００４０】
ここで図１Ｂを参照すると、複数のアプライアンス２００を展開するネットワーク環境の実施形態が描写されている。第１のアプライアンス２００が、第１のネットワーク１０４上に、第２のアプライアンス２００’が、第２のネットワーク１０４’上に展開されてもよい。例えば、企業が、支店において第１のアプライアンス２００を、データセンタにおいて第２のアプライアンス２００’を展開してもよい。別の実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、同一のネットワーク１０４またはネットワーク１０４’上に展開される。例えば、第１のアプライアンス２００は、第１のサーバファーム３８のために展開されてもよく、第２のアプライアンス２００は、第２のサーバファーム３８’のために展開されてもよい。別の実施例では、第１のアプライアンス２００が、第１の支店において展開されてもよい一方で、第２のアプライアンス２００’は、第２の支店’において展開されてもよい。いくつかの実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、ネットワークトラフィックまたはクライアントとサーバとの間のアプリケーションおよびデータの配信を加速するように、相互と協力して、または連動して作動する。
【００４１】
ここで図１Ｃを参照すると、１つ以上のＷＡＮ最適化アプライアンス２０５、２０５’の間等で１つ以上の他のタイプのアプライアンスとともにアプライアンス２００を展開する、ネットワーク環境の別の実施形態が描写されている。例えば、第１のＷＡＮ最適化アプライアンス２０５が、ネットワーク１０４と１０４’との間に示され、第２のＷＡＮ最適化アプライアンス２０５’が、アプライアンス２００と１つ以上のサーバ１０６との間に展開されてもよい。一例として、企業が、支店において第１のＷＡＮ最適化アプライアンス２０５を、データセンタにおいて第２のＷＡＮ最適化アプライアンス２０５’を展開してもよい。いくつかの実施形態では、アプライアンス２０５は、ネットワーク１０４’上に位置してもよい。他の実施形態では、アプライアンス２０５’は、ネットワーク１０４上に位置してもよい。いくつかの実施形態では、アプライアンス２０５’は、ネットワーク１０４’またはネットワーク１０４”上に位置してもよい。一実施形態では、アプライアンス２０５および２０５’は、同一ネットワーク上にある。別の実施形態では、アプライアンス２０５および２０５’は、異なるネットワーク上にある。別の実施例では、第１のＷＡＮ最適化アプライアンス２０５が、第１のサーバファーム３８のために、第２のＷＡＮ最適化アプライアンス２０５’が、第２のサーバファーム３８’のために展開されてもよい。
【００４２】
一実施形態では、アプライアンス２０５は、ＷＡＮ接続へ、および／またはそこからのトラフィック等の任意のタイプおよび形態のネットワークトラフィックの性能、動作、またはサービス品質を加速、最適化、または別様に改良するためのデバイスである。いくつかの実施形態では、アプライアンス２０５は、性能強化プロキシである。他の実施形態では、アプライアンス２０５は、ＷＡＮ最適化コントローラと称されることもある、任意のタイプおよび形態のＷＡＮ最適化または加速デバイスである。一実施形態では、アプライアンス２０５は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＣｌｏｕｄＢｒｉｄｇｅ（Ｒ）と称される製品実施形態のうちのいずれかである。他の実施形態では、アプライアンス２０５は、Ｆ５  Ｎｅｔｗｏｒｋｓ，Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＢＩＧ−ＩＰリンクコントローラおよびＷＡＮｊｅｔと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、Ｊｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＸおよびＷＸＣ  ＷＡＮ加速デバイスプラットフォームのうちのいずれかを含む。いくつかの実施形態では、アプライアンス２０５は、Ｒｉｖｅｒｂｅｄ  Ｔｅｃｈｎｏｌｏｇｙ（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のスチールヘッドラインのＷＡＮ最適化アプライアンスのうちのいずれかを含む。他の実施形態では、アプライアンス２０５は、Ｅｘｐａｎｄ  Ｎｅｔｗｏｒｋｓ  Ｉｎｃ．（Ｒｏｓｅｌａｎｄ，  ＮｅｗＪｅｒｓｅｙ）製のＷＡＮ関連デバイスのうちのいずれかを含む。一実施形態では、アプライアンス２０５は、Ｐａｃｋｅｔｅｅｒによって提供されるＰａｃｋｅｔＳｈａｐｅｒ、ｉＳｈａｒｅｄ、およびＳｋｙＸ製品実施形態等のＰａｃｋｅｔｅｅｒ  Ｉｎｃ．（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＡＮ関連アプライアンスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２０５は、Ｃｉｓｃｏ広域ネットワークアプリケーションサービスソフトウェアおよびネットワークモジュール、および広域ネットワークエンジンアプライアンス等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のＷＡＮ関連アプライアンスおよび／またはソフトウェアを含む。
【００４３】
一実施形態では、アプライアンス２０５は、支店または遠隔オフィスのためのアプリケーションおよびデータ加速サービスを提供する。一実施形態では、アプライアンス２０５は、広域ファイルサービス（ＷＡＦＳ）の最適化を含む。別の実施形態では、アプライアンス２０５は、共通インターネットファイルシステム（ＣＩＦＳ）プロトコルを介して等、ファイルの配信を加速する。他の実施形態では、アプライアンス２０５は、アプリケーションおよびデータの配信を加速するように、メモリおよび／または記憶装置の中でキャッシングを提供する。一実施形態では、アプライアンス２０５は、任意のレベルのネットワークスタックにおいて、または任意のプロトコルまたはネットワーク層において、ネットワークトラフィックの圧縮を提供する。別の実施形態では、アプライアンス２０５は、ＷＡＮ接続を経由したアプリケーションおよびデータの配信を加速するように、トランスポート層プロトコル最適化、フロー制御、性能強化または修正、および／または管理を提供する。例えば、一実施形態では、アプライアンス２０５は、トランスポート制御プロトコル（ＴＣＰ）最適化を提供する。他の実施形態では、アプライアンス２０５は、任意のセッションまたはアプリケーション層プロトコルのための最適化、フロー制御、性能強化または修正、および／または管理を提供する。
【００４４】
別の実施形態では、アプライアンス２０５は、存在、機能性、または能力を別のアプライアンス２０５’にアナウンスするように、任意のタイプおよび形態のデータまたは情報を、ネットワークパケットのカスタムまたは標準ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションフィールドにエンコードする。別の実施形態では、アプライアンス２０５’は、ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションの両方でエンコードされるデータを使用して、別のアプライアンス２０５’と通信してもよい。例えば、アプライアンスは、ＷＡＮ加速等の機能性を果たす際に、または相互と連動して作動するために、アプライアンス２０５、２０５’によって使用される１つ以上のパラメータを通信するようにＴＣＰオプションまたはＩＰヘッダフィールドまたはオプションを使用してもよい。
【００４５】
いくつかの実施形態では、アプライアンス２００は、アプライアンス２０５と２０５’との間で通信されるＴＣＰおよび／またはＩＰヘッダおよび／またはオプションフィールドの中でエンコードされる情報のうちのいずれかを保存する。例えば、アプライアンス２００は、クライアントとアプライアンス２０５および２０５’をトラバースするサーバとの間からのトランスポート層接続等のアプライアンス２００をトラバースするトランスポート層接続を終了させてもよい。一実施形態では、アプライアンス２００は、第１のトランスポート層接続を介して第１のアプライアンス２０５によって伝送されるトランスポート層パケットの中の任意のエンコードされた情報を識別して保存し、第２のトランスポート層接続を介してエンコードされた情報とともにトランスポート層パケットを第２のアプライアンス２０５’に通信する。
【００４６】
ここで図１Ｄを参照すると、クライアント１０２上にコンピューティング環境を配信する、および／またはそこで動作させるためのネットワーク環境が描写されている。いくつかの実施形態では、サーバ１０６は、コンピューティング環境またはアプリケーションおよび／またはデータファイルを１つ以上のクライアント１０２に配信するためのアプリケーション配信システム１９０を含む。要するに、クライアント１０は、ネットワーク１０４、１０４’およびアプライアンス２００を介してサーバ１０６と通信する。例えば、クライアント１０２は、企業の遠隔オフィス、例えば、支店内に常駐してもよく、サーバ１０６は、企業データセンタに常駐してもよい。クライアント１０２は、クライアントエージェント１２０と、コンピューティング環境１５とを備える。コンピューティング環境１５は、データファイルにアクセスする、それを処理または使用する、アプリケーションを実行または動作させてもよい。コンピューティング環境１５、アプリケーション、および／またはデータファイルは、アプライアンス２００および／またはサーバ１０６を介して配信されてもよい。
【００４７】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２へのコンピューティング環境１５またはその任意の部分の配信を加速する。一実施形態では、アプライアンス２００は、アプリケーション配信システム１９０によるコンピューティング環境１５の配信を加速する。例えば、本明細書に説明される実施形態は、中央企業データセンタから企業の支店等の遠隔ユーザ場所へのアプリケーションによって処理可能なストリーミングアプリケーションおよびデータファイルの配信を加速するために使用されてもよい。別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のトランスポート層トラフィックを加速する。アプライアンス２００は、１）トランスポート層接続プール、２）トランスポート層接続多重化、３）トランスポート制御プロトコルバッファリング、４）圧縮、および５）キャッシング等のサーバ１０６からクライアント１０２への任意のトランスポート層ペイロードを加速するための加速技法を提供してもよい。いくつかの実施態では、アプライアンス２００は、クライアント１０２からの要求に応答する際に、サーバ１０６の負荷平衡を提供する。他の実施形態では、アプライアンス２００は、１つ以上のサーバ１０６へのアクセスを提供するように、プロキシまたはアクセスサーバとして作用する。別の実施形態では、アプライアンス２００は、ＳＳＬ  ＶＰＮ接続等のクライアント１０２の第１のネットワーク１０４からサーバ１０６の第２のネットワーク１０４’へのセキュアな仮想私設ネットワーク接続を提供する。さらに他の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の接続および通信のアプリケーションファイアウォールセキュリティ、制御、および管理を提供する。
【００４８】
いくつかの実施形態では、アプリケーション配信管理システム１９０は、複数の実行方法に基づいて、かつポリシエンジン１９５を介して適用される任意の認証および承認ポリシに基づいて、コンピューティング環境を遠隔または別様のユーザのデスクトップに配信するアプリケーション配信技法を提供する。これらの技法を用いることで、遠隔ユーザは、任意のネットワーク接続されたデバイス１００から、コンピューティング環境およびサーバに記憶されたアプリケーションおよびデータファイルへのアクセスを取得してもよい。一実施形態では、アプリケーション配信システム１９０は、サーバ１０６上で常駐または実行してもよい。別の実施形態では、アプリケーション配信システム１９０は、複数のサーバ１０６ａ−１０６ｎ上で常駐または実行してもよい。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバファーム３８内で実行してもよい。一実施形態では、アプリケーション配信システム１９０を実行するサーバ１０６はまた、アプリケーションおよびデータファイルを記憶または提供してもよい。別の実施形態では、１つ以上のサーバ１０６の第１のセットが、アプリケーション配信システム１９０を実行してもよく、異なるサーバ１０６ｎが、アプリケーションおよびデータファイルを記憶または提供してもよい。いくつかの実施形態では、アプリケーション配信システム１９０、アプリケーション、およびデータファイルはそれぞれ、異なるサーバ上に常駐または位置してもよい。さらに別の実施形態では、アプリケーション配信システム１９０の任意の部分が、アプライアンス２００または複数のアプライアンス上で常駐、実行、または記憶される、またはそれに分配されてもよい。
【００４９】
クライアント１０２は、データファイルを使用または処理するアプリケーションを実行するためのコンピューティング環境１５を含んでもよい。ネットワーク１０４、１０４’およびアプライアンス２００を介したクライアント１０２は、サーバ１０６からアプリケーションおよびデータファイルを要求してもよい。一実施形態では、アプライアンス２００は、クライアント１０２からサーバ１０６に要求を転送してもよい。例えば、クライアント１０２は、ローカルで記憶された、またはアクセス可能であるアプリケーションおよびデータファイルを有していない場合がある。要求に応答して、アプリケーション配信システム１９０および／またはサーバ１０６は、アプリケーションおよびデータファイルをクライアント１０２に配信してもよい。例えば、一実施形態では、サーバ１０６は、クライアント１０２上のコンピューティング環境１５内で動作するようにアプリケーションストリームとしてアプリケーションを伝送してもよい。
【００５０】
いくつかの実施形態では、アプリケーション配信システム１９０は、ＸｅｎＡｐｐ（Ｒ）またはＸｅｎＤｅｓｋｔｏｐ（Ｒ）等のＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．によるＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  ＳｕｉｔｅＴＭの任意の部分、および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（Ｒ）  Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓのうちのいずれかを備える。一実施形態では、アプリケーション配信システム１９０は、遠隔表示プロトコルを介して、または別様に遠隔ベースまたはサーバベースの計算を介して、１つ以上のアプリケーションをクライアント１０２またはユーザに配信してもよい。別の実施形態では、アプリケーション配信システム１９０は、アプリケーションのストリーミングを介して、１つ以上のアプリケーションをクライアントまたはユーザに配信してもよい。
【００５１】
一実施形態では、アプリケーション配信システム１９０は、アプリケーションへのアクセス、アプリケーション実行方法の選択、およびアプリケーションの配信を制御および管理するためのポリシエンジン１９５を含む。いくつかの実施形態では、ポリシエンジン１９５は、ユーザまたはクライアント１０２がアクセスし得る、１つ以上のアプリケーションを決定する。別の実施形態では、ポリシエンジン１９５は、アプリケーションがユーザまたはクライアント１０２に配信されるべき方法、例えば、実行の方法を決定する。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバベースの計算、ローカル実行のためにローカルにアプリケーションをクライアント１２０にストリーミングまたは配信すること等のアプリケーション実行の方法を選択する、複数の配信技法を提供する。
【００５２】
一実施形態では、クライアント１０２は、アプリケーションプログラムの実行を要求し、サーバ１０６を備えるアプリケーション配信システム１９０は、アプリケーションプログラムを実行する方法を選択する。いくつかの実施形態では、サーバ１０６は、クライアント１０２から証明書を受信する。別の実施形態では、サーバ１０６は、クライアント１０２から利用可能なアプリケーションの列挙の要求を受信する。一実施形態では、証明書の要求または受信に応答して、アプリケーション配信システム１９０は、クライアント１０２に利用可能な複数のアプリケーションプログラムを列挙する。アプリケーション配信システム１９０は、列挙されたアプリケーションを実行する要求を受信する。アプリケーション配信システム１９０は、例えば、ポリシエンジンのポリシに応答して、列挙されたアプリケーションを実行するための所定数の方法のうちの１つを選択する。アプリケーション配信システム１９０は、クライアント１０２が、サーバ１０６上のアプリケーションプログラムの実行によって生成されるアプリケーション出力データを受信することを可能にする、アプリケーションの実行の方法を選択してもよい。アプリケーション配信システム１９０は、アプリケーションを備える複数のアプリケーションファイルを読み出した後に、ローカルマシン１０がローカルでアプリケーションプログラムを実行することを可能にする、アプリケーションの実行の方法を選択してもよい。さらに別の実施形態では、アプリケーション配信システム１９０は、ネットワーク１０４を介してクライアント１０２にアプリケーションをストリーミングするように、アプリケーションの実行の方法を選択してもよい。
【００５３】
クライアント１０２は、任意のタイプおよび／または形態のウェブブラウザ、ウェブベースのクライアント、クライアント・サーバアプリケーション、シンクライアントコンピューティングクライアント、ＡｃｔｉｖｅＸコントロール、またはＪａｖａ（登録商標）アプレット等の任意のタイプおよび／または形態のソフトウェア、プログラム、または実行可能命令、またはクライアント１０２上で実行することが可能な任意のタイプおよび／または形態の実行可能命令であることができる、アプリケーションを実行、動作、または別様に提供してもよい。いくつかの実施形態では、アプリケーションは、サーバ１０６上のクライアント１０２の代わりに実行される、サーバベースまたは遠隔ベースのアプリケーションであってもよい。一実施形態では、サーバ１０６は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製の独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコルまたはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製の遠隔デスクトッププロトコル（ＲＤＰ）等の任意のシンクライアントまたは遠隔表示プロトコルを使用して、クライアント１０２への出力を表示してもよい。アプリケーションは、任意のタイプのプロトコルを使用することができ、それは、例えば、ＨＴＴＰクライアント、ＦＴＰクライアント、Ｏｓｃａｒクライアント、またはＴｅｌｎｅｔクライアントであることができる。他の実施形態では、アプリケーションは、ソフトＩＰ電話等のＶｏＩＰ通信に関連する任意のタイプのソフトウェアを備える。さらなる実施形態では、アプリケーションは、ビデオおよび／またはオーディオをストリーミングするためのアプリケーション等のリアルタイムデータ通信に関連する任意のアプリケーションを備える。
【００５４】
いくつかの実施形態では、サーバ１０６またはサーバファーム３８は、シンクライアント計算を提供するアプリケーションまたは遠隔表示プレゼンテーションアプリケーション等の１つ以上のアプリケーションを起動していてもよい。一実施形態では、サーバ１０６またはサーバファーム３８は、ＸｅｎＡｐｐ（Ｒ）またはＸｅｎＤｅｓｋｔｏｐ（Ｒ）等のＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．によるＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  ＳｕｉｔｅＴＭの任意の部分、および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓのうちのいずれかをアプリケーションとして実行する。一実施形態では、アプリケーションは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発されたＩＣＡクライアントである。他の実施形態では、アプリケーションは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって開発された遠隔デスクトップ（ＲＤＰ）クライアントを含む。また、サーバ１０６は、例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＭｉｃｒｏｓｏｆｔ  Ｅｘｃｈａｎｇｅ等の電子メールサービスを提供するアプリケーションサーバ、ウェブまたはインターネットサーバ、またはデスクトップ共有サーバ、または協調サーバであり得る、アプリケーションを起動してもよい。いくつかの実施形態では、アプリケーションのうちのいずれかは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって提供されるＧｏＴｏＭｅｅｔｉｎｇＴＭ、Ｃｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）によって提供されるＷｅｂＥｘＴＭ、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって提供されるＭｉｃｒｏｓｏｆｔ  Ｏｆｆｉｃｅ  Ｌｉｖｅ  Ｍｅｅｔｉｎｇ等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
【００５５】
依然として図１Ｄを参照すると、ネットワーク環境の実施形態は、監視サーバ１０６Ａを含んでもよい。監視サーバ１０６Ａは、任意のタイプおよび形態の性能監視サービス１９８を含んでもよい。性能監視サービス１９８は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および／または管理ソフトウェアおよび／またはハードウェアを含んでもよい。一実施形態では、性能監視サービス１９８は、１つ以上の監視エージェント１９７を含む。監視エージェント１９７は、クライアント１０２、サーバ１０６、またはアプライアンス２００、２０５等のデバイス上で監視、測定、およびデータ収集アクティビティを実施するための任意のソフトウェア、ハードウェア、またはその組み合わせを含む。いくつかの実施形態では、監視エージェント１９７は、Ｖｉｓｕａｌ  ＢａｓｉｃスクリプトまたはＪａｖａ（登録商標）ｓｃｒｉｐｔ等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント１９７は、デバイスの任意のアプリケーションおよび／またはユーザに対して透過的に実行する。いくつかの実施形態では、監視エージェント１９７は、アプリケーションまたはクライアントに影響を及ぼすことなくインストールおよび動作される。さらに別の実施形態では、監視エージェント１９７は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
【００５６】
いくつかの実施形態では、監視エージェント１９７は、所定の頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント１９７は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント１９７は、ウェブページまたはＨＴＴＰ応答の受信の要求の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント１９７は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント１９７は、任意の監視、測定、または収集されたデータを監視サービス１９８に報告または提供してもよい。一実施形態では、監視エージェント１９７は、スケジュールまたは所定の頻度に従って、情報を監視サービス１９８に伝送する。別の実施形態では、監視エージェント１９７は、イベントの検出に応じて、情報を監視サービス１９８に伝送する。
【００５７】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント、サーバ、サーバファーム、アプライアンス２００、アプライアンス２０５、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を実施する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＴＣＰまたはＵＤＰ接続等の任意のトランスポート層接続の監視および性能測定を実施する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ネットワーク待ち時間を監視して測定する。さらなる一実施形態では、監視サービス１９８および／または監視エージェント１９７は、帯域幅利用を監視して測定する。
【００５８】
他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、エンドユーザ応答時間を監視して測定する。いくつかの実施形態では、監視サービス１９８は、アプリケーションの監視および性能測定を実施する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションへの任意のセッションまたは接続の監視および性能測定を実施する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ブラウザの性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＨＴＴＰベースのトランザクションの性能を監視して測定する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、ボイスオーバーＩＰ（ＶｏＩＰ）アプリケーションまたはセッションの性能を監視して測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＩＣＡクライアントまたはＲＤＰクライアント等の遠隔表示プロトコルアプリケーションの性能を監視して測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のストリーミングメディアの性能を監視して測定する。なおもさらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、ホスト型アプリケーションまたはサービスとしてのソフトウェア（ＳａａＳ）配信モデルの性能を監視して測定する。
【００５９】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションに関連する１つ以上のトランザクション、要求、または応答の監視および性能測定を実施する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の．ＮＥＴまたはＪ２ＥＥコール等のアプリケーション層スタックの任意の部分を監視して測定する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、データベースまたはＳＱＬトランザクションを監視して測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の方法、機能、またはアプリケーションプログラミングインターフェース（ＡＰＩ）コールを監視して測定する。
【００６０】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプライアンス２００および／またはアプライアンス２０５等の１つ以上のアプライアンスを介したサーバからクライアントへのアプリケーションおよび／またはデータの配信の監視および性能測定を実施する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、仮想化されたアプリケーションの配信の性能を監視して測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ストリーミングアプリケーションの配信の性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアントへのデスクトップアプリケーションの配信および／またはクライアント上のデスクトップアプリケーションの実行の性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント／サーバアプリケーションの性能を監視して測定する。
【００６１】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０のためのアプリケーション性能管理を提供するように設計および構築される。例えば、監視サービス１９８および／または監視エージェント１９７は、Ｃｉｔｒｉｘプレゼンテーションサーバを介して、アプリケーションの配信の性能を監視、測定、および管理してもよい。本実施例では、監視サービス１９８および／または監視エージェント１９７は、個々のＩＣＡセッションを監視する。監視サービス１９８および／または監視エージェント１９７は、合計のおよびセッションあたりのシステムリソース使用量、およびアプリケーションおよびネットワーキング性能を測定してもよい。監視サービス１９８および／または監視エージェント１９７は、所与のユーザおよび／またはユーザセッションのためのアクティブサーバを識別してもよい。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０とアプリケーションおよび／またはデータベースサーバとの間のバックエンド接続を監視する。監視サービス１９８および／または監視エージェント１９７は、ユーザセッションまたはＩＣＡセッションあたりのネットワーク待ち時間、遅延、および量を測定してもよい。
【００６２】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッションあたりおよび／またはプロセスあたりの総メモリ使用量等のアプリケーション配信システム１９０のためのメモリ使用量を測定して監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッションあたりおよび／またはプロセスあたりの総ＣＰＵ使用量等のアプリケーション配信システム１９０のＣＰＵ使用量を測定して監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、Ｃｉｔｒｉｘプレゼンテーションサーバ等のアプリケーション、サーバ、またはアプリケーション配信システムにログインするために要求される時間を測定して監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザがアプリケーション、サーバ、またはアプリケーション配信システム１９０にログインされている持続時間を測定して監視する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション、サーバ、またはアプリケーション配信システムセッションのためのアクティブおよび非アクティブなセッションカウントを測定して監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッション待ち時間を測定して監視する。
【００６３】
その上さらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のサーバメトリックを測定して監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、システムメモリ、ＣＰＵ使用量、およびディスク記憶に関連するメトリックを測定して監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、１秒あたりのページフォールト等のページフォールトに関連するメトリックを測定して監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ラウンドトリップタイムメトリックを測定して監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションクラッシュ、エラー、および／またはハングアップに関連するメトリックを測定して監視する。
【００６４】
いくつかの実施形態では、監視サービス１９８および監視エージェント１９８は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＥｄｇｅＳｉｇｈｔと称される製品実施形態のうちのいずれかを含む。別の実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、Ｓｙｍｐｈｏｎｉｑ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｐａｌｏ  Ａｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｒｕｅＶｉｅｗ製品スイートと称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、ＴｅａＬｅａｆ  Ｔｅｃｈｎｏｌｏｇｙ  Ｉｎｃ．（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｅａＬｅａｆ  ＣＸ製品スイートと称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、ＢＭＣ  Ｓｏｆｔｗａｒｅ，  Ｉｎｃ．（Ｈｏｕｓｔｏｎ，  Ｔｅｘａｓ）製のＢＭＣ性能マネージャおよびパトロール製品等のビジネスサービス管理製品の任意の部分を含む。
【００６５】
クライアント１０２、サーバ１０６、およびアプライアンス２００は、任意のタイプおよび形態のネットワーク上で通信し、本明細書に説明される動作を実施することが可能なコンピュータ、ネットワークデバイス、またはアプライアンス等の任意のタイプおよび形態のコンピューティングデバイスとして展開され、および／またはその上で実行されてもよい。図１Ｅおよび１Ｆは、クライアント１０２、サーバ１０６、またはアプライアンス２００の実施形態を実践するために有用なコンピューティングデバイス１００のブロック図を描写する。図１Ｅおよび１Ｆに示されるように、各コンピューティングデバイス１００は、中央処理ユニット１０１と、主要メモリユニット１２２とを含む。図１Ｅに示されるように、コンピューティングデバイス１００は、視覚表示デバイス１２４、キーボード１２６、および／またはマウス等のポインティングデバイス１２７を含んでもよい。各コンピューティングデバイス１００はまた、１つ以上の入出力デバイス１３０ａ−１３０ｂ（概して、参照番号１３０を使用して参照される）および中央処理ユニット１０１と通信するキャッシュメモリ１４０等の付加的な随意の要素を含んでもよい。
【００６６】
中央処理ユニット１０１は、主要メモリユニット１２２からフェッチされた命令に応答し、それらを処理する、任意の論理回路である。多くの実施形態では、中央処理ユニットは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｍｏｕｎｔａｉｎ  Ｖｉｅｗ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓｃｈａｕｍｂｕｒｇ，  Ｉｌｌｉｎｏｉｓ）製のもの、Ｔｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓａｎｔａ  Ｃｌａｒａ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、ＲＳ／６０００プロセッサ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ｗｈｉｔｅ  Ｐｌａｉｎｓ，  ＮｅｗＹｏｒｋ）製のもの、またはＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のもの等のマイクロプロセッサユニットによって提供される。コンピューティングデバイス１００は、これらのプロセッサのうちのいずれか、または本明細書に説明されるように動作することが可能な任意の他のプロセッサに基づいてもよい。
【００６７】
主要メモリユニット１２２は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バーストＳＲＡＭまたは同期バーストＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、高速ページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、拡張データ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）、拡張データ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バースト拡張データ出力ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、強化ＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃＬｉｎｋ  ＤＲＡＭ（ＳＬＤＲＡＭ）、Ｄｉｒｅｃｔ  Ｒａｍｂｕｓ  ＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘電体ＲＡＭ（ＦＲＡＭ（登録商標））等のデータを記憶することが可能であり、任意の記憶場所がマイクロプロセッサ１０１によって直接アクセスすることを可能にする、１つ以上のメモリチップであってもよい。主要メモリ１２２は、上記のメモリチップのうちのいずれか、または本明細書に説明されるように動作することが可能である任意の他の利用可能なメモリチップに基づいてもよい。図１Ｅに示される実施形態では、プロセッサ１０１は、システムバス１５０を介して主要メモリ１２２と通信する（以下でさらに詳細に説明される）。図１Ｆは、プロセッサがメモリポート１０３を介して主要メモリ１２２と直接通信する、コンピューティングデバイス１００の実施形態を描写する。例えば、図１Ｆでは、主要メモリ１２２は、ＤＲＤＲＡＭであってもよい。
【００６８】
図１Ｆは、主要プロセッサ１０１が、バックサイドバスと称されることもある二次バスを介して、キャッシュメモリ１４０と直接通信する、実施形態を描写する。他の実施形態では、主要プロセッサ１０１は、システムバス１５０を使用してキャッシュメモリ１４０と通信する。キャッシュメモリ１４０は、典型的には、主要メモリ１２２よりも速い応答時間を有し、典型的には、ＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。図１Ｆに示される実施形態では、プロセッサ１０１は、ローカルシステムバス１５０を介して種々のＩ／Ｏデバイス１３０と通信する。中央処理ユニット１０１をＩ／Ｏデバイス１３０のうちのいずれかに接続するために、ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、ＭｉｃｒｏＣｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕＢｕｓを含む、種々のバスが使用されてもよい。Ｉ／Ｏデバイスがビデオディスプレイ１２４である実施形態に関して、プロセッサ１０１は、ディスプレイ１２４と通信するためにＡｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）を使用してもよい。図１Ｆは、主要プロセッサ１０１が、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、Ｒａｐｉｄ  Ｉ／Ｏ、またはＩｎｆｉｎｉＢａｎｄを介してＩ／Ｏデバイス１３０ｂと直接通信する、コンピュータ１００の実施形態を描写する。図１Ｆはまた、ローカルバスおよび直接通信が混合される、実施形態も描写し、プロセッサ１０１は、Ｉ／Ｏデバイス１３０ａと直接通信しながら、ローカル相互接続バスを使用してＩ／Ｏデバイス１３０ｂと通信する。
【００６９】
コンピューティングデバイス１００は、３．５インチ、５．２５インチディスク、またはＺＩＰディスク等のフロッピー（登録商標）ディスクを受容するためのフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、種々の形式のテープドライブ、ＵＳＢデバイス、ハードドライブ、またはソフトウェアおよび任意のクライアントエージェント１２０またはその一部等のプログラムをインストールするために好適な任意の他のデバイス等の任意の好適なインストールデバイス１１６をサポートしてもよい。コンピューティングデバイス１００はさらに、オペレーティングシステムおよび他の関連ソフトウェアを記憶するため、およびクライアントエージェント１２０に関連する任意のプログラム等のアプリケーションソフトウェアプログラムを記憶するために、１つ以上のハードディスクドライブまたは独立ディスクの冗長アレイ等の記憶デバイス１２８を備えてもよい。随意に、インストールデバイス１１６のうちのいずれかはまた、記憶デバイス１２８としても使用され得る。加えて、オペレーティングシステムおよびソフトウェアは、ブート可能媒体、例えば、ｋｎｏｐｐｉｘ．ｎｅｔからのＧＮＵ／Ｌｉｎｕｘ（登録商標）配布として入手可能であるＧＮＵ／Ｌｉｎｕｘ（登録商標）用のブート可能ＣＤである、ＫＮＯＰＰＩＸ（Ｒ）等のブート可能ＣＤから起動されることができる。
【００７０】
さらに、コンピューティングデバイス１００は、標準電話回線、ＬＡＮまたはＷＡＮリンク（例えば、８０２．１１、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、ブロードバンド接続（例えば、ＩＳＤＮ、フレームリレー、ＡＴＭ、）、無線接続、または上記のうちのいずれかまたは全てのある組み合わせを含むが、それらに限定されない、種々の接続を通して、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、またはインターネットにインターフェース接続するように、ネットワークインターフェース１１８を含んでもよい。ネットワークインターフェース１１８は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、ＰＣＭＣＩＡネットワークカード、カードバスネットワークアダプタ、無線ネットワークアダプタ、ＵＳＢネットワークアダプタ、モデム、または通信が可能であり、本明細書に説明される動作を実施する、任意のタイプのネットワークにコンピューティングデバイス１００をインターフェース接続するために好適な任意の他のデバイスを備えてもよい。
【００７１】
多種多様なＩ／Ｏデバイス１３０ａ−１３０ｎが、コンピューティングデバイス１００の中に存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、ドローイングタブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および染料昇華プリンタを含む。Ｉ／Ｏデバイス１３０は、図１Ｅに示されるようにＩ／Ｏコントローラ１２３によって制御されてもよい。Ｉ／Ｏコントローラは、キーボード１２６およびポインティングデバイス１２７、例えば、マウスまたは光学ペン等の１つ以上のＩ／Ｏデバイスを制御してもよい。さらに、Ｉ／Ｏデバイスはまた、コンピューティングデバイス１００用の記憶装置１２８および／またはインストール媒体１１６を提供してもよい。なおも他の実施形態では、コンピューティングデバイス１００は、Ｔｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，  Ｉｎｃ．（Ｌｏｓ  Ａｌａｍｉｔｏｓ，  Ｃａｌｉｆｏｒｎｉａ）製のＵＳＢフラッシュドライブ系列のデバイス等のハンドヘルドＵＳＢ記憶デバイスを受容するＵＳＢ接続を提供してもよい。
【００７２】
いくつかの実施形態では、コンピューティングデバイス１００は、それぞれ、同一または異なるタイプおよび／または形態であり得る、複数の表示デバイス１２４ａ−１２４ｎを備えるかまたはそれらに接続されてもよい。したがって、Ｉ／Ｏデバイス１３０ａ−１３０ｎおよび／またはＩ／Ｏコントローラ１２３のうちのいずれかは、コンピューティングデバイス１００による複数の表示デバイス１２４ａ−１２４ｎの接続および使用をサポートする、有効にする、または提供するように、任意のタイプおよび／または形態の好適なハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを備えてもよい。例えば、コンピューティングデバイス１００は、表示デバイス１２４ａ−１２４ｎとインターフェースをとる、通信する、接続する、または別様に使用するように、任意のタイプおよび／または形態のビデオアダプタ、ビデオカード、ドライバ、および／またはライブラリを含んでもよい。一実施形態では、ビデオアダプタは、複数の表示デバイス１２４ａ−１２４ｎとインターフェースをとるように、複数のコネクタを備えてもよい。他の実施形態では、コンピューティングデバイス１００は、複数のビデオアダプタを含んでもよく、各ビデオアダプタは、表示デバイス１２４ａ−１２４ｎのうちの１つ以上のものに接続される。いくつかの実施形態では、コンピューティングデバイス１００のオペレーティングシステムの任意の部分が、複数の表示デバイス１２４ａ−１２４ｎを使用するために構成されてもよい。他の実施形態では、表示デバイス１２４ａ−１２４ｎのうちの１つ以上のものは、例えば、ネットワークを介して、コンピューティングデバイス１００に接続されるコンピューティングデバイス１００ａおよび１００ｂ等の１つ以上の他のコンピューティングデバイスによって提供されてもよい。これらの実施形態は、コンピューティングデバイス１００用の第２の表示デバイス１２４ａとして別のコンピュータの表示デバイスを使用するように設計および構築される、任意のタイプのソフトウェアを含んでもよい。当業者は、コンピューティングデバイス１００が複数の表示デバイス１２４ａ−１２４ｎを有するように構成されてもよい、種々の方法および実施形態を認識して理解するであろう。
【００７３】
さらなる実施形態では、Ｉ／Ｏデバイス１３０は、システムバス１５０と、ＵＳＢバス、Ａｐｐｌｅ  Ｄｅｓｋｔｏｐバス、ＲＳ−２３２シリアル接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅバス、ＦｉｒｅＷｉｒｅ  ８００バス、イーサネット（登録商標）バス、ＡｐｐｌｅＴａｌｋバス、ギガビットイーサネット（登録商標）バス、非同期転送モードバス、ＨＩＰＰＩバス、スーパーＨＩＰＰＩバス、ＳｅｒｉａｌＰｌｕｓバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはシリアルアタッチド小型コンピュータシステムインターフェースバス等の外部通信バスとの間のブリッジ１７０であってもよい。
【００７４】
図１Ｅおよび１Ｆで描写される種類のコンピューティングデバイス１００は、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。コンピューティングデバイス１００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃ  ＯＳ（Ｒ）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、またはコンピューティングデバイス上で起動し、本明細書に説明される動作を実施することが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。典型的なオペレーティングシステムは、とりわけ、全てＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製である、ＷＩＮＤＯＷＳ（登録商標）  ３．ｘ、ＷＩＮＤＯＷＳ（登録商標）  ９５、ＷＩＮＤＯＷＳ（登録商標）  ９８、ＷＩＮＤＯＷＳ（登録商標）  ２０００、ＷＩＮＤＯＷＳ（登録商標）  ＮＴ  ３．５１、ＷＩＮＤＯＷＳ（登録商標）  ＮＴ  ４．０、ＷＩＮＤＯＷＳ（登録商標）  ＣＥ、およびＷＩＮＤＯＷＳ（登録商標）  ＸＰ、Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＭａｃＯＳ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ａｒｍｏｎｋ，  Ｎｅｗ  Ｙｏｒｋ）製のＯＳ／２、およびＣａｌｄｅｒａ  Ｃｏｒｐ．（Ｓａｌｔ  Ｌａｋｅ  Ｃｉｔｙ，  Ｕｔａｈ）によって配布される無料で入手可能なオペレーティングシステムであるＬｉｎｕｘ（登録商標）、または任意のタイプおよび／または形態のＵＮＩＸ（登録商標）オペレーティングシステムを含む。
【００７５】
他の実施形態では、コンピューティングデバイス１００は、デバイスに準拠する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ１００は、Ｐａｌｍ，  Ｉｎｃ製のＴｒｅｏ  １８０、２７０、１０６０、６００、または６５０スマートフォンである。本実施形態では、Ｔｒｅｏスマートフォンは、ＰａｌｍＯＳオペレーティングシステムの制御下で動作され、スタイラス入力デバイスおよび５方向ナビゲータデバイスを含む。また、コンピューティングデバイス１００は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または通信が可能であり、本明細書に説明される動作を実施するために十分なプロセッサ能力およびメモリ容量を有する、他の形態のコンピューティングまたは電気通信デバイスであることができる。
【００７６】
図１Ｇに示されるように、コンピューティングデバイス１００は、複数のプロセッサを備えてもよく、命令の同時実行のための機能性、または１つを上回るデータについての１つの命令の同時実行のための機能性を提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つ以上のコアを伴う並列プロセッサを備えてもよい。これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、単一のグローバルアドレス空間としての全ての利用可能なメモリにアクセスする、複数のプロセッサおよび／または複数のプロセッサコアを伴う共有メモリ並列デバイスである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、それぞれがローカルメモリのみにアクセスする複数のプロセッサを伴う分散型メモリ並列デバイスである。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、共有されるいくつかのメモリと、特定のプロセッサまたはプロセッサのサブセットのみによってアクセスされることができるいくつかのメモリとの両方を有する。これらの実施形態のうちのなおもさらに別のものでは、マルチコアマイクロプロセッサ等のコンピューティングデバイス１００は、２つ以上の独立プロセッサを、単一のパッケージ、多くの場合、単一の集積回路（ＩＣ）に組み合わされる。これらの実施形態のうちのさらに別のものでは、コンピューティングデバイス１００は、ＣＥＬＬ  ＢＲＯＡＤＢＡＮＤ  ＥＮＧＩＮＥアーキテクチャを有し、Ｐｏｗｅｒプロセッサ要素と、複数の相乗的処理要素とを含む、チップを含み、Ｐｏｗｅｒプロセッサ要素および複数の相乗的処理要素は、要素相互接続バスと称され得る、内部高速バスによってともに連結される。
【００７７】
いくつかの実施形態では、プロセッサは、複数のデータについて単一の命令を同時に実行するための機能性（ＳＩＭＤ）を提供する。他の実施形態では、プロセッサは、複数のデータについて複数の命令を同時に実行するための機能性（ＭＩＭＤ）を提供する。なおも他の実施形態では、プロセッサは、単一のデバイスでＳＩＭＤおよびＭＩＭＤコアの任意の組み合わせを使用してもよい。
【００７８】
いくつかの実施形態では、コンピューティングデバイス１００は、グラフィックス処理ユニットを備えてもよい。図１Ｈで描写される、これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、少なくとも１つの中央処理ユニット１０１と、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、少なくとも１つの並列処理ユニットと、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、任意のタイプの複数の処理ユニットを含み、複数の処理ユニットのうちの１つは、グラフィックス処理ユニットを備える。
【００７９】
いくつかの実施形態では、第１のコンピューティングデバイス１００ａは、クライアントコンピューティングデバイス１００ｂのユーザの代わりにアプリケーションを実行する。他の実施形態では、コンピューティングデバイス１００ａは、仮想マシンを実行し、該仮想マシンは、実行セッション（アプリケーションは、ユーザまたはクライアントコンピューティングデバイス１００ｂの代わりに、該セッション内で実行する）を提供する。これらの実施形態のうちの１つでは、実行セッションは、ホスト型デスクトップセッションである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、端末サービスセッションを実行する。端末サービスセッションは、ホスト型デスクトップ環境を提供してもよい。これらの実施形態のうちのなおも別のものでは、実行セッションは、アプリケーション、複数のアプリケーション、デスクトップアプリケーション、および１つ以上のアプリケーションが実行し得るデスクトップセッションのうちの１つ以上のものを備え得る、コンピューティング環境へのアクセスを提供する。
（Ｂ．アプライアンスアーキテクチャ）
【００８０】
図２Ａは、アプライアンス２００の例示的実施形態を図示する。図２Ａのアプライアンス２００のアーキテクチャは、例証のみとして提供され、限定的であることを意図していない。図２に示されるように、アプライアンス２００は、ハードウェア層２０６と、ユーザ空間２０２およびカーネル空間２０４に分割されるソフトウェア層とを備える。
【００８１】
ハードウェア層２０６は、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスが実行される、ハードウェア要素を提供する。ハードウェア層２０６はまた、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスがアプライアンス２００に対して内部および外部の両方でデータを通信することを可能にする、構造および要素も提供する。図２に示されるように、ハードウェア層２０６は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット２６２と、ソフトウェアおよびデータを記憶するためのメモリ２６４と、ネットワークを経由してデータを伝送および受信するためのネットワークポート２６６と、ネットワークを経由して伝送および受信されるデータのセキュアソケットレイヤ処理に関連する機能を果たすための暗号化プロセッサ２６０とを含む。いくつかの実施形態では、中央処理ユニット２６２は、単一のプロセッサにおいて暗号化プロセッサ２６０の機能を果たしてもよい。加えて、ハードウェア層２０６は、処理ユニット２６２および暗号化プロセッサ２６０の各々に対する複数のプロセッサを備えてもよい。プロセッサ２６２は、図１Ｅおよび１Ｆに関連して上記で説明されるプロセッサ１０１のうちのいずれかを含んでもよい。例えば、一実施形態では、アプライアンス２００は、第１のプロセッサ２６２と、第２のプロセッサ２６２’とを備える。他の実施形態では、プロセッサ２６２または２６２’は、マルチコアプロセッサを備える。
【００８２】
アプライアンス２００のハードウェア層２０６は、概して、暗号化プロセッサ２６０とともに図示されるが、プロセッサ２６０は、セキュアソケットレイヤ（ＳＳＬ）またはトランスポート層セキュリティ（ＴＬＳ）プロトコル等の任意の暗号化プロトコルに関連する機能を果たすためのプロセッサであってもよい。いくつかの実施形態では、プロセッサ２６０は、汎用プロセッサ（ＧＰＰ）であってもよく、さらなる実施形態では、任意のセキュリティ関連プロトコルの処理を実施するための実行可能命令を有してもよい。
【００８３】
アプライアンス２００のハードウェア層２０６は、図２のある要素とともに図示されるが、アプライアンス２００のハードウェア部分またはコンポーネントは、図１Ｅおよび１Ｆと併せて本明細書に図示および議論されるコンピューティングデバイス１００等のコンピューティングデバイスの任意のタイプおよび形態の要素、ハードウェア、またはソフトウェアを備えてもよい。いくつかの実施形態では、アプライアンス２００は、サーバ、ゲートウェイ、ルータ、スイッチ、ブリッジ、または他のタイプのコンピューティングまたはネットワークデバイスを備え、それと関連付けられる任意のハードウェアおよび／またはソフトウェア要素を有してもよい。
【００８４】
アプライアンス２００のオペレーティングシステムは、利用可能なシステムメモリをカーネル空間２０４およびユーザ空間２０４の中へ配分、管理、または別様に分離する。例示的ソフトウェアアーキテクチャ２００では、オペレーティングシステムは、任意のタイプおよび／または形態のＵｎｉｘ（登録商標）オペレーティングシステムであってもよいが、本発明は、そのように限定されない。したがって、アプライアンス２００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃＯＳ（Ｒ）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、またはアプライアンス２００上で起動し、本明細書に説明される動作を実施することが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。
【００８５】
カーネル空間２０４は、任意のデバイスドライバ、カーネル拡張、または他のカーネル関連ソフトウェアを含む、カーネル２３０を起動するために確保される。当業者に公知であるように、カーネル２３０は、オペレーティングシステムのコアであり、アプリケーション１０４のリソースおよびハードウェア関連要素のアクセス、制御、および管理を提供する。アプライアンス２００の実施形態によると、カーネル空間２０４はまた、その利益が本明細書でさらに詳細に説明される、統合キャッシュと称されることもある、キャッシュマネージャ２３２と連動して作動するいくつかのネットワークサービスまたはプロセスも含む。加えて、カーネル２３０の実施形態は、デバイス２００によってインストール、構成、または別様に使用されるオペレーティングシステムの実施形態に依存するであろう。
【００８６】
一実施形態では、デバイス２００は、クライアント１０２および／またはサーバ１０６と通信するために、ＴＣＰ／ＩＰベースのスタック等の１つのネットワークスタック２６７を備える。一実施形態では、ネットワークスタック２６７は、ネットワーク１０８等の第１のネットワークおよび第２のネットワーク１１０と通信するために使用される。いくつかの実施形態では、デバイス２００は、クライアント１０２のＴＣＰ接続等の第１のトランスポート層接続を終了させ、クライアント１０２によって使用するためにサーバ１０６への第２のトランスポート層接続を確立し、例えば、第２のトランスポート層接続は、アプライアンス２００およびサーバ１０６において終了される。第１および第２のトランスポート層接続は、単一のネットワークスタック２６７を介して接続されてもよい。他の実施形態では、デバイス２００は、複数のネットワークスタック、例えば、２６７および２６７’を備えてもよく、第１のトランスポート層接続は、１つのネットワークスタック２６７において、第２のトランスポート層接続は、第２のネットワークスタック２６７’上で、確立または終了されてもよい。例えば、１つのネットワークスタックは、第１のネットワーク上でネットワークパケットを受信および伝送するため、別のネットワークスタックは、第２のネットワーク上でネットワークパケットを受信および伝送するためのものであってもよい。一実施形態では、ネットワークスタック２６７は、アプライアンス２００による伝送のために１つ以上のネットワークパケットを待ち行列に入れるためのバッファ２４３を備える。
【００８７】
図２に示されるように、カーネル空間２０４は、キャッシュマネージャ２３２と、高速層２−７統合パケットエンジン２４０と、暗号化エンジン２３４と、ポリシエンジン２３６と、マルチプロトコル圧縮論理２３８とを含む。ユーザ空間２０２の代わりにカーネル空間２０４またはカーネルモードでこれらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８を起動することは、単独で、および組み合わせて、これらのコンポーネントのそれぞれの性能を改良する。カーネル動作は、これらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８が、デバイス２００のオペレーティングシステムのコアアドレス空間内で起動することを意味する。例えば、カーネルモードで暗号化エンジン２３４を起動することは、暗号化および暗号解読動作をカーネルに移動させ、それによって、カーネルモードにおけるメモリ空間またはカーネルスレッドとユーザモードにおけるメモリ空間またはスレッドとの間の移行の数を削減することによって、暗号化性能を改良する。例えば、カーネルモードで取得されるデータは、カーネルレベルデータ構造からユーザレベルデータ構造まで等、ユーザモードで起動するプロセスまたはスレッドにパスまたはコピーされる必要がなくなり得る。別の側面では、カーネルモードとユーザモードとの間のコンテキスト切替の数も削減される。加えて、コンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８のうちのいずれかの同期化およびその間の通信が、カーネル空間２０４内でより効率的に実施されることができる。
【００８８】
いくつかの実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８の任意の部分が、カーネル空間２０４内で起動または動作してもよい一方で、これらのコンポーネント２３２、２４０、２３４、２３６、および２３８の他の部分は、ユーザ空間２０２内で起動または動作してもよい。一実施形態では、アプライアンス２００は、１つ以上のネットワークパケットの任意の部分、例えば、クライアント１０２からの要求またはサーバ１０６からの応答を備える、ネットワークパケットへのアクセスを提供する、カーネルレベルデータ構造を使用する。いくつかの実施形態では、カーネルレベルデータ構造は、ネットワークスタック２６７へのトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン２４０によって取得されてもよい。カーネルレベルデータ構造は、ネットワークスタック２６７、ネットワークトラフィック、またはネットワークスタック２６７によって受信または伝送されるパケットに関連するカーネル空間２０４を介してアクセス可能である、任意のインターフェースおよび／またはデータを備えてもよい。他の実施形態では、カーネルレベルデータ構造は、コンポーネントまたはプロセスの所望の動作を実施するために、コンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８のうちのいずれかによって使用されてもよい。一実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８が、カーネルレベルデータ構造を使用するときにカーネルモード２０４で起動している一方で、別の実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８は、カーネルレベルデータ構造を使用するときにユーザモードで起動している。いくつかの実施形態では、カーネルレベルデータ構造は、第２のカーネルレベルデータ構造または任意の所望のユーザレベルデータ構造にコピーまたはパスされてもよい。
【００８９】
キャッシュマネージャ２３２は、発信サーバ１０６によって供給される、オブジェクトまたは動的に生成されたオブジェクト等の任意のタイプおよび形態のコンテンツのキャッシュアクセス、制御、および管理を提供する、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。キャッシュマネージャ２３２によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、マークアップ言語等の任意の形式である、または任意のプロトコルを介して通信される、データを備えてもよい。いくつかの実施形態では、キャッシュマネージャ２３２は、元のデータが、キャッシュメモリ要素を読み取ることに対して、フェッチ、計算、または別様に取得するためにより長いアクセス時間を要求し得る、他の場所に記憶された元のデータ、または前もって計算、生成、または伝送されたデータを複製する。いったんデータがキャッシュメモリ要素に記憶されると、元のデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスし、それによって、アクセス時間を短縮することによって、将来の使用が行われることができる。いくつかの実施形態では、キャッシュメモリ要素は、デバイス２００のメモリ２６４の中にデータオブジェクトを備えてもよい。他の実施形態では、キャッシュメモリ要素は、メモリ２６４よりも速いアクセス時間を有する、メモリを備えてもよい。別の実施形態では、キャッシュメモリ要素は、ハードディスクの一部等のデバイス２００の任意のタイプおよび形態の記憶要素を備えてもよい。いくつかの実施形態では、処理ユニット２６２は、キャッシュマネージャ２３２によって使用するためのキャッシュメモリを提供してもよい。その上さらなる実施形態では、キャッシュマネージャ２３２は、データ、オブジェクト、および他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組み合わせを使用してもよい。
【００９０】
さらに、キャッシュマネージャ２３２は、本明細書に説明されるアプライアンス２００の技法の任意の実施形態を実施する任意の論理、機能、ルール、または動作を含む。例えば、キャッシュマネージャ２３２は、無効化時間期間の満了に基づいて、またはクライアント１０２またはサーバ１０６からの無効化コマンドの受信に応じて、オブジェクトを無効化する論理または機能性を含む。いくつかの実施形態では、キャッシュマネージャ２３２は、カーネル空間２０４内で、他の実施形態では、ユーザ空間２０２内で実行する、プログラム、サービス、プロセス、またはタスクとして動作してもよい。一実施形態では、キャッシュマネージャ２３２の第１の部分が、ユーザ空間２０２内で実行する一方で、第２の部分は、カーネル空間２０４内で実行する。いくつかの実施形態では、キャッシュマネージャ２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブル論理デバイス（ＰＬＤ）、または特定用途向け集積回路（ＡＳＩＣ）等の任意の他のタイプの集積回路を備えることができる。
【００９１】
ポリシエンジン２３６は、例えば、知的統計エンジンまたは他のプログラマブルアプリケーションを含んでもよい。一実施形態では、ポリシエンジン２３６は、ユーザがキャッシングポリシを識別、規定、定義、または構成することを可能にする構成機構を提供する。ポリシエンジン２３６はまた、いくつかの実施形態では、ユーザ選択キャッシングポリシ決定を有効にするように、ルックアップテーブルまたはハッシュテーブル等のデータ構造をサポートするメモリへのアクセスも有する。他の実施形態では、ポリシエンジン２３６は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス２００によって実施される任意の他の機能または動作のアクセス、制御、および管理に加えて、アプライアンス２００によってキャッシュされているオブジェクト、データ、またはコンテンツのアクセス、制御、および管理を決定して提供する、任意の論理、ルール、機能、または動作を備えてもよい。具体的キャッシングポリシのさらなる実施例が、本明細書でさらに説明される。
【００９２】
暗号化エンジン２３４は、ＳＳＬまたはＴＬＳ等の任意のセキュリティ関連プロトコル、またはそれに関連する任意の機能の処理をハンドリングするための任意の論理、ビジネスルール、機能、または動作を備える。例えば、暗号化エンジン２３４は、アプライアンス２００を介して通信されるネットワークパケットまたはその任意の部分を暗号化および解読する。暗号化エンジン２３４はまた、クライアント１０２ａ−１０２ｎ、サーバ１０６ａ−１０６ｎ、またはアプライアンス２００の代わりにＳＳＬまたはＴＬＳ接続を設定または確立してもよい。したがって、暗号化エンジン２３４は、ＳＳＬ処理のオフローディングおよび加速を提供する。一実施形態では、暗号化エンジン２３４は、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間に仮想私設ネットワークを提供するために、トンネリングプロトコルを使用する。いくつかの実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０と通信する。他の実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０上で起動する実行可能命令を備える。
【００９３】
マルチプロトコル圧縮エンジン２３８は、デバイス２００のネットワークスタック２６７によって使用されるプロトコルのうちのいずれか等のネットワークパケットの１つ以上のプロトコルを圧縮するための任意の論理、ビジネスルール、機能、もしく動作を備える。一実施形態では、マルチプロトコル圧縮エンジン２３８は、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間で双方向性に、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（電子メール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルを圧縮する。他の実施形態では、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマークアップ言語（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、いくつかの実施形態では、拡張マークアップ言語（ＸＭＬ）等の任意のマークアップ言語の圧縮を提供する。一実施形態では、マルチプロトコル圧縮エンジン２３８は、アプライアンス２００間通信のために設計される任意のプロトコル等の任意の高性能プロトコルの圧縮を提供する。別の実施形態では、マルチプロトコル圧縮エンジン２３８は、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の修正されたトランスポート制御プロトコルを使用して、任意の通信の任意のペイロードまたは任意の通信を圧縮する。
【００９４】
したがって、マルチプロトコル圧縮エンジン２３８は、デスクトップクライアント、例えば、Ｏｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌのような頻用されている企業アプリケーションによって起動される任意のクライアント等のＭｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋおよび非ウェブシンクライアント、およびＰｏｃｋｅｔ  ＰＣ等のモバイルクライアントさえも介して、アプリケーションにアクセスするユーザのために性能を加速する。いくつかの実施形態では、マルチプロトコル圧縮エンジン２３８は、カーネルモード２０４内で実行し、ネットワークスタック２６７にアクセスするパケット処理エンジン２４０と統合することによって、任意のアプリケーション層プロトコル等のＴＣＰ／ＩＰプロトコルによって搬送されるプロトコルのうちのいずれかを圧縮することができる。
【００９５】
概して、パケット処理エンジンまたはパケットエンジンとも称される、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してアプライアンス２００によって受信および伝送されるパケットのカーネルレベル処理を管理する責任がある。高速層２−７統合パケットエンジン２４０は、ネットワークパケットの受信またはネットワークパケットの伝送のため等、処理中に１つ以上のネットワークパケットを待ち行列に入れるためのバッファを備えてもよい。加えて、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してネットワークパケットを送信および受信するように、１つ以上のネットワークスタック２６７と通信する。高速層２−７統合パケットエンジン２４０は、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８と連動して作動する。具体的には、暗号化エンジン２３４は、パケットのＳＳＬ処理を実施するように構成され、ポリシエンジン２３６は、要求レベルコンテンツ切替および要求レベルキャッシュリダイレクト等のトラフィック管理に関連する機能を果たすように構成され、マルチプロトコル圧縮論理２３８は、データの圧縮および解凍に関連する機能を果たすように構成される。
【００９６】
高速層２−７統合パケットエンジン２４０は、パケット処理タイマ２４２を含む。一実施形態では、パケット処理タイマ２４２は、着信している（すなわち、受信された）または発信している（すなわち、伝送された）ネットワークパケットの処理をトリガするように、１つ以上の時間間隔を提供する。いくつかの実施形態では、高速層２−７統合パケットエンジン２４０は、タイマ２４２に応答してネットワークパケットを処理する。パケット処理タイマ２４２は、時間関連イベント、間隔、または発生を通知、トリガ、または通信するように、任意のタイプおよび形態の信号をパケットエンジン２４０に提供する。多くの実施形態では、パケット処理タイマ２４２は、例えば、１００ミリ秒、５０ミリ秒、または２５ミリ秒等、ミリ秒単位で動作する。例えば、いくつかの実施形態では、パケット処理タイマ２４２が、時間間隔を提供する、または別様にネットワークパケットを１０ミリ秒時間間隔で高速層２−７統合パケットエンジン２４０によって処理させる一方で、他の実施形態では、５ミリ秒時間間隔で、依然としてさらに、さらなる実施形態では、３、２、または１ミリ秒ほどの短さの時間間隔で処理させる。高速層２−７統合パケットエンジン２４０は、動作中に暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮エンジン２３８とインターフェースをとられる、統合される、または通信してもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかが、パケット処理タイマ２４２および／またはパケットエンジン２４０に応答して行われてもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかは、パケット処理タイマ２４２を介して提供される時間間隔の粒度で、例えば、１０ミリ秒未満またはそれに等しい時間間隔で実施されてもよい。例えば、一実施形態では、キャッシュマネージャ２３２は、高速層２−７統合パケットエンジン２４０および／またはパケット処理タイマ２４２に応答して、任意のキャッシュされたオブジェクトの無効化を実施してもよい。別の実施形態では、キャッシュされたオブジェクトの満了または無効化時間は、１０ミリ秒毎等のパケット処理タイマ２４２の時間間隔と同程度の粒度に設定されることができる。
【００９７】
カーネル空間２０４と対照的に、ユーザ空間２０２は、別様にユーザモードで起動するユーザモードアプリケーションまたはプログラムによって使用される、オペレーティングシステムのメモリ領域または部分である。ユーザモードアプリケーションは、カーネル空間２０４に直接アクセスしなくてもよく、カーネルサービスにアクセスするためにサービスコールを使用する。図２に示されるように、アプライアンス２００のユーザ空間２０２は、グラフィカルユーザインターフェース（ＧＵＩ）２１０と、コマンドラインインターフェース（ＣＬＩ）２１２と、シェルサービス２１４と、健全性監視プログラム２１６と、デーモンサービス２１８とを含む。ＧＵＩ２１０およびＣＬＩ２１２は、システム管理者または他のユーザが、アプライアンス２００のオペレーティングシステムを介して等、アプライアンス２００と相互作用し、その動作を制御することができる、手段を提供する。ＧＵＩ２１０またはＣＬＩ２１２は、ユーザ空間２０２またはカーネル空間２０４内で起動するコードを備えることができる。ＧＵＩ２１０は、任意のタイプおよび形態のグラフィカルユーザインターフェースであってもよく、テキスト、グラフィックを介して、または別様にブラウザ等の任意のタイプのプログラムまたはアプリケーションによって、提示されてもよい。ＣＬＩ２１２は、オペレーティングシステムによって提供されるコマンドライン等の任意のタイプおよび形態のコマンドラインまたはテキストベースのインターフェースであってもよい。例えば、ＣＬＩ２１２は、ユーザがオペレーティングシステムと相互作用することを可能にするツールである、シェルを備えてもよい。いくつかの実施形態では、ＣＬＩ２１２は、ｂａｓｈ、ｃｓｈ、ｔｃｓｈ、またはｋｓｈタイプシェルを介して提供されてもよい。シェルサービス２１４は、ＧＵＩ２１０および／またはＣＬＩ２１２を介したユーザによるアプライアンス２００またはオペレーティングシステムとの相互作用をサポートする、プログラム、サービス、タスク、プロセス、または実行可能命令を備える。
【００９８】
健全性監視プログラム２１６は、ネットワークシステムが適切に機能していることと、ユーザがネットワークを経由して要求されたコンテンツを受信することとを監視し、チェックし、報告し、確実にするために使用される。健全性監視プログラム２１６は、アプライアンス２００の任意のアクティビティを監視するための論理、ルール、機能、または動作を提供する、１つ以上のプログラム、サービス、タスク、プロセス、または実行可能命令を備える。いくつかの実施形態では、健全性監視プログラム２１６は、アプライアンス２００を介してパスされる任意のネットワークトラフィックを傍受して点検する。他の実施形態では、健全性監視プログラム２１６は、任意の好適な手段および／または機構によって、以下、すなわち、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、マルチプロトコル圧縮論理２３８、パケットエンジン２４０、デーモンサービス２１８、およびシェルサービス２１４のうちの１つ以上のものとインターフェースをとる。したがって、健全性監視プログラム２１６は、アプライアンス２００の任意の部分の状態、ステータス、または健全性を決定するように、任意のアプリケーションプログラミングインターフェース（ＡＰＩ）を呼び出してもよい。例えば、健全性監視プログラム２１６は、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在起動しているかどうかをチェックするように、周期的ベースでステータス問い合わせをｐｉｎｇまたは送信してもよい。別の実施例では、健全性監視プログラム２１６は、アプライアンス２００の任意の部分との任意の条件、ステータス、またはエラーを決定するように、任意のプログラム、プロセス、サービス、またはタスクによって提供される、任意のステータス、エラー、または履歴ログをチェックしてもよい。
【００９９】
デーモンサービス２１８は、連続的に、またはバックグラウンドで起動し、アプライアンス２００によって受信される周期的サービス要求をハンドリングする、プログラムである。いくつかの実施形態では、デーモンサービスは、適宜、別のデーモンサービス２１８等の他のプログラムまたはプロセスに要求を転送してもよい。当業者に公知であるように、デーモンサービス２１８は、ネットワーク制御等の連続的または周期的なシステム全体の機能を果たすように、または任意の所望のタスクを実施するように、無人で起動してもよい。いくつかの実施形態では、１つ以上のデーモンサービス２１８は、ユーザ空間２０２内で起動する一方で、他の実施形態では、１つ以上のデーモンサービス２１８は、カーネル空間内で起動する。
【０１００】
ここで図２Ｂを参照すると、アプライアンス２００の別の実施形態が描写されている。要するに、アプライアンス２００は、以下のサービス、機能性、または動作、すなわち、ＳＳＬ  ＶＰＮコネクティビティ２８０、切替／負荷平衡２８４、ドメイン名サービス解決２８６、加速２８８、および１つ以上のクライアント１０２と１つ以上のサーバ１０６との間の通信用のアプリケーションファイアウォール２９０のうちの１つ以上のものを提供する。サーバ１０６はそれぞれ、１つ以上のネットワーク関連サービス２７０ａ−２７０ｎ（サービス２７０と称される）を提供してもよい。例えば、サーバ１０６は、ｈｔｔｐサービス２７０を提供してもよい。アプライアンス２００は、ｖＳｅｒｖｅｒ、ＶＩＰサーバ、または単にＶＩＰ２７５ａ−２７５ｎと称される（本明細書ではｖＳｅｒｖｅｒ２７５とも称される）、１つ以上の仮想サーバまたは仮想インターネットプロトコルサーバを備える。ｖＳｅｒｖｅｒ２７５は、アプライアンス２００の構成および動作に従って、クライアント１０２とサーバ１０６との間の通信を受信、傍受、または別様に処理する。
【０１０１】
ｖＳｅｒｖｅｒ２７５は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。ｖＳｅｒｖｅｒ２７５は、アプライアンス２００においてユーザモード２０２、カーネルモード２０４、またはそれらの任意の組み合わせで動作する、任意のタイプおよび形態のプログラム、サービス、タスク、プロセス、または実行可能命令を備えてもよい。ｖＳｅｒｖｅｒ２７５は、ＳＳＬ  ＶＰＮ２８０、切替／負荷平衡２８４、ドメイン名サービス解決２８６、加速２８８、およびアプリケーションファイアウォール２９０等の本明細書に説明される技法の任意の実施形態を実施する任意の論理、機能、ルール、または動作を含む。いくつかの実施形態では、ｖＳｅｒｖｅｒ２７５は、サーバ１０６のサービス２７０への接続を確立する。サービス２７５は、アプライアンス２００、クライアント１０２、またはｖＳｅｒｖｅｒ２７５に接続し、それと通信することが可能な任意のプログラム、アプリケーション、プロセス、タスク、または実行可能命令のセットを備えてもよい。例えば、サービス２７５は、ウェブサーバ、ｈｔｔｐサーバ、ｆｔｐ、電子メール、またはデータベースサーバを備えてもよい。いくつかの実施形態では、サービス２７０は、電子メール、データベース、または企業アプリケーション等のアプリケーションのための通信をリッスン、受信、および／または送信するためのデーモンプロセスまたはネットワークドライバである。いくつかの実施形態では、サービス２７０は、具体的ＩＰアドレス、またはＩＰアドレスおよびポート上で通信してもよい。
【０１０２】
いくつかの実施形態では、ｖＳｅｒｖｅｒ２７５は、ポリシエンジン２３６の１つ以上のポリシを、クライアント１０２とサーバ１０６との間のネットワーク通信に適用する。一実施形態では、ポリシは、ｖＳｅｒｖｅｒ２７５と関連付けられる。別の実施形態では、ポリシは、ユーザまたはユーザのグループに基づく。さらに別の実施形態では、ポリシは、大域的であり、１つ以上のｖＳｅｒｖｅｒ２７５ａ−２７５ｎ、およびアプライアンス２００を介して通信する任意のユーザまたはユーザのグループに適用される。いくつかの実施形態では、ポリシエンジンのポリシは、インターネットプロトコルアドレス、ポート、プロトコルタイプ、ヘッダ、またはパケット内のフィールド等の通信の任意のコンテンツ、またはユーザ、ユーザのグループ、ｖＳｅｒｖｅｒ２７５、トランスポート層接続、および／またはクライアント１０２またはサーバ１０６の識別または属性等の通信のコンテキストに基づいて、ポリシが適用される条件を有する。
【０１０３】
他の実施形態では、アプライアンス２００は、サーバ１０６からコンピューティング環境１５、アプリケーション、および／またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント１０２の認証および／または承認を決定するように、ポリシエンジン２３６と通信する、またはインターフェースをとる。別の実施形態では、アプライアンス２００は、アプリケーション配信システム１９０にコンピューティング環境１５、アプリケーション、および／またはデータファイルのうちの１つ以上のものを配信させるための遠隔ユーザまたは遠隔クライアント１０２の認証および／または承認を決定するように、ポリシエンジン２３６と通信する、またはインターフェースをとる。さらに別の実施形態では、アプライアンス２００は、ポリシエンジン２３６の認証および／または遠隔ユーザまたは遠隔クライアント１０２の承認に基づいて、ＶＰＮまたはＳＳＬ  ＶＰＮ接続を確立する。一実施形態では、アプライアンス２００は、ポリシエンジン２３６のポリシに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。例えば、アプライアンス２００は、ポリシエンジン２３６に基づいて、コンピューティング環境１５、アプリケーション、またはデータファイルへのアクセスを制御してもよい。
【０１０４】
いくつかの実施形態では、ｖＳｅｒｖｅｒ２７５は、クライアントエージェント１２０を介したクライアント１０２とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖＳｅｒｖｅｒ２７５は、クライアント１０２からの通信をリッスンして受信する。他の実施形態では、ｖＳｅｒｖｅｒ２７５は、クライアントサーバ１０６とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖＳｅｒｖｅｒ２７５は、サーバ１０６上で起動するサーバ２７０のインターネットプロトコルアドレスおよびポートへのトランスポート層接続を確立する。別の実施形態では、ｖＳｅｒｖｅｒ２７５は、クライアント１０２への第１のトランスポート層接続をサーバ１０６への第２のトランスポート層接続と関連付ける。いくつかの実施形態では、ｖＳｅｒｖｅｒ２７５は、サーバ１０６へのトランスポート層接続のプールを確立し、プールされたトランスポート層接続を介してクライアント要求を多重化する。
【０１０５】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のＳＳＬ  ＶＰＮ接続２８０を提供する。例えば、第１のネットワーク１０２上のクライアント１０２は、第２のネットワーク１０４’上のサーバ１０６への接続を確立することを要求する。いくつかの実施形態では、第２のネットワーク１０４’は、第１のネットワーク１０４からルーティング可能ではない。他の実施形態では、クライアント１０２は、公衆ネットワーク１０４上にあり、サーバ１０６は、企業ネットワーク等の私設ネットワーク１０４’上にある。一実施形態では、クライアントエージェント１２０は、第１のネットワーク１０４上のクライアント１０２の通信を傍受し、通信を暗号化し、第１のトランスポート層接続を介してアプライアンス２００に通信を伝送する。アプライアンス２００は、第１のネットワーク１０４上の第１のトランスポート層接続を、第２のネットワーク１０４上のサーバ１０６への第２のトランスポート層接続に関連付ける。アプライアンス２００は、クライアントエージェント１０２から傍受された通信を受信し、通信を解読し、第２のトランスポート層接続を介して第２のネットワーク１０４上のサーバ１０６に通信を伝送する。第２のトランスポート層接続は、プールされたトランスポート層接続であってもよい。したがって、アプライアンス２００は、２つのネットワーク１０４、１０４’の間のクライアント１０２のためのエンドツーエンドセキュアトランスポート層接続を提供する。
【０１０６】
一実施形態では、アプライアンス２００は、仮想私設ネットワーク１０４上のクライアント１０２のイントラネットインターネットプロトコルまたはＩｎｔｒａｎｅｔＩＰ２８２アドレスをホストする。クライアント１０２は、第１のネットワーク１０４上のインターネットプロトコル（ＩＰ）アドレスおよび／またはホスト名等のローカルネットワーク識別子を有する。アプライアンス２００を介して第２のネットワーク１０４’に接続されたとき、アプライアンス２００は、第２のネットワーク１０４’上のクライアント１０２のＩＰアドレスおよび／またはホスト名等のネットワーク識別子である、ＩｎｔｒａｎｅｔＩＰアドレス２８２を確立する、割り当てる、または別様に提供する。アプライアンス２００は、クライアントの確立されたＩｎｔｒａｎｅｔＩＰ２８２を使用して、クライアント１０２に向かってダイレクトされる任意の通信のための第２または私設ネットワーク１０４’をリッスンし、その上で受信する。一実施形態では、アプライアンス２００は、第２の私設ネットワーク１０４上のクライアント１０２として、またはその代わりに作用する。例えば、別の実施形態では、ｖＳｅｒｖｅｒ２７５は、クライアント１０２のＩｎｔｒａｎｅｔＩＰ２８２への通信をリッスンし、それに応答する。いくつかの実施形態では、第２のネットワーク１０４’上のコンピューティングデバイス１００が要求を伝送する場合、アプライアンス２００は、それがクライアント１０２であるかのように要求を処理する。例えば、アプライアンス２００は、クライアントのＩｎｔｒａｎｅｔＩＰ２８２へのｐｉｎｇに応答してもよい。別の実施例では、アプライアンスは、クライアントのＩｎｔｒａｎｅｔＩＰ２８２との接続を要求する、第２のネットワーク１０４上のコンピューティングデバイス１００とのＴＣＰまたはＵＤＰ接続等の接続を確立してもよい。
【０１０７】
いくつかの実施形態では、アプライアンス２００は、以下の加速技法２８８、すなわち、１）圧縮、２）解凍、３）伝送制御プロトコルプーリング、４）伝送制御プロトコル多重化、５）伝送制御プロトコルバッファリング、および６）キャッシング、のうちの１つ以上のものをクライアント１０２とサーバ１０６との間の通信に提供する。
【０１０８】
一実施形態では、アプライアンス２００は、各サーバ１０６との１つ以上のトランスポート層接続を開放し、インターネットを介したクライアントによる反復データアクセスを可能にするように、これらの接続を維持することによって、クライアント１０２へのトランスポート層接続を繰り返し開放および閉鎖することによって引き起こされる処理負荷の多くからサーバ１０６を解放する。本技法は、本明細書では「接続プーリング」と称される。
【０１０９】
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント１０２からサーバ１０６への通信をシームレスに接合するために、アプライアンス２００は、トランスポート層プロトコルレベルでシーケンス番号および確認応答番号を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、インバウンドパケット（すなわち、クライアント１０２から受信されるパケット）の場合、パケットのソースネットワークアドレスは、アプライアンス２００の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。アウトバウンドパケット（すなわち、サーバ１０６から受信されるもの）の場合、ソースネットワークアドレスは、サーバ１０６のものからアプライアンス２００の出力ポートのものに変更され、宛先アドレスは、アプライアンス２００のものから要求側クライアント１０２のものに変更される。パケットのシーケンス番号および確認応答番号はまた、クライアント１０２へのアプライアンス２００のトランスポート層接続上でクライアント１０２によって予期されるシーケンス番号および確認応答番号に変換される。いくつかの実施形態では、トランスポート層プロトコルのパケットチェックサムが、これらの変換を考慮するように再計算される。
【０１１０】
別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のための切替または負荷平衡機能性２８４を提供する。いくつかの実施形態では、アプライアンス２００は、トラフィックを配布し、層４またはアプリケーション層要求データに基づいてクライアント要求をサーバ１０６にダイレクトする。一実施形態では、ネットワークパケットのネットワーク層または層２が宛先サーバ１０６を識別するが、アプライアンス２００は、トランスポート層パケットのペイロードとして搬送されるアプリケーション情報およびデータによってネットワークパケットを分配するサーバ１０６を決定する。一実施形態では、アプライアンス２００の健全性監視プログラム２１６は、クライアントの要求を分配するサーバ１０６を決定するように、サーバの健全性を監視する。いくつかの実施形態では、アプライアンス２００が、サーバ１０６が利用可能ではない、または所定の閾値を上回る負荷を有することを検出する場合、アプライアンス２００は、クライアント要求を別のサーバ１０６にダイレクトまたは分配することができる。
【０１１１】
いくつかの実施形態では、アプライアンス２００は、ドメイン名サービス（ＤＮＳ）リゾルバとして作用する、または別様にクライアント１０２からのＤＮＳ要求の解決を提供する。いくつかの実施形態では、アプライアンスは、クライアント１０２によって伝送されるＤＮＳ要求を傍受する。一実施形態では、アプライアンス２００は、アプライアンス２００の、またはそれによってホストされるＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。本実施形態では、クライアント１０２は、ドメイン名のためのネットワーク通信をアプライアンス２００に伝送する。別の実施形態では、アプライアンス２００は、第２のアプライアンス２００’の、またはそれによってホストされるＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００によって決定されるサーバ１０６のＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。
【０１１２】
さらに別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のためのアプリケーションファイアウォール機能性２９０を提供する。一実施形態では、ポリシエンジン２３６は、違法な要求を検出してブロックするためのルールを提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、サービス妨害（ＤｏＳ）攻撃から保護する。他の実施形態では、アプライアンスは、アプリケーションベースの攻撃を識別してブロックする傍受された要求のコンテンツを点検する。いくつかの実施形態では、ルール／ポリシエンジン２３６は、以下、すなわち、１）バッファオーバーフロー、２）ＣＧＩ−ＢＩＮパラメータ操作、３）フォーム／非表示フィールド操作、４）強制的ブラウジング、５）クッキーまたはセッションポイズニング、６）破損したアクセス制御リスト（ＡＣＬ）または弱いパスワード、７）クロスサイトスクリプティング（ＸＳＳ）、８）コマンドインジェクション、９）ＳＱＬインジェクション、１０）エラートリガ型機密情報漏出、１１）暗号化の不安定な使用、１２）サーバ不正構成、１３）バックドアおよびデバッグオプション、１４）ウェブサイト改変、１５）プラットフォームまたはオペレーティングシステム脆弱性、および１６）ゼロデイ攻撃、のうちの１つ以上のもの等の種々のクラスおよびタイプのウェブまたはインターネットベースの脆弱性に対する保護を提供するための１つ以上のアプリケーションファイアウォールまたはセキュリティ制御ポリシを備える。ある実施形態では、アプリケーションファイアウォール２９０は、以下、すなわち、１）要求されたフィールドが返されること、２）いかなる追加フィールドも許容されないこと、３）読取専用および非表示フィールド実行、４）ドロップダウンリストおよびラジオボタンフィールド適合性、および５）フォームフィールド最大長実行、のうちの１つ以上のもののためにネットワーク通信を点検または分析する形態でＨＴＭＬフォームフィールド保護を提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、クッキーが修正されていないことを確実にする。他の実施形態では、アプリケーションファイアウォール２９０は、合法なＵＲＬを実行することによって強制的ブラウジングから保護する。
【０１１３】
なおもさらなる他の実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信に含有される任意の極秘情報を保護する。アプリケーションファイアウォール２９０は、ネットワークパケットの任意のフィールド内の任意の極秘情報を識別するように、エンジン２３６のルールまたはポリシに従って任意のネットワーク通信を点検または分析してもよい。いくつかの実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信内で、クレジットカード番号、パスワード、社会保障番号、氏名、患者コード、連絡先情報、および年齢のうちの１つ以上の発生を識別する。ネットワーク通信のエンコードされた部分は、これらの発生または極秘情報を備えてもよい。これらの発生に基づいて、一実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信の伝送を防止する等のポリシアクションをネットワーク通信上でとってもよい。別の実施形態では、アプリケーションファイアウォール２９０は、そのような識別された発生または極秘情報を書き換える、除去する、または別様に隠してもよい。
【０１１４】
依然として図２Ｂを参照すると、アプライアンス２００は、図１Ｄと併せて上記で議論されるような性能監視エージェント１９７を含んでもよい。一実施形態では、アプライアンス２００は、図１Ｄで描写されるように監視サービス１９８または監視サーバ１０６から監視エージェント１９７を受信する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００と通信する任意のクライアントまたはサーバに配信するために、ディスク等の記憶装置の中に監視エージェント１９７を記憶する。例えば、一実施形態では、アプライアンス２００は、トランスポート層接続を確立する要求を受信することに応じて、監視エージェント１９７をクライアントに伝送する。他の実施形態では、アプライアンス２００は、クライアント１０２とのトランスポート層接続を確立することに応じて、監視エージェント１９７を伝送する。別の実施形態では、アプライアンス２００は、ウェブページの要求を傍受または検出することに応じて、監視エージェント１９７をクライアントに伝送する。さらに別の実施形態では、アプライアンス２００は、監視サーバ１９８からの要求に応答して、監視エージェント１９７をクライアントまたはサーバに伝送する。一実施形態では、アプライアンス２００は、監視エージェント１９７を第２のアプライアンス２００’またはアプライアンス２０５に伝送する。
【０１１５】
他の実施形態では、アプライアンス２００は、監視エージェント１９７を実行する。一実施形態では、監視エージェント１９７は、アプライアンス２００上で実行する任意のアプリケーション、プログラム、プロセス、サービス、タスク、またはスレッドの性能を測定して監視する。例えば、監視エージェント１９７は、ｖＳｅｒｖｅｒ２７５Ａ−２７５Ｎの性能および動作を監視して測定してもよい。別の実施形態では、監視エージェント１９７は、アプライアンス２００の任意のトランスポート層接続の性能を測定して監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００をトラバースする任意のユーザセッションの性能を測定して監視する。一実施形態では、監視エージェント１９７は、ＳＳＬ  ＶＰＮセッション等のアプライアンス２００をトラバースする任意の仮想私設ネットワーク接続および／またはセッションの性能を測定して監視する。なおもさらなる実施形態では、監視エージェント１９７は、アプライアンス２００のメモリ、ＣＰＵ、およびディスク使用量および性能を測定して監視する。さらに別の実施形態では、監視エージェント１９７は、ＳＳＬオフローディング、接続プーリングおよび多重化、キャッシング、および圧縮等のアプライアンス２００によって実施される任意の加速技法２８８の性能を測定して監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００によって実施される任意の負荷平衡および／またはコンテンツ切替２８４の性能を測定して監視する。他の実施形態では、監視エージェント１９７は、アプライアンス２００によって実施されるアプリケーションファイアウォール２９０の保護および処理の性能を測定して監視する。
（Ｃ．クライアントエージェント）
【０１１６】
ここで図３を参照すると、クライアントエージェント１２０の実施形態が描写されている。クライアント１０２は、ネットワーク１０４を介してアプライアンス２００および／またはサーバ１０６との通信を確立して交換するためのクライアントエージェント１２０を含む。要するに、クライアント１０２は、カーネルモード３０２およびユーザモード３０３を伴うオペレーティングシステムと、１つ以上の層３１０ａ−３１０ｂを伴うネットワークスタック３１０とを有する、コンピューティングデバイス１００上で動作する。クライアント１０２は、１つ以上のアプリケーションをインストールしている、および／または実行してもよい。いくつかの実施形態では、１つ以上のアプリケーションは、ネットワークスタック３１０を介してネットワーク１０４に通信してもよい。ウェブブラウザ等のアプリケーションのうちの１つはまた、第１のプログラム３２２を含んでもよい。例えば、第１のプログラム３２２は、いくつかの実施形態では、クライアントエージェント１２０またはその任意の部分をインストールおよび／または実行するために使用されてもよい。クライアントエージェント１２０は、１つ以上のアプリケーションからのネットワークスタック３１０からのネットワーク通信を傍受するための傍受機構またはインターセプタ３５０を含む。
【０１１７】
クライアント１０２のネットワークスタック３１０は、ネットワークへのコネクティビティおよびネットワークとの通信を提供するための任意のタイプおよび形態のソフトウェア、またはハードウェア、またはそれらの任意の組み合わせを備えてもよい。一実施形態では、ネットワークスタック３１０は、ネットワークプロトコルスイートのためのソフトウェア実装を備える。ネットワークスタック３１０は、当業者が認識して理解するようなオープンシステム間相互接続（ＯＳＩ）通信モデルの任意のネットワーク層等の１つ以上のネットワーク層を備えてもよい。したがって、ネットワークスタック３１０は、ＯＳＩモデルの以下の層、すなわち、１）物理リンク層、２）データリンク層、３）ネットワーク層、４）トランスポート層、５）セッション層、６）プレゼンテーション層、および７）アプリケーション層のうちのいずれかのための任意のタイプおよび形態のプロトコルを備えてもよい。一実施形態では、ネットワークスタック３１０は、概して、ＴＣＰ／ＩＰと称される、インターネットプロトコル（ＩＰ）のネットワーク層プロトコルを経由したトランスポート制御プロトコル（ＴＣＰ）を備えてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰプロトコルは、ＩＥＥＥ  ８０２．３によって網羅されるプロトコル等のＩＥＥＥ広域ネットワーク（ＷＡＮ）またはローカルエリアネットワーク（ＬＡＮ）プロトコル群のうちのいずれかを備え得る、イーサネット（登録商標）プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック３１０は、ＩＥＥＥ  ８０２．１１および／またはモバイルインターネットプロトコル等の任意のタイプおよび形態の無線プロトコルを備える。
【０１１８】
ＴＣＰ／ＩＰベースのネットワークに照らして、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（電子メール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルが使用されてもよい。別の実施形態では、ネットワークスタック３１０は、修正されたトランスポート制御プロトコル、例えば、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の任意のタイプおよび形態のトランスポート制御プロトコルを備える。他の実施形態では、ＩＰを経由したＵＤＰ等の任意のタイプおよび形態のユーザデータグラムプロトコル（ＵＤＰ）が、音声通信またはリアルタイムデータ通信のため等に、ネットワークスタック３１０によって使用されてもよい。
【０１１９】
さらに、ネットワークスタック３１０は、ＴＣＰドライバまたはネットワーク層ドライバ等の１つ以上の層をサポートする、１つ以上のネットワークドライバを含んでもよい。ネットワークドライバは、コンピューティングデバイス１００のオペレーティングシステムの一部として、またはコンピューティングデバイス１００の任意のネットワークインターフェースカードまたは他のネットワークアクセスコンポーネントの一部として、含まれてもよい。いくつかの実施形態では、ネットワークスタック３１０のネットワークドライバのうちのいずれかは、本明細書に説明される技法のうちのいずれかをサポートしてネットワークスタック３１０のカスタムまたは修正部分を提供するようにカスタマイズ、修正、または適合されてもよい。他の実施形態では、加速プログラム３０２は、クライアント１０２のオペレーティングシステムによってインストールまたは別様に提供されるネットワークスタック３１０とともに、またはそれと連動して動作するように設計および構築される。
【０１２０】
ネットワークスタック３１０は、クライアント１０２のネットワーク通信に関連する任意の情報およびデータを受信する、取得する、提供する、または別様にそれにアクセスするための任意のタイプおよび形態のインターフェースを備える。一実施形態では、ネットワークスタック３１０へのインターフェースは、アプリケーションプログラミングインターフェース（ＡＰＩ）を備える。インターフェースはまた、任意の機能コール、フッキングまたはフィルタリング機構、イベントまたはコールバック機構、または任意のタイプのインターフェーシング技法を備えてもよい。インターフェースを介したネットワークスタック３１０は、ネットワークスタック３１０の機能性または動作に関連するオブジェクト等の任意のタイプおよび形態のデータ構造を受信または提供してもよい。例えば、データ構造は、ネットワークパケットまたは１つ以上のネットワークパケットに関連する情報およびデータを備えてもよい。いくつかの実施形態では、データ構造は、トランスポート層のネットワークパケット等のネットワークスタック３１０のプロトコル層において処理されるネットワークパケットの一部を備える。いくつかの実施形態では、データ構造３２５が、カーネルレベルデータ構造を備える一方で、他の実施形態では、データ構造３２５は、ユーザモードデータ構造を備える。カーネルレベルデータ構造は、取得される、またはカーネルモード３０２で動作するネットワークスタック３１０の一部に関連するデータ構造、またはカーネルモード３０２で起動するネットワークドライバまたは他のソフトウェア、またはオペレーティングシステムのカーネルモードで起動または動作するサービス、プロセス、タスク、スレッド、または他の実行可能命令によって取得または受信される任意のデータ構造を備えてもよい。
【０１２１】
加えて、ネットワークスタック３１０のいくつかの部分、例えば、データリンクまたはネットワーク層が、カーネルモード３０２で実行または動作してもよい一方で、ネットワークスタック３１０のアプリケーション層等の他の部分は、ユーザモード３０３で実行または動作する。例えば、ネットワークスタックの第１の部分３１０ａが、アプリケーションへのネットワークスタック３１０へのユーザモードアクセスを提供してもよい一方で、ネットワークスタック３１０の第２の部分３１０ａは、ネットワークへのアクセスを提供する。いくつかの実施形態では、ネットワークスタックの第１の部分３１０ａは、層５−７のうちのいずれか等のネットワークスタック３１０の１つ以上の上層を備えてもよい。他の実施形態では、ネットワークスタック３１０の第２の部分３１０ｂは、層１−４のうちのいずれか等の１つ以上の下層を備える。ネットワークスタック３１０の第１の部分３１０ａおよび第２の部分３１０ｂはそれぞれ、ユーザモード２０３、カーネルモード２０２、またはその組み合わせで、任意の１つ以上のネットワーク層において、またはネットワーク層またはネットワーク層へのインターフェース点の任意の部分、またはユーザモード２０３およびカーネルモード２０２の任意の部分またはそこへのインターフェース点において、ネットワークスタック３１０の任意の部分を備えてもよい。
【０１２２】
インターセプタ３５０は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。一実施形態では、インターセプタ３５０は、ネットワークスタック３１０内の任意の点においてネットワーク通信を傍受し、インターセプタ３５０またはクライアントエージェント１２０によって所望、管理、または制御される宛先にネットワーク通信をリダイレクトまたは伝送する。例えば、インターセプタ３５０は、第１のネットワークのネットワークスタック３１０のネットワーク通信を傍受し、第２のネットワーク１０４上で伝送するためにネットワーク通信をアプライアンス２００に伝送してもよい。いくつかの実施形態では、インターセプタ３５０は、ネットワークスタック３１０とインターフェースをとって連動するように構築および設計されるネットワークドライバ等のドライバを備える、任意のタイプのインターセプタ３５０を備える。いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、トランスポート層において等、ネットワークスタック３１０の１つ以上の層において動作する。一実施形態では、インターセプタ３５０は、フィルタドライバ、フッキング機構、またはトランスポートドライバインターフェース（ＴＤＩ）を介して等、ネットワークスタックのトランスポート層とインターフェースをとる任意の形態およびタイプの好適なネットワークドライバインターフェースを備える。いくつかの実施形態では、インターセプタ３５０は、トランスポート層等の第１のプロトコル層、およびトランスポートプロトコル層の上方の任意の層、例えば、アプリケーションプロトコル層等の別のプロトコル層とインターフェースをとる。一実施形態では、インターセプタ３５０は、ネットワークドライバインターフェース仕様（ＮＤＩＳ）またはＮＤＩＳドライバに準拠するドライバを備えてもよい。別の実施形態では、インターセプタ３５０は、ミニフィルタまたはミニポートドライバを備えてもよい。一実施形態では、インターセプタ３５０またはその一部は、カーネルモード２０２で動作する。別の実施形態では、インターセプタ３５０またはその一部は、ユーザモード２０３で動作する。いくつかの実施形態では、インターセプタ３５０の一部が、カーネルモード２０２で動作する一方で、インターセプタ３５０の別の部分は、ユーザモード２０３で動作する。他の実施形態では、クライアントエージェント１２０は、ユーザモード２０３で動作するが、カーネルレベルデータ構造２２５を取得するため等に、インターセプタ３５０を介して、カーネルモードドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの一部とインターフェースをとる。さらなる実施形態では、インターセプタ３５０は、アプリケーション等のユーザモードアプリケーションまたはプログラムである。
【０１２３】
一実施形態では、インターセプタ３５０は、任意のトランスポート層接続要求を傍受する。これらの実施形態では、インターセプタ３５０は、場所のための所望の場所への宛先ＩＰアドレスおよび／またはポート等の宛先情報を設定するように、トランスポート層アプリケーションプログラミングインターフェース（ＡＰＩ）コールを実行する。このようにして、インターセプタ３５０は、インターセプタ３５０またはクライアントエージェント１２０によって制御または管理されるＩＰアドレスおよびポートへのトランスポート層接続を傍受してリダイレクトする。一実施形態では、インターセプタ３５０は、クライアントエージェント１２０がリッスンしているクライアント１０２のローカルＩＰアドレスおよびポートへの接続のための宛先情報を設定する。例えば、クライアントエージェント１２０は、リダイレクトされたトランスポート層通信のためのローカルＩＰアドレスおよびポート上でリッスンするプロキシサービスを備えてもよい。いくつかの実施形態では、クライアントエージェント１２０は、次いで、リダイレクトされたトランスポート層通信をアプライアンス２００に通信する。
【０１２４】
いくつかの実施形態では、インターセプタ３５０は、ドメイン名サービス（ＤＮＳ）要求を傍受する。一実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、ＤＮＳ要求を解決する。別の実施形態では、インターセプタは、ＤＮＳ解決のために傍受されたＤＮＳ要求をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００は、ＤＮＳ要求を解決し、ＤＮＳ応答をクライアントエージェント１２０に通信する。いくつかの実施形態では、アプライアンス２００は、別のアプライアンス２００’またはＤＮＳサーバ１０６を介してＤＮＳ要求を解決する。
【０１２５】
さらに別の実施形態では、クライアントエージェント１２０は、２つのエージェント１２０および１２０’を備えてもよい。一実施形態では、第１のエージェント１２０は、ネットワークスタック３１０のネットワーク層において動作するインターセプタ３５０を備えてもよい。いくつかの実施形態では、第１のエージェント１２０は、インターネット制御メッセージプロトコル（ＩＣＭＰ）要求（例えば、ｐｉｎｇおよびトレースルート）等のネットワーク層要求を傍受する。他の実施形態では、第２のエージェント１２０’は、トランスポート層において動作し、トランスポート層通信を傍受してもよい。いくつかの実施形態では、第１のエージェント１２０は、ネットワークスタック２１０の１つの層において通信を傍受し、傍受された通信とインターフェースをとる、またはそれを第２のエージェント１２０’に通信する。
【０１２６】
クライアントエージェント１２０および／またはインターセプタ３５０は、ネットワークスタック３１０の任意の他のプロトコル層に対して透過的な様式で、プロトコル層において動作してもよい、またはそれとインターフェースをとってもよい。例えば、一実施形態では、インターセプタ３５０は、ネットワーク層等のトランスポート層の下方の任意のプロトコル層、およびセッション、プレゼンテーション、またはアプリケーション層プロトコル等のトランスポート層の上方の任意のプロトコル層に対して透過的に、ネットワークスタック３１０のトランスポート層とともに動作する、またはそれとインターフェースをとる。これは、所望に応じて、かつインターセプタ３５０を使用するための修正を伴わずに、ネットワークスタック３１０の他のプロトコル層が動作することを可能にする。したがって、クライアントエージェント１２０および／またはインターセプタ３５０は、ＴＣＰ／ＩＰを経由した任意のアプリケーション層プロトコル等のトランスポート層によって搬送される任意のプロトコルを介して提供される、任意の通信をセキュアにする、最適化する、加速する、ルーティングする、または負荷平衡するように、トランスポート層とインターフェースをとることができる。
【０１２７】
さらに、クライアントエージェント１２０および／またはインターセプタは、任意のアプリケーション、クライアント１０２のユーザ、およびクライアント１０２と通信するサーバ等の任意の他のコンピューティングデバイスに対して透過的な様式で、ネットワークスタック３１０において動作してもよい、またはそれとインターフェースをとってもよい。クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーションの修正を伴わない様式で、クライアント１０２上にインストールおよび／または実行されてもよい。いくつかの実施形態では、クライアント１０２のユーザまたはクライアント１０２と通信するコンピューティングデバイスは、クライアントエージェント１２０および／またはインターセプタ３５０の存在、実行、または動作を認識していない。したがって、いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーション、クライアント１０２のユーザ、サーバ等の別のコンピューティングデバイス、またはインターセプタ３５０によってインターフェースがとられるプロトコル層の上方および／または下方のプロトコル層のうちのいずれかに対して透過的に、インストールされ、実行され、および／または動作される。
【０１２８】
クライアントエージェント１２０は、加速プログラム３０２、ストリーミングクライアント３０６、収集エージェント３０４、および／または監視エージェント１９７を含む。一実施形態では、クライアントエージェント１２０は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発された独立コンピューティングアーキテクチャ（ＩＣＡ）クライアントまたはその一部を備え、これは、ＩＣＡクライアントとも称される。いくつかの実施形態では、クライアント１２０は、サーバ１０６からクライアント１０２にアプリケーションをストリーミングするためのアプリケーションストリーミングクライアント３０６を備える。いくつかの実施形態では、クライアントエージェント１２０は、クライアント１０２とサーバ１０６との間の通信を加速するための加速プログラム３０２を備える。別の実施形態では、クライアントエージェント１２０は、エンドポイント検出を実施する／アプライアンス２００および／またはサーバ１０６のためのエンドポイント情報を走査して収集するための収集エージェント３０４を含む。
【０１２９】
いくつかの実施形態では、加速プログラム３０２は、クライアントのサーバ１０６との通信および／またはサーバ１０６によって提供されるアプリケーションにアクセスすること等のサーバ１０６へのアクセスを加速、強化、または別様に改良するように、１つ以上の加速技法を実施するためのクライアント側加速プログラムを備える。加速プログラム３０２の実行可能命令の論理、機能、および／または動作は、以下の加速技法、すなわち、１）マルチプロトコル圧縮、２）トランスポート制御プロトコルプーリング、３）トランスポート制御プロトコル多重化、４）トランスポート制御プロトコルバッファリング、および５）キャッシュマネージャを介したキャッシング、のうちの１つ以上のものを実施してもよい。加えて、加速プログラム３０２は、クライアント１０２によって受信および／または伝送される任意の通信の暗号化および／または暗号解読を実施してもよい。いくつかの実施形態では、加速プログラム３０２は、統合された様式または方式で加速技法のうちの１つ以上のものを実施する。加えて、加速プログラム３０２は、トランスポート層プロトコルのネットワークパケットのペイロードとして搬送される、プロトコルのうちのいずれかまたは複数のプロトコルに圧縮を実施することができる。
【０１３０】
ストリーミングクライアント３０６は、サーバ１０６からストリーミングされたアプリケーションを受信して実行するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。サーバ１０６は、クライアント１０２上で実行されるようにアプリケーションを再生する、実行する、または別様に実行させるように、１つ以上のアプリケーションデータファイルをストリーミングクライアント３０６にストリーミングしてもよい。いくつかの実施形態では、サーバ１０６は、圧縮またはパッケージ化されたアプリケーションデータファイルのセットをストリーミングクライアント３０６に伝送する。いくつかの実施形態では、複数のアプリケーションファイルは、圧縮され、ＣＡＢ、ＺＩＰ、ＳＩＴ、ＴＡＲ、ＪＡＲ、または他のアーカイブ等のアーカイブファイル内でファイルサーバ上に記憶される。一実施形態では、サーバ１０６は、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化し、ファイルをクライアント１０２に伝送する。別の実施形態では、クライアント１０２が、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化する。ストリーミングクライアント３０６は、アプリケーションまたはその一部を動的にインストールし、アプリケーションを実行する。一実施形態では、ストリーミングクライアント３０６は、実行可能プログラムであってもよい。いくつかの実施形態では、ストリーミングクライアント３０６は、別の実行可能プログラムを起動することが可能であり得る。
【０１３１】
収集エージェント３０４は、クライアント１０２についての情報を識別、取得、および／または収集するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。いくつかの実施形態では、アプライアンス２００は、収集エージェント３０４をクライアント１０２またはクライアントエージェント１２０に伝送する。収集エージェント３０４は、アプライアンスのポリシエンジン２３６の１つ以上のポリシに従って構成されてもよい。他の実施形態では、収集エージェント３０４は、クライアント１０２についての収集された情報をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００のポリシエンジン２３６は、ネットワーク１０４へのクライアントの接続のアクセス、認証、および承認制御を決定して提供するために、収集された情報を使用する。
【０１３２】
一実施形態では、収集エージェント３０４は、クライアントの１つ以上の属性または特性を識別して決定する、エンドポイント検出および走査機構を備える。例えば、収集エージェント３０４は、以下のクライアント側属性、すなわち、１）オペレーティングシステムおよび／またはオペレーティングシステムのバージョン、２）オペレーティングシステムのサービスパック、３）起動しているサービス、４）起動しているプロセス、および５）ファイル、のうちのいずれか１つ以上のものを識別して決定してもよい。収集エージェント３０４はまた、クライアント上で以下、すなわち、１）ウイルス対策ソフトウェア、２）パーソナルファイアウォールソフトウェア、３）スパム対策ソフトウェア、および４）インターネットセキュリティソフトウェア、のうちのいずれか１つ以上のものの存在またはバージョンを識別して決定してもよい。ポリシエンジン２３６は、クライアントの属性または特性またはクライアント側属性のうちのいずれか１つ以上のものに基づく、１つ以上のポリシを有してもよい。
【０１３３】
いくつかの実施形態では、クライアントエージェント１２０は、図１Ｄおよび２Ｂと併せて議論されるような監視エージェント１９７を含む。監視エージェント１９７は、Ｖｉｓｕａｌ  ＢａｓｉｃまたはＪａｖａ（登録商標）ｓｃｒｉｐｔ等の任意のタイプおよび形態のスクリプトであってもよい。一実施形態では、監視エージェント１９７は、クライアントエージェント１２０の任意の部分の性能を監視して測定する。例えば、いくつかの実施形態では、監視エージェント１９７は、加速プログラム３０２の性能を監視して測定する。別の実施形態では、監視エージェント１９７は、ストリーミングクライアント３０６の性能を監視して測定する。他の実施形態では、監視エージェント１９７は、収集エージェント３０４の性能を監視して測定する。なおも別の実施形態では、監視エージェント１９７は、インターセプタ３５０の性能を監視して測定する。いくつかの実施形態では、監視エージェント１９７は、メモリ、ＣＰＵ、およびディスク等のクライアント１０２の任意のリソースを監視して測定する。
【０１３４】
監視エージェント１９７は、クライアントの任意のアプリケーションの性能を監視して測定してもよい。一実施形態では、監視エージェント１９７は、クライアント１０２上のブラウザの性能を監視して測定する。いくつかの実施形態では、監視エージェント１９７は、クライアントエージェント１２０を介して配信される任意のアプリケーションの性能を監視して測定する。他の実施形態では、監視エージェント１９７は、ウェブベースまたはＨＴＴＰ応答時間等のアプリケーションのエンドユーザ応答時間を測定して監視する。監視エージェント１９７は、ＩＣＡまたはＲＤＰクライアントの性能を監視して測定してもよい。別の実施形態では、監視エージェント１９７は、ユーザセッションまたはアプリケーションセッションのメトリックを測定して監視する。いくつかの実施形態では、監視エージェント１９７は、ＩＣＡまたはＲＤＰセッションを測定して監視する。一実施形態では、監視エージェント１９７は、クライアント１０２へのアプリケーションおよび／またはデータの配信を加速する際のアプライアンス２００の性能を測定して監視する。
【０１３５】
いくつかの実施形態では、依然として図３を参照すると、第１のプログラム３２２が、自動的に、無音で、透過的に、または別様に、クライアントエージェント１２０またはインターセプタ３５０等のその一部をインストールおよび／または実行するために使用されてもよい。一実施形態では、第１のプログラム３２２は、アプリケーションにロードされ、それによって実行される、ＡｃｔｉｖｅＸ制御またはＪａｖａ（登録商標）制御またはスクリプト等のプラグインコンポーネントを備える。例えば、第１のプログラムは、アプリケーションのメモリ空間またはコンテキスト内等でウェブブラウザアプリケーションによってロードされて起動される、ＡｃｔｉｖｅＸ制御を備える。別の実施形態では、第１のプログラム３２２は、ブラウザ等のアプリケーションにロードされ、それによって起動される、実行可能命令のセットを備える。一実施形態では、第１のプログラム３２２は、クライアントエージェント１２０をインストールするように設計および構築されたプログラムを備える。いくつかの実施形態では、第１のプログラム３２２は、別のコンピューティングデバイスからネットワークを介してクライアントエージェント１２０を取得、ダウンロード、または受信する。別の実施形態では、第１のプログラム３２２は、クライアント１０２のオペレーティングシステム上にネットワークドライバ等のプログラムをインストールするためのインストーラプログラムまたはプラグアンドプレイマネージャである。
（Ｄ．仮想化されたアプリケーション配信コントローラを提供するためのシステムおよび方法）
【０１３６】
ここで図４Ａを参照すると、ブロック図が、仮想化環境４００の一実施形態を描写する。要するに、コンピューティングデバイス１００は、ハイパーバイザ層と、仮想化層と、ハードウェア層とを含む。ハイパーバイザ層は、仮想化層内で実行する少なくとも１つの仮想マシンによる、ハードウェア層内のいくつかの物理リソース（例えば、プロセッサ４２１およびディスク４２８）へのアクセスを配分して管理する、ハイパーバイザ４０１（仮想化マネージャとも称される）を含む。仮想化層は、少なくとも１つのオペレーティングシステム４１０と、少なくとも１つのオペレーティングシステム４１０に配分される複数の仮想リソースとを含む。仮想リソースは、限定ではないが、複数の仮想プロセッサ４３２ａ、４３２ｂ、４３２ｃ（概して４３２）、および仮想ディスク４４２ａ、４４２ｂ、４４２ｃ（概して４４２）、および仮想メモリおよび仮想ネットワークインターフェース等の仮想リソースを含んでもよい。複数の仮想リソースおよびオペレーティングシステム４１０は、仮想マシン４０６と称されてもよい。仮想マシン４０６は、ハイパーバイザ４０１と通信し、コンピューティングデバイス１００上で他の仮想マシンを管理および構成するためのアプリケーションを実行するために使用される、制御オペレーティングシステム４０５を含んでもよい。
【０１３７】
さらに詳細には、ハイパーバイザ４０１は、物理デバイスへのアクセスを有するオペレーティングシステムをシミュレートする任意の様式で、仮想リソースをオペレーティングシステムに提供してもよい。ハイパーバイザ４０１は、仮想リソースを任意の数のゲストオペレーティングシステム４１０ａ、４１０ｂ（概して、４１０）に提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つ以上のタイプのハイパーバイザを実行する。これらの実施形態では、ハイパーバイザは、仮想ハードウェアをエミュレートし、物理ハードウェアをパーティション化し、物理ハードウェアを仮想化し、コンピューティング環境へのアクセスを提供する仮想マシンを実行するために使用されてもよい。ハイパーバイザは、ＶＭＷａｒｅ，  Ｉｎｃ．（Ｐａｌｏ  Ａｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、その開発がオープンソースＸｅｎ．ｏｒｇコミュニティによって監督されるオープンソース製品である、ＸＥＮハイパーバイザ、Ｍｉｃｒｏｓｏｆｔによって提供されるＨｙｐｅｒＶ、ＶｉｒｔｕａｌＳｅｒｖｅｒ、または仮想ＰＣハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行し得る、仮想マシンプラットフォームを作成する、ハイパーバイザを実行するコンピューティングデバイス１００は、ホストサーバと称される。これらの実施形態のうちの１つでは、例えば、コンピューティングデバイス１００は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  ＦＬ）によって提供されるＸＥＮ  ＳＥＲＶＥＲである。
【０１３８】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス上で実行する、オペレーティングシステム内で実行する。これらの実施形態のうちの１つでは、オペレーティングシステムおよびハイパーバイザ４０１上で実行するコンピューティングデバイスは、ホストオペレーティングシステム（コンピューティングデバイス上で実行するオペレーティングシステム）と、ゲストオペレーティングシステム（ハイパーバイザ４０１によって提供されるコンピューティングリソースパーティション内で実行するオペレーティングシステム）とを有すると言える。他の実施形態では、ハイパーバイザ４０１は、ホストオペレーティングシステム上で実行する代わりに、コンピューティングデバイス上でハードウェアと直接相互作用する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、コンピューティングデバイスを備えるハードウェアを指す、「ベアメタル」上で実行していると言える。
【０１３９】
いくつかの実施形態では、ハイパーバイザ４０１は、オペレーティングシステム４１０が実行する、仮想マシン４０６ａ−ｃ（概して４０６）を作成してもよい。これらの実施形態のうちの１つでは、例えば、ハイパーバイザ４０１は、仮想マシン４０６を作成するように仮想マシンイメージをロードする。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、仮想マシン４０６内でオペレーティングシステム４１０を実行する。これらの実施形態のうちのなおも別のものでは、仮想マシン４０６は、オペレーティングシステム４１０を実行する。
【０１４０】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス１００上で実行する仮想マシン４０６のためのプロセッサスケジューリングおよびメモリパーティション化を制御する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、少なくとも１つの仮想マシン４０６の実行を制御する。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、コンピューティングデバイス１００によって提供される少なくとも１つのハードウェアリソースの抽象化を少なくとも１つの仮想マシン４０６に提示する。他の実施形態では、ハイパーバイザ４０１は、物理的プロセッサ能力が仮想マシン４０６に提示されるかどうかと、どのようにして提示されるかとを制御する。
【０１４１】
制御オペレーティングシステム４０５は、ゲストオペレーティングシステムを管理して構成するための少なくとも１つのアプリケーションを実行してもよい。一実施形態では、制御オペレーティングシステム４０５は、管理アプリケーションを実行してもよく、そのような管理アプリケーションは、例えば、仮想マシンを実行すること、仮想マシンの実行を終了させること、または仮想マシンに配分するための物理リソースのタイプを識別することのための機能性を含む仮想マシンの実行を管理するための機能性へのアクセスを管理者に提供するユーザインターフェースを含むアプリケーション等である。別の実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内で制御オペレーティングシステム４０５を実行する。なおも別の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の物理リソースに直接アクセスする権限を与えられている仮想マシン４０６内で実行する。いくつかの実施形態では、コンピューティングデバイス１００ａ上の制御オペレーティングシステム４０５ａは、ハイパーバイザ４０１ａとハイパーバイザ４０１ｂとの間の通信を介して、コンピューティングデバイス１００ｂ上の制御オペレーティングシステム４０５ｂとデータを交換してもよい。このようにして、１つ以上のコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス１００のうちの１つ以上のものとデータを交換してもよい。これらの実施形態のうちの１つでは、本機能性は、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。これらの実施形態のうちの別のものでは、複数のハイパーバイザは、コンピューティングデバイス１００のうちの１つの上で実行されるゲストオペレーティングシステムのうちの１つ以上のものを管理する。
【０１４２】
一実施形態では、制御オペレーティングシステム４０５は、少なくとも１つのゲストオペレーティングシステム４１０と相互作用する権限を与えられている仮想マシン４０６内で実行する。別の実施形態では、ゲストオペレーティングシステム４１０は、ディスクまたはネットワークへのアクセスを要求するために、ハイパーバイザ４０１を介して制御オペレーティングシステム４０５と通信する。なおも別の実施形態では、ゲストオペレーティングシステム４１０および制御オペレーティングシステム４０５は、例えば、ハイパーバイザ４０１によって利用可能にされる複数の共有メモリページを介して等、ハイパーバイザ４０１によって確立される通信チャネルを介して通信してもよい。  
【０１４３】
いくつかの実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００によって提供されるネットワーキングハードウェアと直接通信するためのネットワークバックエンドドライバを含む。これらの実施形態のうちの１つでは、ネットワークバックエンドドライバは、少なくとも１つのゲストオペレーティングシステム１１０からの少なくとも１つの仮想マシン要求を処理する。他の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の記憶要素と通信するためのブロックバックエンドドライバを含む。これらの実施形態のうちの１つでは、ブロックバックエンドドライバは、ゲストオペレーティングシステム４１０から受信される少なくとも１つの要求に基づいて、記憶要素からデータを読み取って書き込む。
【０１４４】
一実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を含む。別の実施形態では、ツールスタック４０４は、ハイパーバイザ４０１と相互作用すること、（例えば、第２のコンピューティングデバイス１００ｂ上の）他の制御オペレーティングシステム４０５と通信すること、またはコンピューティングデバイス１００上の仮想マシン４０６ｂ、４０６ｃを管理することのための機能性を提供する。別の実施形態では、ツールスタック４０４は、改良された管理機能性を仮想マシンファームの管理者に提供するためのカスタマイズされたアプリケーションを含む。いくつかの実施形態では、ツールスタック４０４および制御オペレーティングシステム４０５のうちの少なくとも１つは、コンピューティングデバイス１００上で起動する仮想マシン４０６を遠隔で構成して制御するためのインターフェースを提供する、管理ＡＰＩを含む。他の実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を通してハイパーバイザ４０１と通信する。
【０１４５】
一実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内でゲストオペレーティングシステム４１０を実行する。別の実施形態では、ゲストオペレーティングシステム４１０は、コンピューティング環境内のリソースへのアクセスをコンピューティングデバイス１００のユーザに提供する。なおも別の実施形態では、リソースは、プログラム、アプリケーション、文書、ファイル、複数のアプリケーション、複数のファイル、実行可能プログラムファイル、デスクトップ環境、コンピューティング環境、またはコンピューティングデバイス１００のユーザに利用可能にされる他のリソースを含む。さらに別の実施形態では、リソースは、コンピューティングデバイス１００上への従来の直接インストール、アプリケーションストリーミングのための方法を介したコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上のリソースの実行によって生成され、プレゼンテーション層プロトコルを介してコンピューティングデバイス１００に通信される、出力データのコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上で実行する仮想マシンを介したリソースの実行によって生成される、出力データのコンピューティングデバイス１００への配信、またはＵＳＢデバイス等のコンピューティングデバイス１００に接続された可撤性記憶デバイスからの実行、またはコンピューティングデバイス１００上で実行して出力データを生成する仮想マシンを介した実行を含むが、それらに限定されない、複数のアクセス方法を介して、コンピューティングデバイス１００に配信されてもよい。いくつかの実施形態では、コンピューティングデバイス１００は、リソースの実行によって生成される出力データを別のコンピューティングデバイス１００’に伝送する。
【０１４６】
一実施形態では、ゲストオペレーティングシステム４１０は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識していない完全仮想化仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＨＶＭ（ハードウェア仮想マシン）仮想マシン」と称されてもよい。別の実施形態では、完全仮想化マシンは、完全仮想化マシン内でオペレーティングシステムを実行するために、基本入出力システム（ＢＩＯＳ）をエミュレートするソフトウェアを含む。なおも別の実施形態では、完全仮想化マシンは、ハイパーバイザ４０１と通信することによって機能性を提供するドライバを含んでもよい。そのような実施形態では、ドライバは、それが仮想化された環境内で実行することを認識してもよい。別の実施形態では、ゲストオペレーティングシステム４１０は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識している、準仮想化仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＰＶ仮想マシン」と称されてもよい。別の実施形態では、準仮想化マシンは、完全仮想化マシンが含まない、付加的ドライバを含む。なおも別の実施形態では、準仮想化マシンは、上記で説明されるように、制御オペレーティングシステム４０５に含まれる、ネットワークバックエンドドライバおよびブロックバックエンドドライバを含む。
【０１４７】
ここで図４Ｂを参照すると、ブロック図が、少なくとも１つの物理ホストが仮想マシンを実行する、システム内の複数のネットワーク化されたコンピューティングデバイスの一実施形態を描写する。要するに、本システムは、管理コンポーネント４０４と、ハイパーバイザ４０１とを含む。本システムは、複数のコンピューティングデバイス１００と、複数の仮想マシン４０６と、複数のハイパーバイザ４０１と、ツールスタック４０４または管理コンポーネント４０４と様々に称される複数の管理コンポーネントと、物理リソース４２１、４２８とを含む。複数の物理マシン１００はそれぞれ、図１Ｅ−１Ｈおよび４Ａに関連して上記で説明される、コンピューティングデバイス１００として提供されてもよい。
【０１４８】
さらに詳細には、物理ディスク４２８が、コンピューティングデバイス１００によって提供され、仮想ディスク４４２の少なくとも一部を記憶する。いくつかの実施形態では、仮想ディスク４４２は、複数の物理ディスク４２８と関連付けられる。これらの実施形態のうちの１つでは、１つ以上のコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス１００のうちの１つ以上のものとデータを交換してもよく、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。いくつかの実施形態では、仮想マシン４０６が実行するコンピューティングデバイス１００は、物理ホスト１００またはホストマシン１００と称される。
【０１４９】
ハイパーバイザは、コンピューティングデバイス１００上のプロセッサ上で実行する。ハイパーバイザは、物理ディスクへのある量のアクセスを仮想ディスクに配分する。一実施形態では、ハイパーバイザ４０１は、物理ディスク上のある量の空間を配分する。別の実施形態では、ハイパーバイザ４０１は、物理ディスク上の複数のページを配分する。いくつかの実施形態では、ハイパーバイザは、仮想マシン４５０を初期化して実行するプロセスの一部として、仮想ディスク４４２をプロビジョニングする。
【０１５０】
一実施形態では、管理コンポーネント４０４ａは、プール管理コンポーネント４０４ａと称される。別の実施形態では、制御オペレーティングシステム４０５ａと称され得る管理オペレーティングシステム４０５ａは、管理コンポーネントを含む。いくつかの実施形態では、管理コンポーネントは、ツールスタックと称される。これらの実施形態のうちの１つでは、管理コンポーネントは、図４Ａに関連して上記で説明されるツールスタック４０４である。他の実施形態では、管理コンポーネント４０４は、管理者等のユーザから、プロビジョニングおよび／または実行する仮想マシン４０６の識別を受信するためのユーザインターフェースを提供する。なおも他の実施形態では、管理コンポーネント４０４は、管理者等のユーザから、１つの物理マシン１００から別の物理マシンへの仮想マシン４０６ｂの移動の要求を受信するためのユーザインターフェースを提供する。さらなる実施形態では、管理コンポーネント４０４ａは、要求された仮想マシン４０６ｄを実行するコンピューティングデバイス１００ｂを識別し、識別された仮想マシンを実行するように識別されたコンピューティングデバイス１００ｂ上のハイパーバイザ４０１ｂに命令し、そのような管理コンポーネントは、プール管理コンポーネントと称されてもよい。
【０１５１】
ここで図４Ｃを参照すると、仮想アプリケーション配信コントローラまたは仮想アプライアンス４５０の実施形態が描写されている。要するに、図２Ａおよび２Ｂに関連して上記で説明されるアプライアンス２００（例えば、アプリケーション配信コントローラ）の機能性および／または実施形態のうちのいずれかが、図４Ａおよび４Ｂに関連して上記で説明される仮想化された環境の任意の実施形態で展開されてもよい。アプライアンス２００の形態で展開されているアプリケーション配信コントローラの機能性の代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００で展開されてもよい。
【０１５２】
ここで図４Ｃを参照すると、サーバ１０６のハイパーバイザ４０１上で動作する仮想アプライアンス４５０の実施形態の略図が描写されている。図２Ａおよび２Ｂのアプライアンス２００と同様に、仮想アプライアンス４５０は、可用性、性能、オフロード、およびセキュリティのための機能性を提供してもよい。可用性に関して、仮想アプライアンスは、ネットワークの層４と７との間で負荷平衡を行ってもよく、また、知的サービス健全性監視を実施してもよい。ネットワークトラフィック加速を介した性能増加に関して、仮想アプライアンスは、キャッシングおよび圧縮を実施してもよい。任意のサーバの処理をオフロードするために、仮想アプライアンスは、接続多重化およびプーリングおよび／またはＳＳＬ処理を実施してもよい。セキュリティに関して、仮想アプライアンスは、アプライアンス２００のアプリケーションファイアウォール機能性およびＳＳＬ  ＶＰＮ機能のうちのいずれかを実施してもよい。
【０１５３】
図２Ａに関連して説明されるようなアプライアンス２００のモジュールのうちのいずれかは、既製のサーバ等の任意のサーバ上の仮想化された環境３００または仮想化されていない環境で実行可能な１つ以上のソフトウェアモジュールまたはコンポーネントとして展開可能である、仮想化されたアプライアンス配信コントローラ４５０の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。例えば、仮想アプライアンスは、コンピューティングデバイス上にインストールするインストールパッケージの形態で提供されてもよい。図２Ａを参照すると、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮２３８、暗号化エンジン２３４、パケットエンジン２４０、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、および健全性監視プログラム２１６のうちのいずれかは、コンピューティングデバイスおよび／または仮想化された環境３００の任意のオペレーティングシステム上で起動するソフトウェアコンポーネントまたはモジュールとして、設計および構築されてもよい。アプライアンス２００の暗号化プロセッサ２６０、プロセッサ２６２、メモリ２６４、およびネットワークスタック２６７を使用する代わりに、仮想化されたアプライアンス４００は、仮想化された環境４００によって提供されるような、または別様にサーバ１０６上で利用可能であるような、これらのリソースのうちのいずれかを使用してもよい。
【０１５４】
依然として図４Ｃを参照すると、要するに、いずれか１つ以上のｖＳｅｒｖｅｒ２７５Ａ−２７５Ｎが、任意のサーバ１０６等の任意のタイプのコンピューティングデバイス１００の仮想化された環境４００で動作または実行されてもよい。図２Ｂに関連して説明されるアプライアンス２００のモジュールまたは機能性のうちのいずれかは、サーバの仮想化された、または仮想化されていない環境のいずれかで動作するように設計および構築されてもよい。ｖＳｅｒｖｅｒ２７５、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、加速２８８、Ａｐｐ  ＦＷ２９０、および監視エージェントのうちのいずれかは、デバイスおよび／または仮想化された環境４００上で実行可能な１つ以上のソフトウェアモジュールまたはコンポーネントとして展開可能である、アプリケーション配信コントローラ４５０の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。
【０１５５】
いくつかの実施形態では、サーバは、各仮想マシンが仮想アプリケーション配信コントローラ４５０の同一または異なる実施形態を起動する、仮想化環境で複数の仮想マシン４０６ａ−４０６ｎを実行してもよい。いくつかの実施形態では、サーバは、マルチコア処理システムのコア上の１つ以上の仮想マシン上で１つ以上の仮想アプライアンス４５０を実行してもよい。いくつかの実施形態では、サーバは、多重プロセッサデバイスの各プロセッサ上の１つ以上の仮想マシン上で１つ以上の仮想アプライアンス４５０を実行してもよい。
（Ｅ．マルチコアアーキテクチャを提供するためのシステムおよび方法）
【０１５６】
ムーアの法則によると、集積回路上に置かれ得るトランジスタの数は、約２年毎に倍になり得る。しかしながら、ＣＰＵ速度増加は、停滞状態に達し得、例えば、ＣＰＵ速度は、２００５年以降、約３．５〜４ＧＨｚ範囲になっている。ある場合には、ＣＰＵ製造業者は、付加的性能を獲得するためにＣＰＵ速度増加に依拠しない場合がある。一部のＣＰＵ製造業者は、付加的性能を提供するように、付加的コアをそれらのプロセッサに追加し得る。性能獲得のためにＣＰＵに依拠する、ソフトウェアおよびネットワーキングベンダのもの等の製品は、これらのマルチコアＣＰＵを活用することによって、それらの性能を改良し得る。単一のＣＰＵのために設計および構築されるソフトウェアは、マルチスレッドの並列アーキテクチャまたは別様にマルチコアアーキテクチャを利用するように、再設計され、および／または書き換えられてもよい。
【０１５７】
ｎＣｏｒｅまたはマルチコア技術と称される、アプライアンス２００のマルチコアアーキテクチャは、アプライアンスが、いくつかの実施形態では、単一コア性能障壁を突破することと、マルチコアＣＰＵの能力を活用することとを可能にする。図２Ａに関連して説明される前のアーキテクチャでは、単一のネットワークまたはパケットエンジンが起動される。ｎＣｏｒｅ技術およびアーキテクチャの複数のコアは、複数のパケットエンジンが同時に、および／または並行して起動することを可能にする。パケットエンジンが各コア上で起動すると、アプライアンスアーキテクチャは、付加的コアの処理容量を活用する。いくつかの実施形態では、これは、性能および拡張可能性の最大７倍の増加を提供する。
【０１５８】
いくつかの実施形態では、システムは、機能並列性、データ並列性、またはフローベースのデータ並列性等の並列性または並列コンピューティング方式のタイプに従って、１つ以上のプロセッサコアにわたって、作業、タスク、負荷、またはネットワークトラフィック分布を実施することができる。例えば、ｎ個のコアを伴うアプライアンス２００’等のマルチコアシステムの実施形態は、図５に示される１からＮの合計コア数を含むことができる。一実施形態では、作業、負荷、またはネットワークトラフィックは、分布がｎ個のコア５０５Ｎ（以降では集合的にコア５０５と称される）のうちの全てまたは２つ以上のものを横断するように、第１のコア５０５Ａ、第２のコア５０５Ｂ、第３のコア５０５Ｃ、第４のコア５０５Ｄ、第５のコア５０５Ｅ、第６のコア５０５Ｆ、第７のコア５０５Ｇ等の間に分配されることができる。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のＶＩＰ２７５があってもよい。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のパケットエンジン２４０があってもよい。使用されるアプローチのうちのいずれかは、コアのうちのいずれかを横断する、異なる、様々な、または類似する作業負荷または性能レベルにつながり得る。機能並列性アプローチに関して、各コアは、パケットエンジン、ＶＩＰ２７５、またはアプライアンス２００によって提供される機能性のうちの異なる機能を起動してもよい。データ並列性アプローチでは、データは、データを受信するネットワークインターフェースカード（ＮＩＣ）またはＶＩＰ２７５に基づいて、コアを横断して並列化または分配されてもよい。別のデータ並列性アプローチでは、処理は、データフローを各コアに分配することによって、コアを横断して分配されてもよい。
【０１５９】
図５に関してさらに詳細には、いくつかの実施形態では、負荷、作業、またはネットワークトラフィックが、機能並列性に従って、コア５０５の間で分配されることができる。機能並列性は、１つ以上の個別の機能を果たす各コアに基づいてもよい。いくつかの実施形態では、第１のコアが、第１の機能を果たしてもよい一方で、第２のコアは、第２の機能を果たす。機能並列性アプローチでは、マルチコアシステムによって果たされる機能は、分割され、機能性に従って各コアに分配される。いくつかの実施形態では、機能並列性は、タスク並列性と称されてもよく、各プロセッサまたはコアが同一または異なるデータに異なるプロセスまたは機能を実行するときに、達成されてもよい。コアまたはプロセッサは、同一または異なるコードを実行してもよい。ある場合には、異なる実行スレッドまたはコードは、それらが作動するにつれて相互と通信してもよい。通信は、ワークフローの一部として、１つのスレッドから次のスレッドにデータをパスするように行われてもよい。
【０１６０】
いくつかの実施形態では、機能並列性に従って、コア５０５を横断して作業を分配するステップは、ネットワーク入出力管理（ＮＷＩ／Ｏ）、セキュアソケットレイヤ（ＳＳＬ）暗号化および暗号解読、および伝送制御プロトコル（ＴＣＰ）機能等の特定の機能に従って、ネットワークトラフィックを分配するステップを含むことができる。これは、使用されている機能性の量またはレベルに基づく、作業、性能、または計算負荷につながり得る。いくつかの実施形態では、データ並列性に従って、コア５０５を横断して作業を分配するステップは、特定のハードウェアまたはソフトウェアコンポーネントと関連付けられるデータを分配することに基づいて、ある量の作業を分配するステップを含むことができる。いくつかの実施形態では、フローベースのデータ並列性に従って、コア５０５を横断して作業を分配するステップは、各コア上の作業の量が、同様である、実質的に等しい、または比較的均等に分配され得るように、コンテキストまたはフローに基づいてデータを分配するステップを含むことができる。
【０１６１】
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンまたはＶＩＰによって提供される複数の機能性のうちの１つ以上の機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を実施してもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を実施する。同様に、コア３が、ＳＳＬオフローディングを実施してもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を実施してもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、１つを上回る機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、機能別の分割は、性能または負荷の異なるレベルで起動する、異なるコアにつながり得る。
【０１６２】
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンによって提供される複数の機能性のうちの１つ以上の機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を実施してもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を実施する。同様に、コア３が、ＳＳＬオフローディングを実施してもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を実施してもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、１つを上回る機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、機能別の分割は、負荷または性能の異なるレベルで起動する、異なるコアにつながり得る。
【０１６３】
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、第１のコア、すなわち、コア１  ５０５ＡがネットワークＩ／Ｏ機能性と関連付けられる処理アプリケーションおよびプロセスを実行し得る。ネットワークＩ／Ｏと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、ＮＷ  Ｉ／Ｏと関連付けられるポート宛先を有する、発信および着信パケットは、ＮＷ  Ｉ／Ｏポートと関連付けられる全てのネットワークトラフィックをハンドリングすることに専用である、コア１  ５０５Ａに向かってダイレクトされるであろう。同様に、コア２  ５０５Ｂは、ＳＳＬ処理と関連付けられる機能性をハンドリングすることに専用であって、コア４  ５０５Ｄは、全てのＴＣＰレベル処理および機能性をハンドリングすることに専用であり得る。
【０１６４】
ネットワークＩ／Ｏ、ＳＳＬ、およびＴＣＰ等の機能を図示するが、他の機能もコアに割り当てられることができる。これらの他の機能は、本明細書に説明される機能または動作のうちのいずれか１つ以上のものを含むことができる。例えば、図２Ａおよび２Ｂと併せて説明される機能のうちのいずれかは、機能性ベースでコアを横断して分配されてもよい。ある場合には、第１のＶＩＰ２７５Ａが、第１のコア上で起動してもよい一方で、異なる構成を伴う第２のＶＩＰ２７５Ｂは、第２のコア上で起動してもよい。いくつかの実施形態では、各コア５０５が特定の機能と関連付けられる処理をハンドリングすることができるように、各コア５０５は、その特定の機能性をハンドリングすることができる。例えば、コア２  ５０５Ｂが、ＳＳＬオフローディングをハンドリングしてもよい一方で、コア４  ５０５Ｄは、アプリケーション層処理およびトラフィック管理をハンドリングしてもよい。
【０１６５】
他の実施形態では、作業、負荷、またはネットワークトラフィックが、任意のタイプおよび形態のデータ並列性に従って、コア５０５の間で分配されてもよい。いくつかの実施形態では、データ並列性は、異なる分配されたデータ上で同一のタスクまたは機能性を果たす各コアによって、マルチコアシステムにおいて達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードが、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令が、動作を制御するが、同一コードを実行してもよい。いくつかの実施形態では、データ並列性が、パケットエンジン、ｖＳｅｒｖｅｒ（ＶＩＰ）２７５Ａ−Ｃ、ネットワークインターフェースカード（ＮＩＣ）、および／またはアプライアンス２００上に含まれる、またはそれと関連付けられる任意の他のネットワーキングハードウェアまたはソフトウェアの観点から、達成される。例えば、各コアは、同一パケットエンジンまたはＶＩＰコードまたは構成を起動してもよいが、分配されたデータの異なるセット上で動作してもよい。各ネットワーキングハードウェアまたはソフトウェア構築物は、異なる、様々な、または実質的に同一の量のデータを受信することができ、結果として、様々な、異なる、または比較的同一の量の負荷を有し得る。
【０１６６】
データ並列性アプローチの場合、作業は、ＶＩＰ、ＮＩＣ、および／またはＶＩＰまたはＮＩＣのデータフローに基づいて、分割されて分配されてもよい。これらのアプローチのうちの１つでは、マルチコアシステムの作業は、データの分配されたセット上に各ＶＩＰ作業を有することによって、ＶＩＰの間で分割または分配されてもよい。例えば、各コアは、１つ以上のＶＩＰを起動するように構成されてもよい。ネットワークトラフィックは、そのトラフィックをハンドリングする各ＶＩＰのためのコアに分配されてもよい。これらのアプローチのうちの別のものでは、アプライアンスの作業は、いずれのＮＩＣがネットワークトラフィックを受信するかに基づいて、コアの間で分割または分配されてもよい。例えば、第１のＮＩＣのネットワークトラフィックが、第１のコアに分配されてもよい一方で、第２のＮＩＣのネットワークトラフィックは、第２のコアに分配されてもよい。ある場合には、コアは、複数のＮＩＣからのデータを処理してもよい。
【０１６７】
ＶＩＰ１  ２７５Ａ、ＶＩＰ２  ２７５Ｂ、およびＶＩＰ３  ２７５Ｃの場合のように、単一のコア５０５と関連付けられる単一のｖＳｅｒｖｅｒを図示する。いくつかの実施形態では、単一のｖＳｅｒｖｅｒは、１つ以上のコア５０５と関連付けられることができる。対照的に、１つ以上のｖＳｅｒｖｅｒは、単一のコア５０５と関連付けられることができる。ｖＳｅｒｖｅｒをコア５０５と関連付けるステップは、その特定のｖＳｅｒｖｅｒと関連付けられる全ての機能を処理するように、そのコア５０５を含んでもよい。いくつかの実施形態では、各コアは、同一コードおよび構成を有する、ＶＩＰを実行する。他の実施形態では、各コアは、同一コードを有するが、異なる構成を有する、ＶＩＰを実行する。いくつかの実施形態では、各コアは、異なるコードと、同一または異なる構成とを有する、ＶＩＰを実行する。
【０１６８】
ｖＳｅｒｖｅｒのように、ＮＩＣはまた、特定のコア５０５と関連付けられることもできる。多くの実施形態では、ＮＩＣがデータパケットを受信または伝送するときに、特定のコア５０５がデータパケットを受信および伝送することに関与する処理をハンドリングするように、ＮＩＣは、１つ以上のコア５０５に接続されることができる。一実施形態では、単一のＮＩＣは、ＮＩＣ１およびＮＩＣ２の場合のように、単一のコア５０５と関連付けられることができる。他の実施形態では、１つ以上のＮＩＣは、単一のコア５０５と関連付けられることができる。他の実施形態では、単一のＮＩＣは、１つ以上のコア５０５と関連付けられることができる。これらの実施形態では、負荷は、各コア５０５が実質的に類似する量の負荷を処理するように、１つ以上のコア５０５の間で分配され得る。ＮＩＣと関連付けられるコア５０５は、その特定のＮＩＣと関連付けられる全ての機能および／またはデータを処理してもよい。
【０１６９】
ＶＩＰまたはＮＩＣのデータに基づいて、コアを横断して作業を分配するステップは、独立性のレベルを有し得るが、いくつかの実施形態では、これは、コアの不平衡使用または変動する負荷につながり得る。
【０１７０】
いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、任意のタイプおよび形態のデータフローに基づいて、コア５０５の間で分配されることができる。これらのアプローチのうちの別のものでは、作業は、データフローに基づいてコアの間で分割または分配されてもよい。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス２００’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。
【０１７１】
フローベースのデータ並列性では、データの分布は、要求／応答ペアリング、トランザクション、セッション、接続、またはアプリケーション通信等の任意のタイプのデータのフローに関連する。例えば、クライアントとアプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。データフローの分布は、各コア５０５が、実質的に等しい、または比較的均等に分配された量の負荷、データ、またはネットワークトラフィックを搬送するようなものであってもよい。
【０１７２】
いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス２００’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。一実施形態では、データフローは、トランザクションまたは一連のトランザクションに基づいて、分配されることができる。本トランザクションは、いくつかの実施形態では、クライアントとサーバとの間にあることができ、ＩＰアドレスまたは他のパケット識別子によって特徴付けられることができる。例えば、コア１  ５０５Ａは、特定のクライアントと特定のサーバとの間のトランザクションに専用であることができ、したがって、コア１  ５０５Ａ上の負荷は、特定のクライアントとサーバとの間のトランザクションと関連付けられるネットワークトラフィックから成ってもよい。ネットワークトラフィックをコア１  ５０５Ａに配分することは、特定のクライアントまたはサーバのいずれかから生じる全てのデータパケットをコア１  ５０５Ａにルーティングすることによって、達成されることができる。
【０１７３】
作業または負荷は、部分的にトランザクションに基づいてコアに分配されることができるが、他の実施形態では、負荷または作業は、パケット毎ベースで配分されることができる。これらの実施形態では、アプライアンス２００は、データパケットを傍受し、それらを、最少量の負荷を有するコア５０５に配分することができる。例えば、コア１上の負荷５１５Ａが、残りのコア５０５Ｂ−Ｎ上の負荷より少ないため、アプライアンス２００は、第１の着信データパケットをコア１  ５０５Ａに配分し得る。いったん第１のデータパケットがコア１  ５０５Ａに配分されると、コア１  ５０５Ａ上の負荷５１５Ａの量は、第１のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス２００が第２のデータパケットを傍受するとき、コア４  ５０５Ｄが第２の最少量の負荷を有するため、アプライアンス２００は、負荷をコア４  ５０５Ｄに配分するであろう。最少量の負荷を伴うコアにデータパケットを配分することは、いくつかの実施形態では、各コア５０５に分配される負荷が実質的に等しいままであることを確実にすることができる。
【０１７４】
他の実施形態では、負荷は、ネットワークトラフィックのある区分が特定のコア５０５に配分される、単位毎ベースで配分されることができる。上記の実施例は、パケット毎ベースで負荷平衡を例証する。他の実施形態では、負荷は、１０、１００、または１，０００個毎のパケットが、最少量の負荷を有するコア５０５に配分されるように、パケットの数に基づいて配分されることができる。コア５０５に配分されるパケットの数は、アプリケーション、ユーザ、または管理者によって決定される数であることができ、ゼロより大きい任意の数であることができる。なおも他の実施形態では、負荷は、パケットが所定の時間量にわたって特定のコア５０５に分配されるように、時間メトリックに基づいて配分されることができる。これらの実施形態では、パケットは、５ミリ秒にわたって、またはユーザ、プログラム、システム、管理者によって、または別様に決定される、任意の時間期間にわたって、特定のコア５０５に配分されることができる。所定の時間期間が経過した後、データパケットが、所定の時間期間にわたって異なるコア５０５に伝送される。
【０１７５】
１つ以上のコア５０５の間で作業、負荷、またはネットワークトラフィックを分配するためのフローベースのデータ並列性方法は、上記の実施形態の任意の組み合わせを備えることができる。これらの方法は、アプライアンス２００の任意の部分によって、パケットエンジン等のコア５０５のうちの１つの上で実行するアプリケーションまたは実行可能命令のセットによって、またはアプライアンス２００と通信するコンピューティングデバイス上で実行する任意のアプリケーション、プログラム、またはエージェントによって、実施されることができる。
【０１７６】
機能およびデータ並列性計算方式は、機能並列性、データ並列性、フローベースのデータ並列性、またはそれらの任意の部分を包含する、ハイブリッド並列性または分散処理方式を生成するように、任意の様式で組み合わせられることができる。ある場合には、マルチコアシステムは、１つ以上のコア５０５の間で負荷を分配するために、任意のタイプおよび形態の負荷平衡方式を使用してもよい。負荷平衡方式は、機能およびデータ並列性方式のうちのいずれかまたはそれらの組み合わせとの任意の組み合わせで、使用されてもよい。
【０１７７】
マルチコアシステムの実施形態は、任意のタイプおよび形態の１つ以上のシステム、アプライアンス、デバイス、またはコンポーネントであってもよい。本システムは、いくつかの実施形態では、１つ以上の処理コア５０５Ａ−Ｎを有する、アプライアンス２００内に含まれることができる。システムはさらに、メモリバスと通信する、１つ以上のパケットエンジン（ＰＥ）またはパケット処理エンジン（ＰＰＥ）を含むことができる。メモリバスは、１つ以上の処理コア５０５Ａ−Ｎと通信するために使用されてもよい。また、システム内には、１つ以上のネットワークインターフェースカード（ＮＩＣ）と、１つ以上の処理コア５０５Ａ−Ｎとさらに通信し得るフローディストリビュータとが含まれることができる。フローディストリビュータは、受信側スケーラ（ＲＳＳ）または受信側スケーリング（ＲＳＳ）モジュールを備えることができる。
【０１７８】
一実施形態では、パケットエンジンは、図２Ａおよび２Ｂに説明されるアプライアンスの任意の部分等の本明細書に説明されるアプライアンス２００の任意の部分を備えることができる。パケットエンジンは、いくつかの実施形態では、以下の要素、すなわち、パケットエンジン２４０、ネットワークスタック２６７、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮エンジン２３８、暗号化エンジン２３４、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、監視プログラム２１６、およびメモリバスまたは１つ以上のコア５０５Ａ−Ｎのいずれかの１つからデータパケットを受信することが可能な任意の他のソフトウェアまたはハードウェア要素のうちのいずれかを備えることができる。いくつかの実施形態では、パケットエンジンは、１つ以上のｖＳｅｒｖｅｒ２７５Ａ−Ｎまたはその任意の部分を備えることができる。他の実施形態では、パケットエンジンは、以下の機能性、すなわち、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、パケット加速２８８、Ａｐｐ  ＦＷ２９０、監視エージェント１９７によって提供される監視等の監視、ＴＣＰスタックとして機能することと関連付けられる機能性、負荷平衡、ＳＳＬオフローディングおよび処理、コンテンツ切替、ポリシ評価、キャッシング、圧縮、エンコード、解凍、デコード、アプリケーションファイアウォール機能性、ＸＭＬ処理および加速、およびＳＳＬ  ＶＰＮコネクティビティの任意の組み合わせを提供することができる。
【０１７９】
パケットエンジンは、いくつかの実施形態では、特定のサーバ、ユーザ、クライアント、またはネットワークと関連付けられることができる。パケットエンジンが特定のエンティティと関連付けられるとき、そのパケットエンジンは、そのエンティティと関連付けられるデータパケットを処理することができる。例えば、パケットエンジンが第１のユーザと関連付けられる場合、そのパケットエンジンは、第１のユーザによって生成されるパケット、または第１のユーザと関連付けられる宛先アドレスを有するパケットを処理し、それに作用するであろう。同様に、パケットエンジンは、パケットエンジンが、特定のエンティティによって生成されていない、またはそのエンティティに向けられていない任意のデータパケットを処理し、別様にそれに作用することができるように、そのエンティティと関連付けられないことを選定してもよい。  
【０１８０】
ある事例では、パケットエンジンは、機能および／またはデータ並列性方式のうちのいずれかを実施するように構成されることができる。これらの事例では、パケットエンジンは、分布が並列性または分布方式に従うように、処理コア５０５Ａ−Ｎの間で機能またはデータを分配することができる。いくつかの実施形態では、単一のパケットエンジンが、負荷平衡方式を実施する一方で、他の実施形態では、１つ以上のパケットエンジンが、負荷平衡方式を実施する。各コア５０５Ａ−Ｎは、一実施形態では、負荷平衡がパケットエンジンによって実施され得るように、特定のパケットエンジンと関連付けられることができる。負荷平衡は、本実施形態では、パケットエンジンが負荷を分配する場所を集合的に決定することができるように、コア５０５と関連付けられる各パケットエンジンが、コアと関連付けられる他のパケットエンジンと通信することを要求してもよい。本プロセスの一実施形態は、負荷のために各パケットエンジンから投票を受信する、アービタを含むことができる。アービタは、部分的に、エンジンの投票の時期、ある場合には、エンジンの関連付けられるコア５０５上の負荷の現在の量と関連付けられる優先順位値に基づいて、負荷を各パケットエンジンに分配することができる。
【０１８１】
コア上で起動するパケットエンジンのうちのいずれかは、ユーザモード、カーネル、またはそれらの任意の組み合わせで起動してもよい。いくつかの実施形態では、パケットエンジンは、ユーザまたはアプリケーション空間内で起動するアプリケーションまたはプログラムとして動作する。これらの実施形態では、パケットエンジンは、カーネルによって提供される任意の機能性にアクセスするために、任意のタイプおよび形態のインターフェースを使用してもよい。いくつかの実施形態では、パケットエンジンは、カーネルモードで、またはカーネルの一部として動作する。いくつかの実施形態では、パケットエンジンの第１の部分が、ユーザモードで動作する一方で、パケットエンジンの第２の部分は、カーネルモードで動作する。いくつかの実施形態では、第１のコア上の第１のパケットエンジンが、カーネルモードで実行する一方で、第２のコア上の第２のパケットエンジンは、ユーザモードで実行する。いくつかの実施形態では、パケットエンジンまたはその任意の部分は、ＮＩＣまたはその任意のドライバ上で、またはそれと連動して動作する。
【０１８２】
いくつかの実施形態では、メモリバスは、任意のタイプおよび形態のメモリまたはコンピュータバスであることができる。システムは、任意の数のメモリバスを備えることができる。一実施形態では、各パケットエンジンは、１つ以上の個々のメモリバスと関連付けられることができる。
【０１８３】
ＮＩＣは、いくつかの実施形態では、本明細書に説明されるネットワークインターフェースカードまたは機構のうちのいずれかであることができる。ＮＩＣは、任意の数のポートを有することができる。ＮＩＣは、任意のタイプおよび形態のネットワーク１０４に接続するように設計および構築されることができる。システムは、任意の数のＮＩＣを備えることができる。いくつかの実施形態では、各コア５０５Ａ−Ｎは、１つ以上の単一のＮＩＣと関連付けられることができる。したがって、各コア５０５は、特定のコア５０５専用の単一のＮＩＣと関連付けられることができる。
【０１８４】
コア５０５Ａ−Ｎは、本明細書に説明されるプロセッサのうちのいずれかを備えることができる。さらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５構成のうちのいずれかに従って構成されることができる。なおもさらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５機能性のうちのいずれかを有することができる。図５は、７つのコア５０５Ａ−Ｇを図示するが、任意の数のコア５０５が、システム内に含まれることができる。具体的には、システムは、「Ｎ」個のコアを備えることができ、「Ｎ」は、ゼロより大きい整数である。
【０１８５】
コアは、使用するためにそのコアに配分される、または割り当てられる、メモリを有する、または使用してもよい。メモリは、そのコアのプライベートまたはローカルメモリと見なされ、そのコアのみによってアクセス可能であり得る。コアは、共有される、または複数のコアに割り当てられる、メモリを有する、または使用してもよい。メモリは、１つを上回るコアによってアクセス可能である公共または共有メモリと見なされてもよい。コアは、プライベートおよび公共メモリの任意の組み合わせを使用してもよい。各コアに対する別個のアドレス空間を用いることで、あるレベルの協調が、同一アドレス空間を使用する場合から排除される。別個のアドレス空間を用いることで、コアは、他のコアとの対立について心配することなく、コアの独自のアドレス空間内で情報およびデータに作業を実施することができる。各パケットエンジンは、ＴＣＰおよび／またはＳＳＬ接続のための別個のメモリプールを有してもよい。
【０１８６】
図５に関連して上記で説明されるコア５０５の機能性および／または実施形態のうちのいずれかが、図４Ａおよび４Ｂに関連して上記で説明される仮想化された環境の任意の実施形態で展開されることができる。物理プロセッサ５０５の形態で展開されているコア５０５の機能性の代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００で展開されてもよい。他の実施形態では、アプライアンスまたは単一のデバイスの形態で展開されているコア５０５の機能性の代わりに、機能性は、任意の配列で複数のデバイスを横断して展開されてもよい。例えば、１つのデバイスは、２つ以上のコアを備えてもよく、別のデバイスは、２つ以上のコアを備えてもよい。例えば、マルチコアシステムは、コンピューティングデバイスのクラスタ、サーバファーム、またはコンピューティングデバイスのネットワークを含んでもよい。いくつかの実施形態では、コアの形態で展開されているコア５０５の機能性の代わりに、機能性は、複数の単一コアプロセッサ等の複数のプロセッサ上で展開されてもよい。
【０１８７】
一実施形態では、コア５０５は、任意のタイプおよび形態のプロセッサであってもよい。いくつかの実施形態では、コアは、本明細書に説明される任意のプロセッサまたは中央処理ユニットと実質的に同様に機能することができる。いくつかの実施形態では、コア５０５は、本明細書に説明される任意のプロセッサの任意の部分を備えてもよい。図５は、７つのコアを図示するが、任意の「Ｎ」個のコアがアプライアンス２００内に存在することができ、「Ｎ」は、１より大きい任意の整数である。いくつかの実施形態では、コア５０５は、共通アプライアンス２００内にインストールされることができる一方で、他の実施形態では、コア５０５は、相互に通信可能に接続される１つ以上のアプライアンス２００内にインストールされることができる。コア５０５は、いくつかの実施形態では、グラフィックス処理ソフトウェアを備えることができる一方で、他の実施形態では、コア５０５は、一般処理能力を提供する。コア５０５は、物理的に相互の近傍にインストールされることができ、および／または相互に通信可能に接続されることができる。コアは、物理的に任意のタイプおよび形態のバスまたはサブシステムによって接続され、および／またはコアに、コアから、および／またはコアの間でデータを転送するためにコアに通信可能に結合されてもよい。
【０１８８】
各コア５０５は、他のコアと通信するためのソフトウェアを備えることができるが、いくつかの実施形態では、コアマネージャ（図示せず）は、各コア５０５の間の通信を促進することができる。いくつかの実施形態では、カーネルは、コア管理を提供してもよい。コアは、種々のインターフェース機構を使用して、相互とインターフェースをとってもよい、または通信してもよい。いくつかの実施形態では、コア間メッセージングが、コアを接続するバスまたはサブシステムを介してメッセージまたはデータを第２のコアに送信する第１のコア等のコアの間で通信するために使用されてもよい。いくつかの実施形態では、コアは、任意のタイプおよび形態の共有メモリインターフェースを介して通信してもよい。一実施形態では、全てのコアの間で共有される１つ以上のメモリ場所があってもよい。いくつかの実施形態では、各コアは、相互のコアと共有される別個のメモリ場所を有してもよい。例えば、第１のコアは、第２のコアとの第１の共有メモリと、第３のコアとの第２の共有メモリとを有してもよい。いくつかの実施形態では、コアは、カーネルを介した機能コール等の任意のタイプのプログラミングまたはＡＰＩを介して通信してもよい。いくつかの実施形態では、オペレーティングシステムは、複数のコアデバイスを認識してサポートし、コア間通信のためのインターフェースおよびＡＰＩを提供してもよい。
【０１８９】
フローディストリビュータは、任意のタイプおよび形態のハードウェア上で実行する、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、または任意のタイプおよび形態の実行可能命令であることができる。いくつかの実施形態では、フローディストリビュータは、本明細書に説明される動作および機能のうちのいずれかを果たす回路の任意の設計および構築であることができる。いくつかの実施形態では、フローディストリビュータは、コア５０５および／またはコア上で起動するパケットエンジンまたはＶＩＰの間のデータパケットの分布を分配、転送、ルーティング、および／または管理する。フローディストリビュータは、いくつかの実施形態では、インターフェースマスタと称されることができる。一実施形態では、フローディストリビュータは、アプライアンス２００のコアまたはプロセッサ上で実行する実行可能命令のセットを備える。別の実施形態では、フローディストリビュータは、アプライアンス２００と通信するコンピューティングマシン上で実行する実行可能命令のセットを備える。いくつかの実施形態では、フローディストリビュータは、ファームウェア等のＮＩＣ上で実行する実行可能命令のセットを備える。なおも他の実施形態では、フローディストリビュータは、コアまたはプロセッサの間でデータパケットを分配するソフトウェアおよびハードウェアの任意の組み合わせを備える。一実施形態では、フローディストリビュータが、コア５０５Ａ−Ｎのうちの少なくとも１つの上で実行する一方で、他の実施形態では、各コア５０５Ａ−Ｎに割り当てられる別個のフローディストリビュータが、関連付けられるコア５０５Ａ−Ｎ上で実行する。フローディストリビュータは、コアを横断するフローの平衡をとるために、任意のタイプおよび形態の統計的または確率的アルゴリズムまたは意思決定を使用してもよい。ＮＩＣ等のアプライアンスのハードウェアまたはカーネルは、ＮＩＣおよび／またはコアを横断して順次動作をサポートするように設計および構築されてもよい。
【０１９０】
システムが１つ以上のフローディストリビュータを備える、実施形態では、各フローディストリビュータは、プロセッサ５０５またはパケットエンジンと関連付けられることができる。フローディストリビュータは、各フローディストリビュータが、システム内で実行する他のフローディストリビュータと通信することを可能にする、インターフェース機構を備えることができる。１つの事例では、１つ以上のフローディストリビュータは、相互と通信することによって、負荷の平衡をとる方法を決定することができる。本プロセスは、次いで、いずれのフローディストリビュータが負荷を受容するべきかを決定する、アービタに投票を提出するために、上記で説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第１のフローディストリビュータは、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が所定の閾値を上回ること、関連付けられるコア上の負荷が所定の閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷より少ないこと、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを転送する場所を決定するために使用されることができる任意の他の測定基準のうちのいずれかに基づいて、第１のデータパケットを関連付けられるコアに転送するかどうかを決定することができる。
【０１９１】
フローディストリビュータは、本明細書に説明されるもの等の分布、計算、または負荷平衡方式に従って、コア５０５の間でネットワークトラフィックを分配することができる。一実施形態では、フローディストリビュータは、機能並列性分布方式、データ並列性負荷分布方式、フローベースのデータ並列性分布方式、またはこれらの分布方式または複数のプロセッサの間で負荷を分配するための任意の負荷平衡方式の任意の組み合わせのうちのいずれか１つに従って、ネットワークトラフィックを分配することができる。したがって、フローディストリビュータは、データパケットを取り込み、動作負荷平衡または分布方式に従って、プロセッサを横断してそれらを分配することによって、負荷ディストリビュータとして作用することができる。一実施形態では、フローディストリビュータは、それに応じて、パケット、作業、または負荷を分配する方法を決定する１つ以上の動作、機能、または論理を備えることができる。なおも他の実施形態では、フローディストリビュータは、ソースアドレスおよびデータパケットと関連付けられる宛先アドレスを識別し、それに応じて、パケットを分配し得る、１つ以上のサブ動作、機能、または論理を備えることができる。
【０１９２】
いくつかの実施形態では、フローディストリビュータは、１つ以上のコア５０５の間でデータパケットを分配する、受信側スケーリング（ＲＳＳ）ネットワークドライバ、モジュール、または任意のタイプおよび形態の実行可能命令を備えることができる。ＲＳＳモジュールは、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、ＲＳＳモジュールは、コア５０５Ａ−Ｎを横断して、またはマルチプロセッサネットワーク内の複数のプロセッサの間でデータパケットを分配するように、フローディストリビュータと連動して作動する。ＲＳＳモジュールは、いくつかの実施形態では、ＮＩＣ内で実行することができ、他の実施形態では、コア５０５のうちのいずれか１つの上で実行することができる。
【０１９３】
いくつかの実施形態では、ＲＳＳモジュールは、ＭＩＣＲＯＳＯＦＴ受信側スケーリング（ＲＳＳ）方式を使用する。一実施形態では、ＲＳＳは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡をとられることを可能にする、Ｍｉｃｒｏｓｏｆｔ拡張可能ネットワーキングイニシアチブ技術である。ＲＳＳは、ネットワークパケットを処理するためのコアまたはプロセッサを決定するために任意のタイプおよび形態のハッシング方式を使用してもよい。
【０１９４】
ＲＳＳモジュールは、Ｔｏｅｐｌｉｔｚハッシュ関数等の任意のタイプおよび形態のハッシュ関数を適用することができる。ハッシュ関数は、ハッシュタイプまたは一連の値のうちのいずれかに適用されてもよい。ハッシュ関数は、任意のセキュリティレベルのセキュアなハッシュであってもよい、または別様に暗号論的にセキュアである。ハッシュ関数は、ハッシュキーを使用してもよい。キーのサイズは、ハッシュ関数に依存している。Ｔｏｅｐｌｉｔｚハッシュに関して、サイズは、ＩＰｖ６については４０バイト、ＩＰｖ４については１６バイトであってもよい。
【０１９５】
ハッシュ関数は、いずれか１つ以上の基準または設計目標に基づいて設計および構築されてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰｖ４、ＴＣＰ／ＩＰｖ６、ＩＰｖ４、およびＩＰｖ６ヘッダを含む、異なるハッシュ入力および異なるハッシュタイプのハッシュ結果の均等な分布を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、少数のバケット（例えば、２つまたは４つ）が存在しているときに均等に分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、多数のバケット（例えば、６４個のバケット）が存在したときにランダムに分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、ハッシュ関数は、計算またはリソース使用量のレベルに基づいて決定される。いくつかの実施形態では、ハッシュ関数は、ハードウェアでハッシュを実装することの容易性または困難に基づいて決定される。いくつかの実施形態では、ハッシュ関数は、悪意のある遠隔ホストが全てハッシュするであろうパケットを同一バケットに送信することの容易性または困難に基づいて決定される。
【０１９６】
ＲＳＳは、一連の値等の任意のタイプおよび形態の入力からハッシュを生成してもよい。本一連の値は、ネットワークパケットの任意のヘッダ、フィールド、またはペイロード、またはそれらの一部等のネットワークパケットの任意の部分を含むことができる。いくつかの実施形態では、ハッシュへの入力は、ハッシュタイプと称され、以下、すなわち、少なくとも２つのＩＰアドレスと、２つのポートとを備える、４タプル、値のいずれか４つのセットを備える４タプル、６タプル、２タプル、および／または任意の他の一連の数または値のうちのいずれか等のネットワークパケットまたはデータフローと関連付けられる情報の任意のタプルを含んでもよい。以下は、ＲＳＳによって使用され得る、ハッシュタイプの実施例である。
【０１９７】
ソースＴＣＰポート、ソースＩＰバージョン４（ＩＰｖ４）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ４アドレスの４タプル。
【０１９８】
ソースＴＣＰポート、ソースＩＰバージョン６（ＩＰｖ６）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ６アドレスの４タプル。
【０１９９】
ソースＩＰｖ４アドレスおよび宛先ＩＰｖ４アドレスの２タプル。
【０２００】
ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
【０２０１】
ＩＰｖ６拡張ヘッダを解析するためのサポートを含む、ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
【０２０２】
ハッシュ結果またはその任意の部分は、ネットワークパケットを分配するためのパケットエンジンまたはＶＩＰ等のコアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、１つ以上のハッシュビットまたはマスクが、ハッシュ結果に適用される。ハッシュビットまたはマスクは、任意の数のビットまたはバイトであってもよい。ＮＩＣは、７ビット等の任意の数のビットをサポートしてもよい。ネットワークスタックは、初期化中に使用される実際のビットの数を設定してもよい。数は、１〜７（それらの値を含む）であろう。
【０２０３】
ハッシュ結果は、バケットテーブルまたは間接テーブル等の任意のタイプおよび形態のテーブルを介して、コアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、ハッシュ結果ビットの数は、テーブルの中へインデックス化するために使用される。ハッシュマスクの範囲は、間接テーブルのサイズを効果的に定義してもよい。ハッシュ結果の任意の部分またはハッシュ結果自体が、間接テーブルをインデックス化するために使用されてもよい。テーブル内の値は、コアまたはプロセッサ識別子によって等、コアまたはプロセッサのうちのいずれかを識別してもよい。いくつかの実施形態では、マルチコアシステムのコアの全てが、テーブル内で識別される。他の実施形態では、マルチコアシステムのコアのポートが、テーブル内で識別される。間接テーブルは、任意の数のバケット、例えば、ハッシュマスクによってインデックス化され得る、２〜１２８個のバケットを備えてもよい。各バケットは、コアまたはプロセッサを識別する、一連のインデックス値を備えてもよい。いくつかの実施形態では、フローコントローラおよび／またはＲＳＳモジュールは、間接テーブルを変更することによって、ネットワークの平衡を再びとり、ネットワーク負荷の平衡を再びとってもよい。
【０２０４】
いくつかの実施形態では、マルチコアシステムは、ＲＳＳドライバまたはＲＳＳモジュールを含まない。これらの実施形態のうちのいくつかでは、ソフトウェアステアリングモジュール（図示せず）またはシステム内のＲＳＳモジュールのソフトウェア実施形態が、パケットをマルチコアシステム内のコア５０５にステアリングするように、フローディストリビュータと連動して、またはその一部として動作することができる。
【０２０５】
フローディストリビュータは、いくつかの実施形態では、アプライアンス２００の上、コア５０５のうちのいずれか１つの上、およびマルチコアシステム内に含まれるデバイスまたはコンポーネントのうちのいずれか１つの上の任意のモジュールまたはプログラム内で実行する。いくつかの実施形態では、フローディストリビュータが、第１のコア５０５Ａ上で実行することができる一方で、他の実施形態では、フローディストリビュータは、ＮＩＣ上で実行することができる。なおも他の実施形態では、フローディストリビュータのインスタンスが、マルチコアシステムに含まれる各コア５０５上で実行することができる。本実施形態では、フローディストリビュータの各インスタンスは、コア５０５を横断してパケットを往復して転送するように、フローディストリビュータの他のインスタンスと通信することができる。要求パケットへの応答が、同一のコアによって処理されない場合がある、すなわち、第１のコアが要求を処理する一方で、第２のコアが応答を処理する、状況が存在する。これらの状況では、フローディストリビュータのインスタンスは、パケットを傍受し、それを所望または正しいコア５０５に転送することができ、すなわち、フローディストリビュータインスタンスは、応答を第１のコアに転送することができる。フローディストリビュータの複数のインスタンスが、任意の数のコア５０５およびコア５０５の任意の組み合わせの上で実行することができる。
【０２０６】
フローディストリビュータは、いずれか１つ以上のルールまたはポリシに応答して動作してもよい。ルールは、ネットワークパケット、データ、またはデータフローを受信するようにコアまたはパケット処理エンジンを識別してもよい。ルールは、ソースおよび宛先ＩＰアドレスおよびソースおよび宛先ポートの４タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。ルールによって規定されるタプルに合致する、受信されたパケットに基づいて、フローディストリビュータは、パケットをコアまたはパケットエンジンに転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび／またはコア間メッセージングを介して、コアに転送される。
【０２０７】
フローディストリビュータは、マルチコアシステム内で実行することができるが、いくつかの実施形態では、フローディストリビュータは、マルチコアシステムから遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行することができる。そのような実施形態では、フローディストリビュータは、データパケットを取り込み、１つ以上のコア５０５を横断してパケットを分配するように、マルチコアシステムと通信することができる。フローディストリビュータは、一実施形態では、アプライアンス２００に向けられているデータパケットを受信し、分布方式を受信されたデータパケットに適用し、データパケットをマルチコアシステムの１つ以上のコア５０５に分配することができる。一実施形態では、フローディストリビュータは、各パケットがマルチコアシステムのサブノードに向かって標的化されるように、各パケットと関連付けられるメタデータを改変することによって、ルータが特定のコア５０５を標的化し得るように、ルータまたは他のアプライアンスに含まれることができる。そのような実施形態では、ＣＩＳＣＯのｖｎタグ機構が、適切なメタデータを用いて各パケットを改変する、またはタグ付けするために使用されることができる。
【０２０８】
図５には、１つ以上の処理コア５０５Ａ−Ｎを備える、マルチコアシステム５７５の実施形態が図示されている。要するに、コア５０５のうちの１つは、制御コア５０５Ａとして指定されることができ、かつ他のコア５０５のための制御プレーン５７０として使用されることができる。他のコアが、データプレーン内で動作する二次コアであってもよい一方で、制御コアは、制御プレーンを提供する。コア５０５Ａ−Ｎは、グローバルキャッシュ５８０を共有してもよい。制御コアが、制御プレーンを提供する一方で、マルチコアシステム内の他のコアは、データプレーンを形成または提供する。これらのコアが、ネットワークトラフィック上でデータ処理機能性を果たす一方で、制御は、マルチコアシステムの初期化、構成、および制御を提供する。
【０２０９】
さらに図５を参照すると、さらに詳細には、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のプロセッサであることができる。さらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、図５に説明されるシステム５７５内で機能することが可能な任意のプロセッサであることができる。なおもさらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のコアまたはコアのグループであることができる。制御コアは、他のコアと異なるタイプのコアまたはプロセッサであってもよい。いくつかの実施形態では、制御は、異なるパケットエンジンを動作させてもよい、または他のコアのパケットエンジンと異なって構成されるパケットエンジンを有してもよい。
【０２１０】
コアのそれぞれのメモリの任意の部分は、コアによって共有されるグローバルキャッシュに配分されてもよい、またはそれに使用されてもよい。要するに、各コアのメモリのそれぞれの所定の割合または所定の量が、グローバルキャッシュに使用されてもよい。例えば、各コアの各メモリの５０％が、共有グローバルキャッシュに専用である、または配分されてもよい。すなわち、図示される実施形態では、制御プレーンコアまたはコア１を除外する各コアの２ＧＢが、２８ＧＢ共有グローバルキャッシュを形成するために使用されてもよい。構成サービスを介する等の制御プレーンの構成は、共有グローバルキャッシュに使用されるメモリの量を決定してもよい。いくつかの実施形態では、各コアは、グローバルキャッシュによって使用するための異なる量のメモリを提供してもよい。他の実施形態では、いずれか１つのコアは、いかなるメモリも提供しない、またはグローバルキャッシュを使用しない場合がある。いくつかの実施形態では、コアのうちのいずれかはまた、グローバル共有メモリに配分されていないメモリ内にローカルキャッシュを有してもよい。コアはそれぞれ、ネットワークトラフィックの任意の部分をグローバル共有キャッシュに記憶してもよい。コアはそれぞれ、要求または応答で使用するように、任意のコンテンツのためのキャッシュをチェックしてもよい。コアのうちのいずれかは、データフロー、要求、または応答で使用するように、グローバル共有キャッシュからコンテンツを取得してもよい。
【０２１１】
グローバルキャッシュ５８０は、本明細書に説明される任意のメモリまたは記憶要素等の任意のタイプおよび形態のメモリまたは記憶要素であることができる。いくつかの実施形態では、コア５０５は、所定量のメモリ（すなわち、３２ＧＢまたはシステム５７５にふさわしい任意の他のメモリ量）へのアクセスを有してもよい。グローバルキャッシュ５８０が、その所定量のメモリから配分されることができる一方で、残りの利用可能なメモリは、コア５０５の間で配分されることができる。他の実施形態では、各コア５０５は、所定量のメモリを有することができる。グローバルキャッシュ５８０は、各コア５０５に配分されたメモリの量を備えることができる。本メモリ量は、バイトで測定されることができる、または各コア５０５に配分されたメモリの割合として測定されることができる。したがって、グローバルキャッシュ５８０は、各コア５０５と関連付けられるメモリからの１ＧＢのメモリを備えることができる、または各コア５０５と関連付けられるメモリの２０％または半分を備えることができる。いくつかの実施形態では、コア５０５の一部のみが、メモリをグローバルキャッシュ５８０に提供する一方で、他の実施形態では、グローバルキャッシュ５８０は、コア５０５に割り当てられていないメモリを備えることができる。
【０２１２】
各コア５０５は、ネットワークトラフィックまたはキャッシュデータを記憶するためにグローバルキャッシュ５８０を使用することができる。いくつかの実施形態では、コアのパケットエンジンは、複数のパケットエンジンによって記憶されるデータをキャッシュして使用するために、グローバルキャッシュを使用する。例えば、図２Ａのキャッシュマネージャおよび図２Ｂのキャッシュ機能性は、加速のためにデータを共有するようにグローバルキャッシュを使用してもよい。例えば、パケットエンジンはそれぞれ、ＨＴＭＬデータ等の応答をグローバルキャッシュに記憶してもよい。コア上で動作するキャッシュマネージャのうちのいずれかは、クライアント要求へのキャッシュ応答を供給するように、グローバルキャッシュにアクセスしてもよい。
【０２１３】
いくつかの実施形態では、コア５０５は、部分的にポートに基づいてデータフローを決定するために使用され得る、ポート配分テーブルを記憶するために、グローバルキャッシュ５８０を使用することができる。他の実施形態では、コア５０５は、着信および発信データパケットをダイレクトする場所を決定するためにフローディストリビュータによって使用され得る、アドレスルックアップテーブルまたは任意の他のテーブルまたはリストを記憶するために、グローバルキャッシュ５８０を使用することができる。コア５０５は、いくつかの実施形態では、キャッシュ５８０から読み取ること、およびそれに書き込むことができる一方で、他の実施形態では、コア５０５は、キャッシュ５８０から読み取ること、またはそれに書き込むことのみできる。コアは、コア間通信を実施するためにグローバルキャッシュを使用してもよい。
【０２１４】
グローバルキャッシュ５８０は、各区分が特定のコア５０５に専用であることができる、個々のメモリ区分に区分化されてもよい。一実施形態では、制御コア５０５Ａが、より多くの量の利用可能なメモリを受信することができる一方で、他のコア５０５は、グローバルキャッシュ５８０への様々な量またはアクセスを受信することができる。
【０２１５】
いくつかの実施形態では、システム５７５は、制御コア５０５Ａを備えることができる。図５は、制御コアとしてコア１  ５０５Ａを図示するが、制御コアは、アプライアンス２００またはマルチコアシステム内の任意のコアであることができる。さらに、単一の制御コアのみが描写されているが、システム５７５は、それぞれ、システムに対するあるレベルの制御を有する、１つ以上の制御コアを備えることができる。いくつかの実施形態では、１つ以上の制御コアはそれぞれ、システム５７５の特定の側面を制御することができる。例えば、１つのコアが、いずれの分布方式を使用するかを決定することを制御することができる一方で、別のコアは、グローバルキャッシュ５８０のサイズを決定することができる。
【０２１６】
マルチコアシステムの制御プレーンは、専用管理コアとして、またはマスタコアとしてのコアの指定および構成であってもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの動作および機能性の制御、管理、および協調を提供してもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの初期化および構成を含む、同一コアの間のシステムのメモリの配分および使用の制御、管理、および協調を提供してもよい。いくつかの実施形態では、制御プレーンは、データフローに基づいて、コアへのデータフローの割当およびコアへのネットワークパケットの分布を制御するためのフローディストリビュータを含む。いくつかの実施形態では、制御プレーンコアは、パケットエンジンを起動し、他の実施形態では、制御プレーンコアは、本システムの他のコアの管理および制御に専用である。
【０２１７】
制御コア５０５Ａは、どれだけのメモリが各コア５０５に配分されるべきかを決定するステップ、またはいずれのコア５０５が特定の機能またはハードウェア／ソフトウェアエンティティをハンドリングするように割り当てられるべきかを決定するステップ等の他のコア５０５に対するあるレベルの制御を実行することができる。制御コア５０５Ａは、いくつかの実施形態では、制御プレーン５７０内でこれらのコア５０５に対する制御を実行してもよい。したがって、制御コア５０５Ａによって制御されないプロセッサが制御プレーン５７０の外側に存在することができる。制御プレーン５７０の境界を決定するステップは、システム５７５内で実行する制御コア５０５Ａまたはエージェントによって、制御コア５０５Ａによって制御される、これらのコア５０５のリストを維持するステップを含むことができる。制御コア５０５Ａは、以下、すなわち、コアの初期化、コアが利用不可能であるときを決定するステップ、１つのコアが故障したときに負荷を他のコア５０５に再配分するステップ、いずれの分布方式を実装するかを決定するステップ、いずれのコアがネットワークトラフィックを受信するべきかを決定するステップ、どれだけのキャッシュが各コアに配分されるべきかを決定するステップ、特定の機能または要素を特定のコアに割り当てるかどうかを決定するステップ、コアが相互と通信することを可能にするかどうかを決定するステップ、グローバルキャッシュ５８０のサイズを決定するステップ、およびシステム５７５内のコアの機能、構成、または動作の任意の他の決定のうちのいずれかを制御することができる。
（Ｆ．分散クラスタアーキテクチャを提供するためのシステムおよび方法）
【０２１８】
前の節で議論されるように、トランジスタ間隔およびＣＰＵ速度増加に対する限界を克服するために、多くのＣＰＵ製造業者は、単一だがより高速のＣＰＵで可能なものを超えるよう性能を改良するように、マルチコアＣＰＵを組み込んでいる。類似する、またはさらなる性能獲得が、単一またはマルチコアのいずれかである複数のアプライアンスを、分散またはクラスタ化アプライアンスとしてともに動作させることによって、得られてもよい。個々のコンピューティングデバイスまたはアプライアンスは、クラスタのノードと称されてもよい。集中型管理システムが、ノードが単一のコンピューティングシステムとして連動することを可能にするように、負荷平衡、分布、構成、または他のタスクを実施してもよい。外部に、またはサーバおよびクライアントを含む、他のデバイスに対して、多くの実施形態では、クラスタは、典型的な個々のアプライアンスの性能を超える性能を伴うものではあるが、単一の仮想アプライアンスまたはコンピューティングデバイスと見なされてもよい。
【０２１９】
ここで図６を参照すると、コンピューティングデバイスクラスタまたはアプライアンスクラスタ６００の実施形態が図示されている。複数のアプライアンス２００ａ−２００ｎ、またはデスクトップコンピュータ、サーバ、ラックマウントサーバ、ブレードサーバ、または任意の他のタイプおよび形態のコンピューティングデバイス等のノードと称されることもある、他のコンピューティングデバイスが、単一のアプライアンスクラスタ６００に参入されてもよい。アプライアンスクラスタと称されるが、多くの実施形態では、クラスタは、限定ではないが、アプリケーションサーバ、ネットワーク記憶サーバ、バックアップサービス、または任意の他のタイプのコンピューティングデバイスとして動作してもよい。多くの実施形態では、アプライアンスクラスタ６００は、アプライアンス２００、ＷＡＮ最適化デバイス、ネットワーク加速デバイス、または上記で議論される他のデバイスの機能の多くを果たすために使用されてもよい。
【０２２０】
いくつかの実施形態では、アプライアンスクラスタ６００は、同じアプライアンス、１つ以上のシャーシ内のブレードサーバ、デスクトップまたはラックマウントコンピューティングデバイス、または他のデバイス等のコンピューティングデバイスの同種セットを備えてもよい。他の実施形態では、アプライアンスクラスタ６００は、アプライアンスの異なるモデル、混合アプライアンスおよびサーバ、またはコンピューティングデバイスの任意の他のセットを含む、デバイスの異種または混合セットを備えてもよい。これは、アプライアンスクラスタ６００が、例えば、新しいモデルまたはデバイスを用いて経時的に拡張またはアップグレードされることを可能にし得る。
【０２２１】
いくつかの実施形態では、アプライアンスクラスタ６００の各コンピューティングデバイスまたはアプライアンス２００は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分布方法は、本明細書で議論されるノード管理および分布方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、１つのアプライアンスがデータを備え、それを複数のノードに配分し、各ノードが処理のためのデータを備え、それを複数のコアに配分する、２層分散システムと考えられてもよい。故に、そのような実施形態では、ノード分布システムは、上記で議論されるようなマスタまたは制御コアによって保護され得るため、個々のコアへのフロー分布を管理する必要がない。
【０２２２】
多くの実施形態では、アプライアンスクラスタ６００は、シャーシ内の複数のブレードサーバまたは単一のラック内の複数のラックマウントデバイス等、物理的にグループ化されてもよいが、他の実施形態では、アプライアンスクラスタ６００は、複数のシャーシ、複数のラック、データセンタ内の複数の部屋、複数のデータセンタ、または任意の他の物理的配列で分配されてもよい。故に、アプライアンスクラスタ６００は、物理的グループではなく、共通構成、管理、および目的を介してグループ化される、仮想アプライアンスと見なされてもよい。
【０２２３】
いくつかの実施形態では、アプライアンスクラスタ６００は、１つ以上のネットワーク１０４、１０４’に接続されてもよい。例えば、簡潔に図１Ａを再び参照すると、いくつかの実施形態では、アプライアンス２００は、１つ以上のクライアント１０２に参入されたネットワーク１０４と１つ以上のサーバ１０６に参入されたネットワーク１０４’との間に展開されてもよい。アプライアンスクラスタ６００は、同様に、単一のアプライアンスとして動作するように展開されてもよい。多くの実施形態では、これは、アプライアンスクラスタ６００の外部の任意のネットワークトポロジ変更を要求しなくてもよく、単一のアプライアンスシナリオからのインストールおよび拡張可能性の容易性を可能にする。他の実施形態では、アプライアンスクラスタ６００は、同様に、図１Ｂ−１Ｄに示される、または上記で議論されるように展開されてもよい。なおも他の実施形態では、アプライアンスクラスタは、１つ以上のサーバによって実行される複数の仮想マシンまたはプロセスを備えてもよい。例えば、１つのそのような実施形態では、サーバファームは、複数の仮想マシンを実行してもよく、各仮想マシンは、アプライアンス２００として構成され、複数の仮想マシンは、アプライアンスクラスタ６００として一斉に作用する。さらになおも他の実施形態では、アプライアンスクラスタ６００は、アプライアンス２００またはアプライアンス２００として構成される仮想マシンの混合を備えてもよい。いくつかの実施形態では、アプライアンスクラスタ６００は、同一場所に設置されていない複数のアプライアンス２００を伴って、地理的に分配されてもよい。例えば、図６を再び参照すると、１つのそのような実施形態では、第１のアプライアンス２００ａは、データセンタ等の第１の場所に位置してもよく、第２のアプライアンス２００ｂは、中央オフィスまたは企業の本社等の第２の場所に位置してもよい。さらなる実施形態では、そのように地理的に遠隔のアプライアンスは、Ｔ１またはＴ３ポイントツーポイント接続、ＶＰＮ、または任意の他のタイプおよび形態のネットワーク等の専用ネットワークによって参入されてもよい。故に、同一場所に設置されたアプライアンス２００ａ−２００ｂと比較して、付加的通信待ち時間があり得るが、現場の停電または通信不能状態の場合の信頼性、拡張可能性、または他の利益において利点があってもよい。いくつかの実施形態では、待ち時間の問題は、データフローの地理またはネットワークベースの分布を通して低減させられ得る。例えば、アプライアンスクラスタ６００として構成されるが、企業の本社におけるクライアントおよびサーバからの通信が、現場で展開されるアプライアンス２００ｂにダイレクトされてもよい、負荷平衡が、場所によって加重されてもよい、または類似ステップが、いかなる待ち時間も軽減するようにとられることができる。
【０２２４】
依然として図６を参照すると、アプライアンスクラスタ６００は、クライアントデータプレーン６０２を介してネットワークに接続されてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、クライアントとアプライアンスクラスタ６００との間でデータを搬送する、ネットワーク１０４等の通信ネットワークを備えてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、外部ネットワーク１０４およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎに橋架する、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータが、外部ネットワーク１０４に接続され、各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。いくつかの実施形態では、本ルータまたはスイッチは、インターフェースマネージャと称されてもよく、さらに、アプリケーションクラスタ６００内のノードを横断してトラフィックを均等に分配するように構成されてもよい。したがって、多くの実施形態では、インターフェースマスタは、アプライアンスクラスタ６００の外部にフローディストリビュータを備えてもよい。他の実施形態では、インターフェースマスタは、アプライアンス２００ａ−２００ｎのうちの１つを備えてもよい。例えば、第１のアプライアンス２００ａは、アプライアンスクラスタ６００のための着信トラフィックを受信し、アプライアンス２００ｂ−２００ｎのそれぞれを横断してトラフィックを分配する、インターフェースマスタとしての役割を果たしてもよい。いくつかの実施形態では、帰還トラフィックが、同様に、インターフェースマスタとしての役割を果たす第１のアプライアンス２００ａを介して、アプライアンス２００ｂ−２００ｎのそれぞれからフローしてもよい。他の実施形態では、アプライアンス２００ｂ−２００ｎのそれぞれからの帰還トラフィックが、ネットワーク１０４、１０４’に直接、または外部ルータ、スイッチ、または他のデバイスを介して、伝送されてもよい。いくつかの実施形態では、インターフェースマスタとしての役割を果たさないアプライアンスクラスタのアプライアンス２００は、インターフェーススレーブ６１０Ａ−６１０Ｎと称されてもよい。
【０２２５】
インターフェースマスタは、種々の方法のうちのいずれかで負荷平衡またはトラフィックフロー分布を実施してもよい。例えば、いくつかの実施形態では、インターフェースマスタは、クラスタのアプライアンスまたはノードを伴って構成されるネクストホップと平等コストマルチパス（ＥＣＭＰ）ルーティングを実施する、ルータを備えてもよい。インターフェースマスタは、オープン・ショーテスト・パス・ファースト（ＯＳＰＦ）を使用してもよい。いくつかの実施形態では、インターフェースマスタは、上記で議論されるように、ＩＰアドレスまたは他のパケット情報タプルに基づくハッシュ等のトラフィック分布のためのステートレスハッシュベースの機構を使用してもよい。ハッシュキーおよび／またはソルトが、ノードを横断する均等な分布のために選択されてもよい。他の実施形態では、インターフェースマスタは、リンクアグリゲーション（ＬＡＧ）プロトコル、または任意の他のタイプおよび形態のフロー分布、負荷平衡、およびルーティングを介して、フロー分布を実施してもよい。
【０２２６】
いくつかの実施形態では、アプライアンスクラスタ６００は、サーバデータプレーン６０４を介してネットワークに接続されてもよい。クライアントデータプレーン６０２と同様に、サーバデータプレーン６０４は、サーバとアプライアンスクラスタ６００との間にデータを搬送する、ネットワーク１０４’等の通信ネットワークを備えてもよい。いくつかの実施形態では、サーバデータプレーン６０４は、外部ネットワーク１０４’およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎに橋架する、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータが、外部ネットワーク１０４’に接続され、各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。多くの実施形態では、各アプライアンス２００ａ−２００ｎは、第１のネットワークインターフェースがクライアントデータプレーン６０２に接続され、第２のネットワークインターフェースがサーバデータプレーン６０４に接続される、複数のネットワークインターフェースを備えてもよい。これは、付加的セキュリティを提供し、仲介デバイスとしてアプライアンスクラスタ６００サーバを有することによって、クライアントおよびサーバネットワークの直接インターフェースを防止し得る。他の実施形態では、クライアントデータプレーン６０２およびサーバデータプレーン６０４は、マージされる、または組み合わせられてもよい。例えば、アプライアンスクラスタ６００は、クライアント１０２およびサーバ１０６とのネットワーク上で非仲介ノードとして展開されてもよい。上記で議論されるように、多くの実施形態では、インターフェースマスタが、サーバおよびネットワーク１０４’からアプライアンスクラスタの各アプライアンスに通信をルーティングして分配するために、サーバデータプレーン６０４上に展開されてもよい。多くの実施形態では、クライアントデータプレーン６０２用のインターフェースマスタおよびサーバデータプレーン６０４用のインターフェースマスタは、同様に構成されてもよく、上記で議論されるようなＥＣＭＰまたはＬＡＧプロトコルを実施する。
【０２２７】
いくつかの実施形態では、アプライアンスクラスタ６００内の各アプライアンス２００ａ−２００ｎは、内部通信ネットワークまたはバックプレーン６０６を介して接続されてもよい。バックプレーン６０６は、ノード間またはアプライアンス間制御および構成メッセージ用、およびトラフィックのノード間転送用の通信ネットワークを備えてもよい。例えば、第１のアプライアンス２００ａがネットワーク１０４を介してクライアントと通信し、第２のアプライアンス２００ｂがネットワーク１０４’を介してサーバと通信する、一実施形態では、クライアントとサーバとの通信は、クライアントから第１のアプライアンスへ、バックプレーン６０６を介して第１のアプライアンスから第２のアプライアンスへ、および第２のアプライアンスからサーバへ、および逆も同様にフローしてもよい。他の実施形態では、バックプレーン６０６は、インターフェース一時停止またはリセットコマンド、フィルタリングまたは圧縮ポリシ等のポリシ更新、バッファステータス、スループット、またはエラーメッセージ等のステータスメッセージ、または任意の他のタイプおよび形態のノード間通信等の構成メッセージを搬送してもよい。いくつかの実施形態では、ＲＳＳキーまたはハッシュキーは、クラスタ内の全てのノードによって共有されてもよく、バックプレーン６０６を介して通信してもよい。例えば、第１のノードまたはマスタノードは、始動またはブート等のＲＳＳキーを選択してもよく、他のノードによって使用するために本キーを分配してもよい。いくつかの実施形態では、バックプレーン６０６は、各アプライアンス２００のネットワークインターフェースの間にネットワークを備えてもよく、ルータ、スイッチ、または他のネットワークデバイス（図示せず）を備えてもよい。したがって、いくつかの実施形態では、上記で議論されるように、クライアントデータプレーン６０２用のルータが、アプライアンスクラスタ６００とネットワーク１０４との間に展開されてもよく、サーバデータプレーン６０４用のルータが、アプライアンスクラスタ６００とネットワーク１０４’との間に展開されてもよく、バックプレーン６０６用のルータが、アプライアンスクラスタ６００の一部として展開されてもよい。各ルータは、各アプライアンス２００の異なるネットワークインターフェースに接続してもよい。他の実施形態では、１つ以上のプレーン６０２−６０６が、組み合わせられてもよい、またはルータまたはスイッチが、複雑性を低減させる、または本システムから余分なデバイスを排除するために、アプライアンス２００ａ−２００ｎの異なるインターフェースに接続し、同時に複数のルーティング機能を果たすように、複数のＬＡＮまたはＶＬＡＮに分割されてもよい。
【０２２８】
いくつかの実施形態では、制御プレーン（図示せず）は、管理者またはユーザからアプライアンスクラスタ６００への構成および制御トラフィックを通信してもよい。いくつかの実施形態では、制御プレーンは、第４の物理ネットワークであってもよい一方で、他の実施形態では、制御プレーンは、プレーン６０２−６０６のうちの１つを介したＶＰＮ、トンネル、または通信を備えてもよい。したがって、制御プレーンは、いくつかの実施形態では、仮想通信プレーンと見なされてもよい。他の実施形態では、管理者は、ＲＳ−２３２等のシリアル通信インターフェース、ＵＳＢ通信インターフェース、または任意の他のタイプおよび形態の通信等の別個のインターフェースを通して、構成および制御を提供してもよい。いくつかの実施形態では、アプライアンス２００は、ボタンおよびディスプレイを伴うフロントパネル、ネットワーク１０４、１０４’またはバックプレーン６０６を介した構成用のウェブサーバ、または任意の他のタイプおよび形態のインターフェース等の管理用のインターフェースを備えてもよい。
【０２２９】
いくつかの実施形態では、上記で議論されるように、アプライアンスクラスタ６００は、内部フロー分布を含んでもよい。例えば、これは、ノードが外部デバイスに透過的に参入／そこから離脱することを可能にするように行われてもよい。外部フローディストリビュータがそのような変更に応じて繰り返し再構成される必要性を防ぐために、ノードまたはアプライアンスが、ネットワークパケットをクラスタ６００内の正しいノードにステアリングするためにインターフェースマスタまたはディストリビュータとして作用してもよい。例えば、いくつかの実施形態では、（故障、リセット、または類似する場合に応じて等）ノードがクラスタから離脱するとき、外部ＥＣＭＰルータが、ノードの変更を識別してもよく、かつトラフィックを再分配するように全てのフローを再ハッシュしてもよい。これは、全ての接続をドロップしてリセットさせ得る。同一のドロップおよびリセットが、ノードが再参入するときに起こり得る。いくつかの実施形態では、信頼性のために、アプライアンスクラスタ６００内の２つのアプライアンスまたはノードが、接続ミラーリングを介して外部ルータから通信を受信してもよい。
【０２３０】
多くの実施形態では、アプライアンスクラスタ６００のノードの間のフロー分布は、アプライアンスのコアの間のフロー分布について上記で議論される方法のうちのいずれかを使用してもよい。例えば、一実施形態では、マスタアプライアンス、マスタノード、またはインターフェースマスタは、着信トラフィック上のＴｏｅｐｌｉｔｚハッシュ等のＲＳＳハッシュを計算し、ハッシュの選好リストまたは分布テーブルを参考にしてもよい。多くの実施形態では、フローディストリビュータは、トラフィックを転送するときに、ハッシュを受信側アプライアンスに提供してもよい。これは、ノードがコアへのフロー分布のためのハッシュを再計算する必要性を排除し得る。多くのそのような実施形態では、アプライアンスの間の分布のためのハッシュを計算するために使用されるＲＳＳキーは、グローバルＲＳＳキーと称され得る、コアの間の分布のためのハッシュを計算するために使用されるものと同一のキーを備えてもよく、計算されたハッシュの再利用を可能にする。いくつかの実施形態では、ハッシュは、ポート番号、ＩＰアドレスを含むインターネット層ヘッダ、または任意の他のパケットヘッダ情報を含む、トランスポート層ヘッダの入力タプルを用いて計算されてもよい。いくつかの実施形態では、パケット本体情報が、ハッシュに利用されてもよい。例えば、無損失ＴＣＰヘッダを介してカプセル化される損失性ＵＤＰトラフィック等の１つのプロトコルのトラフィックが、別のプロトコルのトラフィック内にカプセル化される、一実施形態では、フローディストリビュータは、カプセル化プロトコル（例えば、ＴＣＰヘッダ）ではなく、カプセル化されたプロトコル（例えば、ＵＤＰヘッダ）のヘッダに基づいて、ハッシュを計算してもよい。同様に、パケットがカプセル化され、暗号化または圧縮される、いくつかの実施形態では、フローディストリビュータは、暗号解読または解凍後のペイロードパケットのヘッダに基づいて、ハッシュを計算してもよい。なおも他の実施形態では、ノードは、構成または管理目的のため等に、内部ＩＰアドレスを有してもよい。これらのＩＰアドレスへのトラフィックは、ハッシュされて分配される必要はなく、むしろ、宛先アドレスを所有するノードに転送されてもよい。例えば、アプライアンスは、１．２．３．４のＩＰアドレスにおいて構成または管理目的のために起動するウェブサーバまたは他のサーバを有してもよく、いくつかの実施形態では、その内部ＩＰアドレスとして、本アドレスをフローディストリビュータに登録してもよい。他の実施形態では、フローディストリビュータは、内部ＩＰアドレスをアプライアンスクラスタ６００内の各ノードに割り当ててもよい。アプライアンスの内部ＩＰアドレス（１．２．３．４）にダイレクトされる、管理者によって使用されるワークステーション等の外部クライアントまたはサーバから着信するトラフィックは、ハッシングを要求することなく、直接転送されてもよい。
（Ｇ．サービスチェーンを負荷平衡するためのシステムおよび方法）
【０２３１】
本開示は、サービスチェーンを負荷平衡するためのシステムおよび方法を対象とする。具体的には、本ソリューションは、サービスチェーンのサービスのインスタンスに関連するメタデータを使用して、サービスチェーンを負荷平衡するためのシステムおよび方法に関する。例えば、本ソリューションのシステムおよび方法は、第１のサービスのインスタンスと、第２のサービスのインスタンスとを有する、パスをそれぞれ含む、サービスチェーンを識別し、サービスチェーンの各々に対するパス重量を決定し、負荷平衡機能およびパス重量に基づいて、サービスチェーンから１つのサービスチェーンを選択することができる。
【０２３２】
サービスチェーンは、ともにリンクまたはグループ化されるサービスのインスタンスを指すことができる。例えば、クライアントコンピューティングデバイスは、サーバに向かってネットワークを通してパケットを伝送することができる。パケットは、パケットが宛先サーバに到達することに先立って、種々の方法で処理されてもよい。例えば、ネットワークのプロバイダは、宛先サーバに転送されることができる前に、パケット（またはフロー）上で行われる具体的動作についてのポリシのセットを有してもよい。パケットのパスの中のアプライアンスは、例えば、ファイアウォールまたは侵入検出システムを含み得る、これらのポリシを実装することができる。
【０２３３】
ファイアウォールは、ネットワークアドレス変換、ディープパケットインスペクション、およびアクセス制御等のサービスのセットを提供してもよい。ファイアウォールは、これらの異なるサービスに分割または分離され、コンピューティングインフラストラクチャによって実行されることができる。例えば、コンピューティングインフラストラクチャによって実行される第１のインスタンスまたは仮想マシンは、ネットワークアドレス変換の第１のサービスを実施することができ、コンピューティングインフラストラクチャによって実行される第２のインスタンスまたは仮想マシンは、ディープパケットインスペクションの第２のサービスを実施することができ、インフラストラクチャによって実行される第３のインスタンスまたは仮想マシンは、アクセス制御の第３のサービスを実施することができる。これらの３つのサービスは、ファイアウォールを提供するように、サービスチェーンとしてともにグループ化またはリンクされることができる。
【０２３４】
例えば、サービスチェーンは、ネットワークアドレスのリスト、識別子のリスト、またはサービスチェーンのサービスのインスタンスを識別する標識のリストを含む、それに対応する、またはそれと関連付けられることができる。例えば、サービスチェーンは、マルチプロトコル標識切替（ＭＰＬＳ）技法を用いて構成されることができる。ＭＰＬＳは、パス標識に基づいて、１つのネットワークノードから次のネットワークノードにデータをダイレクトするように構成される、データ搬送技法であることができる。ＭＰＬＳ標識または他の識別子は、ノードの間の仮想リンクまたはパスを識別することができる。標識技法は、種々のネットワークプロトコルのパケットをカプセル化することができる。
【０２３５】
識別子または標識のリストを使用して、コントローラは、サービスチェーンに沿ってパケットをダイレクトすることができる。例えば、第１の標識は、ネットワークに、トラフィックをサービスチェーン内の第１のサービスへ転送させることができ、これは、次いで、その標識をポップし、一緒にパケットを転送する。第２の標識は、パケットを第２のサービスに送信させることができ、これは、次いで、第２の標識をポップし、一緒にパケットを転送する。
【０２３６】
しかしながら、サービスのインスタンスが、複数の領域、可用性ゾーン、およびそれ以上にわたって分配され得るため、パケットを複数のサービスノードに転送し、サービスのセット（例えば、ファイアウォール）を提供することは、ネットワークを通る期間を増加させ、パケットが１つ以上のデータセンターゾーンまたはパーティションを通って進行するにつれて付加的オーバーヘッドを導入し得る。例えば、ネットワークコアを一度通過するのではなく、パケットは、サービスにつき１回、ファブリックを横断し得る。これはまた、ネットワークを通した付加的待ち時間および遅延も導入し得る。
【０２３７】
そのようなマルチホップ処理展開（例えば、サービスチェイニング）では、各ホップは、負荷平衡システムであってもよい。しかしながら、全ホップレベル（サービスノードレベル）での負荷平衡は、大域的に最適なマルチホップ処理につながらない場合がある。全ホップレベルでの負荷平衡は、他のホップレベル処理から独立し得るため、最適なエンドツーエンドトラフィック処理を提供しない場合がある。例えば、サービスチェーンクラウド展開またはコンピューティングインフラストラクチャでは、クライアント・サーバトラフィックは、エンドツーエンド処理のために、種々のクラウドパーティション境界を複数回横断し得る。これは、スループットに悪影響を及ぼす、待ち時間およびネットワークオーバーヘッドの増加をもたらし得る。
【０２３８】
本開示のシステムおよび方法は、マルチホップ展開の大域的視野を決定し、可能性として考えられるパスを分析し、最適なパスを識別し、識別された最適なパスにわたってトラフィックを負荷平衡することによって、サービスチェーン負荷平衡を提供する。例えば、コントローラは、ＡＰＩを使用し、全インスタンスについてのメタデータを取得する、読み出す、受信する、またはフェッチすることができる。コントローラは、ユーザアカウント情報およびそれらのリソース配分を維持するコンピューティングインフラストラクチャの情報記憶またはデータベースから、メタデータを受信することができる。コントローラは、コンピューティングインフラストラクチャ内のインスタンスの配置、リソース配分（ＣＰＵ、メモリ、帯域幅）、確保のタイプ、コネクティビティのタイプ等を決定することができる。読み出された情報を使用して、コントローラは、全インスタンスと関連付けられるコストを導出することができる。ある場合には、コンピューティングインフラストラクチャが情報記憶を有していない、またはコントローラが情報記憶にアクセスするように構成されない、または別様にアクセスすることができない場合、コントローラは、管理者から入力を受信し、インスタンスと関連付けられるコストを計算することができる。
【０２３９】
例えば、いくつかの実施形態では、コンピューティングインフラストラクチャは、以下のサービスをともにグループ化するサービスチェーン、すなわち、ファイアウォール（ＦＷ）・侵入検出システム（ＩＤＳ）・ウェブサービス（ＷＳ）を伴って構成されることができる。コンピューティングインフラストラクチャは、以下のような各サービスの複数のインスタンス、すなわち、ファイアウォールサービスの３つのインスタンス、ＩＤＳサービスの２つのインスタンス、およびウェブサービスの３つのインスタンスを含むことができる。コントローラは、以下のような各サービスチェーンの数に基づくサービスチェーンのためのパスの総数、すなわち、３つのＦＷ×２つのＩＤＳ×３つのＷＳ＝１８個のパスを決定することができる。
【０２４０】
コントローラは、情報リポジトリから受信されるメタデータを使用して、エッジ重量を決定することができる。コントローラは、エッジ重量を使用し、パス重量を決定することができる。パス重量は、１つ以上のパス重量計算技法またはアルゴリズムを使用して、決定されることができる。コントローラは、重量割当アルゴリズムに応じて、昇順または降順でパス重量をソートすることができる。例えば、コントローラは、最高ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も効率的から最も非効率的までパス重量をランク付けすることができる。ある場合には、コントローラは、最低ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も非効率的から最も効率的までパス重量をランク付けすることができる。
【０２４１】
コントローラは、ソートまたはランク付けされたテーブルに基づいて、１つ以上の最適なサービスチェーンまたはパスを選択することができる。コントローラは、所定数の最高ランキングパスを選択することができ、最高ランキングは、最も効率的または最適なパスに対応することができる。例えば、コントローラは、以下のようなソートされた表の最上位の３つのエントリ、すなわち、Ｐ１：ＦＷ１→ＩＤＳ１→ＷＳ１（最適なパス１）、Ｐ７：ＦＷ２→ＩＤＳ１→ＷＳ１（最適なパス２）、Ｐ３：ＦＷ１→ＩＤＳ１→ＷＳ３（最適なパス３）を選択することができる。コントローラは、最上位の３つのエントリによって示されるパスを使用し、より効率的に（例えば、少ない待ち時間、より少ないオーバーヘッド、高いスループット、低いコスト等）トラフィックを処理することができる。
【０２４２】
いくつかの実施形態では、コントローラは、１８個全ての可能性として考えられるパスを分析し、最高ランキングパスを選択することができる。いくつかの実施形態では、コントローラは、機械学習技法またはプルーニング技法を使用し、全ての可能性として考えられるパスを分析することなく、最適なパスを選択することができる。例えば、コントローラは、少なくとも２つのインスタンスが同一のデータセンターゾーンまたはパーティション内にないパスが、あまり効率的ではないことを決定し、これらのパスをソートする前に、それらを除外することができる。
【０２４３】
いくつかの実施形態では、コントローラは、選択された最適なパスから欠落している、コンピューティングインフラストラクチャによって提供される任意のインスタンスがあるかどうかを決定することができ、全てのインスタンスを網羅する付加的パスを含む。コントローラは、欠落しているインスタンスを識別し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、サービスチェーンを負荷平衡するためにコントローラによって利用されるように、付加的パスを選択することができる。例えば、３つの選択された最適なパス１、２、または３のうちのいずれも、インスタンスＦＷ３、ＩＤＳ２、およびＷＳ２を含まない。コントローラは、次いで、ソートされた表を解析し、これらのインスタンスのうちの１つ以上のものを含む、付加的な最適なパスを識別することができる。例えば、コントローラは、Ｐ１７：ＦＷ３→ＩＤＳ２→ＷＳ２（最適なパス４）として、欠落しているインスタンスのうちの１つ以上のものを含む、最高ランキングパスを選択することができる。ある場合には、コントローラは、表を繰り返し解析し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、選択された最適なパスの中で表されるまで、欠落しているインスタンスを含む最高ランキングパスを選択することができる。
【０２４４】
コントローラは、負荷平衡技法またはアルゴリズムを使用して、最適なパスを負荷平衡することができる。コントローラは、加重負荷平衡ソリューションとしての負荷平衡アルゴリズムとともに、選択された最適なパスの決定されたパス重量を使用し、性能を改良することができる。
【０２４５】
本明細書に開示される技法は、ＡＤＣ環境で使用されることができるが、本開示のシステムおよび方法は、ファイアウォール、ルータ、最適化システム、速度制限システム、アクセス制御システム等のネットワーキングデバイスの動作を改良することができる。
【０２４６】
ここで図７Ａを参照すると、サービスチェーンを負荷平衡するためのシステムの実施形態のブロック図が示されている。システム７００は、１つ以上のアプライアンス２００ａ−ｎを含むことができる。アプライアンス２００ａ−ｎは、１つ以上の特徴または機能性を伴って構成されることができる。アプライアンス２００ａ−ｎはそれぞれ、類似機能性または異なる機能性を伴って構成されることができる。いくつかの実施形態では、アプライアンス２００ａは、コントローラ７０５を含む。コントローラ７０５は、クライアント１０２ａ−ｎ、サーバ１０６ａ−ｎ、およびメタデータサーバ７３５とインターフェースをとる、または通信するように構成される、インターフェース７１０を含むことができる。コントローラ７０５は、メタデータサーバ７３５から、コンピューティングインフラストラクチャ内のサービスのサービスチェーンまたはインスタンスに関連するメタデータまたはアカウント情報を読み出す、クラウドデーモン７１５を含むことができる。コントローラ７０５は、メタデータを使用し、各サービスの各インスタンスに対するエッジ重量および各サービスチェーンに対するパス重量を生成する、加重エンジン７２０を含むことができる。コントローラ７０５は、加重エンジン７２０によって生成される重量を使用し、サービスチェーンを選択してクライアント１０２からネットワークトラフィックをダイレクトするように構成される、負荷平衡装置７２５を含むことができる。コントローラ７０５は、ｖＳｅｒｖｅｒ２７５を含むことができる。コントローラ７０５は、ｖＳｅｒｖｅｒ２７５を実行することができる。コントローラ７０５は、アプライアンス２００ａの１つ以上のプロセッサ上で実行する、ｖＳｅｒｖｅｒ２７５上で実行することができる。システム７００は、コンピューティングインフラストラクチャを指す、または含むことができる。コンピューティングインフラストラクチャは、１つ以上のサーバ１０６ａ−ｎを指す、または含むことができる。
【０２４７】
システム７００は、メタデータサーバ７３５を含む、またはそれにアクセスすることができる。メタデータサーバは、管理者またはＩａａＳサービスのプロバイダ等のコンピューティングインフラストラクチャと関連付けられる他のエンティティによって、維持または管理されることができる。ＩａａＳサービスは、例えば、計算（仮想化またはベアメタル）、記憶、ネットワーキング、およびネットワーキングサービス（例えば、ファイアウォール）等の遠隔データセンターインフラストラクチャにアクセスし、それを監視し、管理するためのセルフサービスモデルを含むことができる。ＩａａＳクラウドサービスのユーザまたは顧客は、無条件にハードウェアを購入するのではなく、電気または他の公共料金請求と同様に、消費に基づいてＩａａＳを購入することができる。ある場合には、ＩａａＳの顧客は、アプリケーション、データ、ランタイム、ミドルウェア、およびオペレーティングシステムを管理してもよい。しかしながら、ＩａａＳプロバイダは、仮想化、サーバ、ハードドライブ、記憶、およびネットワーキングを管理してもよい。ＩａａＳプロバイダは、仮想化層の上方でデータベース、メッセージング待ち行列、および他のサービスを提供することができる。
【０２４８】
メタデータサーバ７３５は、メタデータを記憶する１つ以上のメタデータデータ構造を含む、メタデータ情報記憶７４０またはメタデータデータベース７４０を含む、またはそれにアクセスすることができる。メタデータは、クラウド環境のアカウントについて、またはそれと関連付けられる情報を含むことができる。メタデータは、クラウド環境に関連するアカウント情報を含むことができる。例えば、クラウドインフラストラクチャのプロバイダ（またはＩａａＳプロバイダ）は、それらの顧客アカウントについての情報記憶またはメタデータデータベース７４０を維持することができる。メタデータデータベース７４０は、顧客またはユーザアカウント情報を含むことができる。アカウント情報は、顧客によって消費されるリソースの数量またはタイプを示す、顧客のリソース配分を含むことができる。ＩａａＳプロバイダは、請求、保守、分析等のために、メタデータデータベース７４０の中に記憶されたユーザのリソース配分情報を使用することができる。
【０２４９】
コンピューティングインフラストラクチャは、異なるゾーン、パーティション、ラック、または地理的地域の中に位置する、サーバ、プロセッサ、またはメモリ等の計算リソースを含むことができる。例えば、パーティションは、ＩａａＳの分割を描写し、ＩａａＳの顧客によって使用されるＩａａＳクラウドのエリアを定義することができる。パーティションは、プロバイダレベル、領域レベル、ゾーンレベル、またはラックレベル等の１つ以上のレベルで作製されることができる。パーティショングループは、パーティション定義の中で定義され、メタデータデータベース７４０の中に記憶されることができる。パーティショングループ（またはネットワークパーティション）は、ＩａａＳの１つのネットワークによって境界され得る、ＩａａＳのエリア（例えば、領域）を含むことができる。各領域は、別個の地理的地域の境界を定めることができる。各領域は、ゾーンと称される、複数の単離された場所を有することができる。それによって、いくつかのパーティションが、ネットワークパーティションの内側に含まれることができる。ある場合には、複数のパーティショングループは、高い可用性の目的のために、複数のパーティションを有することができる。例えば、複数のパーティションが、複数のエリア（例えば、領域、ゾーン、またはラック）内でインスタンスをスポーンするようにアプライアンス２００ａもしくサービスに命令するために定義されることができる。複数の可用性ゾーン内にスポーンされるインスタンスは、たとえ１つの可用性ゾーンがダウンしていてもシステムが機能的なままであること、または異なるゾーンの間で負荷平衡することを可能にすることができる。
【０２５０】
アプライアンス２００は、図６で描写されるアプライアンスクラスタ６００の１つ以上の機能性またはコンポーネントを含むことができる。アプライアンス２００は、アプリケーションレベルセキュリティ、最適化、またはトラフィック管理を提供することによって、ネットワーク１０４またはネットワーク１０４’を経由してサーバ１０６ａ−ｎを介して提供される、サービス、ウェブサイトコンテンツ、リソース、またはアプリケーションの配信を管理または最適化することができる。アプライアンス２００は、図１−６に関して上記で説明されるアプライアンスクラスタ６００と同一または類似であり得る、またはその１つ以上の機能性またはコンポーネントを含んでもよい。いくつかの実施形態では、クライアント１０２ａ−ｎは、クライアント１０２ａ−ｎと同一または類似であり、サーバ１０６ａ−ｎは、図１−６に関して上記で説明されるようなサーバ１０６ａ−ｎと同一または類似である、またはその１つ以上の機能性またはコンポーネントを含む。いくつかの実施形態では、システム７００のクライアント１０２およびサーバ１０６はさらに、クライアントを認証するための機能を果たす、または特徴を提供するように構成される。コントローラ７０５、インターフェース７１０、クラウドデーモン７１５、加重エンジン７２０、または負荷平衡装置７２５は、クラウドベースのサービスを管理することを促進するように設計、構築、および構成される、デジタル回路、ハードウェア、１つ以上のプロセッサ、メモリ、またはソフトウェアを含むことができる。
【０２５１】
図７Ａを依然として参照すると、さらに詳細には、アプライアンス２００ａは、インターフェース７１０を含む。インターフェース７１０は、アプリケーションプログラミングインターフェース、グラフィカルユーザインターフェース、通信ポートを含む、またはＴＣＰ／ＩＰ等の１つ以上の通信またはネットワーキングプロトコルを伴って構成されることができる。インターフェース７１０は、データパケットを受信または傍受する、データパケットを受信する、ネットワークトラフィックを監視する、または別様にネットワーク１０４またはネットワーク１０４’を介して情報を取得または伝送／伝達するように構成されることができる。
【０２５２】
いくつかの実施形態では、インターフェース７１０は、複数のクライアント１０２ａ−ｎのクライアント１０２ａから要求を受信する。インターフェース７１０は、ネットワーキングプロトコル、通信プロトコル、アプリケーション層プロトコル、トランスポートプロトコル、または暗号化プロトコルを介して、要求を受信してもよい。プロトコルは、例えば、ＨＴＴＰ、ＴＣＰ、ＩＣＡ、またはＨＤＸを含むことができる。プロトコルは、ステートフルプロトコルまたはステートレスプロトコルであることができる。要求は、クライアント１０２ａがアクセスを要求している、クライアントまたはリソースについての情報を含んでもよい。いくつかの実施形態では、サーバ１０６ａ−ｎによって提供されるリソースは、アクセスが許可される前に、クライアントデバイスのクライアントまたはユーザが、認証、承諾、または承認を要求し得る、セキュアなリソースであってもよい。
【０２５３】
いくつかの実施形態では、インターフェース７１０は、１つ以上のクライアント１０２ａ−ｎからネットワーク通信を受信し、ネットワーク通信を１つ以上のサーバ１０６ａ−ｎに転送またはダイレクトするように設計および構築される。インターフェース７１０は、図１−６に関して上記で説明されるインターフェース６０８または６１０ａ−ｎと同一または類似であり得る、またはその１つ以上の機能性またはコンポーネントを含むことができる。インターフェース７１０は、クライアント１０２ａからデータパケットを受信することができる。インターフェース７１０は、クライアント１０２ａから受信されるデータパケットを宛先サーバに転送または中継することができる。例えば、インターフェース７１０は、クライアントエージェント１２０ａから受信されるデータパケットをサーバ１０６ａまたはインスタンス７４５に自動的に転送するように構成されることができる。インターフェース７１０はさらに、アプライアンス２００ａの状態またはモードに基づいて、クライアント１０２ａ−ｎからネットワークトラフィックを引き込むように構成されることができる。例えば、アプライアンス２００ａは、一次デバイス２００ａであってもよい。一次デバイス２００ａは、現在アクティブモードである、アクティブ・スタンバイ中間アプライアンスペアの中間デバイスを指すことができる。したがって、アプライアンス２００ａのインターフェース７１０は、アプライアンス２００ａが、現在、クライアントからの要求を能動的に果たし、要求を１つ以上のサーバ１０６ａ−ｎに転送するように構成される、一次デバイスである場合、クライアント１０２ａ−ｎからネットワークトラフィックを受信することができる。
【０２５４】
いくつかの実施形態では、コントローラ７０５は、クラウド環境またはコンピューティングインフラストラクチャの１つ以上のサーバによって提供される、１つ以上のサービスの複数のインスタンス（例えば、インスタンス７４５ａ−ｎ、インスタンス７５０ａ−ｎ、またはインスタンス７５５ａ−ｎ）のそれぞれに関連する、アカウント情報を受信するように設計および構築される、クラウドデーモン７１５を含む。クラウドデーモン７１５は、１つ以上のプロセッサ上で実行するように構成されることができる。クラウドデーモン７１５は、バックグラウンドプロセスを実行または起動するように構成されることができる。ある場合には、クラウドデーモン７１５は、時間間隔に基づいて、周期的に、または条件またはトリガイベントに応答して、構成されることができる。例えば、クラウドデーモン７１５は、１分、５分、１０分、３０分毎、１時間毎、１２時間毎、毎日、一晩等で、実行または起動することができる。ある場合には、クラウドデーモン７１５は、クラウド環境のユーザまたは管理者からのインジケーションに応答して、実行または起動するように構成されることができる。いくつかの実施形態では、クラウドデーモン７１５は、サービスの新しいインスタンスが立ち上がったという決定、インスタンスのフェイルオーバー、インスタンスの終了、クライアント１０２ａからの新しい要求、または顧客アカウントの追加、更新、または修正等の条件に基づいて、起動するように構成されることができる。
【０２５５】
コントローラ７０５は、（例えば、インターフェース７１０またはクラウドデーモン７１０を介して）サービス、インスタンス、およびサービスチェーンを決定または識別することができる。インスタンスは、サービスを１つ以上のクライアント１０２ａ−ｎに提供することを促進する、サービスのインスタンスを指すことができる。コントローラ７０５は、パケットを、１つ以上のサービスを提供するサービスチェーンにダイレクトすることができる。インスタンスは、１つ以上の利用可能なインスタンスを含むことができる。インスタンスは、能動インスタンスまたは受動インスタンスを含むことができる。インスタンスは、アプライアンス２００ａまたはサーバ１０６ａ−ｎ上で実行している仮想マシンまたはｖＳｅｒｖｅｒ２７５を含むことができる。
【０２５６】
コントローラ７０５は、複数のクライアント１０２ａ−ｎから複数のサーバ１０６ａ−ｎにネットワークトラフィックをダイレクトするように実行している、１つ以上のｖＳｅｒｖｅｒ２７５を含むことができる。クラウドデーモン７１５は、インスタンスにｐｉｎｇを送る、インスタンスをポーリングする、要求する、または別様に識別することができる。例えば、クラウドデーモン７１５は、全てのアクティブサービスチェーン、サービス、またはそのインスタンスからの応答についてｐｉｎｇまたは要求を生成することができる。ｐｉｎｇまたは要求に応答して、クラウドデーモン７１５は、各インスタンスから応答を受信することができる。応答は、サービスチェーンまたはインスタンスの識別子を含むことができる。応答は、サービスチェーンまたはインスタンスと関連付けられる顧客のアカウント識別子を含むことができる。例えば、応答は、コンピューティングインフラストラクチャによって提供されるＩａａＳサービスチェーンを識別することができる。
【０２５７】
コントローラ７０５は、パスを含む、複数のサービスチェーンを識別することができる。パスは、コンピューティングインフラストラクチャ（例えば、サーバ１０６ａ−ｎ）によって提供される第１のサービスの第１のインスタンス（例えば、７４５ａ）と、コンピューティングインフラストラクチャ（例えば、サーバ１０６ａ−ｎ）によって提供される第２のサービスのインスタンス（例えば、７４５ｂ）とを有することができる。コントローラ７０５は、（例えば、クラウドデーモン７１５を介して）インスタンスと関連付けられるメタデータまたはアカウント情報を受信する、読み出す、またはフェッチすることができる。メタデータは、インスタンスがアクセスを提供する、サービスについてのメタデータを含むことができる。コントローラ７０５は、メタデータサーバ７３５からメタデータを読み出すことができる。
【０２５８】
いくつかの実施形態では、コントローラ７０５は、クラウドアプリケーションプログラミングインターフェース（ＡＰＩ）を使用し、１つ以上のクエリを生成して、複数のサービスチェーンの各インスタンスを識別することができる。コントローラ７０５は、１つ以上のクエリに応答して、サービスの１つ以上のインスタンスをそれぞれ有する、１つ以上のパスを含む、１つ以上のサービスチェーンのインジケーションを受信することができる。コントローラ７０５は、クラウドＡＰＩを使用して１つ以上のクエリを生成し、複数のサービスチェーンの各インスタンスに対してメタデータを読み出すことができる。情報は、インスタンスを介して提供されるサービスと関連付けられるメタデータを含む、または指すことができる。クエリは、サービスのリソース配分、クラウド配置、リソース消費、確保のタイプ、またはコネクティビティのタイプに関する情報についての要求を含むことができる。サービスのクラウド配置は、サービスが実行する、ゾーン、データセンタ、地理的地域、ネットワークパーティション、またはドライブパーティション等のパーティション情報を示すことができる。確保のタイプは、サービスのための十分な容量を有するマシンをプロビジョニングするために、使用されることができる。確保のタイプは、十分な記憶、計算能力、プロセッサ速度、メモリ、アプリケーション、グラフィカル処理ユニット、帯域幅等のサービスのための十分な容量を伴うマシンをプロビジョニングするために使用されるポリシを含むことができる。確保は、仮想確保を含むことができる。仮想確保は、ＩａａＳサービスを提供または実行するためにサーバ１０６ａ−ｎに利用可能なメモリ、ＣＰＵ、ネットワーキング、および記憶リソースの共有を含むことができる。コネクティビティのタイプは、サーバ１０６ａがアプライアンス２００ａ−ｎまたはクライアント１０２ａ−ｎと通信するために使用する、ネットワーク１０４’のタイプを指すことができる。コネクティビティのタイプは、サービスのために利用可能な帯域幅の量を示すことができる。
【０２５９】
コントローラ７０５は、クラウドＡＰＩを使用して、１つ以上のクエリを生成することができる。ある場合には、コントローラ７０５は、１つ以上のクラウドＡＰＩを伴って構成されることができる。コントローラ７０５は、コントローラ７０５のデータベースの中に記憶された複数のクラウドＡＰＩからクラウドＡＰＩを選択することができる。コントローラ７０５は、インスタンスを介して提供されるインスタンスまたはサービスと関連付けられる識別子に基づいて、クラウドＡＰＩを選択することができる。例えば、コントローラ７０５は、インスタンスまたはサービスの識別子に基づいて、アカウント識別子を決定することができる。コントローラ７０５は、アカウント識別子を使用し、コントローラ７０５のメモリの中に記憶されたデータベース内で検索を行い、アカウント識別子にマップされたクラウドＡＰＩを選択することができる。例えば、ＡＰＩを監視するクラウドは、ＡＭＡＺＯＮ  ＷＥＢ  ＳＥＲＶＩＣＥＳ，  Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）によって提供されるＡＭＡＺＯＮ  ＣＬＯＵＤＷＡＴＣＨＴＭを含むことができる。
【０２６０】
クラウドＡＰＩを使用して、コントローラ７０５は、１つ以上のクエリを生成し、サービスについてのメタデータを読み出すことができる。クエリは、サービスのための配置情報についてのクエリを含むことができる。インスタンスのための配置情報は、クラウド環境内のパーティションを指すことができる。インスタンスのための配置情報は、インスタンスがサービスを提供するためにアクセスする、クラウド環境内のパーティションを指すことができる。例えば、ＩａａＳクラウドサービスは、対応する配置において実行してもよい。したがって、インスタンスのための配置情報は、インスタンスがアクセスを提供する、サービスの配置を指すことができる。
【０２６１】
コントローラ７０５は、ネットワーク１０４’を介して、生成されたクエリをメタデータサーバ７３５に伝送することができる。コントローラ７０５は、メタデータサーバ７３５から、インスタンスのためのメタデータを含むクエリへの応答を受信することができる。インスタンスのためのメタデータは、インスタンスがアクセスを提供するサービスについてのメタデータを含むことができる。インスタンスのためのメタデータは、インスタンスと関連付けられるサービスのためのメタデータを含むことができる。
【０２６２】
ある場合には、コントローラ７０５は、別個のクエリを生成し、各サービスチェーン、各インスタンス、または各関連付けられるサービスに対してメタデータサーバ７３５に伝送することができる。ある場合には、コントローラ７０５は、複数のインスタンスによって提供される複数のサービスを識別する、クエリを生成して伝送することができる。ある場合には、コントローラ７０５は、ともにサービスチェーンにグループ化またはリンクされた複数のインスタンスを識別する、クエリを生成して伝送することができる。コントローラ７０５は、１つ以上のサービス、サービスチェーン、またはインスタンスのためのメタデータを含む、応答を受信することができる。例えば、コントローラ７０５は、各クエリに対する応答、または複数のクエリへの応答を含む応答を受信することができる。
【０２６３】
コントローラ７０５は、メタデータサーバ７３５から受信されるメタデータを使用して、各サービスチェーンに対してパス重量を決定するように設計および構築される加重エンジン７２０を含むことができる。パス重量は、サービスチェーンによる、サービスを配信することの効率のレベルを示すことができる。パス重量は、サービスチェーンのパス内の各インスタンスの個々の重量に基づき得る、待ち時間、リソースオーバーヘッド、スループット、またはリソースコスト等のコンピューティングインフラストラクチャ性能特性に基づいて、性能コンピューティングインフラストラクチャまたはユーザ体験を示すことができる。パス重量は、ＩａａＳサービス等のホスト型システムへのクラウド環境影響の論理測定を示すことができる。重量は、クラウド環境を介して提供されるサービスのインスタンスの性能を示すことができる。
【０２６４】
コントローラ７０５は、受信されたメタデータを使用して、サービスチェーンのためのパス重量を決定するように、１つ以上の技法、機能、またはアルゴリズムを用いて構成されることができる。コントローラ７０５は、サービスチェーンの各インスタンスに対してエッジ重量を決定し、サービスチェーンの各インスタンスのエッジ重量を組み合わせて、サービスチェーンのためのパス重量を決定することができる。例えば、コンピューティングインフラストラクチャは、３つのサービスを提供してもよい。第１のサービスは、サーバ１０６ａ上で実行するインスタンス７４５ａおよびサーバ１０６ｂ上で実行するインスタンス７４５ｂによって提供されることができる。第２のサービスは、サーバ１０６ｂ上で実行するインスタンス７５０ａによって提供されることができる。第３のサービスは、サーバ１０６ａ上で実行するインスタンス７５５ａによって提供されることができる。サーバ１０６ａおよび１０６ｂは、異なるゾーン、パーティション、または地理的地域内にあることができる。
【０２６５】
インスタンスは、アクティブインスタンスまたは潜在的な利用可能なインスタンスであることができる。加重エンジン７２０は、読み出されたメタデータを使用し、インスタンス７４５ａ、７４５ｂ、７５０ａ、および７５５ａの各々に対するエッジ重量を決定することができる。加重エンジン７２０は、種々の効率または性能考慮事項に基づいて、より高いまたは低い重量をインスタンスに割り当てることができる。例えば、サービスチェーンは、第１のサービスから第２のサービスおよび第３のサービスに進むようなパスを定義してもよい。コントローラ７０５は、コントローラ７０５とインスタンス７４５ａとの間のネットワークパスが、コントローラ７０５とインスタンス７４５ｂとの間のネットワークパスよりも効率的または高性能であり得ることを決定または識別してもよい。したがって、コントローラ７０５は、インスタンス７４５ｂと比較して、より高い重量をインスタンス７４５ａに割り当ててもよい。コントローラ７０５はまた、インスタンス７４５ａとインスタンス７５０ａとの間のネットワークパスが、インスタンス７４５ａとインスタンス７５０ｎとの間のネットワークパスと比較して、非効率的または低性能であることを決定してもよい。したがって、コントローラ７０５は、インスタンス７５０ｎと比較して、より高い重量をインスタンス７５０ａに割り当てることができる。コントローラ７０５は、インスタンス７５０ａとインスタンス７５５ａとの間のネットワークパスが、７５０ａと７５５ｎとの間のネットワークパスよりも効率的または高性能であることを決定することができる。
【０２６６】
したがって、コントローラ７０５は、サービスチェーンの各インスタンスに対してエッジ重量を決定することができる。加重エンジン７２０は、ネットワークパス、プロセッサ速度、帯域幅、メモリ、構成、場所、または可用性に基づいて、より高いまたは低い重量をインスタンスに割り当てることができる。ある場合には、コントローラ７０５がインスタンスと同一のゾーン内にある場合、パケットを同一のゾーン内のインスタンスにダイレクトすることが、短縮した待ち時間および増加したスループットをもたらし得るため、コントローラは、より高い重量を割り当てることができる。加重エンジン７２０は、アプライアンスおよびサービスが異なるゾーン内にあり、増加した待ち時間および低減したスループットをもたらし得るため、より低い重量を第２のインスタンスに割り当てることができる。例えば、加重エンジン７２０は、１、２、３、５、１０、または別の数の重量を第１のインスタンスに割り当てることができる。加重エンジン７２０は、マイナス１（−１）、０、１、２、３の重量、またはある他の重量を第２のインスタンスに割り当てることができる。加重エンジン７２０は、サービスのインスタンスのためにクラウド環境によって提供される性能のレベルを示す重量を割り当てることができる。
【０２６７】
加重エンジン７２０は、コントローラ７０５とインスタンスを提供するサーバとの間の距離に基づいて、重量を割り当てることができる。例えば、加重エンジン７２０は、アプライアンス２００ａ−ｎのための地理的場所を決定することができる。加重エンジン７２０は、受信されたメタデータを使用し、サービスのインスタンスを提供するサーバ１０６ａ−ｎの地理的場所を決定することができる。加重エンジン７２０は、地理的場所に基づいて、各アプライアンスと各インスタンスとの間の距離を決定することができる。例えば、加重エンジン７２０は、アプライアンス２００とインスタンスを実行するサーバとの間の地理的距離を決定する、マッピングエンジンまたはマッピングツールにクエリを行うことができる。別の実施例では、加重エンジン７２０は、アプライアンスに、ｐｉｎｇをサーバに送らせ、ｐｉｎｇ応答時間を使用し、距離または応答時間を決定させることができる。加重エンジン７２０は、距離または応答時間に基づいて、重量を割り当てることができる。例えば、加重エンジン７２０は、応答に基づいて、アプライアンスおよびサービスのインスタンスをランク付けし、最高重量を最短応答時間に対応するサービスのインスタンスに、第２の最高重量を第２の最短応答時間に対応するサービスのインスタンスに等、割り当てることができる。
【０２６８】
加重エンジン７２０は、配置、サービスのインスタンスの確保のタイプまたは容量、帯域幅、またはコネクティビティのタイプ等の１つ以上の要因に基づいて、重量をサービスのインスタンスに割り当てることができる。例えば、加重エンジン７２０は、受信されたメタデータに基づいて、以下のようにサービスの第１のインスタンスのための重量を決定することができ、すなわち、ｉｎｓｔａｎｃｅ＿ｏｎｅ＿ｗｅｉｇｈｔ＝＋５（同一のゾーンに起因する）＋２（５００Ｍｂｐｓの利用可能な帯域幅に起因する）＝７である。加重エンジン７２０は、受信されたメタデータに基づいて、以下のようにサービスの第２のインスタンスのための重量を決定することができ、すなわち、ｉｎｓｔａｎｃｅ＿ｔｗｏ＿ｗｅｉｇｈｔ＝＋１（異なるゾーンに起因する）＋４（１，０００Ｍｂｐｓの利用可能な帯域幅に起因する）＝５である。加重エンジン７２０は、第１の重量を第２の重量と比較し、最高重量に対応するインスタンスを決定することができる。加重エンジン７２０は、各サービスチェーンの各インスタンスに対して本重量決定を実施することができる。
コントローラ７２０は、各サービスチェーンの各インスタンスに対して重量を使用し、サービスチェーンのためのパス重量を決定することができる。例えば、利用可能なパスは、以下を含んでもよい。
【表１】
2019518272.tif 000003
【０２６９】
表１に図示されるように、コンピューティングインフラストラクチャによって提供される３つのサービスのインスタンスの間のパスをそれぞれ含む、合計８つの可能性として考えられるサービスチェーンがある。コントローラ７０５は、各インスタンスに対してエッジ重量を決定することができる（例えば、Ｗ００１、Ｗ１１１、Ｗ２１１）。コントローラ７０５は、次いで、エッジ重量を組み合わせ、パス重量を決定することができる。コントローラ７０５は、任意の機能、アルゴリズム、または技法を使用して、エッジ重量を組み合わせることができる。例えば、コントローラ７０５は、サービスチェーンの各インスタンスに対してエッジ重量を合計する、エッジ重量を乗算する、サービスチェーンの１つ以上のエッジ重量の比を決定する、エッジ重量を関数に入力する、エッジ重量の平均をとる等を行うことができる。
【０２７０】
コントローラ７０５は、サービスチェーンの効率のレベルに基づいて、パス重量をランク付けまたはソートすることができる。例えば、サービスチェーンは、表２に図示されるように、第１のサービスチェーンが最適なサービスチェーンまたは最高性能サービスチェーンであり、最後のサービスチェーンが準最適なサービスまたは最低性能サービスチェーンであるように、降順でランク付けまたはソートされることができる。
【表２】
2019518272.tif 000004
【０２７１】
コントローラ７０５は、表２に図示されるように、パス重量に基づいてサービスチェーンをソートすることができる。例えば、パス重量ＰＷ８に対応するサービスチェーン＃１は、最高ランキングまたは最高性能サービスチェーンであることができる。これは、３つ全てのサービスのインスタンスが同一のサーバによって実行されるためであり得る。したがって、インスタンス７４５ｎがコントローラ７０５からより遠く離れているため、たとえインスタンス７４５ｎのエッジ重量Ｗ００３が、実際にはインスタンス７４５ａのエッジ重量Ｗ００１を上回り得ても、コントローラ７０５がホップ毎のレベルではなく、マルチホップまたはサービスチェーンベースで負荷平衡を実施しているため、コントローラ７０５は、サービスチェーンが全体的により良好に機能し、大域的に最適なサービスチェーンであることを決定することができる。
【０２７２】
コントローラ７０５は、所定数の最上位性能サービスチェーンを選択し、次いで、所定数のサービスチェーンのみを使用して、負荷平衡を実施することができる。例えば、最上位性能サービスチェーンの所定数は、２、３、４、５、６、７、１０、１５、２０、またはサービスチェーン負荷平衡促進する、ある他の数であることができる。ある場合には、所定数は、固定数または動的数であることができる。例えば、所定数は、利用可能なサービスチェーンの数の半分、３分の１、４分の１、５分の１、６分の１、または他の分数または割合等の利用可能なサービスの数に基づくことができる。
【０２７３】
いくつかの実施形態では、コントローラ７０５は、サービスチェーンを所定数の最上位性能サービスチェーンの選択されたサブセットに追加することができる。コントローラ７０５は、所定数の最上位性能サービスチェーンのうちの選択されたサービスチェーンを分析し、コンピューティングインフラストラクチャによって提供される１つ以上のインスタンスがサブセットから欠落していることを決定することができる。例えば、最上位の３つのサービスチェーンが表２から選択される場合、コントローラ７０５は、インスタンス７４５ａが欠落している、または利用されていないことを決定することができる。コントローラ７０５は、インスタンスが選択されたサービスチェーンから欠落していると決定することに応答して、表２を解析し、欠落しているインスタンスを含む最高ランキングサービスチェーンを識別することができる。本実施例では、コントローラ７０５は、パス重量ＰＷ４に対応する第４のサービスチェーンを識別し、本サービスチェーンを負荷平衡に使用されるサービスチェーンのサブセットに追加することができる。
【０２７４】
いくつかの実施形態では、コントローラ７０５は、機械学習技法を使用し、パス重量を決定することに先立って、サービスチェーンをランク付けまたはソートすることに先立って、または最適なサービスチェーンのサブセットを決定することに先立って、サービスチェーンをプルーニングすることができる。前処理、フィルタリング、またはプルーニング技法を実施することによって、コントローラ７０５は、最適なサービスチェーンを識別する効率を向上させることができる。
【０２７５】
いくつかの実施形態では、コントローラ７０５は、サービスチェーンをプルーニングするように機械学習技法を用いて構成されることができる。例えば、機械学習技法は、同一のゾーン内にインスタンスを全て含む任意のサービスチェーンが、２つ以上のゾーン内にインスタンスを含むサービスチェーンよりも高性能であることを決定することができる。機械学習技法はさらに、２つの異なるゾーン内にインスタンスを含む任意のサービスチェーンが、３つ以上のゾーン内にインスタンスを含むサービスチェーンよりも高性能であることを決定することができる。したがって、コントローラ７０５は、サービスチェーンのためのパス重量を決定することに先立って、またはパス重量に基づいてサービスチェーンをソートまたはランク付けすることに先立って、３つ以上の異なるゾーン内にインスタンスを含むサービスチェーンを除外することができる。
【０２７６】
いくつかの実施形態では、機械学習技法は、履歴データに基づいて、インスタンス７４５ａを含む任意のサービスチェーンが、最適なサービスチェーンとして選択されない低性能インスタンスであることを決定することができる。したがって、コントローラは、パス重量を決定することに先立って、またはパス重量に基づいてサービスチェーンをソートすることに先立って、本インスタンスを含む任意のサービスチェーンを除外することができる。
【０２７７】
コントローラ７０５は、負荷平衡機能およびサービスチェーンの各々に対する決定されたパス重量を使用し、サービスチェーンインスタンスを選択して、クライアントからネットワークトラフィックをダイレクトするように設計および構築される、負荷平衡装置７２５を含むことができる。負荷平衡装置７２５は、複数のコンピューティングリソースにわたって作業負荷を分配し、リソース使用を最適化し、スループットを最大限にし、応答時間を最小限にし、単一のリソースの過負荷を回避することができる。ある場合には、負荷平衡機能は、負荷平衡装置７２５に、最高重量に対応するサービスチェーンを選択させることができる。例えば、負荷平衡装置７２５は、クライアント１０２からデータパケットまたは要求を受信することができる。負荷平衡装置７２５は、コンピューティングインフラストラクチャのために最適として識別される、要求に対応するサービスチェーンを読み出すことまたは識別することができる。例えば、負荷平衡装置７２５は、最適なサービスチェーンがパス重量ＰＷ８、ＰＷ５、ＰＷ７、およびＰＷ４に対応することを決定することができる。負荷平衡装置７２５は、パス重量を使用して負荷平衡機能を適用し、サービスチェーンを選択してクライアントからネットワークトラフィックをダイレクトすることができる。
【０２７８】
いくつかの実施形態では、負荷平衡装置７２５は、アプライアンス２００ａがトラフィックをダイレクトするサービスチェーンを選択するために使用し得る、基準を定義する、負荷平衡アルゴリズム（または負荷平衡技法）を使用することができる。負荷平衡装置７２５が、構成された基準が１つのサーバについて満たされることを決定するとき、アプライアンスは、次いで、異なるサービスを選択することができる。ある場合には、負荷平衡装置は、最小接続技法を使用して、サービスチェーンを選択することができる。最小接続技法は、最小数のアクティブ接続を伴うサービスチェーンを選択し、サービスチェーンおよびそのインスタンスの間でアクティブ要求の負荷を平衡させることができる。
【０２７９】
負荷平衡装置７２５は、パス重量を使用することによって、構成のさらなる粒度を提供することができる。例えば、負荷平衡装置７２５は、決定されたパス重量を最小接続負荷平衡機能に適用することができる。負荷平衡装置７２５は、以下の式の加重値Ｎ｛ｗ｝、すなわち、Ｎ｛パス重量｝＝（アクティブ接続の数）×（１００００／パス重量）に基づいて、サービスチェーンを選択することができる。
【０２８０】
例えば、第１のサービスチェーンは、５０のアクティブトランザクションを有し、３の重量を割り当てられることができる。第２のサービスチェーンは、８０のアクティブトランザクションを有し、５の重量を割り当てられることができる。したがって、第１のサービスチェーンのための加重値Ｎ｛パス重量｝は、５０×（１００００／３）＝１６６，６６７であることができる。第２のサービスチェーンのための加重値Ｎ｛パス重量｝は、８０×（１００００／５）＝１６０，０００であることができる。負荷平衡装置７２５は、加重最小接続技法を使用し、各要求に対して最小のＮ｛パス重量｝値を伴うサービスチェーンを選択することができる。以下の表２は、クラウド認識負荷平衡装置７２５が、メタデータを使用し、パス重量を生成し、サービスチェーンを選択して、以下の要求のためにネットワークトラフィックをダイレクトし得る方法を図示する。
【表３】
2019518272.tif 000005
【０２８１】
上記の表３に図示されるように、第２のサービスチェーンは、４つの要求のための最小のＮ｛ｐｗ｝値を有し、１つ以上のクライアントからネットワークトラフィックをダイレクトするように選択される。各要求が１つ以上のクライアントから受信されると、第２のサービスチェーンのためのＮ｛ｐｗ｝は、最小接続機能に基づいて増加する。第５の要求が入ってくるときに、第１のサービスチェーンが最小のＮ｛ｐｗ｝を有するため、負荷平衡装置は、第１のサービスチェーンを選択する。第６の要求がクライアントから受信されるとき、第２のサービスチェーンが最小のＮ｛ｐｗ｝を有するため、負荷平衡装置は、第２のサービスチェーンを選択する。第７の要求が受信されるとき、第１および第２のサービスチェーンは両方とも、同一のＮ｛ｐｗ｝を有する。本時点で、負荷平衡装置は、ラウンドロビンアプローチに基づいてサービスチェーンのうちの１つを選択する、または一方または他方のサービスチェーンを無作為に選択する、またはデフォルトで第１のサービスチェーンまたは第２のサービスチェーンになるように構成されることができる。
【０２８２】
いくつかの実施形態では、コントローラ７０５は、メタデータを使用し、アプライアンスのメモリまたは記憶装置の中にデータをキャッシュすることを促進することができる。コントローラ７０５は、受信されたメタデータを使用し、コンピューティングインフラストラクチャによって提供される各サービスチェーンの各インスタンスに対してゾーン情報を決定することができる。コントローラは、受信されたメタデータを使用して、第１のサービスの第１のインスタンスが第１のゾーンを介して提供され、第２のサービスの第２のインスタンスが第２のゾーンを介して提供されることを決定することができる。コントローラ７０５は、クラウド情報または重量を使用して、コントローラ７０５が、第１のゾーンの中に位置する、近傍に位置する、または第２のゾーンと比較して第１のゾーンではより短い応答時間を有することを決定することができる。したがって、コントローラ７０５は、クラウド性能を改良するために、コントローラ７０５またはアプライアンス２００ａのメモリまたは記憶装置の中に第２のインスタンスに関連するデータを記憶またはキャッシュすることを決定することができる。データは、例えば、第２のサービスから頻繁に要求される、または第２のサービスによって提供される、データファイルまたはアプリケーションを含んでもよい。
【０２８３】
ここで図７Ｂを参照すると、サービスチェーンを負荷平衡する方法の実施形態のブロック図が示されている。方法７００は、図１−７Ａ、８、または９Ａ−９Ｃに説明される、１つ以上のシステムまたはコンポーネントを使用して実施されることができる。要するに、いくつかの実施形態では、コントローラは、ステップ７８０において、第１のサービスのインスタンスと、第２のサービスのインスタンスとを有する、パスをそれぞれ含む、サービスチェーンを識別する。ステップ７８５では、コントローラは、サービスの各々に対するパス重量を決定する。ステップ７９０では、コントローラは、負荷平衡機能およびパス重量に基づいて、サービスチェーンから１つのサービスチェーンを選択し、選択されたサービスチェーンを介してクライアントからネットワークトラフィックをダイレクトする。
【０２８４】
図７Ｂを依然として参照すると、さらに詳細には、コントローラは、ステップ７８０において、第１のサービスのインスタンスと、第２のサービスのインスタンスとを有する、パスをそれぞれ含む、サービスチェーンを識別する。コントローラは、１つ以上のクライアントと、１つ以上のサービスを提供する１つ以上のサーバとの中間にあり得る。１つ以上のサーバは、１つ以上のネットワーク化環境（例えば、１つ以上のゾーン、パーティション、またはサブパーティション）内にあることができる。サーバは、ＩａａＳクラウド等のクラウド環境の一部であることができる。クラウド環境は、コントローラを含むことができる、またはコントローラは、クラウド環境のサーバへのアクセスをクライアントに提供することができる。コントローラは、クラウド環境と関連付けられる各インスタンスを決定または識別することができる。コントローラは、クラウド環境と関連付けられるインスタンスにｐｉｎｇを送る、インスタンスをポーリングする、要求する、監視する、追跡する、または別様に決定することができる。例えば、コントローラは、クラウドがサービスチェーンの中でともに連鎖されたサービスのセットを含むサービスを提供することを決定することができる。サービスチェーンは、ファイアウォール、侵入検出システム、およびウェブサービス等のサービスを含むことができる。サービスチェーンは、パスを有する、またはクライアントからファイアウォール、侵入検出システム、およびウェブサービスにトラフィックまたはデータをダイレクトするパスを定義することができる。コントローラは、クラウド環境がサービスチェーンの中のサービスのそれぞれの１つ以上のインスタンスを提供することを決定または識別することができる。例えば、コントローラは、クライアントからのトラフィックと関連付けられるサービスまたはサービスチェーンに対応するアカウント情報を記憶する、メタデータサーバへの１つ以上のクエリを生成することができる。例えば、コントローラは、メタデータサーバに周期的にクエリを行い、コンピューティングインフラストラクチャによって提供される全てのインスタンスを識別してもよい。ある場合には、コントローラは、コンピューティングインフラストラクチャによって提供されるサービスチェーンまたはインスタンスのうちのいくつかまたは全てにサービスチェーン負荷平衡を実施してもよい。例えば、いくつかのアカウントが、サービスチェーン負荷平衡のために構成されてもよい一方で、他のサービスまたはサービスチェーンのための他のアカウントは、サービスチェーン負荷平衡のために構成されない、またはサービスチェーン負荷平衡を可能にしない場合がある。
【０２８５】
クラウド環境内でクライアントトラフィックを１つ以上のサービスにダイレクトするために構成される、または利用可能であるインスタンスを識別することに応じて、コントローラは、複数のインスタンスのそれぞれと関連付けられるアカウント情報またはメタデータを読み出すことができる。コントローラは、クラウドアプリケーションプログラミングインターフェースを使用し、１つ以上のクエリを生成して、複数のインスタンスの各々に対するアカウント情報を読み出すことができる。１つ以上のクエリは、配置（例えば、クラウドパーティション内、または場所）、リソース配分、確保のタイプ、またはコネクティビティのタイプのうちの少なくとも１つのための情報を読み出すように構成されることができる。コントローラは、対応するサービスについての情報を読み出すように構成される各インスタンスに対してクエリを生成することができる。コントローラは、クエリを、インスタンス、サービス、またはサービスチェーンのためのメタデータを記憶するメタデータサーバに伝送することができる。
【０２８６】
いくつかの実施形態では、コントローラは、複数のサービス、複数のサービスチェーン、またはその複数のインスタンスについての情報の要求を含む、クエリを生成することができる。いくつかの実施形態では、クエリは、サービスのために構築され、クエリへの応答は、サービスのアクティブまたは利用可能なインスタンスを識別する。いくつかの実施形態では、第１のクエリは、サービスチェーンのために構築され、クエリへの応答は、サービスチェーンによって提供されるサービスのリストである。第２のクエリは、受信されたサービスのリストの中の各サービスに対して構築されてもよい。コントローラは、次いで、１つ以上の第２のクエリを伝送し、サービスの各々に対する利用可能な、アクティブな、または立ち上げられたインスタンスを識別する情報を受信することができる。
【０２８７】
いくつかの実施形態では、コントローラは、複数のインスタンスについてクエリを生成することができる。コントローラは、インスタンスおよびサービスについての異なるタイプの情報を取得することができる。例えば、コントローラは、クラウドアプリケーションプログラミングインターフェースを使用し、クエリを生成して、複数のインスタンスのうちの第１のインスタンスのための配置情報を読み出すことができる。配置情報は、例えば、コントローラがネットワークトラフィックをダイレクトするサービスのインスタンスの配置を含むことができる。配置情報は、例えば、コントローラがネットワークトラフィックをダイレクトする各インスタンスに対応する、配置情報を含むことができる。コントローラは、クエリをクラウドコンピューティングインフラストラクチャのプロバイダによって維持されるメタデータサーバに伝送することができる。メタデータサーバは、インスタンスのための配置情報を記憶するデータベースを含むことができる。コントローラは、クエリに応答して、メタデータサーバから第１のインスタンスのための配置情報を受信することができる。
【０２８８】
いくつかの実施形態では、コントローラは、更新されたアカウント情報を周期的に受信またはフェッチすることができる。コントローラは、クライアントから要求を受信することに応答して、時間間隔に基づいて、または条件またはイベント（例えば、新しいサーバの追加、またはサーバがオフラインになること、フェイルオーバー、新しいまたは更新された負荷平衡アルゴリズムまたは重量ポリシ等）に応答して、アカウント情報を要求することができる。
【０２８９】
ステップ７８５では、コントローラは、アカウント情報に基づいて、サービスチェーンの各々に対するパス重量を決定することができる。コントローラは、複数のサービスチェーンの各々に対するパス重量を決定することができる。パス重量は、サービスチェーンによる、サービスを配信することの効率のレベルを示すことができる。パス重量は、サービスチェーンによって識別されるパスによる、サービスを配信することの効率または性能のレベルの数値、スコア、グレード、文字列、テキスト、または他のインジケーションを含むことができる。パス重量は、クラウド環境を介して提供されるサービスチェーンのパスの性能を示すことができる。パス重量は、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストに基づくことができる。パス重量は、サービスチェーンのパスの中の各インスタンスの個々の重量に基づき得る、待ち時間、リソースオーバーヘッド、スループット、またはリソースコストを示すことができる。
【０２９０】
パス重量を決定するために、コントローラは、メタデータサーバから受信されるメタデータまたはアカウント情報を使用して、サービスチェーンのそれぞれの各インスタンスに対してエッジ重量を決定することができる。例えば、コントローラは、インスタンスが位置するパーティション、リソース配分、接続タイプ、または他のメタデータに基づいて、インスタンスのためのより高い重量を決定することができる。例えば、コントローラは、インスタンスがコントローラと異なるクラウドパーティションまたはゾーン内にある場合に、インスタンスのためのより低い重量を決定することができる。コントローラは、正または負の重量、または負の数から正の数（例えば、−１００〜＋１００）に及ぶ数値重量を割り当てることができる。コントローラは、整数、２進値、分数、または小数として重量を割り当てることができる。コントローラは、指数関数的加重技法または線形加重技法を使用することができる。例えば、コントローラとサービスとの間の距離が増加すると、インスタンスに割り当てられた重量は、指数関数的または直線的に増加することができる。
【０２９１】
例えば、コントローラは、第１のサービスの第１のインスタンスと、第２のサービスの第１のインスタンスとを有する、第１のパスを含む、サービスチェーンを識別することができる。コントローラは、第１のサービスの第２のインスタンスと、第２のサービスの第２のインスタンスとを有する、第２のパスを含む、第２のサービスチェーンを識別することができる。コントローラは、メタデータサーバへのクエリを生成することによって、利用可能なインスタンスをポーリングすることによって、またはコントローラの中にキャッシュされたデータファイルから、インスタンスを識別することができる。例えば、コントローラは、クライアントからネットワークトラフィックをダイレクトするために、サービスの利用可能なインスタンスのリストを伴って構成される、またはそれを記憶することができる。コントローラは、クラウドＡＰＩを使用し、第１のサービスの第１のインスタンス、第１のサービスの第２のインスタンス、第２のサービスの第１のインスタンス、および第２のサービスの第２のインスタンスの各々に対するメタデータを受信することができる。例えば、コントローラは、クラウドＡＰＩを使用して、１つ以上のクエリを生成することができる。コントローラは、メタデータに基づいて、第１のサービスの第１のインスタンスのための第１のエッジ重量、第１のサービスの第２のインスタンスのための第２のエッジ重量、第２のサービスの第１のインスタンスのための第３のエッジ重量、および第２のサービスの第２のインスタンスのための第４のエッジ重量を決定することができる。エッジ重量は、インスタンスのための環境重量を含む、または示すことができる。重量は、クラウド上のインスタンスの性能のレベルを示すことができる。重量は、インスタンスの効率のレベルを示すことができる。重量は、サービスチェーン内で１つのインスタンスから別のインスタンスにデータを伝送する効率のレベルを示すことができる。コントローラは、第３のエッジ重量との第１のエッジ重量の組み合わせに基づいて、第１のパスのための第１のパス重量を生成することができる。コントローラは、第４のエッジ重量との第２のエッジ重量の組み合わせに基づいて、第２のパスのための第２のパス重量を生成することができる。
【０２９２】
コントローラは、インスタンスのためのアカウント情報およびデバイスの属性に基づいて、重量を決定することができる。インスタンスまたはインスタンスの仮想サーバのためのアカウント情報は、インスタンスがトラフィックをダイレクトするサービスのメタデータを指すことができる。デバイスの属性は、アプライアンス、中間デバイス、インスタンス、または負荷平衡装置の属性を指すことができる。属性は、例えば、場所、配置、容量、アクティブ接続の数、メモリ、ＣＰＵ使用量、帯域幅、またはネットワークコネクティビティを含むことができる。コントローラは、インスタンス自体またはインスタンスの仮想サーバの属性に基づいて、およびインスタンスのためのアカウント情報（例えば、インスタンスがトラフィックをダイレクトするバックエンドサーバと関連付けられるアカウント情報）を使用して、重量を決定することができる。
【０２９３】
いくつかの実施形態では、コントローラは、サービスチェーンの各々に対するパス重量に基づいて、各サービスチェーンをランク付けすることができる。コントローラは、昇順または降順でサービスチェーンをランク付けすることができる。コントローラは、ランキングに基づいて、複数のサービスチェーンのうちの所定数の最高ランキングサービスチェーンを選択し、サービスチェーンのサブセットを生成することができる。サービスチェーンのサブセットは、サービスチェーンの最適なセットまたは最適なサービスチェーンを指すことができる。これらのサービスチェーンは、クラウドコンピューティング環境の同一のサービスを提供するように構成される他の利用可能なサービスチェーンに対して、最適または最良性能であり得る。例えば、全てのサービスチェーンは、１つまたは複数の同一のサービスを提供することができるが、各サービスチェーンは、別のサービスチェーンと異なる少なくとも１つのインスタンスを含むため、別のサービスチェーンと異なり得る。例えば、サービスチェーンのうちのいずれも、別のサービスチェーンと同一のサービスチェーンの全てを含まない。
【０２９４】
いくつかの実施形態では、コントローラは、最適なサービスチェーンのセットを分析または解析し、利用可能である、またはコンピューティングインフラストラクチャによって提供される１つ以上のインスタンスが、最適なサービスチェーンのセットの中に表されない、または含まれないことを決定することができる。少なくとも１つの欠落しているインスタンスがあることを決定することに応答して、コントローラは、欠落しているインスタンスを決定することができる。コントローラは、次いで、パス重量に基づいて、記憶されたサービスチェーンのリストを記憶するテーブルにアクセスし、欠落しているサービスチェーンを含む、次の最高性能サービスチェーンを識別することができる。コントローラは、本付加的サービスチェーンを最適なサービスチェーンのサブセットに追加することができる。コントローラは、全ての利用可能なインスタンスが最適なサービスチェーンのセットの中に表される、または含まれるまで、本プロセスを繰り返すことができる。したがって、コントローラは、サービスチェーンのサブセットを修正し、複数のサービスチェーンのうちの１つ以上の付加的サービスチェーンを含むことができ、１つ以上の付加的サービスチェーンは、サービスの１つ以上の欠落しているインスタンスを備える。
【０２９５】
ステップ７９０では、コントローラは、複数のサービスチェーンのうちのサービスチェーンを選択し、クライアントからネットワークトラフィックをダイレクトすることができる。コントローラは、負荷平衡機能およびインスタンスの各々に対するパス重量に基づいて、サービスチェーンを選択することができる。例えば、コントローラは、より高い重量が改良された性能を示す場合に、最高パス重量に対応するサービスチェーンを選択することができる。別の実施例では、より高い重量は、減少した性能を示してもよく、したがって、コントローラは、最低パス重量に対応するサービスチェーンを選択してもよい。いくつかの実施形態では、コントローラは、加重最小接続機能等の加重負荷平衡機能を使用することができる。コントローラは、選択された最適なサービスチェーンを負荷平衡装置に入力し、または別様に選択された最適なサービスチェーンについての情報を識別し、または負荷平衡装置に提供し、クライアントからの要求、またはクライアントからトラフィックを受信することに応答して、サービスチェーンを負荷平衡することができる。
【０２９６】
いくつかの実施形態では、負荷平衡機能およびパス重量に基づいてサービスチェーンを選択することに応じて、コントローラは、選択されたサービスチェーンのパスを介して、クライアントからネットワークをダイレクトすることができる。コントローラは、選択されたサービスチェーンのパスの中のインスタンスを識別する情報とともに、クライアントからのトラフィックをカプセル化することができる。コントローラは、選択されたサービスチェーンのパスの中のインスタンスのそれぞれの標識または他の識別子とともに、トラフィックをカプセル化することができる。コントローラは、トラフィックを選択されたサービスチェーンの中の第１のインスタンスにダイレクトすることができる。第１のインスタンスは、次いで、トラフィックを選択されたサービスチェーンの中の第２のインスタンスにダイレクトしてもよい。第１のインスタンスは、カプセル化された情報に基づいて、第２のインスタンスを識別することができる。ある場合には、第１のインスタンスは、トラフィックを処理し、次いで、カプセル化された情報を解析し、選択されたサービスチェーンのパスの中の第２のインスタンスを識別し得る、ルータまたはスイッチに処理されたトラフィックを転送することができる。ある場合には、カプセル化された情報は、サービスチェーンのパスの中のインスタンスの各々に対するＩＰアドレスを含む、または示すことができる。
【０２９７】
ここで図８を参照すると、サービスチェーンを負荷平衡するためのシステム８００の実施形態の機能ブロック図が示されている。システム８００は、図１−７Ａまたは９Ａ−９Ｃで描写される１つ以上のコンポーネントまたはシステムによって実施されることができる。システム８００は、コンピューティングインフラストラクチャ８０５またはクラウド環境８０５を含むことができる。コンピューティングインフラストラクチャ８０５は、ネットワーク（例えば、ネットワーク１０４）を介して、１つ以上のクライアント１０２ａ−ｎからクライアントトラフィック８５０を受信および伝送することができる。コンピューティングインフラストラクチャ８０５は、コントローラ７０５、メタデータサーバ８２０、および１つ以上のサービスまたはサーバ８４５ａ−ｅを含む、提供する、またはそれらと関連付けられることができる。コントローラ７０５は、１つ以上の制御プレーンデーモン８２５ａ−ｃを含むことができる。制御プレーンデーモンのうちの１つ以上のものは、クラウド認識デーモン８２５ａを含むことができる。コントローラ７０５は、データプレーン８３５を含むことができる。データプレーンは、ＶＩＰ２  ８４０（例えば、クライアントトラフィックを１つ以上のサーバにダイレクトするように構成されるｖＳｅｒｖｅｒ２７５）を含むことができる。
【０２９８】
ステップ８６５では、クラウド認識デーモン８２５ａは、メタデータサーバ８２０からメタデータをフェッチする、または読み出すことができる。ステップ８７０では、クラウド認識デーモン８２５ａは、受信されたメタデータを使用して、インスタンスの各々に対してクラウド重量を決定することができる。例えば、ＶＩＰ２  ８４０インスタンスのためのクラウド重量は、ａ、ｂ、ｃ、ｄ、およびｅであることができる。ステップ８７５では、クラウド認識デーモン８２５ａは、クラウド重量をデータプレーン８３５にパスする。コントローラ７０５は、次いで、クラウド重量を使用し、コンピューティングインフラストラクチャ８０５によって提供される各サービスチェーンに対してパス重量を決定することができる。ステップ８８０では、コントローラ７０５は、１つ以上の負荷平衡アルゴリズムとともにパス重量を使用し、サービスチェーンを選択して、１つ以上のクライアント１０２ａ−ｎからトラフィックをダイレクトすることができる。
【０２９９】
ここで図９Ａを参照すると、サービスチェーンを負荷平衡するように構成されるコンピューティングインフラストラクチャ９００の実施形態の機能ブロック図が示されている。コンピューティングインフラストラクチャ９００（またはクラウド環境９００）は、サービスチェーンを介して、サービスを１つ以上のクライアント１０２ａ−ｎに配信する。例えば、いくつかの実施形態では、コンピューティングインフラストラクチャ９００は、以下のサービスをともにグループ化、リンク、または連鎖するサービスチェーン、すなわち、ファイアウォール（ＦＷ）・侵入検出システム（ＩＤＳ）・ウェブサービス（ＷＳ）を伴って構成されることができる。コンピューティングインフラストラクチャは、以下のような各サービスの複数のインスタンス、すなわち、ファイアウォールサービスの３つのインスタンス、ＩＤＳサービスの２つのインスタンス、およびウェブサービスの３つのインスタンスを含むことができる。コントローラは、以下のような各サービスチェーンの数に基づくサービスチェーンのためのパスの総数、すなわち、３つのＦＷ×２つのＩＤＳ×３つのＷＳ＝１８個のパスを決定することができる。
【０３００】
サービスのインスタンスは、１つ以上のゾーンまたはクラウドパーティション内で実行することができる。例えば、コンピューティングインフラストラクチャ９００は、第１のクラウドパーティションＣＰ１と、第２のクラウドパーティションＣＰ２とを含むことができる。第１のクラウドパーティションＣＰ１はさらに、２つのサブパーティションＣＰ１．１およびＣＰ１．２を含むことができる。第２のクラウドパーティションＣＰ２は、サブパーティションＣＰ２．１を含むことができる。コンピューティングインフラストラクチャ９００は、以下のようにクラウドパーティション上の３つの異なるサービスの１つ以上のインスタンスを実行することができる、すなわち、ファイアウォール（ＦＷ１）の第１のインスタンスは、ＣＰ１．１上で実行することができ、ファイアウォール（ＦＷ２）の第２のインスタンスは、ＣＰ１．２上で実行することができ、ファイアウォール（ＦＷ３）の第３のインスタンスは、ＣＰ２．１上で実行することができ、侵入検出システム（ＩＤＳ１）の第１のインスタンスは、ＣＰ１．２上で実行することができ、侵入検出システム（ＩＤＳ２）の第２のインスタンスは、ＣＰ２．１上で実行することができ、ウェブサービス（ＷＳ１）の第１のインスタンスは、ＣＰ１．２上で実行することができ、ウェブサービス（ＷＳ２）の第２のインスタンスは、ＣＰ２．１上で実行することができ、ウェブサービス（ＷＳ３）の第３のインスタンスは、ＣＰ１．１上で実行することができる。
【０３０１】
コントローラ７０５は、インスタンスの各々に対する情報リポジトリからメタデータを受信し、インスタンスの場所、容量、プロセッサ、構成、メモリ、ネットワーク接続、またはインスタンスのそれぞれの重量に基づいてパス重量を決定することを促進し得る、他のメタデータまたは情報を決定することができる。コントローラは、情報リポジトリから受信されるメタデータを使用して、各インスタンスに対してエッジ重量を決定することができる。コントローラは、エッジ重量を使用し、表４に図示されるようなパス重量を決定することができる。
【表４−１】
2019518272.tif 000006
【表４−２】
2019518272.tif 000007
【０３０２】
表４に図示されるパス重量は、１つ以上のパス重量計算技法またはアルゴリズムを使用して、決定されることができる。コントローラは、重量割当アルゴリズムに応じて、昇順または降順で表４に図示されるパス重量をソートすることができる。例えば、コントローラは、最高ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も効率的から最も非効率的までパス重量をランク付けすることができる。ある場合には、コントローラは、最低ランキングパス重量が最も効率的なサービスチェーンに対応するように、最も非効率的から最も効率的までパス重量をランク付けすることができる。表５は、ランク付けまたはソートされたパス重量を図示する。
【表５−１】
2019518272.tif 000008
【表５−２】
2019518272.tif 000009
【０３０３】
コントローラは、表５に示されるソートまたはランク付けされた表に基づいて、１つ以上の最適なサービスチェーンまたはパスを選択することができる。コントローラは、所定数の最高ランキングパスを選択することができ、最高ランキングは、最も効率的または最適なパスに対応することができる。例えば、コントローラは、以下のようなソートされた表の最上位の３つのエントリ、すなわち、Ｐ１：ＦＷ１→ＩＤＳ１→ＷＳ１（最適なパス１）、Ｐ７：ＦＷ２→ＩＤＳ１→ＷＳ１（最適なパス２）、Ｐ３：ＦＷ１→ＩＤＳ１→ＷＳ３（最適なパス３）を選択することができる。コントローラは、最上位の３つのエントリによって示されるパスを使用し、より効率的に（例えば、少ない待ち時間、より少ないオーバーヘッド、高いスループット、低いコスト等）トラフィックを処理することができる。
【０３０４】
いくつかの実施形態では、コントローラは、１８個全ての可能性として考えられるパスを分析し、最高ランキングパスを選択することができる。いくつかの実施形態では、コントローラは、機械学習技法またはプルーニング技法を使用し、全ての可能性として考えられるパスを分析することなく、最適なパスを選択することができる。例えば、コントローラは、少なくとも２つのインスタンスが同一のデータセンターゾーンまたはパーティション内にないパスが、あまり効率的ではないことを決定し、ソートされた表５を作成することに先立って、表４からこれらのパスを除外することができる。
【０３０５】
いくつかの実施形態では、コントローラは、選択された最適なパスから欠落している、コンピューティングインフラストラクチャによって提供される任意のインスタンスがあるかどうかを決定することができ、全てのインスタンスを網羅する付加的パスを含む。コントローラは、欠落しているインスタンスを識別し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、サービスチェーンを負荷平衡するためにコントローラによって利用されるように、付加的パスを選択することができる。例えば、３つの選択された最適なパス１、２、または３のうちのいずれも、インスタンスＦＷ３、ＩＤＳ２、およびＷＳ２を含まない。コントローラは、次いで、ソートされた表３を解析し、これらのインスタンスのうちの１つ以上のものを含む、付加的な最適なパスを識別することができる。例えば、コントローラは、Ｐ１７：ＦＷ３→ＩＤＳ２→ＷＳ２（最適なパス４）として、欠落しているインスタンスのうちの１つ以上のものを含む、最高ランキングパスを選択することができる。ある場合には、コントローラは、表を繰り返し解析し、コンピューティングインフラストラクチャによって提供される全てのインスタンスが、選択された最適なパスの中で表されるまで、欠落しているインスタンスを含む最高ランキングパスを選択することができる。
【０３０６】
ここで図９Ｂを参照すると、サービスチェーンを負荷平衡するように構成されるコンピューティングインフラストラクチャ９００の実施形態の機能ブロック図が示されている。コントローラ７０５によって選択される４つの最適なパスまたはサービスチェーンが、負荷平衡装置アルゴリズムの中へロードされる。例えば、コントローラ７０５は、対応するパス重量とともに、選択された最適なパスを受信するように構成される、負荷平衡装置を含むことができる。選択された最適なパスは、
インスタンスＦＷ１、ＩＤＳ１、およびＷＳ１、およびＰ１のパス重量を有する、サービスチェーン１と、
インスタンスＦＷ２、ＩＤＳ１、およびＷＳ１、およびＰ７のパス重量を有する、サービスチェーン２と、
インスタンスＦＷ１、ＩＤＳ１、およびＷＳ３、およびＰ３のパス重量を有する、サービスチェーン３と、
【０３０７】
インスタンスＦＷ３、ＩＤＳ２、およびＷＳ２、およびＰ１７のパス重量を有する、サービスチェーン４と、
を含むことができる。
【０３０８】
コントローラ７０５は、これら４つのサービスチェーンが最適なサービスチェーンであることを決定することができる。コントローラ７０５がクライアントからトラフィックを受信するとき、コントローラ７０５は、負荷平衡機能および４つの最適なサービスチェーンのそれぞれのパス重量に基づいて、４つの最適なサービスチェーンからサービスチェーンを選択することができる。コントローラ７０５は、次いで、クライアントから、選択されたサービスチェーンまたは選択されたサービスチェーンのインスタンスへとトラフィックをダイレクトすることができる。いくつかの実施形態では、コントローラ７０５は、サービスチェーンのインスタンスのインジケーション、識別子、または標識とともに、クライアントからのトラフィックのデータパケットをカプセル化することができる。例えば、コントローラは、マルチプロトコル標識技法を用いて、データパケットをカプセル化することができる。標識は、パケットをサービスチェーンの中の後続のノードまたはインスタンスへとダイレクトするようにサービスチェーンの中のコンポーネントに命令することができる。標識は、サービスチェーンのインスタンスのＩＰアドレスまたは他の識別子を含むことができる。インスタンスは、識別子を使用して検索を実施し、サービスチェーンの後続のインスタンスのＩＰアドレスを決定し、次いで、データパケットを識別されたインスタンスにダイレクトするように構成されることができる。いくつかの実施形態では、インターフェースまたはルータは、データパケットをカプセル化する情報に基づいて、１つのインスタンスから次のインスタンスにデータをダイレクトすることができる。例えば、第１のインスタンスがデータパケットを処理するとき、第１のインスタンスは、パケットをカプセル化し、第１のインスタンスがパケットを処理したことを示すことができる。ルータまたはスイッチは、パケットを解析し、第１のインスタンスがパケットをすでに処理しており、パケットがコントローラ７０５によって実施されるカプセル化によって識別される第２のインスタンスに転送される準備ができていることを決定することができる。
【０３０９】
ここで図９Ｃを参照すると、サービスチェーンを負荷平衡するように構成されるコンピューティングインフラストラクチャ９００の実施形態の機能ブロック図が示されている。図９Ｃは、コントローラ７０５によって選択された４つの最適なサービスチェーンを図示する。最適なサービスチェーンを決定することによって、コントローラ７０５は、クラウドパーティションまたはクラウドサブパーティションの間の横断の数を削減することができる。図９Ｃに図示されるように、選択された最適なパスは、任意のパスの中の２回の横断から４回の横断に及ぶ。例えば、サービスチェーン１は、インスタンスＦＷ１、ＩＤＳ１、およびＷＳ１を有する。コントローラ７０５は、第１に、クライアントからＦＷ１にパケットをダイレクトする。本初期リンクは、コントローラ７０５およびＦＷ１が両方とも同一のクラウドサブパーティションＣＰ１．１内にあるため、任意のクラウドパーティションを横断するようにパケットに要求しない。第２に、ＦＷ１は、データパケットをＩＤＳ１に転送することができる。本第２のリンクは、パケットにＣＰ１．１およびＣＰ１．２の境界を横断させ、ＩＤＳ１に到達させる。したがって、データパケットは、チェーンの中の第２のリンクをトラバースするときに、２つのパーティション境界を横断する。ＩＤＳ１は、次いで、データパケットをＷＳ１に転送することができる。ＩＤＳ１およびＷＳ１が同一のサブパーティションＣＰ１．２内にあるため、データは、いかなるさらなる境界も横断しない。したがって、サービスチェーン１は、２つのパーティション境界を横断するパスを有する。しかしながら、パスは、クラウドパーティションＣＰ１内に留まる。サービスチェーン１が２回だけの横断を有し、サービスチェーンがＣＰ１内に留まり、コントローラ７０５およびＦＷ１が同一のクラウドサブパーティションＣＰ１．１内にあるため、サービスチェーン１は、他の３つのサービスチェーンに対して最高パス重量を有してもよい。
【０３１０】
サービスチェーン２は、インスタンスＦＷ２、ＩＤＳ１、およびＷＳ１を有する。第１に、コントローラ７０５は、クライアントからＦＷ２にデータを転送する。本初期リンクでは、データは、ＣＰ１．１からＣＰ１．２まで横断するが、ＣＰ１内に留まる。したがって、パスの中の第１のリンクは、２回の横断を有する。第２に、データは、ＦＷ２から、同一のＣＰ１．２サブパーティション内にあるＩＤＳ１までトラバースする。第３に、データは、ＩＤＳ１から、同一のＣＰ１．２サブパーティション内にあるＷＳ１までトラバースする。したがって、サービスチェーン２は、パスが２回だけの横断を有するため、第２の最高パス重量を有してもよい。これは、コントローラ７０５がＦＷ２と異なるサブパーティション内にあるため、２番目に最高であり得る。
【０３１１】
サービスチェーン３は、インスタンスＦＷ１、ＩＤＳ１、およびＷＳ３を有する。第１に、コントローラ７０５は、クライアントからＦＷ１にパケットを転送する。本初期リンクは、いかなる境界も横断せず、サブパーティションＣＰ１．１に封入される。第２に、データは、サブパーティションＣＰ１．１からサブパーティションＣＰ１．２まで進むことによって、ＦＷ１からＩＤＳ１までトラバースする。パスの本区間は、２回の横断を有するが、クラウドパーティションＣＰ１内に留まる。第３に、データは、ＣＰ１．２からＣＰ１．１に戻ることによって、ＩＤＳ１からＷＳ３まで横断する。パスの本区間は、さらに２回の横断を導入する。したがって、サービスチェーン３は、サブパーティションを通して４回のカットまたは横断を含むが、パーティションＣＰ１内に留まる。本サービスチェーンは、より高い性能のサービスチェーンよりも２つ多い横断である、４回の横断を有するため、第３の最高性能のサービスチェーンであってもよい。
【０３１２】
サービスチェーン４は、インスタンスＦＷ３、ＩＤＳ２、およびＷＳ２を有する。第１に、コントローラ７０５は、ＣＰ１．１からＣＰ２．１までトラバースすることによって、クライアントから受信されるデータをＦＷ３に転送する。パスの本区間は、データがサブパーティションＣＰ１．１の境界、パーティションＣＰ１の境界、パーティションＣＰ２の境界、次いで、サブパーティションＣＰ２．１の境界を横断するため、４回の横断を含む。第２に、データは、ＦＷ３からＩＤＳ２まで進む。パスの本区間は、ＦＷ３およびＩＤＳ２が両方ともクラウドサブパーティションＣＰ２．１の中に位置するため、いかなるさらなる横断も導入しない。第３に、データは、ＩＤＳ２からＷＳ２まで進む。パスの本区間は、ＩＤＳ２およびＷＳ２が両方ともクラウドサブパーティションＣＰ２．１の中に位置するため、いかなるさらなる横断も導入しない。本サービスチェーンのパスは、４回の横断を含む。これは、２つの最上位性能サービスチェーンよりも２つ多い横断である、４回の横断を有するため、かつパスが高レベルクラウドパーティションＣＰ１からＣＰ２を横断するため、４つの選択された最適なサービスチェーンのうちの最低性能サービスチェーンであってもよい。例えば、ＣＰ１およびＣＰ２は、異なるデータセンタまたは異なるラック内で地理的に分散されてもよい。
【０３１３】
図１０は、サービスチェーンを負荷平衡する実施形態の機能フロー図である。フロー１０００は、図１−７Ａ、８、または９Ａ−９Ｃに説明される１つ以上のシステムまたはコンポーネントを使用して、実施されることができる。フロー１０００のステップ１００５では、コントローラは、コンピューティングインフラストラクチャによって提供されるインスタンスの全ての重量をゼロまたはデフォルト値（例えば、０、１、２、３、４、またはある他のデフォルト値）に初期化する。ステップ１０１０では、コントローラは、コンピューティングインフラストラクチャによって提供されるインスタンスについてのメタデータを記憶する情報リポジトリを有する、メタデータサーバのための１つ以上のクエリを生成することができる。コントローラは、要求をメタデータサーバに伝送することができる。要求に応答して、コントローラは、各インスタンスに対してメタデータを受信することができる。ステップ１０１５では、コントローラは、各インスタンスに対して環境の暗示的重量を計算または決定することができる。重量は、各インスタンスに対してエッジ重量または環境重量を指すことができる。
【０３１４】
ステップ１０２０では、コントローラは、ステップ１０１５において各インスタンスに対して計算される重量を、インスタンスのそれぞれについて前もって決定された重量と比較することができる。例えば、コントローラは、重量の前の値または履歴重量値を記憶することができる。各インスタンスに対する前の重量値は、インスタンスを備えるサービスチェーンのためのパス重量を決定するために使用されている場合がある。コントローラは、ステップ１０１５において決定される新しい重量を前の重量と比較し、重量に差があるかどうかを決定することができる。重量の差は、ステップ１０１０においてメタデータサーバから受信される、新しいまたは更新されたメタデータに応答し得る。重量の差がない場合、コントローラは、ステップ１０２５に進むことができ、その時点で、コントローラは、所定の時間間隔にわたってスリープする、またはスタンバイモードになることができる。所定の時間間隔の満了に応じて、コントローラは、ステップ１０１０に進み、再びメタデータサーバにクエリを行うことができる。コントローラは、コントローラがステップ１０２０において重量の変化を識別するまで、サイクルを繰り返すことができる。
【０３１５】
コントローラが、同一のインスタンスの前の重量と比較して、ステップ１０２０において任意のインスタンスの重量の変化があることを決定する場合、コントローラは、ステップ１０３０に進むことができる。ステップ１０３０では、コントローラは、コンピューティングインフラストラクチャのインスタンスから形成される、全ての可能性として考えられるパスのためのパス重量を計算することができる。コントローラは、サービスチェーンの各インスタンスの環境重量またはエッジ重量を組み合わせることによって、各サービスチェーンに対してパス重量を決定することができる。ステップ１０３５では、コントローラは、最高性能サービスチェーンが最上位サービスチェーンとしてランク付けまたはソートされるように、パス重量に基づいてサービスチェーンをソートすることができる。ある場合には、コントローラは、パス重量に基づいて、最後のランクのサービスチェーンが最高性能サービスチェーンであるように、昇順でサービスチェーンをソートすることができる。
【０３１６】
ステップ１０４０では、コントローラは、ソートされた表から、３つのサービスチェーン等の所定数の最上位性能サービスチェーンを選択することができる。ステップ１０４５では、コントローラは、最上位の３つの選択されたサービスチェーンを解析し、選択されたサービスチェーンが、少なくとも１回、コンピューティングインフラストラクチャによって提供される全インスタンスを含むかどうかを決定することができる。コントローラが、コンピューティングインフラストラクチャによって提供されるインスタンスが選択されたサービスチェーンから欠落していることを決定する場合、コントローラは、ステップ１０５０に進むことができる。ステップ１０５０では、欠落しているインスタンスがあることを決定することに応答して、コントローラは、ソートされた表を解析し、欠落しているインスタンスを含む、次の最高ランクのサービスチェーンを識別することができる。コントローラは、本付加的インスタンスを選択されたインスタンスのセットに追加することができる。例えば、選択されたインスタンスのセットが最初に３つのサービスチェーンを含んだ場合、コントローラは、第４のサービスチェーンを本セットに追加することができ、第４のサービスチェーンは、欠落しているインスタンスを含む。
【０３１７】
コントローラは、ステップ１０４５に戻り、４つの選択されたサービスチェーンのセットが、少なくとも１回、サービスチェーンによって提供される全てのインスタンスを含むかどうかを決定することができる。コントローラは、選択されたサービスチェーンのセットが、クラウドコンピューティングインフラストラクチャによって提供されるインスタンスの全てを含むまで、プロセスを繰り返すことができる。
【０３１８】
ステップ１０５５では、選択されたサービスチェーンが、コンピューティングインフラストラクチャによって提供されるサービスのインスタンスの全てを含むことを決定することに応答して、コントローラは、負荷平衡システムにおいてサービスチェーンとして選択された最適なパスを構成することができる。ある場合には、コントローラは、負荷平衡装置を含むことができる。ある場合には、負荷平衡装置は、コントローラの外部にあり得る、またはコントローラと異なる仮想マシンによって実行されてもよい。ステップ１０６０では、コントローラは、各サービスチェーンのパス重量を使用し、サービスチェーンを負荷平衡するように、負荷平衡装置を構成することができる。コントローラまたは負荷平衡装置は、次いで、負荷平衡機能およびパス重量に基づいて、選択された最適なサービスチェーンからサービスチェーンを選択することができる。
【０３１９】
コントローラは、次いで、ステップ１０２５に進み、所定の時間間隔（例えば、５秒、１０秒、３０秒、５分、１０分、３０分、１時間、２時間、３時間、６時間、１２時間、２４時間、４８時間、７２時間、１週間、またはサービスチェーンを負荷平衡することを促進するある他の間隔）にわたってスリープまたはスタンバイモードになることができる。
【０３２０】
上記で説明されるシステムは、これらのコンポーネントのうちのいずれかまたはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型マシンの上、またはいくつかの実施形態では、分散システム内の複数のマシンのいずれかの上に提供され得ることを理解されたい。上記で説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせを生産するために、プログラミングおよび／または工学技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記で説明されるシステムおよび方法は、１つ以上の製造品の上または中で具現化される、１つ以上のコンピュータ可読プログラムとして提供されてもよい。本明細書で使用されるような「製造品」という用語は、１つ以上のコンピュータ可読デバイス、ファームウェア、プログラマブル論理、メモリデバイス（例えば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＳＲＡＭ等）、ハードウェア（例えば、集積回路チップ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）等）、電子デバイス、コンピュータ可読不揮発性記憶ユニット（例えば、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、ハードディスクドライブ等）からアクセス可能であり、かつそれに組み込まれる、コードまたは論理を包含することを意図している。製造品は、ネットワーク伝送線、無線伝送媒体、空間を通して伝搬する信号、電波、赤外線信号等を介したコンピュータ可読プログラムへのアクセスを提供する、ファイルサーバからアクセス可能であり得る。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、ハードウェア論理、およびプロセッサによって実行されるコンピュータ可読媒体に組み込まれるソフトウェアまたはプログラマブルコードを含む。一般に、コンピュータ可読プログラムは、ＬＩＳＰ、ＰＥＲＬ、Ｃ、Ｃ＋＋、Ｃ＃、ＰＲＯＬＯＧ等の任意のプログラミング言語で、またはＪＡＶＡ（登録商標）等の任意のバイトコード言語で実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして１つ以上の製造品の上または中に記憶されてもよい。
【０３２１】
「または」の言及は、「または」を使用して説明される任意の用語が、単一、１つを上回る、または全ての説明される用語のうちのいずれかを示し得るように、包括的として解釈され得る。
【０３２２】
方法およびシステムの種々の実施形態が説明されているが、これらの実施形態は、例示的であり、説明される方法またはシステムの範囲をいかようにも限定しない。当業者は、説明される方法およびシステムの最も広い範囲から逸脱することなく、説明される方法およびシステムの形態および詳細への変更を達成することができる。したがって、本明細書に説明される方法およびシステムの範囲は、例示的実施形態のうちのいずれによっても限定されるべきではなく、付随の請求項およびそれらの均等物に従って定義されるべきである。
【図１Ａ】
2019518272.tif 000010
【図１Ｂ】
2019518272.tif 000011
【図１Ｃ】
2019518272.tif 000012
【図１Ｄ】
2019518272.tif 000013
【図１Ｅ】
2019518272.tif 000014
【図１Ｆ】
2019518272.tif 000015
【図１Ｇ】
2019518272.tif 000016
【図１Ｈ】
2019518272.tif 000017
【図２Ａ】
2019518272.tif 000018
【図２Ｂ】
2019518272.tif 000019
【図３】
2019518272.tif 000020
【図４Ａ】
2019518272.tif 000021
【図４Ｂ】
2019518272.tif 000022
【図４Ｃ】
2019518272.tif 000023
【図５】
2019518272.tif 000024
【図６】
2019518272.tif 000025
【図７Ａ】
2019518272.tif 000026
【図７Ｂ】
2019518272.tif 000027
【図８】
2019518272.tif 000028
【図９Ａ】
2019518272.tif 000029
【図９Ｂ】
2019518272.tif 000030
【図９Ｃ】
2019518272.tif 000031
【図１０】
2019518272.tif 000032
【国際調査報告】
2019518272.tif 000033
2019518272.tif 000034
2019518272.tif 000035