(57)【要約】本開示は、仲介デバイスを介してセッションを維持するシステムおよび方法を対象とする。クライアントおよび複数のサーバを仲介する第１のデバイスが、セッションのパケットを受信する。セッションのパケットは、セッションを介してアクセスされるアプリケーションの状態を維持するために使用される、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含む。第１のデバイスは、セッションのセッション状態を更新状態にマーキングする。第１のデバイスは、クライアントおよび複数のサーバを仲介する第２のデバイスが準備完了状態であって、セッションのセッション状態が更新状態であることを判定する。
2019502972.tif 000002
【特許請求の範囲】
【請求項１】
仲介手段を介してセッションを維持する方法であって、
クライアントおよび複数のサーバを仲介する第１のデバイスによって、前記セッションを介してアクセスされるアプリケーションの状態を維持するために使用される、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを備える、セッションのパケットを受信するステップであって、前記第１のデバイスは、前記セッションのセッション状態を更新状態にマーキングする、ステップと、
前記第１のデバイスによって、前記クライアントおよび前記複数のサーバを仲介する第２のデバイスが準備完了状態であって、前記セッションのセッション状態が前記更新状態であることを判定するステップと、
前記第１のデバイスによって、前記第２のデバイスが前記準備完了状態にあって、前記セッションが前記更新状態にあることの判定に応答して、前記パケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送し、前記第２のデバイス上で、前記第１のデバイスによって提供される前記セッションを介してアクセスされる前記アプリケーションの同一状態を維持するステップと
を含む、方法。
【請求項２】
前記第２のデバイスの準備完了状態は、前記第２のデバイスが、前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを解析し、前記第２のデバイスのメモリ内に、前記第１のデバイスによって提供される前記セッションを介してアクセスされる前記アプリケーションの同一状態を維持する準備完了状態であることを示す、請求項１に記載の方法。
【請求項３】
前記第１のデバイスは、前記クライアントにアクティブにサービス提供するアクティブモードにあり、前記第２のデバイスは、スタンバイモードにあり、前記第１のデバイスおよび前記第２のデバイスは、アクティブ−スタンバイペアを形成する、請求項１に記載の方法。
【請求項４】
前記セッションの少なくとも一部の間、前記第１のデバイスによって、前記パケットを解析し、前記クライアントにアクティブにサービス提供するステップと、
前記第１のデバイスが、前記クライアントにアクティブにサービス提供し、前記第２のデバイスがスタンバイモードにある間、前記第２のデバイスによって、前記第２のデバイスのメモリ内に、前記第１のデバイスによって提供される前記セッションを介してアクセスされる前記アプリケーションの状態を維持するステップと
を含む、請求項１に記載の方法。
【請求項５】
前記第１のデバイスによって、前記セッションのパラメータに、前記第２のデバイスが前記準備完了状態にあることの判定に応答して、前記第１のデバイスに前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送することを示す、第１の値を設定するステップと、
前記パラメータの第１の値に応答して、前記第１のデバイスによって、前記パケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送するステップと、
前記第２のデバイスによって、前記第２のデバイスのメモリ内に記憶されるセッションデータ構造内に、前記第１のデバイスによって提供される前記セッションを介してアクセスされる前記アプリケーションの状態を維持し、前記第１のデバイス上の前記セッションを介してアクセスされる前記アプリケーションの状態に合致させるステップと
を含む、請求項１に記載の方法。
【請求項６】
前記第１のデバイスがオフラインモードに入ることに応答して前記第１のデバイスが前記オフラインモードに入ることに先立って、前記第１のデバイス上の前記セッションを介してアクセスされる前記アプリケーションの状態に合致する、前記セッションを介してアクセスされる前記アプリケーションの状態を伴って、前記第２のデバイスによって、前記第２のデバイス上で前記セッションを再開するステップを含む、請求項１に記載の方法。
【請求項７】
前記セッションのために使用される第１の接続は、前記第１のデバイスが前記オフラインモードに入ることに応答してリセットされ、前記方法は、
前記第２のデバイスによって、第２の接続を前記クライアントと確立し、前記セッションを再開するステップ
を含む、請求項６に記載の方法。
【請求項８】
ログイン情報を前記クライアントから受信することに応答して、前記第１のデバイスによって、前記クライアントデバイスと前記複数のサーバのサーバとの間のセッションを確立するステップと、
前記第１のデバイスの障害に応答して、前記第２のデバイスによって、前記第２のデバイスが前記ログイン情報を前記クライアントから受信することなく、前記セッションを再開するステップと
をさらに含む、請求項１に記載の方法。
【請求項９】
前記第１のデバイスの障害に応答して、前記第２のデバイスによって、前記セッションを再接続するための要求を前記クライアントによって実行されるエージェントから受信するステップと、
前記第２のデバイスによって、前記第２のデバイスのメモリ内に維持される状態を読み出すステップと、
前記第２のデバイスによって、前記メモリから読み出された状態を伴って、前記セッションを再開するステップと
をさらに含む、請求項１に記載の方法。
【請求項１０】
前記第１のデバイスによって、前記クライアントから、前記アプリケーションを起動するためのインジケーションを受信するステップであって、前記第１のデバイスは、前記クライアントにアクティブにサービス提供するアクティブモードにある、ステップと、
前記第１のデバイスによって前記インジケーションに応答して、前記複数のサーバのサーバへの接続を開始するステップであって、前記サーバは、前記アプリケーションを実行するように構成される、ステップと、
前記第１のデバイスによって、前記クライアントと前記サーバとの間のセッションを確立し、前記サーバによって実行される前記アプリケーションへのアクセスを提供するステップと、
前記第１のデバイスによって、前記第２のデバイスが前記準備完了状態にあることを検出するステップと、
前記セッションの間、前記第１のデバイスによって、前記第２のデバイスに、前記検出に応答して、前記第１のデバイスによって受信されたパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送するステップであって、前記第１のデバイスは、前記アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送し、前記第１のデバイスが、前記パケットを解析し、前記サーバによって実行される前記アプリケーションへのアクセスを提供する間、前記第２のデバイスが、前記第２のデバイスのメモリ内に、前記セッションを介してアクセスされる前記アプリケーションの状態を維持することを可能にする、ステップと
を含む、請求項１に記載の方法。
【請求項１１】
前記パケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送することに続いて、前記第１のデバイスによって、前記第２のデバイスが前記準備完了状態にないことを検出するステップと、
前記第１のデバイスによって、前記セッションのパラメータに、前記第１のデバイスに前記アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを前記第２のデバイスに自動転送しないことを示す、第２の値を設定するステップと、
前記第１のデバイスによって前記パラメータの第２の値に応答して、前記クライアントから受信された前記セッションの第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定するステップと
を含む、請求項１に記載の方法。
【請求項１２】
前記第２のパケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを自動転送しないことの判定に続いて、前記第１のデバイスによって、前記第２のデバイスが前記準備完了状態にあることを検出するステップと、
前記第１のデバイスによって、完全なセッション状態を前記第２のデバイスに提供するステップであって、前記完全なセッション状態は、前記第２のデバイスに自動転送されない前記第２のパケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを含む、ステップと、
前記第２のデバイスによって、前記第２のデバイスのメモリ内に記憶される状態を前記完全なセッション状態で更新し、前記第１のデバイス上に維持される現在のセッション状態に合致させるステップと
を含む、請求項１１に記載の方法。
【請求項１３】
仲介手段を介してセッションを維持するためのシステムであって、
クライアントおよび複数のサーバを仲介する１つまたはそれを上回るプロセッサを備える、第１のデバイスであって、前記第１のデバイスは、
前記セッションを介してアクセスされるアプリケーションの状態を維持するために使用される、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを備える、セッションのパケットを受信することであって、前記第１のデバイスは、前記セッションのセッション状態を更新状態にマーキングする、ことと、
前記クライアントおよび前記複数のサーバを仲介する第２のデバイスが準備完了状態であり、前記セッションのセッション状態が前記更新状態であることを判定することと、
前記クライアントおよび前記複数のサーバを仲介する第２のデバイスに、前記第２のデバイスが前記準備完了状態にあり、前記セッションが前記更新状態にあることの判定に応答して、前記パケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送し、前記第２のデバイス上で、前記第１のデバイスによって提供される前記セッションを介してアクセスされる前記アプリケーションの同一状態を維持することと
を行うように構成される、第１のデバイス
を備える、システム。
【請求項１４】
前記第１のデバイスはさらに、前記セッションの少なくとも一部の間、前記パケットを解析し、前記クライアントにアクティブにサービス提供するように構成され、
前記第２のデバイスは、前記第１のデバイスが、前記クライアントにアクティブにサービス提供し、前記第２のデバイスがスタンバイモードにある間、前記第２のデバイスのメモリ内に、前記第１のデバイスによって提供される前記セッションを介してアクセスされる前記アプリケーションの状態を維持するように構成される、
請求項１３に記載のシステム。
【請求項１５】
前記第１のデバイスはさらに、前記第２のデバイスが前記準備完了状態にあることの判定に応答して、前記第１のデバイスに前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送することを示す、前記セッションのパラメータの第１の値を設定するように構成され、
前記第１のデバイスはさらに、前記パラメータの第１の値に応答して、前記パケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送するように構成され、
前記第２のデバイスはさらに、前記第２のデバイスのメモリ内に記憶されるセッションデータ構造内に、前記第１のデバイスによって提供される前記セッションを介してアクセスされる前記アプリケーションの状態を維持し、前記第１のデバイス上の前記セッションを介してアクセスされる前記アプリケーションの状態に合致させるように構成される、
請求項１３に記載のシステム。
【請求項１６】
前記第２のデバイスはさらに、前記第１のデバイスがオフラインモードに入ることに応答して、前記第１のデバイスが前記オフラインモードに入ることに先立って、前記第１のデバイス上の前記セッションを介してアクセスされる前記アプリケーションの状態に合致する、前記セッションを介してアクセスされる前記アプリケーションの状態を伴って、前記第２のデバイス上で前記セッションを再開するように構成される、請求項１３に記載のシステム。
【請求項１７】
前記第２のデバイスはさらに、
前記第１のデバイスの障害に応答して、前記セッションを再接続するための要求を前記クライアントから受信することと、
前記第２のデバイスのメモリ内に維持される状態を読み出すことと、
前記メモリから読み出されたセッション状態を再開することと
を行うように構成される、請求項１３に記載のシステム。
【請求項１８】
前記第１のデバイスはさらに、
前記クライアントから、アプリケーションを起動するためのインジケーションを受信することであって、前記第１のデバイスは、前記クライアントにアクティブにサービス提供するアクティブモードにある、ことと、
前記インジケーションに応答して、前記複数のサーバのサーバへの接続を開始することであって、前記サーバは、前記アプリケーションを実行するように構成される、ことと、
前記クライアントと前記サーバとの間のセッションを確立し、前記サーバによって実行される前記アプリケーションへのアクセスを提供することと、
前記第２のデバイスが前記準備完了状態にあることを検出することと、
前記第２のデバイスに、前記検出に応答して、前記セッションの間、前記第１のデバイスによって受信されたパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送することであって、前記第１のデバイスは、前記第１のデバイスが、前記パケットを解析し、前記サーバによって実行される前記アプリケーションへのアクセスを提供する間、前記アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送し、前記第２のデバイスが、前記第２のデバイスのメモリ内に、前記セッションを介してアクセスされる前記アプリケーションの状態を維持することを可能にする、ことと
を行うように構成される、請求項１３に記載のシステム。
【請求項１９】
前記第１のデバイスはさらに、
前記パケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送することに続いて、前記第２のデバイスが前記準備完了状態にないことを検出することと、
前記第１のデバイスに前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを前記第２のデバイスに自動転送しないことを示す、第２の値をパラメータに設定することと、
前記パラメータの第２の値に応答して、前記クライアントから受信された前記セッションの第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定することと
を行うように構成される、請求項１３に記載のシステム。
【請求項２０】
前記第１のデバイスはさらに、前記第２のパケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを自動転送しないことの判定に続いて、前記第２のデバイスが前記準備完了状態にあることを検出するように構成され、
前記第１のデバイスはさらに、完全なセッション状態を前記第２のデバイスに提供するように構成され、前記完全なセッション状態は、前記第２のデバイスに自動転送されない前記第２のパケットの前記アプリケーションプロトコルデータおよび前記アプリケーションセッションメタデータを含み、
前記第２のデバイスは、前記第２のデバイスのメモリ内に記憶される状態を前記完全なセッション状態で更新し、前記第１のデバイス上に維持される現在のセッション状態に合致させるように構成される、
請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本願は、２０１５年１０月３０日に出願され、”Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｍａｉｎｔａｉｎｉｎｇ  Ａ  Ｓｅｓｓｉｏｎ  Ｖｉａ  ａｎ  Ｉｎｔｅｒｍｅｄｉａｒｙ  Ｄｅｖｉｃｅ”と題された米国仮出願第１４／９２７６００号の利益およびそれに対する優先権を主張するものであり、該米国仮出願は、あらゆる目的のためにその全体が参照により本明細書中に援用される。
【０００２】
（開示の分野）
本願は、概して、仲介デバイスを介してセッションを維持することに関する。具体的には、本願は、一次仲介デバイスが障害を起こすと、スタンバイ仲介デバイスに維持される、大量の動的状態を用いて、アプリケーションセッションを再開するためのシステムおよび方法に関する。
【背景技術】
【０００３】
（開示の背景）
クライアントデバイスは、クライアントデバイスおよびサーバを仲介する仲介デバイスを介して、サーバによって提供または実行されるアプリケーションに、アクセスする、またはそれを使用することができる。仲介デバイスは、クライアントデバイスとサーバとの間のセッションを確立し、サーバによって実行されるアプリケーションへのアクセスを提供することができる。アプリケーションの状態は、セッションの間、クライアントデバイスがサーバによって実行されるアプリケーションと相互作用するにつれて変化し得る。しかしながら、仲介デバイスが、障害を起こす、または無応答になる場合、セッション状態情報を維持し、クライアントにサーバによって実行されるアプリケーションへのアクセスを提供することが困難であり得る。したがって、コンピュータ環境内のコンピューティングデバイスが障害を起こす、または無応答になる際、アプリケーションリソースの高可用性を効率的に提供することが困難であり得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
本開示は、仲介デバイスを介してセッションを維持するためのシステムおよび方法を対象とする。特に、本ソリューションは、一次デバイスが障害を起こすと、スタンバイ仲介デバイスに維持される、大量の動的状態を用いて、アプリケーションセッションを再開するためのシステムおよび方法に関する。
【０００５】
アプライアンスペアが、複数のクライアントおよび複数のサーバを仲介する、アクティブ−スタンバイアプライアンスペアとして展開されることができる。例えば、アプライアンスペアは、第１のデバイスが、クライアントから受信されたパケットを解析し、クライアントにサーバから受信された応答パケットを提供する、または別様にクライアントにサーバによって実行されるアプリケーションへのアクセスを提供することによって、クライアントからの要求にアクティブにサービス提供する、アクティブモードにある、第１のデバイスを含むことができる。ある場合には、最初に、アクティブモードにあるように構成される、アプライアンスペアの第１のデバイスは、一次デバイスと称され得る。アプライアンスペアは、最初に、スタンバイモードにあるように構成される、第２のデバイスを含むことができる。第２のデバイスは、クライアントデバイスからの要求にアクティブにサービス提供しなくてもよい。第２のデバイスは、スタンバイモードにあって、クライアントから受信された要求にアクティブにサービス提供しない、またはサーバから受信された応答をクライアントに提供しないため、二次デバイスと称され得る。一次デバイスが、障害を起こす、無応答となる、スケジュールされた保守のためにダウンされる、または別様にライアントデバイスとサーバとの間のパケットを処理不能となる場合、二次デバイスは、新しい一次デバイスとなり、クライアント要求を処理することによって、クライアントデバイスにサービス提供することができる。
【０００６】
アプライアンスペア（すなわち、その第１のデバイスまたは第２のデバイス）は、ディープパケットインスペクションをアプリケーショントラフィック上で行うように構成されることができる。アプリケーショントラフィックは、処理される、またはサーバに提供されるべき、クライアントから受信されたパケット、または処理される、またはクライアントに提供されるべき、サーバから受信されたパケットを指し得る。アプライアンスは、ディープパケットインスペクションを行い、セッション状態の可視性を得る、または問題または課題のトラブルシューティングまたは識別を促進することができる。そのような展開では、一次デバイスが、障害を起こし、二次デバイスが、新しい一次デバイスになる場合、アプリケーションサーバプロトコル（例えば、独立コンピューティングアーキテクチャ「ＩＣＡ」）を経由してアプリケーションまたはデスクトップセッションにアクセスする、クライアントデバイスは、セッションから接続解除され得る。クライアントデバイスは、次いで、セッションに再ログインし、仲介デバイスを介してサーバによって提供されるアプリケーションまたはデスクトップセッションにアクセスする必要があり得る。
【０００７】
本ソリューションのシステムおよび方法は、新しい一次仲介デバイス上で影響されたセッションをシームレスに再開することができる。影響されたセッションを新しい一次仲介デバイス上でシームレスに再開することによって、クライアントデバイスは、オリジナル一次仲介デバイスの障害によって影響されず、スタンバイ二次を新しい一次にさせ得る。
【０００８】
例えば、コンピューティングネットワークは、アクティブ−スタンバイアプライアンスペア内に展開される、ネットワーク仲介デバイス（例えば、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって製造されたＮｅｔＳｃａｌｅｒ（Ｒ））を使用して、アプリケーションリソースの高可用性を提供することができる。アクティブ−スタンバイアプライアンスペアでは、第１の仲介デバイスは、クライアントデバイスにアクティブにサービス提供する一方、第２の仲介デバイスは、スタンバイモードに維持される。例えば、実施形態では、第１の仲介デバイスは、アクティブモードにあることができ、ＩＣＡセッション等のアプリケーションセッションを解析および処理することができる。第１の仲介デバイスは、スタンバイモードにある、第２の仲介デバイスとペアリングされることができる。第１の仲介デバイスは、動的であって、パケット毎に（例えば、各パケットが処理されるにつれて）変化し得る、有意な状態情報を維持することができる。第１の仲介デバイスが、障害を起こす場合、スタンバイデバイスは、新しい一次デバイスになることができる。二次デバイスは、新しい一次デバイスになり、クライアントデバイスによって提供されるユーザ体験に影響を及ぼすことなく、セッションを再開することができる。
【０００９】
アプライアンスペア（例えば、第１の仲介デバイス、第２の仲介デバイス、または仲介デバイスのアクティブ−スタンバイペア）は、クライアントデバイスとアプリケーションを提供するサーバとの間のセッションの可視性を提供するように構成されることができる。例えば、仲介デバイスは、トラブルシューティングまたは分析目的のために、プロトコル（例えば、ＩＣＡプロトコルまたは高精細体験「ＨＤＸ」プロトコル）の可視性を提供することができる。プロトコルを解析するために、アプライアンスペアの仲介デバイスは、デバイス内の大量の状態情報を管理する。本状態情報は、例えば、ＩＣＡプロトコルの解析、共通ゲートウェイプロトコル（「ＣＧＰ」）の解析、ＩＣＡフレームの解読および再暗号化、またはＩＣＡフレームの解凍から生じる情報を含むことができる。その結果、仲介デバイスによって維持される状態情報は、非常に大きくなり得（例えば、５メガバイト、５０メガバイト、１００メガバイト、５００メガバイト、または１ギガバイト）、本状態情報は、１つまたはそれを上回るパケットが仲介デバイスによって処理されることに伴って変化し得る（例えば、全てのパケットが処理されることに伴って変化し得る）。
【００１０】
一次仲介デバイスは、セッションあたりの状態を一次仲介デバイスのメモリ内に維持することができる。パケット毎に更新される状態のサイズのため、一次仲介デバイスが状態を外部デバイス（例えば、別の仲介デバイス）内に共有および更新することは、困難または不可能であり得る。一次仲介デバイスが、状態を外部デバイス内に共有および更新することができない場合、一次仲介デバイスのメモリ内に維持される状態は、一次仲介デバイスがオフラインになると、喪失され得る。一次仲介デバイスがオフラインになるにつれて、一次仲介デバイスとの間の接続（例えば、伝送制御プロトコル「ＴＣＰ」接続）は、リセットされ得る。クライアントデバイスと一次仲介デバイスとの間の接続が、リセットされると、クライアントデバイスを実行するエージェントは、セッション再接続を開始し得る。クライアントデバイスのエージェントによって開始されるセッション再接続を介して確立される新しい接続（例えば、ＴＣＰ接続）は、新しい一次仲介デバイス（例えば、以前にスタンバイモードであった第２の仲介デバイス）を介して、ランドオンされるかまたは確立されることができる。本新しい一次仲介デバイスが、セッションに関する状態情報を有していない場合、新しい一次仲介手段は、セッションを再開することが不可能となり得る。本ソリューションのシステムおよび方法は、第２の仲介デバイス（または二次デバイス）が、スタンバイモードにある間、一次仲介デバイスと連携して、状態を第２のデバイス上で維持することを可能にすることができる。したがって、一次仲介デバイスがオフラインになり、二次仲介デバイスが新しい一次役割を引き継ぐと、二次デバイスは、クライアントエージェントによって開始されるセッション再接続を用いてサポートおよび継続することができる。
【００１１】
いくつかの実施形態では、一次仲介デバイスおよび二次仲介デバイスは両方とも、準備完了状態にあることができる。準備完了状態は、デバイスが、準備完了状態であって、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを搬送する、パケットを解析することを示すことができる。アプリケーション起動の間、クライアントデバイス上で実行するエージェントは、プロトコル接続を介して、バックエンドサーバまたは一次仲介デバイスを介してホストに接続するための要求を開始することができる。一次仲介デバイスは、接続を開始し、新しいプロトコル接続に対応するアプリケーションを起動するための要求を検出することができ、一次仲介デバイスは、要求を解析および処理することができる。
【００１２】
一次仲介デバイスが、クライアントデバイス上で実行するエージェントからの要求または他のデータパケットを解析および処理する間、一次仲介デバイスは、二次仲介デバイスが準備完了状態にあることを検出することができる。二次仲介デバイスが準備完了状態にあることの検出に応答して、一次仲介デバイスは、セッションを更新状態にマーキングし、また、要求またはデータパケットに対応するアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを二次仲介デバイスに自動転送することができる。アプリケーションプロトコルデータおよびアプリケーションセッションメタデータは、集合的に、アプリケーションデータと称され得る。アプリケーションプロトコルデータは、高精細体験（「ＨＤＸ」）プロトコルデータを指し得る。アプリケーションセッションデータは、ＨＤＸセッションメタデータを指し得る。二次仲介手段は、アプリケーションデータを受信し、アプリケーションデータまたはそのアプリケーションプロトコルデータまたはアプリケーションセッションメタデータを解析することができる。
【００１３】
したがって、アプリケーションデータを一次デバイスから二次デバイスに自動転送し、二次デバイスに、一次仲介デバイスとして同一アプリケーションプロトコルデータを解析するように命令することによって、本ソリューションのシステムおよび方法は、同一セッション状態をアプライアンスペアの一次仲介デバイスおよび二次仲介デバイスの両方に維持することができる。同一セッション状態を一次および二次仲介デバイスの両方に維持することによって、二次仲介デバイスは、一次仲介デバイスが、障害を起こす、または別様に無応答になると、シームレスに引き継ぐことができる。例えば、一次仲介デバイスが、障害を起こすと、全てのＴＣＰ接続は、リセットされ得る。クライアントデバイス上で実行するエージェントは、セッション再接続プロセスを介して、新しいＣＧＰ／ＩＣＡ接続を確立するための要求を送信する。新しい接続は、新しい一次仲介デバイス（例えば、スタンバイモードにある以前の二次仲介デバイス）においてランドオンすることができる。新しい一次仲介デバイスは、セッション再接続を点検、処理、または分析し、本セッション再接続と関連付けられたセッション状態情報を識別し、読み出すことができる。本セッション状態情報は、新しい一次デバイスが二次仲介デバイスであるとき、前の（例えば、オリジナルまたは初期）一次仲介デバイスからパケット中継を介して、新しい一次デバイスによって作成および維持され得る。
【００１４】
本プロセスのある時点において、オリジナル一次仲介デバイスが、二次仲介デバイス（例えば、スタンバイデバイス）が準備完了状態にない（例えば、二次仲介手段の障害、二次仲介デバイスが無応答である、またはスケジュールまたは未スケジュール保守に起因してオフラインであることに起因して）ことを判定または検出する場合、一次仲介デバイスは、セッションをダウン状態または非準備完了状態にマーキングすることができる。一次仲介デバイスが、セッションをダウン状態にマーキングすると、一次仲介デバイスは、二次仲介デバイスへのアプリケーションプロトコルデータまたはアプリケーションセッションメタデータの自動転送を停止、ブロック、防止、または中止することができる。したがって、セッションがダウン状態にある場合、一次仲介デバイスは、アプリケーションデータを二次仲介デバイスに自動転送しない。
【００１５】
ある後の時点で、一次仲介デバイスが、二次仲介デバイスが、準備完了状態であって、アプリケーションプロトコルデータを解析し、セッション状態を二次仲介デバイスのメモリ内に維持することを示す、二次仲介デバイスが、オンラインに戻った、または準備完了状態に戻ったことを検出する場合、一次仲介デバイスは、セッションをセッション更新状態にマーキングすることができる。ダウン状態から更新状態へのセッション状態の遷移に応答して、一次仲介デバイスは、二次仲介デバイスを最新状態にするように、アプリケーションプロトコルセッション状態を二次仲介デバイスにプッシュ配信、提供、転送、または別様に自動転送することができる。例えば、一次二次デバイスは、完全なアプリケーションプロトコルセッション状態を二次仲介デバイスにプッシュ配信し、二次仲介デバイスを単一通信において最新状態にすることができる。その後、いったん二次仲介デバイスが、一次仲介デバイス内のセッション状態に合致するセッション状態を二次仲介デバイスのメモリ内に維持すると、一次仲介デバイスは、アプリケーションデータを二次仲介デバイスに自動転送または中継し続け、二次仲介デバイスによって維持されるセッション状態と一次仲介デバイスのセッション状態を同期させることができる。
【００１６】
本開示の少なくとも１つの側面は、仲介デバイスを介してセッションを維持する方法を対象とする。本方法は、第１の仲介デバイスと、第２の仲介デバイスとを含む、アプライアンスペアを介して、セッションを維持するステップを含むことができる。いくつかの実施形態では、クライアントおよび複数のサーバを仲介する第１のデバイスは、セッションのパケットを受信する。セッションのパケットは、セッションを介してアクセスされるアプリケーションの状態を維持するために使用される、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含む。第１のデバイスは、セッションのセッション状態を更新状態にマーキングする。第１のデバイスは、クライアントおよび複数のサーバを仲介する第２のデバイスが準備完了状態であって、セッションのセッション状態が更新状態であることを判定する。第１のデバイスは、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送し、第２のデバイス上で、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持する。第１のデバイスは、第２のデバイスが準備完了状態にあって、セッションが更新状態にあることの判定に応答して、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することができる。
【００１７】
第２のデバイスの準備完了状態は、第２のデバイスが、準備完了状態であって、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを解析し、第２のデバイスのメモリ内に、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することを示すことができる。第１のデバイスは、クライアントにアクティブにサービス提供するアクティブモードにあることができ、第２のデバイスは、スタンバイモードにあることができる。第１のデバイスおよび第２のデバイスは、アクティブ−スタンバイペアを形成することができる。
【００１８】
第１のデバイスは、パケットを解析し、セッションの少なくとも一部の間、クライアントにアクティブにサービス提供することができる。第２のデバイスは、第１のデバイスが、クライアントにアクティブにサービス提供する間、スタンバイモードにあって、第２のデバイスのメモリ内に、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの状態を維持することができる。
【００１９】
第１のデバイスは、第１の値をセッションのパラメータに設定することができる。第１の値は、第２のデバイスが準備完了状態にあることの判定に応答して、第１のデバイスにアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することを示すことができる。第１のデバイスは、パラメータの第１の値に応答して、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することができる。第２のデバイスは、第２のデバイスのメモリ内に記憶されるセッションデータ構造内に、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの状態を維持することができる。第２のデバイスは、アプリケーションの状態を維持し、第１のデバイス上のセッションを介してアクセスされるアプリケーションの状態に合致させることができる。
【００２０】
第２のデバイスは、第２のデバイス上でセッションを再開することができる。第２のデバイスは、第１のデバイスがオフラインモードに入ることに応答して、セッションを再開することができる。第２のデバイスは、第１のデバイスがオフラインモードに入ることに先立って、第１のデバイス上のセッションを介してアクセスされるアプリケーションの状態に合致する、セッションを介してアクセスされるアプリケーションの状態を伴って、セッションを再開することができることができる。第１のデバイスが、オフラインモードに入ると、セッションのために使用される第１の接続は、リセットされることができる。第２のデバイスは、次いで、第２の接続をクライアントと確立し、セッションを再開することができる。
【００２１】
第１のデバイスは、ログイン情報をクライアントから受信することに応答して、クライアントデバイスと複数のサーバのサーバとの間のセッションを確立することができる。第２のデバイスは、第１のデバイスの障害に応答して、セッションを再開することができる。第２のデバイスは、第２のデバイスがログイン情報をクライアントから受信することなく、セッションを再開することができる。いくつかの実施形態では、第２のデバイスは、第１のデバイスの障害に応答して、クライアントによって実行されるエージェントからセッションを再接続するための要求を受信することができる。第２のデバイスは、第２のデバイスのメモリ内に維持される状態を読み出すことができる。第２のデバイスは、メモリから読み出された状態を伴って、セッションを再開することができる。
【００２２】
第１のデバイスは、アプリケーションを起動するためのインジケーションを受信することができる。第１のデバイスは、インジケーションをクライアントから受信することができる。第１のデバイスは、クライアントにアクティブにサービス提供するアクティブモードにあることができる。インジケーションに応答して、第１のデバイスは、複数のサーバのサーバへの接続を開始することができる。サーバは、アプリケーションを実行するように構成されることができる。第１のデバイスは、クライアントとサーバとの間のセッションを確立し、サーバによって実行されるアプリケーションへのアクセスを提供することができる。第１のデバイスは、第２のデバイスが準備完了状態にあることを検出することができる。第１のデバイスは、セッションの間、第２のデバイスに、第１のデバイスによって受信されたパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送することができる。第１のデバイスは、第２のデバイスが準備完了状態にあることを検出することに応答して、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送することができる。第１のデバイスは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送し、第１のデバイスが、パケットを解析し、サーバによって実行されるアプリケーションへのアクセスを提供する間、第２のデバイスが、第２のデバイスのメモリ内に、セッションを介してアクセスされるアプリケーションの状態を維持することを可能にすることができる。
【００２３】
ある場合には、第１のデバイスがアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することに続いて、またはその後、第１のデバイスは、第２のデバイスが準備完了状態にないことを検出することができる。第１のデバイスは、次いで、第１のデバイスにアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送しないことを示す、セッションのパラメータの第２の値を設定することができる。第１のデバイスは、クライアントから受信されたセッションの第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定することができる。第１のデバイスは、パラメータの第２の値に応答して、本判定を行うことができる。
【００２４】
ある場合には、第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことの判定に続いて、第１のデバイスは、第２のデバイスが準備完了状態にあることを検出することができる。第１のデバイスは、次いで、完全なセッション状態を第２のデバイスにプッシュ配信することができる。本完全なセッション状態は、第２のデバイスに自動転送されない第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。第２のデバイスは、次いで、第２のデバイスのメモリ内に記憶されるアプリケーションの状態を完全なセッション状態で更新し、第１のデバイス上に維持される現在のセッション状態に合致させることができる。
【００２５】
別の側面は、仲介手段を介してセッションを維持するためのシステムを対象とする。いくつかの実施形態では、本システムは、クライアントおよび複数のサーバを仲介する、第１のデバイスを含むことができる。第１のデバイスは、１つまたはそれを上回るプロセッサと、メモリとを含むことができる。第１のデバイスは、セッションを介してアクセスされるアプリケーションの状態を維持するために使用される、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含む、セッションのパケットを受信するように構成される。第１のデバイスは、セッションのセッション状態を更新状態にマーキングするように構成される。第１のデバイスは、クライアントおよび複数のサーバを仲介する第２のデバイスが準備完了状態であって、セッションのセッション状態が更新状態であることを判定するように構成される。第１のデバイスは、クライアントおよび複数のサーバを仲介する第２のデバイスに、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送し、第２のデバイス上で、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持するように構成される。第１のデバイスは、第２のデバイスが準備完了状態にあって、セッションが更新状態にあることの判定に応答して、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送するように構成される。
【００２６】
第１のデバイスはさらに、セッションの少なくとも一部の間、パケットを解析し、クライアントにアクティブにサービス提供するように構成されることができる。いくつかの実施形態では、本システムは、第１のデバイスが、クライアントにアクティブにサービス提供する間、第２のデバイスのメモリ内に、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの状態を維持するように構成される、第２のデバイスを含むことができる。第２のデバイスは、スタンバイモードにあることができる。
【００２７】
いくつかの実施形態では、第１のデバイスはさらに、第２のデバイスが準備完了状態にあることの判定に応答して、第１のデバイスにアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することを示す、セッションのパラメータの第１の値を設定するように構成されることができる。第１のデバイスはさらに、パラメータの第１の値に応答して、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送するように構成されることができる。第２のデバイスはさらに、第２のデバイスのメモリ内に記憶されるセッションデータ構造内に、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの状態を維持し、第１のデバイス上のセッションを介してアクセスされるアプリケーションの状態に合致させるように構成されることができる。
【００２８】
第２のデバイスはさらに、第１のデバイスがオフラインモードに入ることに応答して、第１のデバイスがオフラインモードに入ることに先立って、第１のデバイス上のセッションを介してアクセスされるアプリケーションの状態に合致する、セッションを介してアクセスされるアプリケーションの状態を伴って、第２のデバイス上でセッションを再開するように構成されることができる。第２のデバイスはさらに、第１のデバイスの障害に応答して、セッションを再接続するための要求をクライアントから受信するように構成されることができる。第２のデバイスは、第２のデバイスのメモリ内に維持される状態を読み出すように構成されることができる。第２のデバイスは、メモリから読み出されたセッション状態を再開するように構成されることができる。
【００２９】
いくつかの実施形態では、第１のデバイスはさらに、クライアントから、アプリケーションを起動するためのインジケーションを受信するように構成されることができる。第１のデバイスは、クライアントにアクティブにサービス提供するアクティブモードにあることができる。第１のデバイスは、インジケーションに応答して、複数のサーバのサーバへの接続を開始するように構成されることができる。サーバは、アプリケーションを実行するように構成されることができる。第１のデバイスは、クライアントとサーバとの間のセッションを確立し、サーバによって実行されるアプリケーションへのアクセスを提供するように構成されることができる。第１のデバイスは、第２のデバイスが準備完了状態にあることを検出するように構成されることができる。第１のデバイスは、セッションの間、第２のデバイスに、第１のデバイスによって受信されたパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送するように構成されることができる。第１のデバイスは、第２のデバイスが準備完了状態にあることの検出に応答して、第１のデバイスが、パケットを解析し、サーバによって実行されるアプリケーションへのアクセスを提供する間、データを自動転送し、第２のデバイスが、第２のデバイスのメモリ内に、セッションを介してアクセスされるアプリケーションの状態を維持することを可能にすることができる。
【００３０】
第１のデバイスはさらに、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することに続いて、第２のデバイスが準備完了状態にないことを検出するように構成されることができる。第１のデバイスは、第１のデバイスにアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送しないことを示す、第２の値をパラメータに設定するように構成されることができる。第１のデバイスは、パラメータの第２の値に応答して、クライアントから受信されたセッションの第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定するように構成されることができる。
【００３１】
第１のデバイスはさらに、第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことの判定に続いて、第２のデバイスが準備完了状態にあることを検出するように構成されることができる。第１のデバイスは、完全なセッション状態を第２のデバイスに提供するように構成されることができる。完全なセッション状態は、第２のデバイスに自動転送されない第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。第２のデバイスは、第２のデバイスのメモリ内に記憶される状態を完全なセッション状態で更新し、第１のデバイス上に維持される現在のセッション状態に合致させるように構成されることができる。
【図面の簡単な説明】
【００３２】
本ソリューションの先述および他の目的、側面、特徴、および利点は、付随の図面と併せて解釈される以下の説明を参照することによって、より明白となり、より理解されるであろう。
【００３３】
【図１Ａ】図１Ａは、クライアントがアプライアンスを介してサーバにアクセスするためのネットワーク環境の実施形態のブロック図である。
【図１Ｂ】図１Ｂは、アプライアンスを介してサーバからクライアントにコンピュータ環境を配信するための環境の実施形態のブロック図である。
【図１Ｃ】図１Ｃは、アプライアンスを介してサーバからクライアントにコンピュータ環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｄ】図１Ｄは、アプライアンスを介してサーバからクライアントにコンピュータ環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｅ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｆ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｇ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｈ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図２Ａ】図２Ａは、クライアントとサーバとの間の通信を処理するためのアプライアンスの実施形態のブロック図である。
【図２Ｂ】図２Ｂは、クライアントとサーバとの間の通信を最適化、加速、負荷平衡、およびルーティングするためのアプライアンスの別の実施形態のブロック図である。
【図３】図３は、アプライアンスを介してサーバと通信するためのクライアントの実施形態のブロック図である。
【図４Ａ】図４Ａは、仮想化環境の実施形態のブロック図である。
【図４Ｂ】図４Ｂは、仮想化環境の別の実施形態のブロック図である。
【図４Ｃ】図４Ｃは、仮想化されたアプライアンスの実施形態のブロック図である。
【図５Ａ】図５Ａは、マルチコアシステムで並列性を実装することへのアプローチの実施形態のブロック図である。
【図５Ｂ】図５Ｂは、マルチコアシステムを利用するシステムの実施形態のブロック図である。
【図５Ｃ】図５Ｃは、マルチコアシステムの側面の別の実施形態のブロック図である。
【図６】図６は、クラスタシステムの実施形態のブロック図である。
【図７Ａ】図７Ａは、仲介デバイスを介してセッションを維持するためのシステムの実施形態のブロック図である。
【図７Ｂ】図７Ｂは、仲介デバイスを介してセッションを維持する方法の実施形態のブロック図である。
【図８Ａ】図８Ａは、仲介デバイスを介してセッションを維持する実施形態のフロー図である。
【図８Ｂ】図８Ｂは、仲介デバイスを介してセッションを維持する実施形態のフロー図である。
【００３４】
本ソリューションの特徴および利点は、同様の参照記号が全体を通して対応する要素を識別する、図面と併せて解釈されるときに、以下に記載される発明を実施するための形態から、より明白となるであろう。図面では、同様の参照数字は、概して、同じ、機能的に類似する、および／または構造的に類似する要素を示す。
【発明を実施するための形態】
【００３５】
以下の種々の実施形態の説明を読む目的で、本明細書の節およびそれらの個別の内容の以下の説明が役立ち得る。
第Ａ節は、本明細書に説明される実施形態を実践するために有用であり得る、ネットワーク環境およびコンピュータ環境を説明する。
第Ｂ節は、コンピュータ環境を遠隔ユーザに配信するためのシステムおよび方法の実施形態を説明する。
第Ｃ節は、クライアントとサーバとの間の通信を加速するためのシステムおよび方法の実施形態を説明する。
第Ｄ節は、アプリケーション配信コントローラを仮想化するためのシステムおよび方法の実施形態を説明する。
第Ｅ節は、マルチコアアーキテクチャおよび環境を提供するためのシステムおよび方法の実施形態を説明する。
第Ｆ節は、クラスタ化されたアプライアンスアーキテクチャ環境を提供するためのシステムおよび方法の実施形態を説明する。
【００３６】
第Ｇ節は、仲介手段を介してセッションを維持するためのシステムおよび方法の実施形態を説明する。
Ａ．ネットワークおよびコンピュータ環境
【００３７】
アプライアンスおよび／またはクライアントのシステムおよび方法の実施形態の詳細について議論にすることに先立って、そのような実施形態が展開され得る、ネットワークおよびコンピュータ環境について議論することが役立ち得る。ここで図１Ａを参照すると、ネットワーク環境の実施形態が描写されている。要するに、ネットワーク環境は、１つまたはそれを上回るネットワーク１０４、１０４’（概して、ネットワーク１０４と称される）を介して１つまたはそれを上回るサーバ１０６ａ−１０６ｎ（概して、サーバ１０６または遠隔マシン１０６とも称される）と通信する１つまたはそれを上回るクライアント１０２ａ−１０２ｎ（概して、ローカルマシン１０２またはクライアント１０２とも称される）を備える。いくつかの実施形態では、クライアント１０２は、アプライアンス２００を介してサーバ１０６と通信する。
【００３８】
図１Ａは、クライアント１０２とサーバ１０６との間のネットワーク１０４およびネットワーク１０４’を示すが、クライアント１０２およびサーバ１０６は、同一ネットワーク１０４上にあってもよい。ネットワーク１０４および１０４’は、同一タイプのネットワークまたは異なるタイプのネットワークであることができる。ネットワーク１０４および／またはネットワーク１０４’は、企業イントラネット、メトロポリタンエリアネットワーク（ＭＡＮ）等のローカルエリアネットワーク（ＬＡＮ）、またはインターネットまたはワールドワイドウェブ等の広域ネットワーク（ＷＡＮ）であることができる。一実施形態では、ネットワーク１０４’は、プライベートネットワークであってもよく、ネットワーク１０４は、公衆ネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、プライベートネットワークであってもよく、ネットワーク１０４’は、公衆ネットワークであってもよい。別の実施形態では、ネットワーク１０４および１０４’は両方とも、プライベートネットワークであってもよい。いくつかの実施形態では、クライアント１０２は、企業データセンタに位置するサーバ１０６へのネットワーク１０４を経由したＷＡＮ接続を介して通信する、企業の支店に位置してもよい。
【００３９】
ネットワーク１０４および／または１０４’は、任意のタイプおよび／または形態のネットワークであってもよく、以下、すなわち、２点間ネットワーク、放送ネットワーク、広域ネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ＡＴＭ（非同期転送モード）ネットワーク、ＳＯＮＥＴ（同期光ネットワーク）ネットワーク、ＳＤＨ（同期デジタル階層）ネットワーク、無線ネットワーク、および有線ネットワークのうちのいずれかを含んでもよい。いくつかの実施形態では、ネットワーク１０４は、赤外線チャネルまたは衛星帯等の無線リンクを備えてもよい。ネットワーク１０４および／または１０４’のトポロジは、バス、スター、またはリングネットワークトポロジであってもよい。ネットワーク１０４および／または１０４’およびネットワークトポロジは、本明細書に説明される動作をサポートすることが可能である、当業者に公知であるもの等の任意のネットワークまたはネットワークトポロジであってもよい。
【００４０】
図１Ａに示されるように、インターフェースユニット２００またはゲートウェイ２００とも称され得る、アプライアンス２００が、ネットワーク１０４と１０４’との間に示されている。いくつかの実施形態では、アプライアンス２００は、ネットワーク１０４上に位置してもよい。例えば、企業の支店が、支店においてアプライアンス２００を展開してもよい。他の実施形態では、アプライアンス２００は、ネットワーク１０４’上に位置してもよい。例えば、アプライアンス２００は、企業データセンタに位置してもよい。さらに別の実施形態では、複数のアプライアンス２００が、ネットワーク１０４上に展開されてもよい。いくつかの実施形態では、例えば、複数のアプライアンス２００が、ネットワーク１０４’上に展開されてもよい。一実施形態では、第１のアプライアンス２００が、第２のアプライアンス２００’と通信する。他の実施形態では、アプライアンス２００は、任意のクライアント１０２またはクライアント１０２と同一または異なるネットワーク１０４、１０４’上のサーバ１０６の一部であり得る。１つまたはそれを上回るアプライアンス２００は、クライアント１０２とサーバ１０６との間のネットワークまたはネットワーク通信内の任意の点に位置してもよい。
【００４１】
いくつかの実施形態では、アプライアンス２００は、ＮｅｔＳｃａｌｅｒ（Ｒ）デバイスと称される、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ  Ｆｌｏｒｉｄａ）製のネットワークデバイスのうちのいずれかを備える。他の実施形態では、アプライアンス２００は、Ｆ５  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷｅｂＡｃｃｅｌｅｒａｔｏｒおよびＢｉｇＩＰと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、ＤＸ加速デバイスプラットフォームおよび／またはＪｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ））製のＳＡ７００、ＳＡ２０００、ＳＡ４０００、およびＳＡ６０００デバイス等のＳＳＬ  ＶＰＮシリーズのデバイスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２００は、Ｃｉｓｃｏ  ＡＣＥアプリケーション制御エンジンモジュールサービスソフトウェアおよびネットワークモジュール、およびＣｉｓｃｏ  ＡＶＳシリーズアプリケーション速度システム等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（ＳａｎＪｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のアプリケーション加速および／またはセキュリティ関連アプライアンスおよび／またはソフトウェアを含む。
【００４２】
一実施形態では、本システムは、複数の論理的にグループ化されたサーバ１０６を含んでもよい。これらの実施形態では、サーバの論理グループは、サーバファーム３８と称されてもよい。これらの実施形態のうちのいくつかでは、サーバ１０６は、地理的に分散されてもよい。ある場合には、ファーム３８は、単一のエンティティとして運営されてもよい。他の実施形態では、サーバファーム３８は、複数のサーバファーム３８を備える。一実施形態では、サーバファームは、１つまたはそれを上回るクライアント１０２の代わりに、１つまたはそれを上回るアプリケーションを実行する。
【００４３】
各ファーム３８内のサーバ１０６は、異種であり得る。サーバ１０６のうちの１つまたはそれを上回るものが、１つのタイプのオペレーティングシステムプラットフォーム（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷＩＮＤＯＷＳ  ＮＴ）に従って動作することができる一方で、他のサーバ１０６のうちの１つまたはそれを上回るものは、別のタイプのオペレーティングシステムプラットフォーム（例えば、Ｕｎｉｘ（登録商標）またはＬｉｎｕｘ（登録商標））に従って動作することができる。各ファーム３８のサーバ１０６は、同一ファーム３８内の別のサーバ１０６に物理的に近接する必要はない。したがって、ファーム３８として論理的にグループ化されたサーバ１０６のグループは、広域ネットワーク（ＷＡＮ）接続または中域ネットワーク（ＭＡＮ）接続を使用して、相互接続されてもよい。例えば、ファーム３８は、異なる大陸、または大陸、国、州、都市、キャンパス、または部屋の異なる領域の中に物理的に位置する、サーバ１０６を含んでもよい。ファーム３８内のサーバ１０６の間のデータ伝送速度は、サーバ１０６がローカルネットワーク（ＬＡＮ）接続または何らかの形態の直接接続を使用して接続される場合に、増加されることができる。
【００４４】
サーバ１０６は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、またはゲートウェイサーバと称されてもよい。いくつかの実施形態では、サーバ１０６は、アプリケーションサーバとして、またはマスタアプリケーションサーバとして機能する能力を有してもよい。一実施形態では、サーバ１０６は、アクティブディレクトリを含んでもよい。クライアント１０２はまた、クライアントノードまたはエンドポイントと称されてもよい。いくつかの実施形態では、クライアント１０２は、サーバ上のアプリケーションへのアクセスを求めるクライアントノードとして、および他のクライアント１０２ａ−１０２ｎのためのホスト型アプリケーションへのアクセスを提供するアプリケーションサーバとしての両方で機能する能力を有する。
【００４５】
いくつかの実施形態では、クライアント１０２は、サーバ１０６と通信する。一実施形態では、クライアント１０２は、ファーム３８内のサーバ１０６のうちの１つと直接通信する。別の実施形態では、クライアント１０２は、ファーム３８内のサーバ１０６と通信するように、プログラム隣接アプリケーションを実行する。なおも別の実施形態では、サーバ１０６は、マスタノードの機能性を提供する。いくつかの実施形態では、クライアント１０２は、ネットワーク１０４を通してファーム３８内のサーバ１０６と通信する。ネットワーク１０４を経由して、クライアント１０２は、例えば、ファーム３８内のサーバ１０６ａ−１０６ｎによってホストされる種々のアプリケーションの実行を要求し、表示するためにアプリケーション実行の結果の出力を受信することができる。いくつかの実施形態では、マスタノードのみが、要求されたアプリケーションをホストするサーバ１０６’と関連付けられるアドレス情報を識別して提供するために要求される機能性を提供する。
【００４６】
一実施形態では、サーバ１０６は、ウェブサーバの機能性を提供する。別の実施形態では、サーバ１０６ａは、クライアント１０２から要求を受信し、要求を第２のサーバ１０６ｂに自動転送し、サーバ１０６ｂからの要求への応答とともに、クライアント１０２による要求に応答する。なおも別の実施形態では、サーバ１０６は、クライアント１０２に利用可能なアプリケーションの列挙、およびアプリケーションの列挙によって識別されるアプリケーションをホストするサーバ１０６と関連付けられるアドレス情報を獲得する。さらに別の実施形態では、サーバ１０６は、ウェブインターフェースを使用して、要求への応答をクライアント１０２に提示する。一実施形態では、クライアント１０２は、識別されたアプリケーションにアクセスするようにサーバ１０６と直接通信する。別の実施形態では、クライアント１０２は、サーバ１０６上の識別されたアプリケーションの実行によって生成される、表示データ等のアプリケーション出力データを受信する。
【００４７】
ここで図１Ｂを参照すると、複数のアプライアンス２００を展開するネットワーク環境の実施形態が描写されている。第１のアプライアンス２００が、第１のネットワーク１０４上に、第２のアプライアンス２００’が、第２のネットワーク１０４’上に展開されてもよい。例えば、企業が、支店において第１のアプライアンス２００を、データセンタにおいて第２のアプライアンス２００’を展開してもよい。別の実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、同一のネットワーク１０４またはネットワーク１０４’上に展開される。例えば、第１のアプライアンス２００は、第１のサーバファーム３８のために展開されてもよく、第２のアプライアンス２００は、第２のサーバファーム３８’のために展開されてもよい。別の実施例では、第１のアプライアンス２００が、第１の支店において展開されてもよい一方で、第２のアプライアンス２００’は、第２の支店’において展開されてもよい。いくつかの実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、ネットワークトラフィックまたはクライアントとサーバとの間のアプリケーションおよびデータの配信を加速するように、相互と協力して、または連動して作動する。
【００４８】
ここで図１Ｃを参照すると、１つまたはそれを上回るＷＡＮ最適化アプライアンス２０５、２０５’の間等で１つまたはそれを上回る他のタイプのアプライアンスとともにアプライアンス２００を展開する、ネットワーク環境の別の実施形態が描写されている。例えば、第１のＷＡＮ最適化アプライアンス２０５が、ネットワーク１０４と１０４’との間に示され、第２のＷＡＮ最適化アプライアンス２０５’が、アプライアンス２００と１つまたはそれを上回るサーバ１０６との間に展開されてもよい。一例として、企業が、支店において第１のＷＡＮ最適化アプライアンス２０５を、データセンタにおいて第２のＷＡＮ最適化アプライアンス２０５’を展開してもよい。いくつかの実施形態では、アプライアンス２０５は、ネットワーク１０４’上に位置してもよい。他の実施形態では、アプライアンス２０５’は、ネットワーク１０４上に位置してもよい。いくつかの実施形態では、アプライアンス２０５’は、ネットワーク１０４’またはネットワーク１０４”上に位置してもよい。一実施形態では、アプライアンス２０５および２０５’は、同一ネットワーク上にある。別の実施形態では、アプライアンス２０５および２０５’は、異なるネットワーク上にある。別の実施例では、第１のＷＡＮ最適化アプライアンス２０５が、第１のサーバファーム３８のために、第２のＷＡＮ最適化アプライアンス２０５’が、第２のサーバファーム３８’のために展開されてもよい。
【００４９】
一実施形態では、アプライアンス２０５は、ＷＡＮ接続へ、および／またはそこからのトラフィック等の任意のタイプおよび形態のネットワークトラフィックの性能、動作、またはサービス品質を加速、最適化、または別様に改良するためのデバイスである。いくつかの実施形態では、アプライアンス２０５は、性能強化プロキシである。他の実施形態では、アプライアンス２０５は、ＷＡＮ最適化コントローラと称されることもある、任意のタイプおよび形態のＷＡＮ最適化または加速デバイスである。一実施形態では、アプライアンス２０５は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＣｌｏｕｄＢｒｉｄｇｅ（Ｒ）と称される製品実施形態のうちのいずれかである。他の実施形態では、アプライアンス２０５は、Ｆ５  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＢＩＧ−ＩＰリンクコントローラおよびＷＡＮｊｅｔと称される製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、Ｊｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＸおよびＷＸＣ  ＷＡＮ加速デバイスプラットフォームのうちのいずれかを含む。いくつかの実施形態では、アプライアンス２０５は、Ｒｉｖｅｒｂｅｄ  Ｔｅｃｈｎｏｌｏｇｙ（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のスチールヘッドラインのＷＡＮ最適化アプライアンスのうちのいずれかを含む。他の実施形態では、アプライアンス２０５は、Ｅｘｐａｎｄ  Ｎｅｔｗｏｒｋｓ  Ｉｎｃ．（Ｒｏｓｅｌａｎｄ，  Ｎｅｗ  Ｊｅｒｓｅｙ）製のＷＡＮ関連デバイスのうちのいずれかを含む。一実施形態では、アプライアンス２０５は、Ｐａｃｋｅｔｅｅｒによって提供されるＰａｃｋｅｔＳｈａｐｅｒ、ｉＳｈａｒｅｄ、およびＳｋｙＸ製品実施形態等のＰａｃｋｅｔｅｅｒ  Ｉｎｃ．（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＡＮ関連アプライアンスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２０５は、Ｃｉｓｃｏ広域ネットワークアプリケーションサービスソフトウェアおよびネットワークモジュール、および広域ネットワークエンジンアプライアンス等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のＷＡＮ関連アプライアンスおよび／またはソフトウェアを含む。
【００５０】
一実施形態では、アプライアンス２０５は、支店または遠隔オフィスのためのアプリケーションおよびデータ加速サービスを提供する。一実施形態では、アプライアンス２０５は、広域ファイルサービス（ＷＡＦＳ）の最適化を含む。別の実施形態では、アプライアンス２０５は、共通インターネットファイルシステム（ＣＩＦＳ）プロトコルを介して等、ファイルの配信を加速する。他の実施形態では、アプライアンス２０５は、アプリケーションおよびデータの配信を加速するように、メモリおよび／または記憶装置の中でキャッシングを提供する。一実施形態では、アプライアンス２０５は、任意のレベルのネットワークスタックにおいて、または任意のプロトコルまたはネットワーク層において、ネットワークトラフィックの圧縮を提供する。別の実施形態では、アプライアンス２０５は、ＷＡＮ接続を経由したアプリケーションおよびデータの配信を加速するように、トランスポート層プロトコル最適化、フロー制御、性能強化または修正、および／または管理を提供する。例えば、一実施形態では、アプライアンス２０５は、トランスポート制御プロトコル（ＴＣＰ）最適化を提供する。他の実施形態では、アプライアンス２０５は、任意のセッションまたはアプリケーション層プロトコルのための最適化、フロー制御、性能強化または修正、および／または管理を提供する。
【００５１】
別の実施形態では、アプライアンス２０５は、存在、機能性、または能力を別のアプライアンス２０５’にアナウンスするように、任意のタイプおよび形態のデータまたは情報を、ネットワークパケットのカスタムまたは標準ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションフィールドにエンコードする。別の実施形態では、アプライアンス２０５’は、ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションの両方でエンコードされるデータを使用して、別のアプライアンス２０５’と通信してもよい。例えば、アプライアンスは、ＷＡＮ加速等の機能性を果たす際に、または相互と連動して作動するために、アプライアンス２０５、２０５’によって使用される１つまたはそれを上回るパラメータを通信するようにＴＣＰオプションまたはＩＰヘッダフィールドまたはオプションを使用してもよい。
【００５２】
いくつかの実施形態では、アプライアンス２００は、アプライアンス２０５と２０５’との間で通信されるＴＣＰおよび／またはＩＰヘッダおよび／またはオプションフィールドの中でエンコードされる情報のうちのいずれかを保存する。例えば、アプライアンス２００は、クライアントとアプライアンス２０５および２０５’をトラバースするサーバとの間からのトランスポート層接続等のアプライアンス２００をトラバースするトランスポート層接続を終了させてもよい。一実施形態では、アプライアンス２００は、第１のトランスポート層接続を介して第１のアプライアンス２０５によって伝送されるトランスポート層パケットの中の任意のエンコードされた情報を識別して保存し、第２のトランスポート層接続を介してエンコードされた情報とともにトランスポート層パケットを第２のアプライアンス２０５’に通信する。
【００５３】
ここで図１Ｄを参照すると、クライアント１０２上でコンピュータ環境を配信する、および／または動作させるためのネットワーク環境が描写されている。いくつかの実施形態では、サーバ１０６は、コンピュータ環境またはアプリケーションおよび／またはデータファイルを１つまたはそれを上回るクライアント１０２に配信するためのアプリケーション配信システム１９０を含む。要するに、クライアント１０は、ネットワーク１０４、１０４’およびアプライアンス２００を介してサーバ１０６と通信する。例えば、クライアント１０２は、企業の遠隔オフィス、例えば、支店内に常駐してもよく、サーバ１０６は、企業データセンタに常駐してもよい。クライアント１０２は、クライアントエージェント１２０と、コンピュータ環境１５とを備える。コンピュータ環境１５は、データファイルにアクセスする、それを処理または使用する、アプリケーションを実行または動作させてもよい。コンピュータ環境１５、アプリケーション、および／またはデータファイルは、アプライアンス２００および／またはサーバ１０６を介して配信されてもよい。
【００５４】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２へのコンピュータ環境１５またはその任意の部分の配信を加速する。一実施形態では、アプライアンス２００は、アプリケーション配信システム１９０によるコンピュータ環境１５の配信を加速する。例えば、本明細書に説明される実施形態は、中央企業データセンタから企業の支店等の遠隔ユーザ場所へのアプリケーションによって処理可能なストリーミングアプリケーションおよびデータファイルの配信を加速するために使用されてもよい。別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のトランスポート層トラフィックを加速する。アプライアンス２００は、１）トランスポート層接続プール、２）トランスポート層接続多重化、３）トランスポート制御プロトコルバッファリング、４）圧縮、および５）キャッシング等のサーバ１０６からクライアント１０２への任意のトランスポート層ペイロードを加速するための加速技法を提供してもよい。いくつかの実施態では、アプライアンス２００は、クライアント１０２からの要求に応答する際に、サーバ１０６の負荷平衡を提供する。他の実施形態では、アプライアンス２００は、１つまたはそれを上回るサーバ１０６へのアクセスを提供するように、プロキシまたはアクセスサーバとして作用する。別の実施形態では、アプライアンス２００は、ＳＳＬ  ＶＰＮ接続等のクライアント１０２の第１のネットワーク１０４からサーバ１０６の第２のネットワーク１０４’へのセキュアな仮想プライベートネットワーク接続を提供する。さらに他の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の接続および通信のアプリケーションファイアウォールセキュリティ、制御、および管理を提供する。
【００５５】
いくつかの実施形態では、アプリケーション配信管理システム１９０は、複数の実行方法に基づいて、かつポリシエンジン１９５を介して適用される任意の認証および承認ポリシに基づいて、コンピュータ環境を遠隔または別様にユーザのデスクトップに配信するアプリケーション配信技法を提供する。これらの技法を用いることで、遠隔ユーザは、任意のネットワーク接続されたデバイス１００から、コンピュータ環境およびサーバに記憶されたアプリケーションおよびデータファイルへのアクセスを取得してもよい。一実施形態では、アプリケーション配信システム１９０は、サーバ１０６上で常駐または実行してもよい。別の実施形態では、アプリケーション配信システム１９０は、複数のサーバ１０６ａ−１０６ｎ上で常駐または実行してもよい。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバファーム３８内で実行してもよい。一実施形態では、アプリケーション配信システム１９０を実行するサーバ１０６はまた、アプリケーションおよびデータファイルを記憶または提供してもよい。別の実施形態では、１つまたはそれを上回るサーバ１０６の第１のセットが、アプリケーション配信システム１９０を実行してもよく、異なるサーバ１０６ｎが、アプリケーションおよびデータファイルを記憶または提供してもよい。いくつかの実施形態では、アプリケーション配信システム１９０、アプリケーション、およびデータファイルはそれぞれ、異なるサーバ上に常駐または位置してもよい。さらに別の実施形態では、アプリケーション配信システム１９０の任意の部分が、アプライアンス２００または複数のアプライアンス上に常駐、実行、または記憶される、またはそれに分配されてもよい。
【００５６】
クライアント１０２は、データファイルを使用または処理するアプリケーションを実行するためのコンピュータ環境１５を含んでもよい。ネットワーク１０４、１０４’およびアプライアンス２００を介したクライアント１０２は、サーバ１０６からアプリケーションおよびデータファイルを要求してもよい。一実施形態では、アプライアンス２００は、クライアント１０２からサーバ１０６に要求を自動転送してもよい。例えば、クライアント１０２は、ローカルに記憶された、またはアクセス可能であるアプリケーションおよびデータファイルを有していない場合がある。要求に応答して、アプリケーション配信システム１９０および／またはサーバ１０６は、アプリケーションおよびデータファイルをクライアント１０２に配信してもよい。例えば、一実施形態では、サーバ１０６は、クライアント１０２上のコンピュータ環境１５内で動作するようにアプリケーションストリームとしてアプリケーションを伝送してもよい。
【００５７】
いくつかの実施形態では、アプリケーション配信システム１９０は、ＸｅｎＡｐｐ（Ｒ）またはＸｅｎＤｅｓｋｔｏｐ（Ｒ）等のＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  Ｓｕｉｔｅ（ＴＭ）（Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．）製の任意の部分および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｓのうちのいずれかを備える。一実施形態では、アプリケーション配信システム１９０は、遠隔表示プロトコルを介して、または別様に遠隔ベースまたはサーバベースの計算を介して、１つまたはそれを上回るアプリケーションをクライアント１０２またはユーザに配信してもよい。別の実施形態では、アプリケーション配信システム１９０は、アプリケーションのストリーミングを介して、１つまたはそれを上回るアプリケーションをクライアントまたはユーザに配信してもよい。
【００５８】
一実施形態では、アプリケーション配信システム１９０は、アプリケーションへのアクセス、アプリケーション実行方法の選択、およびアプリケーションの配信を制御および監視するためのポリシエンジン１９５を含む。いくつかの実施形態では、ポリシエンジン１９５は、ユーザまたはクライアント１０２がアクセスし得る、１つまたはそれを上回るアプリケーションを判定する。別の実施形態では、ポリシエンジン１９５は、どのようにしてアプリケーションがユーザまたはクライアント１０２に配信されるべきか、例えば、実行の方法を判定する。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバベースの計算、ローカル実行のためにローカルにアプリケーションをクライアント１２０にストリーム配信または配信すること等のアプリケーション実行の方法を選択する、複数の配信技法を提供する。
【００５９】
一実施形態では、クライアント１０２は、アプリケーションプログラムの実行を要求し、サーバ１０６を備えるアプリケーション配信システム１９０は、アプリケーションプログラムを実行する方法を選択する。いくつかの実施形態では、サーバ１０６は、クライアント１０２から証明書を受信する。別の実施形態では、サーバ１０６は、クライアント１０２から利用可能なアプリケーションの列挙の要求を受信する。一実施形態では、証明書の要求または受信に応答して、アプリケーション配信システム１９０は、クライアント１０２に利用可能な複数のアプリケーションプログラムを列挙する。アプリケーション配信システム１９０は、列挙されたアプリケーションを実行する要求を受信する。アプリケーション配信システム１９０は、例えば、ポリシエンジンのポリシに応答して、列挙されたアプリケーションを実行するための所定数の方法のうちの１つを選択する。アプリケーション配信システム１９０は、クライアント１０２が、サーバ１０６上のアプリケーションプログラムの実行によって生成されるアプリケーション出力データを受信することを可能にする、アプリケーションの実行の方法を選択してもよい。アプリケーション配信システム１９０は、アプリケーションを備える複数のアプリケーションファイルを読み出した後に、ローカルマシン１０がローカルでアプリケーションプログラムを実行することを可能にする、アプリケーションの実行の方法を選択してもよい。さらに別の実施形態では、アプリケーション配信システム１９０は、ネットワーク１０４を介してクライアント１０２にアプリケーションをストリーム配信するように、アプリケーションの実行の方法を選択してもよい。
【００６０】
クライアント１０２は、任意のタイプおよび／または形態のウェブブラウザ、ウェブベースのクライアント、クライアント・サーバアプリケーション、シンクライアントコンピューティングクライアント、Ａｃｔｉｖｅ  Ｘコントロール、またはＪａｖａ（登録商標）アプレット等の任意のタイプおよび／または形態のソフトウェア、プログラム、または実行可能命令、またはクライアント１０２上で実行することが可能な任意のタイプおよび／または形態の実行可能命令であることができる、アプリケーションを実行、動作、または別様に提供してもよい。いくつかの実施形態では、アプリケーションは、サーバ１０６上のクライアント１０２の代わりに実行される、サーバベースまたは遠隔ベースのアプリケーションであってもよい。一実施形態では、サーバ１０６は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製の独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコルまたはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製の遠隔デスクトッププロトコル（ＲＤＰ）等の任意のシンクライアントまたは遠隔表示プロトコルを使用して、クライアント１０２への出力を表示してもよい。アプリケーションは、任意のタイプのプロトコルを使用することができ、それは、例えば、ＨＴＴＰクライアント、ＦＴＰクライアント、Ｏｓｃａｒクライアント、またはＴｅｌｎｅｔクライアントであることができる。他の実施形態では、アプリケーションは、ソフトＩＰ電話等のＶｏＩＰ通信に関連する任意のタイプのソフトウェアを備える。さらなる実施形態では、アプリケーションは、ビデオおよび／またはオーディオをストリーミング配信するためのアプリケーション等のリアルタイムデータ通信に関連する任意のアプリケーションを備える。
【００６１】
いくつかの実施形態では、サーバ１０６またはサーバファーム３８は、シンクライアント計算を提供するアプリケーションまたは遠隔表示プレゼンテーションアプリケーション等の１つまたはそれを上回るアプリケーションを起動していてもよい。一実施形態では、サーバ１０６またはサーバファーム３８は、ＸｅｎＡｐｐ（Ｒ）またはＸｅｎＤｅｓｋｔｏｐ（Ｒ）等のＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  Ｓｕｉｔｅ（ＴＭ）（Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．）製の任意の部分および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（Ｒ）  Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓのうちのいずれかをアプリケーションとして実行する。一実施形態では、アプリケーションは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発されたＩＣＡクライアントである。他の実施形態では、アプリケーションは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって開発された遠隔デスクトップ（ＲＤＰ）クライアントを含む。また、サーバ１０６は、例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＭｉｃｒｏｓｏｆｔ  Ｅｘｃｈａｎｇｅ等のＥメールサービスを提供するアプリケーションサーバ、ウェブまたはインターネットサーバ、またはデスクトップ共有サーバ、または協調サーバであり得る、アプリケーションを起動してもよい。いくつかの実施形態では、アプリケーションのうちのいずれかは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって提供されるＧｏＴｏＭｅｅｔｉｎｇ（ＴＭ）、Ｃｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）によって提供されるＷｅｂＥｘ（ＴＭ）、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって提供されるＭｉｃｒｏｓｏｆｔ  Ｏｆｆｉｃｅ  Ｌｉｖｅ  Ｍｅｅｔｉｎｇ等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
【００６２】
依然として図１Ｄを参照すると、ネットワーク環境の実施形態は、監視サーバ１０６Ａを含んでもよい。監視サーバ１０６Ａは、任意のタイプおよび形態の性能監視サービス１９８を含んでもよい。性能監視サービス１９８は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および／または管理ソフトウェアおよび／またはハードウェアを含んでもよい。一実施形態では、性能監視サービス１９８は、１つまたはそれを上回る監視エージェント１９７を含む。監視エージェント１９７は、クライアント１０２、サーバ１０６、またはアプライアンス２００、２０５等のデバイス上で監視、測定、およびデータ収集アクティビティを行うための任意のソフトウェア、ハードウェア、またはその組み合わせを含む。いくつかの実施形態では、監視エージェント１９７は、Ｖｉｓｕａｌ  ＢａｓｉｃスクリプトまたはＪａｖａｓｃｒｉｐｔ（登録商標）等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント１９７は、デバイスの任意のアプリケーションおよび／またはユーザに対して透過的に実行する。いくつかの実施形態では、監視エージェント１９７は、アプリケーションまたはクライアントに影響を及ぼすことなくインストールおよび動作される。さらに別の実施形態では、監視エージェント１９７は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
【００６３】
いくつかの実施形態では、監視エージェント１９７は、所定の頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント１９７は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント１９７は、ウェブページまたはＨＴＴＰ応答の受信の要求の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント１９７は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント１９７は、任意の監視、測定、または収集されたデータを監視サービス１９８に報告または提供してもよい。一実施形態では、監視エージェント１９７は、スケジュールまたは所定の頻度に従って、情報を監視サービス１９８に伝送する。別の実施形態では、監視エージェント１９７は、イベントの検出に応じて、情報を監視サービス１９８に伝送する。
【００６４】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント、サーバ、サーバファーム、アプライアンス２００、アプライアンス２０５、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を行う。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＴＣＰまたはＵＤＰ接続等の任意のトランスポート層接続の監視および性能測定を行う。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ネットワーク待ち時間を監視して測定する。さらなる一実施形態では、監視サービス１９８および／または監視エージェント１９７は、帯域幅利用を監視して測定する。
【００６５】
他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、エンドユーザ応答時間を監視して測定する。いくつかの実施形態では、監視サービス１９８は、アプリケーションの監視および性能測定を行う。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションへの任意のセッションまたは接続の監視および性能測定を行う。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ブラウザの性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＨＴＴＰベースのトランザクションの性能を監視して測定する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、ボイスオーバーＩＰ（ＶｏＩＰ）アプリケーションまたはセッションの性能を監視して測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＩＣＡクライアントまたはＲＤＰクライアント等の遠隔表示プロトコルアプリケーションの性能を監視して測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のストリーミングメディアの性能を監視して測定する。なおもさらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、ホスト型アプリケーションまたはサービスとしてのソフトウェア（ＳａａＳ）配信モデルの性能を監視して測定する。
【００６６】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションに関連する１つまたはそれを上回るトランザクション、要求、または応答の監視および性能測定を行う。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の．ＮＥＴまたはＪ２ＥＥコール等のアプリケーション層スタックの任意の部分を監視して測定する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、データベースまたはＳＱＬトランザクションを監視して測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の方法、機能、またはアプリケーションプログラミングインターフェース（ＡＰＩ）コールを監視して測定する。
【００６７】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプライアンス２００および／またはアプライアンス２０５等の１つまたはそれを上回るアプライアンスを介したサーバからクライアントへのアプリケーションおよび／またはデータの配信の監視および性能測定を行う。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、仮想化されたアプリケーションの配信の性能を監視して測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ストリーミングアプリケーションの配信の性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアントへのデスクトップアプリケーションの配信および／またはクライアント上のデスクトップアプリケーションの実行の性能を監視して測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント／サーバアプリケーションの性能を監視して測定する。
【００６８】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０のためのアプリケーション性能管理を提供するように設計および構築される。例えば、監視サービス１９８および／または監視エージェント１９７は、Ｃｉｔｒｉｘプレゼンテーションサーバを介して、アプリケーションの配信の性能を監視、測定、および管理してもよい。本実施例では、監視サービス１９８および／または監視エージェント１９７は、個々のＩＣＡセッションを監視する。監視サービス１９８および／または監視エージェント１９７は、合計およびセッション毎のシステムリソース使用料、およびアプリケーションおよびネットワーキング性能を測定してもよい。監視サービス１９８および／または監視エージェント１９７は、所与のユーザおよび／またはユーザセッションのためのアクティブなサーバを識別してもよい。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０とアプリケーションおよび／またはデータベースサーバとの間のバックエンド接続を監視する。監視サービス１９８および／または監視エージェント１９７は、ユーザセッションまたはＩＣＡセッションあたりのネットワーク待ち時間、遅延、および量を測定してもよい。
【００６９】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッションあたりおよび／またはプロセスあたりの総メモリ使用量等のアプリケーション配信システム１９０のためのメモリ使用量を測定して監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッションあたりおよび／またはプロセスあたりの総ＣＰＵ使用量等のアプリケーション配信システム１９０のＣＰＵ使用量を測定して監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、Ｃｉｔｒｉｘプレゼンテーションサーバ等のアプリケーション、サーバ、またはアプリケーション配信システムにログインするために要求される時間を測定して監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザがアプリケーション、サーバ、またはアプリケーション配信システム１９０にログインされている持続時間を測定して監視する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション、サーバ、またはアプリケーション配信システムセッションのためのアクティブおよび非アクティブなセッションカウントを測定して監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッション待ち時間を測定して監視する。
【００７０】
その上さらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のサーバメトリックを測定して監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、システムメモリ、ＣＰＵ使用量、およびディスク記憶装置に関連するメトリックを測定して監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、１秒あたりのページフォールト等のページフォールトに関連するメトリックを測定して監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ラウンドトリップタイムメトリックを測定して監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションクラッシュ、エラー、および／またはハングアップに関連するメトリックを測定して監視する。
【００７１】
いくつかの実施形態では、監視サービス１９８および監視エージェント１９８は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＥｄｇｅＳｉｇｈｔと称される製品実施形態のうちのいずれかを含む。別の実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、Ｓｙｍｐｈｏｎｉｑ  Ｃｏｒｐｏｒａｔｉｏｎ（ＰａｌｏＡｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｒｕｅＶｉｅｗ製品スイートと称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、ＴｅａＬｅａｆ  Ｔｅｃｈｎｏｌｏｇｙ  Ｉｎｃ．（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｅａＬｅａｆＣＸ製品スイートと称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス１９８および／または監視エージェント１９８は、ＢＭＣ  Ｓｏｆｔｗａｒｅ，Ｉｎｃ．（Ｈｏｕｓｔｏｎ，  Ｔｅｘａｓ）製のＢＭＣ性能マネージャおよびパトロール製品等のビジネスサービス管理製品の任意の部分を含む。
【００７２】
クライアント１０２、サーバ１０６、およびアプライアンス２００は、任意のタイプおよび形態のネットワーク上で通信し、本明細書に説明される動作を行うことが可能なコンピュータ、ネットワークデバイス、またはアプライアンス等の任意のタイプおよび形態のコンピューティングデバイスとして展開され、および／またはその上で実行されてもよい。図１Ｅおよび１Ｆは、クライアント１０２、サーバ１０６、またはアプライアンス２００の実施形態を実践するために有用なコンピューティングデバイス１００のブロック図を描写する。図１Ｅおよび１Ｆに示されるように、各コンピューティングデバイス１００は、中央処理ユニット１０１と、主要メモリユニット１２２とを含む。図１Ｅに示されるように、コンピューティングデバイス１００は、視覚表示デバイス１２４、キーボード１２６、および／またはマウス等のポインティングデバイス１２７を含んでもよい。各コンピューティングデバイス１００はまた、１つまたはそれを上回る入出力デバイス１３０ａ−１３０ｂ（概して、参照数字１３０を使用して参照される）および中央処理ユニット１０１と通信するキャッシュメモリ１４０等の付加的な随意の要素を含んでもよい。
【００７３】
中央処理ユニット１０１は、主要メモリユニット１２２からフェッチされた命令に応答し、それらを処理する、任意の論理回路である。多くの実施形態では、中央処理ユニットは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｍｏｕｎｔａｉｎ  Ｖｉｅｗ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓｃｈａｕｍｂｕｒｇ，  Ｉｌｌｉｎｏｉｓ）製のもの、Ｔｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎ（ＳａｎｔａＣｌａｒａ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、ＲＳ／６０００プロセッサ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ｗｈｉｔｅ  Ｐｌａｉｎｓ，  Ｎｅｗ  Ｙｏｒｋ）製のもの、またはＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のもの等のマイクロプロセッサユニットによって提供される。コンピューティングデバイス１００は、これらのプロセッサのうちのいずれか、または本明細書に説明されるように動作することが可能な任意の他のプロセッサに基づいてもよい。
【００７４】
主要メモリユニット１２２は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バーストＳＲＡＭまたは同期バーストＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、高速ページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、拡張データ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）、拡張データ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バースト拡張データ出力ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、強化ＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃＬｉｎｋ  ＤＲＡＭ（ＳＬＤＲＡＭ）、Ｄｉｒｅｃｔ  ＲａｍｂｕｓＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘電体ＲＡＭ（ＦＲＡＭ（登録商標））等のデータを記憶することが可能であり、任意の記憶場所がマイクロプロセッサ１０１によって直接アクセスすることを可能にする、１つまたはそれを上回るメモリチップであってもよい。主要メモリ１２２は、上記のメモリチップのうちのいずれか、または本明細書に説明されるように動作することが可能である任意の他の利用可能なメモリチップに基づいてもよい。図１Ｅに示される実施形態では、プロセッサ１０１は、システムバス１５０を介して主要メモリ１２２と通信する（以下でさらに詳細に説明される）。図１Ｆは、プロセッサがメモリポート１０３を介して主要メモリ１２２と直接通信する、コンピューティングデバイス１００の実施形態を描写する。例えば、図１Ｆでは、主要メモリ１２２は、ＤＲＤＲＡＭであってもよい。
【００７５】
図１Ｆは、主要プロセッサ１０１が、時として、バックサイドバスと称されることもある二次バスを介して、キャッシュメモリ１４０と直接通信する、実施形態を描写する。他の実施形態では、主要プロセッサ１０１は、システムバス１５０を使用してキャッシュメモリ１４０と通信する。キャッシュメモリ１４０は、典型的には、主要メモリ１２２よりも速い応答時間を有し、典型的には、ＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。図１Ｆに示される実施形態では、プロセッサ１０１は、ローカルシステムバス１５０を介して種々のＩ／Ｏデバイス１３０と通信する。中央処理ユニット１０１をＩ／Ｏデバイス１３０のうちのいずれかに接続するために、ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、ＭｉｃｒｏＣｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕＢｕｓを含む、種々のバスが使用されてもよい。Ｉ／Ｏデバイスがビデオディスプレイ１２４である実施形態に関して、プロセッサ１０１は、ディスプレイ１２４と通信するためにＡｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）を使用してもよい。図１Ｆは、主要プロセッサ１０１が、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、Ｒａｐｉｄ  Ｉ／Ｏ、またはＩｎｆｉｎｉＢａｎｄを介してＩ／Ｏデバイス１３０ｂと直接通信する、コンピュータ１００の実施形態を描写する。図１Ｆはまた、ローカルバスおよび直接通信が混合される、実施形態も描写し、プロセッサ１０１は、Ｉ／Ｏデバイス１３０ａと直接通信しながら、ローカル相互接続バスを使用してＩ／Ｏデバイス１３０ｂと通信する。
【００７６】
コンピューティングデバイス１００は、３．５インチ、５．２５インチディスク、またはＺＩＰディスク等のフロッピー（登録商標）ディスクを受容するためのフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、種々の形式のテープドライブ、ＵＳＢデバイス、ハードドライブ、またはソフトウェアおよび任意のクライアントエージェント１２０またはその一部等のプログラムをインストールするために好適な任意の他のデバイス等の任意の好適なインストールデバイス１１６をサポートしてもよい。コンピューティングデバイス１００はさらに、オペレーティングシステムおよび他の関連ソフトウェアを記憶するため、およびクライアントエージェント１２０に関連する任意のプログラム等のアプリケーションソフトウェアプログラムを記憶するために、１つまたはそれを上回るハードディスクドライブまたは独立ディスクの冗長アレイ等の記憶デバイス１２８を備えてもよい。随意に、インストールデバイス１１６のうちのいずれかはまた、記憶デバイス１２８としても使用され得る。加えて、オペレーティングシステムおよびソフトウェアは、ブート可能媒体、例えば、ｋｎｏｐｐｉｘ．ｎｅｔからのＧＮＵ／Ｌｉｎｕｘ（登録商標）配布として入手可能であるＧＮＵ／Ｌｉｎｕｘ（登録商標）用のブート可能ＣＤである、ＫＮＯＰＰＩＸ（Ｒ）等のブート可能ＣＤから起動されることができる。
【００７７】
さらに、コンピューティングデバイス１００は、標準電話回線、ＬＡＮまたはＷＡＮリンク（例えば、８０２．１１、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、ブロードバンド接続（例えば、ＩＳＤＮ、フレームリレー、ＡＴＭ、）、無線接続、または上記のうちのいずれかまたは全てのある組み合わせを含むが、それらに限定されない、種々の接続を通して、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、またはインターネットにインターフェース接続するように、ネットワークインターフェース１１８を含んでもよい。ネットワークインターフェース１１８は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、ＰＣＭＣＩＡネットワークカード、カードバスネットワークアダプタ、無線ネットワークアダプタ、ＵＳＢネットワークアダプタ、モデム、または通信が可能であり、本明細書に説明される動作を行う、任意のタイプのネットワークにコンピューティングデバイス１００をインターフェース接続するために好適な任意の他のデバイスを備えてもよい。
【００７８】
多種多様なＩ／Ｏデバイス１３０ａ−１３０ｎが、コンピューティングデバイス１００の中に存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、ドローイングタブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および染料昇華プリンタを含む。Ｉ／Ｏデバイス１３０は、図１Ｅに示されるようにＩ／Ｏコントローラ１２３によって制御されてもよい。Ｉ／Ｏコントローラは、キーボード１２６およびポインティングデバイス１２７、例えば、マウスまたは光学ペン等の１つまたはそれを上回るＩ／Ｏデバイスを制御してもよい。さらに、Ｉ／Ｏデバイスはまた、コンピューティングデバイス１００用の記憶装置１２８および／またはインストール媒体１１６を提供してもよい。なおも他の実施形態では、コンピューティングデバイス１００は、Ｔｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，  Ｉｎｃ．（Ｌｏｓ  Ａｌａｍｉｔｏｓ，  Ｃａｌｉｆｏｒｎｉａ）製のＵＳＢフラッシュドライブ系列のデバイス等のハンドヘルドＵＳＢ記憶デバイスを受容するＵＳＢ接続を提供してもよい。
【００７９】
いくつかの実施形態では、コンピューティングデバイス１００は、それぞれ、同一または異なるタイプおよび／または形態であり得る、複数の表示デバイス１２４ａ−１２４ｎを備える、またはそれらに接続されてもよい。したがって、Ｉ／Ｏデバイス１３０ａ−１３０ｎおよび／またはＩ／Ｏコントローラ１２３のうちのいずれかは、コンピューティングデバイス１００による複数の表示デバイス１２４ａ−１２４ｎの接続および使用をサポートする、有効にする、または提供するように、任意のタイプおよび／または形態の好適なハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを備えてもよい。例えば、コンピューティングデバイス１００は、表示デバイス１２４ａ−１２４ｎをインターフェース接続する、通信する、接続する、または別様に使用するように、任意のタイプおよび／または形態のビデオアダプタ、ビデオカード、ドライバ、および／またはライブラリを含んでもよい。一実施形態では、ビデオアダプタは、複数の表示デバイス１２４ａ−１２４ｎにインターフェース接続するように、複数のコネクタを備えてもよい。他の実施形態では、コンピューティングデバイス１００は、複数のビデオアダプタを含んでもよく、各ビデオアダプタは、表示デバイス１２４ａ−１２４ｎのうちの１つまたはそれを上回るものに接続される。いくつかの実施形態では、コンピューティングデバイス１００のオペレーティングシステムの任意の部分が、複数の表示デバイス１２４ａ−１２４ｎを使用するために構成されてもよい。他の実施形態では、表示デバイス１２４ａ−１２４ｎのうちの１つまたはそれを上回るものは、例えば、ネットワークを介して、コンピューティングデバイス１００に接続されるコンピューティングデバイス１００ａおよび１００ｂ等の１つまたはそれを上回る他のコンピューティングデバイスによって提供されてもよい。これらの実施形態は、コンピューティングデバイス１００用の第２の表示デバイス１２４ａとして別のコンピュータの表示デバイスを使用するように設計および構築される、任意のタイプのソフトウェアを含んでもよい。当業者は、コンピューティングデバイス１００が複数の表示デバイス１２４ａ−１２４ｎを有するように構成されてもよい、種々の方法および実施形態を認識して理解するであろう。
【００８０】
さらなる実施形態では、Ｉ／Ｏデバイス１３０は、システムバス１５０と、ＵＳＢバス、Ａｐｐｌｅデスクトップバス、ＲＳ−２３２シリアル接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅバス、ＦｉｒｅＷｉｒｅ８００バス、イーサネット（登録商標）バス、ＡｐｐｌｅＴａｌｋバス、ギガビットイーサネット（登録商標）バス、非同期転送モードバス、ＨＩＰＰＩバス、スーパーＨＩＰＰＩバス、ＳｅｒｉａｌＰｌｕｓバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはシリアルアタッチド小型コンピュータシステムインターフェースバス等の外部通信バスとの間のブリッジ１７０であってもよい。
【００８１】
図１Ｅおよび１Ｆで描写される種類のコンピューティングデバイス１００は、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。コンピューティングデバイス１００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃ  ＯＳ（Ｒ）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、またはコンピューティングデバイス上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。典型的なオペレーティングシステムは、とりわけ、全てＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製である、ＷＩＮＤＯＷＳ（登録商標）３．ｘ、ＷＩＮＤＯＷＳ９５、ＷＩＮＤＯＷＳ９８、ＷＩＮＤＯＷＳ２０００、ＷＩＮＤＯＷＳ  ＮＴ３．５１、ＷＩＮＤＯＷＳ  ＮＴ４．０、ＷＩＮＤＯＷＳ  ＣＥ、およびＷＩＮＤＯＷＳ  ＸＰ、Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＭａｃＯＳ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ａｒｍｏｎｋ，  Ｎｅｗ  Ｙｏｒｋ）製のＯＳ／２、およびＣａｌｄｅｒａ  Ｃｏｒｐ．（Ｓａｌｔ  ＬａｋｅＣｉｔｙ，  Ｕｔａｈ）によって配布される無料で入手可能なオペレーティングシステムであるＬｉｎｕｘ（登録商標）、または任意のタイプおよび／または形態のＵＮＩＸ（登録商標）オペレーティングシステムを含む。
【００８２】
他の実施形態では、コンピューティングデバイス１００は、デバイスと一致する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ１００は、Ｐａｌｍ，Ｉｎｃ製のＴｒｅｏ１８０、２７０、１０６０、６００、または６５０スマートフォンである。本実施形態では、Ｔｒｅｏスマートフォンは、ＰａｌｍＯＳオペレーティングシステムの制御下で動作され、スタイラス入力デバイスおよび５方向ナビゲータデバイスを含む。また、コンピューティングデバイス１００は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または通信が可能であり、本明細書に説明される動作を行うために十分なプロセッサ能力およびメモリ容量を有する、他の形態のコンピューティングまたは電気通信デバイスであることができる。
【００８３】
図１Ｇに示されるように、コンピューティングデバイス１００は、複数のプロセッサを備えてもよく、命令の同時実行のため、または１つよりも多くのデータについての１つの命令の同時実行のための機能性を提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つまたはそれを上回るコアを伴う並列プロセッサを備えてもよい。これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、単一のグローバルアドレス空間としての全ての利用可能なメモリにアクセスする、複数のプロセッサおよび／または複数のプロセッサコアを伴う共有メモリ並列デバイスである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、それぞれローカルメモリのみにアクセスする、複数のプロセッサを伴う分散型メモリ並列デバイスである。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、共有される、あるメモリと、特定のプロセッサまたはプロセッサのサブセットのみによってアクセスされることができる、あるメモリとの両方を有する。これらの実施形態のうちのなおもさらに別のものでは、マルチコアマイクロプロセッサ等のコンピューティングデバイス１００は、２つまたはそれを上回る独立プロセッサを、単一のパッケージ、多くの場合、単一の集積回路（ＩＣ）に合体させる。これらの実施形態のうちのさらに別のものでは、コンピューティングデバイス１００は、ＣＥＬＬ  ＢＲＯＡＤＢＡＮＤ  ＥＮＧＩＮＥアーキテクチャを有し、Ｐｏｗｅｒプロセッサ要素と、複数の相乗的処理要素とを含む、チップを含み、Ｐｏｗｅｒプロセッサ要素および複数の相乗的処理要素は、要素相互接続バスと称され得る、内部高速バスによってともに連結される。
【００８４】
いくつかの実施形態では、プロセッサは、複数のデータについての単一の命令を同時に実行するための機能性（ＳＩＭＤ）を提供する。他の実施形態では、プロセッサは、複数のデータについての複数の命令を同時に実行するための機能性（ＭＩＭＤ）を提供する。なおも他の実施形態では、プロセッサは、単一のデバイスでＳＩＭＤおよびＭＩＭＤコアの任意の組み合わせを使用してもよい。
【００８５】
いくつかの実施形態では、コンピューティングデバイス１００は、グラフィックス処理ユニットを備えてもよい。図１Ｈで描写される、これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、少なくとも１つの中央処理ユニット１０１と、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、少なくとも１つの並列処理ユニットと、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、任意のタイプの複数の処理ユニットを含み、複数の処理ユニットのうちの１つは、グラフィックス処理ユニットを備える。
【００８６】
いくつかの実施形態では、第１のコンピューティングデバイス１００ａは、クライアントコンピューティングデバイス１００ｂのユーザの代わりにアプリケーションを実行する。他の実施形態では、コンピューティングデバイス１００ａは、アプリケーションがユーザまたはクライアントコンピューティングデバイス１００ｂの代わりに実行する、実行セッションを提供する、仮想マシンを実行する。これらの実施形態のうちの１つでは、実行セッションは、ホスト型デスクトップセッションである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、端末サービスセッションを実行する。端末サービスセッションは、ホスト型デスクトップ環境を提供してもよい。これらの実施形態のうちのなおも別のものでは、実行セッションは、アプリケーション、複数のアプリケーション、デスクトップアプリケーション、および１つまたはそれを上回るアプリケーションが実行し得るデスクトップセッションのうちの１つまたはそれを上回るものを備え得る、コンピュータ環境へのアクセスを提供する。
Ｂ．アプライアンスアーキテクチャ
【００８７】
図２Ａは、アプライアンス２００の例示的実施形態を図示する。図２Ａのアプライアンス２００のアーキテクチャは、例証のみとして提供され、限定的であることを意図していない。図２に示されるように、アプライアンス２００は、ハードウェア層２０６と、ユーザ空間２０２およびカーネル空間２０４に分割されるソフトウェア層とを備える。
【００８８】
ハードウェア層２０６は、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスが実行される、ハードウェア要素を提供する。ハードウェア層２０６はまた、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスがアプライアンス２００に対して内部および外部の両方でデータを通信することを可能にする、構造および要素も提供する。図２に示されるように、ハードウェア層２０６は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット２６２と、ソフトウェアおよびデータを記憶するためのメモリ２６４と、ネットワークを経由してデータを伝送および受信するためのネットワークポート２６６と、ネットワークを経由して伝送および受信されるデータのセキュアなソケット層処理に関連する機能を果たすための暗号化プロセッサ２６０とを含む。いくつかの実施形態では、中央処理ユニット２６２は、単一のプロセッサにおいて暗号化プロセッサ２６０の機能を果たしてもよい。加えて、ハードウェア層２０６は、処理ユニット２６２および暗号化プロセッサ２６０のそれぞれのための複数のプロセッサを備えてもよい。プロセッサ２６２は、図１Ｅおよび１Ｆに関連して上記で説明されるプロセッサ１０１のうちのいずれかを含んでもよい。例えば、一実施形態では、アプライアンス２００は、第１のプロセッサ２６２と、第２のプロセッサ２６２’とを備える。他の実施形態では、プロセッサ２６２または２６２’は、マルチコアプロセッサを備える。
【００８９】
アプライアンス２００のハードウェア層２０６は、概して、暗号化プロセッサ２６０とともに図示されるが、プロセッサ２６０は、セキュアソケットレイヤ（ＳＳＬ）またはトランスポート層セキュリティ（ＴＬＳ）プロトコル等の任意の暗号化プロトコルに関連する機能を果たすためのプロセッサであってもよい。いくつかの実施形態では、プロセッサ２６０は、汎用プロセッサ（ＧＰＰ）であってもよく、さらなる実施形態では、任意のセキュリティ関連プロトコルの処理を行うための実行可能命令を有してもよい。
【００９０】
アプライアンス２００のハードウェア層２０６は、図２のある要素とともに図示されるが、アプライアンス２００のハードウェア部分またはコンポーネントは、図１Ｅおよび１Ｆと併せて本明細書に図示および議論されるコンピューティングデバイス１００等のコンピューティングデバイスの任意のタイプおよび形態の要素、ハードウェア、またはソフトウェアを備えてもよい。いくつかの実施形態では、アプライアンス２００は、サーバ、ゲートウェイ、ルータ、スイッチ、ブリッジ、または他のタイプのコンピューティングまたはネットワークデバイスを備え、それと関連付けられる任意のハードウェアおよび／またはソフトウェア要素を有してもよい。
【００９１】
アプライアンス２００のオペレーティングシステムは、利用可能なシステムメモリをカーネル空間２０４およびユーザ空間２０４の中へ配分、管理、または別様に分離する。例示的ソフトウェアアーキテクチャ２００では、オペレーティングシステムは、任意のタイプおよび／または形態のＵｎｉｘ（登録商標）オペレーティングシステムであってもよいが、本発明は、そのように限定されない。したがって、アプライアンス２００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、ＵＮＩＸ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃ  ＯＳ（Ｒ）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専有オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、またはアプライアンス２００上で起動し、本明細書に説明される動作を行うことが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。
【００９２】
カーネル空間２０４は、任意のデバイスドライバ、カーネル拡張、または他のカーネル関連ソフトウェアを含む、カーネル２３０を起動するために留保される。当業者に公知であるように、カーネル２３０は、オペレーティングシステムのコアであり、アプリケーション１０４のリソースおよびハードウェア関連要素のアクセス、制御、および管理を提供する。アプライアンス２００の実施形態によると、カーネル空間２０４はまた、その利益が本明細書でさらに詳細に説明される、時として、統合キャッシュと称されることもある、キャッシュマネージャ２３２と連動して作動するいくつかのネットワークサービスまたはプロセスも含む。加えて、カーネル２３０の実施形態は、デバイス２００によってインストール、構成、または別様に使用されるオペレーティングシステムの実施形態に依存するであろう。
【００９３】
一実施形態では、デバイス２００は、クライアント１０２および／またはサーバ１０６と通信するために、ＴＣＰ／ＩＰベースのスタック等の１つのネットワークスタック２６７を備える。一実施形態では、ネットワークスタック２６７は、ネットワーク１０８等の第１のネットワークおよび第２のネットワーク１１０と通信するために使用される。いくつかの実施形態では、デバイス２００は、クライアント１０２のＴＣＰ接続等の第１のトランスポート層接続を終了させ、クライアント１０２によって使用するためにサーバ１０６への第２のトランスポート層接続を確立し、例えば、第２のトランスポート層接続は、アプライアンス２００およびサーバ１０６において終了される。第１および第２のトランスポート層接続は、単一のネットワークスタック２６７を介して接続されてもよい。他の実施形態では、デバイス２００は、複数のネットワークスタック、例えば、２６７および２６７’を備えてもよく、第１のトランスポート層接続は、１つのネットワークスタック２６７において、第２のトランスポート層接続は、第２のネットワークスタック２６７上で、確立または終了されてもよい。例えば、１つのネットワークスタックは、第１のネットワーク上でネットワークパケットを受信および伝送するため、別のネットワークスタックは、第２のネットワーク上でネットワークパケットを受信および伝送するためのものであってもよい。一実施形態では、ネットワークスタック２６７は、アプライアンス２００による伝送のために１つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファ２４３を備える。
【００９４】
図２に示されるように、カーネル空間２０４は、キャッシュマネージャ２３２と、高速層２−７統合パケットエンジン２４０と、暗号化エンジン２３４と、ポリシエンジン２３６と、マルチプロトコル圧縮論理２３８とを含む。ユーザ空間２０２の代わりに、カーネル空間２０４またはカーネルモードでこれらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８を起動することは、単独で、および組み合わせて、これらのコンポーネントのそれぞれの性能を改良する。カーネル動作は、これらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８が、デバイス２００のオペレーティングシステムのコアアドレス空間内で起動することを意味する。例えば、カーネルモードで暗号化エンジン２３４を起動することは、暗号化および暗号解読動作をカーネルに移動させ、それによって、カーネルモードにおけるメモリ空間またはカーネルスレッドとユーザモードにおけるメモリ空間またはスレッドとの間の移行の数を削減することによって、暗号化性能を改良する。例えば、カーネルモードで取得されるデータは、カーネルレベルデータ構造からユーザレベルデータ構造まで等、ユーザモードで起動するプロセスまたはスレッドにパスまたはコピーされる必要がなくなり得る。別の側面では、カーネルモードとユーザモードとの間のコンテキスト切替の数も削減される。加えて、コンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８のうちのいずれかの同期化およびその間の通信が、カーネル空間２０４内でより効率的に行われることができる。
【００９５】
いくつかの実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８の任意の部分が、カーネル空間２０４内で起動または動作してもよい一方で、これらのコンポーネント２３２、２４０、２３４、２３６、および２３８の他の部分は、ユーザ空間２０２内で起動または動作してもよい。一実施形態では、アプライアンス２００は、１つまたはそれを上回るネットワークパケットの任意の部分、例えば、クライアント１０２からの要求またはサーバ１０６からの応答を備える、ネットワークパケットへのアクセスを提供する、カーネルレベルデータ構造を使用する。いくつかの実施形態では、カーネルレベルデータ構造は、ネットワークスタック２６７へのトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン２４０によって取得されてもよい。カーネルレベルデータ構造は、ネットワークスタック２６７、ネットワークトラフィック、またはネットワークスタック２６７によって受信または伝送されるパケットに関連するカーネル空間２０４を介してアクセス可能である、任意のインターフェースおよび／またはデータを備えてもよい。他の実施形態では、カーネルレベルデータ構造は、コンポーネントまたはプロセスの所望の動作を行うために、コンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８のうちのいずれかによって使用されてもよい。一実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８が、カーネルレベルデータ構造を使用するときにカーネルモード２０４で起動している一方で、別の実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８は、カーネルレベルデータ構造を使用するときにユーザモードで起動している。いくつかの実施形態では、カーネルレベルデータ構造は、第２のカーネルレベルデータ構造または任意の所望のユーザレベルデータ構造にコピーまたはパスされてもよい。
【００９６】
キャッシュマネージャ２３２は、発信サーバ１０６によって供給される、オブジェクトまたは動的に生成されたオブジェクト等の任意のタイプおよび形態のコンテンツのキャッシュアクセス、制御、および管理を提供する、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。キャッシュマネージャ２３２によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、マークアップ言語等の任意の形式である、または任意のプロトコルを介して通信される、データを備えてもよい。いくつかの実施形態では、キャッシュマネージャ２３２は、元のデータが、キャッシュメモリ要素を読み取ることに対して、フェッチ、計算、または別様に取得するためにより長いアクセス時間を要求し得る、他の場所に記憶された元のデータ、または前もって計算、生成、または伝送されたデータを複製する。いったんデータがキャッシュメモリ要素に記憶されると、元のデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスし、それによって、アクセス時間を短縮することによって、将来の使用が行われることができる。いくつかの実施形態では、キャッシュメモリ要素は、デバイス２００のメモリ２６４の中にデータオブジェクトを備えてもよい。他の実施形態では、キャッシュメモリ要素は、メモリ２６４よりも速いアクセス時間を有する、メモリを備えてもよい。別の実施形態では、キャッシュメモリ要素は、ハードディスクの一部等のデバイス２００の任意のタイプおよび形態の記憶要素を備えてもよい。いくつかの実施形態では、処理ユニット２６２は、キャッシュマネージャ２３２によって使用するためのキャッシュメモリを提供してもよい。その上さらなる実施形態では、キャッシュマネージャ２３２は、データ、オブジェクト、および他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組み合わせを使用してもよい。
【００９７】
さらに、キャッシュマネージャ２３２は、本明細書に説明されるアプライアンス２００の技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。例えば、キャッシュマネージャ２３２は、無効化時間周期の満了に基づいて、またはクライアント１０２またはサーバ１０６からの無効化コマンドの受信に応じて、オブジェクトを無効化する論理または機能性を含む。いくつかの実施形態では、キャッシュマネージャ２３２は、カーネル空間２０４内で、他の実施形態では、ユーザ空間２０２内で実行する、プログラム、サービス、プロセス、またはタスクとして動作してもよい。一実施形態では、キャッシュマネージャ２３２の第１の部分が、ユーザ空間２０２内で実行する一方で、第２の部分は、カーネル空間２０４内で実行する。いくつかの実施形態では、キャッシュマネージャ２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブル論理デバイス（ＰＬＤ）、または特定用途向け集積回路（ＡＳＩＣ）等の任意の他のタイプの集積回路を備えることができる。
【００９８】
ポリシエンジン２３６は、例えば、知的統計エンジンまたは他のプログラマブルアプリケーションを含んでもよい。一実施形態では、ポリシエンジン２３６は、ユーザがキャッシングポリシを識別、規定、定義、または構成することを可能にする構成機構を提供する。ポリシエンジン２３６はまた、いくつかの実施形態では、ユーザ選択キャッシングポリシ決定を有効にするように、ルックアップテーブルまたはハッシュテーブル等のデータ構造をサポートするメモリへのアクセスも有する。他の実施形態では、ポリシエンジン２３６は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス２００によって行われる任意の他の機能または動作のアクセス、制御、および管理に加えて、アプライアンス２００によってキャッシュされているオブジェクト、データ、またはコンテンツのアクセス、制御、および管理を判定して提供する、任意の論理、ルール、機能、または動作を備えてもよい。具体的キャッシングポリシのさらなる実施例が、本明細書でさらに説明される。
【００９９】
暗号化エンジン２３４は、ＳＳＬまたはＴＬＳ等の任意のセキュリティ関連プロトコル、またはそれに関連する任意の機能の処理をハンドリングするための任意の論理、ビジネスルール、機能、または動作を備える。例えば、暗号化エンジン２３４は、アプライアンス２００を介して通信されるネットワークパケットまたはその任意の部分を暗号化および解読する。暗号化エンジン２３４はまた、クライアント１０２ａ−１０２ｎ、サーバ１０６ａ−１０６ｎ、またはアプライアンス２００の代わりにＳＳＬまたはＴＬＳ接続を設定または確立してもよい。したがって、暗号化エンジン２３４は、ＳＳＬ処理のオフローディングおよび加速を提供する。一実施形態では、暗号化エンジン２３４は、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間に仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。いくつかの実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０と通信する。他の実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０上で起動する実行可能命令を備える。
【０１００】
マルチプロトコル圧縮エンジン２３８は、デバイス２００のネットワークスタック２６７によって使用されるプロトコルのうちのいずれか等のネットワークパケットの１つまたはそれを上回るプロトコルを圧縮するための任意の論理、ビジネスルール、機能、もしく動作を備える。一実施形態では、マルチプロトコル圧縮エンジン２３８は、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間で双方向性に、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（Ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルを圧縮する。他の実施形態では、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマークアップ言語（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、いくつかの実施形態では、拡張マークアップ言語（ＸＭＬ）等の任意のマークアップ言語の圧縮を提供する。一実施形態では、マルチプロトコル圧縮エンジン２３８は、アプライアンス２００間通信のために設計される任意のプロトコル等の任意の高性能プロトコルの圧縮を提供する。別の実施形態では、マルチプロトコル圧縮エンジン２３８は、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の修正されたトランスポート制御プロトコルを使用して、任意の通信の任意のペイロードまたは任意の通信を圧縮する。
【０１０１】
したがって、マルチプロトコル圧縮エンジン２３８は、デスクトップクライアント、例えば、Ｏｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌのような頻用されている企業アプリケーションによって起動される任意のクライアント等のＭｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋおよび非ウェブシンクライアント、およびＰｏｃｋｅｔ  ＰＣ等のモバイルクライアントさえも介して、アプリケーションにアクセスするユーザのために性能を加速する。いくつかの実施形態では、マルチプロトコル圧縮エンジン２３８は、カーネルモード２０４内で実行し、ネットワークスタック２６７にアクセスするパケット処理エンジン２４０と統合することによって、任意のアプリケーション層プロトコル等のＴＣＰ／ＩＰプロトコルによって搬送されるプロトコルのうちのいずれかを圧縮することができる。
【０１０２】
概して、パケット処理エンジンまたはパケットエンジンとも称される、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してアプライアンス２００によって受信および伝送されるパケットのカーネルレベル処理を管理する責任がある。高速層２−７統合パケットエンジン２４０は、ネットワークパケットの受信またはネットワークパケットの伝送のため等、処理中に１つまたはそれを上回るネットワークパケットを待ち行列に入れるためのバッファを備えてもよい。加えて、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してネットワークパケットを送信および受信するように、１つまたはそれを上回るネットワークスタック２６７と通信する。高速層２−７統合パケットエンジン２４０は、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８と連動して作動する。具体的には、暗号化エンジン２３４は、パケットのＳＳＬ処理を行うように構成され、ポリシエンジン２３６は、要求レベルコンテンツ切替および要求レベルキャッシュリダイレクト等のトラフィック管理に関連する機能を果たすように構成され、マルチプロトコル圧縮論理２３８は、データの圧縮および解凍に関連する機能を果たすように構成される。
【０１０３】
高速層２−７統合パケットエンジン２４０は、パケット処理タイマ２４２を含む。一実施形態では、パケット処理タイマ２４２は、着信、すなわち、受信された、または発信、すなわち、伝送されたネットワークパケットの処理をトリガするように、１つまたはそれを上回る時間間隔を提供する。いくつかの実施形態では、高速層２−７統合パケットエンジン２４０は、タイマ２４２に応答してネットワークパケットを処理する。パケット処理タイマ２４２は、時間関連イベント、間隔、または発生を通知、トリガ、または通信するように、任意のタイプおよび形態の信号をパケットエンジン２４０に提供する。多くの実施形態では、パケット処理タイマ２４２は、例えば、１００ミリ秒、５０ミリ秒、または２５ミリ秒等、ミリ秒のオーダーで動作する。例えば、いくつかの実施形態では、パケット処理タイマ２４２が、時間間隔を提供する、または別様にネットワークパケットを１０ミリ秒時間間隔で高速層２−７統合パケットエンジン２４０によって処理させる一方で、他の実施形態では、５ミリ秒時間間隔で、依然としてさらに、さらなる実施形態では、３、２、または１ミリ秒ほどの短さの時間間隔で処理させる。高速層２−７統合パケットエンジン２４０は、動作中に暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮エンジン２３８とインターフェースをとられ、統合され、または通信してもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかが、パケット処理タイマ２４２および／またはパケットエンジン２４０に応答して行われてもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかは、パケット処理タイマ２４２を介して提供される時間間隔の粒度で、例えば、１０ミリ秒未満またはそれに等しい時間間隔で行われてもよい。例えば、一実施形態では、キャッシュマネージャ２３２は、高速層２−７統合パケットエンジン２４０および／またはパケット処理タイマ２４２に応答して、任意のキャッシュされたオブジェクトの無効化を行ってもよい。別の実施形態では、キャッシュされたオブジェクトの満了または無効化時間は、１０ミリ秒毎等のパケット処理タイマ２４２の時間間隔と同程度の粒度に設定されることができる。
【０１０４】
カーネル空間２０４と対照的に、ユーザ空間２０２は、別様にユーザモードで起動するユーザモードアプリケーションまたはプログラムによって使用される、オペレーティングシステムのメモリ領域または部分である。ユーザモードアプリケーションは、カーネル空間２０４に直接アクセスしなくてもよく、カーネルサービスにアクセスするためにサービスコールを使用する。図２に示されるように、アプライアンス２００のユーザ空間２０２は、グラフィカルユーザインターフェース（ＧＵＩ）２１０と、コマンドラインインターフェース（ＣＬＩ）２１２と、シェルサービス２１４と、健全性監視プログラム２１６と、デーモンサービス２１８とを含む。ＧＵＩ２１０およびＣＬＩ２１２は、システム管理者または他のユーザが、アプライアンス２００のオペレーティングシステムを介して等、アプライアンス２００と相互作用し、その動作を制御することができる、手段を提供する。ＧＵＩ２１０またはＣＬＩ２１２は、ユーザ空間２０２またはカーネル空間２０４内で起動するコードを備えることができる。ＧＵＩ２１０は、任意のタイプおよび形態のグラフィカルユーザインターフェースであってもよく、テキスト、グラフィカルを介して、または別様にブラウザ等の任意のタイプのプログラムまたはアプリケーションによって、提示されてもよい。ＣＬＩ２１２は、オペレーティングシステムによって提供されるコマンドライン等の任意のタイプおよび形態のコマンドラインまたはテキストベースのインターフェースであってもよい。例えば、ＣＬＩ２１２は、ユーザがオペレーティングシステムと相互作用することを可能にするツールである、シェルを備えてもよい。いくつかの実施形態では、ＣＬＩ２１２は、ｂａｓｈ、ｃｓｈ、ｔｃｓｈ、またはｋｓｈタイプシェルを介して提供されてもよい。シェルサービス２１４は、ＧＵＩ２１０および／またはＣＬＩ２１２を介したユーザによるアプライアンス２００またはオペレーティングシステムとの相互作用をサポートする、プログラム、サービス、タスク、プロセス、または実行可能命令を備える。
【０１０５】
健全性監視プログラム２１６は、ネットワークシステムが適切に機能していることと、ユーザがネットワークを経由して要求されたコンテンツを受信することとを監視し、チェックし、報告し、確実にするために使用される。健全性監視プログラム２１６は、アプライアンス２００の任意のアクティビティを監視するための論理、ルール、機能、または動作を提供する、１つまたはそれを上回るプログラム、サービス、タスク、プロセス、または実行可能命令を備える。いくつかの実施形態では、健全性監視プログラム２１６は、アプライアンス２００を介してパスされる任意のネットワークトラフィックを傍受して点検する。他の実施形態では、健全性監視プログラム２１６は、任意の好適な手段および／または機構によって、以下、すなわち、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、マルチプロトコル圧縮論理２３８、パケットエンジン２４０、デーモンサービス２１８、およびシェルサービス２１４のうちの１つまたはそれを上回るものとインターフェースをとる。したがって、健全性監視プログラム２１６は、アプライアンス２００の任意の部分の状態、ステータス、または健全性を判定するように、任意のアプリケーションプログラミングインターフェース（ＡＰＩ）を呼び出してもよい。例えば、健全性監視プログラム２１６は、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在起動しているかどうかをチェックするように、周期的基準でステータス問い合わせをｐｉｎｇまたは送信してもよい。別の実施例では、健全性監視プログラム２１６は、アプライアンス２００の任意の部分と任意の条件、ステータス、またはエラーを判定するように、任意のプログラム、プロセス、サービス、またはタスクによって提供される、任意のステータス、エラー、または履歴ログをチェックしてもよい。
【０１０６】
デーモンサービス２１８は、連続的に、またはバックグラウンドで起動し、アプライアンス２００によって受信される周期的サービス要求をハンドリングする、プログラムである。いくつかの実施形態では、デーモンサービスは、適宜、別のデーモンサービス２１８等の他のプログラムまたはプロセスに要求を自動転送してもよい。当業者に公知であるように、デーモンサービス２１８は、ネットワーク制御等の連続的または周期的なシステム全体の機能を果たすように、または任意の所望のタスクを行うように、無人で起動してもよい。いくつかの実施形態では、１つまたはそれを上回るデーモンサービス２１８は、ユーザ空間２０２内で起動する一方、他の実施形態では、１つまたはそれを上回るデーモンサービス２１８は、カーネル空間内で起動する。
【０１０７】
ここで図２Ｂを参照すると、アプライアンス２００の別の実施形態が描写されている。要するに、アプライアンス２００は、以下のサービス、機能性、または動作、すなわち、ＳＳＬ  ＶＰＮコネクティビティ２８０、切替／負荷平衡２８４、ドメイン名サービス解決２８６、加速２８８、および１つまたはそれを上回るクライアント１０２と１つまたはそれを上回るサーバ１０６との間の通信用のアプリケーションファイアウォール２９０のうちの１つまたはそれを上回るものを提供する。サーバ１０６はそれぞれ、１つまたはそれを上回るネットワーク関連サービス２７０ａ−２７０ｎ（サービス２７０と称される）を提供してもよい。例えば、サーバ１０６は、ｈｔｔｐサービス２７０を提供してもよい。アプライアンス２００は、ｖサーバ、ＶＩＰサーバ、または単にＶＩＰ２７５ａ−２７５ｎと称される（本明細書ではｖサーバ２７５とも称される）、１つまたはそれを上回る仮想サーバまたは仮想インターネットプロトコルサーバを備える。ｖサーバ２７５は、アプライアンス２００の構成および動作に従って、クライアント１０２とサーバ１０６との間の通信を受信、傍受、または別様に処理する。
【０１０８】
ｖサーバ２７５は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。ｖサーバ２７５は、アプライアンス２００においてユーザモード２０２、カーネルモード２０４、またはそれらの任意の組み合わせで動作する、任意のタイプおよび形態のプログラム、サービス、タスク、プロセス、または実行可能命令を備えてもよい。ｖサーバ２７５は、ＳＳＬ  ＶＰＮ２８０、切替／負荷平衡２８４、ドメイン名サービス解決２８６、加速２８８、およびアプリケーションファイアウォール２９０等の本明細書に説明される技法の任意の実施形態を行う任意の論理、機能、ルール、または動作を含む。いくつかの実施形態では、ｖサーバ２７５は、サーバ１０６のサービス２７０への接続を確立する。サービス２７５は、アプライアンス２００、クライアント１０２、またはｖサーバ２７５に接続し、それと通信することが可能な任意のプログラム、アプリケーション、プロセス、タスク、または実行可能命令のセットを備えてもよい。例えば、サービス２７５は、ウェブサーバ、ｈｔｔｐサーバ、ｆｔｐ、Ｅメール、またはデータベースサーバを備えてもよい。いくつかの実施形態では、サービス２７０は、Ｅメール、データベース、または企業アプリケーション等のアプリケーションのための通信をリッスン、受信、および／または送信するためのデーモンプロセスまたはネットワークドライバである。いくつかの実施形態では、サービス２７０は、具体的ＩＰアドレス、またはＩＰアドレスおよびポート上で通信してもよい。
【０１０９】
いくつかの実施形態では、ｖサーバ２７５は、ポリシエンジン２３６の１つまたはそれを上回るポリシを、クライアント１０２とサーバ１０６との間のネットワーク通信に適用する。一実施形態では、ポリシは、ｖサーバ２７５と関連付けられる。別の実施形態では、ポリシは、ユーザまたはユーザのグループに基づく。さらに別の実施形態では、ポリシは、大域的であり、１つまたはそれを上回るｖサーバ２７５ａ−２７５ｎ、およびアプライアンス２００を介して通信する任意のユーザまたはユーザのグループに適用される。いくつかの実施形態では、ポリシエンジンのポリシは、インターネットプロトコルアドレス、ポート、プロトコルタイプ、ヘッダ、またはパケット内のフィールド等の通信の任意のコンテンツ、またはユーザ、ユーザのグループ、ｖサーバ２７５、トランスポート層接続、および／またはクライアント１０２またはサーバ１０６の識別または属性等の通信のコンテキストに基づいて、ポリシが適用される条件を有する。
【０１１０】
他の実施形態では、アプライアンス２００は、サーバ１０６からコンピュータ環境１５、アプリケーション、および／またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント１０２の認証および／または承認を判定するように、ポリシエンジン２３６と通信する、またはインターフェースをとる。別の実施形態では、アプライアンス２００は、アプリケーション配信システム１９０にコンピュータ環境１５、アプリケーション、および／またはデータファイルのうちの１つまたはそれを上回るものを配信させるための遠隔ユーザまたは遠隔クライアント１０２の認証および／または承認を判定するように、ポリシエンジン２３６と通信する、またはインターフェースをとる。さらに別の実施形態では、アプライアンス２００は、ポリシエンジン２３６の認証および／または遠隔ユーザまたは遠隔クライアント１０２の承認に基づいて、ＶＰＮまたはＳＳＬ  ＶＰＮ接続を確立する。一実施形態では、アプライアンス２００は、ポリシエンジン２３６のポリシに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。例えば、アプライアンス２００は、ポリシエンジン２３６に基づいて、コンピュータ環境１５、アプリケーション、またはデータファイルへのアクセスを制御してもよい。
【０１１１】
いくつかの実施形態では、ｖサーバ２７５は、クライアントエージェント１２０を介したクライアント１０２とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖサーバ２７５は、クライアント１０２からの通信をリッスンして受信する。他の実施形態では、ｖサーバ２７５は、クライアントサーバ１０６とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖサーバ２７５は、サーバ１０６上で起動するサーバ２７０のインターネットプロトコルアドレスおよびポートへのトランスポート層接続を確立する。別の実施形態では、ｖサーバ２７５は、クライアント１０２への第１のトランスポート層接続をサーバ１０６への第２のトランスポート層接続と関連付ける。いくつかの実施形態では、ｖサーバ２７５は、サーバ１０６へのトランスポート層接続のプールを確立し、プールされたトランスポート層接続を介してクライアント要求を多重化する。
【０１１２】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のＳＳＬ  ＶＰＮ接続２８０を提供する。例えば、第１のネットワーク１０２上のクライアント１０２は、第２のネットワーク１０４’上のサーバ１０６への接続を確立することを要求する。いくつかの実施形態では、第２のネットワーク１０４’は、第１のネットワーク１０４からルーティング可能ではない。他の実施形態では、クライアント１０２は、公衆ネットワーク１０４上にあり、サーバ１０６は、企業ネットワーク等のプライベートネットワーク１０４’上にある。一実施形態では、クライアントエージェント１２０は、第１のネットワーク１０４上のクライアント１０２の通信を傍受し、通信を暗号化し、第１のトランスポート層接続を介してアプライアンス２００に通信を伝送する。アプライアンス２００は、第１のネットワーク１０４上の第１のトランスポート層接続を、第２のネットワーク１０４上のサーバ１０６への第２のトランスポート層接続に関連付ける。アプライアンス２００は、クライアントエージェント１０２から傍受された通信を受信し、通信を解読し、第２のトランスポート層接続を介して第２のネットワーク１０４上のサーバ１０６に通信を伝送する。第２のトランスポート層接続は、プールされたトランスポート層接続であってもよい。したがって、アプライアンス２００は、２つのネットワーク１０４、１０４’の間のクライアント１０２のためのエンドツーエンドセキュアトランスポート層接続を提供する。
【０１１３】
一実施形態では、アプライアンス２００は、仮想プライベートネットワーク１０４上のクライアント１０２のイントラネットインターネットプロトコルまたはＩｎｔｒａｎｅｔＩＰ２８２アドレスをホストする。クライアント１０２は、第１のネットワーク１０４上のインターネットプロトコル（ＩＰ）アドレスおよび／またはホスト名等のローカルネットワーク識別子を有する。アプライアンス２００を介して第２のネットワーク１０４’に接続されたとき、アプライアンス２００は、第２のネットワーク１０４’上のクライアント１０２のＩＰアドレスおよび／またはホスト名等のネットワーク識別子である、ＩｎｔｒａｎｅｔＩＰアドレス２８２を確立する、割り当てる、または別様に提供する。アプライアンス２００は、クライアントの確立されたＩｎｔｒａｎｅｔＩＰ２８２を使用して、クライアント１０２に向かってダイレクトされる任意の通信のための第２またはプライベートネットワーク１０４’をリッスンし、その上で受信する。一実施形態では、アプライアンス２００は、第２のプライベートネットワーク１０４上のクライアント１０２として、またはその代わりに作用する。例えば、別の実施形態では、ｖサーバ２７５は、クライアント１０２のＩｎｔｒａｎｅｔＩＰ２８２への通信をリッスンし、それに応答する。いくつかの実施形態では、第２のネットワーク１０４’上のコンピューティングデバイス１００が要求を伝送する場合、アプライアンス２００は、それがクライアント１０２であるかのように要求を処理する。例えば、アプライアンス２００は、クライアントのＩｎｔｒａｎｅｔＩＰ２８２へのｐｉｎｇに応答してもよい。別の実施例では、アプライアンスは、クライアントのＩｎｔｒａｎｅｔＩＰ２８２との接続を要求する、第２のネットワーク１０４上のコンピューティングデバイス１００とのＴＣＰまたはＵＤＰ接続等の接続を確立してもよい。
【０１１４】
いくつかの実施形態では、アプライアンス２００は、以下の加速技法２８８のうちの１つまたはそれを上回るもの、すなわち、１）圧縮、２）解凍、３）伝送制御プロトコルプーリング、４）伝送制御プロトコル多重化、５）伝送制御プロトコルバッファリング、および６）キャッシングを、クライアント１０２とサーバ１０６との間の通信に提供する。
【０１１５】
一実施形態では、アプライアンス２００は、各サーバ１０６との１つまたはそれを上回るトランスポート層接続を開放し、インターネットを介したクライアントによる反復データアクセスを可能にするように、これらの接続を維持することによって、クライアント１０２へのトランスポート層接続を繰り返し開放および閉鎖することによって引き起こされる処理負荷の多くからサーバ１０６を解放する。本技法は、本明細書では「接続プーリング」と称される。
【０１１６】
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント１０２からサーバ１０６への通信をシームレスに接合するために、アプライアンス２００は、トランスポート層プロトコルレベルでシーケンス番号および確認応答番号を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、インバウンドパケット（すなわち、クライアント１０２から受信されるパケット）の場合、パケットのソースネットワークアドレスは、アプライアンス２００の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。アウトバウンドパケット（すなわち、サーバ１０６から受信されるもの）の場合、ソースネットワークアドレスは、サーバ１０６のものからアプライアンス２００の出力ポートのものに変更され、宛先アドレスは、アプライアンス２００のものから要求側クライアント１０２のものに変更される。パケットのシーケンス番号および確認応答番号はまた、アプライアンス２００のクライアント１０２へのトランスポート層接続上でクライアント１０２によって予期されるシーケンス番号および確認応答番号に変換される。いくつかの実施形態では、トランスポート層プロトコルのパケットチェックサムが、これらの変換を考慮するように再計算される。
【０１１７】
別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のための切替または負荷平衡機能性２８４を提供する。いくつかの実施形態では、アプライアンス２００は、トラフィックを配布し、層４またはアプリケーション層要求データに基づいてクライアント要求をサーバ１０６にダイレクトする。一実施形態では、ネットワークパケットのネットワーク層または層２が宛先サーバ１０６を識別するが、アプライアンス２００は、トランスポート層パケットのペイロードとして搬送されるアプリケーション情報およびデータによってネットワークパケットを分配するサーバ１０６を判定する。一実施形態では、アプライアンス２００の健全性監視プログラム２１６は、クライアントの要求を分配するサーバ１０６を判定するように、サーバの健全性を監視する。いくつかの実施形態では、アプライアンス２００が、サーバ１０６が利用可能ではない、または所定の閾値を上回る負荷を有することを検出する場合、アプライアンス２００は、クライアント要求を別のサーバ１０６にダイレクトまたは分配することができる。
【０１１８】
いくつかの実施形態では、アプライアンス２００は、ドメイン名サービス（ＤＮＳ）リゾルバとして作用する、または別様にクライアント１０２からのＤＮＳ要求の解決を提供する。いくつかの実施形態では、アプライアンスは、クライアント１０２によって伝送されるＤＮＳ要求を傍受する。一実施形態では、アプライアンス２００は、アプライアンス２００またはそれによってホストされるＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。本実施形態では、クライアント１０２は、ドメイン名のためのネットワーク通信をアプライアンス２００に伝送する。別の実施形態では、アプライアンス２００は、第２のアプライアンス２００’またはそれによってホストされるＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００によって判定されるサーバ１０６のＩＰアドレスを用いて、クライアントのＤＮＳ要求に応答する。
【０１１９】
さらに別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のためのアプリケーションファイアウォール機能性２９０を提供する。一実施形態では、ポリシエンジン２３６は、違法な要求を検出して遮断するためのルールを提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、サービス妨害（ＤｏＳ）攻撃から保護する。他の実施形態では、アプライアンスは、アプリケーションベースの攻撃を識別して遮断する傍受された要求のコンテンツを点検する。いくつかの実施形態では、ルール／ポリシエンジン２３６は、以下のうちの１つまたはそれを上回るもの、すなわち、１）バッファオーバーフロー、２）ＣＧＩ−ＢＩＮパラメータ操作、３）フォーム／非表示フィールド操作、４）強制的ブラウジング、５）クッキーまたはセッションポイズニング、６）破損したアクセス制御リスト（ＡＣＬ）または弱いパスワード、７）クロスサイトスクリプティング（ＸＳＳ）、８）コマンドインジェクション、９）ＳＱＬインジェクション、１０）エラートリガ型機密情報漏出、１１）暗号化の不安定な使用、１２）サーバ不正構成、１３）バックドアおよびデバッグオプション、１４）ウェブサイト改変、１５）プラットフォームまたはオペレーティングシステム脆弱性、および１６）ゼロデイ攻撃等の種々のクラスおよびタイプのウェブまたはインターネットベースの脆弱性に対する保護を提供するための１つまたはそれを上回るアプリケーションファイアウォールまたはセキュリティ制御ポリシを備える。ある実施形態では、アプリケーションファイアウォール２９０は、以下のうちの１つまたはそれを上回るもの、すなわち、１）要求されたフィールドが返される、２）いかなる追加フィールドも許容されない、３）読取専用および非表示フィールド実行、４）ドロップダウンリストおよびラジオボタンフィールド適合性、および５）フォームフィールド最大長実行のためにネットワーク通信を点検または分析する形態でＨＴＭＬフォームフィールド保護を提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、クッキーが修正されていないことを確実にする。他の実施形態では、アプリケーションファイアウォール２９０は、合法なＵＲＬを実行することによって強制的ブラウジングから保護する。
【０１２０】
なおもさらなる他の実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信に含有される任意の極秘情報を保護する。アプリケーションファイアウォール２９０は、ネットワークパケットの任意のフィールド内の任意の極秘情報を識別するように、エンジン２３６のルールまたはポリシに従って任意のネットワーク通信を点検または分析してもよい。いくつかの実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信内で、クレジットカード番号、パスワード、社会保障番号、氏名、患者コード、連絡先情報、および年齢のうちの１つまたはそれを上回る発生を識別する。ネットワーク通信のエンコードされた部分は、これらの発生または極秘情報を備えてもよい。これらの発生に基づいて、一実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信の伝送を防止する等のポリシアクションをネットワーク通信上でとってもよい。別の実施形態では、アプリケーションファイアウォール２９０は、そのような識別された発生または極秘情報を書き換える、除去する、または別様に隠してもよい。
【０１２１】
依然として図２Ｂを参照すると、アプライアンス２００は、図１Ｄと併せて上記で議論されるような性能監視エージェント１９７を含んでもよい。一実施形態では、アプライアンス２００は、図１Ｄで描写されるように監視サービス１９８または監視サーバ１０６から監視エージェント１９７を受信する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００と通信する任意のクライアントまたはサーバに配信するために、ディスク等の記憶装置の中に監視エージェント１９７を記憶する。例えば、一実施形態では、アプライアンス２００は、トランスポート層接続を確立する要求を受信することに応じて、監視エージェント１９７をクライアントに伝送する。他の実施形態では、アプライアンス２００は、クライアント１０２とのトランスポート層接続を確立することに応じて、監視エージェント１９７を伝送する。別の実施形態では、アプライアンス２００は、ウェブページの要求を傍受または検出することに応じて、監視エージェント１９７をクライアントに伝送する。さらに別の実施形態では、アプライアンス２００は、監視サーバ１９８からの要求に応答して、監視エージェント１９７をクライアントまたはサーバに伝送する。一実施形態では、アプライアンス２００は、監視エージェント１９７を第２のアプライアンス２００’またはアプライアンス２０５に伝送する。
【０１２２】
他の実施形態では、アプライアンス２００は、監視エージェント１９７を実行する。一実施形態では、監視エージェント１９７は、アプライアンス２００上で実行する任意のアプリケーション、プログラム、プロセス、サービス、タスク、またはスレッドの性能を測定して監視する。例えば、監視エージェント１９７は、ｖサーバ２７５Ａ−２７５Ｎの性能および動作を監視して測定してもよい。別の実施形態では、監視エージェント１９７は、アプライアンス２００の任意のトランスポート層接続の性能を測定して監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００をトラバースする任意のユーザセッションの性能を測定して監視する。一実施形態では、監視エージェント１９７は、ＳＳＬ  ＶＰＮセッション等のアプライアンス２００をトラバースする任意の仮想プライベートネットワーク接続および／またはセッションの性能を測定して監視する。なおもさらなる実施形態では、監視エージェント１９７は、アプライアンス２００のメモリ、ＣＰＵ、およびディスク使用量および性能を測定して監視する。さらに別の実施形態では、監視エージェント１９７は、ＳＳＬオフローディング、接続プーリングおよび多重化、キャッシング、および圧縮等のアプライアンス２００によって行われる任意の加速技法２８８の性能を測定して監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００によって行われる任意の負荷平衡および／またはコンテンツ切替２８４の性能を測定して監視する。他の実施形態では、監視エージェント１９７は、アプライアンス２００によって行われるアプリケーションファイアウォール２９０保護および処理の性能を測定して監視する。
Ｃ．クライアントエージェント
【０１２３】
ここで図３を参照すると、クライアントエージェント１２０の実施形態が描写されている。クライアント１０２は、ネットワーク１０４を介してアプライアンス２００および／またはサーバ１０６との通信を確立して交換するためのクライアントエージェント１２０を含む。要するに、クライアント１０２は、カーネルモード３０２およびユーザモード３０３を伴うオペレーティングシステムと、１つまたはそれを上回る層３１０ａ−３１０ｂを伴うネットワークスタック３１０とを有する、コンピューティングデバイス１００上で動作する。クライアント１０２は、１つまたはそれを上回るアプリケーションをインストールしている、および／または実行してもよい。いくつかの実施形態では、１つまたはそれを上回るアプリケーションは、ネットワークスタック３１０を介してネットワーク１０４に通信してもよい。ウェブブラウザ等のアプリケーションのうちの１つはまた、第１のプログラム３２２を含んでもよい。例えば、第１のプログラム３２２は、いくつかの実施形態では、クライアントエージェント１２０またはその任意の部分をインストールおよび／または実行するために使用されてもよい。クライアントエージェント１２０は、１つまたはそれを上回るアプリケーションからのネットワークスタック３１０からのネットワーク通信を傍受するための傍受機構またはインターセプタ３５０を含む。
【０１２４】
クライアント１０２のネットワークスタック３１０は、ネットワークへのコネクティビティおよびネットワークとの通信を提供するための任意のタイプおよび形態のソフトウェア、またはハードウェア、またはそれらの任意の組み合わせを備えてもよい。一実施形態では、ネットワークスタック３１０は、ネットワークプロトコルスイートのためのソフトウェア実装を備える。ネットワークスタック３１０は、当業者が認識して理解するようなオープンシステム間相互接続（ＯＳＩ）通信モデルの任意のネットワーク層等の１つまたはそれを上回るネットワーク層を備えてもよい。したがって、ネットワークスタック３１０は、ＯＳＩモデルの以下の層、すなわち、１）物理リンク層、２）データリンク層、３）ネットワーク層、４）トランスポート層、５）セッション層、６）プレゼンテーション層、および７）アプリケーション層のうちのいずれかのための任意のタイプおよび形態のプロトコルを備えてもよい。一実施形態では、ネットワークスタック３１０は、概して、ＴＣＰ／ＩＰと称される、インターネットプロトコル（ＩＰ）のネットワーク層プロトコルを経由したトランスポート制御プロトコル（ＴＣＰ）を備えてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰプロトコルは、ＩＥＥＥ８０２．３によって網羅されるこれらのプロトコル等のＩＥＥＥ広域ネットワーク（ＷＡＮ）またはローカルエリアネットワーク（ＬＡＮ）プロトコル群のうちのいずれかを備え得る、イーサネット（登録商標）プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック３１０は、ＩＥＥＥ８０２．１１および／またはモバイルインターネットプロトコル等の任意のタイプおよび形態の無線プロトコルを備える。
【０１２５】
ＴＣＰ／ＩＰベースのネットワークに照らして、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（Ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルが使用されてもよい。別の実施形態では、ネットワークスタック３１０は、修正されたトランスポート制御プロトコル、例えば、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の任意のタイプおよび形態のトランスポート制御プロトコルを備える。他の実施形態では、ＩＰを経由したＵＤＰ等の任意のタイプおよび形態のユーザデータグラムプロトコル（ＵＤＰ）が、音声通信またはリアルタイムデータ通信のため等に、ネットワークスタック３１０によって使用されてもよい。
【０１２６】
さらに、ネットワークスタック３１０は、ＴＣＰドライバまたはネットワーク層ドライバ等の１つまたはそれを上回る層をサポートする、１つまたはそれを上回るネットワークドライバを含んでもよい。ネットワークドライバは、コンピューティングデバイス１００のオペレーティングシステムの一部として、またはコンピューティングデバイス１００の任意のネットワークインターフェースカードまたは他のネットワークアクセスコンポーネントの一部として、含まれてもよい。いくつかの実施形態では、ネットワークスタック３１０のネットワークドライバのうちのいずれかは、本明細書に説明される技法のうちのいずれかをサポートしてネットワークスタック３１０のカスタムまたは修正部分を提供するようにカスタマイズ、修正、または適合されてもよい。他の実施形態では、加速プログラム３０２は、クライアント１０２のオペレーティングシステムによってインストールまたは別様に提供されるネットワークスタック３１０とともに、またはそれと連動して動作するように設計および構築される。
【０１２７】
ネットワークスタック３１０は、クライアント１０２のネットワーク通信に関連する任意の情報およびデータを受信する、取得する、提供する、または別様にそれにアクセスするための任意のタイプおよび形態のインターフェースを備える。一実施形態では、ネットワークスタック３１０へのインターフェースは、アプリケーションプログラミングインターフェース（ＡＰＩ）を備える。インターフェースはまた、任意の機能コール、フッキングおよびフィルタリング機構、イベントまたはコールバック機構、または任意のタイプのインターフェーシング技法を備えてもよい。インターフェースを介したネットワークスタック３１０は、ネットワークスタック３１０の機能性または動作に関連するオブジェクト等の任意のタイプおよび形態のデータ構造を受信または提供してもよい。例えば、データ構造は、ネットワークパケットまたは１つまたはそれを上回るネットワークパケットに関連する情報およびデータを備えてもよい。いくつかの実施形態では、データ構造は、トランスポート層のネットワークパケット等のネットワークスタック３１０のプロトコル層において処理されるネットワークパケットの一部を備える。いくつかの実施形態では、データ構造３２５が、カーネルレベルデータ構造を備える一方で、他の実施形態では、データ構造３２５は、ユーザモードデータ構造を備える。カーネルレベルデータ構造は、取得される、またはカーネルモード３０２で動作するネットワークスタック３１０の一部に関連するデータ構造、またはカーネルモード３０２で起動するネットワークドライバまたは他のソフトウェア、またはオペレーティングシステムのカーネルモードで起動または動作するサービス、プロセス、タスク、スレッド、または他の実行可能命令によって取得または受信される任意のデータ構造を備えてもよい。
【０１２８】
加えて、ネットワークスタック３１０のいくつかの部分、例えば、データリンクまたはネットワーク層が、カーネルモード３０２で実行または動作してもよい一方で、ネットワークスタック３１０のアプリケーション層等の他の部分は、ユーザモード３０３で実行または動作する。例えば、ネットワークスタックの第１の部分３１０ａが、アプリケーションへのネットワークスタック３１０へのユーザモードアクセスを提供してもよい一方で、ネットワークスタック３１０の第２の部分３１０ａは、ネットワークへのアクセスを提供する。いくつかの実施形態では、ネットワークスタックの第１の部分３１０ａは、層５−７のうちのいずれか等のネットワークスタック３１０の１つまたはそれを上回る上層を備えてもよい。他の実施形態では、ネットワークスタック３１０の第２の部分３１０ｂは、層１−４のうちのいずれか等の１つまたはそれを上回る下層を備える。ネットワークスタック３１０の第１の部分３１０ａおよび第２の部分３１０ｂはそれぞれ、ユーザモード２０３、カーネルモード２０２、またはその組み合わせで、いずれか１つまたはそれを上回るネットワーク層において、またはネットワーク層またはネットワーク層へのインターフェース点の任意の部分、またはユーザモード２０３およびカーネルモード２０２の任意の部分またはそこへのインターフェース点において、ネットワークスタック３１０の任意の部分を備えてもよい。
【０１２９】
インターセプタ３５０は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。一実施形態では、インターセプタ３５０は、ネットワークスタック３１０内の任意の点においてネットワーク通信を傍受し、インターセプタ３５０またはクライアントエージェント１２０によって所望、管理、または制御される宛先にネットワーク通信をリダイレクトまたは伝送する。例えば、インターセプタ３５０は、第１のネットワークのネットワークスタック３１０のネットワーク通信を傍受し、第２のネットワーク１０４上で伝送するためにネットワーク通信をアプライアンス２００に伝送してもよい。いくつかの実施形態では、インターセプタ３５０は、ネットワークスタック３１０とインターフェースをとって連動するように構築および設計されるネットワークドライバ等のドライバを備える、任意のタイプのインターセプタ３５０を備える。いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、トランスポート層において等、ネットワークスタック３１０の１つまたはそれを上回る層において動作する。一実施形態では、インターセプタ３５０は、フィルタドライバ、フッキング機構、またはトランスポートドライバインターフェース（ＴＤＩ）を介して等、ネットワークスタックのトランスポート層にインターフェース接続する任意の形態およびタイプの好適なネットワークドライバインターフェースを備える。いくつかの実施形態では、インターセプタ３５０は、トランスポート層等の第１のプロトコル層、およびトランスポートプロトコル層の上方の任意の層、例えば、アプリケーションプロトコル層等の別のプロトコル層にインターフェース接続する。一実施形態では、インターセプタ３５０は、ネットワークドライバインターフェース仕様（ＮＤＩＳ）またはＮＤＩＳドライバに準拠するドライバを備えてもよい。別の実施形態では、インターセプタ３５０は、ミニフィルタまたはミニポートドライバを備えてもよい。一実施形態では、インターセプタ３５０またはその一部は、カーネルモード２０２で動作する。別の実施形態では、インターセプタ３５０またはその一部は、ユーザモード２０３で動作する。いくつかの実施形態では、インターセプタ３５０の一部が、カーネルモード２０２で動作する一方で、インターセプタ３５０の別の部分は、ユーザモード２０３で動作する。他の実施形態では、クライアントエージェント１２０は、ユーザモード２０３で動作するが、カーネルレベルデータ構造２２５を取得するため等に、インターセプタ３５０を介して、カーネルモードドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの一部にインターフェース接続する。さらなる実施形態では、インターセプタ３５０は、アプリケーション等のユーザモードアプリケーションまたはプログラムである。
【０１３０】
一実施形態では、インターセプタ３５０は、任意のトランスポート層接続要求を傍受する。これらの実施形態では、インターセプタ３５０は、場所のための所望の場所への宛先ＩＰアドレスおよび／またはポート等の宛先情報を設定するように、トランスポート層アプリケーションプログラミングインターフェース（ＡＰＩ）コールを実行する。このようにして、インターセプタ３５０は、インターセプタ３５０またはクライアントエージェント１２０によって制御または管理されるＩＰアドレスおよびポートへのトランスポート層接続を傍受してリダイレクトする。一実施形態では、インターセプタ３５０は、クライアントエージェント１２０がリッスンしているクライアント１０２のローカルＩＰアドレスおよびポートへの接続のための宛先情報を設定する。例えば、クライアントエージェント１２０は、リダイレクトされたトランスポート層通信のためのローカルＩＰアドレスおよびポート上でリッスンするプロキシサービスを備えてもよい。いくつかの実施形態では、次いで、クライアントエージェント１２０は、リダイレクトされたトランスポート層通信をアプライアンス２００に通信する。
【０１３１】
いくつかの実施形態では、インターセプタ３５０は、ドメイン名サービス（ＤＮＳ）要求を傍受する。一実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、ＤＮＳ要求を解決する。別の実施形態では、インターセプタは、ＤＮＳ解決のために傍受されたＤＮＳ要求をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００は、ＤＮＳ要求を解決し、ＤＮＳ応答をクライアントエージェント１２０に通信する。いくつかの実施形態では、アプライアンス２００は、別のアプライアンス２００’またはＤＮＳサーバ１０６を介してＤＮＳ要求を解決する。
【０１３２】
さらに別の実施形態では、クライアントエージェント１２０は、２つのエージェント１２０および１２０’を備えてもよい。一実施形態では、第１のエージェント１２０は、ネットワークスタック３１０のネットワーク層において動作するインターセプタ３５０を備えてもよい。いくつかの実施形態では、第１のエージェント１２０は、インターネット制御メッセージプロトコル（ＩＣＭＰ）要求（例えば、ｐｉｎｇおよびトレースルート）等のネットワーク層要求を傍受する。他の実施形態では、第２のエージェント１２０’は、トランスポート層において動作し、トランスポート層通信を傍受してもよい。いくつかの実施形態では、第１のエージェント１２０は、ネットワークスタック２１０の１つの層において通信を傍受し、傍受された通信とインターフェースをとる、またはそれを第２のエージェント１２０’に通信する。
【０１３３】
クライアントエージェント１２０および／またはインターセプタ３５０は、ネットワークスタック３１０の任意の他のプロトコル層に対して透過的な様式で、プロトコル層において動作してもよい、またはそれとインターフェースをとってもよい。例えば、一実施形態では、インターセプタ３５０は、ネットワーク層等のトランスポート層の下方の任意のプロトコル層、およびセッション、プレゼンテーション、またはアプリケーション層プロトコル等のトランスポート層の上方の任意のプロトコル層に対して透過的に、ネットワークスタック３１０のトランスポート層とともに動作する、またはそれとインターフェースをとる。これは、所望に応じて、かつインターセプタ３５０を使用するための修正を伴わずに、ネットワークスタック３１０の他のプロトコル層が動作することを可能にする。したがって、クライアントエージェント１２０および／またはインターセプタ３５０は、ＴＣＰ／ＩＰを経由した任意のアプリケーション層プロトコル等のトランスポート層によって搬送される任意のプロトコルを介して提供される、任意の通信をセキュアにする、最適化する、加速する、ルーティングする、または負荷平衡するように、トランスポート層とインターフェースをとることができる。
【０１３４】
さらに、クライアントエージェント１２０および／またはインターセプタは、任意のアプリケーション、クライアント１０２のユーザ、およびクライアント１０２と通信するサーバ等の任意の他のコンピューティングデバイスに対して透過的な様式で、ネットワークスタック３１０において動作してもよい、またはそれとインターフェースをとってもよい。クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーションの修正を伴わない様式で、クライアント１０２上にインストールおよび／または実行されてもよい。いくつかの実施形態では、クライアント１０２のユーザまたはクライアント１０２と通信するコンピューティングデバイスは、クライアントエージェント１２０および／またはインターセプタ３５０の存在、実行、または動作を認識していない。したがって、いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーション、クライアント１０２のユーザ、サーバ等の別のコンピューティングデバイス、またはインターセプタ３５０によってインターフェース接続されるプロトコル層の上方および／または下方のプロトコル層のうちのいずれかに対して透過的に、インストールされ、実行され、および／または動作される。
【０１３５】
クライアントエージェント１２０は、加速プログラム３０２、ストリーミングクライアント３０６、収集エージェント３０４、および／または監視エージェント１９７を含む。一実施形態では、クライアントエージェント１２０は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発された独立コンピューティングアーキテクチャ（ＩＣＡ）クライアントまたはその一部を備え、ＩＣＡクライアントとも称される。いくつかの実施形態では、クライアント１２０は、サーバ１０６からクライアント１０２にアプリケーションをストリーム配信するためのアプリケーションストリーミングクライアント３０６を備える。いくつかの実施形態では、クライアントエージェント１２０は、クライアント１０２とサーバ１０６との間の通信を加速するための加速プログラム３０２を備える。別の実施形態では、クライアントエージェント１２０は、エンドポイント検出を行う／アプライアンス２００および／またはサーバ１０６のためのエンドポイント情報を走査して収集するための収集エージェント３０４を含む。
【０１３６】
いくつかの実施形態では、加速プログラム３０２は、クライアントのサーバ１０６との通信および／またはサーバ１０６によって提供されるアプリケーションにアクセスすること等のサーバ１０６へのアクセスを加速、強化、または別様に改良するように、１つまたはそれを上回る加速技法を行うためのクライアント側加速プログラムを備える。加速プログラム３０２の実行可能命令の論理、機能、および／または動作は、以下の加速技法のうちの１つまたはそれを上回るもの、すなわち、１）マルチプロトコル圧縮、２）トランスポート制御プロトコルプーリング、３）トランスポート制御プロトコル多重化、４）トランスポート制御プロトコルバッファリング、および５）キャッシュマネージャを介したキャッシングを行ってもよい。加えて、加速プログラム３０２は、クライアント１０２によって受信および／または伝送される任意の通信の暗号化および／または暗号解読を行ってもよい。いくつかの実施形態では、加速プログラム３０２は、統合様式または方式で加速技法のうちの１つまたはそれを上回るものを行う。加えて、加速プログラム３０２は、トランスポート層プロトコルのネットワークパケットのペイロードとして搬送される、プロトコルのうちのいずれかまたは複数のプロトコルに圧縮を行うことができる。
ストリーミングクライアント３０６は、サーバ１０６からストリーム配信されたアプリケーションを受信して実行するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。サーバ１０６は、クライアント１０２上でアプリケーションを再生する、実行する、または別様に実行させられるために、１つまたはそれを上回るアプリケーションデータファイルをストリーミングクライアント３０６にストリーム配信してもよい。いくつかの実施形態では、サーバ１０６は、圧縮またはパッケージ化されたアプリケーションデータファイルのセットをストリーミングクライアント３０６に伝送する。いくつかの実施形態では、複数のアプリケーションファイルは、圧縮され、ＣＡＢ、ＺＩＰ、ＳＩＴ、ＴＡＲ、ＪＡＲ、または他のアーカイブ等のアーカイブファイル内でファイルサーバ上に記憶される。一実施形態では、サーバ１０６は、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化し、ファイルをクライアント１０２に伝送する。別の実施形態では、クライアント１０２が、アプリケーションファイルを解凍、非パッケージ化、または非アーカイブ化する。ストリーミングクライアント３０６は、アプリケーションまたはその一部を動的にインストールし、アプリケーションを実行する。一実施形態では、ストリーミングクライアント３０６は、実行可能プログラムであってもよい。いくつかの実施形態では、ストリーミングクライアント３０６は、別の実行可能プログラムを起動することが可能であり得る。
【０１３７】
収集エージェント３０４は、クライアント１０２についての情報を識別、取得、および／または収集するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。いくつかの実施形態では、アプライアンス２００は、収集エージェント３０４をクライアント１０２またはクライアントエージェント１２０に伝送する。収集エージェント３０４は、アプライアンスのポリシエンジン２３６の１つまたはそれを上回るポリシに従って構成されてもよい。他の実施形態では、収集エージェント３０４は、クライアント１０２についての収集された情報をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００のポリシエンジン２３６は、クライアントのネットワーク１０４への接続のアクセス、認証、および承認制御を判定して提供するために、収集された情報を使用する。
【０１３８】
一実施形態では、収集エージェント３０４は、クライアントの１つまたはそれを上回る属性または特性を識別して判定する、エンドポイント検出および走査機構を備える。例えば、収集エージェント３０４は、以下のクライアント側属性のうちのいずれか１つまたはそれを上回るもの、すなわち、１）オペレーティングシステムおよび／またはオペレーティングシステムのバージョン、２）オペレーティングシステムのサービスパック、３）起動しているサービス、４）起動しているプロセス、および５）ファイルを識別して判定してもよい。収集エージェント３０４はまた、クライアント上で以下のうちのいずれか１つまたはそれを上回るもの、すなわち、１）ウイルス対策ソフトウェア、２）パーソナルファイアウォールソフトウェア、３）スパム対策ソフトウェア、および４）インターネットセキュリティソフトウェアの存在またはバージョンを識別して判定してもよい。ポリシエンジン２３６は、クライアントの属性または特性またはクライアント側属性のうちのいずれか１つまたはそれを上回るものに基づく、１つまたはそれを上回るポリシを有してもよい。
【０１３９】
いくつかの実施形態では、クライアントエージェント１２０は、図１Ｄおよび２Ｂと併せて議論されるような監視エージェント１９７を含む。監視エージェント１９７は、Ｖｉｓｕａｌ  ＢａｓｉｃまたはＪａｖａ  ｓｃｒｉｐｔ（登録商標）等の任意のタイプおよび形態のスクリプトであってもよい。一実施形態では、監視エージェント１９７は、クライアントエージェント１２０の任意の部分の性能を監視して測定する。例えば、いくつかの実施形態では、監視エージェント１９７は、加速プログラム３０２の性能を監視して測定する。別の実施形態では、監視エージェント１９７は、ストリーミングクライアント３０６の性能を監視して測定する。他の実施形態では、監視エージェント１９７は、収集エージェント３０４の性能を監視して測定する。なおも別の実施形態では、監視エージェント１９７は、インターセプタ３５０の性能を監視して測定する。いくつかの実施形態では、監視エージェント１９７は、メモリ、ＣＰＵ、およびディスク等のクライアント１０２の任意のリソースを監視して測定する。
【０１４０】
監視エージェント１９７は、クライアントの任意のアプリケーションの性能を監視して測定してもよい。一実施形態では、監視エージェント１９７は、クライアント１０２上のブラウザの性能を監視して測定する。いくつかの実施形態では、監視エージェント１９７は、クライアントエージェント１２０を介して配信される任意のアプリケーションの性能を監視して測定する。他の実施形態では、監視エージェント１９７は、ウェブベースまたはＨＴＴＰ応答時間等のアプリケーションのエンドユーザ応答時間を測定して監視する。監視エージェント１９７は、ＩＣＡまたはＲＤＰクライアントの性能を監視して測定してもよい。別の実施形態では、監視エージェント１９７は、ユーザセッションまたはアプリケーションセッションのメトリックを測定して監視する。いくつかの実施形態では、監視エージェント１９７は、ＩＣＡまたはＲＤＰセッションを測定して監視する。一実施形態では、監視エージェント１９７は、クライアント１０２へのアプリケーションおよび／またはデータの配信を加速する際のアプライアンス２００の性能を測定して監視する。
【０１４１】
いくつかの実施形態では、依然として図３を参照すると、第１のプログラム３２２が、自動的に、無音で、透過的に、または別様に、クライアントエージェント１２０またはインターセプタ３５０等のその一部をインストールおよび／または実行するために使用されてもよい。一実施形態では、第１のプログラム３２２は、アプリケーションにロードされ、それによって実行される、ＡｃｔｉｖｅＸ制御またはＪａｖａ（登録商標）制御またはスクリプト等のプラグインコンポーネントを備える。例えば、第１のプログラムは、アプリケーションのメモリ空間またはコンテキスト内等でウェブブラウザアプリケーションによってロードされて起動される、ＡｃｔｉｖｅＸ制御を備える。別の実施形態では、第１のプログラム３２２は、ブラウザ等のアプリケーションにロードされ、それによって起動される、実行可能命令のセットを備える。一実施形態では、第１のプログラム３２２は、クライアントエージェント１２０をインストールするように設計および構築されたプログラムを備える。いくつかの実施形態では、第１のプログラム３２２は、別のコンピューティングデバイスからネットワークを介してクライアントエージェント１２０を取得、ダウンロード、または受信する。別の実施形態では、第１のプログラム３２２は、クライアント１０２のオペレーティングシステム上にネットワークドライバ等のプログラムをインストールするためのインストーラプログラムまたはプラグアンドプレイマネージャである。
Ｄ．仮想化されたアプリケーション配信コントローラを提供するためのシステムおよび方法
【０１４２】
ここで図４Ａを参照すると、ブロック図が、仮想化環境４００の一実施形態を描写する。要するに、コンピューティングデバイス１００は、ハイパーバイザ層と、仮想化層と、ハードウェア層とを含む。ハイパーバイザ層は、仮想化層内で実行する少なくとも１つの仮想マシンによる、ハードウェア層内のいくつかの物理リソース（例えば、プロセッサ４２１およびディスク４２８）へのアクセスを配分して管理する、ハイパーバイザ４０１（仮想化マネージャとも称される）を含む。仮想化層は、少なくとも１つのオペレーティングシステム４１０と、少なくとも１つのオペレーティングシステム４１０に配分される複数の仮想リソースとを含む。仮想リソースは、限定ではないが、複数の仮想プロセッサ４３２ａ、４３２ｂ、４３２ｃ（概して４３２）、および仮想ディスク４４２ａ、４４２ｂ、４４２ｃ（概して４４２）、および仮想メモリおよび仮想ネットワークインターフェース等の仮想リソースを含んでもよい。複数の仮想リソースおよびオペレーティングシステム４１０は、仮想マシン４０６と称されてもよい。仮想マシン４０６は、ハイパーバイザ４０１と通信し、コンピューティングデバイス１００上で他の仮想マシンを管理および構成するためのアプリケーションを実行するために使用される、制御オペレーティングシステム４０５を含んでもよい。
【０１４３】
さらに詳細には、ハイパーバイザ４０１は、物理デバイスへのアクセスを有するオペレーティングシステムをシミュレートする任意の様式で、仮想リソースをオペレーティングシステムに提供してもよい。ハイパーバイザ４０１は、仮想リソースを任意の数のゲストオペレーティングシステム４１０ａ、４１０ｂ（概して、４１０）に提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つまたはそれを上回るタイプのハイパーバイザを実行する。これらの実施形態では、ハイパーバイザは、仮想ハードウェアをエミュレートし、物理ハードウェアをパーティション化し、物理ハードウェアを仮想化し、コンピュータ環境へのアクセスを提供する仮想マシンを実行するために使用されてもよい。ハイパーバイザは、ＶＭＷａｒｅ，  Ｉｎｃ．（Ｐａｌｏ  Ａｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、その開発がオープンソースＸｅｎ．ｏｒｇコミュニティによって監督されるオープンソース製品である、ＸＥＮハイパーバイザ、Ｍｉｃｒｏｓｏｆｔによって提供されるＨｙｐｅｒＶ、Ｖｉｒｔｕａｌサーバ、または仮想ＰＣハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行し得る、仮想マシンプラットフォームを作成する、ハイパーバイザを実行するコンピューティングデバイス１００は、ホストサーバと称される。これらの実施形態のうちの１つでは、例えば、コンピューティングデバイス１００は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  ＦＬ）によって提供されるＸＥＮサーバである。
【０１４４】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス上で実行する、オペレーティングシステム内で実行する。これらの実施形態のうちの１つでは、オペレーティングシステムおよびハイパーバイザ４０１上で実行するコンピューティングデバイスは、ホストオペレーティングシステム（コンピューティングデバイス上で実行するオペレーティングシステム）と、ゲストオペレーティングシステム（ハイパーバイザ４０１によって提供されるコンピューティングリソースパーティション内で実行するオペレーティングシステム）とを有すると言える。他の実施形態では、ハイパーバイザ４０１は、ホストオペレーティングシステム上で実行する代わりに、コンピューティングデバイス上でハードウェアと直接相互作用する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、コンピューティングデバイスを備えるハードウェアを指す、「ベアメタル」上で実行していると言える。
【０１４５】
いくつかの実施形態では、ハイパーバイザ４０１は、オペレーティングシステム４１０が実行する、仮想マシン４０６ａ−ｃ（概して、４０６）を作成してもよい。これらの実施形態のうちの１つでは、例えば、ハイパーバイザ４０１は、仮想マシン４０６を作成するように仮想マシンイメージをロードする。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、仮想マシン４０６内でオペレーティングシステム４１０を実行する。これらの実施形態のうちのなおも別のものでは、仮想マシン４０６は、オペレーティングシステム４１０を実行する。
【０１４６】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス１００上で実行する仮想マシン４０６のためのプロセッサスケジューリングおよびメモリ分割を制御する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、少なくとも１つの仮想マシン４０６の実行を制御する。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、コンピューティングデバイス１００によって提供される少なくとも１つのハードウェアリソースの抽象化を少なくとも１つの仮想マシン４０６に提示する。他の実施形態では、ハイパーバイザ４０１は、物理プロセッサ能力が仮想マシン４０６に提示されるかどうかと、どのようにして提示されるかとを制御する。
【０１４７】
制御オペレーティングシステム４０５は、ゲストオペレーティングシステムを管理して構成するための少なくとも１つのアプリケーションを実行してもよい。一実施形態では、制御オペレーティングシステム４０５は、仮想マシンを実行する、仮想マシンの実行を終了させる、または仮想マシンに配分するための物理リソースのタイプを識別するための機能性を含む、仮想マシンの実行を管理するための機能性へのアクセスを管理者に提供するユーザインターフェースを含むアプリケーション等の管理アプリケーションを実行してもよい。別の実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内で制御オペレーティングシステム４０５を実行する。なおも別の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の物理リソースに直接アクセスする権限を与えられている仮想マシン４０６内で実行する。いくつかの実施形態では、コンピューティングデバイス１００ａ上の制御オペレーティングシステム４０５ａは、ハイパーバイザ４０１ａとハイパーバイザ４０１ｂとの間の通信を介して、コンピューティングデバイス１００ｂ上の制御オペレーティングシステム４０５ｂとデータを交換してもよい。このようにして、１つまたはそれを上回るコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス１００のうちの１つまたはそれを上回るものとデータを交換してもよい。これらの実施形態のうちの１つでは、本機能性は、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。これらの実施形態のうちの別のものでは、複数のハイパーバイザは、コンピューティングデバイス１００のうちの１つの上で実行されるゲストオペレーティングシステムのうちの１つまたはそれを上回るものを管理する。
【０１４８】
一実施形態では、制御オペレーティングシステム４０５は、少なくとも１つのゲストオペレーティングシステム４１０と相互作用する権限を与えられている仮想マシン４０６内で実行する。別の実施形態では、ゲストオペレーティングシステム４１０は、ディスクまたはネットワークへのアクセスを要求するために、ハイパーバイザ４０１を介して制御オペレーティングシステム４０５と通信する。なおも別の実施形態では、ゲストオペレーティングシステム４１０および制御オペレーティングシステム４０５は、例えば、ハイパーバイザ４０１によって利用可能にされる複数の共有メモリページを介して等、ハイパーバイザ４０１によって確立される通信チャネルを介して通信してもよい。
【０１４９】
いくつかの実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００によって提供されるネットワーキングハードウェアと直接通信するためのネットワークバックエンドドライバを含む。これらの実施形態のうちの１つでは、ネットワークバックエンドドライバは、少なくとも１つのゲストオペレーティングシステム１１０からの少なくとも１つの仮想マシン要求を処理する。他の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の記憶装置要素と通信するためのブロックバックエンドドライバを含む。これらの実施形態のうちの１つでは、ブロックバックエンドドライバは、ゲストオペレーティングシステム４１０から受信される少なくとも１つの要求に基づいて、記憶要素からデータを読み取って書き込む。
【０１５０】
一実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を含む。別の実施形態では、ツールスタック４０４は、ハイパーバイザ４０１と相互作用する、（例えば、第２のコンピューティングデバイス１００ｂ上の）他の制御オペレーティングシステム４０５と通信する、またはコンピューティングデバイス１００上の仮想マシン４０６ｂ、４０６ｃを管理するための機能性を提供する。別の実施形態では、ツールスタック４０４は、改良された管理機能性を仮想マシンファームの管理者に提供するためのカスタマイズされたアプリケーションを含む。いくつかの実施形態では、ツールスタック４０４および制御オペレーティングシステム４０５のうちの少なくとも１つは、コンピューティングデバイス１００上で起動する仮想マシン４０６を遠隔で構成して制御するためのインターフェースを提供する、管理ＡＰＩを含む。他の実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を通してハイパーバイザ４０１と通信する。
【０１５１】
一実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内でゲストオペレーティングシステム４１０を実行する。別の実施形態では、ゲストオペレーティングシステム４１０は、コンピュータ環境内のリソースへのアクセスをコンピューティングデバイス１００のユーザに提供する。なおも別の実施形態では、リソースは、プログラム、アプリケーション、文書、ファイル、複数のアプリケーション、複数のファイル、実行可能プログラムファイル、デスクトップ環境、コンピュータ環境、またはコンピューティングデバイス１００のユーザに利用可能にされる他のリソースを含む。さらに別の実施形態では、リソースは、コンピューティングデバイス１００上への従来の直接インストール、アプリケーションストリーミングのための方法を介したコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上のリソースの実行によって生成され、プレゼンテーション層プロトコルを介してコンピューティングデバイス１００に通信される、出力データのコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上で実行する仮想マシンを介したリソースの実行によって生成される、出力データのコンピューティングデバイス１００への配信、またはＵＳＢデバイス等のコンピューティングデバイス１００に接続された可撤性記憶デバイスから、またはコンピューティングデバイス１００上で実行して出力データを生成する仮想マシンを介した実行を含むが、それらに限定されない、複数のアクセス方法を介して、コンピューティングデバイス１００に配信されてもよい。いくつかの実施形態では、コンピューティングデバイス１００は、リソースの実行によって生成される出力データを別のコンピューティングデバイス１００’に伝送する。
【０１５２】
一実施形態では、ゲストオペレーティングシステム４１０は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識していない、完全仮想化仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＨＶＭ（ハードウェア仮想マシン）仮想マシン」と称されてもよい。別の実施形態では、完全仮想化マシンは、完全仮想化マシン内でオペレーティングシステムを実行するために、基本入出力システム（ＢＩＯＳ）をエミュレートするソフトウェアを含む。なおも別の実施形態では、完全仮想化マシンは、ハイパーバイザ４０１と通信することによって機能性を提供するドライバを含んでもよい。そのような実施形態では、ドライバは、それが仮想化された環境内で実行することを認識してもよい。別の実施形態では、ゲストオペレーティングシステム４１０は、それが実行する仮想マシンと連動して、それが仮想マシンであることを認識している、準仮想化仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＰＶ仮想マシン」と称されてもよい。別の実施形態では、準仮想化マシンは、完全仮想化マシンが含まない、付加的ドライバを含む。なおも別の実施形態では、準仮想化マシンは、上記で説明されるように、制御オペレーティングシステム４０５に含まれる、ネットワークバックエンドドライバおよびブロックバックエンドドライバを含む。
【０１５３】
ここで図４Ｂを参照すると、ブロック図が、少なくとも１つの物理ホストが仮想マシンを実行する、システム内の複数のネットワーク化されたコンピューティングデバイスの一実施形態を描写する。要するに、本システムは、管理コンポーネント４０４と、ハイパーバイザ４０１とを含む。本システムは、複数のコンピューティングデバイス１００と、複数の仮想マシン４０６と、複数のハイパーバイザ４０１と、ツールスタック４０４または管理コンポーネント４０４と様々に称される、複数の管理コンポーネントと、物理リソース４２１、４２８とを含む。複数の物理マシン１００はそれぞれ、図１Ｅ−１Ｈおよび４Ａに関連して上記で説明される、コンピューティングデバイス１００として提供されてもよい。
【０１５４】
さらに詳細には、物理ディスク４２８が、コンピューティングデバイス１００によって提供され、仮想ディスク４４２の少なくとも一部を記憶する。いくつかの実施形態では、仮想ディスク４４２は、複数の物理ディスク４２８と関連付けられる。これらの実施形態のうちの１つでは、１つまたはそれを上回るコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理リソースに関して、他のコンピューティングデバイス１００のうちの１つまたはそれを上回るものとデータを交換してもよく、ハイパーバイザが複数の物理コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。いくつかの実施形態では、仮想マシン４０６が実行するコンピューティングデバイス１００は、物理ホスト１００またはホストマシン１００と称される。
【０１５５】
ハイパーバイザは、コンピューティングデバイス１００上のプロセッサ上で実行する。ハイパーバイザは、物理ディスクへのある量のアクセスを仮想ディスクに配分する。一実施形態では、ハイパーバイザ４０１は、物理ディスク上のある量の空間を配分する。別の実施形態では、ハイパーバイザ４０１は、物理ディスク上の複数のページを配分する。いくつかの実施形態では、ハイパーバイザは、仮想マシン４５０を初期化して実行するプロセスの一部として、仮想ディスク４４２をプロビジョニングする。
【０１５６】
一実施形態では、管理コンポーネント４０４ａは、プール管理コンポーネント４０４ａと称される。別の実施形態では、制御オペレーティングシステム４０５ａと称され得る、管理オペレーティングシステム４０５ａは、管理コンポーネントを含む。いくつかの実施形態では、管理コンポーネントは、ツールスタックと称される。これらの実施形態のうちの１つでは、管理コンポーネントは、図４Ａに関連して上記で説明されるツールスタック４０４である。他の実施形態では、管理コンポーネント４０４は、管理者等のユーザから、プロビジョニングおよび／または実行する仮想マシン４０６の識別を受信するためのユーザインターフェースを提供する。なおも他の実施形態では、管理コンポーネント４０４は、管理者等のユーザから、１つの物理マシン１００から別の物理マシンへの仮想マシン４０６ｂの移動の要求を受信するためのユーザインターフェースを提供する。さらなる実施形態では、管理コンポーネント４０４ａは、要求された仮想マシン４０６ｄを実行するコンピューティングデバイス１００ｂを識別し、識別された仮想マシンを実行するように識別されたコンピューティングデバイス１００ｂ上のハイパーバイザ４０１ｂに命令し、そのような管理コンポーネントは、プール管理コンポーネントと称されてもよい。
【０１５７】
ここで図４Ｃを参照すると、仮想アプリケーション配信コントローラまたは仮想アプライアンス４５０の実施形態が、描写される。要するに、図２Ａおよび２Ｂに関連して上記で説明されるアプライアンス２００（例えば、アプリケーション配信コントローラ）の機能性および／または実施形態のうちのいずれかが、図４Ａおよび４Ｂに関連して上記で説明される仮想化された環境の任意の実施形態で展開されてもよい。アプライアンス２００の形態で展開されているアプリケーション配信コントローラの機能性の代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００で展開されてもよい。
【０１５８】
ここで図４Ｃを参照すると、サーバ１０６のハイパーバイザ４０１上で動作する仮想アプライアンス４５０の実施形態の略図が、描写される。図２Ａおよび２Ｂのアプライアンス２００と同様に、仮想アプライアンス４５０は、可用性、性能、オフロード、およびセキュリティのための機能性を提供してもよい。可用性に関して、仮想アプライアンスは、ネットワークの層４と７との間で負荷平衡を行ってもよく、また、知的サービス健全性監視を行ってもよい。ネットワークトラフィック加速を介した性能増加に関して、仮想アプライアンスは、キャッシングおよび圧縮を行ってもよい。任意のサーバの処理をオフロードするために、仮想アプライアンスは、接続多重化およびプーリングおよび／またはＳＳＬ処理を行ってもよい。セキュリティに関して、仮想アプライアンスは、アプライアンス２００のアプリケーションファイアウォール機能性およびＳＳＬ  ＶＰＮ機能のうちのいずれかを行ってもよい。
【０１５９】
図２Ａに関連して説明されるようなアプライアンス２００のモジュールのうちのいずれかは、既製のサーバ等の任意のサーバ上の仮想化された環境３００または仮想化されていない環境で実行可能な１つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、仮想化されたアプライアンス配信コントローラ４５０の形態でパッケージ化され、組み合わせられ、設計され、または構築されてもよい。例えば、仮想アプライアンスは、コンピューティングデバイス上にインストールするインストールパッケージの形態で提供されてもよい。図２Ａを参照すると、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮２３８、暗号化エンジン２３４、パケットエンジン２４０、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、および健全性監視プログラム２１６のうちのいずれかは、コンピューティングデバイスおよび／または仮想化された環境３００の任意のオペレーティングシステム上で起動するソフトウェアコンポーネントまたはモジュールとして、設計および構築されてもよい。アプライアンス２００の暗号化プロセッサ２６０、プロセッサ２６２、メモリ２６４、およびネットワークスタック２６７を使用する代わりに、仮想化されたアプライアンス４００は、仮想化された環境４００によって提供されるような、または別様にサーバ１０６上で利用可能であるような、これらのリソースのうちのいずれかを使用してもよい。
【０１６０】
依然として図４Ｃを参照すると、要するに、任意の１つまたはそれを上回るｖサーバ２７５Ａ−２７５Ｎが、任意のサーバ１０６等の任意のタイプのコンピューティングデバイス１００の仮想化された環境４００で動作または実行されてもよい。図２Ｂに関連して説明されるアプライアンス２００のモジュールまたは機能性のうちのいずれかは、サーバの仮想化された、または仮想化されていない環境のいずれかで動作するように設計および構築されてもよい。ｖサーバ２７５、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、加速２８８、Ａｐｐ  ＦＷ２９０、および監視エージェントのうちのいずれかは、デバイスおよび／または仮想化された環境４００上で実行可能な１つまたはそれを上回るソフトウェアモジュールまたはコンポーネントとして展開可能である、アプリケーション配信コントローラ４５０の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。
【０１６１】
いくつかの実施形態では、サーバは、各仮想マシンが仮想アプリケーション配信コントローラ４５０の同一または異なる実施形態を起動する、仮想化環境で複数の仮想マシン４０６ａ−４０６ｎを実行してもよい。いくつかの実施形態では、サーバは、マルチコア処理システムのコア上の１つまたはそれを上回る仮想マシン上で１つまたはそれを上回る仮想アプライアンス４５０を実行してもよい。いくつかの実施形態では、サーバは、多重プロセッサデバイスの各プロセッサ上の１つまたはそれを上回る仮想マシン上で１つまたはそれを上回る仮想アプライアンス４５０を実行してもよい。
Ｅ．マルチコアアーキテクチャを提供するためのシステムおよび方法
【０１６２】
ムーアの法則によると、集積回路上に置かれ得るトランジスタの数は、約２年毎に倍になり得る。しかしながら、ＣＰＵ速度増加は、停滞状態に達し得、例えば、ＣＰＵ速度は、２００５年以降、約３．５〜４ＧＨｚ範囲になっている。ある場合には、ＣＰＵ製造業者は、付加的性能を獲得するためにＣＰＵ速度増加に依拠しない場合がある。一部のＣＰＵ製造業者は、付加的性能を提供するように、付加的コアをそれらのプロセッサに追加し得る。性能獲得のためにＣＰＵに依拠する、ソフトウェアおよびネットワーキングベンダのもの等の製品は、これらのマルチコアＣＰＵを活用することによって、それらの性能を改良し得る。単一のＣＰＵのために設計および構築されるソフトウェアは、マルチスレッドの並列アーキテクチャを利用するように、または、別様にマルチコアアーキテクチャを利用するように、再設計され、および／または書き換えられてもよい。
【０１６３】
ｎコアまたはマルチコア技術と称される、アプライアンス２００のマルチコアアーキテクチャは、アプライアンスが、いくつかの実施形態では、単一コア性能障壁を突破することと、マルチコアＣＰＵの能力を活用することとを可能にする。図２Ａに関連して説明される前のアーキテクチャでは、単一のネットワークまたはパケットエンジンが起動される。ｎコア技術およびアーキテクチャの複数のコアは、複数のパケットエンジンが同時に、および／または並行して起動することを可能にする。パケットエンジンが各コア上で起動すると、アプライアンスアーキテクチャは、付加的コアの処理容量を活用する。いくつかの実施形態では、これは、性能および拡張可能性の最大７倍の増加を提供する。
【０１６４】
図５Ａには、機能並列性、データ並列性、またはフローベースのデータ並列性等の並列性または並列コンピューティング方式のタイプに従って、１つまたはそれを上回るプロセッサコアを横断する作業、タスク、負荷、またはネットワークトラフィック分布のいくつかの実施形態が、図示されている。要するに、図５Ａは、１からＮの合計コア数である、ｎ個のコアを伴うアプライアンス２００’等のマルチコアシステムの実施形態を図示する。一実施形態では、作業、負荷、またはネットワークトラフィックは、分布がｎ個のコア５０５Ｎ（以降では集合的にコア５０５と称される）のうちの全てまたは２つまたはそれを上回るものを横断するように、第１のコア５０５Ａ、第２のコア５０５Ｂ、第３のコア５０５Ｃ、第４のコア５０５Ｄ、第５のコア５０５Ｅ、第６のコア５０５Ｆ、第７のコア５０５Ｇ等の間に分配されることができる。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のＶＩＰ２７５があってもよい。それぞれ、複数のコアのうちの個別のコア上で起動する、複数のパケットエンジン２４０があってもよい。使用されるアプローチのうちのいずれかは、コアのうちのいずれかを横断する、異なる、様々な、または類似する作業負荷または性能レベル５１５につながり得る。機能並列性アプローチに関して、各コアは、パケットエンジン、ＶＩＰ２７５、またはアプライアンス２００によって提供される機能性のうちの異なる機能を起動してもよい。データ並列性アプローチでは、データは、データを受信するネットワークインターフェースカード（ＮＩＣ）またはＶＩＰ２７５に基づいて、コアを横断して並列化または分配されてもよい。別のデータ並列性アプローチでは、処理は、データフローを各コアに分配することによって、コアを横断して分配されてもよい。
【０１６５】
図５Ａに関してさらに詳細には、いくつかの実施形態では、負荷、作業、またはネットワークトラフィックが、機能並列性５００に従って、コア５０５の間で分配されることができる。機能並列性は、１つまたはそれを上回る個別の機能を果たす各コアに基づいてもよい。いくつかの実施形態では、第１のコアが、第１の機能を果たしてもよい一方で、第２のコアは、第２の機能を果たす。機能並列性アプローチでは、マルチコアシステムによって果たされる機能は、分割され、機能性に従って各コアに分配される。いくつかの実施形態では、機能並列性は、タスク並列性と称されてもよく、各プロセッサまたはコアが同一または異なるデータに異なるプロセスまたは機能を実行するときに、達成されてもよい。コアまたはプロセッサは、同一または異なるコードを実行してもよい。ある場合には、異なる実行スレッドまたはコードは、それらが作動するにつれて相互と通信してもよい。通信は、ワークフローの一部として、１つのスレッドから次のスレッドにデータをパスするように行われてもよい。
【０１６６】
いくつかの実施形態では、機能並列性５００に従って、コア５０５を横断して作業を分配するステップは、ネットワーク入出力管理（ＮＷＩ／Ｏ）５１０Ａ、セキュアソケットレイヤ（ＳＳＬ）暗号化および暗号解読５１０Ｂ、および伝送制御プロトコル（ＴＣＰ）機能５１０Ｃ等の特定の機能に従って、ネットワークトラフィックを分配するステップを含むことができる。これは、使用されている機能性の量またはレベルに基づく、作業、性能、または計算負荷５１５につながり得る。いくつかの実施形態では、データ並列性５４０に従って、コア５０５を横断して作業を分配するステップは、特定のハードウェアまたはソフトウェアコンポーネントと関連付けられるデータを分配することに基づいて、ある量の作業５１５を分配するステップを含むことができる。いくつかの実施形態では、フローベースのデータ並列性５２０に従って、コア５０５を横断して作業を分配するステップは、各コア上の作業５１５Ａ−Ｎの量が、同様である、実質的に等しい、または比較的均等に分配され得るように、コンテキストまたはフローに基づいてデータを分配するステップを含むことができる。
【０１６７】
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンまたはＶＩＰによって提供される複数の機能性のうちの１つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を行ってもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を行う。同様に、コア３が、ＳＳＬオフローディングを行ってもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、１つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図５Ａに図示されるように、機能別の分割は、性能または負荷５１５の異なるレベルで起動する、異なるコアにつながり得る。
【０１６８】
機能並列性アプローチの場合、各コアは、アプライアンスのパケットエンジンによって提供される複数の機能性のうちの１つまたはそれを上回る機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を行ってもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を行う。同様に、コア３が、ＳＳＬオフローディングを行ってもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を行ってもよい。コアはそれぞれ、同一機能または異なる機能を果たしてもよい。コアはそれぞれ、１つよりも多くの機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される、機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断する作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図５Ａに図示されるように、機能別の分割は、負荷または性能の異なるレベルで起動する、異なるコアにつながり得る。
【０１６９】
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、図５Ｂは、第１のコア、すなわち、ネットワークＩ／Ｏ機能性５１０Ａと関連付けられるアプリケーションおよびプロセスを処理する、コア１５０５Ａを図示する。ネットワークＩ／Ｏと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、ＮＷＩ／Ｏ５１０Ａと関連付けられるポート宛先を有する、発信および着信パケットは、ＮＷＩ／Ｏポートと関連付けられる全てのネットワークトラフィックをハンドリングすることに専用である、コア１５０５Ａに向かってダイレクトされるであろう。同様に、コア２  ５０５Ｂは、ＳＳＬ処理と関連付けられる機能性をハンドリングすることに専用であって、コア４  ５０５Ｄは、全てのＴＣＰレベル処理および機能性をハンドリングすることに専用であり得る。
【０１７０】
図５Ａは、ネットワークＩ／Ｏ、ＳＳＬ、およびＴＣＰ等の機能を図示するが、他の機能もコアに割り当てられることができる。これらの他の機能は、本明細書に説明される機能または動作のうちのいずれか１つまたはそれを上回るものを含むことができる。例えば、図２Ａおよび２Ｂと併せて説明される機能のうちのいずれかは、機能性基準でコアを横断して分配されてもよい。ある場合には、第１のＶＩＰ２７５Ａが、第１のコア上で起動してもよい一方で、異なる構成を伴う第２のＶＩＰ２７５Ｂは、第２のコア上で起動してもよい。いくつかの実施形態では、各コア５０５が特定の機能と関連付けられる処理をハンドリングすることができるように、各コア５０５は、その特定の機能性をハンドリングすることができる。例えば、コア２  ５０５Ｂが、ＳＳＬオフローディングをハンドリングしてもよい一方で、コア４  ５０５Ｄは、アプリケーション層処理およびトラフィック管理をハンドリングしてもよい。
【０１７１】
他の実施形態では、作業、負荷、またはネットワークトラフィックが、任意のタイプおよび形態のデータ並列性５４０に従って、コア５０５の間で分配されてもよい。いくつかの実施形態では、データ並列性は、異なる分配されたデータ上で同一のタスクまたは機能性を果たす各コアによって、マルチコアシステムにおいて達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードが、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令が、動作を制御するが、同一コードを実行してもよい。いくつかの実施形態では、データ並列性が、パケットエンジン、ｖサーバ（ＶＩＰ）２７５Ａ−Ｃ、ネットワークインターフェースカード（ＮＩＣ）５４２Ｄ−Ｅ、および／またはアプライアンス２００上に含まれる、またはそれと関連付けられる任意の他のネットワーキングハードウェアまたはソフトウェアの観点から、達成される。例えば、各コアは、同一パケットエンジンまたはＶＩＰコードまたは構成を起動してもよいが、分配されたデータの異なるセット上で動作してもよい。各ネットワーキングハードウェアまたはソフトウェア構築物は、異なる、様々な、または実質的に同一の量のデータを受信することができ、結果として、様々な、異なる、または比較的同一の量の負荷５１５を有し得る。
【０１７２】
データ並列性アプローチの場合、作業は、ＶＩＰ、ＮＩＣ、および／またはＶＩＰまたはＮＩＣのデータフローに基づいて、分割されて分配されてもよい。これらのアプローチのうちの１つでは、マルチコアシステムの作業は、データの分配されたセット上に各ＶＩＰ作業を有することによって、ＶＩＰの間で分割または分配されてもよい。例えば、各コアは、１つまたはそれを上回るＶＩＰを起動するように構成されてもよい。ネットワークトラフィックは、そのトラフィックをハンドリングする各ＶＩＰのためのコアに分配されてもよい。これらのアプローチのうちの別のものでは、アプライアンスの作業は、いずれのＮＩＣがネットワークトラフィックを受信するかに基づいて、コアの間で分割または分配されてもよい。例えば、第１のＮＩＣのネットワークトラフィックが、第１のコアに分配されてもよい一方で、第２のＮＩＣのネットワークトラフィックは、第２のコアに分配されてもよい。ある場合には、コアは、複数のＮＩＣからのデータを処理してもよい。
【０１７３】
図５Ａは、ＶＩＰ１  ２７５Ａ、ＶＩＰ２  ２７５Ｂ、およびＶＩＰ３  ２７５Ｃの場合のように、単一のコア５０５と関連付けられる単一のｖサーバを図示する。いくつかの実施形態では、単一のｖサーバは、１つまたはそれを上回るコア５０５と関連付けられることができる。対照的に、１つまたはそれを上回るｖサーバは、単一のコア５０５と関連付けられることができる。ｖサーバをコア５０５と関連付けるステップは、その特定のｖサーバと関連付けられる全ての機能を処理するように、そのコア５０５を含んでもよい。いくつかの実施形態では、各コアは、同一コードおよび構成を有する、ＶＩＰを実行する。他の実施形態では、各コアは、同一コードを有するが、異なる構成を有する、ＶＩＰを実行する。いくつかの実施形態では、各コアは、異なるコードと、同一または異なる構成とを有する、ＶＩＰを実行する。
【０１７４】
ｖサーバのように、ＮＩＣはまた、特定のコア５０５と関連付けられることもできる。多くの実施形態では、ＮＩＣがデータパケットを受信または伝送するときに、特定のコア５０５がデータパケットを受信および伝送することに関与する処理をハンドリングするように、ＮＩＣは、１つまたはそれを上回るコア５０５に接続されることができる。一実施形態では、単一のＮＩＣは、ＮＩＣ１  ５４２ＤおよびＮＩＣ２  ５４２Ｅの場合のように、単一のコア５０５と関連付けられることができる。他の実施形態では、１つまたはそれを上回るＮＩＣは、単一のコア５０５と関連付けられることができる。他の実施形態では、単一のＮＩＣは、１つまたはそれを上回るコア５０５と関連付けられることができる。これらの実施形態では、負荷は、各コア５０５が実質的に類似する量の負荷を処理するように、１つまたはそれを上回るコア５０５の間で分配され得る。ＮＩＣと関連付けられるコア５０５は、その特定のＮＩＣと関連付けられる全ての機能および／またはデータを処理してもよい。
【０１７５】
ＶＩＰまたはＮＩＣのデータに基づいて、コアを横断して作業を分配するステップは、独立性のレベルを有し得るが、いくつかの実施形態では、これは、図５Ａの様々な負荷５１５によって図示されるように、コアの不平衡使用につながり得る。
【０１７６】
いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、任意のタイプおよび形態のデータフローに基づいて、コア５０５の間で分配されることができる。これらのアプローチのうちの別のものでは、作業は、データフローに基づいてコアの間で分割または分配されてもよい。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス２００’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。
【０１７７】
フローベースのデータ並列性５２０では、データの分布は、要求／応答ペアリング、トランザクション、セッション、接続、またはアプリケーション通信等の任意のタイプのデータのフローに関連する。例えば、クライアントと、アプライアンスをトラバースするサーバとの間のネットワークトラフィックが、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、最初にセッションまたは接続を確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。データフローの分布は、各コア５０５が、実質的に等しい、または比較的均等に分配された量の負荷、データ、またはネットワークトラフィックを搬送するようなものであってもよい。
【０１７８】
いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、クライアントとアプライアンス２００’をトラバースするサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。一実施形態では、データフローは、トランザクションまたは一連のトランザクションに基づいて、分配されることができる。本トランザクションは、いくつかの実施形態では、クライアントとサーバとの間にあることができ、ＩＰアドレスまたは他のパケット識別子によって特徴付けられることができる。例えば、コア１  ５０５Ａは、特定のクライアントと特定のサーバとの間のトランザクションに専用であることができ、したがって、コア１  ５０５Ａ上の負荷５１５Ａは、特定のクライアントとサーバとの間のトランザクションと関連付けられるネットワークトラフィックから成ってもよい。ネットワークトラフィックをコア１  ５０５Ａに配分することは、特定のクライアントまたはサーバのいずれかから生じる全てのデータパケットをコア１  ５０５Ａにルーティングすることによって、達成されることができる。
【０１７９】
作業または負荷は、部分的にトランザクションに基づいてコアに分配されることができるが、他の実施形態では、負荷または作業は、パケット毎の基準で配分されることができる。これらの実施形態では、アプライアンス２００は、データパケットを傍受し、それらを、最少量の負荷を有するコア５０５に配分することができる。例えば、コア１上の負荷５１５Ａが、残りのコア５０５Ｂ−Ｎ上の負荷５１５Ｂ−Ｎより少ないため、アプライアンス２００は、第１の着信データパケットをコア１  ５０５Ａに配分し得る。いったん第１のデータパケットがコア１  ５０５Ａに配分されると、コア１  ５０５Ａ上の負荷５１５Ａの量は、第１のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス２００が第２のデータパケットを傍受するとき、コア４  ５０５Ｄが第２の最少量の負荷を有するため、アプライアンス２００は、負荷をコア４  ５０５Ｄに配分するであろう。最少量の負荷を伴うコアにデータパケットを配分することは、いくつかの実施形態では、各コア５０５に分配される負荷５１５Ａ−Ｎが実質的に等しいままであることを確実にすることができる。
【０１８０】
他の実施形態では、負荷は、ネットワークトラフィックのある区分が特定のコア５０５に配分される、単位毎の基準で配分されることができる。上記の実施例は、パケット毎の基準で負荷平衡を例証する。他の実施形態では、負荷は、１０、１００、または１，０００個毎のパケットが、最少量の負荷を有するコア５０５に配分されるように、パケットの数に基づいて配分されることができる。コア５０５に配分されるパケットの数は、アプリケーション、ユーザ、または管理者によって判定される数であることができ、ゼロより大きい任意の数であることができる。なおも他の実施形態では、負荷は、パケットが所定の時間量にわたって特定のコア５０５に分配されるように、時間メトリックに基づいて配分されることができる。これらの実施形態では、パケットは、５ミリ秒にわたって、またはユーザ、プログラム、システム、管理者によって、または別様に判定される、任意の時間周期にわたって、特定のコア５０５に配分されることができる。所定の時間周期が経過した後、データパケットが、所定の時間周期にわたって異なるコア５０５に伝送される。
【０１８１】
１つまたはそれを上回るコア５０５の間で作業、負荷、またはネットワークトラフィックを分配するためのフローベースのデータ並列性方法は、上記の実施形態の任意の組み合わせを備えることができる。これらの方法は、アプライアンス２００の任意の部分によって、パケットエンジン等のコア５０５のうちの１つの上で実行するアプリケーションまたは実行可能命令のセットによって、またはアプライアンス２００と通信するコンピューティングデバイス上で実行する任意のアプリケーション、プログラム、またはエージェントによって、実施されることができる。
【０１８２】
図５Ａに図示される機能およびデータ並列性計算方式は、機能並列性５００、データ並列性５４０、フローベースのデータ並列性５２０、またはそれらの任意の部分を包含する、ハイブリッド並列性または分散処理方式を生成するように、任意の様式で組み合わせられることができる。ある場合には、マルチコアシステムは、１つまたはそれを上回るコア５０５の間で負荷を分配するために、任意のタイプおよび形態の負荷平衡方式を使用してもよい。負荷平衡方式は、機能およびデータ並列性方式のうちのいずれかまたはそれらの組み合わせとの任意の組み合わせで、使用されてもよい。
【０１８３】
図５Ｂには、任意のタイプおよび形態の１つまたはそれを上回るシステム、アプライアンス、デバイス、またはコンポーネントであり得る、マルチコアシステム５４５の実施形態が図示されている。本システム５４５は、いくつかの実施形態では、１つまたはそれを上回る処理コア５０５Ａ−Ｎを有する、アプライアンス２００内に含まれることができる。システム５４５はさらに、メモリバス５５６と通信する、１つまたはそれを上回るパケットエンジン（ＰＥ）またはパケット処理エンジン（ＰＰＥ）５４８Ａ−Ｎを含むことができる。メモリバスは、１つまたはそれを上回る処理コア５０５Ａ−Ｎと通信するために使用されてもよい。また、システム５４５内には、１つまたはそれを上回るネットワークインターフェースカード（ＮＩＣ）５５２と、１つまたはそれを上回る処理コア５０５Ａ−Ｎとさらに通信し得るフローディストリビュータ５５０とが含まれることができる。フローディストリビュータ５５０は、受信側スケーラ（ＲＳＳ）または受信側スケーリング（ＲＳＳ）モジュール５６０を備えることができる。
【０１８４】
さらに図５Ｂを参照すると、さらに詳細には、一実施形態では、パケットエンジン５４８Ａ−Ｎは、図２Ａおよび２Ｂに説明されるアプライアンスの任意の部分等の本明細書に説明されるアプライアンス２００の任意の部分を備えることができる。パケットエンジン５４８Ａ−Ｎは、いくつかの実施形態では、以下の要素、すなわち、パケットエンジン２４０、ネットワークスタック２６７、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮エンジン２３８、暗号化エンジン２３４、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、監視プログラム２１６、およびメモリバス５５６または１つまたはそれを上回るコア５０５Ａ−Ｎのいずれかの１つからデータパケットを受信することが可能な任意の他のソフトウェアまたはハードウェア要素のうちのいずれかを備えることができる。いくつかの実施形態では、パケットエンジン５４８Ａ−Ｎは、１つまたはそれを上回るｖサーバ２７５Ａ−Ｎまたはその任意の部分を備えることができる。他の実施形態では、パケットエンジン５４８Ａ−Ｎは、以下の機能性、すなわち、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、パケット加速２８８、Ａｐｐ  ＦＷ２９０、監視エージェント１９７によって提供される監視等の監視、ＴＣＰスタックとして機能することと関連付けられる機能性、負荷平衡、ＳＳＬオフローディングおよび処理、コンテンツ切替、ポリシ評価、キャッシング、圧縮、エンコード、解凍、デコード、アプリケーションファイアウォール機能性、ＸＭＬ処理および加速、およびＳＳＬ  ＶＰＮコネクティビティの任意の組み合わせを提供することができる。
【０１８５】
パケットエンジン５４８Ａ−Ｎは、いくつかの実施形態では、特定のサーバ、ユーザ、クライアント、またはネットワークと関連付けられることができる。パケットエンジン５４８が特定のエンティティと関連付けられるとき、そのパケットエンジン５４８は、そのエンティティと関連付けられるデータパケットを処理することができる。例えば、パケットエンジン５４８が第１のユーザと関連付けられる場合、そのパケットエンジン５４８は、第１のユーザによって生成されるパケット、または第１のユーザと関連付けられる宛先アドレスを有するパケットを処理し、それに作用するであろう。同様に、パケットエンジン５４８は、パケットエンジン５４８が、特定のエンティティによって生成されていない、またはそのエンティティに向けられていない任意のデータパケットを処理し、別様にそれに作用することができるように、そのエンティティと関連付けられないことを選定してもよい。
【０１８６】
ある事例では、パケットエンジン５４８Ａ−Ｎは、図５Ａに図示される機能および／またはデータ並列性方式のうちのいずれかを実施するように構成されることができる。これらの事例では、パケットエンジン５４８Ａ−Ｎは、分布が並列性または分布方式に従うように、処理コア５０５Ａ−Ｎの間で機能またはデータを分配することができる。いくつかの実施形態では、単一のパケットエンジン５４８Ａ−Ｎが、負荷平衡方式を実施する一方で、他の実施形態では、１つまたはそれを上回るパケットエンジン５４８Ａ−Ｎが、負荷平衡方式を実施する。各コア５０５Ａ−Ｎは、一実施形態では、負荷平衡がパケットエンジンによって実施され得るように、特定のパケットエンジン５４８と関連付けられることができる。負荷平衡は、本実施形態では、パケットエンジン５４８Ａ−Ｎが負荷を分配する場所を集合的に判定することができるように、コア５０５と関連付けられる各パケットエンジン５４８Ａ−Ｎが、コアと関連付けられる他のパケットエンジンと通信することを要求してもよい。本プロセスの一実施形態は、負荷のために各パケットエンジンから投票を受信する、アービタを含むことができる。アービタは、部分的に、エンジンの投票の時期、ある場合には、エンジンの関連付けられるコア５０５上の負荷の現在の量と関連付けられる優先順位値に基づいて、負荷を各パケットエンジン５４８Ａ−Ｎに分配することができる。
【０１８７】
コア上で起動するパケットエンジンのうちのいずれかは、ユーザモード、カーネル、またはそれらの任意の組み合わせで起動してもよい。いくつかの実施形態では、パケットエンジンは、ユーザまたはアプリケーション空間内で起動するアプリケーションまたはプログラムとして動作する。これらの実施形態では、パケットエンジンは、カーネルによって提供される任意の機能性にアクセスするために、任意のタイプおよび形態のインターフェースを使用してもよい。いくつかの実施形態では、パケットエンジンは、カーネルモードで、またはカーネルの一部として動作する。いくつかの実施形態では、パケットエンジンの第１の部分が、ユーザモードで動作する一方で、パケットエンジンの第２の部分は、カーネルモードで動作する。いくつかの実施形態では、第１のコア上の第１のパケットエンジンが、カーネルモードで実行する一方で、第２のコア上の第２のパケットエンジンは、ユーザモードで実行する。いくつかの実施形態では、パケットエンジンまたはその任意の部分は、ＮＩＣまたはその任意のドライバ上で、またはそれと連動して動作する。
【０１８８】
いくつかの実施形態では、メモリバス５５６は、任意のタイプおよび形態のメモリまたはコンピュータバスであることができる。単一のメモリバス５５６が図５Ｂで描写されているが、システム５４５は、任意の数のメモリバス５５６を備えることができる。一実施形態では、各パケットエンジン５４８は、１つまたはそれを上回る個々のメモリバス５５６と関連付けられることができる。
【０１８９】
ＮＩＣ５５２は、いくつかの実施形態では、本明細書に説明されるネットワークインターフェースカードまたは機構のうちのいずれかであることができる。ＮＩＣ５５２は、任意の数のポートを有することができる。ＮＩＣは、任意のタイプおよび形態のネットワーク１０４に接続するように設計および構築されることができる。単一のＮＩＣ５５２が図示されているが、システム５４５は、任意の数のＮＩＣ５５２を備えることができる。いくつかの実施形態では、各コア５０５Ａ−Ｎは、１つまたはそれを上回る単一のＮＩＣ５５２と関連付けられることができる。したがって、各コア５０５は、特定のコア５０５専用の単一のＮＩＣ５５２と関連付けられることができる。
【０１９０】
コア５０５Ａ−Ｎは、本明細書に説明されるプロセッサのうちのいずれかを備えることができる。さらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５構成のうちのいずれかに従って構成されることができる。なおもさらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５機能性のうちのいずれかを有することができる。図５Ｂは、７つのコア５０５Ａ−Ｇを図示するが、任意の数のコア５０５が、システム５４５内に含まれることができる。具体的には、システム５４５は、「Ｎ」個のコアを備えることができ、「Ｎ」は、ゼロより大きい整数である。
【０１９１】
コアは、使用するためにそのコアに配分される、または割り当てられる、メモリを有する、または使用してもよい。メモリは、そのコアのプライベートまたはローカルメモリと見なされ、そのコアのみによってアクセス可能であり得る。コアは、共有される、または複数のコアに割り当てられる、メモリを有する、または使用してもよい。メモリは、１つを上回るコアによってアクセス可能である公共または共有メモリと見なされてもよい。コアは、プライベートおよび公共メモリの任意の組み合わせを使用してもよい。各コアのための別個のアドレス空間を用いることで、あるレベルの協調が、同一アドレス空間を使用する場合から排除される。別個のアドレス空間を用いることで、コアは、他のコアとの対立について心配することなく、コアの独自のアドレス空間内で情報およびデータに作業を行うことができる。各パケットエンジンは、ＴＣＰおよび／またはＳＳＬ接続のための別個のメモリプールを有してもよい。
【０１９２】
さらに図５Ｂを参照すると、図５Ａに関連して上記で説明されるコア５０５の機能性および／または実施形態のうちのいずれかが、図４Ａおよび４Ｂに関連して上記で説明される仮想化された環境の任意の実施形態で展開されることができる。物理プロセッサ５０５の形態で展開されているコア５０５の機能性の代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００で展開されてもよい。他の実施形態では、アプライアンスまたは単一のデバイスの形態で展開されているコア５０５の機能性の代わりに、機能性は、任意の配列で複数のデバイスを横断して展開されてもよい。例えば、１つのデバイスは、２つまたはそれを上回るコアを備えてもよく、別のデバイスは、２つまたはそれを上回るコアを備えてもよい。例えば、マルチコアシステムは、コンピューティングデバイスのクラスタ、サーバファーム、またはコンピューティングデバイスのネットワークを含んでもよい。いくつかの実施形態では、コアの形態で展開されているコア５０５の機能性の代わりに、機能性は、複数の単一コアプロセッサ等の複数のプロセッサ上で展開されてもよい。
【０１９３】
一実施形態では、コア５０５は、任意のタイプおよび形態のプロセッサであってもよい。いくつかの実施形態では、コアは、本明細書に説明される任意のプロセッサまたは中央処理ユニットと実質的に同様に機能することができる。いくつかの実施形態では、コア５０５は、本明細書に説明される任意のプロセッサの任意の部分を備えてもよい。図５Ａは、７つのコアを図示するが、任意の「Ｎ」個のコアがアプライアンス２００内に存在することができ、「Ｎ」は、１より大きい任意の整数である。いくつかの実施形態では、コア５０５は、共通アプライアンス２００内にインストールされることができる一方で、他の実施形態では、コア５０５は、相互に通信可能に接続される１つまたはそれを上回るアプライアンス２００内にインストールされることができる。コア５０５は、いくつかの実施形態では、グラフィックス処理ソフトウェアを備えることができる一方で、他の実施形態では、コア５０５は、一般処理能力を提供する。コア５０５は、物理的に相互の近傍にインストールされることができ、および／または相互に通信可能に接続されることができる。コアは、物理的に任意のタイプおよび形態のバスまたはサブシステムによって接続され、および／またはコアに、コアから、および／またはコアの間でデータを転送するためにコアに通信可能に結合されてもよい。
【０１９４】
各コア５０５は、他のコアと通信するためのソフトウェアを備えることができるが、いくつかの実施形態では、コアマネージャ（図示せず）は、各コア５０５の間の通信を促進することができる。いくつかの実施形態では、カーネルは、コア管理を提供してもよい。コアは、種々のインターフェース機構を使用して、相互とインターフェースをとってもよい、または通信してもよい。いくつかの実施形態では、コア間メッセージングが、コアを接続するバスまたはサブシステムを介してメッセージまたはデータを第２のコアに送信する第１のコア等のコアの間で通信するために使用されてもよい。いくつかの実施形態では、コアは、任意のタイプおよび形態の共有メモリインターフェースを介して通信してもよい。一実施形態では、全てのコアの間で共有される１つまたはそれを上回るメモリ場所があってもよい。いくつかの実施形態では、各コアは、相互のコアと共有される別個のメモリ場所を有してもよい。例えば、第１のコアは、第２のコアとの第１の共有メモリと、第３のコアとの第２の共有メモリとを有してもよい。いくつかの実施形態では、コアは、カーネルを介した機能コール等の任意のタイプのプログラミングまたはＡＰＩを介して通信してもよい。いくつかの実施形態では、オペレーティングシステムは、複数のコアデバイスを認識してサポートし、コア間通信のためのインターフェースおよびＡＰＩを提供してもよい。
【０１９５】
フローディストリビュータ５５０は、任意のタイプおよび形態のハードウェア上で実行する、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、または任意のタイプおよび形態の実行可能命令であることができる。いくつかの実施形態では、フローディストリビュータ５５０は、本明細書に説明される動作および機能のうちのいずれかを果たす回路の任意の設計および構築であることができる。いくつかの実施形態では、フローディストリビュータは、コア５０５および／またはコア上で起動するパケットエンジンまたはＶＩＰの間のデータパケットの分布を分配、自動転送、ルーティング、制御、および／または管理する。フローディストリビュータ５５０は、いくつかの実施形態では、インターフェースマスタと称されることができる。一実施形態では、フローディストリビュータ５５０は、アプライアンス２００のコアまたはプロセッサ上で実行する実行可能命令のセットを備える。別の実施形態では、フローディストリビュータ５５０は、アプライアンス２００と通信するコンピューティングマシン上で実行する実行可能命令のセットを備える。いくつかの実施形態では、フローディストリビュータ５５０は、ファームウェア等のＮＩＣ上で実行する実行可能命令のセットを備える。なおも他の実施形態では、フローディストリビュータ５５０は、コアまたはプロセッサの間でデータパケットを分配するソフトウェアおよびハードウェアの任意の組み合わせを備える。一実施形態では、フローディストリビュータ５５０が、コア５０５Ａ−Ｎのうちの少なくとも１つの上で実行する一方で、他の実施形態では、各コア５０５Ａ−Ｎに割り当てられる別個のフローディストリビュータ５５０が、関連付けられるコア５０５Ａ−Ｎ上で実行する。フローディストリビュータは、コアを横断するフローの平衡をとるために、任意のタイプおよび形態の統計的または確率的アルゴリズムまたは意思決定を使用してもよい。ＮＩＣ等のアプライアンスのハードウェアまたはカーネルは、ＮＩＣおよび／またはコアを横断して順次動作をサポートするように設計および構築されてもよい。
【０１９６】
システム５４５が１つまたはそれを上回るフローディストリビュータ５５０を備える、実施形態では、各フローディストリビュータ５５０は、プロセッサ５０５またはパケットエンジン５４８と関連付けられることができる。フローディストリビュータ５５０は、各フローディストリビュータ５５０が、システム５４５内で実行する他のフローディストリビュータ５５０と通信することを可能にする、インターフェース機構を備えることができる。１つの事例では、１つまたはそれを上回るフローディストリビュータ５５０は、相互と通信することによって、負荷の平衡をとる方法を判定することができる。本プロセスは、次いで、いずれのフローディストリビュータ５５０が負荷を受容するべきかを判定する、アービタに投票を提出するために、上記で説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第１のフローディストリビュータ５５０’は、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が所定の閾値を上回ること、関連付けられるコア上の負荷が所定の閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷より少ないこと、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを自動転送する場所を判定するために使用されることができる任意の他の測定基準のうちのいずれかに基づいて、第１のデータパケットを関連付けられるコアに自動転送するかどうかを判定することができる。
【０１９７】
フローディストリビュータ５５０は、本明細書に説明されるもの等の分布、計算、または負荷平衡方式に従って、コア５０５の間でネットワークトラフィックを分配することができる。一実施形態では、フローディストリビュータは、機能並列性分布方式５５０、データ並列性負荷分布方式５４０、フローベースのデータ並列性分布方式５２０、またはこれらの分布方式または複数のプロセッサの間で負荷を分配するための任意の負荷平衡方式の任意の組み合わせのうちのいずれか１つに従って、ネットワークトラフィックを分配することができる。したがって、フローディストリビュータ５５０は、データパケットを取り込み、動作負荷平衡または分布方式に従って、プロセッサを横断してそれらを分配することによって、負荷ディストリビュータとして作用することができる。一実施形態では、フローディストリビュータ５５０は、それに応じて、パケット、作業、または負荷を分配する方法を判定する１つまたはそれを上回る動作、機能、または論理を備えることができる。なおも他の実施形態では、フローディストリビュータ５５０は、ソースアドレスおよびデータパケットと関連付けられる宛先アドレスを識別し、それに応じて、パケットを分配し得る、１つまたはそれを上回るサブ動作、機能、または論理を備えることができる。
【０１９８】
いくつかの実施形態では、フローディストリビュータ５５０は、１つまたはそれを上回るコア５０５の間でデータパケットを分配する、受信側スケーリング（ＲＳＳ）ネットワークドライバモジュール５６０または任意のタイプおよび形態の実行可能命令を備えることができる。ＲＳＳモジュール５６０は、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、ＲＳＳモジュール５６０は、コア５０５Ａ−Ｎを横断して、またはマルチプロセッサネットワーク内の複数のプロセッサの間でデータパケットを分配するように、フローディストリビュータ５５０と連動して作動する。ＲＳＳモジュール５６０は、いくつかの実施形態では、ＮＩＣ５５２内で実行することができ、他の実施形態では、コア５０５のうちのいずれか１つの上で実行することができる。
【０１９９】
いくつかの実施形態では、ＲＳＳモジュール５６０は、ＭＩＣＲＯＳＯＦＴ受信側スケーリング（ＲＳＳ）方式を使用する。一実施形態では、ＲＳＳは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡をとられることを可能にする、Ｍｉｃｒｏｓｏｆｔ拡張可能ネットワーキングイニシアチブ技術である。ＲＳＳは、ネットワークパケットを処理するためのコアまたはプロセッサを判定するために任意のタイプおよび形態のハッシング方式を使用してもよい。
【０２００】
ＲＳＳモジュール５６０は、Ｔｏｅｐｌｉｔｚハッシュ関数等の任意のタイプおよび形態のハッシュ関数を適用することができる。ハッシュ関数は、ハッシュタイプまたは一連の値のうちのいずれかに適用されてもよい。ハッシュ関数は、任意のセキュリティレベルのセキュアなハッシュであってもよい、または別様に暗号論的にセキュアである。ハッシュ関数は、ハッシュキーを使用してもよい。キーのサイズは、ハッシュ関数に依存している。Ｔｏｅｐｌｉｔｚハッシュに関して、サイズは、ＩＰｖ６については４０バイト、ＩＰｖ４については１６バイトであってもよい。
【０２０１】
ハッシュ関数は、いずれか１つまたはそれを上回る基準または設計目標に基づいて設計および構築されてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰｖ４、ＴＣＰ／ＩＰｖ６、ＩＰｖ４、およびＩＰｖ６ヘッダを含む、異なるハッシュ入力および異なるハッシュタイプのハッシュ結果の均等な分布を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、少数のバケット（例えば、２つまたは４つ）が存在しているときに均等に分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、多数のバケット（例えば、６４個のバケット）が存在したときにランダムに分配されるハッシュ結果を提供する、ハッシュ関数が使用されてもよい。いくつかの実施形態では、ハッシュ関数は、計算またはリソース使用量のレベルに基づいて判定される。いくつかの実施形態では、ハッシュ関数は、ハードウェアでハッシュを実装することの容易性または困難に基づいて判定される。いくつかの実施形態では、ハッシュ関数は、悪意のある遠隔ホストが、全てハッシュするであろうパケットを同一バケットに送信することの容易性または困難に基づいて、判定される。
【０２０２】
ＲＳＳは、一連の値等の任意のタイプおよび形態の入力からハッシュを生成してもよい。本一連の値は、ネットワークパケットの任意のヘッダ、フィールド、またはペイロード、またはそれらの部分等のネットワークパケットの任意の部分を含むことができる。いくつかの実施形態では、ハッシュへの入力は、ハッシュタイプと称され、以下、すなわち、少なくとも２つのＩＰアドレスと、２つのポートとを備える、４タプル、値のいずれか４つのセットを備える４タプル、６タプル、２タプル、および／または任意の他の一連の数または値のうちのいずれか等のネットワークパケットまたはデータフローと関連付けられる情報の任意のタプルを含んでもよい。以下は、ＲＳＳによって使用され得る、ハッシュタイプの実施例である。
【０２０３】
ソースＴＣＰポート、ソースＩＰバージョン４（ＩＰｖ４）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ４アドレスの４タプル。
【０２０４】
ソースＴＣＰポート、ソースＩＰバージョン６（ＩＰｖ６）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ６アドレスの４タプル。
【０２０５】
ソースＩＰｖ４アドレスおよび宛先ＩＰｖ４アドレスの２タプル。
【０２０６】
ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
【０２０７】
ＩＰｖ６拡張ヘッダを解析するためのサポートを含む、ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
【０２０８】
ハッシュ結果またはその任意の部分は、ネットワークパケットを分配するためのパケットエンジンまたはＶＩＰ等のコアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、１つまたはそれを上回るハッシュビットまたはマスクが、ハッシュ結果に適用される。ハッシュビットまたはマスクは、任意の数のビットまたはバイトであってもよい。ＮＩＣは、７ビット等の任意の数のビットをサポートしてもよい。ネットワークスタックは、初期化中に使用される実際のビットの数を設定してもよい。数は、１〜７を含むであろう。
【０２０９】
ハッシュ結果は、バケットテーブルまたは間接テーブル等の任意のタイプおよび形態のテーブルを介して、コアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、ハッシュ結果ビットの数は、テーブルの中へインデックス化するために使用される。ハッシュマスクの範囲は、間接テーブルのサイズを効果的に定義してもよい。ハッシュ結果の任意の部分またはハッシュ結果自体が、間接テーブルをインデックス化するために使用されてもよい。テーブル内の値は、コアまたはプロセッサ識別子によって等、コアまたはプロセッサのうちのいずれかを識別してもよい。いくつかの実施形態では、マルチコアシステムのコアの全てが、テーブル内で識別される。他の実施形態では、マルチコアシステムのコアのポートが、テーブル内で識別される。間接テーブルは、任意の数のバケット、例えば、ハッシュマスクによってインデックス化され得る、２〜１２８個のバケットを備えてもよい。各バケットは、コアまたはプロセッサを識別する、一連のインデックス値を備えてもよい。いくつかの実施形態では、フローコントローラおよび／またはＲＳＳモジュールは、間接テーブルを変更することによって、ネットワークの平衡を再びとり、ネットワーク負荷の平衡を再びとってもよい。
【０２１０】
いくつかの実施形態では、マルチコアシステム５７５は、ＲＳＳドライバまたはＲＳＳモジュール５６０を含まない。これらの実施形態のうちのいくつかでは、ソフトウェアステアリングモジュール（図示せず）またはシステム内のＲＳＳモジュール５６０のソフトウェア実施形態が、パケットをマルチコアシステム５７５内のコア５０５にステアリングするように、フローディストリビュータ５５０と連動して、またはその一部として動作することができる。
【０２１１】
フローディストリビュータ５５０は、いくつかの実施形態では、アプライアンス２００の上、コア５０５のうちのいずれか１つの上、およびマルチコアシステム５７５内に含まれるデバイスまたはコンポーネントのうちのいずれか１つの上の任意のモジュールまたはプログラム内で実行する。いくつかの実施形態では、フローディストリビュータ５５０’が、第１のコア５０５Ａ上で実行することができる一方で、他の実施形態では、フローディストリビュータ５５０’’は、ＮＩＣ５５２上で実行することができる。なおも他の実施形態では、フローディストリビュータ５５０’のインスタンスが、マルチコアシステム５７５に含まれる各コア５０５上で実行することができる。本実施形態では、フローディストリビュータ５５０’の各インスタンスは、コア５０５を横断してパケットを往復して自動転送するように、フローディストリビュータ５５０’の他のインスタンスと通信することができる。要求パケットへの応答が、同一のコアによって処理されない場合がある、すなわち、第１のコアが要求を処理する一方で、第２のコアが応答を処理する、状況が存在する。これらの状況では、フローディストリビュータ５５０’のインスタンスは、パケットを傍受し、それを所望または正しいコア５０５に自動転送することができ、すなわち、フローディストリビュータインスタンス５５０’は、応答を第１のコアに自動転送することができる。フローディストリビュータ５５０’の複数のインスタンスが、任意の数のコア５０５およびコア５０５の任意の組み合わせの上で実行することができる。
【０２１２】
フローディストリビュータは、いずれか１つまたはそれを上回るルールまたはポリシに応答して動作してもよい。ルールは、ネットワークパケット、データ、またはデータフローを受信するようにコアまたはパケット処理エンジンを識別してもよい。ルールは、ソースおよび宛先ＩＰアドレスおよびソースおよび宛先ポートの４タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。ルールによって規定されるタプルに合致する、受信されたパケットに基づいて、フローディストリビュータは、パケットをコアまたはパケットエンジンに自動転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび／またはコア間メッセージングを介して、コアに自動転送される。
【０２１３】
図５Ｂは、マルチコアシステム５７５内で実行するものとしてフローディストリビュータ５５０を図示するが、いくつかの実施形態では、フローディストリビュータ５５０は、マルチコアシステム５７５から遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行することができる。そのような実施形態では、フローディストリビュータ５５０は、データパケットを取り込み、１つまたはそれを上回るコア５０５を横断してパケットを分配するように、マルチコアシステム５７５と通信することができる。フローディストリビュータ５５０は、一実施形態では、アプライアンス２００に向けられているデータパケットを受信し、分布方式を受信されたデータパケットに適用し、データパケットをマルチコアシステム５７５の１つまたはそれを上回るコア５０５に分配することができる。一実施形態では、フローディストリビュータ５５０は、各パケットがマルチコアシステム５７５のサブノードに向かって標的化されるように、各パケットと関連付けられるメタデータを改変することによって、ルータが特定のコア５０５を標的化し得るように、ルータまたは他のアプライアンスに含まれることができる。そのような実施形態では、ＣＩＳＣＯのｖｎタグ機構が、適切なメタデータを用いて各パケットを改変する、またはタグ付けするために使用されることができる。
【０２１４】
図５Ｃには、１つまたはそれを上回る処理コア５０５Ａ−Ｎを備える、マルチコアシステム５７５の実施形態が図示されている。要するに、コア５０５のうちの１つは、制御コア５０５Ａとして指定されることができ、かつ他のコア５０５のための制御プレーン５７０として使用されることができる。他のコアが、データプレーン内で動作する二次コアであってもよい一方で、制御コアは、制御プレーンを提供する。コア５０５Ａ−Ｎは、グローバルキャッシュ５８０を共有してもよい。制御コアが、制御プレーンを提供する一方で、マルチコアシステム内の他のコアは、データプレーンを形成または提供する。これらのコアが、ネットワークトラフィック上でデータ処理機能性を果たす一方で、制御は、マルチコアシステムの初期化、構成、および制御を提供する。
【０２１５】
さらに図５Ｃを参照すると、さらに詳細には、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のプロセッサであることができる。さらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、図５Ｃに説明されるシステム５７５内で機能することが可能な任意のプロセッサであることができる。なおもさらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のコアまたはコアのグループであることができる。制御コアは、他のコアと異なるタイプのコアまたはプロセッサであってもよい。いくつかの実施形態では、制御は、異なるパケットエンジンを動作させてもよい、または他のコアのパケットエンジンと異なって構成されるパケットエンジンを有してもよい。
【０２１６】
コアのそれぞれのメモリの任意の部分は、コアによって共有されるグローバルキャッシュに配分されてもよい、またはそれに使用されてもよい。要するに、各コアのメモリのそれぞれの所定の割合または所定の量が、グローバルキャッシュに使用されてもよい。例えば、各コアの各メモリの５０％が、共有グローバルキャッシュに専用である、または配分されてもよい。すなわち、図示される実施形態では、制御プレーンコアまたはコア１を除外する各コアの２ＧＢが、２８ＧＢ共有グローバルキャッシュを形成するために使用されてもよい。構成サービスを介する等の制御プレーンの構成は、共有グローバルキャッシュに使用されるメモリの量を判定してもよい。いくつかの実施形態では、各コアは、グローバルキャッシュによって使用するための異なる量のメモリを提供してもよい。他の実施形態では、いずれか１つのコアは、いかなるメモリも提供しない、またはグローバルキャッシュを使用しない場合がある。いくつかの実施形態では、コアのうちのいずれかはまた、グローバル共有メモリに配分されていないメモリ内にローカルキャッシュを有してもよい。コアはそれぞれ、ネットワークトラフィックの任意の部分をグローバル共有キャッシュに記憶してもよい。コアはそれぞれ、要求または応答で使用するように、任意のコンテンツのためのキャッシュをチェックしてもよい。コアのうちのいずれかは、データフロー、要求、または応答で使用するように、グローバル共有キャッシュからコンテンツを取得してもよい。
【０２１７】
グローバルキャッシュ５８０は、本明細書に説明される任意のメモリまたは記憶要素等の任意のタイプおよび形態のメモリまたは記憶要素であることができる。いくつかの実施形態では、コア５０５は、所定量のメモリ（すなわち、３２ＧＢまたはシステム５７５にふさわしい任意の他のメモリ量）へのアクセスを有してもよい。グローバルキャッシュ５８０が、その所定量のメモリから配分されることができる一方で、残りの利用可能なメモリは、コア５０５の間で配分されることができる。他の実施形態では、各コア５０５は、所定量のメモリを有することができる。グローバルキャッシュ５８０は、各コア５０５に配分されたメモリの量を備えることができる。本メモリ量は、バイトで測定されることができる、または各コア５０５に配分されたメモリの割合として測定されることができる。したがって、グローバルキャッシュ５８０は、各コア５０５と関連付けられるメモリからの１ＧＢのメモリを備えることができる、または各コア５０５と関連付けられるメモリの２０％または半分を備えることができる。いくつかの実施形態では、コア５０５の一部のみが、メモリをグローバルキャッシュ５８０に提供する一方で、他の実施形態では、グローバルキャッシュ５８０は、コア５０５に割り当てられていないメモリを備えることができる。
【０２１８】
各コア５０５は、ネットワークトラフィックまたはキャッシュデータを記憶するためにグローバルキャッシュ５８０を使用することができる。いくつかの実施形態では、コアのパケットエンジンは、複数のパケットエンジンによって記憶されるデータをキャッシュして使用するために、グローバルキャッシュを使用する。例えば、図２Ａのキャッシュマネージャおよび図２Ｂキャッシュ機能性は、加速のためにデータを共有するようにグローバルキャッシュを使用してもよい。例えば、パケットエンジンはそれぞれ、ＨＴＭＬデータ等の応答をグローバルキャッシュに記憶してもよい。コア上で動作するキャッシュマネージャのうちのいずれかは、クライアント要求へのキャッシュ応答を供給するように、グローバルキャッシュにアクセスしてもよい。
【０２１９】
いくつかの実施形態では、コア５０５は、部分的にポートに基づいてデータフローを判定するために使用され得る、ポート配分テーブルを記憶するために、グローバルキャッシュ５８０を使用することができる。他の実施形態では、コア５０５は、着信および発信データパケットをダイレクトする場所を判定するためにフローディストリビュータによって使用され得る、アドレスルックアップテーブルまたは任意の他のテーブルまたはリストを記憶するために、グローバルキャッシュ５８０を使用することができる。コア５０５は、いくつかの実施形態では、キャッシュ５８０から読み取ること、およびそれに書き込むことができる一方で、他の実施形態では、コア５０５は、キャッシュ５８０から読み取ること、またはそれに書き込むことのみできる。コアは、コア間通信を行うためにグローバルキャッシュを使用してもよい。
【０２２０】
グローバルキャッシュ５８０は、各区分が特定のコア５０５に専用であることができる、個々のメモリ区分に区分化されてもよい。一実施形態では、制御コア５０５Ａが、より多くの量の利用可能なメモリを受信することができる一方で、他のコア５０５は、グローバルキャッシュ５８０への様々な量またはアクセスを受信することができる。
【０２２１】
いくつかの実施形態では、システム５７５は、制御コア５０５Ａを備えることができる。図５Ｃは、制御コアとしてコア１５０５Ａを図示するが、制御コアは、アプライアンス２００またはマルチコアシステム内の任意のコアであることができる。さらに、単一の制御コアのみが描写されているが、システム５７５は、それぞれ、システムに対するあるレベルの制御を有する、１つまたはそれを上回る制御コアを備えることができる。いくつかの実施形態では、１つまたはそれを上回る制御コアはそれぞれ、システム５７５の特定の側面を制御することができる。例えば、１つのコアが、いずれの分布方式を使用するかを決定することを制御することができる一方で、別のコアは、グローバルキャッシュ５８０のサイズを判定することができる。
【０２２２】
マルチコアシステムの制御プレーンは、専用管理コアとして、またはマスタコアとしてのコアの指定および構成であってもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの動作および機能性の制御、管理、および協調を提供してもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの初期化および構成を含む、同一コアの間のシステムのメモリの配分および使用の制御、管理、および協調を提供してもよい。いくつかの実施形態では、制御プレーンは、データフローに基づいて、コアへのデータフローの割当およびコアへのネットワークパケットの分布を制御するためのフローディストリビュータを含む。いくつかの実施形態では、制御プレーンコアは、パケットエンジンを起動し、他の実施形態では、制御プレーンコアは、本システムの他のコアの管理および制御に専用である。
【０２２３】
制御コア５０５Ａは、どれだけのメモリが各コア５０５に配分されるべきかを判定するステップ、またはいずれのコア５０５が特定の機能またはハードウェア／ソフトウェアエンティティをハンドリングするように割り当てられるべきかを判定するステップ等の他のコア５０５に対するあるレベルの制御を実行することができる。制御コア５０５Ａは、いくつかの実施形態では、制御プレーン５７０内でこれらのコア５０５に対する制御を実行してもよい。したがって、制御コア５０５Ａによって制御されないプロセッサが制御プレーン５７０の外側に存在することができる。制御プレーン５７０の境界を判定するステップは、システム５７５内で実行する制御コア５０５Ａまたはエージェントによって、制御コア５０５Ａによって制御される、これらのコア５０５のリストを維持するステップを含むことができる。制御コア５０５Ａは、以下、すなわち、コアの初期化、コアが利用不可能であるときを判定するステップ、１つのコアが故障したときに負荷を他のコア５０５に再配分するステップ、いずれの分布方式を実装するかを判定するステップ、いずれのコアがネットワークトラフィックを受信するべきかを判定するステップ、どれだけのキャッシュが各コアに配分されるべきかを判定するステップ、特定の機能または要素を特定のコアに割り当てるかどうかを判定するステップ、コアが相互と通信することを可能にするかどうかを判定するステップ、グローバルキャッシュ５８０のサイズを判定するステップ、およびシステム５７５内のコアの機能、構成、または動作の任意の他の判定のうちのいずれかを制御することができる。
Ｆ．分散クラスタアーキテクチャを提供するためのシステムおよび方法
【０２２４】
前の節で議論されるように、トランジスタ間隔およびＣＰＵ速度増加に対する限界を克服するために、多くのＣＰＵ製造業者は、単一のより高速のＣＰＵさえも可能なものを超えて性能を改良するように、マルチコアＣＰＵを組み込んでいる。類似する、またはさらなる性能獲得が、単一またはマルチコアのいずれかである複数のアプライアンスを、分散またはクラスタ化アプライアンスとしてともに動作させることによって、得られてもよい。個々のコンピューティングデバイスまたはアプライアンスは、クラスタのノードと称されてもよい。集中型管理システムが、ノードが単一のコンピューティングシステムとして連動することを可能にするように、負荷平衡、分布、構成、または他のタスクを行ってもよい。外部に、またはサーバおよびクライアントを含む、他のデバイスに対して、多くの実施形態では、クラスタは、典型的な個々のアプライアンスの性能を超える性能を伴うものではあるが、単一の仮想アプライアンスまたはコンピューティングデバイスと見なされてもよい。
【０２２５】
ここで図６を参照すると、コンピューティングデバイスクラスタまたはアプライアンスクラスタ６００の実施形態が図示されている。複数のアプライアンス２００ａ−２００ｎ、またはデスクトップコンピュータ、サーバ、ラックマウントサーバ、ブレードサーバ、または任意の他のタイプおよび形態のコンピューティングデバイス等の、時として、ノードと称されることもある、他のコンピューティングデバイスが、単一のアプライアンスクラスタ６００に結合されてもよい。アプライアンスクラスタと称されるが、多くの実施形態では、クラスタは、限定ではないが、アプリケーションサーバ、ネットワーク記憶サーバ、バックアップサービス、または任意の他のタイプのコンピューティングデバイスとして動作してもよい。多くの実施形態では、アプライアンスクラスタ６００は、アプライアンス２００、ＷＡＮ最適化デバイス、ネットワーク加速デバイス、または上記で議論される他のデバイスの機能の多くを果たすために使用されてもよい。
【０２２６】
いくつかの実施形態では、アプライアンスクラスタ６００は、同じアプライアンス、１つまたはそれを上回るシャーシ内のブレードサーバ、デスクトップまたはラックマウントコンピューティングデバイス、または他のデバイス等のコンピューティングデバイスの同種セットを備えてもよい。他の実施形態では、アプライアンスクラスタ６００は、アプライアンスの異なるモデル、混合アプライアンスおよびサーバ、またはコンピューティングデバイスの任意の他のセットを含む、デバイスの異種または混合セットを備えてもよい。これは、アプライアンスクラスタ６００が、例えば、新しいモデルまたはデバイスを用いて経時的に拡張またはアップグレードされることを可能にし得る。
【０２２７】
いくつかの実施形態では、アプライアンスクラスタ６００の各コンピューティングデバイスまたはアプライアンス２００は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分布方法は、本明細書で議論されるノード管理および分布方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、１つのアプライアンスがデータを備え、それを複数のノードに配分し、各ノードが処理のためのデータを備え、それを複数のコアに配分する、２層分散システムと考えられてもよい。故に、そのような実施形態では、ノード分布システムは、上記で議論されるようなマスタまたは制御コアによって保護され得るため、個々のコアへのフロー分布を管理する必要がない。
【０２２８】
多くの実施形態では、アプライアンスクラスタ６００は、シャーシ内の複数のブレードサーバまたは単一のラック内の複数のラックマウントデバイス等、物理的にグループ化されてもよいが、他の実施形態では、アプライアンスクラスタ６００は、複数のシャーシ、複数のラック、データセンタ内の複数の部屋、複数のデータセンタ、または任意の他の物理配列で分配されてもよい。故に、アプライアンスクラスタ６００は、物理グループではなく、共通構成、管理、および目的を介してグループ化される、仮想アプライアンスと見なされてもよい。
【０２２９】
いくつかの実施形態では、アプライアンスクラスタ６００は、１つまたはそれを上回るネットワーク１０４、１０４’に接続されてもよい。例えば、簡潔に図１Ａを再び参照すると、いくつかの実施形態では、アプライアンス２００は、１つまたはそれを上回るクライアント１０２に結合されたネットワーク１０４と１つまたはそれを上回るサーバ１０６に結合されたネットワーク１０４’との間に展開されてもよい。アプライアンスクラスタ６００は、同様に、単一のアプライアンスとして動作するように展開されてもよい。多くの実施形態では、これは、アプライアンスクラスタ６００の外部の任意のネットワークトポロジ変更を要求しなくてもよく、単一のアプライアンスシナリオからのインストールおよび拡張可能性の容易性を可能にする。他の実施形態では、アプライアンスクラスタ６００は、同様に、図１Ｂ−１Ｄに示される、または上記で議論されるように展開されてもよい。なおも他の実施形態では、アプライアンスクラスタは、１つまたはそれを上回るサーバによって実行される複数の仮想マシンまたはプロセスを備えてもよい。例えば、１つのそのような実施形態では、サーバファームは、複数の仮想マシンを実行してもよく、各仮想マシンは、アプライアンス２００として構成され、複数の仮想マシンは、アプライアンスクラスタ６００として一斉に作用する。さらになおも他の実施形態では、アプライアンスクラスタ６００は、アプライアンス２００またはアプライアンス２００として構成される仮想マシンの混合を備えてもよい。いくつかの実施形態では、アプライアンスクラスタ６００は、同一場所に設置されていない複数のアプライアンス２００を伴って、地理的に分配されてもよい。例えば、図６を再び参照すると、１つのそのような実施形態では、第１のアプライアンス２００ａは、データセンタ等の第１の場所に位置してもよく、第２のアプライアンス２００ｂは、中央オフィスまたは企業の本社等の第２の場所に位置してもよい。さらなる実施形態では、そのように地理的に遠隔のアプライアンスは、Ｔ１またはＴ３ポイントツーポイント接続、ＶＰＮ、または任意の他のタイプおよび形態のネットワーク等の専用ネットワークによって結合されてもよい。故に、同一場所に設置されたアプライアンス２００ａ−２００ｂと比較して、付加的通信待ち時間があり得るが、現場の停電または通信不能状態の場合の信頼性、拡張可能性、または他の利益において利点があってもよい。いくつかの実施形態では、待ち時間の問題は、データフローの地理またはネットワークベースの分布を通して低減させられ得る。例えば、アプライアンスクラスタ６００として構成されるが、企業の本社におけるクライアントおよびサーバからの通信が、現場で展開されるアプライアンス２００ｂにダイレクトされてもよい、負荷平衡が、場所によって加重されてもよい、または類似ステップが、いかなる待ち時間も軽減するようにとられることができる。
【０２３０】
依然として図６を参照すると、アプライアンスクラスタ６００は、クライアントデータプレーン６０２を介してネットワークに接続されてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、クライアントとアプライアンスクラスタ６００との間でデータを搬送する、ネットワーク１０４等の通信ネットワークを備えてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、外部ネットワーク１０４およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータが、外部ネットワーク１０４に接続され、各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。いくつかの実施形態では、本ルータまたはスイッチは、インターフェースマネージャと称されてもよく、さらに、アプリケーションクラスタ６００内のノードを横断してトラフィックを均等に分配するように構成されてもよい。したがって、多くの実施形態では、インターフェースマスタは、アプライアンスクラスタ６００の外部にフローディストリビュータを備えてもよい。他の実施形態では、インターフェースマスタは、アプライアンス２００ａ−２００ｎのうちの１つを備えてもよい。例えば、第１のアプライアンス２００ａは、アプライアンスクラスタ６００のための着信トラフィックを受信し、アプライアンス２００ｂ−２００ｎのそれぞれを横断してトラフィックを分配する、インターフェースマスタとしての役割を果たしてもよい。いくつかの実施形態では、帰還トラフィックが、同様に、インターフェースマスタとしての役割を果たす第１のアプライアンス２００ａを介して、アプライアンス２００ｂ−２００ｎのそれぞれからフローしてもよい。他の実施形態では、アプライアンス２００ｂ−２００ｎのそれぞれからの帰還トラフィックが、ネットワーク１０４、１０４’に直接、または外部ルータ、スイッチ、または他のデバイスを介して、伝送されてもよい。いくつかの実施形態では、インターフェースマスタとしての役割を果たさないアプライアンスクラスタのアプライアンス２００は、インターフェーススレーブ６１０Ａ−６１０Ｎと称されてもよい。
【０２３１】
インターフェースマスタは、種々の方法のうちのいずれかで負荷平衡またはトラフィックフロー分布を行ってもよい。例えば、いくつかの実施形態では、インターフェースマスタは、クラスタのアプライアンスまたはノードを伴って構成されるネクストホップと平等コストマルチパス（ＥＣＭＰ）ルーティングを行う、ルータを備えてもよい。インターフェースマスタは、オープン・ショーテスト・パス・ファースト（ＯＳＰＦ）を使用してもよい。いくつかの実施形態では、インターフェースマスタは、上記で議論されるように、ＩＰアドレスまたは他のパケット情報タプルに基づくハッシュ等のトラフィック分布のためのステートレスハッシュベースの機構を使用してもよい。ハッシュキーおよび／またはソルトが、ノードを横断する均等な分布のために選択されてもよい。他の実施形態では、インターフェースマスタは、リンクアグリゲーション（ＬＡＧ）プロトコル、または任意の他のタイプおよび形態のフロー分布、負荷平衡、およびルーティングを介して、フロー分布を行ってもよい。
【０２３２】
いくつかの実施形態では、アプライアンスクラスタ６００は、サーバデータプレーン６０４を介してネットワークに接続されてもよい。クライアントデータプレーン６０２と同様に、サーバデータプレーン６０４は、サーバとアプライアンスクラスタ６００との間にデータを搬送する、ネットワーク１０４’等の通信ネットワークを備えてもよい。いくつかの実施形態では、サーバデータプレーン６０４は、外部ネットワーク１０４’およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎをブリッジする、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータが、外部ネットワーク１０４’に接続され、各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。多くの実施形態では、各アプライアンス２００ａ−２００ｎは、第１のネットワークインターフェースがクライアントデータプレーン６０２に接続され、第２のネットワークインターフェースがサーバデータプレーン６０４に接続される、複数のネットワークインターフェースを備えてもよい。これは、付加的セキュリティを提供し、仲介デバイスとしてアプライアンスクラスタ６００サーバを有することによって、クライアントおよびサーバネットワークの直接インターフェースを防止し得る。他の実施形態では、クライアントデータプレーン６０２およびサーバデータプレーン６０４は、マージされる、または組み合わせられてもよい。例えば、アプライアンスクラスタ６００は、クライアント１０２およびサーバ１０６とのネットワーク上で非仲介ノードとして展開されてもよい。上記で議論されるように、多くの実施形態では、インターフェースマスタが、サーバおよびネットワーク１０４’からアプライアンスクラスタの各アプライアンスに通信をルーティングして分配するために、サーバデータプレーン６０４上に展開されてもよい。多くの実施形態では、クライアントデータプレーン６０２用のインターフェースマスタおよびサーバデータプレーン６０４用のインターフェースマスタは、同様に構成されてもよく、上記で議論されるようなＥＣＭＰまたはＬＡＧプロトコルを行う。
【０２３３】
いくつかの実施形態では、アプライアンスクラスタ６００内の各アプライアンス２００ａ−２００ｎは、内部通信ネットワークまたはバックプレーン６０６を介して接続されてもよい。バックプレーン６０６は、ノード間またはアプライアンス間制御および構成メッセージ用、およびトラフィックのノード間自動転送用の通信ネットワークを備えてもよい。例えば、第１のアプライアンス２００ａがネットワーク１０４を介してクライアントと通信し、第２のアプライアンス２００ｂがネットワーク１０４’を介してサーバと通信する、一実施形態では、クライアントとサーバとの通信は、クライアントから第１のアプライアンスへ、バックプレーン６０６を介して第１のアプライアンスから第２のアプライアンスへ、および第２のアプライアンスからサーバへ、および逆も同様にフローしてもよい。他の実施形態では、バックプレーン６０６は、インターフェース一時停止またはリセットコマンド、フィルタリングまたは圧縮ポリシ等のポリシ更新、バッファステータス、スループット、またはエラーメッセージ等のステータスメッセージ、または任意の他のタイプおよび形態のノード間通信等の構成メッセージを搬送してもよい。いくつかの実施形態では、ＲＳＳキーまたはハッシュキーは、クラスタ内の全てのノードによって共有されてもよく、バックプレーン６０６を介して通信してもよい。例えば、第１のノードまたはマスタノードは、始動またはブート等のＲＳＳキーを選択してもよく、他のノードによって使用するために本キーを分配してもよい。いくつかの実施形態では、バックプレーン６０６は、各アプライアンス２００のネットワークインターフェースの間にネットワークを備えてもよく、ルータ、スイッチ、または他のネットワークデバイス（図示せず）を備えてもよい。したがって、いくつかの実施形態では、上記で議論されるように、クライアントデータプレーン６０２用のルータが、アプライアンスクラスタ６００とネットワーク１０４との間に展開されてもよく、サーバデータプレーン６０４用のルータが、アプライアンスクラスタ６００とネットワーク１０４’との間に展開されてもよく、バックプレーン６０６用のルータが、アプライアンスクラスタ６００の一部として展開されてもよい。各ルータは、各アプライアンス２００の異なるネットワークインターフェースに接続してもよい。他の実施形態では、１つまたはそれを上回るプレーン６０２−６０６が、組み合わせられてもよい、またはルータまたはスイッチが、複雑性を低減させる、または本システムから余分なデバイスを排除するために、アプライアンス２００ａ−２００ｎの異なるインターフェースに接続し、同時に複数のルーティング機能を果たすように、複数のＬＡＮまたはＶＬＡＮに分割されてもよい。
【０２３４】
いくつかの実施形態では、制御プレーン（図示せず）は、管理者またはユーザからアプライアンスクラスタ６００への構成および制御トラフィックを通信してもよい。いくつかの実施形態では、制御プレーンは、第４の物理ネットワークであってもよい一方で、他の実施形態では、制御プレーンは、プレーン６０２−６０６のうちの１つを介したＶＰＮ、トンネル、または通信を備えてもよい。したがって、制御プレーンは、いくつかの実施形態では、仮想通信プレーンと見なされてもよい。他の実施形態では、管理者は、ＲＳ−２３２等のシリアル通信インターフェース、ＵＳＢ通信インターフェース、または任意の他のタイプおよび形態の通信等の別個のインターフェースを通して、構成および制御を提供してもよい。いくつかの実施形態では、アプライアンス２００は、ボタンおよびディスプレイを伴うフロントパネル、ネットワーク１０４、１０４’またはバックプレーン６０６を介した構成用のウェブサーバ、または任意の他のタイプおよび形態のインターフェース等の管理用のインターフェースを備えてもよい。
【０２３５】
いくつかの実施形態では、上記で議論されるように、アプライアンスクラスタ６００は、内部フロー分布を含んでもよい。例えば、これは、ノードが外部デバイスに透過的に結合／そこから離脱することを可能にするように行われてもよい。外部フローディストリビュータがそのような変更に応じて繰り返し再構成される必要性をなくすために、ノードまたはアプライアンスが、ネットワークパケットをクラスタ６００内の正しいノードにステアリングするためにインターフェースマスタまたはディストリビュータとして作用してもよい。例えば、いくつかの実施形態では、（故障、リセット、または類似する場合に応じて等）ノードがクラスタから離脱するとき、外部ＥＣＭＰルータが、ノードの変更を識別してもよく、かつトラフィックを再分配するように全てのフローを再ハッシュしてもよい。これは、全ての接続をドロップしてリセットさせ得る。同一のドロップおよびリセットが、ノードが再結合するときに起こり得る。いくつかの実施形態では、信頼性のために、アプライアンスクラスタ６００内の２つのアプライアンスまたはノードが、接続ミラーリングを介して外部ルータから通信を受信してもよい。
【０２３６】
多くの実施形態では、アプライアンスクラスタ６００のノードの間のフロー分布は、アプライアンスのコアの間のフロー分布について上記で議論される方法のうちのいずれかを使用してもよい。例えば、一実施形態では、マスタアプライアンス、マスタノード、またはインターフェースマスタは、着信トラフィック上のＴｏｅｐｌｉｔｚハッシュ等のＲＳＳハッシュを計算し、ハッシュの選好リストまたは分布テーブルを参考にしてもよい。多くの実施形態では、フローディストリビュータは、トラフィックを自動転送するときに、ハッシュを受信側アプライアンスに提供してもよい。これは、ノードがコアへのフロー分布のためのハッシュを再計算する必要性を排除し得る。多くのそのような実施形態では、アプライアンスの間の分布のためのハッシュを計算するために使用されるＲＳＳキーは、グローバルＲＳＳキーと称され得る、コアの間の分布のためのハッシュを計算するために使用されるものと同一のキーを備えてもよく、計算されたハッシュの再利用を可能にする。いくつかの実施形態では、ハッシュは、ポート番号、ＩＰアドレスを含むインターネット層ヘッダ、または任意の他のパケットヘッダ情報を含む、トランスポート層ヘッダの入力タプルを用いて計算されてもよい。いくつかの実施形態では、パケット本体情報が、ハッシュに利用されてもよい。例えば、無損失ＴＣＰヘッダを介してカプセル化される損失性ＵＤＰトラフィック等の１つのプロトコルのトラフィックが、別のプロトコルのトラフィック内にカプセル化される、一実施形態では、フローディストリビュータは、カプセル化プロトコル（例えば、ＴＣＰヘッダ）ではなく、カプセル化されたプロトコル（例えば、ＵＤＰヘッダ）のヘッダに基づいて、ハッシュを計算してもよい。同様に、パケットがカプセル化され、暗号化または圧縮される、いくつかの実施形態では、フローディストリビュータは、暗号解読または解凍後のペイロードパケットのヘッダに基づいて、ハッシュを計算してもよい。なおも他の実施形態では、ノードは、構成または管理目的のため等に、内部ＩＰアドレスを有してもよい。これらのＩＰアドレスへのトラフィックは、ハッシュされて分配される必要はなく、むしろ、宛先アドレスを所有するノードに自動転送されてもよい。例えば、アプライアンスは、１．２．３．４のＩＰアドレスにおいて構成または管理目的のために起動するウェブサーバまたは他のサーバを有してもよく、いくつかの実施形態では、その内部ＩＰアドレスとして、本アドレスをフローディストリビュータに登録してもよい。他の実施形態では、フローディストリビュータは、内部ＩＰアドレスをアプライアンスクラスタ６００内の各ノードに割り当ててもよい。アプライアンスの内部ＩＰアドレス（１．２．３．４）にダイレクトされる、管理者によって使用されるワークステーション等の外部クライアントまたはサーバから着信するトラフィックは、ハッシングを要求することなく、直接自動転送されてもよい。
Ｇ．仲介デバイスを介してセッションを維持するためのシステムおよび方法
【０２３７】
本開示は、仲介デバイスを介してセッションを維持するためのシステムおよび方法を対象とする。特に、本ソリューションは、一次デバイスが障害を起こすと、スタンバイ仲介デバイスに維持される大量の動的状態を用いて、アプリケーションセッションを再開するためのシステムおよび方法に関する。仲介デバイスは、第１の仲介デバイス（または第１のデバイス）と、第２の仲介デバイス（または第２のデバイス）とを含む、アクティブ−スタンバイアプライアンスペア（または仲介アプライアンスペア）を指し得る。第１のデバイスは、第１のデバイスが、クライアントから受信されたパケットを解析する、クライアントにサーバから受信された応答パケットを提供する、または別様にクライアントにサーバによって実行されるアプリケーションへのアクセスを提供することによって、クライアントからの要求にアクティブにサービス提供する、アクティブモードにあることができる。ある場合には、最初に、アクティブモードにあるように構成される、仲介アプライアンスペアの第１のデバイスは、一次デバイスと称され得る。仲介アプライアンスペアは、最初に、スタンバイモードであるように構成される、第２のデバイスを含むことができる。第２のデバイスは、クライアントデバイスからの要求にアクティブにサービス提供しなくてもよい。第２のデバイスは、スタンバイモードにあって、クライアントから受信された要求にアクティブにサービス提供しない、またはサーバから受信された応答をクライアントに提供しないため、二次デバイスと称され得る。一次デバイスが、障害を起こす、無応答となる、スケジュールされた保守のためにダウンされる、または別様にクライアントデバイスから受信された要求を処理不能となる場合、サーバから受信された自動転送する、または別様にクライアントデバイスがアプリケーションと相互作用することができるように、クライアントデバイスに好適なアクセスをサーバによって実行されるアプリケーションへ提供し、二次デバイスは、新しい一次デバイスとなり、クライアント要求を処理することによって、クライアントデバイスにサービス提供することができる。
【０２３８】
仲介デバイスは、ディープパケットインスペクションをアプリケーションネットワークトラフィックで行うように構成されることができる。アプリケーショントラフィックは、処理される、またはサーバに提供されるべき、クライアントから受信されたパケット、または処理される、またはクライアントに提供されるべき、サーバから受信されたパケットを指し得る。仲介デバイスは、ディープパケットインスペクションを行い、セッション状態の可視性を得る、または問題または課題のトラブルシューティングまたは識別を促進することができる。そのような展開では、一次デバイスが、障害を起こし、二次デバイスが、新しい一次デバイスになる場合、アプリケーションサーバプロトコル（例えば、独立コンピューティングアーキテクチャ「ＩＣＡ」）を経由してアプリケーションまたはデスクトップセッションにアクセスする、クライアントデバイスは、セッションから接続解除され得る。クライアントデバイスは、次いで、セッションに再ログインし、仲介デバイスを介してサーバによって提供されるアプリケーションまたはデスクトップセッションにアクセスする必要があり得る。
【０２３９】
本ソリューションのシステムおよび方法は、新しい一次仲介デバイス上で影響されたセッションをシームレスに再開することができる。影響されたセッションを新しい一次仲介デバイス上でシームレスに再開することによって、クライアントデバイスは、オリジナル一次仲介デバイスの障害によって影響されず、スタンバイ二次を新しい一次にさせ得る。
【０２４０】
例えば、コンピューティングネットワークは、アクティブ−スタンバイアプライアンスペア内に展開される、ネットワーク仲介デバイス（例えば、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって製造されたＮｅｔＳｃａｌｅｒ（Ｒ））を使用して、アプリケーションリソースの高可用性を提供することができる。アクティブ−スタンバイアプライアンスペアでは、第１の仲介デバイスは、クライアントデバイスにアクティブにサービス提供する一方、第２の仲介デバイスは、スタンバイモードに維持される。例えば、実施形態では、第１の仲介デバイスは、アクティブモードにあることができ、ＩＣＡセッション等のアプリケーションセッションを解析および処理することができる。第１の仲介デバイスは、スタンバイモードに維持される、第２の仲介デバイスとペアリングされることができる。第１の仲介デバイスは、動的であって、パケット毎に（例えば、各パケットが処理されるにつれて）変化し得る、有意な状態情報を維持することができる。第１の仲介デバイスが、障害を起こす場合、スタンバイデバイスは、新しい一次デバイスになることができる。二次デバイスは、新しい一次デバイスになり、クライアントデバイスによって提供されるユーザ体験に影響を及ぼすことなく、セッションを再開することができる。
【０２４１】
仲介アプライアンスペア（例えば、第１の仲介デバイスおよび第２の仲介デバイス）は、クライアントデバイスとアプリケーションを提供するサーバとの間のセッションの可視性を提供するように構成されることができる。例えば、仲介アプライアンスペアは、トラブルシューティングまたは分析目的のために、プロトコル（例えば、ＩＣＡプロトコルまたは高精細体験「ＨＤＸ」プロトコル）の可視性を提供することができる。プロトコルを解析するために、アプライアンスペアは、デバイス内の大量の状態情報を管理する。本状態情報は、例えば、ＩＣＡプロトコルの解析、共通ゲートウェイプロトコル（「ＣＧＰ」）の解析、ＩＣＡフレームのの解読および再暗号化、またはＩＣＡフレームの解凍から生じる情報を含むことができる。その結果、仲介デバイスによって維持される状態情報は、非常に大きくなり得（例えば、５メガバイト、５０メガバイト、１００メガバイト、５００メガバイト、または１ギガバイト）、本状態情報は、１つまたはそれを上回るパケットが仲介アプライアンスペアによって処理されることに伴って変化し得る（例えば、全てのパケットが処理されることに伴って変化し得る）。
【０２４２】
一次仲介デバイスは、セッションあたりの状態を一次仲介デバイスのメモリ内に維持することができる。パケット毎に更新される状態のサイズのため、一次仲介デバイスが状態を外部デバイス（例えば、別の仲介デバイス）内に共有および更新することは、困難または不可能であり得る。一次仲介デバイスが、状態を外部デバイス内に共有および状態を更新することができない場合、一次仲介デバイスのメモリ内に維持される状態は、一次仲介デバイスがオフラインになると、喪失され得る。一次仲介デバイスがオフラインになるにつれて、一次仲介デバイスの接続（例えば、伝送制御プロトコル「ＴＣＰ」接続）は、リセットされ得る。クライアントデバイスと一次仲介デバイスとの間の接続が、リセットされると、クライアントデバイスを実行するエージェントは、セッション再接続を開始し得る。クライアントデバイスのエージェントによって開始されるセッション再接続を介して確立される新しい接続（例えば、ＴＣＰ接続）は、新しい一次仲介デバイス（例えば、以前にスタンバイモードであった第２の仲介デバイス）を介して、ランドオン（ｌａｎｄ  ｏｎ）されるかまたは確立されることができる。本新しい一次仲介デバイスが、セッションに関する状態情報を有していない場合、新しい一次仲介手段は、セッションを再開することが不可能となり得る。本ソリューションのシステムおよび方法は、第２の仲介デバイス（または二次デバイス）が、スタンバイモードにある間、一次仲介デバイスと連携して、状態を第２のデバイス上で維持することを可能にすることができる。したがって、一次仲介デバイスがオフラインになり、二次仲介デバイスが新しい一次役割を引き継ぐと、二次デバイスは、クライアントエージェントによって開始されるセッション再接続を用いてサポートおよび継続することができる。
【０２４３】
いくつかの実施形態では、一次仲介デバイスおよび二次仲介デバイスは両方とも、準備完了状態にあることができる。準備完了状態は、デバイスが、準備完了状態であって、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを搬送する、パケットを解析することを示すことができる。アプリケーション起動の間、クライアントデバイス上で実行するエージェントは、プロトコル接続を介して、バックエンドサーバまたは一次仲介デバイスを介してホストに接続するための要求を開始することができる。一次仲介デバイスは、接続を開始し、新しいプロトコル接続に対応するアプリケーションを起動するための要求を検出することができ、一次仲介デバイスは、要求を解析および処理することができる。
【０２４４】
一次仲介デバイスが、クライアントデバイス上で実行するエージェントからの要求または他のデータパケットを解析および処理する間、一次仲介デバイスは、二次仲介デバイスが準備完了状態にあることを検出することができる。二次仲介デバイスが準備完了状態にあることの検出に応答して、一次仲介デバイスは、セッションを更新状態にマーキングし、また、要求またはデータパケットに対応するアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを二次仲介デバイスに自動転送することができる。アプリケーションプロトコルデータおよびアプリケーションセッションメタデータは、集合的に、アプリケーションデータと称され得る。アプリケーションプロトコルデータは、高精細体験（「ＨＤＸ」）プロトコルデータを指し得る。アプリケーションセッションデータは、ＨＤＸセッションメタデータを指し得る。二次仲介手段は、アプリケーションデータを受信し、アプリケーションデータまたはそのアプリケーションプロトコルデータまたはアプリケーションセッションメタデータを解析することができる。
【０２４５】
したがって、アプリケーションデータを一次デバイスから二次デバイスに自動転送し、二次デバイスに、一次仲介デバイスとして同一アプリケーションプロトコルデータを解析するように命令することによって、本ソリューションのシステムおよび方法は、同一セッション状態を一次仲介デバイスおよび二次仲介デバイスの両方に維持することができる。同一セッション状態を一次および二次仲介デバイスの両方に維持することによって、二次仲介デバイスは、一次仲介デバイスが、障害を起こす、または別様に無応答になると、シームレスに引き継ぐことができる。例えば、一次仲介デバイスが、障害を起こすと、全てのＴＣＰ接続は、リセットされ得る。クライアントデバイス上で実行するエージェントは、セッション再接続プロセスを介して、新しいＣＧＰ／ＩＣＡ接続を確立するための要求を送信する。新しい接続は、新しい一次仲介デバイス（例えば、スタンバイモードにある以前の二次仲介デバイス）においてランドオンすることができる。新しい一次仲介デバイスは、セッション再接続を点検、処理、または分析し、本セッション再接続と関連付けられたセッション状態情報を識別し、読み出すことができる。本セッション状態情報は、新しい一次デバイスが二次仲介デバイスであるとき、前の（例えば、オリジナルまたは初期）一次仲介デバイスからパケット中継を介して、新しい一次デバイスによって作成および維持され得る。
【０２４６】
本プロセスのある時点において、オリジナル一次仲介デバイスが、二次仲介デバイス（例えば、スタンバイデバイス）が準備完了状態にない（例えば、二次仲介手段の障害、二次仲介デバイスが無応答である、またはスケジュールまたは未スケジュール保守に起因してオフラインであることに起因して）ことを判定または検出する場合、一次仲介デバイスは、セッションをダウン状態または非準備完了状態にマーキングすることができる。一次仲介デバイスが、セッションをダウン状態にマーキングすると、一次仲介デバイスは、二次仲介デバイスへのアプリケーションプロトコルデータまたはアプリケーションセッションメタデータの自動転送を停止、ブロック、防止、または中止することができる。したがって、セッションがダウン状態にある場合、一次仲介デバイスは、アプリケーションデータを二次仲介デバイスに自動転送しない。
【０２４７】
ある後の時点で、一次仲介デバイスが、二次仲介デバイスが、準備完了状態であって、アプリケーションプロトコルデータを解析し、セッション状態を二次仲介デバイスのメモリ内に維持することを示す、二次仲介デバイスが、オンラインに戻った、または準備完了状態に戻ったことを検出する場合、一次仲介デバイスは、セッションをセッション更新状態にマーキングすることができる。ダウン状態から更新状態へのセッション状態の遷移に応答して、一次仲介デバイスは、二次仲介デバイスを最新状態にするように、アプリケーションプロトコルセッション状態を二次仲介デバイスにプッシュ配信、提供、転送、または別様に自動転送することができる。例えば、一次二次デバイスは、完全なアプリケーションプロトコルセッション状態を二次仲介デバイスにプッシュ配信し、二次仲介デバイスを単一通信において最新状態にすることができる。その後、いったん二次仲介デバイスが、一次仲介デバイス内のセッション状態に合致するセッション状態を二次仲介デバイスのメモリ内に維持すると、一次仲介デバイスは、アプリケーションデータを二次仲介デバイスに自動転送または中継し続け、二次仲介デバイスによって維持されるセッション状態と一次仲介デバイスのセッション状態を同期させることができる。
【０２４８】
ここで図７Ａを参照すると、セッションを維持するためのシステムの実施形態のブロック図が、示される。システム７００は、第１の仲介デバイス２００ａと、第２の仲介デバイス２００ｂとを含む、アクティブ−スタンバイアプライアンスペア７４０を含む。ある場合には、アクティブ−スタンバイアプライアンスペア７４０は、アプライアンスペア７４０、アプライアンスペア７４０、仲介アプライアンスペア７４０、またはデバイス７４０と称され得る。アプライアンスペア７４０は、図６に描写されるアプリケーションクラスタ６００の１つまたはそれを上回る機能性またはコンポーネントを含むことができる。アクティブ−スタンバイペア７４０の第１のデバイス２００ａは、第１の仲介デバイス２００ａ、一次仲介デバイス２００ａ、一次デバイス２００ａ、初期一次デバイス２００ａ、またはオリジナル一次デバイス２００ａと称され得る。アクティブ−スタンバイペア７４０の第２のデバイス２００ｂは、第２の仲介デバイス２００ｂ、二次仲介デバイス２００ｂ、第２のデバイス２００ｂ、初期スタンバイデバイス２００ｂ、および新しい一次デバイス２００ｂと称され得る。仲介デバイス２００ａおよび２００ｂまたはアプライアンスペア７４０は、複数のサーバ１０６ａ−ｎおよび複数のクライアント１０２ａ−ｎを仲介する。アプライアンス２００ａおよび２００ｂは、アプリケーションレベルセキュリティ、最適化、またはトラフィック管理を提供することによって、ネットワーク１０４またはネットワーク１０４’を経由して、サーバ１０６ａ−ｎを介して提供される、ウェブサイトコンテンツ、サービス、リソース、またはアプリケーションの配信を管理または最適化することができる。クライアント１０２は、クライアント１０２の１つまたはそれを上回るコンポーネントまたは機能性を含んでもよい。サーバ１０６は、サーバ１０６の１つまたはそれを上回るコンポーネントまたは機能性を含んでもよい。仲介デバイス２００ａおよび２００ｂは、図１−６に関して上記に説明されるアプライアンス２００と同一またはそれに類似する、またはその１つまたはそれを上回る機能性またはコンポーネントを含んでもよい。アプライアンスペア７４０は、図１−６に関して上記に説明されるアプライアンスクラスタ６００と同一またはそれに類似する、またはその１つまたはそれを上回る機能性またはコンポーネントを含んでもよい。いくつかの実施形態では、クライアント１０２ａ−ｎは、図１−６に関して上記に説明されるクライアント１０２ａ−ｎと同一またはそれに類似し、サーバ１０６ａ−ｎは、サーバ１０６ａ−ｎと同一またはそれに類似する、またはその１つまたはそれを上回る機能性またはコンポーネントを含む。いくつかの実施形態では、システム７００のクライアント１０２およびサーバ１０６はさらに、クライアントを認証するための機能を行う、またはそのための特徴を提供するように構成される。
【０２４９】
依然として、図７Ａを参照すると、さらなる詳細では、アプライアンスペア７４０は、インターフェース７０５を含む。インターフェース７０５は、アプリケーションプログラミングインターフェース、グラフィカルユーザインターフェース、通信ポートを含む、またはＴＣＰ／ＩＰ等の１つまたはそれを上回る通信またはネットワーキングプロトコルを用いて構成されることができる。インターフェース７０５は、ネットワーク１０４またはネットワーク１０４’を介して、データパケットを受信またはインターセプトする、データパケットを受信する、ネットワークトラフィックを監視する、または別様に情報を得る、または伝送／伝達するように構成されることができる。
【０２５０】
いくつかの実施形態では、インターフェース７０５は、要求を複数のクライアント１０２ａ−ｎのクライアント１０２ａから受信する。インターフェース７０５は、要求をネットワーキングプロトコル、通信プロトコル、アプリケーション層プロトコル、トランスポートプロトコル、または暗号化プロトコルを介して受信してもよい。プロトコルは、例えば、ＨＴＴＰ、ＴＣＰ、ＩＣＡ、またはＨＤＸを含むことができる。プロトコルは、ステートフルプロトコルまたはステートレスプロトコルであることができる。要求は、クライアントまたはクライアント１０２ａがアクセスを要求するリソースについての情報を含んでもよい。いくつかの実施形態では、サーバ１０６ａ−ｎによって提供されるリソースは、クライアントまたはクライアントデバイスのユーザが、アクセスが付与される前に、認証、承認、または認可を要求し得る、セキュアリソースであってもよい。
【０２５１】
いくつかの実施形態では、アプライアンスペア７４０は、ネットワーク通信を１つまたはそれを上回るクライアント１０２ａ−ｎから受信するように設計および構築される、インターフェース７０５を含むことができる。インターフェース７０５は、図１−６に関して上記に説明されるインターフェース６０８または６１０ａ−ｎと同一またはそれに類似する、またはその１つまたはそれを上回る機能性またはコンポーネントを含んでもよい。インターフェース７０５は、クライアントエージェント１２０ａを介して等、データパケットをクライアント１０２ａから受信することができる。インターフェース７０５は、クライアント１０２ａから受信されたデータパケットを第１のデバイス２００ａに自動転送または中継することができる。例えば、インターフェース７０５は、クライアントエージェント１２０ａから受信されたデータパケットを第１のデバイス２００ａに自動的に自動転送するように構成されることができる。インターフェース７０５はさらに、データパケットを一次デバイス２００ａに自動転送または中継するように構成されることができる。一次デバイス２００ａは、現在アクティブモードにある、アクティブ−スタンバイ仲介アプライアンスペア７４０の仲介デバイスを指し得る。したがって、インターフェース７０５は、仲介デバイス２００ａおよび２００ｂのいずれが、クライアントエージェント１２０からの要求にアクティブにサービス提供し、要求を一次デバイスに自動転送するように構成される、現在一次デバイスであるかを判定することができる。
【０２５２】
仲介デバイス２００ａ−ｂのうちのいずれが現在一次デバイスであるかを判定するために、インターフェース７０５は、メモリ内に、仲介デバイス２００ａ−ｂの役割についての情報を維持することができる。例えば、インターフェース７０５は、仲介デバイス２００ａおよび２００ｂのうちの１つまたはそれを上回るものにポーリングし、アクティブである、すなわち、一次デバイスであるデバイスに関するインジケーションを識別、判定、または受信することができる。インターフェース７０５は、そのインジケーションをインターフェース７０５のメモリ内の役割データ構造内に記憶することができる。インターフェース７０５は、１秒、５秒、１０秒、６０秒、５分、または１０分毎等の時間間隔に基づいて、仲介デバイス２００ａ−ｂをポーリングすることができる。別の実施例では、インターフェース７０５は、イベント、条件、またはトリガに応答して、仲介デバイス２００ａ−ｂをポーリングすることができる。例えば、インターフェース７０５は、パケットをクライアントエージェント１２０から仲介デバイス２００ａに自動転送することを試み得るが、仲介デバイス２００ａがオフラインまたは別様に無応答であることを発見し得る。インターフェース７０５は、インターフェース７０５のメモリ内の役割データ構造を更新情報で更新することができる。仲介デバイス２００ａがオフラインまたは無応答であることの判定に応答して、インターフェース７０５は、受信されたデータパケットを、新しい一次デバイス２００ｂとして作用し得る、第２の仲介デバイス２００ｂに自動転送することができる。
【０２５３】
第１の仲介デバイス２００ａおよび第２の仲介デバイス２００ｂは、アプライアンス２００の１つまたはそれを上回るコンポーネントまたは機能性を含むことができる。第１の仲介デバイス２００ａは、モニタ７１０ａと、パケットエンジン７１５ａと、データリポジトリ７２０ａとを含むことができる。データリポジトリ７２０ａは、セッションデータ７２５ａ、モード情報７３０ａ、およびパラメータ７３５ａを含む、または記憶することができる。第２の仲介デバイス２００ｂは、モニタ７１０ｂと、パケットエンジン７１５ｂと、データリポジトリ７２０ｂとを含むことができる。データリポジトリ７２０ｂは、セッションデータ７２５ｂ、モード情報７３０ｂ、およびパラメータ７３５ｂを含む、または記憶することができる。モニタ７１０ａは、セッション状態を検出または判定する、デバイス状態を判定する、デバイスモードを判定する、または状態またはモードを更新するように設計、構築、および構成される、デジタル回路、ハードウェア、１つまたはそれを上回るプロセッサ、メモリ、またはソフトウェアを含むことができる。パケットエンジン７１５ａ−ｂは、データパケットを解析または処理するように設計、構築、および構成される、デジタル回路、ハードウェア、１つまたはそれを上回るプロセッサ、メモリ、またはソフトウェアを含むことができる。パケットエンジン７１５ａ−ｂは、図１−６に関して上記に説明されるパケットエンジン２４０と同一またはそれに類似する、またはその１つまたはそれを上回る機能性またはコンポーネントを含んでもよい。
【０２５４】
各デバイス２００ａ−ｂは、デバイスモードまたはモードと関連付けられる、またはそれに対応することができる。デバイス２００ａ−ｂのモードは、アクティブまたはスタンバイのうちの１つであることができる。モードは、経時的に、またはセッションの間、変化し得る。アクティブモードは、デバイス２００ａが、クライアントまたはそのクライアントエージェント１２０から受信された要求またはデータパケットを解析および処理することによって、クライアント１０２にアクティブにサービス提供する、モードを指し得る。アクティブモードでは、デバイス２００ａは、データパケットをクライアント１０２から受信し、パケットを解析および処理し、処理されたパケットに対応するデータを対応するサーバ１０６ａ−ｎに自動転送する。アクティブモードでは、デバイスは、セッション状態をデバイスのメモリ内に維持することができる。その後、アクティブモードにおけるデバイス２００ａは、応答をサーバ１０６から受信し、応答を解析および処理し、応答に対応するデータを同一クライアント１０２に自動転送することができる。
【０２５５】
スタンバイモードでは、デバイス２００ｂ等のデバイスは、クライアントから受信されたデータパケットに対応するデータを受信し、データを解析および処理し、セッション状態をデバイス２００ｂのメモリ内に維持することができる。スタンバイモードでは、デバイス２００ｂは、デバイス２００ａ等のアクティブモードにおけるデバイスのメモリ内に維持されるセッション状態と同一セッション状態を維持することができる。しかしながら、スタンバイモードにある間、デバイス２００ｂは、クライアント要求に応答する、または要求をサーバ１０６に送信することによって、クライアント要求にアクティブにサービス提供しなくてもよい。
【０２５６】
アクティブモードにおける第１のデバイス２００ａは、スタンバイモードにおける第２のデバイス２００ｂと通信可能に結合されるか、または、インターフェースをとられることができる。第１および第２のデバイス２００ａ−ｂは、モード情報を対応するモードデータ構造７３０ａ−ｂ内に記憶することができる。例えば、第１のデバイス２００ａは、モードデータ構造７３０ａを含む、データリポジトリ７２０ａまたはメモリ場所７２０ａを含むことができる。モードデータ構造７３０ａは、モードに関するデータフィールドまたはパラメータフィールドを含むことができる。パラメータフィールドは、アクティブまたはスタンバイ等のモードに関する値を記憶することができる。パラメータフィールドは、デバイスがアクティブモードにあるかまたはスタンバイモードにあるかを示し得る、他の値、用語、文字、シンボル、ストリング、またはバイナリインジケータを含むことができる。例えば、用語「機能的」、「動作時」、または「サービス」は、アクティブモードを示すことができる。例えば、用語「受動的」、「待機中」、または「バックアップ」は、デバイスがスタンバイモードであることを示すことができる。
【０２５７】
モニタ７１０ａは、デバイス２００ａ−ｂが準備完了状態にあるかまたは非準備完了（すなわち、準備ができていない）状態にあるかを判定するように構成されることができる。準備完了状態は、デバイスのメモリ内に、クライアントデバイスとのセッションの状態を維持するために、デバイスが準備完了状態であって、データパケットに対応するデータを解析することを示す、デバイスの状態を指し得る。準備完了状態は、アクティブモードと異なり得る。例えば、スタンバイモードにおけるデバイスは、準備完了状態にあることができる。デバイスが、スタンバイモードおよび準備完了状態にあるとき、デバイスは、クライアント要求にアクティブにサービス提供しなくてもよいが、依然として、セッション状態をデバイスのメモリ内に維持し得る。例えば、スタンバイモードおよび準備完了状態におけるデバイスは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを受信し、デバイスのメモリ内に、アクティブモードにおけるデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することができる。
【０２５８】
デバイスが準備完了状態にあるかどうかを判定するために、モニタ７１０は、デバイスをポーリングすることができる。例えば、第１のデバイス２００ａのモニタ７１０ａは、ステータス要求を用いて、第２のデバイス２００ｂをポーリングすることができる。要求の受信に応答して、第２のデバイス２００ｂは、要求にステータス更新で応答することができる。例えば、第２のデバイス２００ｂのモニタ７１０ｂは、第２のデバイスが、データパケットを解析および処理し、セッション状態を維持するように動作する、またはそれが可能であるかどうかを判定することができる。モニタ７１０ｂは、システムコンポーネントをチェックし、それらがセッション状態を維持するように動作する、またはそのように適切に構成されているかどうかを確認する、診断ルーチンまたは試験ルーチンを開始または実行することができる。モニタ７１０ｂはさらに、第１のデバイス２００ａがオフラインになる場合、第２のデバイス２００ｂがクライアントとセッションを再開し得るかどうかを判定することができる。例えば、モニタ７１０ｂは、第２のデバイス２００ｂの１つまたはそれを上回るハードウェアまたはソフトウェアコンポーネントが、機能し、所定の基準、閾値、またはステータスチェックを満たすことを判定することができる。したがって、モニタ７１０ｂは、第２のデバイス２００ｂが準備完了状態にあることを判定し、準備完了状態のインジケーションを第１のデバイス２００ａに伝送することができる。第１のデバイス２００ａは（例えば、モニタ７１０ａを介して）、インジケーションを受信し、第２のデバイス２００ｂが準備完了状態にあることを検出することができる。
【０２５９】
いくつかの実施形態では、第１のデバイス２００ａは、応答時間に基づくハンドシェイクルーチンを行う、または状態情報を記憶する構成ファイルを使用することによって、第２のデバイス２００ｂが準備完了状態にあることを検出することができる。例えば、アプライアンスペア７４０は、デバイスが、準備完了状態または非準備完了、すなわち、準備ができていない状態にあるかどうかを示す、値を記憶するフィールドを含む、データリポジトリ内の構成ファイルを含む、それにアクセスする、それを読み出す、またはそれを維持することができる。準備完了状態または非準備完了状態のインジケーションは、デバイスが準備完了状態にあるかまたは非準備完了状態にあるかを示し得る、他の値、用語、文字、シンボル、ストリング、またはバイナリインジケータを含むことができる。
【０２６０】
第２のデバイス２００ｂが準備完了状態にあるかまたは非準備完了状態にあるかの判定に応じて、モニタ７１０ａは、クライアント１０２とのセッションのセッション状態をマーキングすることができる。モニタ７１０は、セッション状態を、例えば、更新状態またはダウン状態を含む、１つまたはそれを上回るインジケータを用いてマーキングすることができる。更新状態は、第１のデバイスがクライアントから受信されたデータパケットに対応するデータを第２のデバイス２００ｂに自動転送または中継する、状態を指し得る。データパケットの中継は、受信されたデータパケットの情報の一部または全部の再伝送を指し得る。例えば、第１のデバイス２００ａは、クライアントデバイスから受信されたアプリケーションプロトコルデータを第２のデバイスに伝送することによって、アプリケーションプロトコルデータを第２のデバイス２００ｂに中継することができる。第１のデバイス２００ａは、アプリケーションプロトコルデータをキャッシュし、アプリケーションプロトコルデータのキャッシュされたバージョンを送信する、または別様にアプリケーションデータを第２のデバイス２００ｂに自動転送または中継することができる。ダウン状態は、第１のデバイス２００ａがクライアントから受信されたデータパケットに対応するデータを第２のデバイス２００ｂに自動転送または中継しない、状態を指し得る。
【０２６１】
第１のデバイス２００ａ（アクティブモードにおける）のモニタ７１０ａは、第２のデバイス２００ｂ（スタンバイモードにおける）が準備完了状態にあるかまたは非準備完了状態にあるかの判定または検出に応答して、セッション状態を更新状態またはダウン状態にマーキングすることができる。第２のデバイス２００ｂが、準備完了状態にある場合、モニタ７１０ａは、セッション状態を更新状態にマーキングする。第２のデバイス２００ｂが、非準備完了、すなわち、準備ができていない状態にある場合、モニタ７１０ａは、セッション状態をダウン状態にマーキングする。
【０２６２】
モニタ７１０ａは、データリポジトリ７２０ａ内に記憶されるパラメータの値を設定することによって、セッション状態を更新状態またはダウン状態にマーキングすることができる。例えば、セッションデータ構造７２５ａは、セッションが更新状態にあるかまたはダウン状態にあるかを示す値を記憶する、パラメータフィールドを含むことができる。ある場合には、データリポジトリ７２０は、セッションが更新状態にあるかまたはダウン状態にあるかを示す値を記憶する、パラメータデータ構造７３５ａを含むことができる。本セッション状態は、クライアント１０２との単一セッションに適用される、またはそれと関連付けられることができる。ある場合には、本セッション状態は、第１のデバイス２００ａによってアクティブに管理またはサービス提供される１つまたはそれを上回るセッションに適用される、またはそれと関連付けられることができる。例えば、モニタ７１０ａは、第２のデバイス２００ｂがスタンバイモードおよび準備完了状態にあることを判定することができる。モニタ７１０ａは、次いで、第２のデバイス２００ｂが準備完了状態にあることに応答して、セッション状態を更新状態に設定することを判定することができる。モニタ７１０ａは、セッション状態をパラメータデータ構造７３５ａ内の値として記憶することができる。モニタ７１０ａは、パラメータデータ構造７３５ａ内に記憶される値を第１のデバイス２００ａによってサービス提供される１つまたはそれを上回るセッションに使用または適用することができる。例えば、値が、セッション状態が更新状態にあることを示す場合、第１のデバイス２００ａは、１つまたはそれを上回るセッションに関する１つまたはそれを上回るクライアントデバイスから受信されたパケットに対応するデータを第２のデバイス２００ｂに自動転送または中継し、第２のデバイス２００ａに、セッションの状態を第２のデバイス２００ｂのメモリ内に維持させる、それを有効にさせる、またはそれを可能にさせることができる。
【０２６３】
第１のデバイス２００ａは、クライアント１０２ａ（例えば、クライアントエージェント１２０ａを介して）から、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含む、セッションのパケットを受信することができる。アプリケーションプロトコルデータは、状態ベースのプロトコルまたはステートフルプロトコルのデータを指し得る。ステートフルプロトコルは、プロトコルが、リソースにアクセスするように機能する、またはリソースへのアクセスを提供するために、内部状態がサーバまたは仲介デバイス上に維持される、プロトコルを指し得る。セッションの状態は、デバイス、アプリケーション、またはセッションがアクセスを有する、パケットの受信および処理の所与の瞬間において、またはそれに続いて記憶された情報を指し得る。セッションの状態情報または状態またはアプリケーションの状態は、データリポジトリ７２０ａ−ｂ内のセッションデータ構造７２５ａ−ｂとしてメモリ内に記憶されることができる。例えば、セッションの状態は、アプリケーションの状態、デスクトップセッションの状態、または通信チャネルの状態を指し得る。例えば、所与の時間におけるアプリケーションの出力は、アプリケーションおよびアプリケーションの状態への現在の入力によって判定されることができる。
【０２６４】
セッションの状態は、構文解析、ファイアウォール、通信プロトコル、および暗号化プログラム等のデータのストリームに順次（または連続して）作用する、コンピュータプログラムを指し得る。シリアルプログラムは、一度に１回、連続して、着信データ文字またはパケットに作用することができる。これらのプログラムのうちのいくつかでは、受信された前のデータ文字またはパケットについての情報は、変数としてメモリ内（例えば、セッションデータ構造７２５ａ−ｂ内）に記憶され、パケットエンジン７１５ａ−ｂによって、現在の文字またはパケットの処理に影響を及ぼすために使用される。したがって、ステートフルプロトコルでは、前の処理サイクルから持ち越されるデータは、状態を示すことができる、または状態であることができる。
【０２６５】
ステートフルプロトコルを利用するとき、第１の仲介デバイスまたは第２の仲介デバイス（または両方）は、記憶装置またはメモリ（例えば、データリポジトリ７２０ａ−ｂ内のセッションデータ７２５ａ−ｂ）を配分し、進行中の変換をハンドリングする、またはクライアントが中間トランザクションにおいて障害を起こす場合、現在の状態を消去することができる。例えば、ＦＴＰサーバは、ステートフルプロトコルを利用して、クライアントとの双方向セッションを実施することができる。セッションの間、クライアントは、認証され、クライアントの状態の一部としてサーバまたは仲介デバイス上に記憶され得る、種々の変数（例えば、作業ディレクトリまたは転送モード）を設定するための手段が提供される。
【０２６６】
ある場合には、仲介デバイス２００ａ−ｂは、異なるプロトコル層間におけるステートフルおよびステートレスプロトコル間の相互作用を管理、確立、または処理することができる。例えば、ＨＴＴＰは、ＴＣＰの上に層化されるステートレスプロトコル、ＩＰの上に層化されるステートフルプロトコル、ボーダゲートウェイプロトコル（「ＢＧＰ」）を採用する、ネットワーク上でルーティングされる、別のステートレスプロトコル、ネットワークを経由してＩＰパケットをダイレクトするための別のステートフルプロトコルの実施例である。
【０２６７】
いくつかの実施形態では、第１のデバイス２００ａは、ステートフルプロトコルを経由して、パケットをクライアント１０２から受信することができる。アプリケーションプロトコルは、ＴＣＰ／ＩＰに基づく、ステートフルプロトコルであることができる。ある場合には、アプリケーションプロトコルは、アプリケーションまたはリソースへのアクセスを効率的に提供するための機能性を提供する、１つまたはそれを上回るプロトコルまたは技法に基づくことができる。例えば、アプリケーションプロトコルは、インテリジェントリダイレクション、適応圧縮、またはデータ重複排除等の機能性または技法を含むことができる。インテリジェントリダイレクションは、例えば、クライアントデバイスのスクリーンアクティビティの検査、アプリケーションコマンドの検査、アクセスされているサーバ１０６の検査、ネットワーク１０４またはネットワーク１０４’の検査能力、またはアプリケーションまたはデスクトップアクティビティのレンダリングの方法または場所を判定するためのサーバ１０６能力の検査を含むことができる。例えば、クライアントリダイレクションは、タスクをサーバからオフロードし、それらをクライアント上に設置することができる。デバイスおよび周辺機器ダイレクションを用いることで、ウェブキャメラ、プリンタ、およびスキャナは、ローカルに終端され、クライアントデバイスがネイティブＵＳＢ速度においてこれらのデバイスと相互作用することを可能にすることができる。
【０２６８】
いくつかの実施形態では、アプリケーションプロトコルは、適応圧縮を有効にする、または提供するように構成されることができる。適応圧縮は、異なるネットワーク条件の間に使用されるコーデックを設定または構成することができる。適応圧縮は、ＣＰＵまたはＧＰＵリソースの利用を判定または最適化することができる。いくつかの実施形態では、アプリケーションプロトコルは、ネットワークトラフィックの重複排除を提供するように構成されることができる。アプリケーションプロトコルは、マルチキャストおよびキャッシュ技法を通して、ネットワークトラフィックの重複排除を促進することができる。例えば、マルチメディアストリームのマルチキャストは、１対多の通信を介したソースサーバ１０６から複数のクライアント１０２への単一伝送の配信を含むことができる。アプリケーションプロトコルは、キャッシュを使用して、例えば、ビットマップグラフィック、ファイル、プリントジョブ、およびストリーミングされたメディアを含む、一般にアクセスされるデータを重複排除することができる。いくつかの実施形態では、アプリケーションプロトコルは、高ネットワーク待ち時間およびパケット損失を感知し、それに応答することによって、ＴＣＰベースのトラフィックのフローを加速するように構成される、ステートフルプロトコルである、またはそれを含むことができる。
【０２６９】
いくつかの実施形態では、第１のデバイス２００ａは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを備える、セッションのパケットを受信する。アプリケーションプロトコルデータは、セッションの状態を示す、変数または他のデータ等の情報を指すことができ、セッションの状態を維持または更新するために使用されることができる。アプリケーションプロトコルデータは、パケットに関するシーケンス識別子を含むことができる。アプリケーションプロトコルデータは、クライアントデバイス１０２から受信されたパケットによって搬送されるデータを含むことができる。ある場合には、アプリケーションプロトコルデータは、セッションの状態を更新、変更、または改変する、データを含むことができる。例えば、アプリケーションプロトコルデータは、ＦＴＰプロトコルのために確立されるディレクトリ、パケット損失または待ち時間等の現在のネットワークセッションに関するネットワーク性能メトリック、クライアントデバイスと結合される周辺デバイスの状態、リソースにアクセスする、またはそれと相互作用するための要求、多因子認証プロセスにおける認証情報または状態情報等を含むことができる。アプリケーションセッションメタデータは、例えば、セッションを識別し得る情報、セッションのプロファイル、使用されているプロトコルのタイプ、リソースのタイプ、クライアントデバイス１０２の識別子、クライアントデバイス１０２のＩＰアドレス、ソースまたは宛先アドレス、サーバＩＰアドレス、アクセスされているリソースの識別子、場所、クライアントデバイスのタイプ（例えば、モバイルデバイス、スマートフォン、ラップトップ、デスクトップ、またはタブレット）、ネットワークのタイプ（例えば、携帯電話ネットワーク、３Ｇネットワーク、４Ｇネットワーク、ＬＴＥネットワーク、ＷＩＦＩネットワーク、またはＥｔｈｅｒｎｅｔ（登録商標））、セッションの開始に対応するタイムスタンプ、またはアプリケーションセッションについての他の情報を含むことができる。アプリケーションセッションメタデータは、アプリケーションプロトコルデータを含む、またはそれに基づくことができる。ある場合には、アプリケーションデータは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを指し得る。
【０２７０】
いくつかの実施形態では、第１のデバイス２００ａ（例えば、パケットエンジン７１５ａを介して）は、パケット毎に、アプリケーションプロトコルデータを解析および処理する。第１のデバイス２００ａは、パケット毎に、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを解析および処理することができる。第１のデバイス２００ａは、アプリケーションプロトコルまたはアプリケーションセッションデータを解析および処理し、セッションの状態を第１のデバイス２００ａのメモリ内に維持し、クライアント１０２にアクティブにサービス提供することができる。第１のデバイス２００ａが、パケットを受信すると、第１のデバイスはさらに、セッション状態が更新状態またはダウン状態であるかどうかを判定することができる。例えば、第１のデバイス２００ａ（または第２のデバイス２００ｂ）は、セッション状態を更新状態またはダウン状態に事前にマーキングしている場合がある。第１のデバイス２００ａは、次いで、第２のデバイス２００ｂが準備完了状態にあることを判定することができる。セッション状態が更新状態にあって、第２のデバイス２００ｂが準備完了状態にあることの判定に応答して、第１のデバイス２００ａは、アプリケーションプロトコルデータまたはアプリケーションセッションメタデータ（または両方）を第２のデバイス２００ｂに自動転送または中継することができる。第２のデバイス２００ｂは、アプリケーションプロトコルデータまたはアプリケーションセッションデータまたは両方の受信に応じて、第２のデバイス上で、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することができる。したがって、第１のデバイス２００ａは、第１のデバイス２００ａが、セッションの間に、クライアント１０２にアクティブにサービス提供する間、第２のデバイスのメモリ２００ｂ内のセッションの状態が第１のデバイス２００ａのメモリ内のセッションの状態に合致するように、第２のデバイス２００ｂが、セッションの状態を第２のデバイスのメモリ２００ｂ内に維持することを有効にする、またはそのようにさせることができる。
【０２７１】
クライアントおよび第１のデバイス２００ａを介して確立されるセッションの間、第１のデバイス２００ａが、故障する、オーバーロードとなる、サービスの妨害攻撃またはウイルスを被る、障害を起こす、保守または修理を受ける、電力を喪失する、または別様にソフトウェアまたはハードウェア障害に起因してオフラインまたは無応答になり得る。第１のデバイス２００ａがオフラインになると、第１のデバイスによって、またはそれと確立された接続は、喪失またはリセットされ得る。例えば、第１のデバイス２００ａによってクライアント１０２と確立されたＴＣＰ接続は、リセットされ得る。第１のデバイス２００ａがオフラインになる場合、第２のデバイス２００ｂは、第１のデバイス２００ａがオフラインになることに先立って、第１のデバイス２００ａによって維持されるセッションの現在の状態を用いてセッションを自動的に再開することができる。例えば、第１のデバイス２００ａは、最初に、一次デバイス２００ａとして構成されてもよく、第２のデバイス２００ｂは、二次デバイス２００ｂとして構成されることができる。第１のデバイス２００ａがオフラインになると、第２のデバイス２００ｂは、新しい一次デバイスとなり、クライアント１０２と新しい接続を確立し、セッションを再開することができる。
【０２７２】
いくつかの実施形態では、第２のデバイス２００ｂのモニタ７１０ｂは、第１のデバイス２００ａをポーリングし、第１のデバイス２００ａのステータスを判定することができる。モニタ７１０ｂは、ある時間間隔に基づいて、またはイベント、条件、またはトリガに応答して、第１のデバイス２００ａをポーリングすることができる。いくつかの実施形態では、モニタ７１０ｂは、第１のデバイス２００ａがオフラインになると、モニタ７１０ｂが第１のデバイスとの接続が喪失またはリセットされることを検出し得るように、第１のデバイス２００ａとのアクティブ接続を維持することができる。したがって、いくつかの実施形態では、アプライアンスペア７４０は、アクティブ−スタンバイペアが、一次デバイスが、パケットを受信し、クライアントにアクティブにサービス提供し、一次デバイスが、パケットを二次デバイスに中継し、第２のデバイス上でセッションの状態を維持し、二次デバイスが古い一次デバイスがオフラインであることを判定することに応答して、二次デバイスが、自動的に、新しい一次デバイスになるように構成され得るため、インターフェース７０５を使用せずに、仲介デバイス２００ａ−ｂのアクティブ−スタンバイペアを使用して、セッションを再開することができる。
【０２７３】
いくつかの実施形態では、インターフェース７０５は、第１のデバイス２００ａおよび第２のデバイス２００ｂとのアクティブ接続を維持し、接続の喪失に基づいて、デバイスがオフラインになるときを判定することができる。インターフェース７０５は、第１のデバイス２００ａがオフラインであることの検出、判定、または識別に応答して、信号を第２のデバイス２００ｂに伝送し、第１のデバイス２００ａがオフラインであることを示すことができる。いくつかの実施形態では、インターフェース７０５は、信号を第２のデバイス２００ｂに伝送し、第２のデバイス２００ｂに、新しい一次デバイス２００ｂになるように命令する。信号はさらに、第２のデバイス２００ｂに、新しい一次デバイス２００ｂである、第２のデバイス２００ｂが、クライアント１０２にアクティブにサービス提供する、アクティブモードに入るように命令することができる。
【０２７４】
例えば、いくつかの実施形態では、第１のデバイス２００ａがオフラインになり、第１のデバイス２００ａとクライアント１０２との間の接続が喪失されるとき、クライアントエージェント１２０ａは、セッション再接続を開始することができる。インターフェース７０５は、クライアントエージェント１２０ａによって開始されるセッション再接続要求を受信し、第２のデバイス２００ｂが新しい一次デバイス２００ｂであるため、セッション再接続を第２のデバイス２００ｂに自動転送することができる。第２のデバイス２００ｂは、第２のデバイス２００ｂのセッションデータ構造７２５ｂとしてメモリ内に維持される状態情報を使用して、クライアント１０２とのセッションをシームレスに再開することができる。第２のデバイス２００ｂは、第１のデバイス２００ａがオフラインになる直前まで、現在の状態情報を維持するため、第２のデバイス２００ｂは、クライアントデバイス１０２のユーザがセッションに再びログインする必要なく、クライアント１０２とのセッションを再開することができる。したがって、クライアント１０２のユーザは、クライアントエージェント１２０ａがセッション再接続を自動的に開始することができ、第２のデバイス２００ｂが第１のデバイス２００ａ上に以前に維持されていた状態と同一状態でセッションをシームレスに再開することができるため、第１のデバイス２００ａがオフラインになったことに気付かない場合がある。セッションをシームレスに再開することは、第１のデバイスがオフラインになることに先立った第１のデバイス２００ａ上のセッションの状態に合致する、同一状態を伴ってセッションを再開することを指し得る。いくつかの実施形態では、セッションをシームレスに再開することは、ユーザにセッションに再ログインすることを要求せずに、セッションを再開することを指し得る。いくつかの実施形態では、セッションをシームレスに再開することは、セッション再接続要求を受信せずに、セッションを再開することを指し得る。
【０２７５】
いくつかの実施形態では、セッションをシームレスに再開することは、第２のデバイス２００ｂが、第１のデバイス２００ａによって受信された最後のパケットを処理するが、第１のデバイスパケットの処理の間に障害を起こすことに起因して、第１のデバイス２００ａによって（例えば、パケットエンジン７１５ａによって）完全に解析および処理されていないことを指し得る。アプリケーションプロトコルデータを完全に解析および処理することは、アプリケーションプロトコルデータに基づいて、状態情報を更新することと、アプリケーションプロトコルデータを、要求されるリソースまたはアプリケーションを提供する、対応するサーバ１０６に自動転送することとを含むことができる。ある場合には、第１のデバイス２００ａは、パケットを解析または処理することに先立って、パケットを第２のデバイス２００ｂに中継することができる。ある場合には、第１のデバイス２００ａは（例えば、モニタ７１０ａを介して）、パケットエンジン７１５ａがパケットを並行して解析および処理する間、パケットを第２のデバイス２００ｂに中継することができる。したがって、パケットエンジン７１５ａは、モニタ７１０ａがパケットを第２のデバイス２００ｂに中継し、第２のデバイス２００ｂに、第２のデバイス２００ｂのメモリ内のセッション状態を維持させ、クライアントにアクティブにサービス提供している第１のデバイスのメモリ内のセッションのセッション状態に合致させることと並行して、パケットを処理することができる。
【０２７６】
いくつかの実施形態では、モニタ７１０ａは、第２のデバイスが準備完了状態にないことを判定することができる。モニタ７１０ａは、セッションのパラメータを第２の値に設定し、第１のデバイス２００ａに、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送しないことを示すことができる。例えば、モニタ７１０ａは、パラメータの値をダウン状態に設定し、セッションをダウン状態にマーキングすることができる。したがって、パラメータの第２の値を介して、セッションをダウン状態にマーキングすることに応答して、第１のデバイス７１０ａは、クライアント１０２から受信されたセッションの第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しなくてもよい。モニタ７１０ａは、第２のデバイス２００ｂが非準備完了状態にあることに起因して、セッション状態がダウン状態にマーキングされたため、データリポジトリ７２０ａ内（例えば、パラメータデータ構造７３５ａ内）に、１つまたはそれを上回るパケットが第１のデバイス２００ａによって解析または処理されたが、第２のデバイス２００ｂに自動転送または中継されないことのインジケーションを記憶することができる。
【０２７７】
第２のデバイス２００ａが非準備完了状態にあることの判定に応答して、セッションをダウン状態にマーキングしたことに続いて、モニタ７１０ａは、第２のデバイスが現在準備完了状態にあることを判定または検出することができる。例えば、第２のデバイス２００ａは、保守または修理を受けた、または別様にオンラインになり得る（例えば、リセット後）。モニタ７１０ａは、パラメータデータ構造７３５ａにアクセスし、パラメータの値を更新、設定、修正、または変更し、セッションが更新状態にあることを示すことができる。モニタ７１０ａはさらに、パラメータデータ構造７３５ａから、１つまたはそれを上回るパケットが第２のデバイス２００ｂに自動転送または中継されなかったことを判定することができる。モニタ７１０ａは、次いで、第２のデバイス２００ｂ上のセッションの状態が最新ではないことを判定することができる。モニタ７１０ａは、次いで、状態情報を第２のデバイス２００ｂにプッシュ配信、自動転送、伝送、または別様に提供することを判定し、セッションの状態が第１のデバイス２００ａのメモリ内のセッションの状態に合致するように、第２のデバイス２００ｂが第２のデバイス２００ｂのメモリ内に記憶されるセッションの状態を更新することを可能にすることができる。例えば、モニタ７１０ａは、完全なセッション状態情報を第２のデバイス２００ｂにプッシュ配信または提供することができる。完全なセッション状態は、第２のデバイスに自動転送されない１つまたはそれを上回るパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。第２のデバイスは、第２のデバイスのメモリ内に記憶される状態を完全なセッション状態で更新し、第１のデバイス上に維持される現在のセッション状態に合致させることができる。いくつかの実施形態では、モニタ７１０ａは、第２のデバイス２００ｂに中継されなかったデータを判定または識別し、対応するデータを第２のデバイス２００ｂにプッシュ配信することができる。いくつかの実施形態では、第１のデバイス２００ａは、第１のデバイスと第２のデバイスとの間のデルタ状態を判定し、デルタ状態情報を第２のデバイス２００ｂにプッシュ配信する。いくつかの実施形態では、第１のデバイス２００ａは、第２のデバイス２００ｂ上に記憶される最後の状態情報を識別するための要求を第２のデバイス２００ｂに送信する。
【０２７８】
ここで図７Ｂを参照すると、セッションを維持する方法の実施形態のブロック図が、示される。方法７５０は、図１−７Ａに説明される１つまたはそれを上回るシステムまたはコンポーネントを使用して行われることができる。簡潔にすると、いくつかの実施形態では、方法７５０は、複数のクライアントおよび複数のサーバを仲介し、ステップ７５２において、アプリケーションデータを含むセッションのパケットを受信する、第１のデバイスを含む。ステップ７５４では、第１のデバイスは、第２のデバイスが準備完了状態にあることを判定する。ステップ７５６では、第１のデバイスは、セッションのセッション状態を更新状態にマーキングする。ステップ７５８では、第２のデバイスが準備完了状態にあって、セッション状態が更新状態にあることの判定に応答して、第１のデバイスは、アプリケーションデータを第２のデバイスに自動転送し、第２のデバイスに、第２のデバイス上で、第１のデバイス上に維持されるセッションの同一状態を維持させる。
【０２７９】
依然として、図７Ｂを参照すると、さらなる詳細では、複数のクライアントおよび複数のサーバを仲介する、第１のデバイスは、ステップ７５２において、アプリケーションデータを含むセッションのパケットを受信する。第１のデバイスは、第１のデバイスと、第２のデバイスとを含む、仲介デバイスのアクティブ−スタンバイペア内の第１のデバイスであることができる。第１のデバイスは、クライアント要求にアクティブにサービス提供する、アクティブデバイスであることができる。第２のデバイスは、スタンバイデバイスであることができる。したがって、第１のデバイスは、クライアントにアクティブにサービス提供する、一次デバイスであってもよく、第２のデバイスは、スタンバイモードにおける二次デバイスであることができる。第１のデバイスは、セッションを介してアクセスされるアプリケーションの状態を維持するために使用される、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含む、セッションのパケットを受信することができる。
【０２８０】
例えば、第１のデバイスは、クライアントデバイスまたはクライアントデバイスのエージェントから、アプリケーションサーバによって提供されるアプリケーションを起動するためのインジケーションを受信することができる。第１のデバイスは、クライアントデバイスからのインジケーションに応答して、アプリケーションを実行するように構成される、アプリケーションサーバへの接続を開始することができる。例えば、アプリケーションサーバは、アプリケーションとともに、かつ第１の仲介デバイスを介して、アプリケーションを実行し、クライアントデバイスに配信するための好適な算出およびメモリリソースを有するように構成されてもよい。第１のデバイスは、ログ情報をクライアントから受信し、ログイン情報をクライアントから受信することに応答して、ログイン情報を使用して、クライアントデバイスと複数のサーバのサーバとの間のセッションを確立することができる。例えば、第１のデバイスは、ユーザ名、パスワード、バイオメトリック情報、指紋、セキュアコード、動的コード、テキストベースのコード、音声、または多因子認証等の証明書を使用して、認証または承認プロセスを促進する、または行うように構成されることができる。したがって、第１のデバイスは、クライアントとサーバとの間のセッションを確立し、サーバによって実行されるアプリケーションへのアクセスを提供することができる。
【０２８１】
ステップ７５４では、第１のデバイスは、第２のデバイスが準備完了状態であって、セッションのセッション状態が更新状態にあることを判定する。第１のデバイスは、クライアントおよび複数のサーバを仲介する第２のデバイスが準備完了状態にあって、セッションのセッション状態が更新状態であることを判定することができる。例えば、第１のデバイスは、第２のデバイスをポーリングし、第２のデバイスのデバイス状態を判定することができる。第１のデバイスは、第２のデバイスをポーリングし、第２のデバイスが準備完了状態にあるかまたは非準備完了状態にあるかを判定することができる。準備完了状態は、第２のデバイスが準備完了状態であって、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを解析し、第２のデバイスのメモリ内に、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することを示すことができる。
【０２８２】
いくつかの実施形態では、第２のデバイスは、準備完了状態または非準備完了状態等の第２のデバイスのステータスまたは状態を示す、ステータスインジケータを提示または提供することができる。いくつかの実施形態では、第１のデバイスは、第２のデバイスとのアクティブ接続を維持し、接続がアクティブおよびオンラインである限り、第２のデバイスが準備完了状態にあることを判定することができる。いくつかの実施形態では、第１のデバイスは、接続と関連付けられた性能特性を分析し、第２のデバイスが準備完了状態にあるかどうかを判定することができる。例えば、第１のデバイスは、ハンドシェイクプロトコルを使用して、第２のデバイスとの接続と関連付けられた喪失パケット数、待ち時間、または応答時間を識別することができる。第２のデバイスの応答時間が、閾値（例えば、１秒、２秒、５秒、１０秒、０．５秒、０．１秒、または１分）を下回る場合、第１のデバイスは、第２のデバイスが準備完了状態にないことを判定することができる。第２のデバイスによってドロップされたパケットの数が、閾値（例えば、５、１０、２５、５０、１００、３、または２）を上回る場合、第１のデバイスは、第２のデバイスが準備完了状態にないことを判定することができる。
【０２８３】
ステップ７５６では、第１のデバイスは、セッションのセッション状態を更新状態にマーキングする。例えば、第１のデバイスが第２のデバイスが準備完了状態にあることを判定することに応答して、第１のデバイスは、セッションのセッション状態を更新状態にマーキングすることができる。更新状態は、第１のデバイスに、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送し、第１のデバイスが、クライアントにアクティブにサービス提供する間、第２のデバイスが、セッションまたはアプリケーションの状態を第２のデバイスのメモリ内に維持することを有効にする、それを行わせる、またはそれを可能にすることを示す、または命令することができる。例えば、第１のデバイスは、セッションのパラメータを第１の値に設定し、第２のデバイスが準備完了状態にあることの判定に応答して、第１のデバイスにアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することを示すことができる。第１の値は、例えば、更新状態を含むことができる。
【０２８４】
ステップ７５８では、第２のデバイスが準備完了状態にあって、セッション状態が更新状態にあることの判定に応答して、第１のデバイスは、アプリケーションデータを第２のデバイスに自動転送し、第２のデバイスに、第２のデバイス上で、第１のデバイス上に維持されるセッションの同一状態を維持させる。第１のデバイスは、第２のデバイスが準備完了状態にあって、セッションが更新状態にあることの判定に応答して、パケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送することができる。第１のデバイスは、パラメータの第１の値に応答して、データを自動転送することができる。第２のデバイスは、本アプリケータプロトコルデータおよびアプリケーションセッションメタデータを使用して、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの同一状態を維持することができる。
【０２８５】
例えば、第１のデバイスは、パケットを解析し、セッションの少なくとも一部の間、クライアントにアクティブにサービス提供する一方、第２のデバイスは、第１のデバイスが、クライアントにアクティブにサービス提供する間、第２のデバイスのメモリ内に、第１のデバイスによって提供されるセッションを介してアクセスされるアプリケーションの状態を維持する。本構成では、第２のデバイスは、スタンバイモードで構成されることができ、第１のデバイスは、アクティブモードで構成されることができる。
【０２８６】
いくつかの実施形態では、第１のデバイスは、第１のデバイスが、クライアントにアクティブにサービス提供することができない、またはしない、オフラインモードに入り得る。第１のデバイスは、クライアントに、アプリケーションへのアクセスを提供し得ない。第１のデバイスが、オフラインモードに入ると、第１のデバイスは、例えば、クライアントデバイスとの接続を含む、１つまたはそれを上回る接続をリセット、喪失、またはそこから接続解除し得る。第１のデバイスがオフラインモードに入ることに応答して、第２のデバイスのモードは、スタンバイからアクティブに変化することができ、第２のデバイスは、新しい一次デバイスになることができる。新しい一次デバイス（または第２のデバイス）は、第２のデバイス上でセッションを再開することができる。例えば、第２のデバイス（または新しい一次デバイス）は、第２のデバイスのメモリ内のセッションデータ構造から、セッションまたはアプリケーションの状態を読み出し、セッションの現在の状態を使用して、クライアントデバイスから受信されたパケットを処理することができる。第２のデバイスのメモリから読み出されるセッションの状態は、第１のデバイスがオフラインモードに入ることに先立った第１のデバイスのメモリ内のセッションの状態に合致することができる。
【０２８７】
いくつかの実施形態では、クライアントデバイスによって実行されるクライアントエージェントは、クライアントデバイスと第１のデバイスとの間の第１の接続が終端または終了したことを判定する。クライアントエージェントが第１のデバイスから接続解除されたことの判定に応答して、クライアントエージェントは、セッション再接続プロシージャを開始することができる。クライアントエージェントは、セッションに再接続または再確立するための要求を伝送することができる。第１のデバイスは、オフラインであって、もはや一次デバイスではないため、新しい一次デバイス（または第２のデバイス）は、セッション再接続要求を受信し、第２の接続を確立し、第２のデバイスのメモリ内に維持される最新状態情報を使用して、セッションを再確立することができる。いくつかの実施形態では、第２のデバイスは、第２のデバイスが現在の状態情報を第２のデバイスのメモリから読み出し得るため、第２のデバイスがログイン情報をクライアントから受信することなく、セッションを再開することができる。状態情報を第２のデバイスのメモリ内に記憶および維持することによって、第２のデバイスは、シームレスに、自動的に、かつ効率的に、セッションを再開することができる。
【０２８８】
いくつかの実施形態では、第１のデバイスは、セッションの間のある時点で、第２のデバイスがもはや準備完了状態ではないことを判定することができる。第１のデバイスは、次いで、セッションのパラメータをダウン状態等の第２の値に設定することによって、セッションのマーキングを更新することができる。第２の値またはダウン状態は、第１のデバイスが、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを第２のデバイスに自動転送しないことを示すことができる。セッションがダウン状態にマーキングされる限り、第１のデバイスは、クライアントから受信されたセッションの第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定することができる。
【０２８９】
セッションの間、セッションをダウン状態にマーキングし、第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを自動転送しないことを判定することに続いて、第１のデバイスは、第２のデバイスが準備完了状態に戻ったことを検出することができる。例えば、第２のデバイスは、信号またはインジケーションを第１のデバイスに伝送し、第２のデバイスが準備完了状態に戻ったことを示すことができる。第２のデバイスは、準備完了状態に戻ったことに応答して、信号を伝送することができる。ある場合には、第１のデバイスは、ある時間間隔に基づいて、第２のデバイスをポーリングまたは監視することができる。第２のデバイスをポーリングまたは監視することによって、第１のデバイスは、第２のデバイスが準備完了状態に戻ったことを検出することができる。デバイスをポーリングまたは監視することは、ピングまたはクエリを送信し、接続があるかどうかを判定する、または接続のステータスまたはデバイスのステータスを判定することを含むことができる。
【０２９０】
第２のデバイスが準備完了状態にあることの判定に応じて、第１のデバイスは、パラメータを第１の値に戻し、セッションが更新状態に戻ったことを示すことができる。セッションが更新状態にあることに応答して、第１のデバイスは、完全なセッション状態を第２のデバイスに提供することができる。完全なセッション状態は、第２のデバイスに自動転送されない第２のパケットのアプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。第１のデバイスは、完全なセッション状態を第２のデバイスに提供することができ、第２のデバイスに、第２のデバイスのメモリ内に記憶される状態を完全なセッション状態で更新し、第１のデバイス上に維持される現在のセッション状態に合致させることができる。
【０２９１】
いくつかの実施形態では、セッション状態は、第２のデバイスのデバイス状態に基づいて、更新状態またはダウン状態に設定されることができる。例えば、第２のデバイスが準備完了状態にある場合、セッション状態は、更新状態に設定されることができる。いくつかの実施形態では、セッション状態は、二次デバイスのデバイス状態から独立して、更新状態またはダウン状態に設定されることができる。例えば、セッション状態は、セッション、クライアントデバイス、アプリケーションプロトコル、または第１のデバイスのアドミニストレータによって設定される構成と関連付けられた構成パラメータに応答して、更新状態またはダウン状態に設定されることができる。例えば、セッションのための所定の構成、セッションのタイプ、ネットワークのタイプ、コンピューティングデバイスのタイプ、またはアプリケーションのタイプは、更新状態またはダウン状態に対応することができる。例えば、エンティティは、セッションをシームレスに再開する追加機能性に起因して、セッションが更新状態にある間、より高い料金を請求してもよい。したがって、顧客が、より高いレベルのサービスを所望しない場合、第１のデバイスのアドミニストレータは、第２のデバイスが準備完了状態にある場合でも、第２のデバイスもまたセッション状態を維持しないように、セッション状態をダウン状態に構成することができる。したがって、第１のデバイスは、セッション状態が更新状態にあって、かつ第２のデバイスのデバイス状態が準備完了状態にある両方の場合、アプリケーションプロトコルデータおよびアプリケーションセッションデータを第２のデバイスに自動転送することができる。
【０２９２】
ここで図８Ａを参照すると、仲介デバイス（または第１の仲介デバイスおよび第２の仲介デバイスを含む、アプライアンスペア）を介してセッションを維持する実施形態のフロー図８００が、示される。プロセス８００は、図１−７Ａに描写される１つまたはそれを上回るコンポーネントまたはシステムによって行われることができる。ステップ８０５では、仲介デバイスのアクティブ−スタンバイペアの一次デバイスは、クライアントデバイスから、ステートフルアプリケーションプロトコル接続等の新しいプロトコル接続のための要求を受信する。８１０では、一次デバイスは、仲介デバイスのアクティブ−スタンバイペアの二次デバイスが準備完了状態にあるかどうかを判定することができる。二次デバイスが「はい」によって示される準備完了状態にある場合８１５、一次デバイスは、ステップ８２０において、セッションを更新状態にマーキングすることができる。一次デバイスはさらに、クライアントから受信されたアプリケーションデータを二次デバイスに自動転送することができる。アプリケーションデータは、アプリケーションプロトコルデータおよびアプリケーションセッションメタデータを含むことができる。一次デバイスはさらに、アプリケーションプロトコルデータを処理し、クライアントデバイスから受信された要求に対応するサーバに自動転送することができる。しかしながら、一次デバイスが、二次デバイスが「いいえ」によって示される準備完了状態にないことを判定する場合８２５、一次デバイスは、セッションをダウン状態にマーキングすることができる。一次デバイスは、次いで、アプリケーションプロトコルデータを処理し、クライアントから受信された要求に対応するサーバに自動転送し続けることができる。
【０２９３】
ここで図８Ｂを参照すると、仲介デバイス（または第１の仲介デバイスおよび第２の仲介デバイスを含む、アプライアンスペア）を介してセッションを維持する実施形態のフロー図８０１が、示される。プロセス８０１は、図１−７Ａに描写される１つまたはそれを上回るコンポーネントまたはシステムによって行われることができる。ステップ８３５では、一次デバイスは、アプリケーションプロトコルデータを受信することができる。８４０では、一次デバイスは、セッション状態が更新状態にあるかまたはダウン状態にあるかを判定することができる。セッションが「はい」によって示される更新状態にある場合８４５、一次デバイスは、ステップ８５０において、二次デバイスが準備完了状態にあるかどうかを判定することができる。一次デバイスが、二次デバイスが「はい」によって示される準備完了状態にあることを判定する場合８５５、一次デバイスは、ステップ８６０において、アプリケーションデータ（例えば、アプリケーションプロトコルデータまたはアプリケーションセッションメタデータ）を二次デバイスに自動転送することができる。一次デバイスはさらに、プロトコルデータ８３５を処理し、ステップ８６０において、対応するサーバに自動転送することができる。
【０２９４】
一次デバイスが、二次デバイスが「いいえ」によって示される準備完了状態にないことを判定する場合８６５、一次デバイスは、ステップ８７０において、セッションをダウン状態にマーキングすることができる。一次デバイスはさらに、ステップ８７０において、プロトコルデータ８３５を処理し、対応するサーバに自動転送することができる。したがって、一次デバイスは、二次デバイスが準備完了状態にあるかどうかにかかわらず、クライアントにアクティブにサービス提供することができる。
【０２９５】
一次デバイスが、セッションが「いいえ」によって示される更新状態にないことを判定する場合８７５、一次デバイスは、ステップ８８０において、二次デバイスが準備完了状態にあるかどうかを判定することができる。一次デバイスが、二次デバイスが「はい」によって示される準備完了状態にあることを判定する場合８８５、一次デバイスは、ステップ８９０において、セッションを更新状態にマーキングすることができる。例えば、一次デバイスは、８９０において、セッションのマーキングをダウン状態から更新状態に変化させることができる。一次デバイスはさらに、ステップ８９０において、完全なセッション状態を二次デバイスにプッシュ配信することができる。二次デバイスが「はい」によって示される準備完了状態にある場合８８５、一次デバイスはまた、ステップ８９５において、アプリケーションデータを二次デバイスに自動転送することができる。一次デバイスは、一次デバイスが、ステップ８９０において、完全なセッション状態を二次デバイスにプッシュ配信した後、ステップ８９５において、アプリケーションデータを二次デバイスに自動転送することができる。例えば、一次デバイスは、ステップ８９５において、最初に、二次デバイスを最新状態にし、次いで、新しいアプリケーションプロトコルデータ８３５を自動転送し、二次デバイスがセッションの状態を二次デバイスのメモリ内に維持することを有効にすることができる。
【０２９６】
一次デバイスが、二次デバイスが「いいえ」によって示される準備完了状態にないことを判定する場合８９６、一次デバイスは、アプリケーションプロトコルデータ８３５を処理し、対応するサーバに自動転送することに進むことができる。
【０２９７】
上記に説明されるシステムは、それらのコンポーネントの任意またはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型機械上に、またはいくつかの実施形態では、分散型システム内の複数の機械上にのいずれかにおいて提供されてもよいことを理解されたい。上記に説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、または任意のそれらの組み合わせを生産するために、プログラミングおよび／またはエンジニアリング技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記に説明されるシステムおよび方法は、１つまたはそれを上回る製造品上または内で具現化される、１つまたはそれを上回るコンピュータ可読プログラムとして提供されてもよい。用語「製造品」は、本明細書で使用されるように、１つまたはそれを上回るコンピュータ可読デバイス、ファームウェア、プログラム可能論理、メモリデバイス（例えば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＳＲＡＭ等）、ハードウェア（例えば、集積回路チップ、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）等）、電子デバイス、コンピュータ可読不揮発性記憶ユニット（例えば、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、ハードディスクドライブ等）からアクセス可能であって、その中に内蔵される、コードまたは論理を包含することが意図される。製造品は、ネットワーク伝送ライン、無線伝送媒体、空間を通して伝搬する信号、無線波、赤外線信号等を介して、コンピュータ可読プログラムへのアクセスを提供する、ファイルサーバからアクセス可能であってもよい。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、プロセッサによって実行されるコンピュータ可読媒体内に内蔵されるハードウェア論理およびソフトウェアまたはプログラム可能コードを含む。一般に、コンピュータ可読プログラムは、ＬＩＳＰ、ＰＥＲＬ、Ｃ、Ｃ＋＋、Ｃ＃、ＰＲＯＬＯＧ等の任意のプログラミング言語、またはＪＡＶＡ（登録商標）等の任意のバイトコード言語において実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして１つまたはそれを上回る製造品上またはその中に記憶されてもよい。
【０２９８】
「または」の言及は、「または」を使用して説明される任意の用語が、説明される用語の単一、１つを上回る、および全てののいずれかを示し得るように、包含的なものとして解釈され得る。
【０２９９】
方法およびシステムの種々の実施形態が説明されたが、これらの実施形態は、例示的であって、説明される方法またはシステムの範囲をいかようにも限定するものではない。当業者は、説明される方法およびシステムの最広範囲から逸脱することなく、説明される方法およびシステムの形態および詳細に変更をもたらすことができる。したがって、本明細書に説明される方法およびシステムの範囲は、例示的実施形態のいずれかによって限定されるべきではなく、付随の請求項およびその均等物に従って定義されるべきである。
【図１Ａ】
2019502972.tif 000003
【図１Ｂ】
2019502972.tif 000004
【図１Ｃ】
2019502972.tif 000005
【図１Ｄ】
2019502972.tif 000006
【図１Ｅ】
2019502972.tif 000007
【図１Ｆ】
2019502972.tif 000008
【図１Ｇ】
2019502972.tif 000009
【図１Ｈ】
2019502972.tif 000010
【図２Ａ】
2019502972.tif 000011
【図２Ｂ】
2019502972.tif 000012
【図３】
2019502972.tif 000013
【図４Ａ】
2019502972.tif 000014
【図４Ｂ】
2019502972.tif 000015
【図４Ｃ】
2019502972.tif 000016
【図５Ａ】
2019502972.tif 000017
【図５Ｂ】
2019502972.tif 000018
【図５Ｃ】
2019502972.tif 000019
【図６】
2019502972.tif 000020
【図７Ａ】
2019502972.tif 000021
【図７Ｂ】
2019502972.tif 000022
【図８Ａ】
2019502972.tif 000023
【図８Ｂ】
2019502972.tif 000024
【国際調査報告】
2019502972.tif 000025
2019502972.tif 000026