(57)【特許請求の範囲】
【請求項１】
ドメイン名システム（ＤＮＳ）応答並べ替えのための方法であって、
デバイスによって、クライアントのＤＮＳ要求へのドメイン名システム（ＤＮＳ）応答を受信することであって、前記ＤＮＳ応答は、前記クライアントが接続を確立しようとしている前記ＤＮＳ要求のドメインと関連付けられる複数のサイトに対応するＩＰアドレスのリストを備える、ことと、
優先度ポリシを介して前記デバイスによって、前記ドメインまたは確立される前記接続の分類に基づいて、前記クライアントと前記ドメインとの間の前記接続に優先度を割り当てることと、
前記デバイスによって、前記デバイスと前記複数のサイトとの間の複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクのリンク品質を決定することであって、前記リンクは、前記ＩＰアドレスのリストのうちの個別のＩＰアドレスに対応する、ことと、
ＤＮＳ応答並べ替え装置によって、前記複数のリンクのうちの少なくとも１つのリンクのリンク品質および前記クライアントと前記ドメインとの間に確立される前記接続に割り当てられた前記優先度に基づいて、前記ＩＰアドレスのリストの順序を修正することと、
前記デバイスによって、前記ＩＰアドレスのリストの前記修正された順序を前記クライアントに伝送することと
を含む、方法。
【請求項２】
前記デバイスによって、前記ＤＮＳ要求の前記ドメインを識別することをさらに含み、
前記デバイスによって、前記接続の前記優先度を識別することは、前記ＤＮＳ要求の前記識別されたドメインに基づいて、前記接続の前記優先度を識別することを含む、
請求項１に記載の方法。
【請求項３】
前記デバイスと前記複数のサイトとの間の前記複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクの前記リンク品質を決定することは、前記リンクの利用に対応する第１のメトリック、前記リンクの待ち時間に対応する第２のメトリック、前記リンクのジッタに対応する第３のメトリック、または前記リンクによってドロップされるパケットに対応する第４のメトリックのうちの少なくとも１つを決定することを含む、請求項１に記載の方法。
【請求項４】
前記リンクの前記リンク品質は、前記リンクの利用に対応する第１のメトリック、前記リンクの待ち時間に対応する第２のメトリック、前記リンクのジッタに対応する第３のメトリック、または前記リンクによってドロップされるパケットに対応する第４のメトリックのうちの少なくとも１つに基づく、請求項１に記載の方法。
【請求項５】
前記複数のサイトに対応する前記ＩＰアドレスのリストから、前記デバイスと前記複数のサイトとの間の前記複数のリンクを識別することをさらに含む、請求項１に記載の方法。
【請求項６】
前記ＩＰアドレスのリストの前記順序を修正することは、前記接続の前記優先度が閾値を上回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より高いリンク品質を有する第２のＩＰアドレスと置換することを含む、請求項１に記載の方法。
【請求項７】
前記ＩＰアドレスのリストの前記順序を修正することは、前記接続の前記優先度が閾値を下回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より低いリンク品質を有する第２のＩＰアドレスと置換することを含む、請求項１に記載の方法。
【請求項８】
前記ＤＮＳ要求への前記ＤＮＳ応答を受信することは、前記デバイスによって、ＤＮＳサーバから前記クライアントへの前記ＤＮＳ応答を傍受することを含む、請求項１に記載の方法。
【請求項９】
ドメイン名システム（ＤＮＳ）応答並べ替えのためのシステムであって、
複数のクライアントおよび１つ以上のドメイン名システム（ＤＮＳ）サーバの中間にあるデバイスであって、前記デバイスは、
ＤＮＳ応答解析器であって、前記ＤＮＳ応答解析器は、
クライアントのＤＮＳ要求へのＤＮＳ応答を受信することであって、前記ＤＮＳ応答は、前記クライアントが接続を確立しようとしている前記ＤＮＳ要求のドメインと関連付けられる複数のサイトに対応するＩＰアドレスのリストを備える、ことと、
優先度ポリシを介して、前記ドメインまたは確立される前記接続の分類に基づいて、前記クライアントと前記ドメインとの間に確立される前記接続に優先度を割り当てることと
を行うように構成される、ＤＮＳ応答解析器と、
リンク品質推定器であって、前記リンク品質推定器は、
前記デバイスと前記複数のサイトとの間の複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクのリンク品質を決定するように構成され、前記リンクは、前記ＩＰアドレスのリストのうちの個別のＩＰアドレスに対応する、リンク品質推定器と、
ＤＮＳ応答並べ替え装置であって、前記ＤＮＳ応答並べ替え装置は、
前記複数のリンクのうちの少なくとも１つのリンクのリンク品質および前記クライアントと前記ドメインとの間に確立される前記接続に割り当てられた前記優先度に基づいて、前記ＩＰアドレスのリストの順序を修正することと、
前記ＩＰアドレスのリストの前記修正された順序を前記クライアントに伝送することと
を行うように構成される、ＤＮＳ応答並べ替え装置と
を含む、デバイス
を備える、システム。
【請求項１０】
前記ＤＮＳ応答解析器は、
前記ＤＮＳ要求の前記ドメインを識別するように構成され、
前記接続の前記優先度を識別するために、前記ＤＮＳ応答解析器はさらに、前記ＤＮＳ要求の前記識別されたドメインに基づいて、前記接続の前記優先度を識別するように構成される、請求項９に記載のシステム。
【請求項１１】
前記デバイスと前記複数のサイトとの間の前記複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクの前記リンク品質を決定するために、前記リンク品質推定器は、前記リンクの利用に対応する第１のメトリック、前記リンクの待ち時間に対応する第２のメトリック、前記リンクのジッタに対応する第３のメトリック、または前記リンクによってドロップされるパケットに対応する第４のメトリックのうちの少なくとも１つを決定するように構成される、請求項９に記載のシステム。
【請求項１２】
前記リンクの前記リンク品質は、前記リンクの利用に対応する第１のメトリック、前記リンクの待ち時間に対応する第２のメトリック、前記リンクのジッタに対応する第３のメトリック、または前記リンクによってドロップされるパケットに対応する第４のメトリックのうちの少なくとも１つに基づく、請求項９に記載のシステム。
【請求項１３】
前記ＤＮＳ応答解析器はさらに、前記複数のサイトに対応する前記ＩＰアドレスのリストから、前記デバイスと前記複数のサイトとの間の前記複数のリンクを識別するように構成される、請求項９に記載のシステム。
【請求項１４】
前記ＩＰアドレスのリストの前記順序を修正するために、前記ＤＮＳ応答並べ替え装置は、前記接続の前記優先度が閾値を上回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より高いリンク品質を有する第２のＩＰアドレスと置換するように構成される、請求項９に記載のシステム。
【請求項１５】
前記ＩＰアドレスのリストの前記順序を修正するために、前記ＤＮＳ応答並べ替え装置は、前記接続の前記優先度が閾値を下回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より低いリンク品質を有する第２のＩＰアドレスと置換するように構成される、請求項９に記載のシステム。
【請求項１６】
前記ＤＮＳ要求への前記ＤＮＳ応答を受信するために、前記デバイスは、ＤＮＳサーバから前記クライアントへの前記ＤＮＳ応答を傍受するように構成される、請求項９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１７年３月２２日に出願され“Ａ  ＭＥＴＨＯＤ  ＦＯＲ  ＤＮＳ  ＲＥＳＰＯＮＳＥ  ＲＥＯＲＤＥＲＩＮＧ  ＢＡＳＥＤ  ＯＮ  ＰＡＴＨ  ＱＵＡＬＩＴＹ  ＡＮＤ  ＣＯＮＮＥＣＴＩＯＮ  ＰＲＩＯＲＩＴＹ  ＦＯＲ  ＢＥＴＴＥＲ  ＱＯＳ”と題された米国特許出願第１５／４６６，１５１号に対する優先権およびその利益を主張するものであり、該米国特許出願は、参照により本明細書中に援用される。
【０００２】
本願は、概して、データ通信ネットワークに関する。特に、本願は、パス品質および接続優先度に基づいてドメイン名システム応答を並べ替えるためのシステムおよび方法に関する。
【背景技術】
【０００３】
広域ネットワーク（ＷＡＮ）仮想化を実施する中間デバイスは、異なるＷＡＮネットワークを介して接続される一対のデバイスとして稼働することができる。ＷＡＮネットワークは、企業、ネットワーク、またはドメイン内の複数の場所を接続することができる。サーバは、冗長性、負荷分散、および障害回復のために複数の場所を横断して位置することができる。複数の場所のそれぞれにおけるサーバは、接続要求を満たすことができる。クライアントデバイスからサーバのそれぞれへのパスは、異なる品質を有することができる。しかしながら、ドメイン名システム（ＤＮＳ）サーバは、現在のネットワーク条件および相互に対する複数の接続の優先度を考慮するために十分に知的ではない。
【発明の概要】
【課題を解決するための手段】
【０００４】
本ソリューションは、ドメイン名サービス（ＤＮＳ）応答内のインターネットプロトコル（ＩＰ）アドレスを並べ替えるためのシステムおよび方法について議論する。ドメインと関連付けられるサーバは、多くの場合、複数の場所を横断して位置することができる。クライアントからこれらの異なるサーバのそれぞれへのパスは、異なるリンク品質を有することができる。加えて、クライアントとドメインとの間の接続は、異なる品質要件を有することができる。本ソリューションは、リンク品質および接続品質要件を考慮し、ＤＮＳ応答内のＩＰアドレスを並べ替えることができる。ＩＰアドレスを並べ替えることによって、本システムは、クライアントが接続するサーバを制御することができ、接続が接続の品質要件を満たし得るパスを経由して行われることを確実にすることができる。
【０００５】
本開示の一側面によると、ＤＮＳ応答並べ替えのための方法は、デバイスによって、クライアントのＤＮＳ要求へのＤＮＳ応答を受信するステップを含む。ＤＮＳ応答は、ドメインと関連付けられる複数のサイトに対応するＩＰアドレスのリストを含むことができる。本方法は、デバイスによって、クライアントとドメインとの間の接続の優先度を識別するステップを含むことができる。本方法は、デバイスによって、デバイスと複数のサイトとの間の複数のリンクのうちのリンク毎に、デバイスと個別のサイトとの間のリンクのリンク品質を決定するステップを含むことができる。本方法は、ＤＮＳ応答並べ替え装置によって、ＩＰアドレスのリストの順序を修正するステップを含むことができる。並べ替えは、リンクのリンク品質および接続の優先度に基づくことができる。本方法は、デバイスによって、ＩＰアドレスのリストの修正された順序をクライアントに伝送するステップを含むことができる。
【０００６】
いくつかの実装では、デバイスによって、接続の優先度を識別するステップは、優先度ポリシを介してデバイスによって、優先度を接続に割り当てるステップを含むことができる。本方法は、デバイスによって、ＤＮＳ要求のドメインを識別するステップを含むことができる。接続の優先度を識別するステップは、ＤＮＳ要求の識別されたドメインに基づいて、接続の優先度を識別するステップを含むことができる。
【０００７】
デバイスと個別のサイトとの間のリンクのリンク品質を決定するステップは、リンクの利用に対応するメトリック、リンクの待ち時間に対応するメトリック、リンクのジッタに対応するメトリック、またはリンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つを決定するステップを含むことができる。リンクのリンク品質は、リンクの利用に対応するメトリック、リンクの待ち時間に対応するメトリック、リンクのジッタに対応するメトリック、またはリンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つに基づくことができる。
【０００８】
本方法は、複数のサイトに対応するＩＰアドレスのリストから、デバイスと複数のサイトとの間の複数のリンクを識別するステップを含むことができる。本方法は、ＩＰアドレスを使用して検索を実施することに応答して、ＩＰアドレスのリストの中に含まれるＩＰアドレスに対応する複数のサイトを識別するステップを含むことができる。
【０００９】
いくつかの実装では、ＩＰアドレスのリストの順序を修正するステップは、接続の優先度が閾値を上回ることを決定することに応答して、ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より高いリンク品質を有する第２のＩＰアドレスと置換するステップを含む。他の実装では、ＩＰアドレスのリストの順序を修正するステップは、接続の優先度が閾値を下回ることを決定することに応答して、ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より低いリンク品質を有する第２のＩＰアドレスと置換するステップを含む。
【００１０】
いくつかの実装では、ＤＮＳ応答を受信するステップは、デバイスによって、ＤＮＳサーバからクライアントへのＤＮＳ応答を傍受するステップを含むことができる。
【００１１】
本開示の別の側面によると、ドメイン名システム（ＤＮＳ）応答並べ替えのためのシステムは、複数のクライアントおよび１つ以上のＤＮＳサーバの中間にあるデバイスを含むことができる。本デバイスは、ＤＮＳ応答解析器を含むことができる。ＤＮＳ応答解析器は、クライアントのＤＮＳ要求へのＤＮＳ応答を受信するように構成されることができる。ＤＮＳ応答は、ドメインと関連付けられる複数のサイトに対応するＩＰアドレスのリストを含むことができる。ＤＮＳ応答解析器はまた、接続の優先度を識別することもできる。本システムは、デバイスと複数のサイトとの間の複数のリンクのうちのリンク毎に、デバイスと個別のサイトとの間のリンクのリンク品質を決定するように構成され得る、リンク品質推定器を含むことができる。本システムは、ＤＮＳ応答並べ替え装置を含むことができる。ＤＮＳ応答並べ替え装置は、リンクのリンク品質および接続の優先度に基づいて、ＩＰアドレスのリストの順序を修正するように構成されることができる。ＤＮＳ応答並べ替え装置はまた、ＩＰアドレスのリストの修正された順序をクライアントに伝送するように構成されることもできる。
【００１２】
いくつかの実装では、ＤＮＳ応答解析器は、優先度ポリシを介して、優先度を接続に割り当てるように構成されることができる。ＤＮＳ応答解析器は、ＤＮＳ要求のドメインを識別するように構成されることができる。ＤＮＳ応答解析器は、ＤＮＳ要求の識別されたドメインに基づいて、接続の優先度を識別するように構成されることができる。
【００１３】
リンク品質推定器は、リンクの利用に対応するメトリック、リンクの待ち時間に対応するメトリック、リンクのジッタに対応するメトリック、またはリンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つを決定するように構成されることができる。リンクのリンク品質は、リンクの利用に対応するメトリック、リンクの待ち時間に対応するメトリック、リンクのジッタに対応するメトリック、またはリンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つに基づくことができる。
【００１４】
ＤＮＳ要求解析器は、複数のサイトに対応するＩＰアドレスのリストから、デバイスと複数のサイトとの間の複数のリンクを識別するように構成されることができる。ＤＮＳ要求解析器はさらに、ＩＰアドレスを使用して検索を実施することに応答して、ＩＰアドレスのリストの中に含まれるＩＰアドレスに対応する複数のサイトを識別するように構成されることができる。
【００１５】
ＤＮＳ応答並べ替え装置は、接続の優先度が閾値を上回ることを決定することに応答して、ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より高いリンク品質を有する第２のＩＰアドレスと置換するように構成されることができる。ＤＮＳ応答並べ替え装置は、接続の優先度が閾値を下回ることを決定することに応答して、ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より低いリンク品質を有する第２のＩＰアドレスと置換するように構成されることができる。いくつかの実装では、本デバイスは、ＤＮＳサーバからクライアントへのＤＮＳ応答を傍受することによって、ＤＮＳ応答を受信するように構成されることができる。
本明細書は、例えば、以下の項目も提供する。
（項目１）
ドメイン名システム（ＤＮＳ）応答並べ替えのための方法であって、
デバイスによって、クライアントのＤＮＳ要求へのドメイン名システム（ＤＮＳ）応答を受信することであって、前記ＤＮＳ応答は、前記ドメインと関連付けられる複数のサイトに対応するＩＰアドレスのリストを備える、ことと、
前記デバイスによって、前記クライアントと前記ドメインとの間の接続の優先度を識別することと、
前記デバイスによって、前記デバイスと前記複数のサイトとの間の複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクのリンク品質を決定することと、
ＤＮＳ応答並べ替え装置によって、前記リンクのリンク品質および前記接続の優先度に基づいて、前記ＩＰアドレスのリストの順序を修正することと、
前記デバイスによって、前記ＩＰアドレスのリストの修正された順序を前記クライアントに伝送することと
を含む、方法。
（項目２）
前記デバイスによって、前記接続の優先度を識別することは、優先度ポリシを介して前記デバイスによって、前記優先度を前記接続に割り当てることを含む、項目１に記載の方法。
（項目３）
前記デバイスによって、前記ＤＮＳ要求のドメインを識別することをさらに含み、
前記デバイスによって、前記接続の優先度を識別することは、前記ＤＮＳ要求の識別されたドメインに基づいて、前記接続の優先度を識別することを含む、
項目１に記載の方法。
（項目４）
前記デバイスと前記複数のサイトとの間の複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクのリンク品質を決定することは、前記リンクの利用に対応するメトリック、前記リンクの待ち時間に対応するメトリック、前記リンクのジッタに対応するメトリック、または前記リンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つを決定することを含む、項目１に記載の方法。
（項目５）
前記リンクのリンク品質は、前記リンクの利用に対応するメトリック、前記リンクの待ち時間に対応するメトリック、前記リンクのジッタに対応するメトリック、または前記リンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つに基づく、項目１に記載の方法。
（項目６）
前記複数のサイトに対応する前記ＩＰアドレスのリストから、前記デバイスと前記複数のサイトとの間の前記複数のリンクを識別することをさらに含む、項目１に記載の方法。
（項目７）
前記ＩＰアドレスを使用して検索を実施することに応答して、前記ＩＰアドレスのリストの中に含まれる前記ＩＰアドレスに対応する前記複数のサイトを識別することをさらに含む、項目１に記載の方法。
（項目８）
前記ＩＰアドレスのリストの順序を修正することは、前記接続の優先度が閾値を上回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より高いリンク品質を有する第２のＩＰアドレスと置換することを含む、項目１に記載の方法。
（項目９）
前記ＩＰアドレスのリストの順序を修正することは、前記接続の優先度が閾値を下回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より低いリンク品質を有する第２のＩＰアドレスと置換することを含む、項目１に記載の方法。
（項目１０）
前記ＤＮＳ要求への前記ＤＮＳ応答を受信することは、前記デバイスによって、ＤＮＳサーバから前記クライアントへの前記ＤＮＳ応答を傍受することを含む、項目１に記載の方法。
（項目１１）
ドメイン名システム（ＤＮＳ）応答並べ替えのためのシステムであって、
複数のクライアントおよび１つ以上のドメイン名システム（ＤＮＳ）サーバの中間にあるデバイスであって、前記デバイスは、
ＤＮＳ応答解析器であって、
クライアントのＤＮＳ要求へのＤＮＳ応答を受信することであって、前記ＤＮＳ応答は、ドメインと関連付けられる複数のサイトに対応するＩＰアドレスのリストを備える、ことと、
接続の優先度を識別することと
を行うように構成される、ＤＮＳ応答解析器と、
リンク品質推定器であって、
前記デバイスと前記複数のサイトとの間の複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクのリンク品質を決定する
ように構成される、リンク品質推定器と、
ＤＮＳ応答並べ替え装置であって、
前記リンクのリンク品質および前記接続の優先度に基づいて、前記ＩＰアドレスのリストの順序を修正することと、
前記ＩＰアドレスのリストの修正された順序を前記クライアントに伝送することと
を行うように構成される、ＤＮＳ応答並べ替え装置と
を含む、デバイス
を備える、システム。
（項目１２）
前記接続の優先度を識別するために、前記ＤＮＳ応答解析器は、優先度ポリシを介して、前記優先度を前記接続に割り当てるように構成される、項目１１に記載のシステム。
（項目１３）
前記ＤＮＳ応答解析器は、
前記ＤＮＳ要求のドメインを識別するように構成され、
前記接続の優先度を識別するために、前記ＤＮＳ応答解析器はさらに、前記ＤＮＳ要求の識別されたドメインに基づいて、前記接続の優先度を識別するように構成される、
項目１１に記載のシステム。
（項目１４）
前記デバイスと前記複数のサイトとの間の複数のリンクのうちのリンク毎に、前記デバイスと個別のサイトとの間の前記リンクのリンク品質を決定するために、前記リンク品質推定器は、前記リンクの利用に対応するメトリック、前記リンクの待ち時間に対応するメトリック、前記リンクのジッタに対応するメトリック、または前記リンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つを決定するように構成される、項目１１に記載のシステム。
（項目１５）
前記リンクのリンク品質は、前記リンクの利用に対応するメトリック、前記リンクの待ち時間に対応するメトリック、前記リンクのジッタに対応するメトリック、または前記リンクによってドロップされるパケットに対応するメトリックのうちの少なくとも１つに基づく、項目１１に記載のシステム。
（項目１６）
ＤＮＳ要求解析器はさらに、前記複数のサイトに対応する前記ＩＰアドレスのリストから、前記デバイスと前記複数のサイトとの間の前記複数のリンクを識別するように構成される、項目１１に記載のシステム。
（項目１７）
ＤＮＳ要求解析器はさらに、前記ＩＰアドレスを使用して検索を実施することに応答して、前記ＩＰアドレスのリストの中に含まれる前記ＩＰアドレスに対応する前記複数のサイトを識別するように構成される、項目１１に記載のシステム。
（項目１８）
前記ＩＰアドレスのリストの順序を修正するために、前記ＤＮＳ応答並べ替え装置は、前記接続の優先度が閾値を上回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より高いリンク品質を有する第２のＩＰアドレスと置換するように構成される、項目１１に記載のシステム。
（項目１９）
前記ＩＰアドレスのリストの順序を修正するために、前記ＤＮＳ応答並べ替え装置は、前記接続の優先度が閾値を下回ることを決定することに応答して、前記ＩＰアドレスのリストの第１の位置において、第１のＩＰアドレスを、より低いリンク品質を有する第２のＩＰアドレスと置換するように構成される、項目１１に記載のシステム。
（項目２０）
前記ＤＮＳ要求への前記ＤＮＳ応答を受信するために、前記デバイスは、ＤＮＳサーバから前記クライアントへの前記ＤＮＳ応答を傍受するように構成される、項目１１に記載のシステム。
【００１６】
本ソリューションの前述および他の目的、側面、特徴、および利点は、付随する図面と併せて解釈される以下の説明を参照することによって、より明白となり、さらに理解されるであろう。
【図面の簡単な説明】
【００１７】
【図１Ａ】図１Ａは、クライアントがアプライアンスを介してサーバにアクセスするためのネットワーク環境の実施形態のブロック図である。
【図１Ｂ】図１Ｂは、アプライアンスを介してサーバからクライアントにコンピューティング環境を配信するための環境の実施形態のブロック図である。
【図１Ｃ】図１Ｃは、アプライアンスを介してサーバからクライアントにコンピューティング環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｄ】図１Ｄは、アプライアンスを介してサーバからクライアントにコンピューティング環境を配信するための環境の別の実施形態のブロック図である。
【図１Ｅ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｆ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｇ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図１Ｈ】図１Ｅ−１Ｈは、コンピューティングデバイスの実施形態のブロック図である。
【図２Ａ】図２Ａは、クライアントとサーバとの間の通信を処理するためのアプライアンスの実施形態のブロック図である。
【図２Ｂ】図２Ｂは、クライアントとサーバとの間の通信を最適化、加速、負荷分散、およびルーティングするためのアプライアンスの別の実施形態のブロック図である。
【図３】図３は、アプライアンスを介してサーバと通信するためのクライアントの実施形態のブロック図である。
【図４Ａ】図４Ａは、仮想化環境の実施形態のブロック図である。
【図４Ｂ】図４Ｂは、仮想化環境の別の実施形態のブロック図である。
【図４Ｃ】図４Ｃは、仮想化されたアプライアンスの実施形態のブロック図である。
【図５Ａ】図５Ａは、マルチコアシステムにおいて並列処理を実装するためのアプローチの実施形態のブロック図である。
【図５Ｂ】図５Ｂは、マルチコアシステムを利用するシステムの実施形態のブロック図である。
【図５Ｃ】図５Ｃは、マルチコアシステムの側面の別の実施形態のブロック図である。
【図６】図６は、クラスタシステムの実施形態のブロック図である。
【図７】図７は、ＤＮＳ応答並べ替えシステムを実装する例示的ネットワーク環境の例示的ブロック図を図示する。
【図８】図８は、ＤＮＳ応答並べ替えシステムの例示的実装の例示的ブロック図である。
【図９】図９は、図８に図示されるシステムを使用する、ＤＮＳ応答並べ替えのための例示的方法の例示的フロー図を図示する。
【発明を実施するための形態】
【００１８】
本ソリューションの特徴および利点は、同様の参照記号が全体を通して対応する要素を識別する、図面と併せて解釈されると、下記に記載される詳細な説明からより明白となるであろう。図面では、同様の参照記号は、概して、同じ、機能的に類似する、および／または構造的に類似する要素を示す。
【００１９】
下記の種々の実施形態の説明を熟読する目的のために、本明細書の節およびそれらの内容の以下の説明が、役立ち得る。
第Ａ節は、本明細書に説明される実施形態を実践するために有用であり得る、ネットワーク環境およびコンピューティング環境を説明する。
第Ｂ節は、コンピューティング環境を遠隔ユーザに配信するためのシステムおよび方法の実施形態を説明する。
第Ｃ節は、クライアントとサーバとの間の通信を加速するためのシステムおよび方法の実施形態を説明する。
第Ｄ節は、アプリケーション配信コントローラを仮想化するためのシステムおよび方法の実施形態を説明する。
第Ｅ節は、マルチコアアーキテクチャおよび環境を提供するためのシステムおよび方法の実施形態を説明する。
第Ｆ節は、クラスタ化されたアプライアンスアーキテクチャ環境を提供するためのシステムおよび方法の実施形態を説明する。
【００２０】
第Ｇ節は、ＤＮＳ応答並べ替えのためのシステムおよび方法の実施形態を説明する。
Ａ．ネットワークおよびコンピューティング環境
【００２１】
アプライアンスおよび／またはクライアントのシステムおよび方法の実施形態の詳細について議論することに先立って、そのような実施形態が展開され得る、ネットワークおよびコンピューティング環境について議論することが役立ち得る。ここで図１Ａを参照すると、ネットワーク環境の実施形態が、描写される。要するに、ネットワーク環境は、１つ以上のネットワーク１０４、１０４’（概して、ネットワーク１０４と称される）を介して１つ以上のサーバ１０６ａ−１０６ｎ（概して、サーバ１０６または遠隔マシン１０６とも称される）と通信する１つ以上のクライアント１０２ａ−１０２ｎ（概して、ローカルマシン１０２またはクライアント１０２とも称される）を備える。いくつかの実施形態では、クライアント１０２は、アプライアンス２００を介してサーバ１０６と通信する。
【００２２】
図１Ａは、クライアント１０２とサーバ１０６との間のネットワーク１０４およびネットワーク１０４’を示すが、クライアント１０２およびサーバ１０６は、同一のネットワーク１０４上にあってもよい。ネットワーク１０４および１０４’は、同一のタイプのネットワークまたは異なるタイプのネットワークであり得る。ネットワーク１０４および／またはネットワーク１０４’は、企業イントラネット等のローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、またはインターネットまたはワールドワイドウェブ等の広域ネットワーク（ＷＡＮ）であり得る。一実施形態では、ネットワーク１０４’は、私設ネットワークであってもよく、ネットワーク１０４は、公衆ネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、私設ネットワークであってもよく、ネットワーク１０４’は、公衆ネットワークであってもよい。別の実施形態では、ネットワーク１０４および１０４’は両方とも、私設ネットワークであってもよい。いくつかの実施形態では、クライアント１０２は、企業データセンタに位置するサーバ１０６にネットワーク１０４を経由したＷＡＮ接続を介して通信する企業の支社に位置してもよい。
【００２３】
ネットワーク１０４および／または１０４’は、任意のタイプおよび／または形態のネットワークであり、以下のうちのいずれか、すなわち、ポイントツーポイントネットワーク、放送ネットワーク、広域ネットワーク、ローカルエリアネットワーク、電気通信ネットワーク、データ通信ネットワーク、コンピュータネットワーク、ＡＴＭ（非同期転送モード）ネットワーク、ＳＯＮＥＴ（同期光ネットワーク）ネットワーク、ＳＤＨ（同期デジタルハイアラーキ）ネットワーク、無線ネットワーク、および有線ネットワークを含んでもよい。いくつかの実施形態では、ネットワーク１０４は、赤外線チャネルまたは衛星帯等の無線リンクを備えてもよい。ネットワーク１０４および／または１０４’のトポロジは、バス、スター、またはリングネットワークトポロジであってもよい。ネットワーク１０４および／または１０４’およびネットワークトポロジは、本明細書に説明される動作をサポートすることが可能である、当業者に公知であるような任意のそのようなネットワークまたはネットワークトポロジであってもよい。
【００２４】
図１Ａに示されるように、インターフェースユニット２００またはゲートウェイ２００とも称され得る、アプライアンス２００が、ネットワーク１０４と１０４’との間に示される。いくつかの実施形態では、アプライアンス２００は、ネットワーク１０４上に位置してもよい。例えば、企業の支社が、支社にアプライアンス２００を展開してもよい。他の実施形態では、アプライアンス２００は、ネットワーク１０４’上に位置してもよい。例えば、アプライアンス２００は、企業データセンタ上に位置してもよい。さらに別の実施形態では、複数のアプライアンス２００が、ネットワーク１０４上に展開されてもよい。いくつかの実施形態では、複数のアプライアンス２００が、ネットワーク１０４’上に展開されてもよい。一実施形態では、第１のアプライアンス２００が、第２のアプライアンス２００’と通信する。他の実施形態では、アプライアンス２００は、任意のクライアント１０２またはクライアント１０２と同一または異なるネットワーク１０４、１０４’上のサーバ１０６の一部であり得る。１つ以上のアプライアンス２００が、クライアント１０２とサーバ１０６との間のネットワークまたはネットワーク通信パス内の任意の点に位置してもよい。
【００２５】
いくつかの実施形態では、アプライアンス２００は、ＮｅｔＳｃａｌｅｒ（登録商標）デバイスと称される、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のネットワークデバイスのうちのいずれかを備える。他の実施形態では、アプライアンス２００は、Ｆ５  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷｅｂＡｃｃｅｌｅｒａｔｏｒおよびＢｉｇＩＰと称される、製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、Ｊｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のＤＸ加速デバイスプラットフォームおよび／またはＳＡ７００、ＳＡ２０００、ＳＡ４０００、およびＳＡ６０００デバイス等のＳＳＬ  ＶＰＮシリーズのデバイスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２００は、Ｃｉｓｃｏ  ＡＣＥ  Ａｐｐｌｉｃａｔｉｏｎ  Ｃｏｎｔｒｏｌ  Ｅｎｇｉｎｅ  Ｍｏｄｕｌｅサービスソフトウェアおよびネットワークモジュール、およびＣｉｓｃｏ  ＡＶＳ  Ｓｅｒｉｅｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｖｅｌｏｃｉｔｙ  Ｓｙｓｔｅｍ等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のアプリケーション加速および／またはセキュリティ関連アプライアンスおよび／またはソフトウェアを含む。
【００２６】
一実施形態では、本システムは、複数の論理的にグループ化されたサーバ１０６を含んでもよい。これらの実施形態では、サーバの論理グループは、サーバファーム３８と称され得る。これらの実施形態のうちのいくつかでは、サーバ１０６は、地理的に散在されてもよい。ある場合には、ファーム３８は、単一のエンティティとして運営されてもよい。他の実施形態では、サーバファーム３８は、複数のサーバファーム３８を備える。一実施形態では、サーバファームは、１つ以上のクライアント１０２の代わりに１つ以上のアプリケーションを実行する。
【００２７】
各ファーム３８内のサーバ１０６は、異種であり得る。サーバ１０６のうちの１つ以上のものが、１つのタイプのオペレーティングシステムプラットフォーム（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＷＩＮＤＯＷＳ（登録商標）  ＮＴ）に従って動作することができる一方で、他のサーバ１０６のうちの１つ以上のものは、別のタイプのオペレーティングシステムプラットフォーム（例えば、Ｕｎｉｘ（登録商標）またはＬｉｎｕｘ（登録商標））に従って動作することができる。各ファーム３８のサーバ１０６は、同一のファーム３８内の別のサーバ１０６に物理的に近接する必要はない。したがって、ファーム３８として論理的にグループ化されるサーバ１０６のグループは、広域ネットワーク（ＷＡＮ）接続または中域ネットワーク（ＭＡＮ）接続を使用して、相互接続されてもよい。例えば、ファーム３８は、異なる大陸、または大陸、国、州、市、構内、または部屋の異なる領域内に物理的に位置するサーバ１０６を含んでもよい。ファーム３８内のサーバ１０６間のデータ伝送速度は、サーバ１０６がローカルエリアネットワーク（ＬＡＮ）接続またはある形態の直接接続を使用して接続される場合に、増加されることができる。
【００２８】
サーバ１０６は、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、またはゲートウェイサーバと称され得る。いくつかの実施形態では、サーバ１０６は、アプリケーションサーバとして、またはマスタアプリケーションサーバとしてのいずれかで機能する容量を有してもよい。一実施形態では、サーバ１０６は、アクティブディレクトリを含んでもよい。クライアント１０２はまた、クライアントノードまたはエンドポイントとも称され得る。いくつかの実施形態では、クライアント１０２は、サーバ上のアプリケーションへのアクセスを求めるクライアントノードとして、および他のクライアント１０２ａ−１０２ｎのためのホストされたアプリケーションへのアクセスを提供するアプリケーションサーバとしての両方で機能する容量を有する。
【００２９】
いくつかの実施形態では、クライアント１０２は、サーバ１０６と通信する。一実施形態では、クライアント１０２は、ファーム３８内のサーバ１０６のうちの１つと直接通信する。別の実施形態では、クライアント１０２は、プログラム近傍アプリケーションを実行し、ファーム３８内のサーバ１０６と通信する。なおも別の実施形態では、サーバ１０６は、マスタノードの機能性を提供する。いくつかの実施形態では、クライアント１０２は、ネットワーク１０４を通してファーム３８内のサーバ１０６と通信する。ネットワーク１０４を経由して、クライアント１０２は、例えば、ファーム３８内のサーバ１０６ａ−１０６ｎによってホストされる種々のアプリケーションの実行を要求し、表示するためにアプリケーション実行の結果の出力を受信することができる。いくつかの実施形態では、マスタノードのみが、要求されたアプリケーションをホストするサーバ１０６’と関連付けられるアドレス情報を識別および提供するために要求される機能性を提供する。
【００３０】
一実施形態では、サーバ１０６は、ウェブサーバの機能性を提供する。別の実施形態では、サーバ１０６ａは、クライアント１０２から要求を受信し、要求を第２のサーバ１０６ｂに転送し、サーバ１０６ｂからの要求への応答でクライアント１０２による要求に応答する。なおも別の実施形態では、サーバ１０６は、クライアント１０２に利用可能なアプリケーションの列挙、およびアプリケーションの列挙によって識別されるアプリケーションをホストするサーバ１０６と関連付けられるアドレス情報を取得する。さらに別の実施形態では、サーバ１０６は、ウェブインターフェースを使用して、要求への応答をクライアント１０２に提示する。一実施形態では、クライアント１０２は、サーバ１０６と直接通信し、識別されたアプリケーションにアクセスする。別の実施形態では、クライアント１０２は、サーバ１０６上の識別されたアプリケーションの実行によって生成される、ディスプレイデータ等のアプリケーション出力データを受信する。
【００３１】
ここで図１Ｂを参照すると、複数のアプライアンス２００を展開するネットワーク環境の実施形態が、描写される。第１のアプライアンス２００が、第１のネットワーク１０４上に、第２のアプライアンス２００’が、第２のネットワーク１０４’上に展開されてもよい。例えば、企業が、支社において第１のアプライアンス２００を、データセンタにおいて第２のアプライアンス２００’を展開してもよい。別の実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、同一のネットワーク１０４またはネットワーク１０４上に展開される。例えば、第１のアプライアンス２００は、第１のサーバファーム３８のために展開されてもよく、第２のアプライアンス２００は、第２のサーバファーム３８’のために展開されてもよい。別の実施例では、第１のアプライアンス２００が、第１の支社において展開されてもよい一方で、第２のアプライアンス２００’は、第２の支社において展開される。いくつかの実施形態では、第１のアプライアンス２００および第２のアプライアンス２００’は、相互と協働して、または併せて稼働し、ネットワークトラフィックまたはクライアントとサーバとの間のアプリケーションおよびデータの配信を加速する。
【００３２】
ここで図１Ｃを参照すると、１つ以上のＷＡＮ最適化アプライアンス２０５、２０５’の間等で１つ以上の他のタイプのアプライアンスとともにアプライアンス２００を展開する、ネットワーク環境の別の実施形態が、描写される。例えば、第１のＷＡＮ最適化アプライアンス２０５が、ネットワーク１０４と１０４’との間に示され、第２のＷＡＮ最適化アプライアンス２０５’が、アプライアンス２００と１つ以上のサーバ１０６との間に展開されてもよい。一例として、企業が、支社において第１のＷＡＮ最適化アプライアンス２０５を、データセンタにおいて第２のＷＡＮ最適化アプライアンス２０５’を展開してもよい。いくつかの実施形態では、アプライアンス２０５は、ネットワーク１０４’上に位置してもよい。他の実施形態では、アプライアンス２０５’は、ネットワーク１０４上に位置してもよい。いくつかの実施形態では、アプライアンス２０５’は、ネットワーク１０４’またはネットワーク１０４’’上に位置してもよい。一実施形態では、アプライアンス２０５および２０５’は、同一のネットワーク上にある。別の実施形態では、アプライアンス２０５および２０５’は、異なるネットワーク上にある。別の実施例では、第１のＷＡＮ最適化アプライアンス２０５は、第１のサーバファーム３８のために展開され、第２のＷＡＮ最適化アプライアンス２０５’は、第２のサーバファーム３８’のために展開されてもよい。
【００３３】
一実施形態では、アプライアンス２０５は、ＷＡＮ接続へ、および／またはそこからのトラフィック等の任意のタイプおよび形態のネットワークトラフィックの性能、動作、またはサービス品質を加速する、最適化する、または別様に改良するためのデバイスである。いくつかの実施形態では、アプライアンス２０５は、性能増進プロキシである。他の実施形態では、アプライアンス２０５は、時として、ＷＡＮ最適化コントローラと呼ばれることもある、任意のタイプおよび形態のＷＡＮ最適化または加速デバイスである。一実施形態では、アプライアンス２０５は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＣｌｏｕｄＢｒｉｄｇｅ（登録商標）と称される、製品実施形態のうちのいずれかである。他の実施形態では、アプライアンス２０５は、Ｆ５  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．  （Ｓｅａｔｔｌｅ，  Ｗａｓｈｉｎｇｔｏｎ）製のＢＩＧ−ＩＰリンクコントローラおよびＷＡＮｊｅｔと称される、製品実施形態のうちのいずれかを含む。別の実施形態では、アプライアンス２０５は、Ｊｕｎｉｐｅｒ  Ｎｅｔｗｏｒｋｓ，  Ｉｎｃ．（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＸおよびＷＸＣ  ＷＡＮ加速デバイスプラットフォームのうちのいずれかを含む。いくつかの実施形態では、アプライアンス２０５は、Ｒｉｖｅｒｂｅｄ  Ｔｅｃｈｎｏｌｏｇｙ（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のスティールヘッドラインのＷＡＮ最適化アプライアンスのうちのいずれかを含む。他の実施形態では、アプライアンス２０５は、Ｅｘｐａｎｄ  Ｎｅｔｗｏｒｋｓ  Ｉｎｃ．（Ｒｏｓｅｌａｎｄ，  Ｎｅｗ  Ｊｅｒｓｅｙ）製のＷＡＮ関連デバイスのうちのいずれかを含む。一実施形態では、アプライアンス２０５は、Ｐａｃｋｅｔｅｅｒによって提供されるＰａｃｋｅｔＳｈａｐｅｒ、ｉＳｈａｒｅｄ、およびＳｋｙＸ製品実施形態等のＰａｃｋｅｔｅｅｒ  Ｉｎｃ．（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＷＡＮ関連アプライアンスのうちのいずれかを含む。さらに別の実施形態では、アプライアンス２０５は、Ｃｉｓｃｏ  Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ  Ａｐｐｌｉｃａｔｉｏｎ  Ｓｅｒｖｉｃｅｓソフトウェアおよびネットワークモジュール、および広域ネットワークエンジンアプライアンス等のＣｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）製の任意のＷＡＮ関連アプライアンスおよび／またはソフトウェアを含む。
【００３４】
一実施形態では、アプライアンス２０５は、支社または遠隔オフィス用のアプリケーションおよびデータ加速サービスを提供する。一実施形態では、アプライアンス２０５は、広域ファイルサービス（ＷＡＦＳ）の最適化を含む。別の実施形態では、アプライアンス２０５は、共通インターネットファイルシステム（ＣＩＦＳ）プロトコルを介して等、ファイルの配信を加速する。他の実施形態では、アプライアンス２０５は、メモリおよび／または記憶装置内のキャッシングを提供し、アプリケーションおよびデータの配信を加速する。一実施形態では、アプライアンス２０５は、ネットワークスタックの任意のレベルにおいて、または任意のプロトコルまたはネットワーク層において、ネットワークトラフィックの圧縮を提供する。別の実施形態では、アプライアンス２０５は、トランスポート層プロトコル最適化、フロー制御、性能増進、または修正、および／または管理を提供し、ＷＡＮ接続を経由してアプリケーションおよびデータの配信を加速する。例えば、一実施形態では、アプライアンス２０５は、トランスポート制御プロトコル（ＴＣＰ）最適化を提供する。他の実施形態では、アプライアンス２０５は、任意のセッションまたはアプリケーション層プロトコルのための最適化、フロー制御、性能増進、または修正、および／または管理を提供する。
【００３５】
別の実施形態では、アプライアンス２０５は、任意のタイプおよび形態のデータまたは情報を、ネットワークパケットのカスタムまたは標準ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションフィールドに符号化し、存在、機能性、または能力を別のアプライアンス２０５’にアナウンスする。別の実施形態では、アプライアンス２０５’は、ＴＣＰおよび／またはＩＰヘッダフィールドまたはオプションフィールドで符号化されたデータを使用して、別のアプライアンス２０５’と通信してもよい。例えば、アプライアンスは、ＴＣＰオプションまたはＩＰヘッダフィールドまたはオプションを使用し、ＷＡＮ加速等の機能性を実施する際に、または相互と併せて稼働するために、アプライアンス２０５、２０５’によって使用される１つ以上のパラメータを通信してもよい。
【００３６】
いくつかの実施形態では、アプライアンス２００は、アプライアンス２０５と２０５’との間で通信されるＴＣＰおよび／またはＩＰヘッダおよび／またはオプションフィールドで符号化された情報のうちのいずれかを留保する。例えば、アプライアンス２００は、アプライアンス２０５および２０５’をトラバースするクライアントとサーバとの間からのトランスポート層接続等のアプライアンス２００をトラバースするトランスポート層接続を終了してもよい。一実施形態では、アプライアンス２００は、第１のトランスポート層接続を介して第１のアプライアンス２０５によって伝送されるトランスポート層パケット内で任意の符号化された情報を識別および留保し、第２のトランスポート層接続を介して、符号化された情報を伴うトランスポート層パケットを第２のアプライアンス２０５’に通信する。
【００３７】
ここで図１Ｄを参照すると、クライアント１０２上でコンピューティング環境を配信する、および／または動作させるためのネットワーク環境が、描写される。いくつかの実施形態では、サーバ１０６は、コンピューティング環境またはアプリケーションおよび／またはデータファイルを１つ以上のクライアント１０２に配信するためのアプリケーション配信システム１９０を含む。要するに、クライアント１０は、ネットワーク１０４、１０４’およびアプライアンス２００を介してサーバ１０６と通信する。例えば、クライアント１０２は、企業の遠隔オフィス、例えば、支社に常駐してもよく、サーバ１０６は、企業データセンタに常駐してもよい。クライアント１０２は、クライアントエージェント１２０と、コンピューティング環境１５とを備える。コンピューティング環境１５は、データファイルにアクセスする、それを処理する、または使用する、アプリケーションを実行する、または動作させてもよい。コンピューティング環境１５、アプリケーションおよび／またはデータファイルは、アプライアンス２００および／またはサーバ１０６を介して配信されてもよい。
【００３８】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２へのコンピューティング環境１５またはその任意の部分の配信を加速する。一実施形態では、アプライアンス２００は、アプリケーション配信システム１９０によるコンピューティング環境１５の配信を加速する。例えば、本明細書に説明される実施形態は、中央企業データセンタから企業の支社等の遠隔ユーザ場所へのアプリケーションによって処理可能なストリーミングアプリケーションおよびデータファイルの配信を加速するために使用されてもよい。別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のトランスポート層トラフィックを加速する。アプライアンス２００は、１）トランスポート層接続プーリング、２）トランスポート層接続多重化、３）トランスポート制御プロトコルバッファリング、４）圧縮、および５）キャッシング等のサーバ１０６からクライアント１０２への任意のトランスポート層ペイロードを加速するための加速技法を提供してもよい。いくつかの実施形態では、アプライアンス２００は、クライアント１０２からの要求に応答する際にサーバ１０６の負荷分散を提供する。他の実施形態では、アプライアンス２００は、プロキシまたはアクセスサーバとして作用し、１つ以上のサーバ１０６へのアクセスを提供する。別の実施形態では、アプライアンス２００は、ＳＳＬ  ＶＰＮ接続等のクライアント１０２の第１のネットワーク１０４からサーバ１０６の第２のネットワーク１０４’へのセキュアな仮想私設ネットワーク接続を提供する。さらに他の実施形態では、アプライアンス２００は、アプリケーションファイアウォールセキュリティ、クライアント１０２とサーバ１０６との間の接続および通信の制御および管理を提供する。
【００３９】
いくつかの実施形態では、アプリケーション配信管理システム１９０は、複数の実行方法に基づいて、かつポリシエンジン１９５を介して適用される任意の認証および認可ポリシに基づいて、遠隔または別様であるユーザのデスクトップにコンピューティング環境を配信するためのアプリケーション配信技法を提供する。これらの技法を用いると、遠隔ユーザは、コンピューティング環境と、任意のネットワーク接続されたデバイス１００からサーバに記憶されたアプリケーションおよびデータファイルへのアクセスとを入手してもよい。一実施形態では、アプリケーション配信システム１９０は、サーバ１０６上に常駐する、または実行されてもよい。別の実施形態では、アプリケーション配信システム１９０は、複数のサーバ１０６ａ−１０６ｎ上に常駐する、または実行されてもよい。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバファーム３８内で実行されてもよい。一実施形態では、アプリケーション配信システム１９０を実行するサーバ１０６はまた、アプリケーションおよびデータファイルを記憶または提供してもよい。別の実施形態では、１つ以上のサーバ１０６の第１のセットは、アプリケーション配信システム１９０を実行してもよく、異なるサーバ１０６ｎは、アプリケーションおよびデータファイルを記憶または提供してもよい。いくつかの実施形態では、アプリケーション配信システム１９０、アプリケーション、およびデータファイルはそれぞれ、異なるサーバ上に常駐また配置してもよい。さらに別の実施形態では、アプリケーション配信システム１９０の任意の部分が、アプライアンス２００または複数のアプライアンス上に常駐する、実行される、または記憶される、またはそれに分配されてもよい。
【００４０】
クライアント１０２は、データファイルを使用または処理するアプリケーションを実行するためのコンピューティング環境１５を含んでもよい。ネットワーク１０４、１０４’およびアプライアンス２００を介したクライアント１０２は、サーバ１０６からアプリケーションおよびデータファイルを要求してもよい。一実施形態では、アプライアンス２００は、クライアント１０２からサーバ１０６に要求を転送してもよい。例えば、クライアント１０２は、ローカルで記憶された、またはアクセス可能なアプリケーションおよびデータファイルを有していない場合がある。要求に応答して、アプリケーション配信システム１９０および／またはサーバ１０６は、アプリケーションおよびデータファイルをクライアント１０２に配信してもよい。例えば、一実施形態では、サーバ１０６は、アプリケーションストリームとしてアプリケーションを伝送し、クライアント１０２上のコンピューティング環境１５内で動作してもよい。
【００４１】
いくつかの実施形態では、アプリケーション配信システム１９０は、ＸｅｎＡｐｐ（登録商標）またはＸｅｎＤｅｓｋｔｏｐ（登録商標）等のＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，
Ｉｎｃ．によるＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  ＳｕｉｔｅＴＭの任意の部分、および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓのうちのいずれかを備える。一実施形態では、アプリケーション配信システム１９０は、遠隔ディスプレイプロトコルを介して、または別様に遠隔ベースまたはサーバベースのコンピューティングを介して、１つ以上のアプリケーションをクライアント１０２またはユーザに配信してもよい。別の実施形態では、アプリケーション配信システム１９０は、アプリケーションのストリーミングを介して、１つ以上のアプリケーションをクライアントまたはユーザに配信してもよい。
【００４２】
一実施形態では、アプリケーション配信システム１９０は、アプリケーション実行方法へのアクセス、その選択、およびアプリケーションの配信を制御および管理するためのポリシエンジン１９５を含む。いくつかの実施形態では、ポリシエンジン１９５は、ユーザまたはクライアント１０２がアクセスし得る、１つ以上のアプリケーションを決定する。別の実施形態では、ポリシエンジン１９５は、アプリケーションがユーザまたはクライアント１０２に配信されるべき方法、例えば、実行の方法を決定する。いくつかの実施形態では、アプリケーション配信システム１９０は、サーバベースのコンピューティング、ローカル実行のためにクライアント１２０にローカルでアプリケーションをストリーミングまたは配信すること等のアプリケーション実行の方法を選択する、複数の配信技法を提供する。
【００４３】
一実施形態では、クライアント１０２は、アプリケーションプログラムの実行を要求し、サーバ１０６を備えるアプリケーション配信システム１９０は、アプリケーションプログラムを実行する方法を選択する。いくつかの実施形態では、サーバ１０６は、クライアント１０２から証明書を受信する。別の実施形態では、サーバ１０６は、クライアント１０２から利用可能なアプリケーションの列挙に対する要求を受信する。一実施形態では、証明書の要求または受信に応答して、アプリケーション配信システム１９０は、クライアント１０２に利用可能な複数のアプリケーションプログラムを列挙する。アプリケーション配信システム１９０は、列挙されたアプリケーションを実行するための要求を受信する。アプリケーション配信システム１９０は、例えば、ポリシエンジンのポリシに応答して、列挙されたアプリケーションを実行するための事前決定された数の方法のうちの１つを選択する。アプリケーション配信システム１９０は、クライアント１０２がサーバ１０６上のアプリケーションプログラムの実行によって生成されるアプリケーション出力データを受信することを可能にする、アプリケーションの実行の方法を選択してもよい。アプリケーション配信システム１９０は、ローカルマシン１０がアプリケーションを備える複数のアプリケーションファイルを読み出した後にローカルでアプリケーションプログラムを実行することを可能にする、アプリケーションの実行の方法を選択してもよい。さらに別の実施形態では、アプリケーション配信システム１９０は、アプリケーションの実行の方法を選択し、ネットワーク１０４を介してアプリケーションをクライアント１０２にストリーミングしてもよい。
【００４４】
クライアント１０２は、任意のタイプおよび／または形態のウェブブラウザ、ウェブベースのクライアント、クライアントサーバアプリケーション、シンクライアントコンピューティングクライアント、ＡｃｔｉｖｅＸ制御、またはＪａｖａ（登録商標）アプレット、またはクライアント１０２上で実行されることが可能な任意の他のタイプおよび／または形態の実行可能命令等の任意のタイプおよび／または形態のソフトウェア、プログラム、または実行可能命令であり得る、アプリケーションを実行する、動作させる、または別様に提供してもよい。いくつかの実施形態では、アプリケーションは、サーバ１０６上でクライアント１０２の代わりに実行されるサーバベースまたは遠隔ベースのアプリケーションであってもよい。一実施形態では、サーバ１０６は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製の独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコルまたはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製の遠隔デスクトッププロトコル（ＲＤＰ）等の任意のシンクライアントまたは遠隔表示プロトコルを使用して、出力をクライアント１０２に表示してもよい。アプリケーションは、任意のタイプのプロトコルを使用することができ、これは、例えば、ＨＴＴＰクライアント、ＦＴＰクライアント、Ｏｓｃａｒクライアント、またはＴｅｌｎｅｔクライアントであり得る。他の実施形態では、アプリケーションは、ソフトＩＰ電話等のＶｏＩＰ通信に関連する任意のタイプのソフトウェアを備える。さらなる実施形態では、アプリケーションは、ビデオおよび／またはオーディオをストリーミングするためのアプリケーション等のリアルタイムデータ通信に関連する任意のアプリケーションを備える。
【００４５】
いくつかの実施形態では、サーバ１０６またはサーバファーム３８は、シンクライアントコンピューティングを提供するアプリケーションまたは遠隔表示提示アプリケーション等の１つ以上のアプリケーションを起動していてもよい。一実施形態では、サーバ１０６またはサーバファーム３８は、ＸｅｎＡｐｐ（登録商標）またはＸｅｎＤｅｓｋｔｏｐ（登録商標）等のＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．によるＣｉｔｒｉｘ  Ｗｏｒｋｓｐａｃｅ  ＳｕｉｔｅＴＭの任意の部分、および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ製のＭｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）
Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓのうちのいずれかをアプリケーションとして実行する。一実施形態では、アプリケーションは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発されたＩＣＡクライアントである。他の実施形態では、アプリケーションは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって開発された遠隔デスクトップ（ＲＤＰ）クライアントを含む。また、サーバ１０６は、例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製のＭｉｃｒｏｓｏｆｔ  Ｅｘｃｈａｎｇｅ等のＥメールサービスを提供するアプリケーションサーバ、ウェブまたはインターネットサーバ、またはデスクトップ共有サーバ、または協調サーバであり得る、アプリケーションを起動してもよい。いくつかの実施形態では、アプリケーションのうちのいずれかは、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって提供されるＧｏＴｏＭｅｅｔｉｎｇＴＭ、Ｃｉｓｃｏ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，  Ｃａｌｉｆｏｒｎｉａ）によって提供されるＷｅｂＥｘＴＭ、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）によって提供されるＭｉｃｒｏｓｏｆｔ  Ｏｆｆｉｃｅ  Ｌｉｖｅ  Ｍｅｅｔｉｎｇ等の任意のタイプのホスト型サービスまたは製品を備えてもよい。
【００４６】
依然として図１Ｄを参照すると、ネットワーク環境の実施形態は、監視サーバ１０６Ａを含んでもよい。監視サーバ１０６Ａは、任意のタイプおよび形態の性能監視サービス１９８を含んでもよい。性能監視サービス１９８は、データ収集、集約、分析、管理、および報告を含む、監視、測定、および／または管理ソフトウェアおよび／またはハードウェアを含んでもよい。一実施形態では、性能監視サービス１９８は、１つ以上の監視エージェント１９７を含む。監視エージェント１９７は、クライアント１０２、サーバ１０６、またはアプライアンス２００、２０５等のデバイス上の性能監視、測定、およびデータ収集アクティビティのための任意のソフトウェア、ハードウェア、またはそれらの組み合わせを含む。いくつかの実施形態では、監視エージェント１９７は、ＶｉｓｕａｌＢａｓｉｃスクリプトまたはＪａｖａ（登録商標）ｓｃｒｉｐｔ等の任意のタイプおよび形態のスクリプトを含む。一実施形態では、監視エージェント１９７は、デバイスの任意のアプリケーションおよび／またはユーザに透過的に実行される。いくつかの実施形態では、監視エージェント１９７は、アプリケーションまたはクライアントに邪魔にならないようにインストールおよび動作される。さらに別の実施形態では、監視エージェント１９７は、アプリケーションまたはデバイスのためのいかなる計装も伴わずにインストールおよび動作される。
【００４７】
いくつかの実施形態では、監視エージェント１９７は、事前決定された頻度でデータを監視、測定、および収集する。他の実施形態では、監視エージェント１９７は、任意のタイプおよび形態のイベントの検出に基づいて、データを監視、測定、および収集する。例えば、監視エージェント１９７は、ウェブページの要求またはＨＴＴＰ応答の受信の検出に応じて、データを収集してもよい。別の実施例では、監視エージェント１９７は、マウスのクリック等の任意のユーザ入力イベントの検出に応じて、データを収集してもよい。監視エージェント１９７は、任意の監視、測定、または収集されたデータを監視サービス１９８に報告または提供してもよい。一実施形態では、監視エージェント１９７は、スケジュールまたは事前決定された頻度に従って、情報を監視サービス１９８に伝送する。別の実施形態では、監視エージェント１９７は、イベントの検出に応じて、情報を監視サービス１９８に伝送する。
【００４８】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント、サーバ、サーバファーム、アプライアンス２００、アプライアンス２０５、またはネットワーク接続等の任意のネットワークリソースまたはネットワークインフラストラクチャ要素の監視および性能測定を実施する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＴＣＰまたはＵＤＰ接続等の任意のトランスポート層接続の監視および性能測定を実施する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ネットワーク待ち時間を監視および測定する。さらに１つの実施形態では、監視サービス１９８および／または監視エージェント１９７は、帯域幅利用を監視および測定する。
【００４９】
他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、エンドユーザ応答時間を監視および測定する。いくつかの実施形態では、監視サービス１９８は、アプリケーションの監視および性能測定を実施する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションへの任意のセッションまたは接続の監視および性能測定を実施する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ブラウザの性能を監視および測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、トランザクションに基づいてＨＴＴＰの性能を監視および測定する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、ボイスオーバーＩＰ（ＶｏＩＰ）アプリケーションまたはセッションの性能を監視および測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ＩＣＡクライアントまたはＲＤＰクライアント等の遠隔表示プロトコルアプリケーションの性能を監視および測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のストリーミングメディアの性能を監視および測定する。なおもさらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、ホスト型アプリケーションまたはＳｏｆｔｗａｒｅ−Ａｓ−Ａ−Ｓｅｒｖｉｃｅ（ＳａａＳ）配信モデルの性能を監視および測定する。
【００５０】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションに関連する１つ以上のトランザクション、要求、または応答の監視および性能測定を実施する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の．ＮＥＴまたはＪ２ＥＥコール等のアプリケーション層スタックの任意の部分を監視および測定する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、データベースまたはＳＱＬトランザクションを監視および測定する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意の方法、機能、またはアプリケーションプログラミングインターフェース（ＡＰＩ）コールを監視および測定する。
【００５１】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプライアンス２００および／またはアプライアンス２０５等の１つ以上のアプライアンスを介した、サーバからクライアントへのアプリケーションおよび／またはデータの配信の監視および性能測定を実施する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、仮想化されたアプリケーションの配信の性能を監視および測定する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ストリーミングアプリケーションの配信の性能を監視および測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアントへのデスクトップアプリケーションの配信および／またはクライアント上のデスクトップアプリケーションの実行の性能を監視および測定する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、クライアント／サーバアプリケーションの性能を監視および測定する。
【００５２】
一実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０のためのアプリケーション性能管理を提供するように設計および構築される。例えば、監視サービス１９８および／または監視エージェント１９７は、Ｃｉｔｒｉｘ提示サーバを介したアプリケーションの配信の性能を監視、測定、および管理してもよい。本実施例では、監視サービス１９８および／または監視エージェント１９７は、個々のＩＣＡセッションを監視する。監視サービス１９８および／または監視エージェント１９７は、合計またはセッションあたりのセッションシステムリソース利用、およびアプリケーションおよびネットワーキング性能を測定してもよい。監視サービス１９８および／または監視エージェント１９７は、所与のユーザおよび／またはユーザセッションのためのアクティブなサーバを識別してもよい。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション配信システム１９０とアプリケーションおよび／またはデータベースサーバとの間のバックエンド接続を監視する。監視サービス１９８および／または監視エージェント１９７は、ユーザセッションまたはＩＣＡセッションあたりのネットワーク待ち時間、遅延、および量を測定してもよい。
【００５３】
いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、合計メモリ使用量、ユーザセッションあたり、および／またはプロセスあたりの使用量等のアプリケーション配信システム１９０のためのメモリ使用量を測定および監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、合計ＣＰＵ使用量、ユーザセッションあたり、および／またはプロセスあたりの使用量等のアプリケーション配信システム１９０のＣＰＵ使用量を測定および監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション、サーバ、またはＣｉｔｒｉｘ提示サーバ等のアプリケーション配信システムにログインするために要求される時間を測定および監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザがアプリケーション、サーバ、またはアプリケーション配信システム１９０にログインされる持続時間を測定および監視する。いくつかの実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーション、サーバ、またはアプリケーション配信システムセッションのためのアクティブおよび非アクティブなセッション数を測定および監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、ユーザセッション待ち時間を測定および監視する。
【００５４】
その上さらなる実施形態では、監視サービス１９８および／または監視エージェント１９７は、任意のタイプおよび形態のサーバメトリックを測定および監視する。一実施形態では、監視サービス１９８および／または監視エージェント１９７は、システムメモリ、ＣＰＵ使用量、およびディスク記憶に関連するメトリックを測定および監視する。別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、１秒あたりのページフォールト等のページフォールトに関連するメトリックを測定および監視する。他の実施形態では、監視サービス１９８および／または監視エージェント１９７は、往復時間メトリックを測定および監視する。さらに別の実施形態では、監視サービス１９８および／または監視エージェント１９７は、アプリケーションクラッシュ、エラー、および／またはハングに関連するメトリックを測定および監視する。
【００５５】
いくつかの実施形態では、監視サービス１９８および監視エージェント１９７は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）製のＥｄｇｅＳｉｇｈｔと称される、製品実施形態のうちのいずれかを含む。別の実施形態では、性能監視サービス１９８および／または監視エージェント１９７は、Ｓｙｍｐｈｏｎｉｑ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｐａｌｏ  Ａｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｒｕｅＶｉｅｗ製品一式と称される、製品実施形態の任意の部分を含む。一実施形態では、性能監視サービス１９８および／または監視エージェント１９７は、ＴｅａＬｅａｆ  Ｔｅｃｈｎｏｌｏｇｙ  Ｉｎｃ．（Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  Ｃａｌｉｆｏｒｎｉａ）製のＴｅａＬｅａｆ  ＣＸ製品一式と称される、製品実施形態の任意の部分を含む。他の実施形態では、性能監視サービス１９８および／または監視エージェント１９７は、ＢＭＣ  Ｓｏｆｔｗａｒｅ，  Ｉｎｃ．（Ｈｏｕｓｔｏｎ，  Ｔｅｘａｓ）製のＢＭＣＰｅｒｆｏｒｍａｎｃｅ  ＭａｎａｇｅｒおよびＰａｔｒｏｌ製品等のビジネスサービス管理製品の任意の部分を含む。
【００５６】
クライアント１０２、サーバ１０６、およびアプライアンス２００は、任意のタイプおよび形態のネットワーク上で通信し、本明細書に説明される動作を実施することが可能なコンピュータ、ネットワークデバイス、またはアプライアンス等の任意のタイプおよび形態のコンピューティングデバイスとして、展開される、および／またはその上で実行されてもよい。図１Ｅおよび１Ｆは、クライアント１０２、サーバ１０６、またはアプライアンス２００の実施形態を実践するために有用なコンピューティングデバイス１００のブロック図を描写する。図１Ｅおよび１Ｆに示されるように、各コンピューティングデバイス１００は、中央処理ユニット１０１と、メインメモリユニット１２２を含む。図１Ｅに示されるように、コンピューティングデバイス１００は、視覚ディスプレイデバイス１２４、キーボード１２６、および／またはマウス等のポインティングデバイス１２７を含んでもよい。各コンピューティングデバイス１００はまた、１つ以上の入出力デバイス１３０ａ−１３０ｂ（概して、参照番号１３０を使用して参照される）等の付加的な随意の要素と、中央処理ユニット１０１と通信するキャッシュメモリ１４０とを含んでもよい。
【００５７】
中央処理ユニット１０１は、メインメモリユニット１２２からフェッチされる命令に応答し、それを処理する、任意の論理回路である。多くの実施形態では、中央処理ユニットは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｍｏｕｎｔａｉｎ  Ｖｉｅｗ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓｃｈａｕｍｂｕｒｇ，  Ｉｌｌｉｎｏｉｓ）製のもの、Ｔｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓａｎｔａ  Ｃｌａｒａ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、ＲＳ／６０００プロセッサ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ｗｈｉｔｅ  Ｐｌａｉｎｓ，  Ｎｅｗ  Ｙｏｒｋ）製のもの、またはＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａ）製のもの等のマイクロプロセッサユニットによって提供される。コンピューティングデバイス１００は、これらのプロセッサのうちのいずれか、または本明細書に説明されるように動作することが可能な任意の他のプロセッサに基づいてもよい。
【００５８】
メインメモリユニット１２２は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バーストＳＲＡＭまたは同期バーストＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、高速ページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、拡張データ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）、拡張データ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バースト拡張データ出力ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、強化ＤＲＡＭ（ＥＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、強化ＳＤＲＡＭ（ＥＳＤＲＡＭ）、同期リンクＤＲＡＭ（ＳＬＤＲＡＭ）、直接ＲａｍｂｕｓＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘電体ＲＡＭ（ＦＲＡＭ（登録商標））等のデータを記憶し、任意の記憶場所がマイクロプロセッサ１０１によって直接アクセスされることを可能にすることが可能である１つ以上のメモリチップであってもよい。メインメモリ１２２は、上記に説明されるメモリチップのうちのいずれか、または本明細書に説明されるように動作することが可能である任意の他の利用可能なメモリチップに基づいてもよい。図１Ｅに示される実施形態では、プロセッサ１０１は、システムバス１５０を介してメインメモリ１２２と通信する（下記でより詳細に説明される）。図１Ｆは、プロセッサがメモリポート１０３を介してメインメモリ１２２と直接通信する、コンピューティングデバイス１００の実施形態を描写する。例えば、図１Ｆでは、メインメモリ１２２は、ＤＲＤＲＡＭであってもよい。
【００５９】
図１Ｆは、メインプロセッサ１０１が、時として、バックサイドバスと呼ばれることもある二次バスを介して、キャッシュメモリ１４０と直接通信する、実施形態を描写する。他の実施形態では、メインプロセッサ１０１は、システムバス１５０を使用して、キャッシュメモリ１４０と通信する。キャッシュメモリ１４０は、典型的には、メインメモリ１２２よりも速い応答時間を有し、典型的には、ＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。図１Ｆに示される実施形態では、プロセッサ１０１は、ローカルシステムバス１５０を介して種々のＩ／Ｏデバイス１３０と通信する。ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕＢｕｓを含む、種々のバスが、中央処理ユニット１０１をＩ／Ｏデバイス１３０のうちのいずれかに接続するために、使用されてもよい。Ｉ／Ｏデバイスがビデオディスプレイ１２４である、実施形態に関して、プロセッサ１０１は、先進グラフィックスポート（ＡＧＰ）を使用し、ディスプレイ１２４と通信してもよい。図１Ｆは、メインプロセッサ１０１が、ハイパートランスポート、高速Ｉ／Ｏ、またはＩｎｆｉｎｉＢａｎｄを介してＩ／Ｏデバイス１３０ｂと直接通信する、コンピュータ１００の実施形態を描写する。図１Ｆはまた、ローカルバスおよび直接通信が混合される、実施形態も描写し、プロセッサ１０１は、Ｉ／Ｏデバイス１３０ａと直接通信しながら、ローカル相互接続を使用して、Ｉ／Ｏデバイス１３０ｂと通信する。
【００６０】
コンピューティングデバイス１００は、３．５インチ、５．２５インチディスク、またはＺＩＰディスク等のフロッピー（登録商標）ディスクを受容するためのフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、種々のフォーマットのテープドライブ、ＵＳＢデバイス、ハードドライブ、または任意のクライアントエージェント１２０またはその一部等のソフトウェアおよびプログラムをインストールするために好適な任意の他のデバイス等の任意の好適なインストールデバイス１１６をサポートしてもよい。コンピューティングデバイス１００はさらに、オペレーティングシステムおよび他の関連ソフトウェアを記憶するため、およびクライアントエージェント１２０に関連する任意のプログラム等のアプリケーションソフトウェアプログラムを記憶するための１つ以上のハードディスクドライブまたは独立したディスクの冗長アレイ等の記憶デバイス１２８を備えてもよい。随意に、インストールデバイス１１６のうちのいずれかはまた、記憶デバイス１２８としても使用され得る。加えて、オペレーティングシステムおよびソフトウェアは、ブータブル媒体、例えば、ＫＮＯＰＰＩＸ（登録商標）等のブータブルＣＤ、ｋｎｏｐｐｉｘ．ｎｅｔからＧＮＵ／Ｌｉｎｕｘ（登録商標）配布として利用可能であるＧＮＵ／Ｌｉｎｕｘ（登録商標）用のブータブルＣＤから起動されることができる。
【００６１】
さらに、コンピューティングデバイス１００は、限定ではないが、標準電話回線、ＬＡＮまたはＷＡＮリンク（例えば、８０２．１１、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、広帯域接続（例えば、ＩＳＤＮ、フレームリレー、ＡＴＭ）、無線接続、または上記のうちのいずれかまたは全てのある組み合わせを含む、種々の接続を通して、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、またはインターネットとインターフェースをとるためのネットワークインターフェース１１８を含んでもよい。ネットワークインターフェース１１８は、内蔵ネットワークアダプタ、ネットワークインターフェースカード、ＰＣＭＣＩＡネットワークカード、カードバスネットワークアダプタ、無線ネットワークアダプタ、ＵＳＢネットワークアダプタ、モデム、または通信および本明細書に説明される動作を実施することが可能である任意のタイプのネットワークにコンピューティングデバイス１００のインターフェースをとるために好適な任意の他のデバイスを備えてもよい。
【００６２】
多種多様のＩ／Ｏデバイス１３０ａ−１３０ｎは、コンピューティングデバイス１００の中に存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、およびドローイングタブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および染料昇華型プリンタを含む。Ｉ／Ｏデバイス１３０は、図１Ｅに示されるように、Ｉ／Ｏコントローラ１２３によって制御されてもよい。Ｉ／Ｏコントローラは、キーボード１２６等の１つ以上のＩ／Ｏデバイス、およびポインティングデバイス１２７、例えば、マウスまたは光学ペンを制御してもよい。さらに、Ｉ／Ｏデバイスはまた、コンピューティングデバイス１００用の記憶装置１２８および／またはインストール媒体１１６を提供してもよい。なおも他の実施形態では、コンピューティングデバイス１００は、ＵＳＢ接続を提供し、Ｔｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，  Ｉｎｃ．（Ｌｏｓ  Ａｌａｍｉｔｏｓ，  Ｃａｌｉｆｏｒｎｉａ）製のＵＳＢフラッシュドライブラインのデバイス等のハンドヘルドＵＳＢ記憶デバイスを受容してもよい。
【００６３】
いくつかの実施形態では、コンピューティングデバイス１００は、それぞれ同一または異なるタイプおよび／または形態であり得る、複数のディスプレイデバイス１２４ａ−１２４ｎを備える、またはそれに接続されてもよい。したがって、Ｉ／Ｏデバイス１３０ａ−１３０ｎおよび／またはＩ／Ｏコントローラ１２３のうちのいずれかは、コンピューティングデバイス１００による複数のディスプレイデバイス１２４ａ−１２４ｎの接続および使用をサポートする、有効にする、または提供するための任意のタイプおよび／または形態の好適なハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを備えてもよい。例えば、コンピューティングデバイス１００は、ディスプレイデバイス１２４ａ−１２４ｎとインターフェースをとる、通信する、それを接続する、または別様に使用するための任意のタイプおよび／または形態のビデオアダプタ、ビデオカード、ドライバ、および／またはライブラリを含んでもよい。一実施形態では、ビデオアダプタは、複数のディスプレイデバイス１２４ａ−１２４ｎとインターフェースをとるための複数のコネクタを備えてもよい。他の実施形態では、コンピューティングデバイス１００は、各ビデオアダプタがディスプレイデバイス１２４ａ−１２４ｎのうちの１つ以上のものに接続される、複数のビデオアダプタを含んでもよい。いくつかの実施形態では、コンピューティングデバイス１００のオペレーティングシステムの任意の部分は、複数のディスプレイ１２４ａ−１２４ｎを使用するために構成されてもよい。他の実施形態では、ディスプレイデバイス１２４ａ−１２４ｎのうちの１つ以上のものは、例えば、ネットワークを介して、コンピューティングデバイス１００に接続されるコンピューティングデバイス１００ａおよび１００ｂ等の１つ以上の他のコンピューティングデバイスによって提供されてもよい。これらの実施形態は、コンピューティングデバイス１００用の第２のディスプレイデバイス１２４ａとして別のコンピュータのディスプレイデバイスを使用するように設計および構築される、任意のタイプのソフトウェアを含んでもよい。当業者は、コンピューティングデバイス１００が複数のディスプレイデバイス１２４ａ−１２４ｎを有するように構成され得る、種々の方法および実施形態を認識および理解するであろう。
【００６４】
さらなる実施形態では、Ｉ／Ｏデバイス１３０は、システムバス１５０と、ＵＳＢバス、Ａｐｐｌｅ  Ｄｅｓｋｔｏｐバス、ＲＳ−２３２シリアル接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅバス、ＦｉｒｅＷｉｒｅ  ８００バス、イーサネット（登録商標）バス、ＡｐｐｌｅＴａｌｋバス、ギガビットイーサネット（登録商標）バス、非同期転送モードバス、ＨＩＰＰＩバス、Ｓｕｐｅｒ  ＨＩＰＰＩバス、ＳｅｒｉａｌＰｌｕｓバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはＳｅｒｉａｌ  Ａｔｔａｃｈｅｄ小型コンピュータシステムインターフェースバス等の外部通信バスとの間のブリッジ１７０であってもよい。
【００６５】
図１Ｅおよび１Ｆに描写される種類のコンピューティングデバイス１００は、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。コンピューティングデバイス１００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃＯＳ（登録商標）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専用オペレーティングシステム、モバイルコンピューティングデバイス用の任意のオペレーティングシステム、またはコンピューティングデバイス上で起動し、本明細書に説明される動作を実施することが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。典型的オペレーティングシステムは、とりわけ、全てＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎ）製である、ＷＩＮＤＯＷＳ（登録商標）  ３．ｘ、ＷＩＮＤＯＷＳ（登録商標）  ９５、ＷＩＮＤＯＷＳ（登録商標）  ９８、ＷＩＮＤＯＷＳ（登録商標）
２０００、ＷＩＮＤＯＷＳ（登録商標）  ＮＴ  ３．５１、ＷＩＮＤＯＷＳ（登録商標）  ＮＴ  ４．０、ＷＩＮＤＯＷＳ（登録商標）  ＣＥ、およびＷＩＮＤＯＷＳ（登録商標）  ＸＰ、Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ（Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉ）製のＭａｃＯＳ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ａｒｍｏｎｋ，  Ｎｅｗ  Ｙｏｒｋ）製のＯＳ／２、およびＣａｌｄｅｒａ  Ｃｏｒｐ．（Ｓａｌｔ  Ｌａｋｅ  Ｃｉｔｙ，  Ｕｔａｈ）によって配布される無料で入手可能なオペレーティングシステムであるＬｉｎｕｘ（登録商標）、または任意のタイプおよび／または形態のＵＮＩＸ（登録商標）オペレーティングシステムを含む。
【００６６】
他の実施形態では、コンピューティングデバイス１００は、本デバイスと一致する、異なるプロセッサ、オペレーティングシステム、および入力デバイスを有してもよい。例えば、一実施形態では、コンピュータ１００は、Ｐａｌｍ，  Ｉｎｃ．製のＴｒｅｏ  １８０、２７０、１０６０、６００、または６５０スマートフォンである。本実施形態では、Ｔｒｅｏスマートフォンは、ＰａｌｍＯＳオペレーティングシステムの制御下で動作され、スタイラス入力デバイスおよび５方向ナビゲータデバイスを含む。また、コンピューティングデバイス１００は、任意のワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、任意の他のコンピュータ、または通信が可能であり、本明細書に説明される動作を実施するために十分なプロセッサ能力およびメモリ容量を有する、他の形態のコンピューティングまたは電気通信デバイスであり得る。
【００６７】
図１Ｇに示されるように、コンピューティングデバイス１００は、複数のプロセッサを備えてもよく、命令の同時実行のため、または１つを上回るデータ上の１つの命令の同時実行のための機能性を提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つ以上のコアを伴う並列プロセッサを備えてもよい。これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、単一のグローバルアドレス空間として全ての利用可能なメモリにアクセスする、複数のプロセッサおよび／または複数のプロセッサコアを伴う、共有メモリ並列デバイスである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、それぞれローカルメモリのみにアクセスする複数のプロセッサを伴う分散メモリ並列デバイスである。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、共有されるあるメモリと、特定のプロセッサまたはプロセッサのサブセットのみによってアクセスされ得るあるメモリとの両方を有する。これらの実施形態のうちのなおもさらに別のものでは、マルチコアマイクロプロセッサ等のコンピューティングデバイス１００は、２つ以上の独立プロセッサを、単一のパッケージ、多くの場合、単一の集積回路（ＩＣ）に組み合わせる。これらの実施形態のうちのさらに別のものでは、コンピューティングデバイス１００は、ＣＥＬＬ  ＢＲＯＡＤＢＡＮＤ  ＥＮＧＩＮＥアーキテクチャを有し、電力プロセッサ要素および複数の相乗処理要素であって、要素相互接続バスと称され得る、内部高速バスによってともにリンクされる、電力プロセッサ要素および複数の相乗処理要素を含む、チップを含む。
【００６８】
いくつかの実施形態では、プロセッサは、複数のデータ上で同時に単一の命令を実行するための機能性（ＳＩＭＤ）を提供する。他の実施形態では、プロセッサは、複数のデータ上で同時に複数の命令を実行するための機能性（ＭＩＭＤ）を提供する。なおも他の実施形態では、プロセッサは、単一のデバイス内のＳＩＭＤおよびＭＩＭＤコアの任意の組み合わせを使用してもよい。
【００６９】
いくつかの実施形態では、コンピューティングデバイス１００は、グラフィックス処理ユニットを備えてもよい。図１Ｈに描写される、これらの実施形態のうちの１つでは、コンピューティングデバイス１００は、少なくとも１つの中央処理ユニット１０１と、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、少なくとも１つの並列処理ユニットと、少なくとも１つのグラフィックス処理ユニットとを含む。これらの実施形態のうちのなおも別のものでは、コンピューティングデバイス１００は、任意のタイプの複数の処理ユニットを含み、複数の処理ユニットのうちの１つは、グラフィックス処理ユニットを備える。
【００７０】
いくつかの実施形態では、第１のコンピューティングデバイス１００ａは、クライアントコンピューティングデバイス１００ｂのユーザの代わりにアプリケーションを実行する。他の実施形態では、コンピューティングデバイス１００ａは、その中でユーザまたはクライアントコンピューティングデバイス１００ｂの代わりにアプリケーションが実行される、実行セッションを提供する、仮想マシンを実行する。これらの実施形態のうちの１つでは、実行セッションは、ホスト型デスクトップセッションである。これらの実施形態のうちの別のものでは、コンピューティングデバイス１００は、端末サービスセッションを実行する。端末サービスセッションは、ホスト型デスクトップ環境を提供してもよい。これらの実施形態のうちのなおも別のものでは、実行セッションは、アプリケーション、複数のアプリケーション、デスクトップアプリケーション、および１つ以上のアプリケーションが実行され得るデスクトップセッションのうちの１つ以上のものを備え得る、コンピューティング環境へのアクセスを提供する。
Ｂ．アプライアンスアーキテクチャ
【００７１】
図２Ａは、アプライアンス２００の例示的実施形態を図示する。図２Ａのアプライアンス２００のアーキテクチャは、例証のみとして提供され、限定的であることを意図していない。図２に示されるように、アプライアンス２００は、ハードウェア層２０６と、ユーザ空間２０２およびカーネル空間２０４に分割されるソフトウェア層とを備える。
【００７２】
ハードウェア層２０６は、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスが実行される、ハードウェア要素を提供する。ハードウェア層２０６はまた、カーネル空間２０４およびユーザ空間２０２内のプログラムおよびサービスがアプライアンス２００に対して内部および外部の両方でデータを通信することを可能にする、構造および要素も提供する。図２に示されるように、ハードウェア層２０６は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット２６２と、ソフトウェアおよびデータを記憶するためのメモリ２６４と、ネットワークを経由してデータを伝送および受信するためのネットワークポート２６６と、ネットワークを経由して伝送および受信されるデータのセキュアソケットレイヤー処理に関連する機能を果たすための暗号化プロセッサ２６０とを含む。いくつかの実施形態では、中央処理ユニット２６２は、単一のプロセッサ内の暗号化プロセッサ２６０の機能を果たしてもよい。加えて、ハードウェア層２０６は、処理ユニット２６２および暗号化プロセッサ２６０毎に複数のプロセッサを備えてもよい。プロセッサ２６２は、図１Ｅおよび１Ｆに関連して上記に説明されるプロセッサ１０１のうちのいずれかを含んでもよい。例えば、一実施形態では、アプライアンス２００は、第１のプロセッサ２６２と、第２のプロセッサ２６２’とを備える。他の実施形態では、プロセッサ２６２または２６２’は、マルチコアプロセッサを備える。
【００７３】
アプライアンス２００のハードウェア層２０６は、概して、暗号化プロセッサ２６０を伴って図示されるが、プロセッサ２６０は、セキュアソケットレイヤー（ＳＳＬ）またはトランスポート層セキュリティ（ＴＬＳ）プロトコル等の任意の暗号化プロトコルに関連する機能を果たすためのプロセッサであってもよい。いくつかの実施形態では、プロセッサ２６０は、汎用プロセッサ（ＧＰＰ）であってもよく、さらなる実施形態では、任意のセキュリティ関連プロトコルの処理を実施するための実行可能命令を有してもよい。
【００７４】
アプライアンス２００のハードウェア層２０６は、図２にある要素を伴って図示されるが、アプライアンス２００のハードウェア部分またはコンポーネントは、図１Ｅおよび１Ｆと併せて本明細書に図示および議論されるコンピューティングデバイス１００等のコンピューティングデバイスの任意のタイプおよび形態の要素、ハードウェア、またはソフトウェアを備えてもよい。いくつかの実施形態では、アプライアンス２００は、サーバ、ゲートウェイ、ルータ、スイッチ、ブリッジ、または他のタイプのコンピューティングまたはネットワークデバイスを備え、それと関連付けられる任意のハードウェアおよび／またはソフトウェア要素を有してもよい。
【００７５】
アプライアンス２００のオペレーティングシステムは、利用可能なシステムメモリをカーネル空間２０４およびユーザ空間２０４に配分、管理、または別様に隔離する。例示的ソフトウェアアーキテクチャ２００では、オペレーティングシステムは、任意のタイプおよび／または形態のＵＮＩＸ（登録商標）オペレーティングシステムであってもよいが、説明される実施形態は、そのように限定されない。したがって、アプライアンス２００は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのうちのいずれか、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘ（登録商標）オペレーティングシステムの異なるリリース、Ｍａｃｉｎｔｏｓｈコンピュータ用のＭａｃ  ＯＳ（登録商標）の任意のバージョン、任意の組み込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専用オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、またはアプライアンス２００で起動し、本明細書に説明される動作を実施することが可能な任意の他のオペレーティングシステム等の任意のオペレーティングシステムを起動することができる。
【００７６】
カーネル空間２０４は、任意のデバイスドライバ、カーネル拡張、または他のカーネル関連ソフトウェアを含む、カーネル２３０を起動するために留保される。当業者に公知であるように、カーネル２３０は、オペレーティングシステムのコアであり、アプリケーション１０４のリソースおよびハードウェア関連要素のアクセス、制御、および管理を提供する。アプライアンス２００の実施形態によると、カーネル空間２０４はまた、時として、統合キャッシュと呼ばれることもある、キャッシュマネージャ２３２と併せて稼働するいくつかのネットワークサービスまたはプロセスも含み、その利益は、本明細書でさらに詳細に説明される。加えて、カーネル２３０の実施形態は、デバイス２００によってインストール、構成、または別様に使用されるオペレーティングシステムの実施形態に依存するであろう。
【００７７】
一実施形態では、デバイス２００は、クライアント１０２および／またはサーバ１０６と通信するためのＴＣＰ／ＩＰベースのスタック等の１つのネットワークスタック２６７を備える。一実施形態では、ネットワークスタック２６７は、ネットワーク１０８等の第１のネットワークおよび第２のネットワーク１１０と通信するために使用される。いくつかの実施形態では、デバイス２００は、クライアント１０２のＴＣＰ接続等の第１のトランスポート層接続を終了し、クライアント１０２による使用のためにサーバ１０６への第２のトランスポート層接続を確立し、例えば、第２のトランスポート層接続は、アプライアンス２００およびサーバ１０６において終了される。第１および第２のトランスポート層接続は、単一のネットワークスタック２６７を介して確立されてもよい。他の実施形態では、デバイス２００は、複数のネットワークスタック、例えば、２６７および２６７’を備えてもよく、第１のトランスポート層接続は、１つのネットワークスタック２６７において、第２のトランスポート層接続は、第２のネットワークスタック２６７’上で、確立または終了されてもよい。例えば、１つのネットワークスタックは、第１のネットワーク上でネットワークパケットを受信および伝送するためのものであってもく、別のネットワークスタックは、第２のネットワーク上でネットワークパケットを受信および伝送するためのものであってもよい。一実施形態では、ネットワークスタック２６７は、アプライアンス２００による伝送のために１つ以上のネットワークパケットを待ち行列に入れるためのバッファ２４３を備える。
【００７８】
図２に示されるように、カーネル空間２０４は、キャッシュマネージャ２３２と、高速層２−７統合パケットエンジン２４０と、暗号化エンジン２３４と、ポリシエンジン２３６と、マルチプロトコル圧縮論理２３８とを含む。ユーザ空間２０２の代わりにカーネル空間２０４またはカーネルモードでこれらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８を起動することは、単独でまたは組み合わせて、これらのコンポーネントのそれぞれの性能を改良する。カーネル動作は、これらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８が、デバイス２００のオペレーティングシステムのコアアドレス空間内で起動することを意味する。例えば、カーネルモードで暗号化エンジン２３４を起動させることは、暗号化および暗号解読動作をカーネルまで移動させることによって暗号化性能を改良し、それによって、カーネルモードにおけるメモリ空間またはカーネルスレッドとユーザモードにおけるメモリ空間またはスレッドとの間の遷移の数を削減する。例えば、カーネルモードで入手されるデータは、カーネルレベルデータ構造からユーザレベルデータ構造まで等、ユーザモードで起動するプロセスまたはスレッドにパスまたはコピーされる必要がない場合がある。別の側面では、カーネルモードとユーザモードとの間のコンテキスト切替の数もまた、削減される。加えて、コンポーネントまたはプロセス２３２、２４０、２３５、２３６、および２３８のうちのいずれかの同期化およびその間の通信は、カーネル空間２０４内でより効率的に実施されることができる。
【００７９】
いくつかの実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８の任意の部分が、カーネル空間２０４内で起動または動作してもよい一方で、これらのコンポーネント２３２、２４０、２３４、２３６、および２３８の他の部分は、ユーザ空間２０２内で起動または動作してもよい。一実施形態では、アプライアンス２００は、１つ以上のネットワークパケットの任意の部分、例えば、クライアント１０２からの要求またはサーバ１０６からの応答を備える、ネットワークパケットへのアクセスを提供する、カーネルレベルデータ構造を使用する。いくつかの実施形態では、カーネルレベルデータ構造は、ネットワークスタック２６７へのトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン２４０によって入手されてもよい。カーネルレベルデータ構造は、ネットワークスタック２６７に関連するカーネル空間２０４を介してアクセス可能な任意のインターフェースおよび／またはデータ、ネットワークスタック２６７によって受信または伝送されるネットワークトラフィックまたはパケットを備えてもよい。他の実施形態では、カーネルレベルデータ構造は、コンポーネントまたはプロセスの所望の動作を実施するために、コンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８のうちのいずれかによって使用されてもよい。一実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８が、カーネルレベルデータ構造を使用するときにカーネルモード２０４で起動している一方で、別の実施形態では、コンポーネント２３２、２４０、２３４、２３６、および２３８は、カーネルレベルデータ構造を使用するときにユーザモードで起動している。いくつかの実施形態では、カーネルレベルデータ構造は、第２のカーネルレベルデータ構造または任意の所望のユーザレベルデータ構造にコピーまたはパスされてもよい。
【００８０】
キャッシュマネージャ２３２は、発信元サーバ１０６によって供給されるオブジェクトまたは動的に生成されるオブジェクト等の任意のタイプおよび形態のコンテンツのキャッシュアクセス、制御、および管理を提供するためのソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。キャッシュマネージャ２３２によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、マークアップ言語等の任意の形態のデータを備える、または任意のプロトコルを介して通信されてもよい。いくつかの実施形態では、キャッシュマネージャ２３２は、オリジナルデータが、キャッシュメモリ要素を読み取ることに対して、フェッチ、算出、または別様に入手するためにより長いアクセス時間を要求し得る、他の場所に記憶されたオリジナルデータ、または前もって算出、生成、または伝送されたデータを複製する。いったんデータがキャッシュメモリ要素の中に記憶されると、将来の使用は、オリジナルデータを再フェッチまたは再算出するのではなく、キャッシュされたコピーにアクセスすることによって行われることができ、それによって、アクセス時間を短縮する。いくつかの実施形態では、キャッシュメモリ要素は、デバイス２００のメモリ２６４内のデータオブジェクトを備えてもよい。他の実施形態では、キャッシュメモリ要素は、メモリ２６４よりも速いアクセス時間を有するメモリを備えてもよい。別の実施形態では、キャッシュメモリ要素は、ハードディスクの一部等のデバイス２００の任意のタイプおよび形態の記憶要素を備えてもよい。いくつかの実施形態では、処理ユニット２６２は、キャッシュマネージャ２３２による使用のためのキャッシュメモリを提供してもよい。その上さらなる実施形態では、キャッシュマネージャ２３２は、データ、オブジェクト、および他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組み合わせを使用してもよい。
【００８１】
さらに、キャッシュマネージャ２３２は、本明細書に説明されるアプライアンス２００の技法の任意の実施形態を実施するための任意の論理、機能、規則、または動作を含む。例えば、キャッシュマネージャ２３２は、無効化時間周期の満了に基づいて、またはクライアント１０２またはサーバ１０６からの無効化コマンドの受信に応じて、オブジェクトを無効化するための論理または機能性を含む。いくつかの実施形態では、キャッシュマネージャ２３２は、カーネル空間２０４内で、他の実施形態では、ユーザ空間２０２内で実行されるプログラム、サービス、プロセス、またはタスクとして動作してもよい。一実施形態では、キャッシュマネージャ２３２の第１の部分が、ユーザ空間２０２内で実行される一方で、第２の部分は、カーネル空間２０４内で実行される。いくつかの実施形態では、キャッシュマネージャ２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブル論理デバイス（ＰＬＤ）、または特定用途向け集積回路（ＡＳＩＣ）等の任意の他のタイプの集積回路を備えることができる。
【００８２】
ポリシエンジン２３６は、例えば、知的統計エンジンまたは他のプログラマブルアプリケーションを含んでもよい。一実施形態では、ポリシエンジン２３６は、ユーザがキャッシングポリシを識別、規定、定義、または構成することを可能にするための構成機構を提供する。ポリシエンジン２３６はまた、いくつかの実施形態では、メモリへのアクセスも有し、ルックアップテーブルまたはハッシュテーブル等のデータ構造をサポートし、ユーザ選択されたキャッシングポリシ決定を有効にする。他の実施形態では、ポリシエンジン２３６は、アクセス、セキュリティの制御および管理、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス２００によって実施される任意の他の機能または動作に加えて、アプライアンス２００によってキャッシュされているオブジェクト、データ、またはコンテンツのアクセス、制御、および管理を決定および提供するための任意の論理、規則、機能、または動作を備えてもよい。具体的キャッシングポリシのさらなる実施例が、本明細書にさらに説明される。
【００８３】
暗号化エンジン２３４は、ＳＳＬまたはＴＬＳまたはそれに関連する任意の機能等の任意のセキュリティ関連プロトコルの処理を取り扱うための任意の論理、ビジネス規則、機能、または動作を備える。例えば、暗号化エンジン２３４は、アプライアンス２００を介して通信されるネットワークパケットまたはその任意の部分を暗号化および暗号解読する。暗号化エンジン２３４はまた、クライアント１０２ａ−１０２ｎ、サーバ１０６ａ−１０６ｎ、またはアプライアンス２００の代わりに、ＳＳＬまたはＴＬＳ接続を設定または確立してもよい。したがって、暗号化エンジン２３４は、ＳＳＬ処理のオフロードおよび加速を提供する。一実施形態では、暗号化エンジン２３４は、トンネリングプロトコルを使用し、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間に仮想私設ネットワークを提供する。いくつかの実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０と通信する。他の実施形態では、暗号化エンジン２３４は、暗号化プロセッサ２６０上で起動する実行可能命令を備える。
【００８４】
マルチプロトコル圧縮エンジン２３８は、デバイス２００のネットワークスタック２６７によって使用されるプロトコルのうちのいずれか等のネットワークパケットの１つ以上のプロトコルを圧縮するための任意の論理、ビジネス規則、機能、または動作を備える。一実施形態では、マルチプロトコル圧縮エンジン２３８は、クライアント１０２ａ−１０２ｎとサーバ１０６ａ−１０６ｎとの間で双方向に、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（Ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルを圧縮する。他の実施形態では、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマークアップ言語（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、いくつかの実施形態では、拡張マークアップ言語（ＸＭＬ）等の任意のマークアップ言語の圧縮を提供する。一実施形態では、マルチプロトコル圧縮エンジン２３８は、アプライアンス２００とアプライアンス２００との通信のために設計される任意のプロトコル等の任意の高性能プロトコルの圧縮を提供する。別の実施形態では、マルチプロトコル圧縮エンジン２３８は、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の修正されたトランスポート制御プロトコルの任意のペイロード、またはそれを使用する任意の通信を圧縮する。
【００８５】
したがって、マルチプロトコル圧縮エンジン２３８は、デスクトップクライアント、例えば、Ｍｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋ、およびＯｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌのような頻用されている企業アプリケーションによって立ち上げられた任意のクライアント等の非ウェブシンクライアント、およびさらにポケットＰＣ等のモバイルクライアントを介して、アプリケーションにアクセスするユーザのための性能を加速する。いくつかの実施形態では、マルチプロトコル圧縮エンジン２３８は、カーネルモード２０４内で実行され、ネットワークスタック２６７にアクセスするパケット処理エンジン２４０と統合することによって、任意のアプリケーション層プロトコル等のＴＣＰ／ＩＰプロトコルによって搬送されるプロトコルのうちのいずれかを圧縮することができる。
【００８６】
概して、パケット処理エンジンまたはパケットエンジンとも称される、高速層２−７統合パケットエンジン２４０は、ネットワークポート２６６を介してアプライアンス２００によって受信および伝送されるパケットのカーネルレベル処理を管理することに関わる。高速層２−７統合パケットエンジン２４０は、ネットワークパケットの受信またはネットワークパケットの伝送のため等に、処理中に１つ以上のネットワークパケットを待ち行列に入れるためのバッファを備えてもよい。加えて、高速層２−７統合パケットエンジン２４０は、１つ以上のネットワークスタック２６７と通信し、ネットワークポート２６６を介してネットワークパケットを送信および受信する。高速層２−７統合パケットエンジン２４０は、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８と併せて稼働する。特に、暗号化エンジン２３４は、パケットのＳＳＬ処理を実施するように構成され、ポリシエンジン２３６は、要求レベルコンテンツ切替および要求レベルキャッシュリダイレクト等のトラフィック管理に関連する機能を果たすように構成され、マルチプロトコル圧縮論理２３８は、データの圧縮および展開に関連する機能を果たすように構成される。
【００８７】
高速層２−７統合パケットエンジン２４０は、パケット処理タイマ２４２を含む。一実施形態では、パケット処理タイマ２４２は、１つ以上の時間間隔を提供し、着信、すなわち、受信された、または発信、すなわち、伝送されたネットワークパケットの処理をトリガする。いくつかの実施形態では、高速層２−７統合パケットエンジン２４０は、タイマ２４２に応答してネットワークパケットを処理する。パケット処理タイマ２４２は、任意のタイプおよび形態の信号をパケットエンジン２４０に提供し、時間関連イベント、間隔、または発生を通知、トリガ、または通信する。多くの実施形態では、パケット処理タイマ２４２は、例えば、１００ミリ秒、５０ミリ秒、または２５ミリ秒等の数ミリ秒で動作する。例えば、いくつかの実施形態では、パケット処理タイマ２４２が、時間間隔を提供する、または別様に１０ミリ秒時間間隔において、一方で他の実施形態では、５ミリ秒時間間隔において、なおもその上さらなる実施形態では、３、２、または１ミリ秒時間間隔と同程度に短く、ネットワークパケットを高速層２−７統合パケットエンジン２４０によって処理させる。高速層２−７統合パケットエンジン２４０は、動作中に、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮エンジン２３８とインターフェースをとられる、統合される、または通信してもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかは、パケット処理タイマ２４２および／またはパケットエンジン２４０に応答して実施されてもよい。したがって、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、およびマルチプロトコル圧縮論理２３８の論理、機能、または動作のうちのいずれかは、パケット処理タイマ２４２を介して提供される時間間隔の粒度において、例えば、１０ミリ秒以下の時間間隔において、実施されてもよい。例えば、一実施形態では、キャッシュマネージャ２３２は、高速層２−７統合パケットエンジン２４０および／またはパケット処理タイマ２４２に応答して、任意のキャッシュされたオブジェクトの無効化を実施してもよい。別の実施形態では、キャッシュされたオブジェクトの満了または無効化時間は、１０ミリ秒毎等のパケット処理タイマ２４２の時間間隔と同一オーダーの粒度に設定されることができる。
【００８８】
カーネル空間２０４と対照的に、ユーザ空間２０２は、ユーザモードアプリケーションまたはユーザモードで別様に起動するプログラムによって使用される、オペレーティングシステムのメモリエリアまたは部分である。ユーザモードアプリケーションは、カーネル空間２０４に直接アクセスしない場合があり、カーネルサービスにアクセスするためにサービスコールを使用する。図２に示されるように、アプライアンス２００のユーザ空間２０２は、グラフィカルユーザインターフェース（ＧＵＩ）２１０と、コマンドラインインターフェース（ＣＬＩ）２１２と、シェルサービス２１４と、健全性監視プログラム２１６と、デーモンサービス２１８とを含む。ＧＵＩ２１０およびＣＬＩ２１２は、それによって、システム管理者または他のユーザが、アプライアンス２００のオペレーティングシステムを介して等、アプライアンス２００の動作と相互作用し、かつそれを制御し得る、手段を提供する。ＧＵＩ２１０またはＣＬＩ２１２は、ユーザ空間２０２またはカーネル空間２０４内で起動するコードを備えることができる。ＧＵＩ２１０は、任意のタイプおよび形態のグラフィカルユーザインターフェースであってもよく、テキスト、グラフィカルを介して、または別様にブラウザ等の任意のタイプのプログラムまたはアプリケーションによって、提示されてもよい。ＣＬＩ２１２は、オペレーティングシステムによって提供されるコマンドライン等の任意のタイプおよび形態のコマンドラインまたはテキストベースのインターフェースであってもよい。例えば、ＣＬＩ２１２は、ユーザがオペレーティングシステムと相互作用することを可能にするためのツールである、シェルを備えてもよい。いくつかの実施形態では、ＣＬＩ２１２は、ｂａｓｈ、ｃｓｈ、ｔｃｓｈ、またはｋｓｈタイプシェルを介して、提供されてもよい。シェルサービス２１４は、ＧＵＩ２１０および／またはＣＬＩ２１２を介したユーザによるアプライアンス２００またはオペレーティングシステムとの相互作用をサポートするためのプログラム、サービス、タスク、プロセス、または実行可能命令を備える。
【００８９】
健全性監視プログラム２１６は、ネットワークシステムが適切に機能しており、ユーザがネットワークを経由して要求されたコンテンツを受信していることを監視する、チェックする、報告する、および確実にするために使用される。健全性監視プログラム２１６は、アプライアンス２００の任意のアクティビティを監視するための論理、規則、機能、または動作を提供するための１つ以上のプログラム、サービス、タスク、プロセス、または実行可能命令を備える。いくつかの実施形態では、健全性監視プログラム２１６は、アプライアンス２００を介してパスされる任意のネットワークトラフィックを傍受および点検する。他の実施形態では、健全性監視プログラム２１６は、任意の好適な手段および／または機構によって、以下のうちの１つ以上のもの、すなわち、暗号化エンジン２３４、キャッシュマネージャ２３２、ポリシエンジン２３６、マルチプロトコル圧縮論理２３８、パケットエンジン２４０、デーモンサービス２１８、およびシェルサービス２１４とインターフェースをとる。したがって、健全性監視プログラム２１６は、任意のアプリケーションプログラミングインターフェース（ＡＰＩ）を呼び出し、アプライアンス２００の任意の部分の状態、ステータス、または健全性を決定してもよい。例えば、健全性監視プログラム２１６は、周期的にｐｉｎｇ送信し、またはステータス問い合わせを送信し、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在起動しているかどうかをチェックしてもよい。別の実施例では、健全性監視プログラム２１６は、任意のプログラム、プロセス、サービス、またはタスクによって提供される任意のステータス、エラー、または履歴ログをチェックし、アプライアンス２００の任意の部分との任意の状態、ステータス、またはエラーを決定してもよい。
【００９０】
デーモンサービス２１８は、連続的に、または背景で起動し、アプライアンス２００によって受信される周期的サービス要求を取り扱う、プログラムである。いくつかの実施形態では、デーモンサービスは、適宜、要求を別のデーモンサービス２１８等の他のプログラムまたはプロセスに転送してもよい。当業者に公知であるように、デーモンサービス２１８は、ネットワーク制御等の連続的または周期的なシステム全体の機能を果たすように、または任意の所望のタスクを実施するように、無人で起動してもよい。いくつかの実施形態では、１つ以上のデーモンサービス２１８が、ユーザ空間２０２内で起動する一方で、他の実施形態では、１つ以上のデーモンサービス２１８は、カーネル空間内で起動する。
【００９１】
ここで図２Ｂを参照すると、アプライアンス２００の別の実施形態が描写される。要するに、アプライアンス２００は、以下のサービス、機能性、または動作のうちの１つ以上のもの、すなわち、ＳＳＬ  ＶＰＮコネクティビティ２８０、切替／負荷分散２８４、ドメイン名サービス解決２８６、加速２８８、および１つ以上のクライアント１０２と１つ以上のサーバ１０６との間の通信用のアプリケーションファイアウォール２９０を提供する。サーバ１０６はそれぞれ、１つ以上のネットワーク関連サービス２７０ａ−２７０ｎ（サービス２７０と称される）を提供してもよい。例えば、サーバ１０６は、ｈｔｔｐサービス２７０を提供してもよい。アプライアンス２００は、ｖサーバ、ＶＩＰサーバ、または単にＶＩＰ２７５ａ−２７５ｎ（本明細書ではｖサーバ２７５とも称される）と称される、１つ以上の仮想サーバまたは仮想インターネットプロトコルサーバを備える。ｖサーバ２７５は、アプライアンス２００の構成および動作に従って、クライアント１０２とサーバ１０６との間の通信を受信、傍受、または別様に処理する。
【００９２】
ｖサーバ２７５は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。ｖサーバ２７５は、アプライアンス２００の中で、ユーザモード２０２、カーネルモード２０４、またはそれらの任意の組み合わせで動作する、任意のタイプおよび形態のプログラム、サービス、タスク、プロセス、または実行可能命令を備えてもよい。ｖサーバ２７５は、ＳＳＬ  ＶＰＮ２８０、切替／負荷分散２８４、ドメイン名サービス解決２８６、加速２８８、およびアプリケーションファイアウォール２９０等の本明細書に説明される技法の任意の実施形態を実施するための任意の論理、機能、規則、または動作を含む。いくつかの実施形態では、ｖサーバ２７５は、サーバ１０６のサービス２７０への接続を確立する。サービス２７５は、アプライアンス２００、クライアント１０２、またはｖサーバ２７５に接続および通信することが可能な任意のプログラム、アプリケーション、プロセス、タスク、または実行可能命令のセットを備えてもよい。例えば、サービス２７５は、ウェブサーバ、ｈｔｔｐサーバ、ｆｔｐ、Ｅメール、またはデータベースサーバを備えてもよい。いくつかの実施形態では、サービス２７０は、Ｅメール、データベース、または企業アプリケーション等のアプリケーション用の通信をリッスン、受信、および／または送信するためのデーモンプロセスまたはネットワークドライバである。いくつかの実施形態では、サービス２７０は、具体的ＩＰアドレス、またはＩＰアドレスおよびポート上で通信してもよい。
【００９３】
いくつかの実施形態では、ｖサーバ２７５は、ポリシエンジン２３６の１つ以上のポリシを、クライアント１０２とサーバ１０６との間のネットワーク通信に適用する。一実施形態では、ポリシは、ｖサーバ２７５と関連付けられる。別の実施形態では、ポリシは、ユーザまたはユーザのグループに基づく。さらに別の実施形態では、ポリシは、大域的であり、１つ以上のｖサーバ２７５ａ−２７５ｎ、およびアプライアンス２００を介して通信する任意のユーザまたはユーザのグループに適用される。いくつかの実施形態では、ポリシエンジンのポリシは、インターネットプロトコルアドレス、ポート、プロトコルタイプ、パケット内のヘッダまたはフィールド等の通信の任意のコンテツ、またはユーザ、ユーザのグループ、ｖサーバ２７５、トランスポート層接続、および／またはクライアント１０２またはサーバ１０６の識別または属性等の通信のコンテキストに基づいて、ポリシが適用される、条件を有する。
【００９４】
他の実施形態では、アプライアンス２００は、ポリシエンジン２３６と通信し、またはインターフェースをとり、サーバ１０６からコンピューティング環境１５、アプリケーション、および／またはデータファイルにアクセスするための遠隔ユーザまたは遠隔クライアント１０２の認証および／または認可を決定する。別の実施形態では、アプライアンス２００は、ポリシエンジン２３６と通信し、またはインターフェースをとり、コンピューティング環境１５、アプリケーション、および／またはデータファイルのうちの１つ以上のものをアプリケーション配信システム１９０に配信させるための遠隔ユーザまたは遠隔クライアント１０２の認証および／または認可を決定する。さらに別の実施形態では、アプライアンス２００は、遠隔ユーザまたは遠隔クライアント１０２のポリシエンジンの２３６認証および／または認可に基づいて、ＶＰＮまたはＳＳＬ  ＶＰＮ接続を確立する。一実施形態では、アプライアンス２００は、ポリシエンジン２３６のポリシに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。例えば、アプライアンス２００は、ポリシエンジン２３６に基づいて、コンピューティング環境１５、アプリケーション、またはデータファイルへのアクセスを制御してもよい。
【００９５】
いくつかの実施形態では、ｖサーバ２７５は、クライアントエージェント１２０を介したクライアント１０２とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖサーバ２７５は、クライアント１０２からの通信をリッスンおよび受信する。他の実施形態では、ｖサーバ２７５は、クライアントサーバ１０６とのＴＣＰまたはＵＤＰ接続等のトランスポート層接続を確立する。一実施形態では、ｖサーバ２７５は、サーバ１０６上で起動するサーバ２７０のインターネットプロトコルアドレスおよびポートへのトランスポート層接続を確立する。別の実施形態では、ｖサーバ２７５は、クライアント１０２への第１のトランスポート層接続をサーバ１０６への第２のトランスポート層接続と関連付ける。いくつかの実施形態では、ｖサーバ２７５は、サーバ１０６へのトランスポート層接続のプールを確立し、プールされたトランスポート層接続を介してクライアント要求を多重化する。
【００９６】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間のＳＳＬ  ＶＰＮ接続２８０を提供する。例えば、第１のネットワーク１０２上のクライアント１０２は、第２のネットワーク１０４’上のサーバ１０６への接続を確立するように要求する。いくつかの実施形態では、第２のネットワーク１０４’は、第１のネットワーク１０４からルーティング可能ではない。他の実施形態では、クライアント１０２は、公衆ネットワーク１０４上にあり、サーバ１０６は、企業ネットワーク等の私設ネットワーク１０４’上にある。一実施形態では、クライアントエージェント１２０は、第１のネットワーク１０４上のクライアント１０２の通信を傍受し、通信を暗号化し、アプライアンス２００への第１のトランスポート層接続を介して通信を伝送する。アプライアンス２００は、第１のネットワーク１０４上の第１のトランスポート層接続を、第２のネットワーク１０４上のサーバ１０６への第２のトランスポート層接続に関連付ける。アプライアンス２００は、クライアントエージェント１０２からの傍受された通信を受信し、通信を暗号解読し、第２のトランスポート層接続を介して第２のネットワーク１０４上のサーバ１０６に通信を伝送する。第２のトランスポート層接続は、プールされたトランスポート層接続であってもよい。したがって、アプライアンス２００は、２つのネットワーク１０４、１０４’の間のクライアント１０２のためのエンドツーエンドセキュアトランスポート層接続を提供する。
【００９７】
一実施形態では、アプライアンス２００は、仮想私設ネットワーク１０４上のクライアント１０２のイントラネットインターネットプロトコルまたはイントラネットＩＰ２８２アドレスをホストする。クライアント１０２は、第１のネットワーク１０４上のインターネットプロトコル（ＩＰ）アドレスおよび／またはホスト名等のローカルネットワーク識別子を有する。アプライアンス２００を介して第２のネットワーク１０４’に接続されたとき、アプライアンス２００は、第２のネットワーク１０４’上のクライアント１０２のためのＩＰアドレスおよび／またはホスト名等のネットワーク識別子である、イントラネットＩＰアドレス２８２を確立する、割り当てる、または別様に提供する。アプライアンス２００は、クライアントの確立されたイントラネットＩＰ２８２を使用して、クライアント１０２に向かってダイレクトされる任意の通信に関して、第２または私設ネットワーク１０４’をリッスンし、その上で受信する。一実施形態では、アプライアンス２００は、第２の私設ネットワーク１０４上のクライアント１０２として、またはその代わりに作用する。例えば、別の実施形態では、ｖサーバ２７５は、クライアント１０２のイントラネットＩＰ２８２への通信をリッスンし、それに応答する。いくつかの実施形態では、第２のネットワーク１０４’上のコンピューティングデバイス１００が要求を伝送する場合、アプライアンス２００は、それがクライアント１０２であった場合のように要求を処理する。例えば、アプライアンス２００は、クライアントのイントラネットＩＰ２８２へのｐｉｎｇに応答してもよい。別の実施例では、アプライアンスは、第２のネットワーク１０４上のコンピューティングデバイス１００とＴＣＰまたはＵＤＰ接続等の接続を確立し、クライアントのイントラネットＩＰ２８２との接続を要求してもよい。
【００９８】
いくつかの実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信への以下の加速技法２８８のうちの１つ以上のもの、すなわち、１）圧縮、２）展開、３）伝送制御プロトコルプーリング、４）伝送制御プロトコル多重化、５）伝送制御プロトコルバッファリング、および６）キャッシングを提供する。
【００９９】
一実施形態では、アプライアンス２００は、各サーバ１０６との１つ以上のトランスポート層接続を開放し、これらの接続を維持して、インターネットを介したクライアントによる反復データアクセスを可能にすることによって、クライアント１０２へのトランスポート層接続を繰り返し開閉することによって引き起こされる、処理負荷の多くからサーバ１０６を解放する。本技法は、本明細書では「接続プーリング」と称される。
【０１００】
いくつかの実施形態では、プールされたトランスポート層接続を介してクライアント１０２からサーバ１０６への通信をシームレスに接合するために、アプライアンス２００は、トランスポート層プロトコルレベルにおけるシーケンス数および確認応答数を修正することによって、通信を変換または多重化する。これは、「接続多重化」と称される。いくつかの実施形態では、いかなるアプリケーション層プロトコル相互作用も要求されない。例えば、着信パケット（すなわち、クライアント１０２から受信されるパケット）の場合、パケットのソースネットワークアドレスは、アプライアンス２００の出力ポートのものに変更され、宛先ネットワークアドレスは、意図されたサーバのものに変更される。発信パケット（すなわち、クライアント１０６から受信されるもの）の場合、ソースネットワークアドレスは、サーバ１０６のものからアプライアンス２００の出力ポートのものに変更され、宛先ネットワークアドレスは、アプライアンス２００のものから要求クライアント１０２のものに変更される。パケットのシーケンス数および確認応答数もまた、クライアント１０２へのアプライアンス２００のトランスポート層接続上でクライアント１０２によって予期されるシーケンス数および確認応答数に変換される。いくつかの実施形態では、トランスポート層プロトコルのパケットチェックサムが、これらの変換を考慮するように再計算される。
【０１０１】
別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のための切替または負荷分散機能性２８４を提供する。いくつかの実施形態では、アプライアンス２００は、トラフィックを分配し、層４またはアプリケーション層要求データに基づいてクライアント要求をサーバ１０６にダイレクトする。一実施形態では、ネットワークパケットのネットワーク層または層２が、宛先サーバ１０６を識別するが、アプライアンス２００は、サーバ１０６を決定し、トランスポート層パケットのペイロードとして搬送されるアプリケーション情報およびデータによってネットワークパケットを分配する。一実施形態では、アプライアンス２００の健全性監視プログラム２１６は、サーバの健全性を監視し、クライアントの要求を分配するためのサーバ１０６を決定する。いくつかの実施形態では、アプライアンス２００が、サーバ１０６が利用可能ではない、または事前決定された閾値を超える負荷を有することを検出する場合、アプライアンス２００は、クライアント要求を別のサーバ１０６にダイレクトまたは分配することができる。
【０１０２】
いくつかの実施形態では、アプライアンス２００は、ドメイン名サービス（ＤＮＳ）リゾルバとして作用する、または別様にクライアント１０２からのＤＮＳ要求の解決を提供する。いくつかの実施形態では、アプライアンスは、クライアント１０２によって伝送されるＤＮＳ要求を傍受する。一実施形態では、アプライアンス２００は、アプライアンス２００のＩＰアドレスを伴う、またはそれによってホストされる、クライアントのＤＮＳ要求に応答する。本実施形態では、クライアント１０２は、ドメイン名のためのネットワーク通信をアプライアンス２００に伝送する。別の実施形態では、アプライアンス２００は、第２のアプライアンス２００’のＩＰアドレスを伴う、またはそれによってホストされる、クライアントのＤＮＳ要求に応答する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００によって決定されるサーバ１０６のＩＰアドレスを伴うクライアントのＤＮＳ要求に応答する。
【０１０３】
さらに別の実施形態では、アプライアンス２００は、クライアント１０２とサーバ１０６との間の通信のためのアプリケーションファイアウォール機能性２９０を提供する。一実施形態では、ポリシエンジン２３６は、違法な要求を検出およびブロックするための規則を提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、サービス妨害（ＤｏＳ）攻撃に対して保護する。他の実施形態では、アプライアンスは、傍受された要求のコンテンツを点検し、アプリケーションベースの攻撃を識別およびブロックする。いくつかの実施形態では、規則／ポリシエンジン２３６は、以下のうちの１つ以上のもの、すなわち、１）バッファオーバーフロー、２）ＣＧＩ−ＢＩＮパラメータ操作、３）書式／非表示フィールド操作、４）強制ブラウジング、５）クッキーまたはセッションポイズニング、６）壊れたアクセス制御リスト（ＡＣＬ）または弱いパスワード、７）クロスサイトスクリプティング（ＸＳＳ）、８）コマンド注入、９）ＳＱＬ注入、１０）エラートリガ感受性情報漏出、１１）暗号化の安全ではない使用、１２）サーバ構成ミス、１３）バックドアおよびデバッグオプション、１４）ウェブサイト改変、１５）プラットフォームまたはオペレーティングシステム脆弱性、および１６）ゼロデイ弱点等の種々のクラスおよびタイプのウェブまたはインターネットベースの脆弱性に対する保護を提供するための１つ以上のアプリケーションファイアウォールまたはセキュリティ制御ポリシを備える。実施形態では、アプリケーションファイアウォール２９０は、以下のうちの１つ以上のもの、すなわち、１）要求されたフィールドが返される、２）追加フィールドが可能にされない、３）読取専用および非表示フィールド施行、４）ドロップダウンリストおよびラジオボタンフィールド適合性、および５）書式フィールド最大長施行に関して、ネットワーク通信を点検または分析する形態でＨＴＭＬ書式フィールド保護を提供する。いくつかの実施形態では、アプリケーションファイアウォール２９０は、クッキーが修正されないことを確実にする。他の実施形態では、アプリケーションファイアウォール２９０は、合法ＵＲＬを施行することによって強制ブラウジングに対して保護する。
【０１０４】
なおもさらに他の実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信内に含有される任意の機密情報を保護する。アプリケーションファイアウォール２９０は、エンジン２３６の規則またはポリシに従って任意のネットワーク通信を点検または分析し、ネットワークパケットの任意のフィールド内の任意の機密情報を識別してもよい。いくつかの実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信内で、クレジットカード番号、パスワード、社会保障番号、氏名、患者コード、連絡先情報、および年齢の１つ以上の発生を識別する。ネットワーク通信の符号化された部分は、これらの発生または機密情報を備えてもよい。これらの発生に基づいて、一実施形態では、アプリケーションファイアウォール２９０は、ネットワーク通信の伝送を防止する等、ネットワーク通信上でポリシアクションをとってもよい。別の実施形態では、アプリケーションファイアウォール２９０は、そのような識別された発生または機密情報を書き換える、除去する、または別様に隠してもよい。
【０１０５】
依然として図２Ｂを参照すると、アプライアンス２００は、図１Ｄと併せて上記で議論されるような性能監視エージェント１９７を含んでもよい。一実施形態では、アプライアンス２００は、図１Ｄに描写されるように、監視サービス１９８または監視サーバ１０６から監視エージェント１９７を受信する。いくつかの実施形態では、アプライアンス２００は、アプライアンス２００と通信する任意のクライアントまたはサーバへの配信のために、ディスク等の記憶装置の中に監視エージェント１９７を記憶する。例えば、一実施形態では、アプライアンス２００は、トランスポート層接続を確立する要求を受信することに応じて、監視エージェント１９７をクライアントに伝送する。他の実施形態では、アプライアンス２００は、クライアント１０２とトランスポート層接続を確立することに応じて、監視エージェント１９７を伝送する。別の実施形態では、アプライアンス２００は、ウェブページに対する要求を傍受または検出することに応じて、監視エージェント１９７をクライアントに伝送する。さらに別の実施形態では、アプライアンス２００は、監視サーバ１９８からの要求に応答して、監視エージェント１９７をクライアントまたはサーバに伝送する。一実施形態では、アプライアンス２００は、監視エージェント１９７を第２のアプライアンス２００’またはアプライアンス２０５に伝送する。
【０１０６】
他の実施形態では、アプライアンス２００は、監視エージェント１９７を実行する。一実施形態では、監視エージェント１９７は、アプライアンス２００上で実行される任意のアプリケーション、プログラム、プロセス、サービス、タスク、またはスレッドの性能を測定および監視する。例えば、監視エージェント１９７は、ｖサーバ２７５Ａ−２７５Ｎの性能および動作を監視および測定してもよい。別の実施形態では、監視エージェント１９７は、アプライアンス２００の任意のトランスポート層接続の性能を測定および監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００をトラバースする任意のユーザセッションの性能を測定および監視する。一実施形態では、監視エージェント１９７は、任意の仮想私設ネットワーク接続および／またはＳＳＬ  ＶＰＮセッション等のアプライアンス２００をトラバースするセッションの性能を測定および監視する。なおもさらなる実施形態では、監視エージェント１９７は、メモリ、ＣＰＵ、およびディスク使用量、およびアプライアンス２００の性能を測定および監視する。さらに別の実施形態では、監視エージェント１９７は、ＳＳＬオフローディング、接続プーリングおよび多重化、キャッシング、および圧縮等のアプライアンス２００によって実施される任意の加速技法２８８の性能を測定および監視する。いくつかの実施形態では、監視エージェント１９７は、アプライアンス２００によって実施される任意の負荷分散および／またはコンテンツ切替２８４の性能を測定および監視する。他の実施形態では、監視エージェント１９７は、アプライアンス２００によって実施されるアプリケーションファイアウォール２９０保護および処理の性能を測定および監視する。
Ｃ．クライアントエージェント
【０１０７】
ここで図３を参照すると、クライアントエージェント１２０の実施形態が描写される。クライアント１０２は、ネットワーク１０４を介してアプライアンス２００および／またはサーバ１０６との通信を確立および交換するためのクライアントエージェント１２０を含む。要するに、クライアント１０２は、カーネルモード３０２およびユーザモード３０３を伴うオペレーティングシステムと、１つ以上の層３１０ａ−３１０ｂを伴うネットワークスタック３１０とを有する、コンピューティングデバイス１００上で動作する。クライアント１０２は、１つ以上のアプリケーションをインストールしている、および／または実行してもよい。いくつかの実施形態では、１つ以上のアプリケーションは、ネットワークスタック３１０を介してネットワーク１０４に通信してもよい。ウェブブラウザ等のアプリケーションのうちの１つはまた、第１のプログラム３２２を含んでもよい。例えば、第１のプログラム３２２は、いくつかの実施形態では、クライアントエージェント１２０またはその任意の部分をインストールおよび／または実行するために使用されてもよい。クライアントエージェント１２０は、１つ以上のアプリケーションからネットワークスタック３１０からのネットワーク通信を傍受するための傍受機構またはインターセプタ３５０を含む。
【０１０８】
クライアント１０２のネットワークスタック３１０は、ネットワークへのコネクティビティおよびそれとの通信を提供するための任意のタイプおよび形態のソフトウェア、またはハードウェア、またはそれらの任意の組み合わせを備えてもよい。一実施形態では、ネットワークスタック３１０は、ネットワークプロトコル群のためのソフトウェア実装を備える。ネットワークスタック３１０は、当業者が認識および理解するように、オープンシステム相互接続（ＯＳＩ）通信モデルの任意のネットワーク層等の１つ以上のネットワーク層を備えてもよい。したがって、ネットワークスタック３１０は、ＯＳＩモデルの以下の層のうちのいずれか、すなわち、１）物理リンク層、２）データリンク層、３）ネットワーク層、４）トランスポート層、５）セッション層、６）提示層、および７）アプリケーション層のための任意のタイプおよび形態のプロトコルを備えてもよい。一実施形態では、ネットワークスタック３１０は、概して、ＴＣＰ／ＩＰと称される、インターネットプロトコル（ＩＰ）のネットワーク層プロトコルを経由したトランスポート制御プロトコル（ＴＣＰ）を備えてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰプロトコルは、ＩＥＥＥ  ８０２．３によって網羅されるこれらのプロトコル等のＩＥＥＥ広域ネットワーク（ＷＡＮ）またはローカルエリアネットワーク（ＬＡＮ）プロトコル群のうちのいずれかを備え得る、イーサネット（登録商標）プロトコルを経由して搬送されてもよい。いくつかの実施形態では、ネットワークスタック３１０は、ＩＥＥＥ  ８０２．１１および／またはモバイルインターネットプロトコル等の任意のタイプおよび形態の無線プロトコルを備える。
【０１０９】
ＴＣＰ／ＩＰベースのネットワークに照らして、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（Ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立コンピューティングアーキテクチャ（ＩＣＡ）プロトコル、遠隔デスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバーＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルが、使用されてもよい。別の実施形態では、ネットワークスタック３１０は、修正されたトランスポート制御プロトコル、例えば、トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答を伴うＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大型ウィンドウを伴うＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコル等の輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコル等の任意のタイプおよび形態のトランスポート制御プロトコルを備える。他の実施形態では、ＩＰを経由したＵＤＰ等の任意のタイプおよび形態のユーザデータグラムプロトコル（ＵＤＰ）が、音声通信またはリアルタイムデータ通信のため等に、ネットワークスタック３１０によって使用されてもよい。
【０１１０】
さらに、ネットワークスタック３１０は、ＴＣＰドライバまたはネットワーク層ドライバ等の１つ以上の層をサポートする、１つ以上のネットワークドライバを含んでもよい。ネットワークドライバは、コンピューティングデバイス１００のオペレーティングシステムの一部として、またはコンピューティングデバイス１００の任意のネットワークインターフェースカードまたは他のネットワークアクセスコンポーネントの一部として、含まれてもよい。いくつかの実施形態では、ネットワークスタック３１０のネットワークドライバのうちのいずれかは、本明細書に説明される技法のうちのいずれかをサポートして、ネットワークスタック３１０のカスタムまたは修正された部分を提供するように、カスタマイズ、修正、または適合されてもよい。他の実施形態では、加速プログラム３０２は、クライアント１０２のオペレーティングシステムによってインストールまたは別様に提供される、ネットワークスタック３１０とともに動作する、またはそれと併せて稼働するように設計および構築される。
【０１１１】
ネットワークスタック３１０は、クライアント１０２のネットワーク通信に関連する任意の情報およびデータを受信する、入手する、提供する、または別様にそれにアクセスするための任意のタイプおよび形態のインターフェースを備える。一実施形態では、ネットワークスタック３１０へのインターフェースは、アプリケーションプログラミングインターフェース（ＡＰＩ）を備える。インターフェースはまた、任意の関数呼び出し、フッキングまたはフィルタリング機構、イベントまたはコールバック機構、または任意のタイプのインターフェーシング技法を備えてもよい。インターフェースを介したネットワークスタック３１０は、ネットワークスタック３１０の機能性または動作に関連するオブジェクト等の任意のタイプおよび形態のデータ構造を受信または提供してもよい。例えば、データ構造は、ネットワークパケットまたは１つ以上のネットワークパケットに関連する情報およびデータを備えてもよい。いくつかの実施形態では、データ構造は、トランスポート層のネットワークパケット等のネットワークスタック３１０のプロトコル層において処理されるネットワークパケットの一部を備える。いくつかの実施形態では、データ構造３２５が、カーネルレベルデータ構造を備える一方で、他の実施形態では、データ構造３２５は、ユーザモードデータ構造を備える。カーネルレベルデータ構造は、入手される、またはカーネルモード３０２で動作するネットワークスタック３１０の一部、またはカーネルモード３０２で動作するネットワークドライバまたは他のソフトウェアに関連するデータ構造、またはオペレーティングシステムのカーネルモードで起動または動作するサービス、プロセス、タスク、スレッド、または他の実行可能命令によって入手または受信される任意のデータ構造を備えてもよい。
【０１１２】
加えて、ネットワークスタック３１０のいくつかの部分は、カーネルモード３０２、例えば、データリンクまたはネットワーク層内で実行される、または動作してもよい一方で、他の部分は、ネットワークスタック３１０のアプリケーション層等のユーザモード３０３で実行される、または動作する。例えば、ネットワークスタックの第１の部分３１０ａが、ネットワークスタック３１０へのユーザモードアクセスをアプリケーションに提供してもよい一方で、ネットワークスタック３１０の第２の部分３１０ａは、ネットワークへのアクセスを提供する。いくつかの実施形態では、ネットワークスタックの第１の部分３１０ａは、層５−７のうちのいずれか等のネットワークスタック３１０の１つ以上の上層を備えてもよい。他の実施形態では、ネットワークスタック３１０の第２の部分３１０ｂは、層１−４のうちのいずれか等の１つ以上の下層を備える。ネットワークスタック３１０の第１の部分３１０ａおよび第２の部分３１０ｂはそれぞれ、いずれか１つ以上のネットワーク層において、ユーザモード２０３、カーネル−モード２０２、またはそれらの組み合わせで、またはネットワーク層またはネットワーク層へのインターフェース点の任意の部分、またはユーザモード２０３およびカーネル−モード２０３の任意の部分またはそこへのインターフェース点において、ネットワークスタック３１０の任意の部分を備えてもよい。
【０１１３】
インターセプタ３５０は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを備えてもよい。一実施形態では、インターセプタ３５０は、ネットワークスタック３１０内の任意の点においてネットワーク通信を傍受し、ネットワーク通信をインターセプタ３５０またはクライアントエージェント１２０によって所望、管理、または制御される宛先にリダイレクトまたは伝送する。例えば、インターセプタ３５０は、第１のネットワークのネットワークスタック３１０のネットワーク通信を傍受し、第２のネットワーク１０４上で伝送するためにネットワーク通信をアプライアンス２００に伝送してもよい。いくつかの実施形態では、インターセプタ３５０は、ネットワークスタック３１０とインターフェースをとり、それと連動するように構築および設計される、ネットワークドライバ等のドライバを備える、任意のタイプのインターセプタ３５０を備える。いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、トランスポート層において等、ネットワークスタック３１０の１つ以上の層において動作する。一実施形態では、インターセプタ３５０は、フィルタドライバ、フッキング機構、またはトランスポートドライバインターフェース（ＴＤＩ）を介して等、ネットワークスタックのトランスポート層とインターフェースをとる、任意の形態およびタイプの好適なネットワークドライバインターフェースを備える。いくつかの実施形態では、インターセプタ３５０は、トランスポート層等の第１のプロトコル層、およびトランスポートプロトコル層の上方の任意の層、例えば、アプリケーションプロトコル層等の別のプロトコル層とインターフェースをとる。一実施形態では、インターセプタ３５０は、ネットワークドライバインターフェース仕様（ＮＤＩＳ）に準拠するドライバまたはＮＤＩＳドライバを備えてもよい。別の実施形態では、インターセプタ３５０は、ミニフィルタまたはミニポートドライバを備えてもよい。一実施形態では、インターセプタ３５０またはその一部は、カーネルモード２０２で動作する。別の実施形態では、インターセプタ３５０またはその一部は、ユーザモード２０３で動作する。いくつかの実施形態では、インターセプタ３５０の一部が、カーネルモード２０２で動作する一方で、インターセプタ３５０の別の部分は、ユーザモード２０３で動作する。他の実施形態では、クライアントエージェント１２０は、ユーザモード２０３で動作するが、カーネルレベルデータ構造２２５を入手するため等に、インターセプタ３５０を介してオペレーティングシステムのカーネルモードドライバ、プロセス、サービス、タスク、または一部とインターフェースをとる。さらなる実施形態では、インターセプタ３５０は、アプリケーション等のユーザモードアプリケーションまたはプログラムである。
【０１１４】
一実施形態では、インターセプタ３５０は、任意のトランスポート層接続要求を傍受する。これらの実施形態では、インターセプタ３５０は、トランスポート層アプリケーションプログラミングインターフェース（ＡＰＩ）コールを実行し、場所のための所望の場所への宛先ＩＰアドレスおよび／またはポート等の宛先情報を設定する。このようにして、インターセプタ３５０は、インターセプタ３５０またはクライアントエージェント１２０によって制御または管理されるＩＰアドレスおよびポートへのトランスポート層接続を傍受およびリダイレクトする。一実施形態では、インターセプタ３５０は、クライアントエージェント１２０がリッスンしているクライアント１０２のローカルＩＰアドレスおよびポートへの接続のために宛先情報を設定する。例えば、クライアントエージェント１２０は、リダイレクトされたトランスポート層通信のためのローカルＩＰアドレスおよびポート上でリッスンするプロキシサービスを備えてもよい。いくつかの実施形態では、クライアントエージェント１２０は、次いで、リダイレクトされたトランスポート層通信をアプライアンス２００に通信する。
【０１１５】
いくつかの実施形態では、インターセプタ３５０は、ドメイン名サービス（ＤＮＳ）要求を傍受する。一実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、ＤＮＳ要求を解決する。別の実施形態では、インターセプタは、ＤＮＳ解決のために傍受されたＤＮＳ要求をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００は、ＤＮＳ要求を解決し、ＤＮＳ応答をクライアントエージェント１２０に通信する。いくつかの実施形態では、アプライアンス２００は、別のアプライアンス２００’またはＤＮＳサーバ１０６を介して、ＤＮＳ要求を解決する。
【０１１６】
さらに別の実施形態では、クライアントエージェント１２０は、２つのエージェント１２０および１２０’を備えてもよい。一実施形態では、第１のエージェント１２０は、ネットワークスタック３１０のネットワーク層において動作するインターセプタ３５０を備えてもよい。いくつかの実施形態では、第１のエージェント１２０は、インターネット制御メッセージプロトコル（ＩＣＭＰ）要求（例えば、ｐｉｎｇおよびトレースルート）等のネットワーク層要求を傍受する。他の実施形態では、第２のエージェント１２０’は、トランスポート層において動作し、トランスポート層通信を傍受してもよい。いくつかの実施形態では、第１のエージェント１２０は、ネットワークスタック２１０の１つの層において通信を傍受し、傍受された通信とインターフェースをとる、またはそれを第２のエージェント１２０’に通信する。
【０１１７】
クライアントエージェント１２０および／またはインターセプタ３５０は、ネットワークスタック３１０の任意の他のプロトコル層に対して透過的な様式でプロトコル層において動作する、またはそれとインターフェースをとってもよい。例えば、一実施形態では、インターセプタ３５０は、ネットワーク層等のトランスポート層の下方の任意のプロトコル層、およびセッション、提示、またはアプリケーション層プロトコル等のトランスポート層の上方の任意のプロトコル層に対して透過的に、ネットワークスタック３１０のトランスポート層と動作する、またはインターフェースをとる。これは、ネットワークスタック３１０の他のプロトコル層が、所望に応じて、かつインターセプタ３５０を使用するための修正を伴わずに、動作することを可能にする。したがって、クライアントエージェント１２０および／またはインターセプタ３５０は、トランスポート層とインターフェースをとり、ＴＣＰ／ＩＰを経由して任意のアプリケーション層プロトコル等のトランスポート層によって搬送される任意のプロトコルを介して提供される、任意の通信を確実にする、最適化する、加速する、ルーティングする、または負荷分散することができる。
【０１１８】
さらに、クライアントエージェント１２０および／またはインターセプタは、任意のアプリケーション、クライアント１０２のユーザ、およびクライアント１０２と通信するサーバ等の任意の他のコンピューティングデバイスに対して透過的な様式で、ネットワークスタック３１０において動作する、またはそれとインターフェースをとってもよい。クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーションの修正を伴わない様式で、クライアント１０２上にインストールおよび／または実行されてもよい。いくつかの実施形態では、クライアント１０２のユーザまたはクライアント１０２と通信するコンピューティングデバイスは、クライアントエージェント１２０および／またはインターセプタ３５０の存在、実行、または動作を認識していない。したがって、いくつかの実施形態では、クライアントエージェント１２０および／またはインターセプタ３５０は、アプリケーション、クライアント１０２のユーザ、サーバ等の別のコンピューティングデバイス、またはインターセプタ３５０によってインターフェースをとられるプロトコル層の上方および／または下方のプロトコル層のうちのいずれかに対して透過的にインストール、実行、および／または動作される。
【０１１９】
クライアントエージェント１２０は、加速プログラム３０２、ストリーミングクライアント３０６、収集エージェント３０４、および／または監視エージェント１９７を含む。一実施形態では、クライアントエージェント１２０は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，
Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａ）によって開発された独立コンピューティングアーキテクチャ（ＩＣＡ）クライアントまたはその任意の部分を備え、また、ＩＣＡクライアントとも称される。いくつかの実施形態では、クライアント１２０は、サーバ１０６からクライアント１０２にアプリケーションをストリーミングするためのアプリケーションストリーミングクライアント３０６を備える。いくつかの実施形態では、クライアントエージェント１２０は、クライアント１０２とサーバ１０６との間の通信を加速するための加速プログラム３０２を備える。別の実施形態では、クライアントエージェント１２０は、エンドポイント検出／走査を実施し、アプライアンス２００および／またはサーバ１０６のためのエンドポイント情報を収集するための収集エージェント３０４を含む。
【０１２０】
いくつかの実施形態では、加速プログラム３０２は、サーバ１０６によって提供されるアプリケーションにアクセスすること等のサーバ１０６とのクライアントの通信および／またはそこへのアクセスを加速する、増進する、または別様に改良するための１つ以上の加速技法を実施するためのクライアント側加速プログラムを備える。加速プログラム３０２の実行可能命令の論理、機能、および／または動作は、以下の加速技法のうちの１つ以上のもの、すなわち、１）マルチプロトコル圧縮、２）トランスポート制御プロトコルプーリング、３）トランスポート制御プロトコル多重化、４）トランスポート制御プロトコルバッファリング、および５）キャッシュマネージャを介したキャッシングを実施してもよい。加えて、加速プログラム３０２は、クライアント１０２によって受信および／または伝送される任意の通信の暗号化および／または展開を実施してもよい。いくつかの実施形態では、加速プログラム３０２は、統合様式または方式で加速技法のうちの１つ以上のものを実施する。加えて、加速プログラム３０２は、トランスポート層プロトコルのネットワークパケットのペイロードとして搬送される、プロトコルのうちのいずれかまたは複数のプロトコルに圧縮を実施することができる。
【０１２１】
ストリーミングクライアント３０６は、サーバ１０６からストリーミングされたアプリケーションを受信および実行するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。サーバ１０６は、クライアント１０２上でアプリケーションを再生する、実行する、または別様に実行させるために、１つ以上のアプリケーションデータファイルをストリーミングクライアント３０６にストリーミングしてもよい。いくつかの実施形態では、サーバ１０６は、圧縮またはパッケージ化されたアプリケーションデータファイルのセットをストリーミングクライアント３０６に伝送する。いくつかの実施形態では、複数のアプリケーションファイルは、圧縮され、ＣＡＢ、ＺＩＰ、ＳＩＴ、ＴＡＲ、ＪＡＲ、または他のアーカイブ等のアーカイブライフ内にファイルサーバ上で記憶される。一実施形態では、サーバ１０６は、アプリケーションファイルを展開、開梱、または解凍し、ファイルをクライアント１０２に伝送する。別の実施形態では、クライアント１０２は、アプリケーションファイルを展開、開梱、または解凍する。ストリーミングクライアント３０６は、アプリケーションまたはその一部を動的にインストールし、アプリケーションを実行する。一実施形態では、ストリーミングクライアント３０６は、実行可能プログラムであってもよい。いくつかの実施形態では、ストリーミングクライアント３０６は、別の実行プログラムを立ち上げることが可能であり得る。
【０１２２】
収集エージェント３０４は、クライアント１０２についての情報を識別、入手、および／または収集するためのアプリケーション、プログラム、プロセス、サービス、タスク、または実行可能命令を備える。いくつかの実施形態では、アプライアンス２００は、収集エージェント３０４をクライアント１０２またはクライアントエージェント１２０に伝送する。収集エージェント３０４は、アプライアンスのポリシエンジン２３６の１つ以上のポリシに従って構成されてもよい。他の実施形態では、収集エージェント３０４は、クライアント１０２についての収集された情報をアプライアンス２００に伝送する。一実施形態では、アプライアンス２００のポリシエンジン２３６は、収集された情報を使用し、ネットワーク１０４へのクライアントの接続のアクセス、認証、および認可制御を決定および提供する。
【０１２３】
一実施形態では、収集エージェント３０４は、クライアントの１つ以上の属性または特性を識別および決定する、エンドポイント検出および走査機構を備える。例えば、収集エージェント３０４は、以下のクライアント側属性のうちのいずれか１つ以上のもの、すなわち、１）オペレーティングシステムおよび／またはオペレーティングシステムのバージョン、２）オペレーティングシステムのサービスパック、３）起動しているサービス、４）起動しているプロセス、および５）ファイルを識別および決定してもよい。収集エージェント３０４はまた、クライアント上の以下のうちのいずれか１つ以上のもの、すなわち、１）ウイルス対策ソフトウェア、２）パーソナルファイアウォールソフトウェア、３）スパム対策ソフトウェア、および４）インターネットセキュリティソフトウェアの存在またはバージョンを識別および決定してもよい。ポリシエンジン２３６は、クライアントの属性または特性、またはクライアント側属性のうちのいずれか１つ以上のものに基づく、１つ以上のポリシを有してもよい。
【０１２４】
いくつかの実施形態では、クライアントエージェント１２０は、図１Ｄおよび２Ｂと併せて議論されるような監視エージェント１９７を含む。監視エージェント１９７は、Ｖｉｓｕａｌ  ＢａｓｉｃまたはＪａｖａ（登録商標）スクリプト等の任意のタイプおよび形態のスクリプトであってもよい。一実施形態では、監視エージェント１９７は、クライアントエージェント１２０の任意の部分の性能を監視および測定する。例えば、いくつかの実施形態では、監視エージェント１９７は、加速プログラム３０２の性能を監視および測定する。別の実施形態では、監視エージェント１９７は、ストリーミングクライアント３０６の性能を監視および測定する。他の実施形態では、監視エージェント１９７は、収集エージェント３０４の性能を監視および測定する。なおも別の実施形態では、監視エージェント１９７は、インターセプタ３５０の性能を監視および測定する。いくつかの実施形態では、監視エージェント１９７は、メモリ、ＣＰＵ、およびディスク等のクライアント１０２の任意のリソースを監視および測定する。
【０１２５】
監視エージェント１９７は、クライアントの任意のアプリケーションの性能を監視および測定してもよい。一実施形態では、監視エージェント１９７は、クライアント１０２上のブラウザの性能を監視および測定する。いくつかの実施形態では、監視エージェント１９７は、クライアントエージェント１２０を介して配信される任意のアプリケーションの性能を監視および測定する。他の実施形態では、監視エージェント１９７は、ウェブベースまたはＨＴＴＰ応答時間等のアプリケーションのためのエンドユーザ応答時間を測定および監視する。監視エージェント１９７は、ＩＣＡまたはＲＤＰクライアントの性能を監視および測定してもよい。別の実施形態では、監視エージェント１９７は、ユーザセッションまたはアプリケーションセッションのためのメトリックを測定および監視する。いくつかの実施形態では、監視エージェント１９７は、ＩＣＡまたはＲＤＰセッションを測定および監視する。一実施形態では、監視エージェント１９７は、クライアント１０２へのアプリケーションおよび／またはデータの配信を加速する際のアプライアンス２００の性能を測定および監視する。
【０１２６】
いくつかの実施形態では、依然として図３を参照すると、第１のプログラム３２２は、自動的に、静かに、透過的に、または別様に、クライアントエージェント１２０またはインターセプタ３５０等のその一部をインストールおよび／または実行するために使用されてもよい。一実施形態では、第１のプログラム３２２は、ＡｃｔｉｖｅＸコントロールまたはＪａｖａ（登録商標）コントロール、またはアプリケーションにロードされ、それによって実行されるスクリプト等のプラグインコンポーネントを備える。例えば、第１のプログラムは、メモリ空間またはアプリケーションのコンテキストの中等にウェブブラウザアプリケーションによってロードおよび起動される、ＡｃｔｉｖｅＸコントロールを備える。別の実施形態では、第１のプログラム３２２は、ブラウザ等のアプリケーションにロードされ、それによって起動される、実行可能命令のセットを備える。一実施形態では、第１のプログラム３２２は、クライアントエージェント１２０をインストールするための設計および構築されたプログラムを備える。いくつかの実施形態では、第１のプログラム３２２は、別のコンピューティングデバイスからネットワークを介して、クライアントエージェント１２０を入手、ダウンロード、または受信する。別の実施形態では、第１のプログラム３２２は、クライアント１０２のオペレーティングシステム上にネットワークドライバ等のプログラムをインストールするためのインストーラプログラムまたはプラグアンドプレイマネージャである。
Ｄ．仮想化されたアプリケーション配信コントローラを提供するためのシステムおよび方法
【０１２７】
ここで図４Ａを参照すると、ブロック図は、仮想化環境４００の一実施形態を描写する。要するに、コンピューティングデバイス１００は、ハイパーバイザ層と、仮想化層と、ハードウェア層とを含む。ハイパーバイザ層は、仮想化層内で実行される少なくとも１つの仮想マシンによるハードウェア層内のいくつかの物理的リソース（例えば、プロセッサ４２１およびディスク４２８）へのアクセスを配分および管理する、ハイパーバイザ４０１（仮想化マネージャとも称される）を含む。仮想化層は、少なくとも１つのオペレーティングシステム４１０と、少なくとも１つのオペレーティングシステム４１０に配分される複数の仮想リソースとを含む。仮想リソースは、限定ではないが、複数の仮想プロセッサ４３２ａ、４３２ｂ、４３２ｃ（概して、４３２）、および仮想ディスク４４２ａ、４４２ｂ、４４２ｃ（概して、４４２）、および仮想メモリおよび仮想ネットワークインターフェース等の仮想リソースを含んでもよい。複数の仮想リソースおよびオペレーティングシステム４１０は、仮想マシン４０６と称され得る。仮想マシン４０６は、ハイパーバイザ４０１と通信し、コンピューティングデバイス１００上の他の仮想マシンを管理および構成するためのアプリケーションを実行するために使用される、制御オペレーティングシステム４０５を含んでもよい。
【０１２８】
より詳細には、ハイパーバイザ４０１は、物理的デバイスへのアクセスを有するオペレーティングシステムをシミュレートする任意の様式で、仮想リソースをオペレーティングシステムに提供してもよい。ハイパーバイザ４０１は、仮想リソースを任意の数のゲストオペレーティングシステム４１０ａ、４１０ｂ（概して、４１０）に提供してもよい。いくつかの実施形態では、コンピューティングデバイス１００は、１つ以上のタイプのハイパーバイザを実行する。これらの実施形態では、ハイパーバイザは、仮想ハードウェアを模倣し、物理的ハードウェアを区分化し、物理的ハードウェアを仮想化し、コンピューティング環境へのアクセスを提供する仮想マシンを実行するために、使用されてもよい。ハイパーバイザは、ＶＭＷａｒｅ，  Ｉｎｃ．（Ｐａｌｏ  Ａｌｔｏ，  Ｃａｌｉｆｏｒｎｉａ）製のもの、その開発がオープンソースＸｅｎ．ｏｒｇコミュニティによって監督されるオープンソース製品である、ＸＥＮハイパーバイザ、Ｍｉｃｒｏｓｏｆｔによって提供されるＨｙｐｅｒＶ、ＶｉｒｔｕａｌＳｅｒｖｅｒ、または仮想ＰＣハイパーバイザ、またはその他を含んでもよい。いくつかの実施形態では、ゲストオペレーティングシステムが実行され得る、仮想マシンプラットフォームを作成するハイパーバイザを実行する、コンピューティングデバイス１００は、ホストサーバと称される。これらの実施形態のうちの１つでは、例えば、コンピューティングデバイス１００は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．（Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，  ＦＬ）によって提供されるＸＥＮ  ＳＥＲＶＥＲである。
【０１２９】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス上で実行されるオペレーティングシステム内で実行される。これらの実施形態のうちの１つでは、オペレーティングシステムおよびハイパーバイザ４０１を実行するコンピューティングデバイスは、ホストオペレーティングシステム（コンピューティングデバイス上で実行されるオペレーティングシステム）およびゲストオペレーティングシステム（ハイパーバイザ４０１によって提供されるコンピューティングリソースパーティション内で実行されるオペレーティングシステム）を有すると言われ得る。他の実施形態では、ハイパーバイザ４０１は、ホストオペレーティングシステム上で実行される代わりに、コンピューティングデバイス上のハードウェアと直接相互作用する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、コンピューティングデバイスを備えるハードウェアを指す、「ベアメタル」上で実行されると言われ得る。
【０１３０】
いくつかの実施形態では、ハイパーバイザ４０１は、オペレーティングシステム４１０が実行される、仮想マシン４０６ａ−ｃ（概して、４０６）を作成してもよい。これらの実施形態のうちの１つでは、例えば、ハイパーバイザ４０１は、仮想マシンイメージをロードし、仮想マシン４０６を作成する。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、仮想マシン４０６内でオペレーティングシステム４１０を実行する。これらの実施形態のうちのなおも別のものでは、仮想マシン４０６は、オペレーティングシステム４１０を実行する。
【０１３１】
いくつかの実施形態では、ハイパーバイザ４０１は、コンピューティングデバイス１００上で実行される仮想マシン４０６のためのプロセッサスケジューリングおよびメモリ区分化を制御する。これらの実施形態のうちの１つでは、ハイパーバイザ４０１は、少なくとも１つの仮想マシン４０６の実行を制御する。これらの実施形態のうちの別のものでは、ハイパーバイザ４０１は、コンピューティングデバイス１００によって提供される少なくとも１つのハードウェアリソースの抽象化を伴って少なくとも１つの仮想マシン４０６を提示する。他の実施形態では、ハイパーバイザ４０１は、物理的プロセッサ能力が仮想マシン４０６に提示されるかどうか、およびその方法を制御する。
【０１３２】
制御オペレーティングシステム４０５は、ゲストオペレーティングシステムを管理および制御するための少なくとも１つのアプリケーションを実行してもよい。一実施形態では、制御オペレーティングシステム４０５は、仮想マシンを実行する、仮想マシンの実行を終了する、または仮想マシンへの配分のための物理的リソースのタイプを識別するための機能性を含む、仮想マシンの実行を管理するための機能性へのアクセスを管理者に提供するユーザインターフェースを含む、アプリケーション等の管理アプリケーションを実行してもよい。別の実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内で制御オペレーティングシステム４０５を実行する。なおも別の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の物理的リソースに直接アクセスする権限を与えられている、仮想マシン４０６内で実行される。いくつかの実施形態では、コンピューティングデバイス１００ａ上の制御オペレーティングシステム４０５ａは、ハイパーバイザ４０１ａとハイパーバイザ４０１ｂとの間の通信を介して、コンピューティングデバイス１００ｂ上の制御オペレーティングシステム４０５ｂとデータを交換してもよい。このように、１つ以上のコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理的リソースに関して、他のコンピューティングデバイス１００のうちの１つ以上のものとデータを交換してもよい。これらの実施形態のうちの１つでは、本機能性は、ハイパーバイザが複数の物理的コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にする。これらの実施形態のうちの別のものでは、複数のハイパーバイザは、コンピューティングデバイス１００のうちの１つの上で実行されるゲストオペレーティングシステムのうちの１つ以上のものを管理する。
【０１３３】
一実施形態では、制御オペレーティングシステム４０５は、少なくとも１つのゲストオペレーティングシステム４１０と相互作用する権限を与えられている、仮想マシン４０６内で実行される。別の実施形態では、ゲストオペレーティングシステム４１０は、ディスクまたはネットワークへのアクセスを要求するために、ハイパーバイザ４０１を介して制御オペレーティングシステム４０５と通信する。なおも別の実施形態では、ゲストオペレーティングシステム４１０および制御オペレーティングシステム４０５は、例えば、ハイパーバイザ４０１によって利用可能にされる複数の共有メモリページを介して等、ハイパーバイザ４０１によって確立される通信チャネルを介して通信してもよい。
【０１３４】
いくつかの実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００によって提供されるネットワーキングハードウェアと直接通信するためのネットワークバックエンドドライバを含む。これらの実施形態のうちの１つでは、ネットワークバックエンドドライバは、少なくとも１つのゲストオペレーティングシステム１１０からの少なくとも１つの仮想マシン要求を処理する。他の実施形態では、制御オペレーティングシステム４０５は、コンピューティングデバイス１００上の記憶要素と通信するためのブロックバックエンドドライバを含む。これらの実施形態のうちの１つでは、ブロックバックエンドドライバは、ゲストオペレーティングシステム４１０から受信される少なくとも１つの要求に基づいて、記憶要素からのデータを読み取り、そして書き込む。
【０１３５】
一実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を含む。別の実施形態では、ツールスタック４０４は、ハイパーバイザ４０１と相互作用する、（例えば、第２のコンピューティングデバイス１００ｂ上で）他の制御オペレーティングシステム４０５と通信する、またはコンピューティングデバイス１００上の仮想マシン４０６ｂ、４０６ｃを管理するための機能性を提供する。別の実施形態では、ツールスタック４０４は、改良された管理機能性を仮想マシンファームの管理者に提供するためのカスタマイズされたアプリケーションを含む。いくつかの実施形態では、ツールスタック４０４および制御オペレーティングシステム４０５のうちの少なくとも１つは、コンピューティングデバイス１００上で起動する仮想マシン４０６を遠隔で構成および制御するためのインターフェースを提供する、管理ＡＰＩを含む。他の実施形態では、制御オペレーティングシステム４０５は、ツールスタック４０４を通してハイパーバイザ４０１と通信する。
【０１３６】
一実施形態では、ハイパーバイザ４０１は、ハイパーバイザ４０１によって作成される仮想マシン４０６内でゲストオペレーティングシステム４１０を実行する。別の実施形態では、ゲストオペレーティングシステム４１０は、コンピューティングデバイス１００のユーザにコンピューティング環境内のリソースへのアクセスを提供する。なおも別の実施形態では、リソースは、プログラム、アプリケーション、ドキュメント、ファイル、複数のアプリケーション、複数のファイル、実行可能プログラムファイル、デスクトップ環境、コンピューティング環境、またはコンピューティングデバイス１００のユーザに利用可能にされる他のリソースを含む。さらに別の実施形態では、リソースは、限定ではないが、コンピューティングデバイス１００の直接上の従来のインストール、アプリケーションストリーミングのための方法を介したコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上のリソースの実行によって生成され、提示層プロトコルを介してコンピューティングデバイス１００に通信される、出力データのコンピューティングデバイス１００への配信、第２のコンピューティングデバイス１００’上で実行される仮想マシンを介してリソースの実行によって生成される、出力データのコンピューティングデバイス１００への配信、またはＵＳＢデバイス等のコンピューティングデバイス１００に接続されるリムーバル記憶デバイスからの実行を含む、複数のアクセス方法を介して、またはコンピューティングデバイス１００上で実行され、出力データを生成する仮想マシンを介して、コンピューティングデバイス１００に配信されてもよい。いくつかの実施形態では、コンピューティングデバイス１００は、リソースの実行によって生成される出力データを別のコンピューティングデバイス１００’に伝送する。
【０１３７】
一実施形態では、ゲストオペレーティングシステム４１０は、それが実行される仮想マシンと併せて、それが仮想マシンであることを認識していない、完全に仮想化された仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＨＶＭ（ハードウェア仮想マシン）仮想マシン」と称され得る。別の実施形態では、完全に仮想化されたマシンは、完全に仮想化されたマシン内でオペレーティングシステムを実行するために基本入出力システム（ＢＩＯＳ）を模倣する、ソフトウェアを含む。なおも別の実施形態では、完全に仮想化されたマシンは、ハイパーバイザ４０１と通信することによって機能性を提供するドライバを含んでもよい。そのような実施形態では、ドライバは、それが仮想化された環境内で実行されることを認識してもよい。別の実施形態では、ゲストオペレーティングシステム４１０は、それが実行される仮想マシンと併せて、それが仮想マシンであることを認識している、準仮想化された仮想マシンを形成し、そのようなマシンは、「ドメインＵ  ＰＶ仮想マシン」と称され得る。別の実施形態では、準仮想化されたマシンは、完全に仮想化されたマシンが含まない、付加的ドライバを含む。なおも別の実施形態では、準仮想化されたマシンは、上記で説明されるように、ネットワークバックエンドドライバと、制御オペレーティングシステム４０５の中に含まれるブロックバックエンドドライバとを含む。
【０１３８】
ここで図４Ｂを参照すると、ブロック図は、少なくとも１つの物理的ホストが仮想マシンを実行する、システム内の複数のネットワーク化されたコンピューティングデバイスの一実施形態を描写する。要するに、本システムは、管理コンポーネント４０４と、ハイパーバイザ４０１とを含む。本システムは、複数のコンピューティングデバイス１００と、複数の仮想マシン４０６と、複数のハイパーバイザ４０１と、ツールスタック４０４または管理コンポーネント４０４と様々に称される、複数の管理コンポーネントと、物理的リソース４２１、４２８とを含む。複数の物理的マシン１００はそれぞれ、図１Ｅ−１Ｈおよび４Ａに関連して上記に説明される、コンピューティングデバイス１００として提供されてもよい。
【０１３９】
より詳細には、物理的ディスク４２８が、コンピューティングデバイス１００によって提供され、仮想ディスク４４２の少なくとも一部を記憶する。いくつかの実施形態では、仮想ディスク４４２は、複数の物理的ディスク４２８と関連付けられる。これらの実施形態のうちの１つでは、１つ以上のコンピューティングデバイス１００は、プロセッサおよびリソースのプールで利用可能な他の物理的リソースに関して、他のコンピューティングデバイス１００のうちの１つ以上のものとデータを交換し、ハイパーバイザが複数の物理的コンピューティングデバイスを横断して分配されるリソースのプールを管理することを可能にしてもよい。いくつかの実施形態では、仮想マシン４０６が実行されるコンピューティングデバイス１００は、物理的ホスト１００またはホストマシン１００と称される。
【０１４０】
ハイパーバイザは、コンピューティングデバイス１００上のプロセッサ上で実行される。ハイパーバイザは、物理的ディスクへのアクセスの量を仮想ディスクに配分する。一実施形態では、ハイパーバイザ４０１は、物理的ディスク上の空間の量を配分する。別の実施形態では、ハイパーバイザ４０１は、物理的ディスク上の複数のページを配分する。いくつかの実施形態では、ハイパーバイザは、仮想マシン４５０を初期化および実行するプロセスの一部として、仮想ディスク４４２をプロビジョニングする。
【０１４１】
一実施形態では、管理コンポーネント４０４ａは、プール管理コンポーネント４０４ａと称される。別の実施形態では、制御オペレーティングシステム４０５ａと称され得る、管理オペレーティングシステム４０５ａは、管理コンポーネントを含む。いくつかの実施形態では、管理コンポーネントは、ツールスタックと称される。これらの実施形態のうちの１つでは、管理コンポーネントは、図４Ａに関連して上記に説明されるツールスタック４０４である。他の実施形態では、管理コンポーネント４０４は、プロビジョニングおよび／または実行する仮想マシン４０６の識別を管理者等のユーザから受信するためのユーザインターフェースを提供する。なおも他の実施形態では、管理コンポーネント４０４は、１つの物理的マシン１００から別のものへの仮想マシン４０６ｂの移動に対する要求を管理者等のユーザから受信するためのユーザインターフェースを提供する。さらなる実施形態では、管理コンポーネント４０４ａは、要求された仮想マシン４０６ｄを実行するコンピューティングデバイス１００ｂを識別し、識別された仮想マシンを実行するように識別されたコンピューティングデバイス１００ｂ上のハイパーバイザ４０１ｂに命令し、そのような管理コンポーネントは、プール管理コンポーネントと称され得る。
【０１４２】
ここで図４Ｃを参照すると、仮想アプリケーション配信コントローラまたは仮想アプライアンス４５０の実施形態が描写される。要するに、図２Ａおよび２Ｂに関連して上記に説明されるアプライアンス２００（例えば、アプリケーション配信コントローラ）の機能性および／または実施形態のうちのいずれかは、図４Ａおよび４Ｂに関連して上記に説明される仮想化された環境の任意の実施形態において展開されてもよい。アプリケーション配信コントローラの機能性がアプライアンス２００の形態で展開される代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００内で展開されてもよい。
【０１４３】
ここで図４Ｃを参照すると、サーバ１０６のハイパーバイザ４０１上で動作する仮想アプライアンス４５０の実施形態の略図が描写される。図２Ａおよび２Ｂのアプライアンス２００と同様に、仮想アプライアンス４５０は、可用性、性能、オフロード、およびセキュリティのための機能性を提供してもよい。可溶性に関して、仮想アプライアンスは、ネットワークの層４と７との間で負荷分散を実施してもよく、また、知的サービス健全性監視を実施してもよい。ネットワークトラフィック加速を介した性能増加に関して、仮想アプライアンスは、キャッシングおよび圧縮を実施してもよい。任意のサーバの処理をオフロードするために、仮想アプライアンスは、接続多重化およびプーリングおよび／またはＳＳＬ処理を実施してもよい。セキュリティに関して、仮想アプライアンスは、アプライアンス２００のアプリケーションファイアウォール機能性およびＳＳＬ  ＶＰＮ機能のうちのいずれかを実施してもよい。
【０１４４】
図２Ａに関連して説明されるようなアプライアンス２００のモジュールのうちのいずれかは、既製のサーバ等の任意のサーバ上の仮想化された環境３００または仮想化されていない環境内で実行可能な１つ以上のソフトウェアモジュールまたはコンポーネントとして展開可能である、仮想化されたアプライアンス配信コントローラ４５０の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。例えば、仮想アプライアンスは、コンピューティングデバイス上にインストールするインストールパッケージの形態で提供されてもよい。図２Ａを参照すると、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮２３８、暗号化エンジン２３４、パケットエンジン２４０、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、および健全性監視プログラム２１６のうちのいずれかは、コンピューティングデバイスおよび／または仮想化された環境３００の任意のオペレーティングシステム上で起動するようにソフトウェアコンポーネントまたはモジュールとして設計および構築されてもよい。アプライアンス２００の暗号化プロセッサ２６０、プロセッサ２６２、メモリ２６４、およびネットワークスタック２６７を使用する代わりに、仮想化されたアプライアンス４００は、仮想化された環境４００によって提供されるような、または別様にサーバ１０６上で利用可能であるような、これらのリソースのうちのいずれかを使用してもよい。
【０１４５】
依然として図４Ｃを参照すると、要するに、いずれか１つ以上のｖサーバ２７５Ａ−２７５Ｎは、任意のサーバ１０６等の任意のタイプのコンピューティングデバイス１００の仮想化された環境４００内で動作している、または実行されてもよい。図２Ｂに関連して説明されるアプライアンス２００のモジュールまたは機能性のうちのいずれかは、サーバの仮想化されたまたは仮想化されていない環境のいずれかで動作するように設計および構築されてもよい。ｖサーバ２７５、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、加速２８８、アプリＦＷ２９０、および監視エージェントのうちのいずれかは、デバイスおよび／または仮想化された環境４００上で実行可能な１つ以上のソフトウェアモジュールまたはコンポーネントとして展開可能である、アプリケーション配信コントローラ４５０の形態でパッケージ化される、組み合わせられる、設計される、または構築されてもよい。
【０１４６】
いくつかの実施形態では、サーバは、各仮想マシンが仮想アプリケーション配信コントローラ４５０の同一または異なる実施形態を起動する、仮想化環境内で複数の仮想マシン４０６ａ−４０６ｎを実行してもよい。いくつかの実施形態では、サーバは、マルチコア処理システムのコア上の１つ以上の仮想マシン上で１つ以上の仮想アプライアンス４５０を実行してもよい。いくつかの実施形態では、サーバは、複数のプロセッサデバイスの各プロセッサ上の１つ以上の仮想マシン上で１つ以上の仮想アプライアンス４５０を実行してもよい。
Ｅ．マルチコアアーキテクチャを提供するためのシステムおよび方法
【０１４７】
ムーアの法則によると、集積回路上に設置され得るトランジスタの数は、約２年毎に倍になり得る。しかしながら、ＣＰＵ速度増加は、停滞期に到達し得、例えば、ＣＰＵ速度は、２００５年以降、約３．５〜４ＧＨｚ範囲となっている。ある場合には、ＣＰＵ製造業者は、付加的性能を獲得するようにＣＰＵ速度増加に依拠しない場合がある。一部のＣＰＵ製造業者は、付加的コアをそれらのプロセッサに追加し、付加的性能を提供し得る。性能獲得のためにＣＰＵに依拠する、ソフトウェアおよびネットワーキングベンダのもの等の製品は、これらのマルチコアＣＰＵを活用することによって、それらの性能を改良し得る。単一のＣＰＵのために設計および構築されるソフトウェアは、マルチスレッド、並列アーキテクチャ、または別様にマルチコアアーキテクチャを利用するように再設計される、および／または書き換えられてもよい。
【０１４８】
ｎコアまたはマルチコア技術と称される、アプライアンス２００のマルチコアアーキテクチャは、いくつかの実施形態におけるアプライアンスが、単一のコア性能障壁を破ること、およびマルチコアＣＰＵの能力を利用することを可能にする。図２Ａに関連して説明される以前のアーキテクチャでは、単一のネットワークまたはパケットエンジンが起動される。ｎコア技術およびアーキテクチャの複数のコアは、複数のパケットエンジンが同時に、および／または並行して起動することを可能にする。パケットエンジンが各コア上で起動すると、アプライアンスアーキテクチャは、付加的コアの処理容量を活用する。いくつかの実施形態では、これは、性能およびスケーラビリティの最大７倍増加を提供する。
【０１４９】
図５Ａには、機能並列処理、データ並列処理、またはフローベースのデータ並列処理等の並列処理または並列コンピューティング方式のタイプによる、１つ以上のプロセッサコアを横断した作業、タスク、負荷、またはネットワークトラフィック分配のいくつかの実施形態が図示される。要するに、図５Ａは、コアの合計数が１からＮである、ｎ個のコアを伴うアプライアンス２００’等のマルチコアシステムの実施形態を図示する。一実施形態では、作業、負荷、またはネットワークトラフィックは、分配がｎ個のコア５０５Ｎ（以降では集合的にコア５０５と称される）の全てまたは２つ以上のものを横断するように、第１のコア５０５Ａ、第２のコア５０５Ｂ、第３のコア５０５Ｃ、第４のコア５０５Ｄ、第５のコア５０５Ｅ、第６のコア５０５Ｆ、第７のコア５０５Ｇ等の間に分配されることができる。複数のコアのうちの個別のコア上でそれぞれ起動する、複数のＶＩＰ２７５が存在し得る。複数のコアのうちの個別のコア上でそれぞれ起動する、複数のパケットエンジン２４０が存在し得る。使用されるアプローチのうちのいずれかは、コアのうちのいずれかを横断して異なる、変動する、または類似する作業負荷または性能レベル５１５につながり得る。機能並列処理アプローチに関して、各コアは、パケットエンジン、ＶＩＰ２７５、またはアプライアンス２００によって提供される機能性のうちの異なる機能を起動してもよい。データ並列処理アプローチでは、データは、データを受信するネットワークインターフェースカード（ＮＩＣ）またはＶＩＰ２７５に基づいて、コアを横断して並列処理または分配されてもよい。別のデータ並列処理アプローチでは、処理は、データフローを各コアに分配することによって、コアを横断して分配されてもよい。
【０１５０】
図５Ａに対するさらなる詳細において、いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、機能並列処理５００に従ってコア５０５の間で分配されることができる。機能並列処理は、１つ以上の個別の機能を果たす各コアに基づいてもよい。いくつかの実施形態では、第１のコアが、第１の機能を果たしてもよい一方で、第２のコアは、第２の機能を果たす。機能並列処理アプローチでは、マルチコアシステムによって果たされる機能は、機能性に従って分割され、各コアに分配される。いくつかの実施形態では、機能並列処理は、タスク並列処理と称され得、各プロセッサまたはコアが同一または異なるデータに異なるプロセスまたは機能を実行するときに達成されてもよい。コアまたはプロセッサは、同一または異なるコードを実行してもよい。ある場合には、異なる実行スレッドまたはコードは、稼働するにつれて相互と通信してもよい。通信は、ワークフローの一部として、１つのスレッドから次のスレッドにデータをパスするように行われてもよい。
【０１５１】
いくつかの実施形態では、機能並列処理５００に従ってコア５０５を横断して作業を分配することは、ネットワーク入出力管理（ＮＷＩ／Ｏ）５１０Ａ、セキュアソケットレイヤー（ＳＳＬ）暗号化および暗号解読５１０Ｂ、および伝送制御プロトコル（ＴＣＰ）機能５１０Ｃ等の特定の機能に従って、ネットワークトラフィックを分配することを含むことができる。これは、使用されている機能性の量またはレベルに基づく、作業、性能、またはコンピューティング負荷５１５につながり得る。いくつかの実施形態では、データ並列処理５４０に従ってコア５０５を横断して作業を分配することは、特定のハードウェアまたはソフトウェアコンポーネントと関連付けられるデータを分配することに基づいて、作業５１５の量を分配することを含むことができる。いくつかの実施形態では、フローベスデータ並列処理５２０に従ってコア５０５を横断して作業を分配することは、各コア上の作業５１５Ａ−Ｎの量が類似する、実質的に等しい、または比較的に均一に分配され得るように、コンテキストまたはフローに基づいてデータを分配することを含むことができる。
【０１５２】
機能並列処理アプローチの場合、各コアは、アプライアンスのパケットエンジンまたはＶＩＰによって提供される複数の機能性のうちの１つ以上の機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を実施してもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を実施する。同様に、コア３が、ＳＳＬオフロードを実施してもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を実施してもよい。コアはそれぞれ、同一の機能または異なる機能を果たしてもよい。コアはそれぞれ、１つを上回る機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断した作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図５Ａに図示されるように、機能別の分割は、性能または負荷５１５の異なるレベルにおいて起動する異なるコアにつながり得る。
【０１５３】
機能並列処理アプローチの場合、各コアは、アプライアンスのパケットエンジンによって提供される複数の機能性のうちの１つ以上の機能性を起動するように構成されてもよい。例えば、コア１が、アプライアンス２００’のためのネットワークＩ／Ｏ処理を実施してもよい一方で、コア２は、アプライアンスのためのＴＣＰ接続管理を実施する。同様に、コア３が、ＳＳＬオフロードを実施してもよい一方で、コア４は、層７またはアプリケーション層処理およびトラフィック管理を実施してもよい。コアはそれぞれ、同一の機能または異なる機能を果たしてもよい。コアはそれぞれ、１つを上回る機能を果たしてもよい。コアのうちのいずれかは、図２Ａおよび２Ｂと併せて識別および／または説明される機能性またはその部分のうちのいずれかを起動してもよい。本アプローチでは、コアを横断した作業は、粗粒または細粒様式のいずれかで機能別に分割されてもよい。ある場合には、図５Ａに図示されるように、機能別の分割は、負荷または性能の異なるレベルにおいて起動する異なるコアにつながり得る。
【０１５４】
機能性またはタスクは、任意の配列および方式で分配されてもよい。例えば、図５Ｂは、第１のコア、コア１  ５０５Ａ、ネットワークＩ／Ｏ機能性５１０Ａと関連付けられる処理アプリケーションおよびプロセスを図示する。ネットワークＩ／Ｏと関連付けられるネットワークトラフィックは、いくつかの実施形態では、特定のポート番号と関連付けられることができる。したがって、ＮＷ  Ｉ／Ｏ５１０Ａと関連付けられるポート宛先を有する、発信および着信パケットは、ＮＷ  Ｉ／Ｏポートと関連付けられる全てのネットワークトラフィックを取り扱うことに専念するコア１  ５０５Ａに向かってダイレクトされるであろう。同様に、コア２  ５０５Ｂは、ＳＳＬ処理と関連付けられる機能性を取り扱うことに専念し、コア４  ５０５Ｄは、全てのＴＣＰレベル処理および機能性を取り扱うことに専念し得る。
【０１５５】
図５Ａは、ネットワークＩ／Ｏ、ＳＳＬ、およびＴＣＰ等の機能を図示するが、他の機能も、コアに割り当てられることができる。これらの他の機能は、本明細書に説明される機能または動作のうちのいずれか１つ以上のものを含むことができる。例えば、図２Ａおよび２Ｂと併せて説明される機能のうちのいずれかは、機能性ベースでコアを横断して分配されてもよい。ある場合には、第１のＶＩＰ２７５Ａが、第１のコア上で起動してもよい一方で、異なる構成を伴う第２のＶＩＰ２７５Ｂは、第２のコア上で起動してもよい。いくつかの実施形態では、各コア５０５は、各コア５０５が特定の機能と関連付けられる処理を取り扱い得るように、その特定の機能性を取り扱うことができる。例えば、コア２
５０５Ｂが、ＳＳＬオフロードを取り扱ってもよい一方で、コア４  ５０５Ｄは、アプリケーション層処理およびトラフィック管理を取り扱ってもよい。
【０１５６】
他の実施形態では、作業、負荷、またはネットワークトラフィックは、任意のタイプおよび形態のデータ並列処理５４０に従って、コア５０５の間で分配されてもよい。いくつかの実施形態では、データ並列処理は、異なる分配されたデータに同一のタスクまたは機能性を実施する各コアによって、マルチコアシステム内で達成されてもよい。いくつかの実施形態では、単一の実行スレッドまたはコードは、全てのデータ上の動作を制御する。他の実施形態では、異なるスレッドまたは命令は、動作を制御するが、同一のコードを実行してもよい。いくつかの実施形態では、データ並列処理は、アプライアンス２００上に含まれる、またはそれと関連付けられる、パケットエンジン、ｖサーバ（ＶＩＰ）２７５Ａ−Ｃ、ネットワークインターフェースカード（ＮＩＣ）５４２Ｄ−Ｅ、および／または任意の他のネットワーキングハードウェアまたはソフトウェアの視点から達成される。例えば、各コアは、同一のパケットエンジンまたはＶＩＰコードまたは構成を起動し、分配されたデータの異なるセット上で動作してもよい。各ネットワーキングハードウェアまたはソフトウェア構築物は、異なる、変動する、または実質的に同一の量のデータを受信することができ、結果として、変動する、異なる、または比較的に同一の量の負荷５１５を有し得る。
【０１５７】
データ並列処理アプローチの場合、作業は、ＶＩＰ、ＮＩＣ、および／またはＶＩＰまたはＮＩＣのデータフローに基づいて、分割および分配されてもよい。これらのアプローチのうちの１つでは、マルチコアシステムの作業は、各ＶＩＰをデータの分配されたセット上で稼働させることによって、ＶＩＰの間で分割または分配されてもよい。例えば、各コアは、１つ以上のＶＩＰを起動するように構成されてもよい。ネットワークトラフィックは、そのトラフィックを取り扱うＶＩＰ毎にコアに分配されてもよい。これらのアプローチのうちの別のものでは、アプライアンスの作業は、ネットワークトラフィックを受信するＮＩＣに基づいて、コアの間で分割または分配されてもよい。例えば、第１のＮＩＣのネットワークトラフィックが、第１のコアに分配されてもよい一方で、第２のＮＩＣのネットワークトラフィックは、第２のコアに分配されてもよい。ある場合には、コアは、複数のＮＩＣからのデータを処理してもよい。
【０１５８】
図５Ａは、ＶＩＰ１  ２７５Ａ、ＶＩＰ２  ２７５Ｂ、およびＶＩＰ３  ２７５Ｃの場合のように、単一のコア５０５と関連付けられる単一のｖサーバを図示する。いくつかの実施形態では、単一のｖサーバは、１つ以上のコア５０５と関連付けられることができる。対照的に、１つ以上のｖサーバは、単一のコア５０５と関連付けられることができる。ｖサーバをコア５０５と関連付けることは、その特定のｖサーバと関連付けられる全ての機能を処理するためのそのコア５０５を含んでもよい。いくつかの実施形態では、各コアは、同一のコードおよび構成を有するＶＩＰを実行する。他の実施形態では、各コアは、同一のコードを有するが、異なる構成を有するＶＩＰを実行する。いくつかの実施形態では、各コアは、異なるコードおよび同一または異なる構成を有するＶＩＰを実行する。
【０１５９】
ｖサーバのように、ＮＩＣはまた、特定のコア５０５と関連付けられることもできる。多くの実施形態では、ＮＩＣは、ＮＩＣがデータパケットを受信または伝送するときに、特定のコア５０５がデータパケットを受信または伝送することに関与する処理を取り扱うように、１つ以上のコア５０５に接続されることができる。一実施形態では、単一のＮＩＣは、ＮＩＣ１  ５４２ＤおよびＮＩＣ２  ５４２Ｅの場合のように、単一のコア５０５と関連付けられることができる。他の実施形態では、１つ以上のＮＩＣは、単一のコア５０５と関連付けられることができる。他の実施形態では、単一のＮＩＣは、１つ以上のコア５０５と関連付けられることができる。これらの実施形態では、負荷は、各コア５０５が実質的に類似する量の負荷を処理するように、１つ以上のコア５０５の間で分配され得る。ＮＩＣと関連付けられるコア５０５は、その特定のＮＩＣと関連付けられる全ての機能および／またはデータを処理してもよい。
【０１６０】
ＶＩＰまたはＮＩＣのデータに基づいてコアを横断して作業を分配することは、あるレベルの独立性を有し得るが、いくつかの実施形態では、これは、図５Ａの変動する負荷５１５によって図示されるようなコアの不平衡使用につながり得る。
【０１６１】
いくつかの実施形態では、負荷、作業、またはネットワークトラフィックは、任意のタイプおよび形態のデータフローに基づいて、コア５０５の間で分配されることができる。これらのアプローチのうちの別のものでは、作業は、データフローに基づいてコアの間で分割または分配されてもよい。例えば、アプライアンスをトラバースする、クライアントとサーバとの間のネットワークトラフィックは、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、セッションまたは接続を最初に確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、アプライアンス２００’をトラバースする、クライアントとサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。
【０１６２】
フローベースのデータ並列処理５２０では、データの分配は、要求／応答ペアリング、トランザクション、セッション、接続、またはアプリケーション通信等の任意のタイプのデータのフローに関連する。例えば、アプライアンスをトラバースする、クライアントとサーバとの間のネットワークトラフィックは、複数のコアのうちの１つのコアに分配され、それによって処理されてもよい。ある場合には、セッションまたは接続を最初に確立するコアは、そのセッションまたは接続のためのネットワークトラフィックが分配される、コアであってもよい。データフローの分配は、各コア５０５が実質的に等しい、または比較的に均一に分配された量の負荷、データ、またはネットワークトラフィックを搬送するようなものであってもよい。
【０１６３】
いくつかの実施形態では、データフローは、クライアント上のアプリケーションから生じるトランザクション、要求／応答通信、またはトラフィック等のネットワークトラフィックの任意の単位または部分に基づく。このようにして、いくつかの実施形態では、アプライアンス２００’をトラバースする、クライアントとサーバとの間のデータフローは、他のアプローチよりも平衡のとれた様式で分配されてもよい。一実施形態では、データフローは、トランザクションまたは一連のトランザクションに基づいて分配されることができる。本トランザクションは、いくつかの実施形態では、クライアントとサーバとの間にあり得、ＩＰアドレスまたは他のパケット識別子によって特徴付けられることができる。例えば、コア１  ５０５Ａは、特定のクライアントと特定のサーバとの間のトランザクションに専念することができ、したがって、コア１  ５０５Ａ上の負荷５１５Ａは、特定のクライアントとサーバとの間のトランザクションと関連付けられるネットワークトラフィックから成ってもよい。ネットワークトラフィックをコア１  ５０５Ａに配分することは、特定のクライアントまたはサーバのいずれかから生じる全てのデータパケットをコア１
５０５Ａにルーティングすることによって遂行されることができる。
【０１６４】
作業または負荷が、部分的にトランザクションに基づいてコアに分配されることができるが、他の実施形態では、負荷または作業は、パケット毎の基準で配分されることができる。これらの実施形態では、アプライアンス２００は、データパケットを傍受し、最少量の負荷を有するコア５０５にそれらを配分することができる。例えば、アプライアンス２００は、コア１上の負荷５１５Ａが残りのコア５０５Ｂ−Ｎ上の負荷５１５Ｂ−Ｎ未満であるため、第１の着信データパケットをコア１  ５０５Ａに配分し得る。いったん第１のデータパケットがコア１  ５０５Ａに配分されると、コア１  ５０５Ａ上の負荷５１５Ａの量は、第１のデータパケットを処理するために必要とされる処理リソースの量に比例して増加される。アプライアンス２００が第２のデータパケットを傍受するとき、アプライアンス２００は、コア４  ５０５Ｄが第２の最少量の負荷を有するため、負荷をコア４  ５０５Ｄに配分するであろう。最少量の負荷を伴うコアにデータパケットを配分することは、いくつかの実施形態では、各コア５０５に分配される負荷５１５Ａ−Ｎが実質的に等しいままであることを確実にすることができる。
【０１６５】
他の実施形態では、負荷は、ネットワークトラフィックの区分が特定のコア５０５に配分される、単位毎の基準で配分されることができる。上記の実施例は、パケット毎の基準での負荷分散を図示する。他の実施形態では、負荷は、１０、１００、または１，０００個毎のパケットが、最少量の負荷を有するコア５０５に配分されるように、パケットの数に基づいて配分されることができる。コア５０５に配分されるパケットの数は、アプリケーション、ユーザ、または管理者によって決定される数であり得、ゼロを上回る任意の数であり得る。なおも他の実施形態では、負荷は、パケットが事前決定された時間量にわたって特定のコア５０５に分配されるように、時間メトリックに基づいて配分されることができる。これらの実施形態では、パケットは、５ミリ秒にわたって、またはユーザ、プログラム、システム、管理者によって、または別様に決定される任意の時間周期にわたって、特定のコア５０５に分配されることができる。事前決定された時間周期が経過した後、データパケットが、事前決定された時間周期にわたって異なるコア５０５に伝送される。
【０１６６】
１つ以上のコア５０５の間で作業、負荷、またはネットワークトラフィックを分配するためのフローベースのデータ並列処理方法は、上記の実施形態の任意の組み合わせを備えることができる。これらの方法は、アプライアンス２００の任意の部分によって、パケットエンジン等のコア５０５のうちの１つの上で実行されるアプリケーションまたは実行可能命令のセットによって、またはアプライアンス２００と通信するコンピューティングデバイス上で実行される任意のアプリケーション、プログラム、またはエージェントによって、実施されることができる。
【０１６７】
図５Ａに図示される機能およびデータ並列処理コンピューティング方式は、機能並列処理５００、データ並列処理５４０、フローベースのデータ並列処理５２０、またはそれらの任意の部分を包含する、ハイブリッド並列処理または分散処理方式を生成するように任意の様式で組み合わせられることができる。ある場合には、マルチコアシステムは、任意のタイプおよび形態の負荷分散方式を使用し、１つ以上のコア５０５の間で負荷を分配してもよい。負荷分散方式は、機能およびデータ並列処理方式のうちのいずれか、またはそれらの組み合わせとの任意の組み合わせで、使用されてもよい。
【０１６８】
図５Ｂには、任意のタイプおよび形態の１つ以上のシステム、アプライアンス、デバイス、またはコンポーネントであり得る、マルチコアシステム５４５の実施形態が図示される。本システム５４５は、いくつかの実施形態では、１つ以上の処理コア５０５Ａ−Ｎを有するアプライアンス２００内に含まれることができる。システム５４５はさらに、メモリバス５５６と通信する１つ以上のパケットエンジン（ＰＥ）またはパケット処理エンジン（ＰＰＥ）５４８Ａ−Ｎを含むことができる。メモリバスは、１つ以上の処理コア５０５Ａ−Ｎと通信するために使用されてもよい。また、システム５４５内には、１つ以上のネットワークインターフェースカード（ＮＩＣ）５５２と、１つ以上の処理コア５０５Ａ−Ｎとさらに通信し得るフロー分配器５５０とが、含まれることができる。フロー分配器５５０は、受信側スケーラ（ＲＳＳ）または受信側スケーリング（ＲＳＳ）モジュール５６０を備えることができる。
【０１６９】
さらに図５Ｂを参照すると、より詳細には、一実施形態では、パケットエンジン５４８Ａ−Ｎは、図２Ａおよび２Ｂに説明されるアプライアンスの任意の部分等の本明細書に説明されるアプライアンス２００の任意の部分を備えることができる。パケットエンジン５４８Ａ−Ｎは、いくつかの実施形態では、以下の要素のうちのいずれか、すなわち、パケットエンジン２４０、ネットワークスタック２６７、キャッシュマネージャ２３２、ポリシエンジン２３６、圧縮エンジン２３８、暗号化エンジン２３４、ＧＵＩ２１０、ＣＬＩ２１２、シェルサービス２１４、監視プログラム２１６、およびメモリバス５５６または１つ以上のコア５０５Ａ−Ｎのうちのいずれか１つからデータパケットを受信することが可能な任意の他のソフトウェアまたはハードウェア要素を備えることができる。いくつかの実施形態では、パケットエンジン５４８Ａ−Ｎは、１つ以上のｖサーバ２７５Ａ−Ｎ、またはそれらの任意の部分を備えることができる。他の実施形態では、パケットエンジン５４８Ａ−Ｎは、以下の機能性の任意の組み合わせ、すなわち、ＳＳＬ  ＶＰＮ２８０、イントラネットＵＰ２８２、切替２８４、ＤＮＳ２８６、パケット加速２８８、アプリＦＷ２９０、監視エージェント１９７によって提供される監視等の監視、ＴＣＰスタックとして機能することと関連付けられる機能性、負荷分散、ＳＳＬオフオードおよび処理、コンテンツ切替、ポリシ評価、キャッシング、圧縮、符号化、展開、復号、アプリケーションファイアウォール機能性、ＸＭＬ処理および加速、およびＳＳＬ  ＶＰＮコネクティビティを提供することができる。
【０１７０】
パケットエンジン５４８Ａ−Ｎは、いくつかの実施形態では、特定のサーバ、ユーザ、クライアント、またはネットワークと関連付けられることができる。パケットエンジン５４８が特定のエンティティと関連付けられるようになるため、そのパケットエンジン５４８は、そのエンティティと関連付けられるデータパケットを処理することができる。例えば、パケットエンジン５４８が第１のユーザと関連付けられた場合、そのパケットエンジン５４８は、第１のユーザによって生成されるパケット、または第１のユーザと関連付けられる宛先アドレスを有するパケットを処理し、それに作用するであろう。同様に、パケットエンジン５４８は、パケットエンジン５４８が特定のエンティティによって生成されていない、またはそのエンティティに向けられていない任意のデータパケットを処理し、別様にそれに作用し得るように、そのエンティティと関連付けられないことを選定してもよい。
【０１７１】
ある事例では、パケットエンジン５４８Ａ−Ｎは、図５Ａに図示される機能および／またはデータ並列処理方式のうちのいずれかを実施するように構成されることができる。これらの事例では、パケットエンジン５４８Ａ−Ｎは、分配が並列処理または分配方式によるものであるように、処理コア５０５Ａ−Ｎの間で機能またはデータを分配することができる。いくつかの実施形態では、単一のパケットエンジン５４８Ａ−Ｎが、負荷分散方式を実施する一方で、他の実施形態では、１つ以上のパケットエンジン５４８Ａ−Ｎが、負荷分散方式を実施する。各コア５０５Ａ−Ｎは、一実施形態では、負荷分散がパケットエンジンによって実施され得るように、特定のパケットエンジン５４８と関連付けられることができる。負荷分散は、本実施形態では、パケットエンジン５４８Ａ−Ｎが負荷を分配する場所を集合的に決定し得るように、コア５０５と関連付けられる各パケットエンジン５４８Ａ−Ｎがコアと関連付けられる他のパケットエンジンと通信することを要求し得る。本プロセスの一実施形態は、負荷に関して各パケットエンジンから投票を受信するアービタを含むことができる。アービタは、部分的に、エンジンの投票の時期、ある場合には、エンジンの関連付けられるコア５０５上の負荷の現在の量と関連付けられる優先度値に基づいて、負荷を各パケットエンジン５４８Ａ−Ｎに分配することができる。
【０１７２】
コア上で起動するパケットエンジンのうちのいずれかは、ユーザモード、カーネル、またはそれらの任意の組み合わせで起動してもよい。いくつかの実施形態では、パケットエンジンは、ユーザまたはアプリケーション空間内で起動するアプリケーションまたはプログラムとして動作する。これらの実施形態では、パケットエンジンは、任意のタイプおよび形態のインターフェースを使用し、カーネルによって提供される任意の機能性にアクセスしてもよい。いくつかの実施形態では、パケットエンジンは、カーネルモードで、またはカーネルの一部として動作する。いくつかの実施形態では、パケットエンジンの第１の部分が、ユーザモードで動作する一方で、パケットエンジンの第２の部分は、カーネルモードで動作する。いくつかの実施形態では、第１のコア上の第１のパケットエンジンが、カーネルモードで実行される一方で、第２のコア上の第２のパケットエンジンは、ユーザモードで実行される。いくつかの実施形態では、パケットエンジンまたはその任意の部分は、ＮＩＣまたはその任意のドライバ上で、またはそれと併せて動作する。
【０１７３】
いくつかの実施形態では、メモリバス５５６は、任意のタイプおよび形態のメモリまたはコンピュータバスであり得る。単一のメモリバス５５６が図５Ｂに描写されるが、システム５４５は、任意の数のメモリバス５５６を備えることができる。一実施形態では、各パケットエンジン５４８は、１つ以上の個々のメモリバス５５６と関連付けられることができる。
【０１７４】
ＮＩＣ５５２は、いくつかの実施形態では、本明細書に説明されるネットワークインターフェースカードまたは機構のうちのいずれかであり得る。ＮＩＣ５５２は、任意の数のポートを有することができる。ＮＩＣは、任意のタイプおよび形態のネットワーク１０４に接続するように設計および構築されることができる。単一のＮＩＣ５５２が図示されるが、システム５４５は、任意の数のＮＩＣ５５２を備えることができる。いくつかの実施形態では、各コア５０５Ａ−Ｎは、１つ以上の単一のＮＩＣ５５２と関連付けられることができる。したがって、各コア５０５は、特定のコア５０５専用の単一のＮＩＣ５５２と関連付けられることができる。
【０１７５】
コア５０５Ａ−Ｎは、本明細書に説明されるプロセッサのうちのいずれかを備えることができる。さらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５構成のうちのいずれかに従って、構成されることができる。なおもさらに、コア５０５Ａ−Ｎは、本明細書に説明されるコア５０５機能性のうちのいずれかを有することができる。図５Ｂは、７つのコア５０５Ａ−Ｇを図示するが、任意の数のコア５０５が、システム５４５内に含まれることができる。特に、システム５４５は、「Ｎ」がゼロを上回る整数である、「Ｎ」個のコアを備えることができる。
【０１７６】
コアは、そのコアに配分される、またはその使用のために割り当てられる、メモリを有する、または使用してもよい。メモリは、そのコアの私設またはローカルメモリと見なされ、そのコアのみによってアクセス可能であり得る。コアは、複数のコアに共有される、または割り当てられる、メモリを有する、または使用してもよい。メモリは、１つを上回るコアによってアクセス可能である、公衆または共有メモリと見なされ得る。コアは、私設および公衆メモリの任意の組み合わせを使用してもよい。コア毎に別個のアドレス空間があると、あるレベルの協調が、同一のアドレス空間を使用する場合から排除される。別個のアドレス空間があると、コアは、他のコアとの衝突について心配することなく、コアの独自のアドレス空間内の情報およびデータに作業を実施することができる。各パケットエンジンは、ＴＣＰおよび／またはＳＳＬ接続のための別個のメモリプールを有してもよい。
【０１７７】
さらに図５Ｂを参照すると、図５Ａに関連して上記に説明されるコア５０５の機能性および／または実施形態のうちのいずれかは、図４Ａおよび４Ｂに関連して上記に説明される仮想化された環境の任意の実施形態で展開されることができる。コア５０５の機能性が物理的プロセッサ５０５の形態で展開される代わりに、そのような機能性は、クライアント１０２、サーバ１０６、またはアプライアンス２００等の任意のコンピューティングデバイス１００上の仮想化された環境４００内で展開されてもよい。他の実施形態では、コア５０５の機能性がアプライアンスまたは単一のデバイスの形態で展開される代わりに、機能性は、任意の配列で複数のデバイスを横断して展開されてもよい。例えば、１つのデバイスは、２つ以上のコアを備えてもよく、別のデバイスは、２つ以上のコアを備えてもよい。例えば、マルチコアシステムは、コンピューティングデバイスのクラスタ、サーバファーム、またはコンピューティングデバイスのネットワークを含んでもよい。いくつかの実施形態では、コア５０５の機能性がコアの形態で展開される代わりに、機能性は、複数の単一コアプロセッサ等の複数のプロセッサ上で展開されてもよい。
【０１７８】
一実施形態では、コア５０５は、任意のタイプおよび形態のプロセッサであってもよい。いくつかの実施形態では、コアは、本明細書に説明される任意のプロセッサまたは中央処理ユニットと実質的に同様に機能することができる。いくつかの実施形態では、コア５０５は、本明細書に説明される任意のプロセッサの任意の部分を備えてもよい。図５Ａは、７つのコアを図示するが、「Ｎ」が１を上回る任意の整数である、任意の「Ｎ」の数のコアがアプライアンス２００内に存在し得る。いくつかの実施形態では、コア５０５が、共通アプライアンス２００内にインストールされることができる一方で、他の実施形態では、コア５０５は、相互に通信可能に接続される１つ以上のアプライアンス２００内にインストールされることができる。コア５０５が、いくつかの実施形態では、グラフィックス処理ソフトウェアを備えることができる一方で、他の実施形態では、コア５０５は、一般処理能力を提供する。コア５０５は、物理的に相互の近傍にインストールされることができる、および／または相互に通信可能に接続されることができる。コアは、データをコアに、そこから、および／またはその間で転送するためのコアに物理的および／または通信可能に結合される、任意のタイプおよび形態のバスまたはサブシステムによって接続されてもよい。
【０１７９】
各コア５０５は、他のコアと通信するためのソフトウェアを備えることができるが、いくつかの実施形態では、コアマネージャ（図示せず）は、各コア５０５の間の通信を促進することができる。いくつかの実施形態では、カーネルは、コア管理を提供してもよい。コアは、種々のインターフェース機構を使用して、相互とインターフェースをとる、または通信してもよい。いくつかの実施形態では、コア間メッセージングが、コアを接続するバスまたはサブシステムを介して、第１のコアがメッセージまたはデータを第２のコアに送信すること等、コアの間で通信するために使用されてもよい。いくつかの実施形態では、コアは、任意のタイプおよび形態の共有メモリインターフェースを介して通信してもよい。一実施形態では、全てのコアの間で共有される１つ以上のメモリ場所が存在し得る。いくつかの実施形態では、各コアは、相互のコアと共有される別個のメモリ場所を有してもよい。例えば、第１のコアは、第２のコアとの第１の共有メモリと、第３のコアとの第２の共有メモリとを有してもよい。いくつかの実施形態では、コアは、カーネルを介した関数呼び出し等の任意のタイプのプログラミングまたはＡＰＩを介して通信してもよい。いくつかの実施形態では、オペレーティングシステムは、複数のコアデバイスを認識およびサポートし、コア間通信のためのインターフェースおよびＡＰＩを提供してもよい。
【０１８０】
フロー分配器５５０は、任意のタイプおよび形態のハードウェア上で実行される、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、または任意のタイプおよび形態の実行可能命令であり得る。いくつかの実施形態では、フロー分配器５５０は、本明細書に説明される動作および機能のうちのいずれかを実施するための回路の任意の設計および構造を有してもよい。いくつかの実施形態では、フロー分配器は、コア５０５および／またはコア上で起動するパケットエンジンまたはＶＩＰの間のデータパケットの分配を分配、転送、ルーティング、制御、および／または管理する。フロー分配器５５０は、いくつかの実施形態では、インターフェースマスタと称されることができる。一実施形態では、フロー分配器５５０は、アプライアンス２００のコアまたはプロセッサ上で実行される実行可能命令のセットを備える。別の実施形態では、フロー分配器５５０は、アプライアンス２００と通信するコンピューティングマシン上で実行される実行可能命令のセットを備える。いくつかの実施形態では、フロー分配器５５０は、ファームウェア等のＮＩＣ上で実行される実行可能命令のセットを備える。なおも他の実施形態では、フロー分配器５５０は、コアまたはプロセッサの間でデータパケットを分配するためのソフトウェアおよびハードウェアの任意の組み合わせを備える。一実施形態では、フロー分配器５５０が、コア５０５Ａ−Ｎのうちの少なくとも１つの上で実行される一方で、他の実施形態では、各コア５０５Ａ−Ｎに割り当てられる別個のフロー分配器５５０は、関連付けられるコア５０５Ａ−Ｎ上で実行される。フロー分配器は、任意のタイプおよび形態の統計的または確率的アルゴリズムまたは意思決定を使用し、コアを横断してフローの平衡を保ってもよい。ＮＩＣ等のアプライアンスのハードウェアまたはカーネルは、ＮＩＣおよび／またはコアを横断して順次動作をサポートするように設計および構築されてもよい。
【０１８１】
システム５４５が１つ以上のフロー分配器５５０を備える、実施形態では、各フロー分配器５５０は、プロセッサ５０５またはパケットエンジン５４８と関連付けられることができる。フロー分配器５５０は、各フロー分配器５５０がシステム５４５内で実行される他のフロー分配器５５０と通信することを可能にする、インターフェース機構を備えることができる。一事例では、１つ以上のフロー分配器５５０は、相互と通信することによって、負荷の平衡を保つ方法を決定することができる。本プロセスは、次いで、負荷を受容するべきであるフロー分配器５５０を決定する、アービタに投票を提出するために、上記に説明されるプロセスと実質的に同様に動作することができる。他の実施形態では、第１のフロー分配器５５０’は、関連付けられるコア上の負荷を識別し、以下の基準、すなわち、関連付けられるコア上の負荷が事前決定された閾値を上回ること、関連付けられるコア上の負荷が事前決定された閾値を下回ること、関連付けられるコア上の負荷が他のコア上の負荷未満であること、または部分的にプロセッサ上の負荷の量に基づいてデータパケットを転送する場所を決定するために使用され得る任意の他のメトリックのうちのいずれかに基づいて、第１のデータパケットを関連付けられるコアに転送するかどうかを決定することができる。
【０１８２】
フロー分配器５５０は、本明細書に説明されるもの等の分配、コンピューティング、または負荷分散方式に従って、コア５０５の間でネットワークトラフィックを分配することができる。一実施形態では、フロー分配器は、機能並列処理分配方式５５０、データ並列処理負荷分配方式５４０、フローベースのデータ並列処理分配方式５２０、またはこれらの分配方式の任意の組み合わせ、または複数のプロセッサの間で負荷を分配するための任意の負荷分散方式のうちのいずれか１つに従って、ネットワークトラフィックを分配することができる。フロー分配器５５０は、したがって、データパケットを取り入れ、動作負荷分散または分配方式に従ってプロセッサを横断してそれらを分配することによって、負荷分配器として作用することができる。一実施形態では、フロー分配器５５０は、１つ以上の動作、機能、または論理を備え、故に、パケット、作業、または負荷を分配する方法を決定することができる。なおも他の実施形態では、フロー分配器５５０は、データパケットと関連付けられるソースアドレスおよび宛先アドレスを識別し得る、１つ以上の副次動作、機能、または論理を備え、故に、パケットを分配することができる。
【０１８３】
いくつかの実施形態では、フロー分配器５５０は、受信側スケーリング（ＲＳＳ）ネットワークドライバ、モジュール５６０、または１つ以上のコア５０５の間でデータパケットを分配する任意のタイプおよび形態の実行可能命令を備えることができる。ＲＳＳモジュール５６０は、ハードウェアおよびソフトウェアの任意の組み合わせを備えることができる。いくつかの実施形態では、ＲＳＳモジュール５６０は、フロー分配器５５０と併せて稼働し、コア５０５Ａ−Ｎを横断して、またはマルチプロセッサネットワーク内で複数のプロセッサの間で、データパケットを分配する。ＲＳＳモジュール５６０は、いくつかの実施形態では、ＮＩＣ５５２内で実行されることができ、他の実施形態では、コア５０５のうちのいずれか１つの上で実行されることができる。
【０１８４】
いくつかの実施形態では、ＲＳＳモジュール５６０は、ＭＩＣＲＯＳＯＦＴ受信側スケーリング（ＲＳＳ）方式を使用する。一実施形態では、ＲＳＳは、データの順序正しい配信を維持しながら、受信処理がシステム内の複数のプロセッサを横断して平衡を保たれることを可能にする、Ｍｉｃｒｏｓｏｆｔ拡張可能ネットワーキングイニシアチブ技術である。ＲＳＳは、任意のタイプおよび形態のハッシング方式を使用し、ネットワークパケットを処理するためのコアまたはプロセッサを決定してもよい。
【０１８５】
ＲＳＳモジュール５６０は、テプリッツハッシュ関数等の任意のタイプおよび形態のハッシュ関数を適用することができる。ハッシュ関数は、ハッシュタイプまたは任意の一連の値に適用されてもよい。ハッシュ関数は、任意のセキュリティレベルのセキュアハッシュであってもよい、または別様に暗号論的にセキュアである。ハッシュ関数は、ハッシュキーを使用してもよい。キーのサイズは、ハッシュ関数に依存する。テプリッツハッシュに関して、サイズは、ＩＰｖ６には４０バイト、ＩＰｖ４には１６バイトであってもよい。
【０１８６】
ハッシュ関数は、いずれか１つ以上の基準または設計目標に基づいて、設計および構築されてもよい。いくつかの実施形態では、ＴＣＰ／ＩＰｖ４、ＴＣＰ／ＩＰｖ６、ＩＰｖ４、およびＩＰｖ６ヘッダを含む、異なるハッシュ入力および異なるハッシュタイプに関するハッシュ結果の均一な分配を提供する、ハッシュ関数が、使用されてもよい。いくつかの実施形態では、少数のバケットが存在する（例えば、２つまたは４つ）ときに均一に分配されるハッシュ結果を提供する、ハッシュ関数が、使用されてもよい。いくつかの実施形態では、多数のバケットが存在した（例えば、６４個のバケット）ときにランダムに分配されるハッシュ結果を提供する、ハッシュ関数が、使用されてもよい。いくつかの実施形態では、ハッシュ関数は、計算またはリソース使用料のレベルに基づいて決定される。いくつかの実施形態では、ハッシュ関数は、ハードウェアにハッシュを実装することの容易性または困難に基づいて決定される。いくつかの実施形態では、ハッシュ関数は、悪意のある遠隔ホストが全て同一のバケットのハッシュ値を計算するであろうパケットを送信することの容易性または困難に基づいて決定される。
【０１８７】
ＲＳＳは、一連の値等の任意のタイプおよび形態の入力からハッシュを生成してもよい。本一連の値は、ネットワークパケットの任意のヘッダ、フィールド、またはペイロード、またはその部分等のネットワークパケットの任意の部分を含むことができる。いくつかの実施形態では、ハッシュへの入力は、ハッシュタイプと称され、以下のうちのいずれか、すなわち、少なくとも２つのＩＰアドレスおよび２つのポートを備える４タプル、値のいずれか４つのセットを備える４タプル、６タプル、２タプル、および／または任意の他の一連の数または値等のネットワークパケットまたはデータフローと関連付けられる情報の任意のタプルを含んでもよい。以下は、ＲＳＳによって使用され得るハッシュタイプの実施例である。
【０１８８】
ソースＴＣＰポート、ソースＩＰバージョン４（ＩＰｖ４）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ４アドレスの４タプル。
【０１８９】
ソースＴＣＰポート、ソースＩＰバージョン６（ＩＰｖ６）アドレス、宛先ＴＣＰポート、および宛先ＩＰｖ６アドレスの４タプル。
【０１９０】
ソースＩＰｖ４アドレスおよび宛先ＩＰｖ４アドレスの２タプル。
【０１９１】
ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
【０１９２】
ＩＰｖ６拡張ヘッダを解析するためのサポートを含む、ソースＩＰｖ６アドレスおよび宛先ＩＰｖ６アドレスの２タプル。
【０１９３】
ハッシュ結果またはその任意の部分は、ネットワークパケットを分配するためのパケットエンジンまたはＶＩＰ等のコアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、１つ以上のハッシュビットまたはマスクが、ハッシュ結果に適用される。ハッシュビットまたはマスクは、任意の数のビットまたはバイトであってもよい。ＮＩＣは、７ビット等の任意の数のビットをサポートしてもよい。ネットワークスタックは、初期化中に使用される実際のビット数を設定してもよい。数は、１〜７を含むであろう。
【０１９４】
ハッシュ結果は、バケットテーブルまたは間接テーブル等の任意のタイプおよび形態のテーブルを介して、コアまたはエンティティを識別するために使用されてもよい。いくつかの実施形態では、ハッシュ結果ビットの数は、テーブルの中へインデックス化するために使用される。ハッシュマスクの範囲は、間接テーブルのサイズを効果的に画定し得る。ハッシュ結果の任意の部分またはハッシュ結果自体が、間接テーブルの中へインデックス化するために使用されてもよい。テーブル内の値は、コアまたはプロセッサ識別子によって等、コアまたはプロセッサのうちのいずれかを識別してもよい。いくつかの実施形態では、マルチコアシステムのコアの全てが、テーブル内で識別される。他の実施形態では、マルチコアシステムのコアのポートが、テーブル内で識別される。間接テーブルは、ハッシュマスクによってインデックス化され得る、任意の数のバケット、例えば、２〜１２８個のバケットを備えてもよい。各バケットは、コアまたはプロセッサを識別するインデックス値の範囲を備えてもよい。いくつかの実施形態では、フローコントローラおよび／またはＲＳＳモジュールは、間接テーブルを変更することによって、ネットワーク再平衡およびネットワーク負荷の平衡を再び保ってもよい。
【０１９５】
いくつかの実施形態では、マルチコアシステム５７５は、ＲＳＳドライバまたはＲＳＳモジュール５６０を含まない。これらの実施形態のうちのいくつかでは、ソフトウェア操向モジュール（図示せず）またはシステム内のＲＳＳモジュールのソフトウェア実施形態が、フロー分配器５５０と併せて、またはその一部として動作し、パケットをマルチコアシステム５７５内のコア５０５に操向することができる。
【０１９６】
フロー分配器５５０は、いくつかの実施形態では、アプライアンス２００上、コア５０５のうちのいずれか１つの上、およびマルチコアシステム５７５内に含まれるデバイスまたはコンポーネントのうちのいずれか１つの上の任意のモジュールまたはプログラム内で実行される。いくつかの実施形態では、フロー分配器５５０’が、第１のコア５０５Ａ上で実行されることができる一方で、他の実施形態では、フロー分配器５５０”は、ＮＩＣ５５２上で実行されることができる。なおも他の実施形態では、フロー分配器５５０’のインスタンスが、マルチコアシステム５７５の中に含まれる各コア５０５上で実行されることができる。本実施形態では、フロー分配器５５０’の各インスタンスは、フロー分配器５５０’の他のインスタンスと通信し、コア５０５を横断して前後にパケットを転送することができる。要求パケットへの応答が同一のコアによって処理されない場合がある、すなわち、第１のコアが要求を処理する一方で、第２のコアが応答を処理する、状況が存在する。これらの状況では、フロー分配器５５０’のインスタンスは、パケットを傍受し、それを所望されるまたは正しいコア５０５に転送することができる、すなわち、フロー分配器インスタンス５５０’は、応答を第１のコアに転送することができる。フロー分配器５５０’の複数のインスタンスは、任意の数のコア５０５およびコア５０５の任意の組み合わせの上で実行されることができる。
【０１９７】
フロー分配器は、いずれか１つ以上の規則またはポリシに応答して動作してもよい。規則は、ネットワークパケット、データ、またはデータフローを受信するためのコアまたはパケット処理エンジンを識別してもよい。規則は、ソースおよび宛先ＩＰアドレスおよびソースおよび宛先ポートの４タプル等のネットワークパケットに関連する任意のタイプおよび形態のタプル情報を識別してもよい。規則によって規定されるタプルに合致する受信されたパケットに基づいて、フロー分配器は、パケットをコアまたはパケットエンジンに転送してもよい。いくつかの実施形態では、パケットは、共有メモリおよび／またはコア間メッセージングを介して、コアに転送される。
【０１９８】
図５Ｂは、マルチコアシステム５７５内で実行されるようなフロー分配器５５０を図示するが、いくつかの実施形態では、フロー分配器５５０は、マルチコアシステム５７５から遠隔に位置するコンピューティングデバイスまたはアプライアンス上で実行されることができる。そのような実施形態では、フロー分配器５５０は、マルチコアシステム５７５と通信し、データパケットを取り入れ、１つ以上のコア５０５を横断してパケットを分配することができる。フロー分配器５５０は、一実施形態では、アプライアンス２００に向けられたデータパケットを受信し、分配方式を受信されたデータパケットに適用し、データパケットをマルチコアシステム５７５の１つ以上のコア５０５に分配することができる。一実施形態では、フロー分配器５５０は、各パケットがマルチコアシステム５７５のサブノードに向かって標的化されるように、各パケットと関連付けられるメタデータを改変することによって、ルータが特定のコア５０５を標的化し得るように、ルータまたは他のアプライアンスの中に含まれることができる。そのような実施形態では、ＣＩＳＣＯのｖｎタグ機構が、適切なメタデータを用いて各パケットを改変する、またはタグ付けするために使用されることができる。
【０１９９】
図５Ｃには、１つ以上の処理コア５０５Ａ−Ｎを備える、マルチコアシステム５７５の実施形態が図示される。要するに、コア５０５のうちの１つは、制御コア５０５Ａとして指定されることができ、他のコア５０５のための制御プレーン５７０として使用されることができる。他のコアが、データプレーン内で動作する二次コアであってもよい一方で、制御コアは、制御プレーンを提供する。コア５０５Ａ−Ｎは、グローバルキャッシュ５８０を共有してもよい。制御コアが、制御プレーンを提供する一方で、マルチコアシステム内の他のコアは、データプレーンを形成または提供する。これらのコアが、ネットワークトラフィックにデータ処理機能性を実施する一方で、制御は、マルチコアシステムの初期化、構成、および制御を提供する。
【０２００】
さらに図５Ｃを参照すると、より詳細には、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のプロセッサであり得る。さらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、図５Ｃに説明されるシステム５７５内で機能することが可能な任意のプロセッサであり得る。なおもさらに、コア５０５Ａ−Ｎおよび制御コア５０５Ａは、本明細書に説明される任意のコアまたはコアのグループであり得る。制御コアは、他のコアと異なるタイプのコアまたはプロセッサであってもよい。いくつかの実施形態では、制御は、異なるパケットエンジンを動作させる、または他のコアのパケットエンジンと異なるように構成されるパケットエンジンを有してもよい。
【０２０１】
コアのそれぞれのメモリの任意の部分が、コアによって共有されるグローバルキャッシュに配分される、またはそれに使用されてもよい。要するに、各コアのメモリのそれぞれの事前決定された割合または事前決定された量が、グローバルキャッシュに使用されてもよい。例えば、各コードの各メモリの５０％が、共有グローバルキャッシュに専念する、または配分されてもよい。すなわち、図示される実施形態では、制御プレーンコアまたはコア１を除外する各コアの２ＧＢが、２８ＧＢ共有グローバルキャッシュを形成するために使用されてもよい。構成サービスを介するもの等の制御プレーンの構成は、共有グローバルキャッシュに使用されるメモリの量を決定してもよい。いくつかの実施形態では、各コアは、グローバルキャッシュによる使用のために異なる量のメモリを提供してもよい。他の実施形態では、いずれか１つのコアは、いかなるメモリも提供しない、またはグローバルキャッシュを使用しない場合がある。いくつかの実施形態では、コアのうちのいずれかはまた、グローバル共有メモリに配分されないメモリ内のローカルキャッシュを有してもよい。コアはそれぞれ、ネットワークトラフィックの任意の部分をグローバル共有キャッシュに記憶してもよい。コアはそれぞれ、要求または応答で使用するための任意のコンテンツに関してキャッシュをチェックしてもよい。コアのうちのいずれかは、データフロー、要求、または応答で使用するためにグローバル共有キャッシュからコンテンツを入手してもよい。
【０２０２】
グローバルキャッシュ５８０は、本明細書に説明される任意のメモリまたは記憶要素等の任意のタイプおよび形態のメモリまたは記憶要素であり得る。いくつかの実施形態では、コア５０５は、事前決定された量のメモリ（すなわち、３２ＧＢまたはシステム５７５に相応の任意の他のメモリ量）へのアクセスを有してもよい。グローバルキャッシュ５８０が、その事前決定された量のメモリから配分されることができる一方で、残りの利用可能なメモリは、コア５０５の間で配分されることができる。他の実施形態では、各コア５０５は、事前決定された量のメモリを有することができる。グローバルキャッシュ５８０は、各コア５０５に配分されるメモリの量を備えることができる。本メモリ量は、バイト単位で測定されることができる、または各コア５０５に配分されるメモリの割合として測定されることができる。したがって、グローバルキャッシュ５８０は、各コア５０５と関連付けられるメモリから１ＧＢのメモリを備えることができる、または各コア５０５と関連付けられるメモリの２０パーセントまたは半分を備えることができる。いくつかの実施形態では、コア５０５の一部のみが、メモリをグローバルキャッシュ５８０に提供する一方で、他の実施形態では、グローバルキャッシュ５８０は、コア５０５に配分されないメモリを備えることができる。
【０２０３】
各コア５０５は、グローバルキャッシュ５８０を使用し、ネットワークトラフィックまたはキャッシュデータを記憶することができる。いくつかの実施形態では、コアのパケットエンジンは、グローバルキャッシュを使用し、複数のパケットエンジンによって記憶されたデータをキャッシュに格納し、使用する。例えば、図２Ａのキャッシュマネージャおよび図２Ｂのキャッシュ機能性は、グローバルキャッシュを使用し、加速のためにデータを共有してもよい。例えば、パケットエンジンはそれぞれ、ＨＴＭＬデータ等の応答をグローバルキャッシュに記憶してもよい。コア上で動作するキャッシュマネージャのうちのいずれかは、グローバルキャッシュにアクセスしてもよく、クライアント要求への応答をサーバキャッシュに格納してもよい。
【０２０４】
いくつかの実施形態では、コア５０５は、グローバルキャッシュ５８０を使用し、部分的にポートに基づいてデータフローを決定するために使用され得るポート配分テーブルを記憶することができる。他の実施形態では、コア５０５は、グローバルキャッシュ５８０を使用し、着信および発信データパケットをダイレクトする場所を決定するためにフロー分配器によって使用され得るアドレスルックアップテーブルまたは任意の他のテーブルまたはリストを記憶することができる。コア５０５が、いくつかの実施形態では、キャッシュ５８０から読み取り、かつそこに書き込むことができる一方で、他の実施形態では、コア５０５は、キャッシュ５８０から読み取る、またはそこに書き込むことのみができる。コアは、グローバルキャッシュを使用し、コア間通信を実施してもよい。
【０２０５】
グローバルキャッシュ５８０は、各区分が特定のコア５０５に専念し得る、個々のメモリ各区分に区分されてもよい。一実施形態では、制御コア５０５Ａが、より多量の利用可能なキャッシュを受容することができる一方で、他のコア５０５は、変動する量またはグローバルキャッシュ５８０へのアクセスを受容することができる。
【０２０６】
いくつかの実施形態では、システム５７５は、制御コア５０５Ａを備えることができる。図５Ｃは、コア１  ５０５Ａを制御コアとして図示するが、制御コアは、アプライアンス２００またはマルチコアシステム内の任意コアであり得る。さらに、単一の制御コアのみが描写されるが、システム５７５は、システムにわたって制御のレベルをそれぞれ有する、１つ以上の制御コアを備えることができる。いくつかの実施形態では、１つ以上の制御コアはそれぞれ、システム５７５の特定の側面を制御することができる。例えば、１つのコアが、使用する分配方式を決定することを制御することができる一方で、別のコアは、グローバルキャッシュ５８０のサイズを決定することができる。
【０２０７】
マルチコアシステムの制御プレーンは、専用管理コアとして、またはマスタコアとしてのコアの指定および構成であってもよい。本制御プレーンコアは、マルチコアシステム内の複数のコアの動作および機能性の制御、管理、および協調を提供してもよい。本制御プレーンコアは、システムの初期化および構成を含む、マルチコアシステム内の複数のコアの間のシステムのメモリの配分および使用の制御、管理、および協調を提供してもよい。いくつかの実施形態では、制御プレーンは、コアへのデータフローの割当およびデータフローに基づくコアへのネットワークパケットの分配を制御するためのフロー分配器を含む。いくつかの実施形態では、制御プレーンコアは、パケットエンジンを起動し、他の実施形態では、制御プレーンコアは、システムの他のコアの管理および制御に専念する。
【０２０８】
制御コア５０５Ａは、各コア５０５に配分されるべきであるメモリの量を決定すること、または特定の機能またはハードウェア／ソフトウェアエンティティを取り扱うように割り当てられるべきであるコア５０５を決定すること等の他のコア５０５に対する制御のレベルを行使することができる。制御コア５０５Ａは、いくつかの実施形態では、制御プレーン５７０内のこれらのコア５０５に対する制御を行使することができる。したがって、制御コア５０５Ａによって制御されないプロセッサが、制御プレーン５７０の外側に存在し得る。制御プレーン５７０の境界を決定することは、システム５７５内で実行される制御コア５０５Ａまたはエージェントによって、制御コア５０５Ａによって制御されるこれらのコア５０５のリストを維持することを含むことができる。制御コア５０５Ａは、以下のうちのいずれか、すなわち、コアの初期化、コアが利用不可能であるときを決定すること、１つのコアが故障するときに負荷を他のコア５０５に再分配すること、実装する分配方式を決定すること、ネットワークトラフィックを受信するべきであるコアを決定すること、各コアに配分されるべきであるキャッシュの量を決定すること、特定の機能または要素を特定のコアに割り当てるかどうかを決定すること、コアが相互と通信することを可能にするかどうかを決定すること、グローバルキャッシュ５８０のサイズを決定すること、およびシステム５７５内のコアの機能、構成、または動作の任意の他の決定を制御することができる。
Ｆ．分散クラスタアーキテクチャを提供するためのシステムおよび方法
【０２０９】
前の節で議論されるように、トランジスタ間隔およびＣＰＵ速度増加への限界を克服するために、多くのＣＰＵ製造業者は、単一のより高速のＣＰＵさえも可能なものを超えて性能を改良するように、マルチコアＣＰＵを組み込んできた。類似またはさらなる性能獲得は、分散またはクラスタ化アプライアンスとしてともに、単一またはマルチコアのいずれかである、複数のアプライアンスを動作させることによって行われ得る。個々のコンピューティングデバイスまたはアプライアンスは、クラスタのノードと称され得る。集中管理システムが、負荷分散、分配、構成、または他のタスクを実施し、ノードが単一のコンピューティングシステムとして併せて動作することを可能にしてもよい。外部で、またはサーバおよびクライアントを含む、他のデバイスに対して、多くの実施形態では、クラスタは、単一の仮想アプライアンスまたはコンピューティングデバイスと見なされ得るが、典型的な個々のアプライアンスのものを超える性能を伴うものである。
【０２１０】
ここで図６を参照すると、コンピューティングデバイスクラスタまたはアプライアンスクラスタ６００の実施形態が図示される。複数のアプライアンス２００ａ−２００ｎ、またはデスクトップコンピュータ、サーバ、ラックマウントサーバ、ブレードサーバ、または任意の他のタイプおよび形態のコンピューティングデバイス等の時としてノードと呼ばれることもある他のコンピューティングデバイスは、単一のアプライアンスクラスタ６００に継合されてもよい。アプライアンスクラスタと称されるが、多くの実施形態では、クラスタは、限定ではないが、アプリケーションサーバ、ネットワーク記憶サーバ、バックアップサービス、または任意の他のタイプのコンピューティングデバイスとして動作してもよい。多くの実施形態では、アプライアンスクラスタ６００は、アプライアンス２００、ＷＡＮ最適化デバイス、ネットワーク加速デバイス、または上記で議論される他のデバイスの機能のうちの多くを果たすために、使用されてもよい。
【０２１１】
いくつかの実施形態では、アプライアンスクラスタ６００は、同じアプライアンス、１つ以上のシャーシ内のブレードサーバ、デスクトップまたはラックマウントコンピューティングデバイス、または他のデバイス等のコンピューティングデバイスの同種セットを備えてもよい。他の実施形態では、アプライアンスクラスタ６００は、アプライアンスの異なるモデル、混合アプライアンスおよびサーバ、またはコンピューティングデバイスの任意の他のセットを含む、デバイスの異種または混合セットを備えてもよい。これは、アプライアンスクラスタ６００が、例えば、新しいモデルまたはデバイスを用いて経時的に拡張またはアップルグレードされることを可能にしてもよい。
【０２１２】
いくつかの実施形態では、アプライアンスクラスタ６００の各コンピューティングデバイスまたはアプライアンス２００は、上記で議論されるようなマルチコアアプライアンスを備えてもよい。多くのそのような実施形態では、上記で議論されるコア管理およびフロー分配方法が、本明細書で議論されるノード管理および分配方法に加えて、各個々のアプライアンスによって利用されてもよい。これは、２層分散システムであると考えられ得、１つのアプライアンスは、データを備え、それを複数のノードに分配し、各ノードは、処理のためのデータを備え、それを複数のコアに分配する。故に、そのような実施形態では、ノード分配システムは、上記で議論されるようなマスタまたは制御コアによって対処され得るものとして、個々のコアへのフロー分配を管理する必要はない。
【０２１３】
多くの実施形態では、アプライアンスクラスタ６００は、シャーシ内の複数のブレードサーバまたは単一のラック内の複数のラックマウントデバイス等、物理的にグループ化されてもよいが、他の実施形態では、アプライアンスクラスタ６００は、複数のシャーシ、複数のラック、データセンタ内の複数の部屋、複数のデータセンタ、または任意の他の物理的配列で分配されてもよい。故に、アプライアンスクラスタ６００は、物理的グループではなくて、共通構成、管理、および目的を介してグループ化される、仮想アプライアンスと見なされ得る。
【０２１４】
いくつかの実施形態では、アプライアンスクラスタ６００は、１つ以上のネットワーク１０４、１０４’に接続されてもよい。例えば、簡潔に図１Ａに戻って参照すると、いくつかの実施形態では、アプライアンス２００は、１つ以上のクライアント１０２に継合されるネットワーク１０４と１つ以上のサーバ１０６に継合されるネットワーク１０４’との間に展開されてもよい。アプライアンスクラスタ６００は、同様に、単一のアプライアンスとして動作するように展開されてもよい。多くの実施形態では、これは、アプライアンスクラスタ６００の外部でいかなるネットワークトポロジ変更も要求しない場合があり、単一のアプライアンスシナリオからのインストールおよびスケーラビリティの容易性を可能にする。他の実施形態では、アプライアンスクラスタ６００は、同様に、図１Ｂ−１Ｄに示される、または上記で議論されるように、展開されてもよい。なおも他の実施形態では、アプライアンスクラスタは、１つ以上のサーバによって実行される複数の仮想マシンまたはプロセスを備えてもよい。例えば、１つのそのような実施形態では、サーバファームが、複数の仮想マシンを実行してもよく、各仮想マシンは、アプライアンス２００として構成され、複数の仮想マシンは、アプライアンスクラスタ６００として一斉に作用する。さらになおも他の実施形態では、アプライアンスクラスタ６００は、アプライアンス２００の混合またはアプライアンス２００として構成される仮想マシンを備えてもよい。いくつかの実施形態では、アプライアンスクラスタ６００は、共同設置されていない複数のアプライアンス２００を伴って、地理的に分配されてもよい。例えば、図６に戻って参照すると、１つのそのような実施形態では、第１のアプライアンス２００ａは、データセンタ等の第１の現場に位置してもよく、第２のアプライアンス２００ｂは、中央オフィスまたは本社等の第２の現場に位置してもよい。さらなる実施形態では、そのような地理的に遠隔のアプライアンスは、Ｔ１またはＴ３ポイントツーポイント接続、ＶＰＮ、または任意の他のタイプおよび形態のネットワーク等の専用ネットワークによって継合されてもよい。故に、共同設置アプライアンス２００ａ−２００ｂと比較した付加的通信待ち時間が存在し得るが、現場停電または通信停止状態の場合の信頼性、スケーラビリティ、または他の利益に利点が存在し得る。いくつかの実施形態では、待ち時間問題は、データフローの地理的またはネットワークベースの分配を通して低減され得る。例えば、アプライアンスクラスタ６００として構成されるが、本社におけるクライアントおよびサーバからの通信は、現場に展開されるアプライアンス２００ｂにダイレクトされてもよく、負荷分散は、場所によって加重され得る、または類似措置が、任意の待ち時間を軽減するために講じられることができる。
【０２１５】
依然として図６を参照すると、アプライアンスクラスタ６００は、クライアントデータプレーン６０２を介してネットワークに接続されてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、クライアントとアプライアンスクラスタ６００との間でデータを搬送する、ネットワーク１０４等の通信ネットワークを備えてもよい。いくつかの実施形態では、クライアントデータプレーン６０２は、外部ネットワーク１０４およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎを架橋する、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータは、外部ネットワーク１０４に接続され、かつ各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。いくつかの実施形態では、本ルータまたはスイッチは、インターフェースマネージャと称され得、さらに、アプリケーションクラスタ６００内のノードを横断して均一にトラフィックを分配するように構成されてもよい。したがって、多くの実施形態では、インターフェースマスタは、アプライアンスクラスタ６００の外部にフロー分配器を備えてもよい。他の実施形態では、インターフェースマスタは、アプライアンス２００ａ−２００ｎのうちの１つを備えてもよい。例えば、第１のアプライアンス２００ａは、インターフェースマスタとしての役割を果たし、アプライアンスクラスタ６００のための着信トラフィックを受信し、アプライアンス２００ｂ−２００ｎのそれぞれを横断してトラフィックを分配してもよい。いくつかの実施形態では、帰還トラフィックは、同様に、インターフェースマスタとしての役割を果たす第１のアプライアンス２００ａを介して、アプライアンス２００ｂ−２００ｎのそれぞれから流動してもよい。他の実施形態では、アプライアンス２００ｂ−２００ｎのそれぞれからの帰還トラフィックは、ネットワーク１０４、１０４’に直接、または外部ルータ、スイッチ、または他のデバイスを介して、伝送されてもよい。いくつかの実施形態では、インターフェースマスタとしての役割を果たさないアプライアンスクラスタのアプライアンス２００は、インターフェーススレーブ６１０Ａ−６１０Ｎと称され得る。
【０２１６】
インターフェースマスタは、種々の方法のうちのいずれかで負荷分散またはトラフィックフロー分配を実施してもよい。例えば、いくつかの実施形態では、インターフェースマスタは、クラスタのアプライアンスまたはノードを伴って構成される次のホップと等価コストマルチパス（ＥＣＭＰ）ルーティングを実施する、ルータを備えてもよい。インターフェースマスタは、オープンショーテストパスファースト（ＯＳＰＦ）を使用してもよい。いくつかの実施形態では、インターフェースマスタは、上記で議論されるように、ＩＰアドレスまたは他のパケット情報タプルに基づくハッシュ等のトラフィック分配のためのステートレスハッシュベースの機構を使用してもよい。ハッシュキーおよび／またはソルトが、ノードを横断した均一な分配のために選択されてもよい。他の実施形態では、インターフェースマスタは、リンクアグリゲーション（ＬＡＧ）プロトコルを介したフロー分配、または任意の他のタイプおよび形態のフロー分配、負荷分散、およびルーティングを実施してもよい。
【０２１７】
いくつかの実施形態では、アプライアンスクラスタ６００は、サーバデータプレーン６０４を介してネットワークに接続されてもよい。クライアントデータプレーン６０２と同様に、サーバデータプレーン６０４は、クライアントとアプライアンスクラスタ６００との間でデータを搬送する、ネットワーク１０４’等の通信ネットワークを備えてもよい。いくつかの実施形態では、サーバデータプレーン６０４は、外部ネットワーク１０４’およびアプライアンスクラスタ６００の複数のアプライアンス２００ａ−２００ｎを架橋する、スイッチ、ハブ、ルータ、または他のネットワークデバイスを備えてもよい。例えば、１つのそのような実施形態では、ルータは、外部ネットワーク１０４’に接続され、かつ各アプライアンス２００ａ−２００ｎのネットワークインターフェースに接続されてもよい。多くの実施形態では、各アプライアンス２００ａ−２００ｎは、第１のネットワークインターフェースがクライアントデータプレーン６０２に接続され、第２のネットワークインターフェースがサーバデータプレーン６０４に接続される、複数のネットワークインターフェースを備えてもよい。これは、付加的セキュリティを提供し、中間デバイスとしてアプライアンスクラスタ６００サーバを有することによって、クライアントおよびサーバネットワークの直接インターフェースを防止し得る。他の実施形態では、クライアントデータプレーン６０２およびサーバデータプレーン６０４は、マージされる、または組み合わせられてもよい。例えば、アプライアンスクラスタ６００は、クライアント１０２およびサーバ１０６とのネットワーク上の非中間ノードとして展開されてもよい。上記で議論されるように、多くの実施形態では、インターフェースマスタは、サーバおよびネットワーク１０４’からアプライアンスクラスタの各アプライアンスに通信をルーティングおよび分配するためにサーバデータプレーン６０４上で展開されてもよい。多くの実施形態では、クライアントデータプレーン６０２のためのインターフェースマスタおよびサーバデータプレーン６０４のためのインターフェースマスタは、同様に構成され、上記で議論されるようなＥＣＭＰまたはＬＡＧプロトコルを実施してもよい。
【０２１８】
いくつかの実施形態では、アプライアンスクラスタ６００内の各アプライアンス２００ａ−２００ｎは、内部通信ネットワークまたはバックプレーン６０６を介して接続されてもよい。バックプレーン６０６は、ノード間またはアプライアンス間制御および構成メッセージのため、およびトラフィックのノード間転送のための通信ネットワークを備えてもよい。例えば、第１のアプライアンス２００ａがネットワーク１０４を介してクライアントと通信し、第２のアプライアンス２００ｂがネットワーク１０４’を介してサーバと通信する、一実施形態では、クライアントとサーバとの間の通信は、クライアントから第１のアプライアンスまで、バックプレーン６０６を介して第１のアプライアンスから第２のアプライアンスまで、および第２のアプライアンスからサーバまで、および逆も同様に、流動してもよい。他の実施形態では、バックプレーン６０６は、インターフェース一時停止またはリセットコマンド等の構成メッセージ、フィルタリングまたは圧縮ポリシ等のポリシ更新、バッファステータス、スループット、またはエラーメッセージ等のステータスメッセージ、または任意の他のタイプおよび形態のノード間通信を搬送してもよい。いくつかの実施形態では、ＲＳＳキーまたはハッシュキーは、クラスタ内の全てのノードによって共有されてもよく、バックプレーン６０６を介して通信されてもよい。例えば、第１のノードまたはマスタノードは、始動またはブート等のＲＳＳキーを選択してもよく、他のノードによる使用のために本キーを分配してもよい。いくつかの実施形態では、バックプレーン６０６は、各アプライアンス２００のネットワークインターフェース間のネットワークを備えてもよく、ルータ、スイッチ、または他のネットワークデバイス（図示せず）を備えてもよい。したがって、いくつかの実施形態では、上記で議論されるように、クライアントデータプレーン６０２のためのルータが、アプライアンスクラスタ６００とネットワーク１０４との間に展開されてもよく、サーバデータプレーン６０４のためのルータが、アプライアンスクラスタ６００とネットワーク１０４’との間に展開されてもよく、バックプレーン６０６のためのルータが、アプライアンスクラスタ６００の一部として展開されてもよい。各ルータは、各アプライアンス２００の異なるネットワークインターフェースに接続してもよい。他の実施形態では、１つ以上のプレーン６０２−６０６が、組み合わせられてもよい、またはルータまたはスイッチが、アプライアンス２００ａ−２００ｎの異なるインターフェースに接続し、同時に複数のルーティング機能を果たし、複雑性を低減させる、またはシステムから余分なデバイスを排除するように、複数のＬＡＮまたはＶＬＡＮに分割されてもよい。
【０２１９】
いくつかの実施形態では、制御プレーン（図示せず）は、管理者またはユーザからアプライアンスクラスタ６００に構成および制御トラフィックを通信してもよい。いくつかの実施形態では、制御プレーンが、第４の物理的ネットワークであってもよい一方で、他の実施形態では、制御プレーンは、プレーン６０２−６０６のうちの１つを介したＶＰＮ、トンネル、または通信を備えてもよい。したがって、制御プレーンは、いくつかの実施形態では、仮想通信プレーンと見なされ得る。他の実施形態では、管理者は、ＲＳ−２３２等のシリアル通信インターフェース、ＵＳＢ通信インターフェース、または任意の他のタイプおよび形態の通信等の別個のインターフェースを通して、構成および制御を提供してもよい。いくつかの実施形態では、アプライアンス２００は、ボタンおよびディスプレイを伴うフロントパネル等の管理用のインターフェース、ネットワーク１０４、１０４’またはバックプレーン６０６を介した構成のためのウェブサーバ、または任意の他のタイプおよび形態のインターフェースを備えてもよい。
【０２２０】
いくつかの実施形態では、上記で議論されるように、アプライアンスクラスタ６００は、内部フロー分配を含んでもよい。例えば、これは、ノードが外部デバイスに対して透過的に参入／退出することを可能にするように行われてもよい。外部フロー分配器が、そのような変化に応じて繰り返し再構成される必要性を防止するために、ノードまたはアプライアンスは、ネットワークパケットをクラスタ６００内の正しいノードに操向するためのインターフェースマスタまたは分配器として作用してもよい。例えば、いくつかの実施形態では、ノードがクラスタから退出するとき（故障、リセット、または類似する場合に応じて等）、外部ＥＣＭＰルータが、ノードの変化を識別してもよく、全てのフローのハッシュ値を再計算し、トラフィックを再分配してもよい。これは、全ての接続をドロップおよびリセットすることをもたらし得る。同一のドロップおよびリセットは、ノードが再参入するときに起こり得る。いくつかの実施形態では、信頼性のために、アプライアンスクラスタ６００内の２つのアプライアンスまたはノードが、接続ミラーリングを介して外部ルータから通信を受信してもよい。
【０２２１】
多くの実施形態では、アプライアンスクラスタ６００のノードの間のフロー分配は、アプライアンスのコアの間のフロー分配に関して上記で議論される方法のうちのいずれかを使用してもよい。例えば、一実施形態では、マスタアプライアンス、マスタノード、またはインターフェースマスタは、着信トラフィック上のテプリッツハッシュ等のＲＳＳハッシュを算出し、ハッシュのための選好リストまたは分配テーブルを参考にしてもよい。多くの実施形態では、フロー分配器は、トラフィックを転送するときにハッシュを受信側アプライアンスに提供してもよい。これは、ノードがコアへのフロー分配のためのハッシュを再算出する必要性を排除し得る。多くのそのような実施形態では、アプライアンスの間の分配のためにハッシュを計算するために使用されるＲＳＳキーは、グローバルＲＳＳキーと称され得る、コアの間の分配のためのハッシュを計算し、計算されたハッシュの再利用を可能にするために使用されるものと同一のキーを備えてもよい。いくつかの実施形態では、ハッシュは、ポート番号を含むトランスポート層ヘッダ、ＩＰアドレスを含むインターネット層ヘッダ、または任意の他のパケットヘッダ情報の入力タプルを用いて、算出されてもよい。いくつかの実施形態では、パケット本体情報が、ハッシュに利用されてもよい。例えば、無損失ＴＣＰヘッダを介してカプセル化される損失性ＵＤＰトラフィック等の、１つのプロトコルのトラフィックが別のプロトコルのトラフィック内にカプセル化される、一実施形態では、フロー分配器は、カプセル化プロトコル（例えば、ＴＣＰヘッダ）ではなく、カプセル化されたプロトコルのヘッダ（例えば、ＵＤＰヘッダ）に基づいて、ハッシュを計算してもよい。同様に、パケットがカプセル化され、暗号化または圧縮される、いくつかの実施形態では、フロー分配器は、暗号解読または展開後のペイロードパケットのヘッダに基づいて、ハッシュを計算してもよい。なおも他の実施形態では、ノードは、構成または管理目的のため等に、内部ＩＰアドレスを有してもよい。これらのＩＰアドレスへのトラフィックは、ハッシュ値計算および分配される必要はなく、むしろ、宛先アドレスを所有するノードに転送されてもよい。例えば、アプライアンスは、１．２．３．４のＩＰアドレスにおいて構成または管理目的のために起動するウェブサーバまたは他のサーバを有してもよく、いくつかの実施形態では、その内部ＩＰアドレスとしてフロー分配器に本アドレスを登録してもよい。他の実施形態では、フロー分配器は、内部ＩＰアドレスをアプライアンスクラスタ６００内の各ノードに割り当ててもよい。アプライアンスの内部ＩＰアドレス（１．２．３．４）にダイレクトされる、管理者によって使用されるワークステーション等の外部クライアントまたはサーバから着信するトラフィックは、ハッシングを要求することなく直接転送されてもよい。
Ｇ．ＤＮＳ応答並べ替えのためのシステムおよび方法
【０２２２】
ＷＡＮ仮想化を実施するミドルボックスまたは中間デバイスは、異なるＷＡＮネットワークを介して接続され得る、一対のデバイスとして稼働することができる。これらのネットワークは、企業、データセンタ、ドメイン、または他の分散システムの複数のサイトを接続することができる。複数のサイトを横断して位置するコンピューティングデバイスは、冗長性、負荷分散、および障害回復のために複数のサイトを横断して分配されることができる。本ソリューションは、仮想ＷＡＮアプライアンスに面する分岐内のＤＮＳ記録を解析するための機構を説明する。本ソリューションは、接続の優先度を決定し、測定されたサービス品質（ＱｏＳ）メトリックに基づいて、接続を行う好ましいサイトを選定することによって、ＤＮＳサーバによって送信されるＤＮＳ応答を並べ替えることができる。ＱｏＳメトリックは、分岐とサイトとの間のリンクのリンク利用、待ち時間、ジッタ、およびパケットドロップを含むことができる。本ソリューションは、２つのサイト（またはサイトと分岐と）の間の最良の利用可能なパスを決定することができる。本ソリューションは、接続のＱｏＳ要件を最良に満たすことができる利用可能なリンクを選択することによって、接続の品質を向上させることができる。
【０２２３】
本ソリューションは、ＤＮＳ応答内のＩＰアドレスを並べ替えるためのシステムおよび方法について議論する。ＩＰアドレスを並べ替えることによって、本システムは、クライアントが接続する複数のサイトを制御することができ、接続が接続の品質要件を満たし得るパスを経由して行われることを確実にすることができる。本ソリューションは、クライアントの接続要求を満たし得る、複数のサイトを横断した最良のリンクの選択を可能にする。
【０２２４】
図７は、例示的ネットワーク環境７００のブロック図を図示する。ネットワーク環境７００は、ネットワーク１０４を介して仮想ＷＡＮ７０２（ａ）と通信するクライアント１０２を含むことができる。仮想ＷＡＮ７０２（ａ）は、仮想ＷＡＮ７０２（ｂ）および仮想ＷＡＮ７０２（ｃ）と通信することができる。仮想ＷＡＮ７０２は、ＷＡＮのコンポーネントを形成する、またはそれであり得る。仮想ＷＡＮ７０２（ｂ）および仮想ＷＡＮ７０２（ｃ）はそれぞれ、個別のサーバ１０６（ａ）および１０６（ｂ）と通信する（またはそれを含む）ことができる。例えば、仮想ＷＡＮ７０２はそれぞれ、データセンタを形成する複数のサーバ１０６を含むことができる。
【０２２５】
ネットワーク１０４は、企業のイントラネット等のローカルエリアネットワーク（ＬＡＮ）であり得る。例えば、ネットワーク１０４は、仮想ＷＡＮ７０２を介して企業データセンタに位置するサーバ１０６に通信する、企業の支社のローカルＬＡＮであり得る。仮想ＷＡＮ７０２のうちの１つ以上のものは、物理的ＷＡＮと置換される、またはそれを含むことができる。仮想ＷＡＮ７０２はそれぞれ、公衆、私設、またはインターネット等の他のネットワークを通して、相互と通信することができる。
【０２２６】
サイトは、冗長性、負荷分散、および障害回復のために、異なる地理的場所に、または異なる場所を横断して位置することができる。サイトは、１つ以上のノード、サーバ１０６、データセンタ、または他のコンピューティングデバイスを含むことができる。各サイトは、複数の物理的場所を横断して分散されることができる、または１つの物理的場所は、複数のサイトを含むことができる。サイトは、仮想ＷＡＮ７０２によって接続される一対のデバイスとして稼働することができる。サイトは、仮想ＷＡＮ７０２を通した複数のパスを通して、相互に接続されることができる。サイトは、同一のドメインと関連付けられることができ、１つ以上の場所を横断して分散される単一のエンティティとして作用することができる。例えば、サイトは、同一のウェブサイトドメイン（例えば、ａｂｃ．ｃｏｍ）または分散データベースと関連付けられることができる。ウェブサイトまたはデータベースサーバは、負荷分散、冗長性、または障害回復のために複数の場所を横断して分散されることができる。例えば、サイトＢにおけるサーバ１０６（ａ）は、ウェブサイトａｂｃ．ｃｏｍと関連付けられ、ＩＰアドレス１０．１．２．５を有することができ、サイトＣにおけるサーバ１０６（ｂ）もまた、ウェブサイトａｂｃ．ｃｏｍと関連付けられ、ＩＰアドレス１０．１．３．５を有することができる。ＤＮＳサーバは、ＤＮＳサーバがＤＮＳ要求を解決する、ａｂｃ．ｃｏｍドメインと関連付けられる２つのＩＰアドレスのうちのいずれかまで回転することによって、２つのサイトの間で負荷分散することができる。ＤＮＳ応答は、ＩＰアドレスの並べ替えられたリストを含むことができる。上記の実施例を続けると、ＤＮＳ応答は、応答｛１０．１．２．５，１０．１．３．５｝を含むことができる。負荷分散するために、ＤＮＳサーバは、ＤＮＳ応答の第１の位置に位置するＩＰアドレスを交互に入れ替えることができる。ＤＮＳ応答を受信するクライアントは、ＤＮＳ応答の第１のインデックスに位置するＩＰアドレスと関連付けられるサイトまたはノードとの接続（例えば、ＴＣＰ接続）を確立しようとすることができる。接続が行われることができない場合、クライアントは、ＤＮＳ応答の次のインデックスに位置するＩＰアドレスと接続を行おうとすることができる。
【０２２７】
仮想ＷＡＮ７０２は、ＤＮＳ応答の中に列挙されるＩＰアドレスを並べ替え得る、ＤＮＳ応答アレンジャを含むことができる。ＤＮＳ応答アレンジャは、図８に関連してさらに議論される。概観として、ＤＮＳ応答アレンジャは、クライアントへのＤＮＳ応答を傍受し、ＤＮＳ応答内のＩＰアドレスのリストを並べ替えることができる。ＤＮＳ応答アレンジャは、アクティブＱｏＳポリシおよびクライアントとクライアントが接続を確立しようとしているサイトとの間のリンク品質に基づいて、ＩＰアドレスのリストを並べ替えることができる。リンク品質は、ジッタ、待ち時間、パケットドロップレート、およびリンク利用レートを含むことができる。
【０２２８】
図８は、ＤＮＳ応答並べ替えシステム８００の実装のブロック図である。システム８００は、サイト間通信フローまたはＴＣＰプロキシセッションの確立中にＤＮＳ応答の中のＩＰアドレスのリストを並べ替えることができる。例えば、システム８００は、クライアントがドメインのサーバとの接続を確立しているときに、クライアントへのＤＮＳ応答の中のＩＰアドレスのリストを並べ替えることができる。システム８００は、サイトの間に確立される接続の優先度およびクライアントとサイトとの間の可能性として考えられるリンクのリンク品質に基づいて、ＩＰアドレスのリストを並べ替えることができる。
【０２２９】
概観として、ＤＮＳ応答並べ替えシステム８００は、複数のリンクを通して１つ以上のＷＡＮ、ＬＡＮ、サーバ、クライアント、ノード、またはサイトと結合される、リンク切替装置８０８を含むことができる。システム８００はまた、それを経由してリンク切替装置８０８が接続を行い得る、リンクのそれぞれのリンク品質を決定し得る、リンク品質推定器８０６を含むこともできる。システム８００はまた、接続のための優先度要件または確立される接続を決定し得る、ＱｏＳモジュール８０４を含むこともできる。システム８００はまた、ＴＣＰ／ＩＰ処理（加速および最適化タスク）を実施し、セキュリティポリシを施行し得る、パケット処理エンジン５４８を含むこともできる。パケット処理エンジン５４８からＬＡＮまで進行するパケットは、ＤＮＳ応答解析器８１０によって処理されることができる。ＤＮＳ応答を含むパケットは、ＤＮＳ応答アレンジャ８０２に伝送されることができ、ＤＮＳ応答を含まないパケットは、ＤＮＳ応答アレンジャ８０２を迂回してＬＡＮに転送されることができる。
【０２３０】
ＤＮＳ応答並べ替えシステム８００は、フロー分配器またはパケットエンジンによって実行されることができる、またはアプライアンスのコアまたはアプライアンスのクラスタによって（例えば、マスタコア、スレーブコア、または事前決定されたコアによって）別個に実行されてもよい。いくつかの実装では、ＤＮＳ応答並べ替えシステム８００は、コンピューティングデバイスのハイパーバイザ上で実行される仮想マシンによって実行されてもよい。いくつかの実装では、ＤＮＳ応答並べ替えシステム８００は、デバイスのオペレーティングシステムのネットワークスタックの一部である、またはネットワークスタックの層において（例えば、ネットワークまたはトランスポート層において）実行されてもよい。
【０２３１】
ＤＮＳ応答並べ替えシステム８００は、ＱｏＳモジュール８０４を含むことができる。ＱｏＳモジュール８０４は、パケット処理エンジン５４８から通信フローのアプリケーションまたはセッションタイプを受信するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。ＱｏＳモジュール８０４は、パケット処理エンジン５４８から受信されるパケットヘッダ（またはパケットの中の他のそのような情報）を走査することに基づいて、ＱｏＳ要件または接続優先度を決定することができる。ＱｏＳモジュール８０４は、ポリシデータベース内のアプリケーションまたはセッションタイプを調べ、接続のための接続優先度およびＱｏＳ要件を決定することができる。ＱｏＳ要件は、ＤＮＳ応答のＩＰアドレスの並べ替え中に考慮されてもよい。ＱｏＳモジュール８０４は、ＱｏＳ要件および接続優先度情報をＤＮＳ応答アレンジャ８０２に提供することができる。
【０２３２】
ＤＮＳ応答並べ替えシステム８００は、リンク品質推定器８０６を含んでもよい。リンク品質推定器８０６は、図７に図示されるクライアント１０２およびサーバ１０６のそれぞれ等の２つのサイトの間の１つ以上のネットワークリンクの特性を測定する、および／または品質を決定するためのアプリケーション、サービス、ルーチン、デーモン、または他の実行可能論理を含むことができる。いくつかの実装では、リンク品質推定器８０６は、異なるリンクを介して、リンク切替装置８０８を介した制御パケットを中間デバイスに伝送し、各リンクのリンク品質を決定することができる。リンク品質は、限定ではないが、リンク利用、リンク待ち時間、リンクジッタ、リンクドロップレート、またはそれらの任意の組み合わせ等のメトリックを含むことができる。リンク品質推定器８０６はまた、すでにリンクをトラバースしているパケット（例えば、具体的に生成されていない制御パケット）を使用し、リンク品質の周期的測定を実施することもできる。一実施例では、リンク品質推定器８０６は、複数のＴＣＰパケットを伝送し、遠隔デバイスからのパケットの確認応答の受信までの往復時間を測定することができる。リンク品質推定器８０６は、確認されていないパケットまたは否定応答された（ｎＡＣＫ）パケットを識別することによって、損失レートを決定することができる。リンク品質推定器８０６はまた、接続の帯域幅、最大区画サイズ、ウィンドウサイズ、輻輳、またはネットワークリンクの任意の他の特性を測定してもよい。リンク品質推定器８０６は、パケットの往復時間に基づいて待ち時間を測定してもよい。往復時間は、パケットの伝送からパケット確認応答の受信までの時間量であり得る。リンク品質推定器８０６は、リンク品質スコア、および利用、ジッタ、待ち時間、パケットドロップレート、およびＤＮＳ応答アレンジャ８０２へのリンク毎の他のネットワーク特性の測定を提供することができる。
【０２３３】
ＤＮＳ応答並べ替えシステム８００はまた、リンク切替装置８０８を含むこともできる。リンク切替装置８０６は、リンク切替装置８０８が結合される複数のリンクまたは他の接続を介して、パケットを選択的に多重化するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。例えば、リンク切替装置８０６は、パケット処理エンジン５４８（および／またはフロー分配器）と複数の中間接続との間でパケットをルーティングするために、パケット修正器と、制御論理と、マルチプレクサおよびデマルチプレクサとを含んでもよい。リンク切替装置８０６は、中間リンクを往復して通信フローのパケットをルーティングしてもよく、いくつかの実装では、パケットを修正し、フローを識別する、またはフローまたは接続が転送されているリンクを識別してもよい。
【０２３４】
ＤＮＳ応答並べ替えシステム８００はまた、ＤＮＳ応答解析器８１０を含むこともできる。ＤＮＳ応答解析器８１０は、ＤＮＳ応答を識別および解析するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。ＤＮＳ応答解析器８１０は、ＬＡＮに指向されるパケットを受信する、または別様に傍受することができる。ＤＮＳ応答解析器８１０は、着信パケットを処理または監視し、パケットがＤＮＳ応答を含むかどうかを決定することができる。ＤＮＳ応答を含まないパケットは、ＤＮＳ応答アレンジャ８０２を迂回してＬＡＮに転送されることができる。ＤＮＳ応答解析器８１０は、ＤＮＳ応答と関連付けられるパケットを傍受し、ＤＮＳ応答アレンジャ８０２に転送することができる。
【０２３５】
ＤＮＳ応答並べ替えシステム８００はまた、ＤＮＳ応答アレンジャ８０２を含むこともできる。ＤＮＳ応答アレンジャ８０２は、ＤＮＳ応答の中のＩＰアドレスのリストを並べ替える、または別様に修正するためのアプリケーション、サービス、デーモン、ルーチン、または他の実行可能論理を含むことができる。リンク品質推定器８０６から受信されるリンク品質メトリックおよびＱｏＳモジュール８０４から受信される接続優先度に基づいて、ＤＮＳ応答アレンジャ８０２は、ＤＮＳ応答の中のＩＰアドレスのリストの順序を修正することができる。修正されたＤＮＳ応答は、クライアントに送信されることができる。クライアントは、次いで、サイトに位置するサーバ１０６との接続を確立する際に、ＤＮＳ応答を使用することができる。ＤＮＳ応答の中のＩＰアドレスの順序を修正するための方法は、図９に関連して説明される。
【０２３６】
図９は、ＤＮＳ応答並べ替えのための例示的方法９００の例示的フロー図を図示する。方法９００は、ドメインと関連付けられる複数のサイトに対応するＩＰアドレスのリストを含む、クライアントのＤＮＳ応答を受信するステップを含む（ブロック９０２）。方法９００は、クライアントとドメインとの間の接続の優先度を識別するステップを含むことができる（ブロック９０４）。方法９００は、クライアントと複数のサイトとの間の複数のリンク毎に、リンク品質を決定するステップを含むことができる（ブロック９０６）。方法９００は、リンク品質および接続優先度に基づいて、ＤＮＳ応答の中のＩＰアドレスのリストの順序を修正するステップを含むことができる（ブロック９０８）。方法９００はまた、ＩＰアドレスのリストの修正された順序をクライアントに伝送するステップも含む（ブロック９１０）。
【０２３７】
上記に記載されるように、例示的方法９００は、ＤＮＳ要求へのＤＮＳ応答を受信するステップを含む（ブロック９０２）。ＤＮＳ応答は、ＤＮＳ要求をＤＮＳ応答アレンジャに転送し得る、ＤＮＳ応答解析器によって識別されることができる。ＤＮＳ応答解析器は、データパケットのコンテンツを精査することによって、着信データパケットがＤＮＳ応答であるかどうかを決定することができる。いくつかの実装では、ＤＮＳ応答解析器は、ＤＮＳ応答と関連付けられる事前決定されたポートを経由して伝送されるデータパケットを精査することができる。ＤＮＳ応答は、複数のサイトのうちの１つにそれぞれ対応する、ＩＰアドレスのリストを含むことができる。複数のサイトはそれぞれ、同一のホスト名またはドメイン名と関連付けられる、異なるサーバまたはデバイスであり得る。例えば、ドメインａｂｃ．ｃｏｍは、別個の場所における４つのサーバ上でホストされることができる。本実施例では、ＤＮＳ応答は、４つのサーバのそれぞれに１つずつ、ＩＰアドレスのリストを含むことができる。
【０２３８】
方法９００は、クライアントとドメインとの間の接続の優先度を識別するステップを含むことができる（ブロック９０４）。システムのＱｏＳモジュールは、クライアントが接続を確立しようとしているドメインに基づいて、接続の優先度を決定することができる。例えば、ＱｏＳモジュールは、ＱｏＳポリシデータベースを参照し、ドメインと関連付けられる接続優先度を調べることができる。本実施例では、潜在感受性データをサービス提供するドメインは、比較的に高い優先度と関連付けられることができる。ＱｏＳモジュールは、優先度およびクラス情報をフロー識別と関連付けることができる。接続の優先度は、接続のＱｏＳ分類に基づくことができる。例えば、パケットヘッダを走査することによってＱｏＳ分類を決定して、ＱｏＳモジュールは、ルックアップテーブルを参照し、決定されたＱｏＳクラスに対応する優先度を決定することができる。ＱｏＳ分類は、ＵＤＰトラフィックパターン、ＴＣＰ：リアルタイムトラフィックパターン、ＴＣＰ：双方向トラフィックパターン、ＴＣＰ：バルクトラフィックパターン、またはＴＣＰ：バックグラウンドトラフィックパターンであり得る。ＴＣＰ：リアルタイムトラフィックパターンは、オーディオトラフィックを含むことができ、比較的に非常に高い優先度に割り当てられることができる。ＴＣＰ：双方向（ＴＣＰ：チャッティとも称される）は、比較的に高い優先度に割り当てられることができ、グラフィック、キーボード、およびマウストラフィックを含むことができる。ＴＣＰ：バルクは、比較的に中程度の優先度に割り当てられることができ、クライアント駆動マッピングおよびＵＳＢリダイレクトトラフィックを含むことができる。ＴＣＰ：バックグラウンドは、比較的に低い優先度に割り当てられることができ、印刷およびＣＯＭポートマッピングトラフィックを含むことができる。いくつかの実装では、ＱｏＳモジュールは、優先度ポリシに基づいて、優先度をデバイスとドメインとの間に接続に割り当てることができる。例えば、優先度ポリシは、関連付けられる接続優先度を伴う既知のドメインまたは接続分類のリストを含むことができる。ドメインまたは接続分類に基づいて、ＱｏＳモジュールは、接続優先度を接続に割り当てることができる。例えば、優先度ポリシは、ａｂｃ．ｃｏｍへの接続が中程度の優先度を与えられるべきであることを示すことができる。
【０２３９】
方法９００はまた、デバイスと個別のサイトとの間の複数のリンクのうちのリンク毎に、リンク品質を決定するステップを含むこともできる（ブロック９０６）。リンクのそれぞれの品質は、ＤＮＳ応答並べ替えシステムのリンク品質推定器によって決定されることができる。上記で説明されるように、リンク品質推定器は、制御パケットをサイトのそれぞれに伝送することによって、リンクのそれぞれの品質を決定することができる。リンク品質は、ドロップされた制御パケットの数、制御パケット（またはその確認応答）の進行時間、待ち時間、ジッタ、リンクの利用可能および全帯域幅能力、リンク利用、またはそれらの任意の組み合わせに基づくことができる。一実施例では、リンク品質メトリックはそれぞれ、ランキングを含み、リンク品質は、リンク品質メトリックの組み合わせに基づくことができる。例えば、下記の表は、サイトＡからサイトＢへの第１のリンクおよびサイトＡからサイトＣへの第２のリンクの例示的リンク品質メトリックを提供する。待ち時間、ジッタ、およびパケット損失が、決定された優先度接続のために重要である、実施例では、待ち時間、ジッタ、およびパケット損失レートが、Ａ−Ｃリンクよりも本リンクから少ないため、本システムは、サイトＡとサイトＢとの間のリンクを使用することを選択することができる。
【表１】
0006913177.tif 000002
【０２４０】
いくつかの実装では、本システムは、ＤＮＳ応答がＤＮＳ応答並べ替えシステムによって受信される度にリンク品質を決定することができる。他の実装では、本システムは、リンク品質を決定し、事前決定された時間量にわたって有効であるような測定を維持することができる。例えば、リンク品質は、とりわけ、１分、１時間、３時間、６時間、１８時間、１日、または１週間にわたって有効なままであることができる。リンク品質の期限後、リンク品質推定器は、リンクの品質を再決定することができる。
【０２４１】
本方法はまた、リンク品質および接続優先度に基づいて、ＩＰアドレスの順序付けられたリストを修正するステップを含むこともできる（ブロック９０８）。ＤＮＳ応答は、ＩＰアドレスの順序付けられたリストを含むことができる。アレンジャは、ＩＰアドレスのそれぞれが関連付けられる、１つまたは複数のリンクを決定することができる。例えば、アレンジャは、データパケットが規定ＩＰアドレスに到達するようにトラバースするであろうリンクを決定することができる。アレンジャは、ルーティングテーブルを参照することによって、データパケットがＩＰアドレスに到達するようにトラバースするであろうリンク（または複数のリンク）を決定することができる。ＤＮＳ応答アレンジャは、次いで、異なるサイトへのリンクのリンク品質に基づいて、ＩＰアドレスのそれぞれをランク付けすることができる。アレンジャは、ＤＮＳ応答を修正し、それらの個別のリンク品質に基づく順序でＩＰアドレスを含むことができる。ＤＮＳ応答アレンジャは、最高リンク品質と関連付けられるＩＰアドレスが応答の最上部に位置付けられるように、リストを並べ替えることができる。
【０２４２】
いくつかの実装では、アレンジャは、接続優先度が閾値を上回るときのＩＰアドレスのリストを降順に並べ替える。降順は、ＩＰアドレスのそれぞれと関連付けられるリンク品質に基づくことができる。降順に配列されたとき、最高リンク品質と関連付けられるＩＰアドレスは、順序付けられたリストの中で最初に設置され、順序付けられたリストの中の各後続のＩＰアドレスは、最低リンク品質と関連付けられる最後のＩＰアドレスまで、前のＩＰアドレスよりも低いリンク品質と関連付けられる。ＩＰアドレスは、それを経由してパケットがＩＰアドレスに到達するようにトラバースする、リンクと関連付けられることができる。一実施例では、アレンジャは、接続優先度が閾値を下回るときではなくて、接続優先度が閾値を上回るときに、ＤＮＳ応答の第１の位置における第１のＩＰアドレスを、より高いリンク品質を有する第２のＩＰアドレスと置換することができる。本構成では、比較的により高い優先度を伴う接続は、より高いリンク品質を伴うリンクをトラバースするように割り当てられることができる。
【０２４３】
いくつかの実装では、接続優先度が閾値を下回るとき、ＤＮＳ応答アレンジャは、最低リンク品質と関連付けられるＩＰアドレスが、ＤＮＳ応答の中の第１のＩＰアドレスであり、最高リンク品質と関連付けられるＩＰアドレスが、ＩＰアドレスの並べ替えられたリストの中の最後のＩＰアドレスであるように、ＤＮＳ応答の中のＩＰアドレスのリストを昇順に並べ替えることができる。接続優先度が閾値を下回るときに昇順にＩＰアドレスを順序付けることは、比較的に低いリンク品質を伴うリンクを経由して、比較的に低い優先度の接続をルーティングすることができる。これは、比較的に高い優先度の接続のために高いリンク品質を伴うリンクを留保することができる。ＤＮＳ応答アレンジャはまた、非昇または降順にＩＰアドレスを並べ替えることもできる。ＩＰアドレスは、接続の優先度に合致するように配列されることができる。例えば、接続が中程度の優先度であると決定される場合、ＩＰアドレスは、中程度のリンク品質と関連付けられるＩＰアドレスが、ＤＮＳ応答の第１の位置に設置されるように、配列されることができる。接続優先度が低いまたは中程度であるとき、低いまたは中程度のリンク品質と関連付けられるＩＰアドレスが、第１の位置に（かつ高いリンク品質と関連付けられるＩＰアドレスの前に）位置付けられるように、ＤＮＳ応答を並べ替えることは、後続の高優先度接続のために高いリンク品質を伴うリンクを留保することができる。
【０２４４】
方法９００はまた、ＩＰアドレスのリストの修正された順序をクライアントに伝送するステップを含むこともできる（ブロック９１０）。ＤＮＳ応答は、ＩＰアドレスの修正された順序を含むように修正されることができる。ＤＮＳ応答アレンジャは、次いで、修正された応答をクライアントに転送することができる。クライアントは、修正されたＤＮＳ応答を受信することができる。クライアントは、修正されたＤＮＳ応答を読み取り、修正されたＤＮＳ応答の中の第１のＩＰアドレスとの接続を作成しようとすることができる。
【０２４５】
上記に説明されるシステムは、これらのコンポーネントのうちのいずれかまたはそれぞれの複数のものを提供し得、これらのコンポーネントは、独立型マシン上、またはいくつかの実施形態では、分散システム内の複数のマシン上のいずれかで、提供され得ることを理解されたい。上記に説明されるシステムおよび方法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせを生成するように、プログラミングおよび／または工学技法を使用して、方法、装置、または製造品として実装されてもよい。加えて、上記に説明されるシステムおよび方法は、１つ以上の製造品の上または中で具現化される、１つ以上のコンピュータ可読プログラムとして提供されてもよい。本明細書で使用されるような用語「製造品」は、１つ以上のコンピュータ可読デバイス、ファームウェア、プログラマブル論理、メモリデバイス（例えば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＳＲＡＭ等）、ハードウェア（例えば、集積回路チップ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）等）、電子デバイス、コンピュータ可読不揮発性記憶ユニット（例えば、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、ハードディスクドライブ等）からアクセス可能であり、それに組み込まれる、コードまたは論理を包含することを意図している。製造品は、ファイルサーバからアクセス可能であり得、ネットワーク伝送ライン、無線伝送媒体、空間を通して伝搬する信号、電波、赤外線信号等を介したコンピュータ可読プログラムへのアクセスを提供する。製造品は、フラッシュメモリカードまたは磁気テープであってもよい。製造品は、ハードウェア論理、およびプロセッサによって実行されるコンピュータ可読媒体に組み込まれるソフトウェアまたはプログラマブルコードを含む。一般に、コンピュータ可読プログラムは、ＬＩＳＰ、ＰＥＲＬ、Ｃ、Ｃ＋＋、Ｃ＃、ＰＲＯＬＯＧ等の任意のプログラミング言語で、またはＪＡＶＡ（登録商標）等の任意のバイトコード言語で、実装されてもよい。ソフトウェアプログラムは、オブジェクトコードとして、１つ以上の製造品の上または中に記憶されてもよい。
【０２４６】
方法およびシステムの種々の実施形態が説明されているが、これらの実施形態は、例証的であり、説明される方法またはシステムの範囲をいかようにも限定しない。当業者は、説明される方法およびシステムの最も広い範囲から逸脱することなく、説明される方法およびシステムの形態および詳細に変更を生じさせることができる。したがって、本明細書に説明される方法およびシステムの範囲は、例証的実施形態のうちのいずれかによって限定されるべきではなく、付随する請求項およびそれらの均等物に従って定義されるべきである。
【図１Ａ】
0006913177.tif 000003
【図１Ｂ】
0006913177.tif 000004
【図１Ｃ】
0006913177.tif 000005
【図１Ｄ】
0006913177.tif 000006
【図１Ｅ】
0006913177.tif 000007
【図１Ｆ】
0006913177.tif 000008
【図１Ｇ】
0006913177.tif 000009
【図１Ｈ】
0006913177.tif 000010
【図２Ａ】
0006913177.tif 000011
【図２Ｂ】
0006913177.tif 000012
【図３】
0006913177.tif 000013
【図４Ａ】
0006913177.tif 000014
【図４Ｂ】
0006913177.tif 000015
【図４Ｃ】
0006913177.tif 000016
【図５Ａ】
0006913177.tif 000017
【図５Ｂ】
0006913177.tif 000018
【図５Ｃ】
0006913177.tif 000019
【図６】
0006913177.tif 000020
【図７】
0006913177.tif 000021
【図８】
0006913177.tif 000022
【図９】
0006913177.tif 000023