JP2009536377A - リモートユーザに対するコンピューティング環境の提供を加速するためのシステムおよび方法 - Google Patents

リモートユーザに対するコンピューティング環境の提供を加速するためのシステムおよび方法 Download PDF

Info

Publication number
JP2009536377A
JP2009536377A JP2009505595A JP2009505595A JP2009536377A JP 2009536377 A JP2009536377 A JP 2009536377A JP 2009505595 A JP2009505595 A JP 2009505595A JP 2009505595 A JP2009505595 A JP 2009505595A JP 2009536377 A JP2009536377 A JP 2009536377A
Authority
JP
Japan
Prior art keywords
application
remote
server
appliance
local machine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009505595A
Other languages
English (en)
Other versions
JP2009536377A5 (ja
Inventor
ブラッド ジェイ. ペダーセン,
プラバカール サンダーラジャン,
ラジブ シンハ,
テリー トレダー,
Original Assignee
サイトリックス システムズ, インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by サイトリックス システムズ, インコーポレイテッド filed Critical サイトリックス システムズ, インコーポレイテッド
Publication of JP2009536377A publication Critical patent/JP2009536377A/ja
Publication of JP2009536377A5 publication Critical patent/JP2009536377A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0272Virtual private networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/10Network architectures or network communication protocols for network security for controlling access to devices or network resources
    • H04L63/105Multiple levels of security
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/16Implementing security features at a particular protocol layer
    • H04L63/166Implementing security features at a particular protocol layer at the transport layer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/165Combined use of TCP and UDP protocols; selection criteria therefor
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/54Store-and-forward switching systems 
    • H04L12/56Packet switching systems
    • H04L12/5601Transfer mode dependent, e.g. ATM
    • H04L2012/5603Access techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]

Abstract

本発明は、リモートロケーションにおけるクライアントのリモートユーザに対するコンピューティング環境の提供を加速することを目的とする。コンピューティング環境は、アプリケーションによって使用または処理されるアプリケーションおよびデータファイルを含むことができる。アプリケーションおよびデータファイルは、クライアントから離れたサーバを介して記憶または提供することができる。ユーザは、リモートコンピュータを介して、ユーザによるアプリケーションの実行を提供するサーバから、コンピューティング環境を要求することができる。たとえば、サーバは、アプリケーションをリモートクライアントにストリーミングすることができる。クライアントおよびサーバは、クライアントおよびサーバ間の通信を加速するアプライアンスを介して通信することができる。

Description

本出願は、「Systems and Methods for Accelerating Delivery of a Computing Environment to a Remote User」と題され、2006年4月12日に出願された、米国仮特許出願第60/744,720号の優先権の利益を主張し、該米国仮特許出願は、参照により本明細書に援用される。
本発明は、サーバから離れたロケーションにあるクライアントのリモートユーザに対するアプリケーションおよびデータファイルを含むコンピューティング環境の提供を加速するためのシステムおよび方法を目的とする。
企業環境の運用および管理は、時間、金銭、および資源を消費する。多くの場合、それは、アプリケーションおよびデータ管理プロセスが分散的かつ労働集約的であるためである。たとえば、管理者の時間のかなりの部分は、企業データのためにより多くの記憶装置を用意するか、もしくはバックアップを実行するか、または企業データの増加に対処するためにサーバを更新することに費やされる場合がある。また、管理者は、データの増加に備えるために、新しいサーバを構成して提供する必要があり得る。さらに、管理者は、特定のユーザアプリケーションを提供するために、サーバを更新またはプロビジョニングすることに時間を費やす場合がある。さらに、企業データのかなりの部分は、企業データセンターの外部に存在し得る。たとえば、企業のドキュメント、ファイルおよびデータは、データセンターから離れた様々なコンピュータ上に位置するか、または様々なコンピュータに分散している場合がある。
企業のデータおよびアプリケーションの運用および管理に要する時間、金銭、および資源を減少させるために、多くの会社は、サーバ、企業データ、およびアプリケーションを統合し、集中させている。統合および集中化は、多少のコストを削減し、多少の利益を生むが、集中化されたデータおよびアプリケーションは、データおよびアプリケーションに対するアクセスを提供する際に、さらに問題を生じる。こうした問題の1つは、リモートユーザが、ワイドエリアネットワーク(WAN)接続を通してファイルにアクセスしようとすることに関する。たとえば、一般に、LAN接続よりはるかに遅い、企業データセンターとのネットワーク接続を有する支社に存在するリモートユーザは、WANを通して、企業データセンターに記憶されているMicrosoft Officeドキュメントを開こうとし得る。リモートユーザがそのネットワークを通してファイルにアクセスする場合、WANの待ち時間、信頼性、および帯域幅のために遅延する。ファイルが大きい場合、遅延はさらに大きくなり得る。さらに、リモートユーザと企業データセンターとの間の距離が大きくなるにつれて、ファイルにアクセスする際のネットワーク遅延の頻度および長さも増加し得る。WAN上に仮想プライベートネットワーク、セキュリティ、および他のネットワーク層を追加すると、リモートユーザが利用可能な帯域幅をさらに減少させ、ファイルにアクセスする際の遅延を増加させる場合がある。リモートオフィスの速度および帯域幅がより低下することによって、リモートファイルにアクセスする時の遅延は許容できないほどになり得る。リモートファイルに対するアクセスの遅延を防止するため、リモートユーザは、ファイルをローカルでコピーして使用する場合があり、集中化動作の目的は無効になる。さらに、WAN接続は、LAN接続より信頼性が低く、パケットの損失およびネットワークの切断を生じる場合がある。WANの遮断は、ドキュメントを保存するか、または開くなどのファイル動作の際に生じる場合があり、リモートユーザはさらに遅延に悩むことになる。
したがって、リモートユーザによる集中化アプリケーションおよびデータファイルに対するアクセスを改善し、アプリケーションおよびデータファイルをリモートユーザに提供する際の加速を含むシステムおよび方法が望まれる。
本発明は、リモートユーザに対するアプリケーションおよびデータファイルのコンピューティング環境の提供を加速するシステムおよび方法に関する。アプリケーションおよびデータファイルは、クライアントから離れたサーバを介して記憶または提供することができる。たとえば、リモートの従業員などのユーザは、ローカルに利用可能なアプリケーションおよび/またはデータファイルを所有していない支社のコンピュータを使用することができる。ユーザは、リモートクライアント上で利用できないワード処理アプリケーションを使って、企業文書を編集したい場合がある。ユーザは、ユーザが希望するアプリケーションの実行を提供するサーバに、リモートクライアントを介してコンピューティング環境を要求することができる。たとえば、サーバは、アプリケーションをリモートクライアントにストリーミングすることができる。リモートクライアントおよびサーバは、リモートクライアントとサーバとの間の通信を加速するアプライアンスを介して通信することができる。たとえば、アプライアンスは、リモートユーザに対するアプリケーションのストリーミングを加速し得る。たとえばアプライアンスは、リモートユーザに対するアプリケーションのストリーミングを加速し得る。場合によっては、アプリケーションまたはリモートユーザは、サーバにデータファイルも要求する場合があり、アプライアンスは、リモートユーザに対するデータファイルの提供を加速する。したがって、本発明は、ユーザから離れたロケーションにあるアプリケーションおよびデータファイルに対する加速されたアクセスを、ネットワークに接続されたデバイスを介してリモートロケーションのユーザに提供する。
一態様では、本発明は、アプリケーションおよびデータファイルのコンピューティング環境をリモートロケーションのクライアントのユーザに提供する際に加速する方法に関する。この方法は、リモートクライアントからの要求をサーバが受信して、アプリケーションを実行することを含む。リモートクライアントおよびサーバは、アプライアンスを介して通信する。この方法は、サーバが、リモートクライアントに対してアプリケーションをストリーミングし、実行することも含む。クライアントは、アプリケーションが利用可能なデータファイルを求める要求をサーバに伝送し、アプライアンスは、リモートクライアントに対するデータファイルの伝送を加速する。
本発明の一実施態様では、この方法は、リモートクライアントに対するアプリケーションのストリーミングをアプライアンスにより加速することを含む。別の実施態様では、アプライアンスは、次の加速技術の1つを実行することによって、データファイルの伝送、またはアプリケーションのストリーミングを加速する:1)圧縮;2)解凍;3)伝送制御プロトコルプーリング;4)伝送制御プロトコルの多重化;5)伝送制御プロトコルのバッファリング;および6)キャッシング。別の実施態様では、この方法は、リモートクライアント上の加速プログラムによって、リモートクライアントとサーバとの間の通信を加速することを含む。この方法の実施態様によっては、アプライアンスは、リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー(SSL)接続を確立する。別の実施態様では、この方法は、トランスポート層接続を介してリモートクライアントとサーバとの間で通信されるネットワークパケットのペイロードを、アプライアンスによる加速することを含む。
本発明の一実施態様では、この方法は、リモートクライアントから、サーバとの接続またはセッションを確立するという要求があった後、アプライアンスによって、加速プログラムをリモートクライアントに伝送することを含む。実施態様によっては、リモートクライアントは、アプライアンスから受信後、加速プログラムを自動的にインストールして実行する。別の実施態様では、この方法は、リモートクライアント上の加速プログラムによって、以下の加速技術の1つを実行することを含む:
1)圧縮;2)解凍;3)伝送制御プロトコルプーリング;4)伝送制御プロトコルの多重化;5)伝送制御プロトコルのバッファリング;および6)キャッシング。実施態様によっては、リモートクライアントは、アプリケーションまたはサーバに対して透過的に、加速プログラムを実行する。
本発明の実施態様によっては、この方法は、アプリケーションが加速可能であるかどうかをアプライアンスが決定し、その決定に応じて、加速プログラムをリモートクライアントに伝送することを含む。別の実施態様では、アプライアンスは、データファイルをキャッシュする。一実施態様では、アプライアンスは、データファイル要求を傍受し、要求に応じてリモートクライアントに対し、キャッシュされたデータファイルを伝送する。
別の態様では、本発明は、リモートロケーションのクライアントに対するアプリケーションおよびデータファイルのコンピューティング環境を、リモートユーザに提供する際に加速するためのシステムに関する。このシステムは、1つまたは複数のリモートクライアントと、1つまたは複数のサーバとの間の通信を加速するためのアプライアンスを含む。このシステムは、アプリケーションを実行するというリモートクライアントからの要求を受信するサーバをさらに備える。リモートクライアント、およびサーバは、アプライアンスを介して通信する。サーバは、実行されるアプリケーションをリモートクライアントにストリーミングする。クライアントは、アプリケーションが使用可能なデータファイルをサーバに要求し、アプライアンスは、リモートクライアントに対するデータファイルの伝送を加速する。
本発明の実施態様によっては、アプライアンスは、リモートクライアントに対するアプリケーションのストリーミングを加速する。一実施態様では、アプライアンスは、以下の加速技術の1つを実行することによって、データファイルの伝送、またはアプリケーションのストリーミングを加速する:1)圧縮;2)解凍;3)伝送制御プロトコルプーリング;4)伝送制御プロトコルの多重化;5)伝送制御プロトコルのバッファリング;および6)キャッシング。別の実施態様では、このシステムは、リモートクライアントとサーバとの間の通信を加速する加速プログラムをリモートクライアント上に含む。一実施態様では、アプライアンスは、リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー(SSL)接続を確立する。
本発明のシステムの実施態様によっては、アプライアンスは、リモートクライアントとサーバとの間のトランスポート層接続を介して通信されるネットワークパケットのペイロードを加速する。一実施態様では、アプライアンスは、サーバとの接続またはセッションを確立するというクライアントからの要求に応じて、加速プログラムをリモートクライアントに伝送する。別の実施態様では、リモートクライアントは、アプライアンスから受信後、自動的に加速プログラムをインストールして実行する。リモートクライアント上の加速プログラムは、次の加速技術の1つを実行し得る:1)圧縮;2)解凍;3)伝送制御プロトコルプーリング;4)伝送制御プロトコルの多重化;5)伝送制御プロトコルのバッファリング;および6)キャッシング。一実施態様では、リモートクライアントは、アプリケーションまたはサーバに対して透過的に、加速プログラムを実行する。
本発明のシステムの別の実施態様では、アプライアンスは、アプリケーションが加速可能であると決定し、その決定に応じて、加速をリモートクライアントに伝送する。一実施態様では、アプライアンスは、データファイルをキャッシュするためのキャッシュを含む。実施態様によっては、アプライアンスは、データファイル要求を傍受し、要求に応じて、キャッシュされたデータファイルをリモートクライアントに伝送する。
本発明の上記およびその他の態様は、以下の詳細な説明、および添付の図面から容易に明らかになるであろう。図面は、具体的に示すためのものであり、本発明を制限する意図はない。
以下の様々な実施態様の説明を読む上で、明細書の各項目、およびその個々の内容の説明は参考にし得る:
− A項は、本明細書に記載する実施態様を実践する際に役だち得るネットワーク環境およびコンピューティング環境を説明する;
− B項は、コンピューティング環境をリモートユーザに提供するシステムおよび方法の実施態様を説明する;
− C項は、クライアントおよびサーバ間の通信を加速するシステムおよび方法の実施態様を説明する;および
− D項は、BおよびC項に記載されているシステムおよび方法を使用して、リモートユーザに対するコンピューティング環境の提供を加速する具体的な一例の実施態様を説明する。
(A.ネットワークおよびコンピューティング環境)
システムおよび方法の実施態様の仕様を説明する前に、実施態様を展開し得るネットワークおよびコンピューティング環境を説明すると役立つと思われる。次に、図1Aを参照すると、ネットワーク環境5が示されている。簡潔に説明すると、ネットワーク環境5は、1つまたは複数のネットワーク40、40’’を介して、1つまたは複数のサーバ30〜30’’(サーバ30、またはリモートマシン30とも呼ばれる)と通信するクライアント10〜10’’(クライアント10、またはローカルマシン10とも呼ばれる)を有する。実施態様によっては、クライアント10は、アプライアンス1250を介してサーバ30と通信する。
図1Aは、クライアント10〜10〜10’’およびサーバ30〜30’’間のネットワーク40およびネットワーク40’を示すが、クライアント10〜10’およびサーバ30〜30’’は同じネットワーク40上に存在し得る。ネットワーク40および40’は、同じタイプのネットワーク、または異なるタイプのネットワークでよい。ネットワーク40および/またはネットワーク40’は、企業イントラネットなどのローカルエリアネットワーク、都市規模ネットワーク(MAN)、またはインターネットもしくはワールドワイドウェブなどのワイドエリアネットワーク(WAN)でよい。一実施態様では、ネットワーク40’はプライベートネットワークでよく、ネットワーク40はパブリックネットワークでよい。実施態様によっては、ネットワーク40はプライベートネットワーク、ネットワーク40’はパブリックネットワークでよい。別の実施態様では、ネットワーク40および40’は、ともにプライベートネットワークでよい。実施態様によっては、クライアント10〜10’’は、ネットワーク40によるWAN接続を介して、企業データセンターに位置するサーバ30〜30’’と通信する企業の支社に位置してよい。
ネットワーク40および/または40’は、任意のタイプおよび/または形態のネットワークでよく、以下のどれでも備えることができる:2地点間ネットワーク、放送網、ワイドエリアネットワーク、ローカルエリアネットワーク、電気通信網、データ通信網、コンピュータネットワーク、ATM(非同期転送モード)ネットワーク、SONET(動機光ネットワーク)ネットワーク、SDH(同期デジタルハイアラーキ)ネットワーク、無線ネットワーク、および有線ネットワーク。ネットワーク40および/または40’の接続形態は、バス、スター、またはリングネットワーク接続形態でよい。ネットワーク40および/または40’、並びにネットワークの接続形態は、本明細書に記載する運用をサポートすることが可能な当業者が周知している任意のこうしたネットワークまたはネットワーク接続形態でよい。
図1Aに示すように、アプライアンス1250(本明細書では、インターフェースユニット1250とも呼ぶ)は、ネットワーク40および40’間に示されている。実施態様によっては、アプライアンス1250は、ネットワーク40上に位置してよい。たとえば、企業の支社は、支社でアプライアンス1250を展開し得る。他の実施態様では、アプライアンス1250は、ネットワーク40’上に位置し得る。たとえば、アプライアンス1250は、企業データセンターに位置することができる。さらに別の実施態様では、複数のアプライアンス1250は、ネットワーク40上に展開し得る。実施態様によっては、複数のアプライアンス1250は、ネットワーク40’上に展開し得る。一実施態様では、アプライアンス1250は、第2アプライアンス1250’と通信する。他の実施態様では、アプライアンス1250は、任意のクライアント10〜10’、またはクライアント10〜10’と同じかまたは異なるネットワーク40、40’上のサーバ30〜30’’の一部でよい。1つまたは複数のアプライアンス1250は、クライアント10〜10’’およびサーバ30〜30’’間のネットワークまたはネットワーク通信経路内の任意の点に位置し得る。
一実施態様では、システムは、複数の論理的に群化されたリモートマシン30を備え、これらの1つまたは複数は、ローカルマシン10に代わってアプリケーションを実行するために使用することができる。これらの実施態様では、リモートマシンの論理群は、サーバファーム38またはファーム38と呼ばれることがある。これらの実施態様のいくつかでは、リモートマシン30は、地理的に分散し得る。ファーム38は、単一の実態として運用することができる。
各々のファーム38内のリモートマシン30は、異質でよい。つまり、1つまたは複数のリモートマシン30は、あるタイプのオペレーティングシステムプラットフォーム(たとえば、ワシントン州、レドモンドのMicrosoft Corp.が製造しているWINDOWS(登録商標) NT)に従って動作することができるが、他の1つまたは複数のリモートマシン30は、他のタイプのオペレーティングシステムプラットフォーム(たとえば、Unix(登録商標)またはLinux)に従って動作することができる。各々のファーム38を含むリモートマシン30は、ファーム38内の他の各々のリモートマシン30と必ずしも物理的に隣接する必要はない。したがって、ファーム38として論理的に群化されたリモートマシン30の群は、ワイドエリアネットワーク(WAN)接続、またはミディアムエリアネットワーク(MAN)接続を使用して相互接続し得る。たとえば、ファーム38は、異なる大陸、またはある大陸の異なる地域、国、州、都市、キャンパス、または部屋に物理的に位置するリモートマシン30を含み得る。ファーム38内のリモートマシン30間のデータ伝送速度は、リモートマシン30が、ローカルエリアネットワーク(LAN)接続、またはある形態の直接接続を使用して接続される場合に増加することが可能である。
リモートマシン30は、サーバ、ファイルサーバ、アプリケーションサーバ、またはリモートマシンと呼ばれる場合がある。実施態様によっては、リモートマシン30は、アプリケーションサーバ、またはマスターアプリケーションサーバとして機能する能力を有する場合がある。一実施態様では、リモートマシン30は、アクティブディレクトリを含み得る。ローカルマシン10は、クライアントノードまたはエンドポイントと呼ばれることもある。実施態様によっては、ローカルマシン10は、アプリケーションにアクセスすることを求めるクライアントノード、他のローカルマシン10のためにホストされたアプリケーションにアクセスを提供するアプリケーションサーバとして機能する能力を有する。
一実施態様では、ローカルマシン10は、ファーム38内のリモートマシン30の1つと直接通信する。別の実施態様では、ローカルマシン10は、ファーム38内のリモートマシン30と通信するために、program neighborhoodアプリケーションを実行する。さらに別の実施態様では、リモートマシン30は、マスターノードの機能を提供する。実施態様によっては、ローカルマシン10は、ネットワーク40を通して、ファーム38内のリモートマシン30と通信する。ネットワーク40上では、ローカルマシン10は、たとえば、ファーム38内のリモートマシン30、30’、30’’、および30’’’によってホストされる様々なアプリケーションの実行を要求し、アプリケーション実行の結果の出力を受信し、表示することができる。ネットワーク40は、同期または非同期接続を含むことができ、LAN、MAN(ミディアムエリアネットワーク)、またはWANでよい。さらに、ネットワーク40は、赤外チャネルまたは衛星帯などの無線リンクを含み得る。実施態様によっては、マスターノードのみが、リモートマシン30’に関連するアドレス情報を識別し、提供するのに必要な機能を提供する。
実施態様によっては、ローカルマシン10は、リモートマシン30’’’と通信する。これらの実施態様の1つでは、リモートマシン30’’’は、ウェブサーバの機能を提供する。これらとは別の実施態様では、リモートマシン30’’’は、ローカルマシン10からの要求を受信し、その要求をリモートマシン30に回送し、リモートマシン30からの要求に対する応答とともに、ローカルマシン10による要求に応答する。これらとはさらに別の実施態様では、リモートマシン30は、ローカルマシン10が使用可能な一覧を取得し、アプリケーションの一覧によって識別されるアプリケーションをホストするリモートマシン30’に関連する情報をアドレス指定する。これらとはさらに別の実施態様では、リモートマシン30’’’は、ウェブインターフェースを使用して、ローカルマシン10の要求に対する応答を提示する。一実施態様では、ローカルマシン10は、リモートマシン30’と直接通信して、識別されたアプリケーションにアクセスする。別の実施態様では、ローカルマシン10は、リモートマシン30’’’からのアプリケーション出力データ、およびリモートマシン30’上の識別されたアプリケーションの実行により生成されたアプリケーション出力データを受信する。
次に、図1Bを参照すると、クライアント10上のコンピューティング環境を提供および/または動作させるためのネットワーク環境が示されている。簡潔に説明すると、サーバ30は、コンピューティング環境、またはアプリケーションおよびデータファイルを1つまたは複数のクライアントに提供するためのアプリケーション提供システム500を備える。クライアント10は、データファイルを使用または処理するアプリケーションを実行するためのコンピューティング環境15を含み得る。ネットワーク40、40’、およびアプライアンス1250を介してサーバ30と通信するクライアント10は、アプリケーションおよびデータファイルをサーバ30に要求し得るか、またはアプライアンス1250は、要求をクライアント10からサーバ30に回送し得る。たとえば、クライアント10は、ローカルに記憶されているか、またはアクセス可能なアプリケーションおよびデータファイルをローカルに持たなくてよい。サーバ30は、要求に応じて、アプリケーションおよびデータファイルをクライアント10に提供することができる。たとえば、一実施態様では、サーバ30は、アプリケーションをアプリケーションストリームとして伝送し、クライアント10上のコンピューティング環境15で動作させることができる。
図1Cおよび1Dは、クライアントコンピューティングデバイス10、およびサーバコンピューティングデバイス30として有用な汎用コンピュータ135のアーキテクチャの実施態様を示すブロック図である。図1Cおよび1Dに示すように、各々のコンピュータ135は、中央処理ユニット102、およびメインメモリユニット122を備える。各々のコンピュータ135は、その他の要素、たとえば1つまたは複数の入力/出力デバイス130a〜130b(一般に、参照符号130で示す)、および中央処理ユニット102と通信するキャッシュメモリ140を備えてもよい。
中央処理ユニット102は、メインメモリユニット122からフェッチされたインストラクションに応答し、インストラクションを処理する任意の論理回路構成である。多くの実施態様では、中央処理ユニットは、マイクロプロセッサユニット、たとえば、カリフォルニア州、マウンテンビューのIntel Corporationが製造するユニット、イリノイ州、ショウンバーグのMotorola Corporationが製造するユニット、カリフォルニア州、サンタクララのTransmeta Corporationが製造するCrusoeおよびEfficeonラインのプロセッサ、ニューヨーク州、ホワイトプレインズのInternational Business Machinesが製造するプロセッサのライン、またはカリフォルニア州、サニーベールのAdvanced Micro Devicesが製造するプロセッサのラインによって提供される。
メインメモリユニット122は、データを記憶するとともに、マイクロプロセッサ102が直接アクセスすることを可能にする1つまたは複数のメモリチップ、たとえば、スタティックランダムアクセスメモリ(SRAM)、Burst SRAMまたはSynchBurst SRAM(BSRAM)、ダイナミックランダムアクセスメモリ(DRAM)、高速ページモードDRAM(FPM DRAM)、キャッシュ内蔵型高速DRAM(EDRAM)、拡張データ出力RAM(EDO RAM)、拡張データ出力DRAM(EDO DRAM)、バースト拡張データ出力DRAM(BEDO DRAM)、キャッシュ内蔵型高速DRAM(EDRAM)、同期DRAM(SDRAM)、JEDEC SRAM、PC100 SDRAM、ダブルデータレートSDRAM(DDR SDRAM)、拡張SDRAM(ESDRAM)、同期リンクDRAM(SLDRAM)、ダイレクトRambus DRAM(DRDRAM)、または強誘導体 RAM(FRAM)でよい。図1Cに示す実施態様では、プロセッサ102は、システムバス120を介してメインメモリ122と通信する(以下でさらに詳細に説明する)。図1Bは、プロセッサが、メモリポートを介してメインメモリ122と直接通信するコンピュータシステム135の一実施態様を示す。たとえば、図1Bでは、メインメモリ122はDRDRAMでよい。
図1Cおよび1Dは、「バックサイド」バスと呼ばれることもある2次バスを介してキャッシュメモリ140と直接通信する実施態様を示す。他の実施態様では、メインプロセッサ102は、システムバス120を使用してキャッシュメモリ140と通信する。キャッシュメモリ140は、一般に、メインメモリ122より高速の応答時間を有し、一般に、SRAM、BSRAM、またはEDRAMによって提供される。
図1Cに示す実施態様では、プロセッサ102は、ローカルシステムバス120を介して様々なI/Oデバイス130と通信する。様々なバスは、中央処理ユニット102を、VESA VLバス、ISAバス、EISAバス、MicroChannelアーキテクチャ(MCA)バス、PCIバス、PCI−Xバス、PCI−Expressバス、またはNuBusを含む様々なI/Oデバイス130に接続するために使用される。I/Oデバイスがビデオディスプレーである実施態様の場合、プロセッサ102は、アドバンストグラフィックスポート(AGP)を使用して、ディスプレーと通信することができる。図1Dは、メインプロセッサ102が、HyperTransport、Rapid I/O、またはInfinibandを介して、I/Oデバイスと直接通信するコンピュータシステム135の一実施態様を示す。図1Dは、ローカルバスおよび直接通信が混合される一実施態様をさらに示す:プロセッサ102は、ローカル相互接続を使用してI/Oデバイス130aと通信する一方、I/Oデバイス130bと直接通信する。
コンピュータシステム135には、多様なI/Oデバイス130が存在し得る。入力デバイスとしては、キーボード、マウス、トラックパッド、トラックボール、マイクロフォン、および描画タブレットが挙げられる。出力デバイスとしては、ビデオディスプレー、スピーカ、インクジェットプリンタ、レーザプリンタ、および昇華型プリンタが挙げられる。I/Oデバイスは、コンピュータシステム135に大容量記憶装置、たとえばハードディスクドライブ、3.5インチ、5.25インチディスク、またはZIPディスクなどのフロッピー(登録商標)ディスクを収容するフロッピー(登録商標)ディスクドライブ、CD−ROMドライブ、CD−R/RWドライブ、DVD−ROMドライブ、様々な形式のテープドライブ、カリフォルニア州、ロスアラミトスのTwintech Industry,Inc.が製造しているUSB Flash DriveラインのデバイスなどのUSB記憶デバイスも提供する。
さらに他の実施態様では、I/Oデバイス130は、システムバス120と外部通信バス、たとえばUSBバス、Apple Desktopバス、RS−132直列接続、SCSIバス、FireWireバス、FireWire 800バス、Ethernet(登録商標)バス、AppleTalkバス、ギガビットイーサネット(登録商標)バス、非同期転送モードバス、HIPPIバス、Super HIPPIバス、SerialPlusバス、SCI/LAMPバス、FibreChannelバス、またはシリアルアタッチト小型コンピュータシステムのインターフェースバスとの間のブリッジでよい。
図1Cおよび図1Dに示す類の汎用コンピュータは、一般に、システムリソースに対するタスクおよびアクセスのスケジューリングを制御するオペレーティングシステムの制御下で動作する。一般的なオペレーティングシステムとしては、以下が挙げられる:ワシントン州、レドモンドのMicrosoft Corp.が製造しているMICROSOFT WINDOWS(登録商標);カリフォルニア州、クパチーノのApple Computerが製造しているMacOS、ニューヨーク州、アーモンクのInternational Business Machines製造しているOS/2;およびユタ州、ソルトレークシティのCaldera Corp.が販売している自由に入手可能なオペレーティングシステム。
クライアントマシン10またはサーバ30がモバイルデバイスを含む実施態様では、デバイスは、すべてイリノイ州、ショウンバーグのMotorola Corp.が製造しているi55sr、i58sr、i85s、またはi88sなどのJAVA(登録商標)対応携帯電話;日本、京都のKyoceraが製造している6035または7135;あるいは韓国、ソウルのSamsung Electronics Co.,Ltd.が製造しているi300またはi330でよい。モバイルデバイスを含む他の実施態様では、モバイルデバイスは、PalmOS オペレーティングシステム、たとえば、すべてカリフォルニア州、ミルピタスのpalmOne,Inc.が製造しているTungsten W、VII、VIIx、i705などの制御下で動作するパーソナルデジタルアシスタント(PDA)でよい。さらに他の実施態様では、クライアント113は、PocketPC オペレーティングシステムの制御下で動作するパーソナルデジタルアシスタント(PDA)、たとえば、すべてカリフォルニア州、パロアルトのHewlett−Packard Corporationが製造しているiPAQ 4155、iPAQ 5555、iPAQ 1945、iPAQ 2215、およびiPAQ 4255;カリフォルニア州、ウォールナットのViewSonicが製造しているViewSonic V36;またはニューヨーク州、ニューヨークのToshiba America,Inc.が製造しているToshiba PocketPC e405でよい。さらに他の実施態様では、モバイルデバイスは、すべてカリフォルニア州、ミルピタスのPalmOne,Inc.が製造しているTreo 180、Treo 270、Treo 600、Treo 650、またはTreo 700wなどのコンビネーションPDA/電話デバイスである。さらに他の実施態様では、モバイルデバイスは、Motorola Corp.が製造しているMPx200などのPocketPCオペレーティングシステムの制御下で動作する携帯電話である。代表的なモバイルデバイスは、プロセッサ102、およびメインメモリ104など、図1Cおよび1Dで上記のとおり説明した多くの要素を含み得る。
B.コンピューティング環境を提供するためのシステムおよび方法
ある実施態様は、サーバ30からリモートロケーションに位置するクライアント10におけるリモートユーザに対し、コンピューティング環境を提供するシステムおよび方法を目的とする。本項の方法およびシステムは、一般にサーバ30について記述しているが、以下の方法およびシステムは、サーバ30、ネットワークアプライアンス1250、またはこれらの任意の組合せを使用し得る。
次に、図1Eを参照すると、リモートマシン30が、図1Aに示すようにファーム38を備えるシステムの一実施態様が示されている。各々のリモートマシン30は、ネットワーク側インターフェース202、およびファーム側インターフェース204を備える。リモートマシン30のネットワーク側インターフェース202は、1つまたは複数のローカルマシン10またはネットワーク210と通信し得る。ネットワーク210は、WAN、LAN、またはインターネットもしくはワールドワイドウェブなどの国際ネットワークでよい。ローカルマシン10は、ネットワーク210を使用して、リモートマシン30との接続を確立し得る。
リモートマシン30のファーム側インターフェース204は、通信リンク200を通して互いに相互接続されるため、リモートマシン30は互いに通信することができる。各々のリモートマシン30上では、ファーム側インターフェース204は、ネットワーク側インターフェース202と通信する。ファーム側インターフェース204はさらに、持続ストア230と通信し(矢印220で示す)、実施態様によっては動的ストア240と通信する。リモートマシン30、持続ストア230、および動的ストア240の組合せは、提供される場合、ファーム38と総称される。実施態様によっては、リモートマシン30は、持続ストア230と通信し、他のリモートマシン30’は、リモートマシン30と通信して、持続ストア内に記憶された情報にアクセスする。
持続ストア230は、ディスク、ディスクファーム、独立ディスクの冗長アレイ(RAID)、書き込み可能なコンパクトディスク、または読み書き可能であり、電源が記憶デバイスから取り外された時に、書き込まれたデータを維持する任意のその他のデバイス上に物理的にインプリメントすることができる。単一の物理デバイスは、複数の持続ストアに記憶装置を提供することができ、つまり単一の物理デバイスは、複数のファーム38に持続ストア230を提供し得る。持続ストア230は、ファーム38内の各々のリモートマシン30に関連する静的データ、およびファーム38内のすべてのリモートマシン30によって使用されるグローバルデータを維持する。一実施態様では、持続ストア230は、リモートマシンのデータを軽量ディレクトリアクセスプロトコル(LDAP)データモデル内に維持する。他の実施態様では、持続ストア230は、リモートマシンのデータをODBCに準拠するデータベース内に記憶する。本明細書の目的上、「静的データ」という用語は、頻繁に変化しない、つまり1時間、1日、週ごとにのみ変化するデータ、またはまったく変化しないデータを意味する。各々のリモートマシンは、持続記憶装置サブシステムを使用して、持続ストア230からデータを読み取り、持続ストア230にデータを書き込む。
持続ストア230によって記憶されるデータは、信頼性の目的上、物理的または論理的に複製することができる。たとえば、物理的冗長性は、各々のディスクがデータのコピーを提供する冗長なミラードディスクのセットを使用して提供することができる。他の実施態様では、データベース自体が、標準のデータベース技術を使用して複製され、データベースの複数のコピーを提供し得る。さらに他の実施態様では、物理的および論理的な複製は、同時に使用することができる。
動的ストア240(つまり、記憶されたすべてのテーブルの集合)は、様々な方法で具現することができる。一実施態様では、動的ストア240は集中化され、つまりすべてのランタイムデータは、ファーム38内の1つのリモートマシン30のメモリに記憶される。リモートマシンは、マスターネットワークノードとして動作し、ファーム38内の他のすべてのリモートマシン30は、そのランタイムデータにアクセスする時に、マスターネットワークノードと通信する。別の実施態様では、ファーム38内の各々のリモートマシン30は、動的ストア240の完全なコピーを維持する。この場合、リモートマシン30は、動的ストア240のコピーを最新にしておくために、他のすべてのリモートマシン30と通信する。
別の実施態様では、各々のリモートマシン30は、それ自体のランタイムデータを維持し、リモートマシン30からランタイムデータを取得することを求める場合、他のすべてのリモートマシン30と通信する。したがって、たとえば、ローカルマシン10によって要求されたアプリケーションプログラムを探そうとするリモートマシン30は、ファーム38内の他のすべてのリモートマシン30と直接通信し、要求されたアプリケーションをホストする1つまたは複数のリモートマシンを探す。
最大数のリモートマシン30を有するファーム38の場合、これらの実施態様によって生成されるネットワークトラフィックは重くなる可能性がある。一実施態様は、ファーム38内のリモートマシン30のサブセット、一般に2つ以上を「コレクタポイント」として指定することによって、重いネットワークトラフィックを軽減する。一般に、コレクタポイントは、ランタイムデータを収集するリモートマシンである。各々のコレクタポイントは、ファーム38内の他の特定のリモートマシン30から収集したランタイムデータを記憶する。ファーム38内の各々のリモートマシン30は、コレクタポイントとして動作することが可能であり、その結果、コレクタポイントとして指定することができる。一実施態様では、コレクタポイントは、全体の動的ストア240のコピーを記憶する。別の実施態様では、各々のコレクタポイントは、動的ストア240の一部分を記憶し、つまり、特定のデータタイプのランタイムデータを維持する。リモートマシン30によって記憶されるデータのタイプは、1つまたは複数の基準に従って予め決めることができる。たとえば、リモートマシン30は、様々なタイプのデータを、そのブート順序に基づいて記憶し得る。あるいは、リモートマシン30によって記憶されるデータのタイプは、管理者が管理ツール140を使用して構成することができる。これらの実施態様では、動的ストア240は、ファーム38内の2つ以上のリモートマシン30の間で分配される。別の実施態様では、アプライアンス1250は、リモートマシン30、動的ストア16240、および持続ストア230間で渡されるデータを加速することによって、重いネットワークトラフィックを軽減し得る。こうした加速は、本明細書のC項でさらに説明する技術の何れかにより提供し得る。たとえば、アプライアンス1250は、重いネットワークトラフィックを軽減するために使用し得る。
コレクタポイントとして指定されていないリモートマシン30は、コレクタポイントとして指定されている、ファーム38内のリモートマシン30を認識する。コレクタポイントとして指定されていないリモートマシン180は、ランタイムデータを提供および要求する時に、特定のコレクタポイントと通信し得る。したがって、コレクタポイントはネットワークトラフィックを軽減し、なぜなら、ファーム38内の各々のリモートマシン30は、ランタイムデータにアクセスすることを求める際に、他のすべてのリモートマシン30ではなく、単一のコレクタポイントのリモートマシン30と通信するからである。
各々のリモートマシン30は、複数のタイプのデータに対してコレクタポイントとして動作することが可能である。たとえば、リモートマシン30’’は、情報をライセンスし、情報をロードするためにコレクタポイントとして動作することが可能である。これらの実施態様では、各々のコレクタポイントは、様々なタイプのランタイムデータを収集し得る。たとえば、この事例を具体的に示すため、リモートマシン30’’’はライセンス情報を収集し、リモートマシン30’’はロード情報を収集する。
実施態様によっては、各々のコレクタポイントは、ファーム38内のリモートマシン30間で共用されるデータを記憶する。これらの実施態様では、特定のタイプのデータの各々のコレクタポイントは、そのコレクタポイントが収集したデータを、ファーム38内の当該データタイプの他のすべてのコレクタポイントと交換する。したがって、こうしたデータの交換が完了した後、各々のコレクタポイント30’’および30は同じデータを所有する。また、これらの実施態様では、コレクタポイント30および30’’は、他のすべてのコレクタポイントがランタイムデータの何らかの更新を把握している状態に保つ。
ブラウジングは、ローカルマシン10がファーム38、リモートマシン30、およびファーム38内のアプリケーションを閲覧し、ファーム38全体のセッションなどの使用可能な情報にアクセスすることを可能にする。各々のリモートマシン30は、ローカルマシン10にブラウジング機能を提供するため、ICAブラウジングサブシステム260を備える。ローカルマシン10が、リモートマシン30の何れかのICAブラウザサブシステム260との接続を確立した後、当該ブラウザのサブシステムは、多様なローカルマシンの要求をサポートする。このようなローカルマシンの要求は、以下を含む:(1)ファーム内のリモートマシンの名称を一覧にする、(2)ファーム内で発行されたアプリケーションの名称を一覧にする、(3)ローカルマシン10に有用なリモートマシンのアドレスに対して、リモートマシンの名称および/またはアプリケーションの名称を決定する。ICAブラウザサブシステム260は、program neighborhoodアプリケーションを実行するローカルマシン10によって行われる要求もサポートし、program neighborhoodアプリケーションは、要求に応じて、ユーザが承認されたファーム38内のアプリケーションのビューをローカルマシン10に提供する。ICAブラウザサブシステム260は、上記のすべてのローカルマシンの要求をリモートマシン30内の適切なサブシステムに回送する。
一実施態様では、program neighborhoodサブシステム270を有するファーム38内の各々のリモートマシン30は、ローカルマシン10のユーザに、ファーム38内のアプリケーションのビューを提供することができる。program neighborhoodサブシステム270は、ローカルマシン10のユーザが、アクセスの承認を有するアプリケーションのビューを制限する場合がある。一般に、このprogram neighborhoodサービスは、アイコンのリストまたはグループとして、アプリケーションをユーザに提示する。
program neighborhoodサブシステム270によって提供される機能は、2つのタイプのローカルマシン、(1)ローカルマシンのデスクトップから直接、機能にアクセスできるprogram neighborhood対応のローカルマシン、および(2)リモートマシン上のprogram neighborhood対応デスクトップを実行することによって、機能にアクセス可能な非program neighborhood対応のローカルマシン(たとえば、従来のローカルマシン)で使用可能である。
program neighborhood対応のローカルマシンと、program neighborhoodサブシステム270との間の通信は、ICA仮想チャネルの上部に確立される専用仮想チャネルを通して行うことができる。他の実施態様では、通信は、XMLサービスを使用して行われる。これらの実施態様の1つでは、program neighborhood対応のローカルマシンは、XMLサブシステム、たとえば、以下に図6に関連して説明するXMLサービス516と通信し、リモートマシン30上にprogram neighborhoodの機能を提供する。
一実施態様では、program neighborhood対応のローカルマシンは、program neighborhoodサブシステム270によりリモートマシンと接続する。この実施態様では、ローカルマシン10は、要求をICAブラウザサブシステム260に送信し、ローカルマシン10が使用可能なアプリケーションを特定するために、リモートマシン30とのICA接続を確立する。ローカルマシン10は、次に、ユーザの信任状を取得するクライアント側ダイアログを実行する。信任状は、ICAブラウザサブシステム260によって受信され、program neighborhoodサブシステム270に送信される。一実施態様では、program neighborhoodサブシステム270は、信任状をユーザ管理サブシステムに送信して認証を求める。ユーザ管理サブシステムは、ユーザが属するアカウントのリストを表す一連の顕著な名称を返すことができる。program neighborhoodサブシステム270は、認証後、program neighborhoodの仮想チャネルを確立する。このチャネルは、アプリケーションのフィルタリングが完了するまで、開放状態を保つ。実施態様によっては、C項で説明する加速プログラム6120は、ローカルマシン10の要求に応じて、ローカルマシン10にも伝送される。
program neighborhoodサブシステム270は、次に、これらのアカウントに関連する共通アプリケーションサブシステム524に、program neighborhood情報を要求する。共通アプリケーションサブシステム524は、program neighborhood情報を持続ストア230から取得する。program neighborhood情報を受信後、program neighborhoodサブシステム270は、program neighborhood情報をフォーマットし、program neighborhood仮想チャネルを通して、この情報をローカルマシンに返す。その結果、部分ICA接続は閉鎖する。
program neighborhood対応のローカルマシンが、リモートマシンとの部分ICA接続を確立するもう1つの例では、ファーム38を選択するローカルマシン10のユーザを考慮する。ファーム38の選択によって、要求は、ローカルマシン10からICAブラウザサブシステム260に送信され、選択されたファーム38内のリモートマシン30の1つとのICA接続が確立される。ICAブラウザサブシステム260は、要求をprogram neighborhoodサブシステム270に送信し、program neighborhoodサブシステム270は、ファーム38内のリモートマシン30を選択する。リモートマシン30に関連するアドレス情報が特定され、ICAブラウザサブシステム260によって、ローカルマシン10に返される。ローカルマシン10は、次に、受信したアドレス情報に対応するリモートマシン30に接続することができる。
別の実施態様では、program neighborhood対応のローカルマシン10、ICA接続、その後、program neighborhood仮想チャネルが確立され、ICA接続が持続する限り開放状態を保つ。このprogram neighborhood仮想チャネルを通して、program neighborhoodサブシステム270は、program neighborhood情報の更新をローカルマシン10に強制する。ローカルマシン10に対する更新の強制は、本明細書で説明する加速技術によって加速することができる。更新を達成するため、program neighborhoodサブシステム270は、共通アプリケーションサブシステム524からのイベントに署名し、program neighborhoodサブシステム270が、発行済みのアプリケーションの変更を検出することを許可する。
図1Fを参照すると、ブロック図は、ローカルマシンが、ウェブサービスディレクトリのGUIの発行を介して使用可能な複数のアプリケーションプログラムを提供するためのシステムアーキテクチャのもう1つの実施態様を示す。システムは、ローカルマシン10および複数のリモートマシン30を備える。1つのリモートマシン30は、コンテンツサーバとして機能する。リモートマシン30’は、ウェブサーバの機能を提供する。リモートマシン30’’は、アプリケーションファイルへのアクセスを提供する機能を提供し、アプリケーションサーバまたはファイルサーバとして動作する。ローカルマシン10は、コンテンツをコンテンツサーバ30、ウェブサーバ30’、およびアプリケーションサーバ30’’から、ネットワーク155を通してダウンロードすることができる。一実施態様では、ローカルマシン10は、コンテンツ(たとえば、アプリケーション)をアプリケーションサーバ30’’から、クライアント−アプリケーションサーバ通信チャネル1150を通してダウンロードすることができる。
一実施態様では、ローカルマシン10上のウェブブラウザ11は、セキュアソケットレイヤー(SSL)サポートを使用して、コンテンツサーバ30および/またはウェブサーバ30’と通信する。SSLは、カリフォルニア州、マウンテンビューのNetscape Communication Corporationによって開発された保護プロトコルであり、現在、Internet Engineering Task Force(IETF)によって推奨されている規格である。あるいは、ウェブブラウザ11は、他のセキュリティプロトコルを使用して、コンテンツサーバ30および/またはウェブサーバ30’に接続することができ、こうしたプロトコルとしては、カリフォルニア州、ロスアルトスのTerisa Systemsによって開発されたセキュアハイパーテキスト転送プロトコル(SHTTP)、ワシントン州、レドモンドのMicrosoft Corporationによって開発されたプライベートコミュニケーションテクノロジー(PCT)、IETFによって推奨されるトランスポートレベルセキュリティ(TLS)規格が挙げられるが、これらだけに限らない。他の実施態様では、ウェブブラウザ11は、ハイパーテキスト転送プロトコル(HTTP)などの暗号化を行わない通信プロトコルを使用して、サーバ30と通信する。
さらに、ローカルマシン10は、クライアント−アプリケーションサーバ通信チャネル1150を通して、アプリケーションサーバ30’’との通信を確立および交換するために、アプリケーションクライアント13を含む。一実施態様では、アプリケーションクライアント13は、GUIアプリケーションである。実施態様によっては、アプリケーションクライアント13は、フロリダ州、フォートローダーデールのCitrix Systems,Inc.によって開発された独立計算アーキテクチャ(ICA)クライアントであり、以下ではICAクライアント13とも呼ばれる。アプリケーションクライアント13のその他の実施態様としては、ワシントン州、レドモンドのMicrosoft Corporationによって開発されたリモートディスプレープロトコル(RDP)クライアント、マルチメディアアプリケーション、eメール、Java(登録商標)、または.NETコードを実行可能なX−Windows(登録商標)クライアント13、クライアント側プレーヤー、インタープリタ、またはシミュレータが挙げられる。さらに、一実施態様では、アプリケーションサーバ30’上で実行されるアプリケーションの出力は、ICAクライアント13を介して、ローカルマシン10に表示することができる。実施態様によっては、アプリケーションクライアント13は、アプリケーションストリーミングクライアント552などのアプリケーションクライアントであり、図5に関連して詳細に説明されている。実施態様によっては、アプリケーションクライアント13は、クライアント10とサーバ30との間の通信を加速するため、本明細書に記載する実施態様の何れかによる加速プログラム6120を含む。
ローカルマシン10は、ウェブサービスディレクトリ160をサーチして、ウェブサービスを探す。一実施態様では、サーチは手動サーチである。あるいは、サーチは自動サーチである。ウェブサービスディレクトリ160は、ウェブサービスディレクトリ内のウェブサービスをサーチするために、白色および黄色ページなど、サービスに基づくビューも提供し得る。別の実施態様では、ウェブサービスディレクトリ160は、GUIアプリケーションの構造化サービス名称およびサービスの種類に基づく階層的なブラウジングをサポートする。一実施態様では、ウェブサービスディレクトリ160は、ディレクトリサーバなどのコンテンツサーバ30に関係なく、リモートマシン上で実行される。他の実施態様では、ウェブサービスディレクトリ160は複数のサーバ上で実行される。
実施態様によっては、コンテンツサーバ30は、ローカルマシン10が、ウェブサービスディレクトリ160内の情報または分析を提供することによって、この追加の分析または情報に基づいてウェブサービスを選択することを可能にする。ウェブサービスディレクトリ160がリストすることが可能なサービス情報の例としては、サービスを提供する事業体の名称、サービスのタイプ、サービスのテキスト記述、1つまたは複数のサービスアクセスポイント(SAP)、ネットワークのタイプ、使用する経路(たとえば、TCPまたはHTTPS)、およびサービス品質(QoS)情報が挙げられるが、これらだけに限らない。さらに、サービス情報は、クライアントデバイスのタイプ、またはユーザ(たとえば、職務)に特有でよい。したがって、サービスの選択は、上記の属性のうちの1つまたは複数でよい。
一実施態様では、サービスのタイプは、ローカルマシン10が、ウェブサービスにアクセスするために使用しなければならないプログラミングインターフェースを示す。たとえば、サービスのタイプは、ウェブサービス記述言語(WSDL)などのインターフェース記述言語によって符号化される。
サービスアクセスポイント、つまりSAPは、アプリケーションに一意のアドレスである。SAPは、コンピュータシステムが、ローカルマシン10、および各々のリモートマシン30において複数のアプリケーションをサポートすることを可能にする。たとえば、アプリケーションサーバ30’’は、電子メール(つまり、eメール)アプリケーション、ファイル転送アプリケーション、および/またはGUIアプリケーションをサポートし得る。一実施態様では、これらのアプリケーションは、アプリケーションサーバ30’’内で一意のSAPを有する。一実施態様では、SAPは、ウェブまたはインターネットアドレス(たとえば、ドメイン名システム(DNS)の名称、IP/ポート、または均一リソースロケータ(URL))である。したがって、一実施態様では、SAPは、ウェブサーバ30’のアドレスを、ウェブサーバ30’上に記憶されたアプリケーションのアドレスの一部として識別する。実施態様によっては、SAPは、発行サーバプラグイン165のアドレスを、以下に記載するとおり、ウェブサーバ30’上に記憶されているアドレスの一部として識別する。一実施態様では、SAPは、UDDIレジストリの「accessPoint」である。
ウェブサービスディレクトリ160内で発行する項目を作成するために、コンテンツサーバ30はウェブ発行ツール170を備える。一実施態様では、ウェブ発行ツール170はソフトウェアモジュールである。あるいは、ウェブ発行ツール170は、コンテンツサーバ30外、またはコンテンツサーバ30内に位置し得る別のサーバである。
一実施態様では、ウェブサーバ30’は、ウェブページをローカルマシン10に提供する。ウェブサーバ30’は、ウェブページをローカルマシン10に提供することが可能な任意のリモートマシン30でよい。別の実施態様では、ウェブサーバ30’は、企業内情報ポータルである(たとえば、企業イントラネット、または安全な企業間エクストラネット)。企業内ポータルは、アプリケーションを統合、個人化、または提供する企業ウェブサイトである。企業によっては、ポータルによって、従来のデスクトップソフトウェアは、ブラウザによる仮想職場へのアクセスに置き換えられた。実施態様によっては、アプライアンス1250は、ウェブページの提供を加速し、これは、本明細書に記載する加速技術の何れかを用いて加速される。他の実施態様では、加速プログラム6120は、ウェブページの提供を加速する。
ウェブサーバ30’は、グラフィカルユーザインターフェース(GUI)アプリケーションの発行を可能にする発行サーバプラグイン165も備える。より詳細には、発行サーバプラグイン165は、新しいウェブサービスエントリURLをGUIアプリケーションサービスに翻訳して、GUIがウェブサービスディレクトリ160を介してアクセスすることを可能にする。一実施態様では、発行サーバプラグイン165は、共通ゲートウェイインターフェース(CGI)スクリプトであり、これは、CGI規格に準拠するデータを受け取り、データを返すように設計されたプログラムである。プログラムは、C、Perl、Java(登録商標)、またはVisual Basicなど、任意のプログラミング言語で書くことができる。別の実施態様では、発行サーバプラグイン165は、Java(登録商標) Server Page(JSP)である。発行サーバプラグイン165を使用して、リモートGUIアプリケーションの発行を容易にすると、ローカルマシン10は、それによって、プログラミングインターフェースまたはウェブページを通さずに、CitrixのICAまたは MicrosoftのRDPなどの完全なGUIインターフェースを通してウェブサービスにアクセスすることができる。実施態様によっては、アプライアンス1250または加速プログラム6120は、クライアントに対するぜGUIの提供を加速し、これは、本明細書のC項に記載されている何れかの加速技術を使用して加速される。
アプリケーションサーバ30’’は、ローカルマシン10で使用可能な1つまたは複数のアプリケーションをホストする。こうしたアプリケーションの例としては、ともにワシントン州、レドモンドのMicrosoft Corporationが製造するMICROSOFT WORDなどのワード処理プログラム、およびMICROSOFT EXCELなどの表計算プログラム、財務報告プログラム、顧客登録プログラム、プログラム提供技術サポート情報、顧客データベースアプリケーション、またはアプリケーションセットマネジャーが挙げられる。
一実施態様では、ウェブ発行ツール170は、ウェブ発行ツール170が、持続大容量記憶装置225内のウェブサービスディレクトリ160で発行するアプリケーションに関する情報を記憶する。一実施態様では、この情報は、動的発行サーバプラグイン165のURLである。持続大容量記憶装置225は、磁気ディスクまたは磁気光学ドライブでよい。一実施態様では、持続大容量記憶装置225は、1つまたは複数のローカルサービスデータベース内の発行済みアプリケーションに関連するデータを記憶するデータベースサーバである。持続大容量記憶装置225は、あらゆるリモートマシン30の内部に位置するか、またはその外部に位置する構成要素でよい。
他の実施態様では、コンテンツサーバ30またはウェブサーバ30’は、ファーム38内のリモートマシン30と通信して、アプリケーションのリストを検索する。これらの実施態様の1つでは、コンテンツサーバ30またはウェブサーバ30’は、持続大容量記憶装置225ではなく、ファーム38と通信する。
次に、図2を参照すると、フロー図は、アプリケーションプログラムの実行方法を選択するために行われるステップの一実施態様を示す。簡潔に説明すると、ローカルマシン、ローカルマシンのユーザに関連する信任状は、ローカルマシンによる実行に使用可能なアプリケーションの一覧の要求とともに受信される(ステップ202)。ローカルマシンが使用可能な複数のアプリケーションプログラムの一覧は、受信された信任状に応答して提供される(ステップ204)。要求は、一覧のアプリケーションを実行するために受信される(ステップ206)。一覧のアプリケーションを実行するための予め決められた数の方法の1つが、ポリシーに応じて選択され、予め決められた数の方法は、一覧のアプリケーションのアプリケーションストリーミングの方法を含む(ステップ208)。
ローカルマシン、またはローカルマシンのユーザに関連する信任状は、ローカルマシンによる実行に使用可能なアプリケーションの一覧の要求とともに受信される(ステップ202)。一実施態様では、リモートマシンは、使用可能なアプリケーションの一覧の要求をローカルマシン10から、信任状とともに受信する。別の実施態様では、リモートマシン30上のXMLサービスは、要求および信任状を受信し、要求および信任状をリモートマシン30上の管理サービスに伝送する。
実施態様によっては、ウェブサーバとして機能するリモートマシン30は、ローカルマシン10から通信を受信し、その通信をリモートマシン30’に回送する。これらの実施態様の1つでは、ウェブサーバは、リモートマシン30’上のXMLサービスに通信を回送する。これらとは別の実施態様では、ウェブサーバは、ローカルマシン上に存在する。他の実施態様では、ローカルマシン10からの通信は、ウェブサーバによってリモートマシン30’に経路指定され、リモートマシン30は、ローカルマシン10のインターネットプロトコル(IP)アドレスに応じて選択される。
実施態様によっては、ローカルマシン10は、リモートマシン30上に存在するアプリケーションに対するアクセスを要求する。これらの実施態様の1つでは、ローカルマシン10は、リモートマシン30が、リモートマシン30上に存在するアプリケーションを実行することを要求する。これらとは別の実施態様では、ローカルマシン10は、アプリケーションを含む複数のアプリケーションファイルの検索を要求する。
実施態様によっては、ユーザは、リモートマシン30によってローカルマシン10に提示されたグラフィカルユーザインターフェースを介して、信任状をリモートマシン30に提供する。他の実施態様では、ウェブサーバの機能を有するリモートマシン30’’’は、グラフィカルユーザインターフェースをローカルマシン10に提供する。さらに他の実施態様では、リモートマシン30によってローカルマシン10に伝送される収集エージェントは、ローカルマシン10からの信任状を収集する。一実施態様では、信任状は、ユーザ名およびパスワードを意味する。別の実施態様では、信任状は、ユーザ名およびパスワードに限られず、ローカルマシン10のマシンID、オペレーティングシステムのタイプ、オペレーティングシステムに対するパッチの存在、インストールされたネットワークカードのMACアドレス、クライアントサーバ上の電子透かし、アクティブディレクトリ内のメンバーシップ、ウィルススキャナの存在、パーソナルファイアウォールの存在、HTTPヘッダ、ブラウザのタイプ、デバイスのタイプ、ネットワーク接続情報、たとえばインターネットプロトコルアドレスまたはアドレスの範囲、リモートマシン30のマシンID、時間帯を変更するための調節を含むアクセス要求の日時、並びに信任状の承認を含むが、これらだけに限らない。
実施態様によっては、ローカルマシンに関連する信任状は、ローカルマシンのユーザに関連する。これらの実施態様の1つでは、信任状は、ユーザが所有する情報である。これらとは別の実施態様では、信任状は、ユーザ認証情報である。他の実施態様では、ローカルマシンに関連する信任状は、ネットワークに関連する。これらの実施態様の1つでは、信任状は、ローカルマシンが接続し得るネットワークに関連する情報である。これらとは別の実施態様では、信任状は、ローカルマシンに関する情報を収集するネットワークに関連する情報である。さらに他の実施態様では、ローカルマシンに関連する信任状は、ローカルマシンの特性である。
ローカルマシンが使用可能な複数のアプリケーションプログラムの一覧は、受信された信任状に応じて提供される(ステップ204)。一実施態様では、ローカルマシン10のユーザは、アプリケーションを探す場所を知らなくても、またアプリケーションにリンクするために必要な技術情報がなくても、ネットワーク40内のリモートマシン30によってホストされるアプリケーションプログラムの可用性を把握することができる。これらの使用可能なアプリケーションプログラムは、ユーザの「program neighborhood」を構成する。ローカルマシンに対するProgram Neighborhoodを決定するためのシステムは、アプリケーションプログラム(以下、「Program Neighborhood」アプリケーションと呼ぶ)、アプリケーションプログラムの構成要素を記憶するためのメモリ、およびアプリケーションプログラムを実行するためのプロセッサを含む。Program Neighborhood(PN)アプリケーションは、以下で説明するように、ローカルマシン10のメモリ内、および/またはリモートマシン30上にインストールすることができる。
Program Neighborhoodアプリケーションに従って動作するリモートマシン30は、ファーム38内のリモートマシン30の各々から、アプリケーションに関連する情報を収集する。ホストされている各々のアプリケーションのアプリケーション関連情報は、たとえば、当該アプリケーションをホストするリモートマシンのアドレス、アプリケーションの名称、当該アプリケーションの使用を承認されるユーザまたはユーザグループ、および接続を確立して、アプリケーションを実行する前に、ローカルマシン10に要求される最低の能力を含む多様な情報でよい。たとえば、アプリケーションはストリームビデオデータの場合があり、したがって、要求される最低の能力は、ローカルマシンがビデオデータをサポートすることであり得る。その他の例は、ローカルマシンがオーディオデータをサポートするか、または暗号化データを処理する能力を有するという要件である。アプリケーション関連情報は、データベース内に記憶される。
ローカルマシン10が、ネットワーク40に接続する場合、ローカルマシン10のユーザは、ユーザ信任状を提供する。ユーザ信任状は、ローカルマシン10のユーザのユーザ名、ユーザのパスワード、ユーザが承認されるドメイン名を含み得る。あるいは、ユーザ信任状は、スマートカード、時間ベースのトークン、社会保障番号、ユーザのパスワード、個人識別(PIN)番号、対称キーもしくは楕円曲線暗証番号に基づくデジタル証明書、ユーザの生体認証特性、またはローカルマシン10のユーザの本人確認を取得して、認証に提出することが可能なその他の手段から取得することができる。ローカルマシン10に応答するリモートマシン30は、ユーザ信任状に基づいてユーザを認証することができる。ユーザ信任状は、Program Neighborhoodアプリケーションが実行される場所であれば、どの場所にも記憶することができる。ローカルマシン10がProgram Neighborhoodアプリケーションを実行する実施態様の場合、ユーザ信任状は、ローカルマシン10に記憶し得る。リモートマシン30がProgram Neighborhoodを実行する実施態様の場合、ユーザ信任状は、当該リモートマシン30に記憶することができる。
リモートマシン30は、ユーザ信任状およびアプリケーション関連情報から、ローカルマシン10のユーザが、リモートマシン30によってホストされているどのアプリケーションプログラムを使用することができるかを決定することもできる。リモートマシン30は、使用可能なアプリケーションプログラムをローカルマシン10に提示する情報を伝送する。このプロセスは、ローカルマシン10のユーザが、アプリケーションの接続を確立する必要性をなくす。さらに、リモートマシン30の管理者は、ローカルマシン10の複数のユーザ間におけるアプリケーションへのアクセスを制御することができる。
実施態様によっては、リモートマシン30によって行われるユーザ認証は、ローカルマシン10に提示される、ホストされている各々のアプリケーションプログラムの使用を承認するのに十分であるが、このようなアプリケーションは、別のリモートマシン30’に存在する場合がある。したがって、ローカルマシン10が、ホストされているアプリケーションの1つを開始する(つまり、実行を開始する)場合、ローカルマシン10によるユーザ信任状の追加の入力は、当該アプリケーションの使用を認証する必要はない場合がある。したがって、ユーザ信任状を1回入力すると、ユーザが、さらに手動のログオン認証プロセスを行わなくても、使用可能なアプリケーションを決定し、当該アプリケーションの開始を承認するのに役立つ場合がある。
ローカルマシン10またはリモートマシン30はどちらも、Program Neighborhoodアプリケーションを開始することができる。その結果は、ローカルマシン10、20のディスプレースクリーン12、22に表示される。グラフィカルウィンドウベースのインプリメンテーションの場合、結果は、Program Neighborhoodグラフィカルウィンドウに表示することができ、承認された各々のアプリケーションプログラムは、グラフィカルアイコンによってウィンドウ内に表現することができる。
一実施態様では、Program Neighborhoodアプリケーションは、ローカルマシン10が実行を承認しないアプリケーションプログラムをフィルタリングして除去し、承認された(つまり、使用可能な)プログラムのみを表示する。他の実施態様では、Program Neighborhoodアプリケーションは、承認されたアプリケーション、および承認されないアプリケーションを表示することができる。承認されないアプリケーションが、表示からフィルタリングされない場合、当該アプリケーションは使用できないことを示す通知を提供することができる。あるいは、Program Neighborhoodアプリケーションは、ローカルマシン10がどのアプリケーションを実行することを承認されているか、または承認されていないかを特定しなくても、リモートマシン30によってホストされるすべてのアプリケーションをローカルマシン10のユーザに報告することができる。承認は、ローカルマシン10が、これらのアプリケーションの1つを実行しようとする場合、後で決定することができる。
ローカルマシン10は、アプリケーション一覧をリモートマシン30に要求し得る。アプリケーション一覧は、ローカルマシン10のユーザが、発行されたすべてのアプリケーションの名称を閲覧することを可能にする。一実施態様では、ローカルマシン10のユーザは、当該ユーザが、アプリケーションを実行するための承認を持っているかどうかに関係なく、アプリケーションの名称を閲覧することができる。別の実施態様では、ユーザは、ユーザが、実行を承認されるアプリケーションの名称のみを閲覧することができる。
アプリケーション一覧に対する要求は、ローカルマシン10によって実行されている特定のプロセスに応じて、ICAブラウザサブシステム260、program neighborhoodサブシステム270、または共通アプリケーションサブシステム524に渡る。たとえば、ローカルマシン10が、Program Neighborhoodアプリケーションを実行している場合、アプリケーション一覧に対する要求は、リモートマシン30上のprogram neighborhoodサブシステム270に送られる。ローカルマシン10が、ウェブページを通して一覧の要求を提示する場合、この要求は、共通アクセスポイントサブシステム524に渡る。これらの実施態様では、共通アプリケーションサブシステム524は、ローカルマシン10が、アプリケーションを一覧にすることを望む場合、program neighborhoodサブシステム270、ICAブラウザサブシステム260、および共通アプリケーションサブシステムの最初のアクセスポイントとして使用される。実施態様によっては、ローカルマシン10が、ウェブページを通して一覧の要求を提示する場合、ウェブサーバをホストする中間のリモートマシン30が要求を受信し、その要求をリモートマシン30’に回送する。
共通アプリケーションサブシステム524は、一覧の要求を受信後、持続ストア230にすべてのアプリケーションのリストを問い合わせる。program neighborhoodサブシステム270、および共通アクセスポイント645のサブシステムから受信された要求の場合、このアプリケーションのリストは、ローカルマシン10のユーザの信任状に従ってフィルタリングされる(つまり、ユーザは、ユーザが承認されたアプリケーションのみを閲覧する)。
ローカルマシン10は、リモートマシンの一覧も要求することができる。リモートマシンの一覧は、ローカルマシン10のユーザが、ファーム38内のリモートマシンのリストを閲覧することを可能にする。一実施態様では、リモートマシンのリストは、当該リモートマシン上の特殊なリモートマシンサブシステムによって決定されるように、リモートマシンのタイプに従ってフィルタリングすることができる。
リモートマシンの一覧に対する要求は、ローカルマシン120によって実行されている特定のプロセスに応じて、ICAブラウザサブシステム260または共通アクセスポイントサブシステム645に渡る。たとえば、ローカルマシン120が、ウェブページを通してリモートマシンの一覧の要求を提示する場合、その要求は、共通アクセスポイントサブシステム645に渡る。これらの実施態様では、共通リモートマシンサブシステム300は、ICAブラウザサブシステム260および共通アクセスポイント645のサブシステムの最初のアクセスポイントとして役立つ。共通リモートマシンサブシステムは、リモートマシンの一覧の要求を受信すると、持続ストア230にすべてのリモートマシンのリストを問い合わせる。任意に、リモートマシンのリストは、リモートマシンのタイプに応じてフィルタリングされる。
図3Aは、ローカルマシン10が、この例ではワールドワイドウェブを介して、Program Neighborhoodアプリケーションの実行を開始するプロセスの別の実施態様を示すブロック図である。ローカルマシン10は、ウェブブラウザアプリケーション80、たとえばカリフォルニア州、マウテンビューのNetscape Communications,Inc.が製造するNETSCAPE NAVIGATOR、ワシントン州、レドモンドのMicrosoft Corporationが製造するMICROSOFT INTERNET EXPLORER、カリフォルニア州、マウテンビューのMozilla Foundationが製造するFIREFOX、ノルウェイ、オスロのOpera Software ASAが製造するOPERA、またはカリフォルニア州、クパチーノのApple Computerが製造するSAFARIを実行する。
ローカルマシン10は、ウェブブラウザ80を通して要求82を伝送し、リモートマシン30上に存在するHTMLページに対応する均一リソースロケータ(URL)アドレスにアクセスする。実施態様によっては、リモートマシン30によってローカルマシン10に84を返した最初のHTMLページは、ローカルマシン10を特定することを求める認証ページである。
さらに図3Aを参照すると、ローカルマシン10がリモートマシン30によって認証されると、リモートマシン30は、HTMLページ88を作成して、ローカルマシン10に伝送し、このHTMLページ88は、ローカルマシン10がアクセスするアプリケーションプログラムを表すグラフィカルアイコン57、57’が表示されるProgram Neighborhoodのウィンドウ58を含む。ローカルマシン10のユーザは、アイコン57をクリックすることによって、アイコン57により表現されるアプリケーションの実行を呼び出す。
実施態様によっては、リモートマシン30は、ローカルマシン10のユーザに代わってProgram Neighborhoodアプリケーションを実行する。これらの実施態様の1つでは、リモートマシン30は、ローカルマシン10とリモートマシン30’との間に存在する中間のリモートマシンである。
図3Bを参照すると、フロー図は、ウェブサービスディレクトリのGUIの発行を介して、ローカルマシンが使用可能な複数のアプリケーションプログラムを提供するために行われるステップの一実施態様を示す。ウェブ発行ツール170は、ウェブサービスの記述、および発行のためのアプリケーション(たとえば、GUIアプリケーション)のアクセス情報を受信する(ステップ300)。一実施態様では、ウェブサービスの記述は、上記のサービス情報を含む(たとえば、ウェブサービスを提供する企業名、サービスのタイプ、サービスのテキスト記述、およびSAP)。アクセス情報は、たとえば、発行済みアプリケーションの名称、伝送制御プロトコル(TCP)ブラウジングサーバのファームアドレス、およびMetaFrameサーバIPアドレスを含む。実施態様によっては、アクセス情報は、ネットワーク、セキュリティゲートウェイ、またはブリッジデバイスを横断するために使用するアドレス、および使用するチケットを指定する。
ウェブ発行ツール170は、次に、ウェブサービス(つまり、GUIアプリケーション)の発行を要求するサービス発行要求を構成する(ステップ305)。一実施態様では、サービス発行要求はSAPを含む。実施態様によっては、SAPは、ウェブサーバ30’および発行サーバプラグイン165のウェブアドレスを含むURLである。さらに、ウェブアドレスは、統一リソース識別子(URI)でよく、これは、ウェブ上のオブジェクトを意味する名称およびアドレスのタイプの総称である。URLは、一種のURIである。URIの一例は、発行サーバプラグイン165のためのウェブサーバ30’の名称(たとえば、「ウェブ−サーバ」)、およびCGIスクリプトの名称(たとえば、「動的構成要素」)である。
ウェブ発行ツール170は、持続大容量記憶装置225内のSAPに関連するSAPエントリを記憶する(ステップ310)。実施態様によっては、ウェブ発行ツール170は、発行済みアプリケーション情報(たとえば、ICA−published−app−info)をGUIアプリケーションとも関連付ける。さらに他の実施態様では、ウェブ発行ツール170は、コンテンツサーバ30が持続大容量記憶装置225内に記憶するSAPエントリを識別するために、サービス発行要求内のキーも含む。たとえば、キーは、「123456677」という値を有することができる。ウェブサーバ30’を識別するSAP、発行サーバプラグイン165のCGIスクリプトの名称、および上記のキーの一例は、「http://web−server/dynamic−component/?app=123456677」である。
上記のSAPに関連するSAPエントリの一例は、「キー=123456677、値=ICA−published−app−info」である。キーは、任意の長さでよい(たとえば、56ビットのキー、128ビットのキー)。一実施態様では、キーは暗号の乱数である。キーは、キーの所有者にアクセス権を提供することもある。キーとともに図示されているが、任意の手段を使用して、持続大容量記憶装置225内に記憶されたSAPエントリに、ある形態のセキュリティを提供することができる。
ウェブ発行ツール170は、ウェブサービスディレクトリ160内における発行のため、サービス発行要求をコンテンツサーバ30に提供する(ステップ315)。さらに、一実施態様では、コンテンツサーバ30は、SAPエントリを探す際に後で使用するため、特定のウェブサービスを要求するローカルマシン10にSAPのキーを伝送する。一実施態様では、サービス発行要求の発行は、ローカルマシン10のユーザがサービスにアクセスすることを可能にする。一実施態様では、GUIアプリケーションは、フロリダ州、フォートローダーデールのCitrix Systems,Inc.によって開発されたNFUSEを使用して、ウェブサービスディレクトリ160上で発行される。実施態様によっては、GUIアプリケーションの発行者は、やはりCitrix Systems,Inc.によって開発されたアプリケーションの開始および埋め込み(ALE)を使用して、ウェブサービスディレクトリ160上のGUIアプリケーションの発行をカスタマイズする。ALEは、HTMLページからGUIアプリケーションを開始し、アプリケーションをHTMLページ内に埋め込むことを可能にする。
ローカルマシン10は、次に、サービス名称をウェブサービスディレクトリ160に問い合わせる(ステップ320)。コンテンツサーバ30は、ローカルマシン10から問い合わせを受信し(ステップ325)、要求されたサービス名をウェブサービスディレクトリ160内で探す。別の実施態様では、ローカルマシン10のユーザは、ローカルマシン10のユーザが見つけようとする特定のサービス名を突き止めるまで、ウェブサービスディレクトリ160をナビゲートする。ローカルマシン10とともに図示されているが、任意のウェブサービスディレクトリのクライアント(たとえば、UDDIクライアントまたはLDAPブラウザ)は、発行済みウェブサービスを発見するために、ウェブサービスディレクトリ160に問い合わせ、ウェブサービスディレクトリ160をナビゲートすることができる。
受信した問い合わせに関連するSAPのロケーションでは、コンテンツサーバ30は、SAPをローカルマシン10に伝送する(ステップ330)。ローカルマシン10は、SAPを受信し(ステップ335)、発行サーバプラグイン165のアドレスをSAPから決定する。ローカルマシン10は、次に、GUIアプリケーションに対する要求をウェブサーバ30’に伝送する(ステップ340)。実施態様によっては、ローカルマシン10の要求は、ウェブブラウザ11からウェブサーバ30’に伝送されるHTTP要求である。他の実施態様では、ローカルマシン10上で実行されるアプリケーション(たとえば、汎用ディレクトリブラウザ、またはHTML UI)は、SAPをコンテンツサーバ30から受信し、SAPを引数としてウェブブラウザ11に提供する。ウェブブラウザ1は、次に、HTTP要求(GUIアプリケーションに対する)をウェブサーバ30’に自動的に伝送する。上記の例の線に従うと、ウェブサーバ30’へのアプリケーション要求の特定の例はhttp://web−server/dynamic−component/?app=123456677)である。
ウェブサーバ30’、特に発行サーバプラグイン165は、SAPに関連するアプリケーション要求を受信し(ステップ345)、その要求に関連するSAPエントリを決定する(ステップ350)。一実施態様では、発行サーバプラグイン165は、ローカルマシン10から要求を受信し、持続大容量記憶装置225内に記憶された(SAPエントリの一部として)当該要求に関連する発行済みアプリケーション情報を受信する。実施態様によっては、発行サーバプラグイン165は、ローカルマシン10がコンテンツサーバ30から受信したSAP(または、SAPの一部)を、持続大容量記憶装置225内に記憶された適切なサービスエントリ(たとえば、発行済みアプリケーション情報)にアクセスするためのキーとして使用する。
発行サーバプラグイン165は、次に、発行済みアプリケーション情報(たとえば、アプリケーションサーバ30’’のHTTPアドレス)を有するファイルまたはドキュメントを構成し(ステップ352)、このドキュメントをローカルマシン10に伝送する(ステップ355)。発行サーバプラグイン165は、ファイルが、アプリケーションクライアント13に適合する形式を有するように、ファイルを構成する。一実施態様では、ドキュメントは、多目的インターネットメール拡張仕様(MIME)、またはセキュアMIME(S/MIME)ドキュメントである。別の実施態様では、ドキュメントは、オブジェクトHTMLタグが埋め込まれたICAウェブクライアントを含むHTMLドキュメントである。さらに別の実施態様では、ドキュメントは、オブジェクトHTMLタグが埋め込まれたアプリケーションストリーミングクライアントを含むHTMLドキュメントである。
ウェブブラウザ11は、次に、ドキュメントを受信し、そのドキュメントを開こうとする。一実施態様では、アプリケーションクライアント13が、ローカルマシン10上にインストールされない場合、ローカルマシン10は、アプリケーションサーバ30’’と通信して、アプリケーションクライアント13をダウンロードしてインストールする。アプリケーションクライアント13をインストールした後、あるいは、アプリケーションクライアント13が、ローカルマシン10に既にインストールされている場合、ローカルマシン10は、アプリケーションクライアント13を開始して、ウェブサーバ30’から受信したドキュメントを閲覧する(ステップ360)。
アプリケーションクライアント13がインストールされ、ローカルマシン10上で実行されると、アプリケーションサーバ30’’は、次に、アプリケーションを実行し、アプリケーションをアプリケーションクライアント13上に表示する(ステップ365)。別の実施態様では、アプリケーションサーバ30’’は、アプリケーションを含む複数のアプリケーションファイルをアプリケーションクライアント13に伝送し、図7に関連して以下でさらに説明するように、ローカルマシン10上で実行される。別の実施態様では、ローカルマシン10は、ドキュメントを閲覧し(アプリケーションクライアント13が開始する前でも)、ドキュメント内の情報を使用して、GUIアプリケーションをアプリケーションサーバ30’’から取得する。この実施態様では、GUIアプリケーションのディスプレーは、アプリケーションクライアント30’’のインストールおよび実行を含む。さらに、ドキュメントの閲覧は、ローカルマシン10のユーザに対して透過的である。たとえば、ローカルマシン10は、ドキュメントをウェブサーバ30’から受信し、GUIアプリケーションをサーバ30’’に自動的に要求する前に、そのドキュメントを解釈する。
したがって、アプリケーションクライアント13は、発行済みアプリケーション、デスクトップ、デスクトップドキュメント、およびアプリケーションクライアント13によってサポートされる任意のその他のアプリケーションに対するサービスベースのアクセスを提供する。アプリケーションクライアント13がアクセスを提供することが可能なアプリケーションの例としては、特に、どれもワシントン州、レドモンドのMicrosoft Corporationによって開発されたWINDOWS(登録商標)デスクトップ、WINDOWS(登録商標)ドキュメント、たとえばMICROSOFT EXCEL、WORD、およびPOWERPOINT、カリフォルニア州、パロアルトのSun Microsystemsによって開発されたSUN SOLARISなどのUnix(登録商標)デスクトップ、並びにノースカロライナ州、ダラムのRed Hat,Inc.によって分配されるGNU/Linuxが挙げられるが、これらだけに限らない。
実施態様によっては、ローカルマシン10が使用可能な複数のアプリケーションプログラムの一覧は、ローカルマシンがアプリケーションにアクセスすることができるかどうか、どのようにアクセスすることができるかに関してポリシーエンジンによる決定に応じて提供される(ステップ204)。ポリシーエンジンは、決定する前に、ローカルマシンに関する情報を収集することができる。次に、図4Aを参照すると、コンピュータネットワークの一実施態様が示されており、このネットワークは、ローカルマシン10、収集エージェント404、ポリシーエンジン406、ポリシーデータベース408、ファーム38、およびアプリケーションサーバ30’を含む。一実施態様では、ポリシーエンジン406はリモートマシン30である。別の実施態様では、アプリケーションサーバ30’はリモートマシン30’である。図4Aに示されている実施態様には、1つのローカルマシン10、収集エージェント404、ポリシーエンジン406、ファーム38、およびアプリケーションサーバ30’のみが示されているが、システムは、これらの構成要素の何れかまたはそれぞれを複数提供することができると考えるべきである。
簡潔に説明すると、ローカルマシン10が、要求410をポリシーエンジン406に伝送して、アプリケーションにアクセスする場合、収集エージェント404は、ローカルマシン10と通信し、ローカルマシン10に関する情報を検索し、ローカルマシン情報412をポリシーエンジン406に伝送する。ポリシーエンジン406は、ポリシーデータベース408のポリシーを、受信した情報412に適用することによってアクセス制御を決定する。
より詳細には、ローカルマシン10は、リソースに対する要求410をポリシーエンジン406に伝送する。一実施態様では、ポリシーエンジン406は、アプリケーションサーバ30’上に存在する。別の実施態様では、ポリシーエンジン406はリモートマシン30である。さらに別の実施態様では、アプリケーションサーバ30’は、要求410をローカルマシン10から受信し、要求410をポリシーエンジン406に伝送する。さらに別の実施態様では、ローカルマシンは、リソースに対する要求410をリモートマシン30’’’に伝送し、リモートマシン30’’’は、要求410をポリシーエンジン406に伝送する。
ポリシーエンジン406は、要求を受信すると、収集エージェント404による情報の収集を開始する。収集エージェント404は、ローカルマシン10に関連する情報を収集し、情報412をポリシーエンジン406に伝送する。
実施態様によっては、収集エージェント404は、ネットワーク接続を通して情報412を収集し、伝送する。実施態様によっては、収集エージェント404は、バイトコードプログラミング言語JAVA(登録商標)で書かれたアプリケーションなどのバイトコードを含む。実施態様によっては、収集エージェント404は、少なくとも1つのスクリプトを含む。これらの実施態様では、収集エージェント404は、ローカルマシン10上の少なくとも1つのスクリプトを実行することによって、情報を収集する。実施態様によっては、収集エージェントは、ローカルマシン10上のアクティブXコントロールを含む。アクティブXコントロールは、コントロールのように見えて、コントロールのように動作することを可能にする一連のインターフェースをインプリメントする専用コンポーネントオブジェクトモデル(COM)である。
一実施態様では、ポリシーエンジン406は、収集エージェント404をローカルマシン10に伝送する。別の実施態様では、アプライアンス1250は、収集エージェントを記憶またはキャッシュし得る。次に、アプライアンス1250は、収集エージェントをローカルマシン10に伝送し得る。他の実施態様では、アプライアンス1250は、収集エージェント404の伝送を傍受し得る。さらに別の実施態様では、アプライアンス1250は、収集エージェントの提供を加速し得る。一実施態様では、ポリシーエンジン406は、収集エージェント404が、情報412をポリシーエンジン406に伝送した後、収集エージェント404の第2実行を要求する。この実施態様では、ポリシーエンジン406は、ローカルマシン10が特定の条件を満たすかどうかを決定するには、不十分な情報412を有する場合がある。他の実施態様では、ポリシーエンジン406は、受信した情報412に応じて、収集エージェント404の複数の実行を要求する。
実施態様によっては、ポリシーエンジン406は、インストラクションを収集エージェント404に伝送し、収集エージェント404が収集する情報のタイプを決定する。これらの実施態様では、システム管理者は、ポリシーエンジン406から収集エージェント404に伝送されるインストラクションを構成し得る。これは、収集される情報のタイプをさらに制御する。その結果、収集される情報のタイプがさらに制御されることによって、ポリシーエンジン406が行うことができるアクセス制御決定のタイプが拡張される。収集エージェント404は、情報412を収集し、情報412としては、ローカルマシン10のマシンID、オペレーティングシステムのタイプ、オペレーティングシステムに対するパッチの存在、インストールされたネットワークカードのMACアドレス、クライアントデバイス上の電子透かし、アクティブディレクトリ内のメンバーシップ、ウィルススキャナの存在、パーソナルファイアウォールの存在、HTTPヘッダ、ブラウザのタイプ、デバイスのタイプ、ネットワーク接続情報、たとえばインターネットプロトコルアドレスまたはアドレスの範囲、リモートマシン30のマシンID、時間帯を変更するための調節を含むアクセス要求の日時、並びに信任状の承認が挙げられるが、これらだけに限らない。実施態様によっては、収集エージェントは、アプリケーションが、加速プログラム6120を試用して、クライアント上で加速可能であるかどうかを決定するための情報を収集する。
実施態様によっては、デバイスタイプはパーソナルデジタルアシスタントである。他の実施態様では、デバイスタイプは携帯電話である。他の実施態様では、デバイスタイプはラップトップコンピュータである。他の実施態様では、デバイスタイプはデスクトップコンピュータである。他の実施態様では、デバイスタイプは、インターネットキオスクである。
実施態様によっては、電子透かしはデータの埋め込みを含む。実施態様によっては、透かしは、ファイルに関するソース情報を提供するため、ファイル内に挿入されるデータのパターンを含む。他の実施態様では、透かしは、不正な変更を検出するために、データハッシングファイルを含む。他の実施態様では、透かしは、ファイルに関する著作権情報を提供する。
実施態様によっては、ネットワーク接続情報は、帯域幅の能力に関連する。他の実施態様では、ネットワーク接続情報は、インターネットプロトコルアドレスに関連する。さらに他の実施態様では、ネットワーク接続情報は、インターネットプロトコルアドレスから構成される。一実施態様では、ネットワーク接続情報は、ローカルマシンが認証信任状を与えたログオンエージェントを識別するネットワーク区域を含む。
実施態様によっては、承認信任状は、ある数の認証情報タイプを含み、こうした情報としては、ユーザ名、クライアント名、クライアントのアドレス、パスワード、PIN、音声サンプル、1回限りのパスコード、生体認証データ、デジタル証明、チケットなど、およびこれらの組合せが挙げられるが、これらだけに限らない。収集された情報412を受信後、ポリシーエンジン406は、受信した情報412に基づいてアクセス制御を決定する。
次に、図4Bを参照すると、ブロック図は、条件データベース422およびログオンエージェント424を有する第1構成要素420と、ポリシーデータベース432を有する第2構成要素430とを含むポリシーエンジン406の一実施態様を示す。第1構成要素420は、条件データベース422からの条件を、ローカルマシン10に関して受信した情報に適用し、受信した情報が条件を満たしているかどうかを決定する。
実施態様によっては、条件は、ローカルマシン10が、当該条件を満たすために特定のオペレーティングシステムを実行することを要求し得る。実施態様によっては、条件は、当該条件を満たすために、特定のオペレーティングシステムのパッチを実行することを要求し得る。さらに他の実施態様では、条件は、ローカルマシン10が、当該条件を満たすために、インストールされた各々のネットワークカードのMACアドレスを提供することを要求し得る。実施態様によっては、条件は、ローカルマシン10が、当該条件を満たすために、特定のアクティブディレクトリにおけるメンバーシップを表示するように要求し得る。別の実施態様では、条件は、ローカルマシン10が、当該条件を満たすために、ウィルススキャナを実行するように要求し得る。他の実施態様では、条件は、ローカルマシン10が、当該条件を満たすために、パーソナルファイアウォールを実行することを要求し得る。実施態様によっては、条件は、ローカルマシン10が、当該条件を満たすために、特定のデバイスタイプを構成することを要求し得る。他の実施態様では、条件は、ローカルマシン10が、当該条件を満たすために、特定のタイプのネットワーク接続を確立することを要求し得る。
受信した情報が条件を満たしている場合、第1構成要素420は、当該条件の識別子をデータセット426に記憶する。一実施態様では、受信した情報は、当該情報が条件を真にする場合、受信した情報は条件を満たしている。たとえば、ある条件は、特定のオペレーティングシステムがインストールされることを要求する場合がある。ローカルマシン10が、当該オペレーティングシステムを有する場合、条件は真であり、満たされる。別の実施態様では、受信した情報は、当該情報が条件を偽にする場合、条件を満たしている。たとえばある条件は、スパイウェアがローカルマシン10上に存在するかどうかという問題に対処する場合がある。ローカルマシン10がスパイウェアを含まない場合、その条件は偽であり、満たされる。
実施態様によっては、ログオンエージェント424は、ポリシーエンジン406の外部に存在する。他の実施態様では、ログオンエージェント424は、ポリシーエンジン406上に存在する。一実施態様では、第1構成要素420は、ローカルマシン10に関する情報収集を開始するログオンエージェント424を含む。実施態様によっては、ログオンエージェント424は、データストアをさらに含む。これらの実施態様では、データストアは、収集エージェントが情報を収集し得る条件を含む。このデータストアは、条件データベース422とは異なる。
実施態様によっては、ログオンエージェント424は、収集エージェント404を実行することによって、情報収集を開始する。他の実施態様では、ログオンエージェント424は、収集エージェント404をローカルマシン10に伝送し、ローカルマシン10上で実行することによって、情報収集を開始する。さらに他の実施態様では、ログオンエージェント424は、情報412を受信後に、追加の情報収集を開始する。一実施態様では、ログオンエージェント424は、情報412も受信する。この実施態様では、ログオンエージェント424は、受信した情報412に基づいて、データセット426を生成する。実施態様によっては、ログオンエージェント424は、データベース422からの条件を、収集エージェント404から受信した情報に適用することによって、データセット426を生成する。
別の実施態様では、第1構成要素420は、複数のログオンエージェント424を含む。この実施態様では、複数のログオンエージェント424の少なくとも1つは、ローカルマシン10がリソース要求を伝送した伝送元の各々のネットワークドメインに存在する。この実施態様では、ローカルマシン10は、リソース要求を特定のログオンエージェント424に伝送する。実施態様によっては、ログオンエージェント424は、ポリシーエンジン406に対し、ローカルマシン10がログオンエージェント424にアクセスしたアクセス元のネットワークドメインを伝送する。一実施態様では、ローカルマシン10がログオンエージェント424にアクセスするアクセス元のネットワークドメインは、ローカルマシン10のネットワーク区域と呼ばれる。
条件データベース422は、第1構成要素420が、受信した除法に適用されるという条件を記憶する。ポリシーデータベース432は、第2構成要素430が、受信したデータセット426に適用されるというポリシーを記憶する。実施態様によっては、条件データベース422、およびポリシーデータベース432は、ODBCに準拠するデータベース内にデータを記憶する。たとえば、条件データベース422、およびポリシーデータベース432は、カリフォルニア州、レッドウッドショアのOracle Corporationが製造するORACLEデータベースとして提供され得る。他の実施態様では、条件データベース422、およびポリシーデータベース432は、ワシントン州、レドモンドのMicrosoft Corporationが製造するMicrosoft ACCESSデータベース、またはMicrosoft SQLサーバデータベースでよい。
第1構成要素420が、受信した情報を、条件データベース422内の各々の条件に適用した後、第1構成要素は、データセット426を第2構成要素430に伝送する。一実施態様では、第1構成要素420は、データセット426のみを第2構成要素430に伝送する。したがって、この実施態様では、第2構成要素430は情報412を受信せず、満たされた条件の識別子のみを受信する。第2構成要素430は、データセット426を受信し、データセット426内で識別された条件に基づいて、ポリシーデータベース432のポリシーを適用することによって、アクセス制御を決定する。
一実施態様では、ポリシーデータベース432は、受信した情報412に適用されたポリシーを記憶する。一実施態様では、ポリシーデータベース432内に記憶されるポリシーは、システム管理者によって少なくとも部分的に指定される。別の実施態様では、ユーザは、ポリシーデータベース432内に記憶されるポリシーの少なくともいくつかを指定する。ユーザが指定する1つまたは複数のポリシーは、選択に応じて記憶される。ポリシーデータベース432は、揮発性または不揮発性メモリ内に記憶されるか、たとえば複数のサーバを通して分散される。
一実施態様では、ポリシーは、1つまたは複数の条件が満たされた場合にのみ、リソースにアクセスすることを可能にする。別の実施態様では、ポリシーは、リソースに対するアクセスを可能にするが、ローカルマシン10に対するリソースの伝送を傍受する。別のポリシーは、アクセスを要求するローカルマシン10が、セキュアネットワーク内にあることを条件として、フックすることができる。実施態様によっては、リソースはアプリケーションプログラムであり、ローカルマシン10は、アプリケーションプログラムの拡張を要求している。これらの実施態様の1つでは、ポリシーは、ローカルマシン10上におけるアプリケーションプログラムの実行を可能にし得る。これらとは別の実施態様では、ポリシーは、ローカルマシン10が、アプリケーションプログラムを含むファイルのストリームを受信することを可能にし得る。この実施態様では、ファイルのストリームは、隔離環境内に記憶されて実行される。これらとはさらに別の実施態様では、ポリシーは、アプリケーションサーバなどのリモートマシン上で、アプリケーションプログラムの実行のみを可能にし、アプリケーション出力データをローカルマシン10に伝送するように、リモートマシンに要求する。
次に、図4Cを参照すると、フロー図は、ローカルマシン10に関して受信した情報に基づいて、アクセス制御を決定するために、ポリシーエンジン406によって行われるステップの一実施態様を示す。ポリシーエンジン406は、ローカルマシン10に関して収集された情報を受信後(ステップ450)、当該情報に基づいてデータセットを生成する(ステップ452)。データセット426は、受信された情報412によって満たされる各々の条件の識別子を含む。ポリシーエンジン406は、データセット426内で識別された各々の条件にポリシーを適用する。アプリケーションは、ローカルマシン10がアクセスし得るリソースの一覧を生成する(ステップ454)。ポリシーエンジン406は、次に、その一覧をローカルマシン10に提示する。実施態様によっては、ポリシーエンジン406は、一覧をローカルマシンに提示するために使用されるハイパーテキストマークアップ言語(HTML)ドキュメントを生成する。
図4Dを参照すると、ネットワークの一実施態様が示されており、これは、ローカルマシン10、収集エージェント404、ポリシーエンジン406、ポリシーデータベース408、条件データベース410、ローカルマシン20、セッションサーバ420、記憶されたアプリケーションデータベース422、リモートマシン30’、第1データベース428、リモートマシン30’’、および第2データベースを備える。簡潔に説明すると、ローカルマシン10が、アプリケーションプログラムにアクセスする要求412をアクセス制御サーバ406に伝送する時、収集エージェント404は、ローカルマシン10と通信し、ローカルマシン10に関する情報を検索し、ローカルマシン情報414をポリシーエンジン406に伝送する。ポリシーエンジン406は、図4Aおよび図4Bに関して上記で説明したように、アクセス制御を決定する。ローカルマシン10は、ローカルマシン10に関連する、使用可能なアプリケーションの一覧を受信する。
実施態様によっては、セッションサーバ420は、ローカルマシン10と、ローカルマシン10に関連する複数のアプリケーションセッションとの間の接続を確立する。他の実施態様では、ポリシーエンジン406は、ローカルマシン10が、アプリケーションを含む複数のアプリケーションファイルを検索し、アプリケーションプログラムをローカルに実行する承認を有すると決定する。実施態様によっては、ポリシーエンジン406は、加速プログラム6120をローカルマシン10に伝送することによって、アプリケーションファイルの提供を加速するかどうかを決定する。これらの実施態様の1つでは、リモートマシン30’は、アプリケーションセッションのデータ、およびアプリケーションプログラムを含む複数のアプリケーションファイルを記憶する。これらとは別の実施態様では、ローカルマシン10は、アプリケーションセッションのデータと、アプリケーションプログラムを含むアプリケーションファイルとを記憶するリモートマシン30’とのアプリケーションストリーミングセッションを確立する。実施態様によっては、ポリシーエンジン406は、加速プログラム6120をローカルマシン10に伝送することによって、ストリーミングセッションの提供を加速するかどうかを決定する。実施態様によっては、ポリシーエンジン406は、加速プログラム6120をローカルマシン10に伝送することによって、データファイルの提供を加速するかどうかを決定する。
次に、図4Eを参照すると、フロー図は、ローカルマシン10がアプリケーションセッションにアクセスするために、セッションサーバ420が行うステップの一実施態様を示す。セッションサーバ420は、ポリシーエンジン406が作成したアクセス制御決定を含むポリシーエンジン406から、ローカルマシン10に関する情報を受信する(ステップ480)。セッションサーバ420は、関連するアプリケーションの一覧を生成する(ステップ482)。セッションサーバ420は、ローカルマシン10を関連するアプリケーションに接続し得る(ステップ484)。一実施態様では、情報は、ローカルマシン情報414も含む。別の実施態様では、情報は、アプリケーションプログラムをローカルに実行するための承認を含む。
セッションサーバ420は、関連するアプリケーションの一覧を生成する(ステップ482)。実施態様によっては、ポリシーエンジン406は、既にローカルマシン10に関連付けられている複数のアプリケーションセッションを識別する。他の実施態様では、セッションサーバ420は、ローカルマシン10に関連する記憶されたアプリケーションセッションを識別する。これらの実施態様のいくつかでは、セッションサーバ420は、情報をポリシーエンジン406から受信後、記憶されたアプリケーションセッションを自動的に識別する。一実施態様では、記憶されたアプリケーションデータベース422は、セッションサーバ420上に存在する。別の実施態様では、記憶されたアプリケーションデータベース422は、ポリシーエンジン406上に存在する。
記憶されたアプリケーションデータベース422は、アプリケーションセッションを実行するか、またはアプリケーションセッションデータ、およびアプリケーションプログラムを含むアプリケーションファイルに対するアクセスを提供するファーム38内の複数のリモートマシンに関連するデータを含む。実施態様によっては、ローカルマシン10に関連するアプリケーションセッションを識別するには、1つまたは複数のリモートマシンに関連する記憶データを調査する必要がある。これらの実施態様のいくつかでは、セッションストア420は、1つまたは複数のリモートマシンに関連する記憶データを調査する。これらの実施態様の他の実施態様では、ポリシーエンジン406は、1つまたは複数のリモートマシンに関連する記憶データを調査する。実施態様によっては、第1アプリケーションセッションは、リモートマシン30’上で動作し、第2アプリケーションセッションは、リモートマシン30’’上で動作する。他の実施態様では、すべてのアプリケーションセッションは、ファーム38内の単一リモートマシン30上で動作する。
セッションサーバ420は、ユーザが開始したアプリケーションセッションに関連する情報を含む。セッションサーバは、揮発性または不揮発性メモリ内に記憶するか、あるいは、たとえば、複数のサーバに分散させることができる。表1は、具体的なセッションサーバ420の一部分に含まれるデータを示す。
Figure 2009536377
Figure 2009536377
表1の具体的なセッションサーバ420は、各々のアプリケーションセッションを、アプリケーションセッションを開始したユーザと関連付けるデータ、該当する場合、ユーザが、現在リモートマシン30’に接続されている接続元のクライアントコンピュータ10または20の識別表示、およびクライアントコンピュータ10または20のIPアドレスを含む。具体的なセッションサーバ420は、各々のアプリケーションセッションの状態をも含む。アプリケーションセッションの状態は、たとえば、「アクティブ」(ユーザが、アプリケーションセッションに接続されていることを意味する)、または「切断」(ユーザが、アプリケーションセッションに接続されていないことを意味する)でよい。代わりの実施態様では、アプリケーションセッションの状態は、「実行−切断」(ユーザはアプリケーションセッションから切断されているが、アプリケーションセッション内のアプリケーションは、未だ実行されていることを意味する)、あるいは「インストール−切断」(ユーザは切断されており、アプリケーションセッション内のアプリケーションは未だ実行されていないが、切断直前の動作状態は記憶されたことを意味する)に設定してもよい。セッションサーバ420は、各々のアプリケーションセッション内で実行されているアプリケーション116を示す情報、およびサーバ上の各々のアプリケーションのプロセスを示すデータをさらに記憶する。リモートマシン30’が、ファーム38の一部である実施態様の場合、セッションサーバ420は、動的ストアの少なくとも一部であり、ファーム38内のどのリモートマシン30上で、各々のアプリケーションが実行されているか/実行されていたかを示す表1の最後の2桁のデータ、および当該リモートマシン30のIPアドレスも含む。代わりの実施態様では、セッションサーバ420は、各々のアプリケーションセッション内の各々のアプリケーションの状態指標を含む。
たとえば、表1の例では、3つのアプリケーションセッション、アプリケーションセッション1、アプリケーションセッション2、およびアプリケーションセッション3が存在する。アプリケーションセッション1は、端末1を現在使用しているユーザ1に関連する。端末1のIPアドレスは、152.16.2.50である。アプリケーションセッション1の状態はアクティブであり、アプリケーションセッション1では、ワード処理プログラムが実行している。ワード処理プログラムは、サーバA上でプロセス番号1として実行している。サーバAのIPアドレスは、152.16.2.55である。表1のアプリケーションセッション2は、切断されたアプリケーションセッション118の一例である。アプリケーションセッション2はユーザ2に関連するが、アプリケーションセッション2は、ローカルマシン10にまたは20に接続していない。アプリケーションセッション2は、サーバA上のIPアドレス152.16.2.55で、プロセス番号3として実行しているデータベースプログラムを含む。アプリケーションセッション3は、ユーザが、別のリモートマシン30上で動作しているアプリケーションセッションと、どのように相互作用することが可能かの一例である。アプリケーションセッション3は、アプリケーションセッション1と同様、ユーザ1に関連している。アプリケーションセッション3は、サーバBのIPアドレス152.16.2.56で、プロセス番号2として実行している表計算プログラムを含み、アプリケーションセッション1に含まれるアプリケーションセッションは、サーバA上で実行している。
別の例では、ユーザは、サーバAなど、リモートマシン30’上で実行しているアプリケーションセッションを通して、第1アプリケーションプログラムにアクセスし、アプリケーションストリーミングセッション全体で、サーバBなどの第2リモートマシン30’’と通信し、第2リモートマシン30’’からアプリケーションプログラムを検索してローカルに実行する。ローカルマシン10のユーザは、第2アプリケーションプログラムをローカルに実行する承認を既に取得しているが、第1アプリケーションプログラムの実行前提条件を満たしていない場合がある。
一実施態様では、セッションサーバ420は、ローカルマシン10に関連するアプリケーションセッションを切断するための切断要求を受信し、要求に応じてアプリケーションセッションを切断するように構成される。セッションサーバ420は、ローカルマシン10がアプリケーションセッションから切断された後に、引き続きアプリケーションセッションを実行する。この実施態様では、セッションサーバ420は、記憶されたアプリケーションデータベース422にアクセスし、切断された各々のアプリケーションセッションに関連するデータにアクセスし、切断された各々のアプリケーションセッションに関連するデータ記録を更新し、その結果、記録は、ローカルマシン10に関連するアプリケーションセッションが切断されていることを指示する。
ネットワークに接続するローカルマシンに関連する認証情報を受信後、セッションサーバ420は、ローカルマシンのユーザに関連する任意のアクティブなアプリケーションセッションであって、認証情報が、たとえばローカルマシン20に関連する場合、ローカルマシン10などの異なるローカルマシンに接続するアプリケーションセッションを識別するために、記憶されたアプリケーションデータベース422を調査する。一実施態様では、セッションサーバ420が、任意のこうしたアプリケーションセッションを識別する場合、セッションサーバ420は、1つまたは複数のアプリケーションセッションをローカルマシン10から自動的に切断し、1つまたは複数のアプリケーションセッションを現在のローカルマシン20に接続する。実施態様によっては、受信した認証情報は、ローカルマシン10が再接続し得るアプリケーションセッションを制限するであろう。他の実施態様では、受信した認証情報は、ローカルマシン10に対する認証が拒絶されたかもしれない場合、ローカルマシン20上のアプリケーションプログラムの実行を承認する。これらの実施態様の1つでは、セッションサーバ420は、アプリケーションプログラムを検索して、ローカルに実行するために、ローカルマシンにアクセス情報を提供し得る。
一覧のアプリケーションを実行する要求が受信される(ステップ206)。一実施態様では、ローカルマシン10のユーザは、使用可能なアプリケーションの受信した一覧から実行するアプリケーションを選択する。別の実施態様では、ユーザは、受信した一覧に関係なく実行するアプリケーションを選択する。実施態様によっては、ユーザは、クライアントエージェントによって、ローカルマシン10上に提示されるアプリケーションのグラフィカル表現を選択することによって、実行されるアプリケーションを選択する。他の実施態様では、ユーザは、ウェブサーバ、または他のリモートマシン30’’’上でユーザに提示されるアプリケーションのグラフィカル表現を選択することによって、実行されるアプリケーションを選択する。実施態様によっては、アプライアンス1250、または加速プログラム6120は、グラフィカル表現の提供を加速する。実施態様によっては、アプライアンス1250は、グラフィカル表現をキャッシングまたは記憶する。実施態様によっては、アプライアンスは、関連するあらゆるアプリケーション、または関連するアプリケーションの一部をキャッシングまたは記憶し得る。
さらに他の実施態様では、ユーザは、アクセスファイルを要求する。これらの実施態様の1つでは、アプリケーションの実行には、ファイルに対するアクセスをユーザに提供する必要がある。これらとは別の実施態様では、アプリケーションは、アクセスするファイルの選択後に実行されるように、自動的に選択される。これらとはさらに別の実施態様では、ファイルに対するアクセスを要求する前に、アプリケーションは、ファイルのタイプに関連付けられ、要求されたファイルに関連するファイルのタイプを識別した後、自動的にアプリケーションを選択することが可能になる。実施態様によっては、アプライアンス1250、または加速プログラム6120は、1つまたは複数のファイルの提供を加速するために使用し得る。実施態様によっては、アプライアンス1250は、いくつかまたはすべてのファイルをキャッシングまたは記憶し得る。
一実施態様では、一覧のアプリケーションは、複数のアプリケーションファイルを含む。実施態様によっては、複数のアプリケーションファイルは、リモートマシン30’上に存在する。他の実施態様では、複数のアプリケーションファイルは、別個のファイルサーバ、またはリモートマシン30’’上に存在する。さらに他の実施態様では、複数のアプリケーションファイルは、ローカルマシン10に伝送し得る。さらに他の実施態様では、複数のアプリケーションファイル内のファイルは、複数のアプリケーションファイル内の第2ファイルをローカルマシン10に伝送する前に実行することができる。実施態様によっては、アプライアンス1250、または加速プログラム6120は、1つまたは複数のアプリケーションファイルの提供を加速するために使用し得る。
実施態様によっては、リモートマシン30は、一覧のアプリケーションに関する情報をリモートマシン30’から検索する。これらの実施態様の1つでは、リモートマシン30は、複数のアプリケーションファイルをホストするリモートマシン30’’の識別表示を検索する。これらとは別の実施態様では、リモートマシン30は、複数のアプリケーションファイルのロケーションの識別表示を受信し、この識別表示は、汎用命名規則(UNC)に従う。これらとはさらに別の実施態様では、識別表示は、ネットワークロケーション、およびアプリケーションストリーミングプロトコルのソケットを含む。
一実施態様では、リモートマシン30は、一覧のアプリケーションに関する情報を含むファイルを検索する。ファイルは、一覧のアプリケーションをホストするサーバのロケーションの識別表示を含み得る。ファイルは、一覧のアプリケーションの複数のバージョンの識別表示を含み得る。ファイルは、一覧のアプリケーションを含む複数のアプリケーションファイルの一覧を含み得る。ファイルは、一覧のアプリケーションを含む複数のアプリケーションファイルを含む圧縮ファイルの識別表示を含み得る。ファイルは、一覧のアプリケーションを実行するマシンによって満たされる前提条件の識別表示を含み得る。ファイルは、一覧のアプリケーションに関連するデータファイルの一覧を含み得る。ファイルは、一覧のアプリケーションを実行するマシン上で実行されるスクリプトの一覧を含み得る。ファイルは、一覧のアプリケーションに関連するレジストリデータの一覧を含み得る。ファイルは、一覧のアプリケーションが隔離環境内で実行される一実施態様で使用される規則の一覧を含み得る。一実施態様では、ファイルは、「マニフェスト」ファイルと呼ばれる場合がある。ファイルが含み得る情報について、図21に関連して以下でさらに詳細に説明する。
実施態様によっては、リモートマシン30は、ローカルマシン10の識別された特性にポリシーを適用する。これらの実施態様の1つでは、リモートマシン30は、識別された特性に応じて実行される一覧のアプリケーションのバージョンを識別する。これらとは別の実施態様では、リモートマシン30は、ローカルマシン10の特性に適合するあるバージョンの一覧のアプリケーションを実行することを決定する。これらとはさらに別の実施態様では、リモートマシン30は、ローカルマシン10を実行しているオペレーティングシステムに適合するあるバージョンの一覧のアプリケーションを実行することを決定する。これらとはさらに別の実施態様では、リモートマシン30は、ローカルマシン10上のオペレーティングシステムのリビジョンレベルに適合するあるバージョンの一覧を実行することを決定する。これらの実施態様の1つでは、リモートマシン30は、ローカルマシン10上のオペレーティングシステムが指定する言語に適合するあるバージョンの一覧を実行することを決定する。
一覧のアプリケーションを実行するための予め決められた数の1つの方法は、ポリシーに応じて選択され、予め決められた数の方法は、一覧のアプリケーションのアプリケーションストリーミングの方法を含む(ステップ208)。一実施態様では、選択は、ローカルマシン10に関連して受信した信任状に対するポリシーのアプリケーションに応じて行われる。実施態様によっては、選択は、図4A、図4B、および図4Cに関して上記で説明したポリシーエンジン406などのポリシーエンジンによって行われる。他の実施態様では、一覧のアプリケーションを実行するための信任状および要求を受信するリモートマシン30は、ポリシーエンジン406をさらに含む。
一実施態様では、予め決められた数の方法は、リモートマシン30’上で一覧のアプリケーションを実行するための方法を含む。別の実施態様では、予め決められた数の方法は、ローカルマシン10上で一覧のアプリケーションを実行するための方法を含む。さらに他の実施態様では、予め決められた数の方法は、第2リモートマシン30’上で一覧のアプリケーションを実行するための方法を含む。
実施態様によっては、予め決められた数の方法は、アプリケーションストリーミングセッション全体で、一覧のアプリケーションをローカルマシン10に提供するための方法を含む。これらの実施態様の1つでは、ローカルマシン10は、リモートマシン30’との接続を開始し、伝送されたデータパケットのストリームをリモートマシン30’から受信することが可能なストリーミングサービスエージェントを含む。
データパケットのストリームは、一覧のアプリケーションを有するアプリケーションファイルを含み得る。実施態様によっては、アプリケーションファイルは、アプリケーションプログラムに関連するデータファイルを含む。他の実施態様では、アプリケーションファイルは、アプリケーションプログラムの実行に必要な実行可能ファイルを含む。さらに他の実施態様では、アプリケーションファイルは、ファイルに関する情報、たとえばロケーション、互換性要件、構成データ、レジストリデータ、隔離環境で使用するための実行スクリプト規則の識別表示、または承認要件を含むメタデータを含む。一実施態様では、データパケットのストリームは、TCP/IPパケットのペイロードなどのトランスポート層接続を介して伝送される。
実施態様によっては、ストリーミングされたアプリケーションは、ストリーミングされたアプリケーションを含む複数のアプリケーションファイルの各々のアプリケーションファイルの伝送前に実行される。これらの実施態様の1つでは、ストリーミングされたアプリケーションの実行は、ローカルマシン10が、複数のアプリケーションの中の1つのアプリケーションファイルを受信すると開始する。これらとは別の実施態様では、ストリーミングされたアプリケーションの実行は、ローカルマシン10が、複数のアプリケーションファイルの中の実行可能なアプリケーションファイルを受信すると開始する。これらとはさらに別の実施態様では、ローカルマシン10は、複数のアプリケーションファイルの中の受信された第1のアプリケーションファイルを実行し、受信された第1のアプリケーションファイルは、複数のアプリケーションファイルの中の第2アプリケーションファイルにアクセスすることを要求する。
一実施態様では、ストリーミングされたアプリケーションは、ローカルマシン10上に永続的に存在するのではなく、ローカルマシン10上で実行される。この実施態様では、ストリーミングされたアプリケーションは、ローカルマシン10上で実行することができ、ストリーミングされたアプリケーションが終了すると、ローカルマシン10から除去される。別の実施態様では、ストリーミングされたアプリケーションは、各々のアプリケーションファイルの事前に展開されたコピーが、ローカルマシン10上に記憶された後、ローカルマシン10上で実行される。さらに別の実施態様では、ストリーミングされたアプリケーションは、各々のアプリケーションファイルのコピーがローカルマシン上の隔離環境で記憶された後に実行される。さらに別の実施態様では、ストリーミングされたアプリケーションは、各々のアプリケーションファイルのコピーが、ローカルマシン10上のキャッシュ内に記憶された後、ローカルマシン10上で実行される。
一実施態様では、アプリケーションをローカルマシン10にストリーミングする方法は、ローカルマシン10が、ストリーミングされたアプリケーションファイルを受信し得るという決定に応じて、予め決められた数の方法から選択される。別の実施態様では、アプリケーションをローカルマシン10にストリーミングする方法は、ローカルマシン10が、ストリーミングされたアプリケーションファイルをローカルに実行する権限を有するという決定に応じて、予め決められた数の方法から選択される。
他の実施態様では、予め決められた数の方法は、アプリケーション出力データをローカルマシン10に提供する方法を含み、アプリケーション出力データは、リモートマシン30上での一覧のアプリケーションの実行から生成される。これらの実施態様の1つでは、リモートマシン30は、一覧のアプリケーションの実行に対する要求を受信するリモートマシン30である。これらとは別の実施態様では、リモートマシン30は、ファイルサーバまたはアプリケーションサーバなどの第2リモートマシン30’である。実施態様によっては、一覧のアプリケーションは、一覧のアプリケーションを実行するリモートマシン30’上に存在する。他の実施態様では、一覧のアプリケーションを実行するリモートマシン30’は、アプリケーションストリーミングセッション全体で、第2リモートマシン30’からの一覧のアプリケーションを最初に受信する。これらの実施態様の1つでは、リモートマシン30’は、第2リモートマシン30’との接続を開始し、伝送されたデータのストリームを第2リモート30’から受信することが可能なストリーミングサービスエージェントを含む。これらとは別の実施態様では、第2リモートマシン30’は、負荷平衡技術を使用して識別し得る。これらとはさらに別の実施態様では、第2リモートマシン30’は、リモートマシン30’との近接性に基づいて識別し得る。これらの実施態様について、図9に関連して以下でさらに詳細に説明する。
実施態様によっては、リモートマシン30は、一覧のアプリケーションを実行するための予め決められた数の方法から、一覧のアプリケーションをリモートマシン30にストリーミングし、リモートマシン30上で一覧のアプリケーションを実行し、一覧のアプリケーションの実行によって生成されたアプリケーション出力データをローカルマシン10に提供する方法を選択する。これらの実施態様の1つでは、リモートマシン30は、ローカルマシン10の評価に応じて方法を選択する。これらとは別の実施態様では、決定は、ローカルマシン10の評価に対するポリシーの適用に応じて行われる。これらとはさらに別の実施態様では、決定は、受信した信任状の評価に応じて行われる。一実施態様では、リモートマシン30は、一覧のアプリケーションを含む複数のアプリケーションファイルを受信する。別の実施態様では、リモートマシン30は、ICA提示レベルプロトコル、リモートデスクトップウィンドウ提示レベルプロトコル、またはX−ウィンドウ提示レベルプロトコルなどの提示レベルプロトコルを介して、アプリケーション出力データを提供する。
実施態様によっては、リモートマシン30は、一覧のアプリケーションに関連するアクセス情報も提供し、このアクセス情報は、選択された方法に応じて生成される。これらの実施態様の1つでは、アクセス情報は、一覧のアプリケーションプログラムの実行のために選択された方法の指示を、ローカルマシン10に提供する。これらとは別の実施態様では、アクセス情報は、一覧のアプリケーションのロケーションの識別表示を含み、この識別表示は、汎用命名規則(UNC)に従う。これらとはさらに別の実施態様では、アクセス情報は、セッション管理サーバの識別表示を含む。
実施態様によっては、アクセス情報は、認証情報を含む開始チケットを含む。これらの実施態様の1つでは、ローカルマシン10は、リモートマシン30から受信したアクセス情報を認証するために、開始チケットを使用することができる。これらとは別の実施態様では、ローカルマシン10は、一覧のアプリケーションをホストする第2リモートマシン30に対し、ローカルマシン10自体を認証するために、開始チケットを使用することができる。これらとはさらに別の実施態様では、リモートマシン30は、開始チケットに対するローカルマシン10の要求に応じて、アクセス情報内に開始チケットを含む。
次に、図5を参照すると、ブロック図は、ローカルマシン10がアプリケーションプログラムの実行を要求し、リモートマシン30を含むアプリケーション提供システム500が、アプリケーションプログラムを実行する方法を選択する一実施態様を示す。
一実施態様では、リモートマシン30は、ローカルマシン10から信任状を受信する。別の実施態様では、リモートマシン30は、使用可能なアプリケーションの一覧に対する要求をローカルマシン10から受信する。
実施態様によっては、複数の冗長なリモートマシン30、30’、30’’、30’’’、および30’’’’が提供される。これらの実施態様の1つでは、たとえば、複数のファイルサーバ、複数のセッション管理サーバ、複数のステージングマシン、複数のウェブインターフェース、または複数のaccess suiteコンソールが存在し得る。これらとは別の実施態様では、リモートマシンが故障している場合、故障したマシンの機能を提供するため、冗長なリモートマシン30が選択される。他の実施態様では、リモートマシン30、30’、30’’、30’’、および30’’’’、ウェブインターフェース558、およびaccess suiteコンソールは、管理サーバの別個の機能を有する別個のリモートマシン30として記載されているが、セッション管理サーバ、ステージングマシン、ファイルサーバ、ウェブサーバ、およびaccess suiteコンソール、単一のリモートマシン30は、これらのすべてのマシンの機能を有して提供し得る。さらに他の実施態様では、リモートマシン30は、1つまたは複数の多数のリモートマシンの機能およびサービスを提供し得る。
次に、図5をさらに詳細に参照すると、ブロック図は、アプリケーションプログラムに対するアクセスを提供するアプリケーション提供システム500を示す。アプリケーション提供システム500は、1つまたは複数のリモートマシン30、アプライアンス1250、またはこれらの任意の組合せを備え得る。図1Dに関連して上記で説明したインターフェースおよびサブシステムのほかに、リモートマシン30は、管理通信サービス514、XMLサービス516、および管理サービス504をさらに含む。管理サービス504は、アプリケーション管理サブシステム506、サーバ管理サブシステム508、セッション管理サブシステム510、およびライセンス管理サブシステム512を備え得る。リモートマシン30は、access suiteコンソール520と通信し得る。
一実施態様では、管理サービス504は、特殊化したリモート手順サブシステム、MetaFrameリモート手順コール(MFRPC)サブシステム522をさらに備える。実施態様によっては、MFRPCサブシステム522は、XMLサービス516など、リモートマシン30上のサブシステムと、管理サービス504との間の通信を経路指定する。他の実施態様では、MFRPCサブシステム522は、管理機能を呼び出すためのリモート手順コール(PRC)インターフェースを提供し、管理サービス504に対するPRCコールを提供し、コールを行ったサブシステムに結果を返す。
実施態様によっては、リモートマシン30は、図4Bに関して上記で説明したプロトコルエンジン406などのプロトコルエンジンと通信する。これらの実施態様の1つでは、リモートマシン30は、リモートマシン30’上に存在するプロトコルエンジン406と通信する。他の実施態様では、リモートマシン30は、プロトコルエンジン406をさらに備える。
リモートマシン30は、access suiteコンソール520と通信し得る。access suiteコンソール520は、リモートマシン30またはファーム38の管理者に対する管理ツールをホストし得る。実施態様によっては、リモートマシン30は、XMLを使用して、access suiteコンソール520と通信する。他の実施態様では、リモートマシン30は、シンプルオブジェクトアクセスプロトコル(SOAP)を使用して、access suiteコンソール520と通信する。
リモートマシン30が、サブシステムのサブセットを含む図1Dおよび図5で説明する実施態様のような実施態様の場合、管理サービス504は、複数のサブシステムを含み得る。一実施態様では、各々のサブシステムは、シングルスレッドまたはマルチスレッドサブシステムである。スレッドは、マルチタスク環境で動作する実行の単独のストリームである。シングルスレッドサブシステムは、一度に1つのスレッドのみを実行することができる。マルチスレッドサブシステムは、現在実行している複数のスレッドをサポートすることができ、つまり、マルチスレッドサブシステムは、複数のタスクを同時に実行することができる。
アプリケーション管理サブシステム506は、ストリーミング可能な複数のアプリケーションに関連する情報を管理する。一実施態様では、アプリケーション管理サブシステム506は、アプリケーションを記憶する、削除する、更新する、一覧にする、または解決するなど、他の構成要素からの要求を処理する。別の実施態様では、アプリケーション管理サブシステム506は、ストリーミング可能なアプリケーションに関連する構成要素によって送信される要求を処理する。これらのイベントは、3つのタイプのイベント、つまりアプリケーションの発行、アプリケーション一覧、およびアプリケーションの起動に分類され、これらの各々について、以下でさらに詳細に説明する。他の実施態様では、アプリケーション管理サブシステム506は、アプリケーション解決、アプリケーションの公表、アプリケーションの発行のサポートをさらに含む。他の実施態様では、アプリケーション管理サブシステム506は、アプリケーションの特性およびポリシーを記憶するためにデータストアを使用する。
サーバ管理サブシステム508は、サーバファーム構成におけるアプリケーションのストリーミングに特有の構成を処理する。実施態様によっては、サーバ管理サブシステム508は、ファーム38の構成に関連する情報の検索を要求するイベントも処理する。他の実施態様では、サーバ管理サブシステム508は、アプリケーションストリーム全体でアプリケーションに対するアクセスを提供するリモートマシンに関連するその他の構成要素によって送信されるイベント、およびこれらのリモートマシンの特性を処理する。一実施態様では、サーバ管理サブシステム508は、リモートマシンの特性およびファーム特性を記憶する。
実施態様によっては、リモートマシン30は、特殊化された1つまたは複数のアプリケーションサブシステムにサービスを提供する1つまたは複数の共通アプリケーションサブシステムをさらに含む。これらのリモートマシン30は、特殊化された1つまたは複数のリモートマシンサブシステムにサービスを提供する1つまたは複数の共通リモートマシンサブシステムを有してもよい。他の実施態様では、共通アプリケーションサブシステム524は提供されず、特殊化された各々のアプリケーションおよびリモートマシンサブシステムが、必要なすべての機能をインプリメントする。
リモートマシン30が、共通アプリケーションサブシステム524を含む一実施態様では、共通アプリケーションサブシステム524は、発行済みアプリケーションの共通の特性を管理する。実施態様によっては、共通アプリケーションサブシステム524は、発行済みアプリケーション、または共通特性に関連する情報の検索を要求するイベントを処理する。他の実施態様では、共通アプリケーションサブシステム524は、共通アプリケーション、およびその特性に関連する他の構成要素によって送信されるすべてのイベントを処理する。
共通アプリケーションサブシステム524は、ファーム38にアプリケーションを「発行」することができ、ファーム38は、ローカルマシン10による一覧作成および起動に、各々のアプリケーションを使用できるようにする。一般に、アプリケーションは、アプリケーションの可用性が望ましい各々のリモートマシン30上にインストールされる。一実施態様では、アプリケーションを発行するために、管理者は、アプリケーションをホストするリモートマシン30、各々のリモートマシン上で実行可能なファイル名、アプリケーション(たとえば、音声、映像、暗号化など)を実行するためのローカルマシンの所定の能力、およびアプリケーションを使用することができるユーザのリストなどの情報を指定する管理ツールを実行する。この指定された情報は、アプリケーション特有の情報および一般的な情報に分類される。アプリケーションに特有の情報の例は、アプリケーションにアクセスする経路の名称、およびアプリケーションを実行するための実行可能ファイルである。共通の情報(つまり、共通アプリケーションデータ)としては、たとえば、ユーザにわかりやすいアプリケーション名(たとえば、「Microsoft WORD 2000」)、アプリケーションの一意な識別表示、およびアプリケーションのユーザが挙げられる。
アプリケーションに特有の情報、および共通の情報は、アプリケーションをホストする各々のリモートマシン30上のアプリケーションを制御する特殊化されたアプリケーションサブシステムに送信し得る。特殊化されたアプリケーションサブシステムは、アプリケーションに特有の情報、および共通の情報を持続ストア240に書き込むことができる。
共通アプリケーションサブシステム524は、提供される場合、ファーム38内の発行済みアプリケーションを管理する機能も提供する。管理者は、共通アプリケーションサブシステム524を通して、access suiteコンソール520などの管理ツールを使用してファーム38のアプリケーションを管理し、アプリケーション群を構成し、これらのアプリケーション群のアプリケーションツリー階層を生成することができる。各々のアプリケーション群は、アプリケーションツリー階層内のフォルダとして表現することができる。アプリケーションツリー階層内の各々のアプリケーションフォルダは、1つまたは複数のアプリケーションフォルダ、およびリモートマシンの特有のインスタンスを含むことができる。共通アプリケーションサブシステム524は、アプリケーションフォルダを作成、移動、改名、削除、および一覧を作成するための機能を提供する。
一実施態様では、共通アプリケーションサブシステム524は、アプリケーション一覧およびアプリケーション解決要求を処理する際に、アプリケーション管理サブシステム506をサポートする。実施態様によっては、共通アプリケーションサブシステム524は、あるタイプのデータファイルと、当該タイプのデータファイルを処理するためのアプリケーションとの間のマッピングに応じて、実行されるアプリケーションを識別する機能を提供する。他の実施態様では、第2アプリケーションのサブシステムは、ファイルタイプの関連性のための機能を提供する。
実施態様によっては、リモートマシン30は、ポリシーサブシステムをさらに備え得る。ポリシーサブシステムは、ローカルマシン10によってアプリケーションの実行が要求された後、アプリケーションがローカルマシン10にストリーミングされ得るかどうかを決定するためのポリシー規則を含む。実施態様によっては、ポリシーサブシステムは、access suiteコンソール520内で発行されたストリーミングされたアプリケーションに関連するサーバアクセスオプションを識別する。これらの実施態様の1つでは、ポリシーサブシステムは、ポリシー規則の代わりに、サーバアクセスオプションをポリシーとして使用する。
セッション監視サブシステム510は、ローカルマシン10に関連するアプリケーションストリーミングセッションのセッション状態を維持および更新し、アプリケーションストリーミングセッションのライセンス要件を実施する。一実施態様では、セッション管理サブシステム510は、セッションおよびログイベント、たとえばアプリケーションの起動、またはアプリケーションストリーミングセッションの終了を監視する。別の実施態様では、セッション監視サブシステム510は、心拍メッセージなどの通信を受信し、ローカルマシン10からリモートマシン30に伝送する。さらに別の実施態様では、セッション管理サブシステム510は、access suiteコンソール520内のツールなどの管理ツールからのセッションに関する問い合わせに応答する。実施態様によっては、管理サービス504は、アプリケーションを実行するローカルマシンにライセンスを提供し、維持するため、セッション管理サブシステムと通信するライセンス管理サブシステムをさらに備える。
一実施態様では、管理サービス504は、アプリケーション一覧およびアプリケーション解決のための機能を提供する。実施態様によっては、管理サービス504は、アプリケーションの起動、セッション監視および追跡、アプリケーションの発行、並びにライセンスの実施のための機能も提供する。
次に、図6を参照すると、ブロック図は、アプリケーション一覧を提供する管理サービスを含むリモートマシン30の一実施態様を示す。管理サービス504は、XMLサービス516と相互作用するウェブインターフェースの使用により、アプリケーション一覧を提供し得る。一実施態様では、XMLサービス516は、ローカルマシン10のユーザに対するアプリケーションの一覧を作成する。別の実施態様では、XMLサービス516は、上記のICAブラウザシステムおよびprogram neighborhoodサブシステムの機能をインプリメントする。XMLサービス516は、管理通信サービス514と相互作用し得る。一実施態様では、XMLサービス516は、管理通信サービス514を使用して、アプリケーション一覧要求を生成する。アプリケーション一覧要求は、一覧のアプリケーションを実行する時に使用される実行の方法を指示するクライアントタイプを含み得る。アプリケーション一覧要求は、共通アプリケーションサブシステム524に送信される。一実施態様では、共通アプリケーションサブシステム524は、アプリケーション一覧要求のクライアントタイプに関連するアプリケーションの一覧を返す。別の実施態様では、共通アプリケーションサブシステム524は、ローカルマシン10のユーザが使用可能なアプリケーションの一覧、ポリシーのアプリケーションに応じて選択された一覧を、ローカルマシン10に関連する信任状に返す。この実施態様では、ポリシーエンジン406は、上記で図4に関連して説明したように、収集エージェント404によって収集された信任状にポリシーを適用し得る。さらに別の実施態様では、アプリケーションの一覧が返され、ローカルマシン10に対するポリシーの適用は、一覧のアプリケーションの実行が要求されるまで延期される。
管理サービス504は、アプリケーションをホストする第2リモートマシン30’を識別するために、アプリケーション解決サービスを提供し得る。一実施態様では、第2リモートマシン30’はファイルサーバまたはアプリケーションサーバである。実施態様によっては、管理サービス504は、アプリケーションをホストする複数のリモートマシン30の識別子を含むファイルを調査する。一実施態様では、管理サービス504は、アプリケーションを実行するためのローカルマシン10からの要求に応じて、アプリケーション解決サービスを提供する。別の実施態様では、管理サービス504は、第1リモートマシン30とは異なるアプリケーション実行方法をインプリメントすることが可能な第2リモートマシン30’を識別する。実施態様によっては、管理サービス504は、アプリケーションプログラムをローカルマシン10にストリーミングすることが可能な第1リモートマシン30’、およびアプリケーションプログラムに応じて生成されたアプリケーション出力データをローカルマシン10に提供することが可能な第2リモートマシン30’を識別する。
一実施態様では、ウェブインターフェースは、アプリケーション解決要求をXMLサービス516に伝送する。別の実施態様では、XMLサービス516は、アプリケーション解決要求を受信し、その要求をMFRPCサブシステム522に伝送する。
一実施態様では、MFRPCサブシステム522は、受信したアプリケーション解決要求とともに含まれるクライアントタイプを識別する。別の実施態様では、MFRPCサブシステムは、ポリシーをクライアントタイプに適用し、アプリケーションをローカルマシン10に「ストリーミング」することを決定する。この実施態様では、MFRPCサブシステム522は、アプリケーション解決要求をアプリケーション管理サブシステム506に回送し得る。一実施態様では、アプリケーション解決要求をMFRPCサブシステム522から受信すると、アプリケーション管理サブシステム506は、ローカルマシン10に対するセッション管理サーバ562として機能するリモートマシン30’’’’を識別し得る。実施態様によっては、ローカルマシンは、心拍メッセージをセッション管理サーバ562に伝送する。別の実施態様では、アプリケーション管理サブシステム506は、ローカルマシン10にストリーミングされるアプリケーションを含む複数のアプリケーションファイルをホストするリモートマシン30’を識別し得る。
実施態様によっては、アプリケーション管理サブシステム506は、リモートマシン30’を識別するための複数のアプリケーションファイルをホストする複数のリモートマシンを一覧にするファイルを使用する。他の実施態様では、アプリケーション管理サブシステム506は、ローカルマシン10のIPアドレスに類似するIPアドレスを有するリモートマシン30’を識別する。さらに他の実施態様では、アプリケーション管理サブシステム506は、ローカルマシン10がアクセス可能なIPアドレスの範囲内のIPアドレスを有するリモートマシン30’を識別する。
さらに別の実施態様では、MFRPCサブシステム522は、ポリシーをクライアントタイプに適用し、アプリケーションが、リモートマシン30’上で実行され、リモートマシン30’が、アプリケーションの実行によって生成されたアプリケーション出力データをローカルマシン10に伝送することができると決定する。この実施態様では、MFRPCサブシステム522は、アプリケーション解決要求を共通アプリケーションサブシステム524に回送し、リモートマシン30’のホストアドレスの識別子を検索することができる。一実施態様では、識別されたリモートマシン30’は、ICAまたはRDPまたはX Windows(登録商標)などの提示レベルプロトコルを使用して、アプリケーション出力データをローカルマシンに伝送し得る。実施態様によっては、リモートマシン30’は、アプリケーションストリーミングセッション全体で、第2リモートマシン30’からアプリケーションを受信する。
一実施態様では、アプリケーション一覧およびアプリケーション解決が完了すると、アクセス情報は、一覧のアプリケーションの実行方法の識別表示と、一覧のアプリケーションをホストするリモートマシン30’の識別子とを含むローカルマシン10に伝送される。管理サービス504が、一覧のアプリケーションがローカルマシン10上で実行するであろうと決定する一実施態様では、ウェブインターフェースは、一覧のアプリケーションに関する名前が決定された情報を含むファイルを作成し、ローカルマシン10に伝送する。実施態様によっては、このファイルは、「.rad」拡張子を使用して識別し得る。ローカルマシン10は、受信したファイルの内容に応じて一覧のアプリケーションを実行することができる。表2は、このファイルに含まれる情報の一実施態様を示す。
Figure 2009536377
Figure 2009536377
ファイルは、表2に示すように、アプリケーションを実行する際にローカルマシンによって使用される開始チケットも含み得る。実施態様によっては、開始チケットは、予め決められた期間が経過した後に失効する。一実施態様では、ローカルマシンは、実行される一覧のアプリケーションをホストするリモートマシンに開始チケットを提供する。開始チケットを使用して、ローカルマシンのユーザが一覧のアプリケーションにアクセスすることを承認することによって、ユーザがファイルを再使用するか、あるいは承認されないバージョンのファイルを生成して、アプリケーションに不適切にアクセスすることを防止するのに役立つ。一実施態様では、開始チケットは、無作為に生成された大きい数を含む。
図2に関連して上記で説明したように、アプリケーションプログラムの実行方法を選択する方法は、ローカルマシン10またはローカルマシン10のユーザに関連する信任状が受信された時に開始し(ステップ202)、ローカルマシン10が使用可能な複数のアプリケーションプログラムは、受信された信任状に応じて提供される(ステップ204)。要求が受信されて一覧のアプリケーションが実行され(ステップ206)、一覧のアプリケーションを実行するための予め決められた数の方法の1つが、ポリシーに応じて選択され、予め決められた数の方法は、一覧のアプリケーションのアプリケーションストリーミング方法を含む(ステップ208)。
次に図7を参照すると、フロー図は、アプリケーションプログラムを含む複数のファイルにアクセスするために行われるステップを示す。ローカルマシンは、ローカルマシンの起動前の分析を実行する(ステップ210)。一実施態様では、ローカルマシン10は、アプリケーションプログラムを含む複数のアプリケーションファイルを検索および実行する前に起動前の分析を実行する。別の実施態様では、ローカルマシン10は、起動前の分析が、アプリケーションプログラムを含む複数のアプリケーションファイルにアクセスすることを承認されるための必要条件であるという指示を受信すると、起動前の分析を実行する。
実施態様によっては、ローカルマシン10は、複数のアプリケーションファイルに関連するアクセス情報をリモートマシン30から受信する。これらの実施態様の1つでは、アクセス情報は、複数のアプリケーションファイルをホストするリモートマシン30’のロケーションの識別表示を含む。これらとは別の実施態様では、ローカルマシン10は、アプリケーションプログラムの1つまたは複数のバージョンを含む複数のアプリケーションの識別表示を受信する。これらとはさらに別の実施態様では、ローカルマシン10は、1つまたは複数のアプリケーションプログラムを含む複数のアプリケーションファイルの識別表示を受信する。他の実施態様では、ローカルマシン10は、ローカルマシン10が検索および実行に使用可能なアプリケーションプログラムの一覧を受信する。これらの実施態様の1つでは、一覧は、ローカルマシン10の評価に起因する。さらに他の実施態様では、ローカルマシン10は、アプリケーションプログラムを含む複数のアプリケーションファイルに関して受信された識別表示に応じて、少なくとも1つの特性を検索する。
実施態様によっては、アクセス情報は、ローカルマシンが複数のアプリケーションファイルにアクセスすることを承認することが可能な開始チケットを含む。これらの実施態様の1つでは、開始チケットは、ローカルマシン10の評価に応じてローカルマシン10に提供される。これらとは別の実施態様では、開始チケットは、ローカルマシン10によるローカルマシン10の起動前の分析の後、ローカルマシン10に提供される。
他の実施態様では、ローカルマシン10は、複数のアプリケーションファイルの実行に必要な少なくとも1つの特性を検索する。これらの実施態様の1つでは、アクセス情報は、少なくとも1つの特性を含む。これらとは別の実施態様では、アクセス情報は、ローカルマシン10によって検索されるファイルのロケーションを指示し、ファイルは、少なくとも1つの特性を一覧にする。これらとはさらに別の実施態様では、少なくとも1つの特性を一覧にするファイルは、複数のアプリケーションファイルの一覧、および複数のアプリケーションファイルをホストするリモートマシン30の識別表示をさらに含む。
ローカルマシン10は、少なくとも1つの特性がローカルマシン上に存在すると決定する。一実施態様では、ローカルマシン10は、この決定を起動前の分析の一部として行う。別の実施態様では、ローカルマシン10は、ローカルマシン10が少なくとも1つの特性を有するかどうかを決定する。
一実施態様では、ローカルマシン10上における少なくとも1つの特性の存在の決定は、デバイスドライバがローカルマシン上にインストールされているかどうかを決定することを含む。別の実施態様では、少なくとも1つの特性がローカルマシン10上に存在することの決定は、オペレーティングシステムがローカルマシン10上にインストールされているかどうか決定することを含む。さらに別の実施態様では、少なくとも1つの特性がローカルマシン10上に存在することの決定は、特定のオペレーティングシステムがローカルマシン10上にインストールされているかどうか決定することを含む。さらに別の実施態様では、少なくとも1つの特性がローカルマシン10上に存在することの決定は、オペレーティングシステムの特定のリビジョンレベルが、ローカルマシン10上にインストールされているかどうか決定することを含む。
実施態様によっては、少なくとも1つの特性がローカルマシン10上に存在することの決定は、ローカルマシン10が、一覧のアプリケーションを実行するための承認を取得したかどうか決定することを含む。これらの実施態様の1つでは、決定は、ローカルマシン10が、一覧のアプリケーションを実行するためのライセンスを受信したかどうかに関して、ローカルマシン10によって行われる。これらとは別の実施態様では、決定は、ローカルマシン10が、アプリケーションストリーミングセッション全体で、一覧のアプリケーションを含む複数のアプリケーションファイルを受信するライセンスを受信したかどうかに関して、ローカルマシン10によって行われる。他の実施態様では、少なくとも1つの特性がローカルマシン10上に存在することの決定は、ローカルマシン10が、一覧のアプリケーションを検索および実行するために使用可能な十分な帯域幅を有するかどうかを決定することを含む。
実施態様によっては、少なくとも1つの特性がローカルマシン10上に存在することの決定は、ローカルマシン10上のスクリプトの実行を含む。他の実施態様では、少なくとも1つの特性がローカルマシン10上に存在することの決定は、ソフトウェアをローカルマシン10上にインストールすることを含む。さらに他の実施態様では、少なくとも1つの特性がローカルマシン10上に存在することの決定は、ローカルマシン10上のレジストリの修正を含む。さらに他の実施態様では、少なくとも1つの特性がローカルマシン10上に存在することの決定は、収集エージェント404をローカルマシン10に伝送して、ローカルマシン10で実行し、ローカルマシン10に関連する信任状を収集することを含む。
ローカルマシン10は、複数のアプリケーションファイルを実行するための承認をリモートマシン30に要求し、要求は、開始チケットを含む(ステップ212)。実施態様によっては、ローカルマシン10は、少なくとも1つの特性がローカルマシン10上に存在するという決定に応じて要求を行う。これらの実施態様の1つでは、ローカルマシン10は、複数の特性がローカルマシン10上に存在し、この複数の特性は一覧のアプリケーションに関連し、一覧のアプリケーションを実行する要求に応じて受信されたと決定する。これらとは別の実施態様では、ローカルマシン10が、一覧のアプリケーションの実行を承認する指示を受信するかどうかは、少なくとも1つの特性がローカルマシン10上に存在するかどうかによって決まる。一実施態様では、ローカルマシン10は、アプリケーションプログラムの一覧を受信し、一覧のアプリケーションの実行を要求し、少なくとも1つの特性がローカルマシン10上に存在するという決定の後、少なくとも1つの特性、および一覧のアプリケーションの実行を承認する開始チケットを含むアクセス情報を受信した。
一実施態様では、ローカルマシン10は、複数のアプリケーションファイルの実行を承認するライセンスをリモートマシン30から受信する。実施態様によっては、ライセンスは、特定期間における実行を承認する。これらの実施態様の1つでは、ライセンスは、複数のアプリケーションファイルを実行する証人を維持するために、心拍メッセージの伝送を要求する。
別の実施態様では、ローカルマシン10は、複数のアプリケーションファイルの実行を監視するリモートマシン30に関連するライセンスおよび識別子をリモートマシン30から受信する。実施態様によっては、リモートマシンは、図5に示すようにセッション管理サーバ562である。これらの実施態様の1つでは、セッション管理サーバ562は、ローカルマシン10に関連するセッションを監視するセッション管理サブシステム510を含む。他の実施態様では、別個のリモートマシン30’’’’がセッション管理サーバ562である。
ローカルマシン10は、複数のアプリケーションファイルを受信し、実行する(ステップ214)。一実施態様では、ローカルマシン10は、アプリケーションストリーミングセッション全体で複数のアプリケーションファイルを受信する。別の実施態様では、ローカルマシン10は、複数のアプリケーションファイルをローカルマシン10上の隔離環境内に記憶する。さらに別の実施態様では、さらに別の実施態様では、ローカルマシン10は、複数のアプリケーションファイルのうちの第2のアプリケーションファイルを受信する前に、複数のアプリケーションファイルの1つのアプリケーションファイルを実行する。実施態様によっては、リモートマシンは、複数のアプリケーションファイルを複数のローカルマシンに伝送し、複数のローカルマシンの中の各々のローカルマシンは、リモートマシンとの個々のアプリケーションストリーミングセッションを確立している。
実施態様によっては、ローカルマシン10は、複数のアプリケーションファイルをキャッシュ内に記憶し、アプリケーションファイルの実行を遅延させる。これらの実施態様の1つでは、ローカルマシン10は、予め画定された期間にアプリケーションファイルを実行するための承認を受信する。これらとは別の実施態様では、ローカルマシン10は、ローカルマシン10がネットワークにアクセスできない場合、予め画定された期間にアプリケーションファイルを実行するための承認を受信する。他の実施態様では、ローカルマシンは、複数のアプリケーションファイルをキャッシュ内に記憶する。これらの実施態様の1つでは、アプリケーションストリーミングクライアント552は、複数のアプリケーションファイルをキャッシュから検索するため、内部のアプリケーションストリーミングセッションを確立する。これらとは別の実施態様では、ローカルマシン10は、ローカルマシン10がネットワークにアクセスできない場合、予め画定された期間にアプリケーションファイルを実行するための承認を受信する。
ローカルマシン10は、少なくとも1つの心拍メッセージをリモートマシンに伝送する(ステップ216)。実施態様によっては、ローカルマシン10は、一覧のアプリケーションを含む複数のアプリケーションファイルを実行する承認を保持するため、少なくとも1つの心拍メッセージを伝送する。他の実施態様では、ローカルマシン10は、複数のアプリケーションファイル内のアプリケーションファイルを検索するための承認を保持するため、少なくとも1つの心拍メッセージを伝送する。さらに他の実施態様では、ローカルマシン10は、予め決められた期間に複数のアプリケーションファイルを実行することを承認するライセンスを受信する。
実施態様によっては、ローカルマシン10は、第2のリモートマシン30’’’’に心拍メッセージを伝送する。これらの実施態様の1つでは、第2リモートマシン30’’’’は、複数のアプリケーションファイルの検索および実行を監視するセッション管理サーバ562を含み得る。これらとは別の実施態様では、第2リモートマシン30’’’’は、伝送された心拍メッセージに応じて、複数のアプリケーションファイルの実行を承認するライセンスを更新し得る。これらとはさらに別の実施態様では、第2リモートマシン30’’’’は、伝送された心拍メッセージに応じて、ローカルマシン10にコマンドを伝送し得る。
再び図5を参照すると、ローカルマシン10は、アプリケーションストリーミングクライアント552、ストリーミングサービス554、および隔離環境556を含み得る。アプリケーションストリーミングクライアント552は、実行可能なプログラムでよい。実施態様によっては、アプリケーションストリーミングクライアント552は、実行可能な別のプログラムを開始することが可能であり得る。他の実施態様では、アプリケーションストリーミングクライアント552は、ストリーミングサービス554を開始し得る。これらの実施態様の1つでは、アプリケーションストリーミングクライアント552は、アプリケーションプログラムの実行に関連するパラメータをストリーミングサービス554に提供し得る。これらとは別の実施態様では、アプリケーションストリーミングクライアント552は、リモート手順コールを使用して、ストリーミングサービス554を開始し得る。
一実施態様では、ローカルマシン10は、アプリケーションプログラムの実行を要求し、実行に関連するリモートマシン30からアクセス情報を受信する。別の実施態様では、アプリケーションストリーミングクライアント552は、アクセス情報を検索する。さらに別の実施態様では、アプリケーションストリーミングクライアント552は、アクセス情報をストリーミングサービス554に提供する。さらに別の実施態様では、アクセス情報は、アプリケーションプログラムを含む複数のアプリケーションファイルに関連するファイルのロケーションの識別表示を含む。
一実施態様では、ストリーミングサービス554は、複数のアプリケーションファイルに関連するファイルを検索する。実施態様によっては、検索されたファイルは、複数のアプリケーションファイルのロケーションの識別表示を含む。これらの実施態様の1つでは、ストリーミングサービス554は、複数のアプリケーションファイルを検索する。これらとは別の実施態様では、ストリーミングサービス554は、検索された複数のアプリケーションファイルをローカルマシン10上で実行する。他の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイルを検索し、実行するための承認を維持するため、心拍メッセージをリモートマシンに伝送する。
実施態様によっては、検索されたファイルは、1つより多くの複数のアプリケーションファイルのロケーションの識別表示を含み、各々の複数のアプリケーションファイルは、異なるアプリケーションプログラムを含む。これらの実施態様の1つでは、ストリーミングサービス554は、ローカルマシン10に適合可能なアプリケーションプログラムを含む複数のアプリケーションファイルを検索する。これらとは別の実施態様では、ストリーミングサービス554は、ローカルマシン10の評価に応じて、特定の複数のアプリケーションファイルを検索するための承認を受信する。
実施態様によっては、複数のアプリケーションファイルは圧縮され、CAB、ZIP、SIT、TAR、JARなどのアーカイブファイル、またはその他のアーカイブファイル内のファイルサーバ上に記憶される。一実施態様では、アーカイブファイル内に記憶された複数のアプリケーションファイルは、アプリケーションプログラムを含む。別の実施態様では、アーカイブファイル内に記憶された複数の複数のアプリケーションファイルは各々、あるアプリケーションプログラムの異なるバージョンを含む。さらに別の実施態様では、アーカイブファイル内に記憶された複数の複数のアプリケーションファイルは各々、異なるアプリケーションプログラムを含む。実施態様によっては、アーカイブファイルは、複数のアプリケーションファイル内の各々のファイルに関連するメタデータを含む。これらの実施態様の1つでは、ストリーミングサービス554は、含まれているメタデータに応じてディレクトリ構造を生成する。以下の図12に関連してさらに詳細に説明するとおり、メタデータは、アプリケーションプログラムによるディレクトリ一覧の要求を満たすために使用することができる。
一実施態様では、ストリーミングサービス554は、アーカイブファイルを解凍して、複数のアプリケーションファイルを取得する。別の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイル内のファイルのローカルコピーが、ファイルを複数のアプリケーションファイルから検索する前に、ローカルマシン10上のキャッシュ内に存在するかどうかを決定する。さらに別の実施態様では、ファイルシステムフィルタドライバ564は、ローカルコピーがキャッシュ内に存在するかどうかを決定する。実施態様によっては、ストリーミングサービス554は、複数のアプリケーションファイル内のファイルを検索する前に、レジストリのエントリを修正する。
実施態様によっては、ストリーミングサービス554は、ローカルマシン10上のキャッシュ内の複数のアプリケーションファイルを記憶する。これらの実施態様の1つでは、ストリーミングサービス554は、複数のアプリケーションファイルをキャッシュする要求を受信すると、複数のアプリケーションファイルをキャッシュする機能を提供し得る。これらとは別の実施態様では、ストリーミングサービス554は、キャッシュをローカルマシン10上に固定するための機能を提供し得る。これらとは別の実施態様では、ストリーミングサービス554は、キャッシュのサイズおよびロケーションを調節するためのアルゴリズムを使用し得る。
実施態様によっては、ストリーミングサービス554は、ローカルマシン10上に隔離環境556を形成する。これらの実施態様の1つでは、ストリーミングサービス554は、隔離環境アプリケーションプログラムインターフェースを使用して、隔離環境556を形成する。これらとは別の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイルを隔離環境556内に記憶する。これらとはさらに別の実施態様では、ストリーミングサービス554は、隔離環境内の複数のアプリケーションファイル内の1つのファイルを実行する。これらとはさらに別の実施態様では、ストリーミングサービス554は、隔離環境内のアプリケーションプログラムを実行する。
ローカルマシン10上でアプリケーションを実行するために承認を受信する実施態様では、アプリケーションの実行は、隔離環境556内で行い得る。実施態様によっては、アプリケーションを含む複数のアプリケーションファイルは、アプリケーションの実行前に、ローカルマシン10上に記憶される。他の実施態様では、複数のアプリケーションファイルのサブセットが、アプリケーションの実行前に、ローカルマシン10上に記憶される。さらに他の実施態様では、複数のアプリケーションファイルは、隔離環境556内に存在しない。さらに他の実施態様では、複数のアプリケーションファイルのサブセットは、ローカルマシン10上に存在しない。複数のアプリケーションファイルのサブセット、または複数のアプリケーションファイル内の各々のアプリケーションファイルが、ローカルマシン10上に存在するか、あるいは隔離環境556内に存在するかに関係なく、実施態様によっては、複数のアプリケーションファイル内のアプリケーションファイルは、隔離環境556内で実行し得る。
隔離環境556は、アプリケーションのソースコードを変更する必要がなく、アプリケーションの互換性問題を減少させるために、ファイルシステムの仮想化、レジストリシステムの仮想化、指定オブジェクトの仮想化を提供することが可能なコアシステムから構成し得る。隔離環境556は、レジストリおよび指定オブジェクトの仮想化の場合はユーザモード、ファイルシステムの仮想化の場合はファイルシステムフィルタドライバを使用するカーネルの両方におけるフッキングを使用して、アプリケーションリソース要求をリダイレクトし得る。以下は、隔離環境556のいくつかの実施態様の説明である。
次に、図8Aを参照すると、アプリケーションの互換性およびアプリケーションの適合性の問題を減少させたオペレーティングシステム100の制御下で実行されるコンピュータの一実施態様が示されている。オペレーティングシステム100は、そのシステム層108を介して、様々なネイティブリソースをアプリケーションプログラム112、114に利用できるようにする。システム層108によって具現されるリソースのビューは、「システム範囲」と呼ばれるであろう。アプリケーションプログラム112、114によるネイティブリソース102、104、106、107に対する矛盾するアクセスを防止するため、隔離環境200が提供される。図8Aに示すように、隔離環境200は、アプリケーション隔離層220およびユーザ隔離層240を含む。概念上、隔離環境200は、アプリケーション隔離層220を介してアプリケーションプログラム112、114に、ネイティブリソースの特有なビュー、たとえばファイルシステム102、レジストリ104、オブジェクト106およびウィンドウ名107を提供する。各々の隔離層は、アプリケーションに提供されるネイティブリソースのビューを修正する。ある層によって提供されるネイティブリソースの修正されたビューは、当該層の「隔離スコープ」と呼ばれるであろう。図8Aに示すように、アプリケーション隔離層は、2つのアプリケーション隔離スコープ222、224を備える。スコープ222は、アプリケーション112に提供されるネイティブリソースのビューを表し、スコープ224は、アプリケーション114に提供されるネイティブリソースのビューを表す。したがって、図8Aに示す実施態様の場合、APP1 112には、ファイルシステム102’の特定のビューが提供され、APP2 114には、ファイルシステム102’’に特有であるファイルシステム102’’の別のビューが提供される。実施態様によっては、アプリケーション隔離層220は、ネイティブリソース102、104、106、107の特定のビューを、オペレーティングシステム100の上部で実行する個々のアプリケーションプログラム各々に提供する。他の実施態様では、アプリケーションプログラム112、114は、セットとして集合化され、これらの実施態様では、アプリケーション隔離層220は、ネイティブリソースの特定のビューを各々のセットのアプリケーションプログラムに提供する。矛盾するアプリケーションプログラムは、アプリケーションの互換性および適合性を保障するため、別個の群に入れることができる。さらに他の実施態様では、あるセットに属するアプリケーションは、管理者が構成し得る。実施態様によっては、システムスコープに正確に対応する「パススルー」隔離スコープを画定することができる。つまり、パススルー隔離スコープ内で実行されるアプリケーションは、直接システムスコープ上で動作する。
実施態様によっては、アプリケーション隔離スコープは、層状サブスコープとしてさらに分割される。メインサブスコープは、ベースアプリケーション隔離スコープを含み、追加のサブスコープは、複数のアプリケーションの実行インスタンスにとって見ることができる、このスコープに対する様々な修正を含む。たとえば、サブスコープは、アプリケーションのパッチレベルの変更、または追加の特徴のインストールもしくは除去を具現するスコープに対する修正を含み得る。実施態様によっては、実行アプリケーションのインスタンスに見える追加のサブスコープのセットは、構成可能である。実施態様によっては、見えるサブスコープのセットは、どのユーザのためにアプリケーションが実行されているかに関係なく、実行アプリケーションのすべてのインスタンスで同じである。他の実施態様では、見えるサブスコープのセットは、アプリケーションを実行する様々なユーザごとに変化し得る。さらに他の実施態様では、サブスコープの様々なセットが画定され、ユーザは、どのセットを使用するかに関して選択肢を有する。実施態様によっては、サブスコープは、不要になった場合は廃棄し得る。実施態様によっては、サブスコープのセット内に含まれる修正は、一緒に統合されて、単一のサブスコープを形成する。
次に、図8Bを参照すると、アプリケーションの互換性およびアプリケーションの適合性の問題が減少したマルチユーザコンピュータが示されている。マルチユーザコンピュータは、上記の隔離環境200と同様、システム層108内にネイティブリソース102、104、106、107を含む。アプリケーション隔離層220は、上記のように機能し、ネイティブリソースの修正されたビューとともに、1つのアプリケーション、またはアプリケーション群を提供する。ユーザ隔離層240は、概念上、アプリケーションプログラム112、114にネイティブリソースのビューを提供し、このビューは、アプリケーションが実行されているユーザのユーザアイデンティティに基づいてさらに変更される。図8Bに示すように、ユーザ隔離層240は、ある数のユーザ隔離スコープ242’、242’’、242’’’、242’’’’、242’’’’’、242’’’’’’(一般に、242)を含むように考えることができる。ユーザ隔離スコープ242は、ネイティブリソースのアプリケーションに特有のビューのユーザに特有のビューを提供する。たとえば、ユーザ「a」のためにユーザセッション110で実行されるAPP1 112には、ユーザ隔離スコープ242’、およびアプリケーション隔離スコープ222の両方によって変更または修正されるファイルシステムビュー102’(a)が提供される。
言い換えれば、ユーザ隔離層240は、アプリケーション隔離スコープ222によって提供されるアプリケーション特有のビューの修正の「上部で」、ユーザ隔離スコープ242’によって提供されるユーザ特有のビューの修正を「階層化」し、その結果、システム層によって提供されるネイティブリソースのシステム全体のビューの「上部で階層化する」ことによって、個々のユーザ各々のネイティブリソースのビューを変更する。たとえば、APP1 112の第1インスタンスが、レジストリデータベース104内のエントリにアクセスする場合、第1ユーザセッションおよびアプリケーション104’(a)に特有のレジストリデータベースのビューが調査される。要求されたレジストリキーが、レジストリ104’(a)のユーザ特有のビューに見られる場合、レジストリキーはAPP1 112に返される。そうではない場合、アプリケーション104’に特有のレジストリデータベースのビューが調査される。要求されたレジストリキーが、レジストリ104’のアプリケーション特有のビューに見られる場合、レジストリキーはAPP1 112に返される。そうではない場合、次に、システム層108内のレジストリデータベース104内に記憶されたレジストリキー(つまり、ネイティブレジストリキー)が、APP1 112に返される。
実施態様によっては、ユーザ隔離層240は、個々のユーザ各々に隔離スコープを提供する。他の実施態様では、ユーザ隔離層240は、あるグループのユーザに隔離スコープを提供し、この隔離スコープは、組織内の役割ごとに画定することができるか、あるいは管理者によって予め決められる。さらに他の実施態様では、ユーザ隔離層240は提供されない。これらの実施態様では、アプリケーションプログラムによって見られるネイティブリソースのビューは、アプリケーション隔離層220によって提供されるビューである。隔離環境200は、様々なユーザがアプリケーションプログラムの同時実行をサポートするマルチユーザコンピュータに関連して説明されてはいるが、異なるユーザが同じコンピュータシステム上で、アプリケーションプログラムを順次実行することから生じるアプリケーションの互換性および適合性の問題、並びに同じユーザが互換性のないプログラムをインストールおよび実行することから生じる問題に対処するために、シングルユーザコンピュータ上でも使用し得る。
実施態様によっては、ユーザ隔離スコープは、さらにサブスコープとして分割される。当該スコープ内で実行するアプリケーションに提示されるビューをユーザ隔離スコープによって修正すると、そのスコープの各々のサブスコープ内に含まれる修正が統合される。サブスコープは、互いに上部に階層化され、統合されたビューでは、より上位のサブスコープのリソースを修正すると、下位の層の同じリソースに対する修正は無効になる。
これらの実施態様のいくつかでは、1つまたは複数のこれらのサブスコープは、ユーザに特有のビューの修正を含むことができる。これらの実施態様のいくつかでは、1つまたは複数のサブスコープは、ユーザのセットに特有なビューの修正を含むことができ、この修正は、システム管理者によって画定されるか、あるいはオペレーティングシステム内のユーザのグループとして画定される。これらの実施態様のいくつかでは、これらのサブスコープの1つは、特定のログインセッションに特有であり、したがって、セッションが終了すると廃棄されるビューの修正を含むことができる。これらの実施態様のいくつかでは、ユーザ隔離スコープに関連するアプリケーションインスタンスによるネイティブリソースの変更は、常にこれらのサブスコープの1つに影響し、他の実施態様では、こうした変更は、特定のリソースに応じて、異なるサブスコープに影響し得る。
上記の概念上のアーキテクチャは、ユーザのために実行するアプリケーションを、統合または統一され、仮想化され、当該アプリケーションとユーザとの組合せに特有のビューで提示することを可能にする。統合されたビューは、「仮想スコープ」と呼ぶことができる。ユーザのために実行するアプリケーションインスタンスは、ネイティブリソースのすべての有効な仮想化インスタンスを表すネイティブリソースの単一ビューで提示される。概念上、この統合されたビューは、先ず、システムスコープ内のオペレーティングシステムによって提供されるネイティブリソースの集合から構成され、この集合は、実行アプリケーションに適用されるアプリケーション隔離スコープに具現される修正と重畳され、ユーザのために実行するアプリケーションに適用されるユーザ隔離スコープに具現される修正とさらに重畳される。システムスコープ内のネイティブリソースは、オペレーティングシステムの許可が、特定のユーザまたはアプリケーションにアクセスすることを拒絶する場合を除いて、システム上のすべてのユーザおよびアプリケーションに共通であるという特徴がある。アプリケーション隔離スコープに具現されるリソースのビューの修正は、当該アプリケーション隔離スコープに関連するアプリケーションのすべてのインスタンスに共通であるという特徴がある。ユーザ隔離スコープに具現されるリソースビューの修正は、ユーザ隔離スコープに関連して、ユーザのために実行している適用可能なアプリケーション隔離スコープに関連するすべてのアプリケーションに共通であることを特徴とする。
このコンセプトは、サブスコープに拡大適用することができる;ユーザサブスコープに具現されるリソースビューの修正は、ユーザ隔離サブスコープに関連して、ユーザまたはユーザのグループのために実行され、適用されるすべてのアプリケーションに共通である。この説明全体で、一般的な参照符号が「スコープ」に言及する場合は常に、サブスコープが存在する場合は、サブスコープも指示することを意図している。
アプリケーションが、ファイルシステムまたはレジストリデータベースの一部など、ネイティブリソースのレジストリデータベースの一覧を要求する場合、仮想化一覧は、先ず、ネイティブリソースの「システムスコープ」インスタンス、つまり、システム層内に見られるインスタンスがあれば、そのインスタンスを一覧にすることによって構成される。次に、要求されたリソースの「アプリケーションスコープ」インスタンス、つまり、適切なアプリケーション隔離スコープ内に見られるインスタンスがあれば、そのインスタンスが一覧にされる。アプリケーション隔離スコープ内で遭遇する一覧の任意のリソースは、ビューに追加される。一覧のリソースが、ビュー内に既に存在する場合(システムスコープ内にも存在していたため)、アプリケーション隔離スコープ内で遭遇するリソースのインスタンスと置き換えられる。同様に、要求されたリソースの「ユーザスコープ」インスタンス、つまり、適切なユーザ隔離スコープ内で見られるインスタンスがあれば、そのインスタンスが一覧にされる。やはり、ユーザ隔離スコープ内で遭遇する一覧の任意のリソースは、ビューに追加される。ネイティブリソースが既にビュー内に存在する場合(システムスコープ、または適切なアプリケーション隔離スコープ内に存在していたため)、ユーザ隔離スコープ内で遭遇するリソースのインスタンスと置き換えられる。この方法では、ネイティブリソースの任意の一覧は、遭遇するネイティブリソースの仮想化を適切に反映する。概念上、複数のサブスコープを含む隔離スコープを一覧にする場合、同じ方法が適用される。個々のサブスコープが一覧にされ、より上位のサブスコープのリソースは、統合されたビュー内のより下位のサブスコープの一致するインスタンスと置き換えられる。
他の実施態様では、一覧は、逆ではなく、ユーザ隔離スコープ層からシステム層まで行うことができる。これらの実施態様では、ユーザ隔離スコープが一覧にされる。次に、アプリケーション隔離スコープが一覧にされ、アプリケーション隔離スコープ内に表示されており、ユーザ隔離スコープ内で遭遇しなかった任意のリソースインスタンスは、構成中の統合ビューに追加される。類似のプロセスは、システムスコープ内にのみ表示されるリソースについて繰り返すことができる。
さらに他の実施態様では、すべての隔離スコープは同時に一覧にされ、個々の一覧が結合される。
あるアプリケーションが、ネイティブリソースの既存のインスタンスを開こうとするが、そのリソースを修正する意図はない場合、アプリケーションに返される特定のインスタンスは、仮想スコープ内に見られるインスタンスであるか、あるいは同様に、要求されたリソースの親の仮想化一覧内に表示されると思われるインスタンスである。隔離環境の観点から、アプリケーションは、「仮想リソース」を開くことを要求すると考えられ、その要求を満たすために使用されるネイティブリソースの特定のインスタンスは、要求されたリソースに対応する「リテラルリソース」であると考えられる。
ユーザのために実行されるアプリケーションが、リソースを開こうとして、そのリソースを修正する意図があって開こうとしている場合、アプリケーション隔離スコープおよびシステムスコープ内のリソースは、ユーザのために実行されるアプリケーションに共通であるため、当該アプリケーションインスタンスには、一般に、修正するためのリソースのプライベートコピーが与えられる。一般に、リソースのユーザスコープコピーは、ユーザスコープされた当該インスタンスが既に存在しない限り作成される。仮想スコープによって提供される統合ビューの定義は、アプリケーションスコープまたはシステムスコープのリソースをユーザ隔離スコープにコピーする動作は、仮想スコープによって、当該ユーザおよびアプリケーション、任意の他のユーザ、また任意の他のアプリケーションインスタンスに提供される統合ビューを変更しないことを意味する。ユーザのために実行されるアプリケーションインスタンスによって行われるコピーされたリソースに対する後続の修正は、同じユーザ隔離スコープを共用しない他のいずれかのアプリケーションインスタンスの統合ビューに影響しない。つまり、これらの修正は、同じアプリケーション隔離スコープに関連しない他のユーザ、またはアプリケーションインスタンスのためのネイティブリソースの統合ビューを変更しない。
アプリケーションは、特定の隔離スコープ内にインストールし得る(以下で、より詳細に説明する)。隔離スコープ内にインストールされるアプリケーションは、常に、当該スコープに関連付けられる。あるいは、アプリケーションは、特定の隔離スコープ、またはある数の隔離スコープを開始し得る。実際上、アプリケーションは、1つまたは複数の隔離スコープで開始され、関連付けられる。関連する隔離スコープ、またはスコープは、ネイティブリソースの特定のビューをプロセスに提供する。アプリケーションは、システムスコープで開始することができ、つまりアプリケーションは、どの隔離スコープにも関連付けなくてよい。その結果、Internet Explorerなどのオペレーティングシステムのアプリケーション、また隔離環境内の第三者のアプリケーションの選択的な実行が可能になる。
アプリケーションがどこにインストールされているかに関係なく、アプリケーションをある隔離スコープ内で開始するこの能力は、アプリケーションを当該隔離スコープ内に別個にインストールする必要がなく、アプリケーションの互換性および適合性問題を軽減する。インストールされているアプリケーションを異なる隔離スコープで選択的に開始する能力は、ヘルパーアプリケーション(Word、Notepadなど)を必要とするアプリケーションが、これらのヘルパーアプリケーションを同じ規則集合で開始する能力を提供する。
さらに、複数の隔離環境内でアプリケーションを開始する能力は、隔離アプリケーションおよび共通アプリケーション間をより良好に統合することを可能にする。
次に、図8Cを参照し、簡潔に説明すると、プロセスを隔離スコープと関連付ける方法は、一時停止状態でプロセスを開始するステップを含む(ステップ882)。所望の隔離スコープに関連する規則が検索され(ステップ884)、そのプロセスの識別子、および検索された規則が、メモリ要素内に記憶され(ステップ886)、一時停止されたプロセスが再開される(ステップ888)。プロセスによって作成されるネイティブリソースにアクセスするための後続のコールは傍受されるか、またはフックされ(ステップ890)、プロセス識別子に関連する規則がある場合、その規則を使用して、要求されたリソースに対するアクセスを仮想化する(ステップ892)。
さらに図8Cをより詳細に参照すると、プロセスは、一時停止常態で開始される(ステップ882)。実施態様によっては、このタスクを達成するために、カスタムランチャープログラムが使用される。これらの実施態様のいくつかでは、ランチャーは、選択された隔離スコープでプロセスを開始するように特に設計される。他の実施態様では、ランチャーは、たとえばコマンドラインオプションにより、所望の隔離スコープの明細を入力として認める。
所望の隔離スコープに関連する規則が検索される(ステップ884)。実施態様によっては、規則は、持続的な記憶要素、たとえばハードディスクドライブまたはその他の固体メモリ要素から検索される。規則は、関係データベース、フラットファイルデータベース、ツリー構造データベース、2進ツリー構造、またはその他の持続データ構造として記憶し得る。他の実施態様では、規則は、規則を特に記憶するように構成されたデータ構造内に記憶し得る。
プロセスid(PID)などのプロセスの識別子、および検索された規則は、メモリ要素内に記憶される(ステップ886)。実施態様によっては、新しいプロセスの生成に関するオペレーティングシステムのメッセージを受信するカーネルモードドライバが提供される。これらの実施態様では、PIDおよび検索された規則は、ドライバのコンテキスト内に記憶することができる。他の実施態様では、ネイティブリソース要求を傍受するファイルシステムのフィルタドライバ、またはミニフィルタが提供される。これらの実施態様では、PID、および検索された規則は、フィルタ内に記憶することができる。さらに他の実施態様では、すべての傍受は、ユーザモードのフッキングによって行われ、PIDはまったく記憶されない。規則は、プロセスの開始時にユーザモードのフッキング装置によってロードされ、規則は、プロセス時に完全に実行されるため、その他の構成要素は、PIDに適用される規則を知る必要はない。
一時停止プロセスが再開し(ステップ888)、プロセスによって作成されるネイティブリソースにアクセスするための後続のコールが傍受またはフックされ(ステップ890)、プロセス識別子に関連する規則があれば、要求されたリソースに対するアクセスを仮想化するために、その規則が使用される(ステップ892)。実施態様によっては、ファイルシステムのフィルタドライバ、またはミニフィルタ、またはファイルシステムドライバは、ネイティブリソースにアクセスする要求を傍受し、傍受された要求に関連するプロセス識別子が、一連の規則に関連付けられているかどうかを決定する。関連付けられている場合、記憶されたプロセス識別子に関連する規則は、ネイティブリソースにアクセスする要求を仮想化するために使用される。関連付けられていない場合、ネイティブリソースにアクセスする要求は、修正されずに通過する。他の実施態様では、動的にリンクされるライブラリは、新たに生成されたプロセス内にロードされ、ライブラリは隔離規則をロードする。さらに他の実施態様では、カーネルモード技術(フッキング、フィルタドライバ、ミニフィルタ)、およびユーザモード技術はともに、ネイティブリソースにアクセスするためのコールを傍受するために使用される。ファイルシステムフィルタドライバが規則を記憶する実施態様では、ライブラリは、ファイルシステムのフィルタドライバから規則をロードすることができる。
隔離スコープに関連するプロセスの「子」プロセスは、その「親」プロセスの隔離スコープに関連付けられる。実施態様によっては、これは、子プロセスが生成される時に、ファイルシステムフィルタドライバを通知するカーネルモードドライバによって行われる。これらの実施態様では、ファイルシステムフィルタドライバは、親プロセスのプロセス識別子が隔離スコープに関連付けられているかどうかを決定する。関連付けられている場合、ファイルシステムフィルタドライバは、新たに生成された子プロセスのプロセス識別子と、親プロセスの隔離スコープとの関連性を記憶する。他の実施態様では、カーネルモードドライバを使用せずに、システムから直接ファイルシステムフィルタドライバを呼び出すことができる。他の実施態様では、隔離スコープに関連するプロセスでは、新しいプロセスを生成するオペレーティングシステムの機能がフックまたは傍受される。新しいプロセスを生成する要求が、こうしたプロセスから受信された場合、親の新しい子プロセスと隔離スコープ間の関連性が記憶される。
実施態様によっては、スコープまたはサブスコープは、プロセス全体ではなく個々のスレッドに関連付けることができ、その結果、スレッドごとに隔離を行うことが可能である。実施態様によっては、スレッドごとの隔離は、ServicesおよびCOM+サーバに使用し得る。
実施態様によっては、隔離環境は、追加の機能をアプリケーションストリーミングクライアント552に提供するために使用される。これらの実施態様の1つでは、アプリケーションプログラムは、隔離環境内で実行される。これらとは別の実施態様では、検索された複数のアプリケーションファイルは隔離環境内に存在する。これらとはさらに別の実施態様では、ローカルマシン10上のレジストリの変更は、隔離環境内で行われる。
一実施態様では、アプリケーションストリーミングクライアント552は、隔離環境556を含む。実施態様によっては、アプリケーションストリーミングクライアント552は、ファイルに対するアプリケーション要求を傍受するファイルシステムフィルタドライバ564を含む。これらの実施態様の1つでは、ファイルシステムフィルタドライバ564は、既存のファイルを開くためのアプリケーション要求を傍受して、そのファイルが隔離環境556内に存在しないと決定する。これらとは別の実施態様では、ファイルシステムフィルタドライバ564は、ファイルが隔離環境556内に存在しないという決定に応じて、ストリーミングサービス554に要求をリダイレクトする。ストリーミングサービス554は、複数のアプリケーションファイルからファイルを抽出し、そのファイルを隔離環境556内に記憶し得る。次に、ファイルシステムフィルタドライバ564は、ファイルの記憶されたコピーでファイル要求に応答し得る。実施態様によっては、ファイルシステムフィルタドライバ564は、ストリーミングサービス554がファイルまたは複数のアプリケーションファイルを検索しなかったという指示、および隔離環境556内にファイルは存在しないという決定に応じて、ファイル要求をファイルサーバ540にリダイレクトし得る。実施態様によっては、ストリーミングサービス554は、ファイルおよびアプリケーションの記憶または提供を加速するため、以下で説明する加速技術の一部または全部を実行するための加速プログラム6120を含み得る。
実施態様によっては、ファイルシステムフィルタドライバ564は、矛盾するかまたは一致しないデータが隔離環境556内に表示されるのを防止するため、厳密な隔離規則を使用する。これらの実施態様の1つでは、リソース要求をユーザ隔離環境内で傍受するファイルシステムフィルタドライバ564は、要求をアプリケーション隔離環境にリダイレクトし得る。これらとは別の実施態様では、ファイルシステムフィルタドライバ564は、システムスコープに対する要求をリダイレクトしない。
一実施態様では、ストリーミングサービス554は、IOCTLコマンドを使用して、フィルタドライバと通信する。別の実施態様では、ファイルサーバ540に対する通信は、Microsoft SMBストリーミングプロトコルを使って受信される。
実施態様によっては、パッケージ機構530は、使用可能なアプリケーションとして発行されたファイルタイプのリストをマニフェストファイル内に記憶し、アプリケーション発行ソフトウェアが、この情報を使用できるようにする。これらの実施態様の1つでは、パッケージ機構530は、ステージングマシン上の隔離環境へのアプリケーションプログラムのインストールの監視から情報を受信する。これらとは別の実施態様では、パッケージ機構530のユーザは、この情報をパッケージ機構530に提供する。他の実施態様では、access suiteコンソール520内のアプリケーション発行ソフトウェアは、マニフェストファイルを調査して、access suiteコンソール520のユーザに対し、要求されたアプリケーションの発行に関連する可能性がある可能なファイルタイプを提示する。ユーザは、特定の発行済みアプリケーションに関連付けるファイルタイプを選択する。ファイルタイプは、アプリケーション一覧作成時点でローカルマシン10に提示される。
ローカルマシン10は、クライアントエージェント580を含み得る。クライアントエージェント560は、ファイルタイプをアプリケーションプログラムに関連付け、関連性に応じてアプリケーションプログラムを実行する方法を選択するための機能を提供する。一実施態様では、クライアントエージェント560は、Program Neighborhoodアプリケーションである。
アプリケーションプログラムが実行のために選択される場合、ローカルマシン10は、アプリケーションプログラムのファイルタイプに関連する実行方法に関して決定を行う。一実施態様では、ローカルマシン10は、ファイルタイプが、アプリケーションファイルの検索、および隔離環境内における実行のために、アプリケーションストリーミングセッションを要求する実行方法に関連すると決定する。この実施態様では、ローカルマシン10は、アプリケーションプログラムのローカルバージョンを開始するのではなく、アプリケーションストリーミングクライアント552に対する要求をリダイレクトし得る。別の実施態様では、クライアントエージェント560が決定を行う。さらに別の実施態様では、クライアントエージェント560は、要求をアプリケーションストリーミングクライアント552にリダイレクトする。
一実施態様では、アプリケーションストリーミングクライアント552は、アプリケーションプログラムに関連するアクセス情報をリモートマシン30から要求する。実施態様によっては、アプリケーションストリーミングクライアント552は、アクセス情報を含む実行可能なプログラムを受信する。これらの実施態様の1つでは、アプリケーションストリーミングクライアント552は、リモートマシン上のアプリケーションプログラムの実行から生成されるアプリケーション出力データを、ローカルマシン10上に表示することが可能な実行可能プログラムを受信する。これらとは別の実施態様では、アプリケーションストリーミングクライアント552は、アプリケーションストリーミングセッション全体で、アプリケーションプログラム検索し、ローカルマシン10上の隔離環境でアプリケーションプログラムを実行することが可能な実行可能プログラムを受信する。この実施態様では、アプリケーションストリーミングクライアント552は、受信した実行可能プログラムを実行し得る。これらとはさらに別の実施態様では、リモートマシン30は、上記のとおり、アプリケーション解決の実行に応じてローカルマシン10に提供する実行可能プログラムを選択する。
次に、図9を参照すると、フロー図は、アプリケーションを実行するための方法で行われるステップの一実施態様を示す。図7のステップ214に関連して上記で説明したとおり、ローカルマシン10は、複数のアプリケーションファイルを受信および実行する。簡潔に説明すると、ローカルマシン10は、複数のアプリケーションファイルにアクセスし、アプリケーションストリームを受信することが可能な第1クライアントを実行するためのアクセス情報を含むファイルを受信する(ステップ902)。ローカルマシン10は、ファイルに応じて、複数のアプリケーションファイルの識別表示を検索する(ステップ904)。ローカルマシン10は、ファイルに応じて、複数のアプリケーションファイルの実行に必要な少なくとも1つの特性を検索する(ステップ906)。ローカルマシン10は、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する(ステップ908)。ローカルマシン10は、第2クライアントを実行し、第2クライアントは、ローカルマシン10に少なくとも1つの特性がないという決定に応じて、リモートマシン上で複数のアプリケーションファイルを実行することを要求する。
図9をより詳細に参照すると、ローカルマシン10は、複数のアプリケーションファイルにアクセスし、アプリケーションストリームを受信することが可能な第1クライアントを実行するためのアクセス情報を含むファイルを受信する(ステップ902)。一実施態様では、ローカルマシン10は、アプリケーションプログラムを含む複数のアプリケーションファイルのロケーションの識別表示を含むアクセス情報を受信する。別の実施態様では、ローカルマシン10は、アプリケーションプログラムの実行の要求に応じてファイルを受信する。さらに別の実施態様では、アクセス情報は、複数のアプリケーションファイルが、アプリケーションサーバまたはファイルサーバなどのリモートマシン30’上に存在するという指示を含む。さらに別の実施態様では、アクセス情報は、アプリケーションストリーミングセッション上のリモートマシン30から複数のアプリケーションファイルを検索し得る。
ローカルマシン10は、ファイルに応じて、複数のアプリケーションファイルの識別表示を検索する(ステップ904)。一実施態様では、ローカルマシン10は、アクセス情報を含むファイルに応じて、複数のアプリケーションファイルが存在するリモートマシンを識別する。別の実施態様では、ローカルマシン10は、リモートマシン30から、複数のアプリケーションファイルを識別するファイルを検索する。実施態様によっては、複数のアプリケーションファイルは、アプリケーションプログラムを含む。他の実施態様では、複数のアプリケーションファイルは、複数のアプリケーションプログラムを含む。さらに他の実施態様では、複数のアプリケーションファイルは、単一アプリケーションプログラムの複数のバージョンを含む。
さらに図10を参照すると、フロー図は、ファイルサーバ540などのリモートマシン30’上に存在する複数のアプリケーションファイルの一実施態様を示す。図10では、パッケージと呼ばれる複数のアプリケーションファイルは、1つまたは複数のアプリケーションプログラムの3つの異なるバージョンを含むアプリケーションファイルを含む。
一実施態様では、1つまたは複数のアプリケーションプログラムの1つのバージョンを含み、パッケージ内に記憶されたアプリケーションファイルの各々のサブセットは、ターゲットと呼ばれる。たとえば、ターゲット1は、アプリケーションプログラムを処理するワード、および表計算プログラムの1つのバージョンであって、Microsoft Windows(登録商標) 2000オペレーティングシステムの英語バージョンと互換性のあるバージョンを含む。ターゲット2は、ワード処理アプリケーションプログラムおよび表計算プログラムの1つのバージョンであって、Microsoft XPオペレーティングシステムの英語バージョンと互換性のあるバージョンを含む。ターゲット3は、ワード処理アプリケーションプログラムおよび表計算プログラムの1つのバージョンであって、サービスパック3を含むMicrosoft Windows(登録商標) 2000オペレーティングシステムの日本語バージョンと互換性のあるバージョンを含む。
次に、図9を参照すると、実施態様によっては、複数のアプリケーションファイルをホストするリモートマシン30から検索されたファイルは、複数のアプリケーションファイル内に含まれるパッケージおよびターゲットの説明を含む。他の実施態様では、リモートマシン30から検索されたファイルは、ローカルマシン10によって実行を要求されたアプリケーションプログラムを含む複数のアプリケーションファイルを識別する。
ローカルマシン10は、ファイルに応じて、複数のアプリケーションファイルの実行に必要な少なくとも1つの特性を検索する(ステップ906)。実施態様によっては、ローカルマシン10は、当該ローカルマシンが特定の特性を含まない限り、アプリケーションプログラムを実行しないことがある。これらの実施態様の1つでは、様々なアプリケーションプログラムは、ローカルマシン10が、他のアプリケーションプログラムによって必要とされる特性とは異なる特性を含む。これらとは別の実施態様では、ローカルマシン10は、ローカルマシン10によって要求されるアプリケーションプログラムを含む複数のアプリケーションファイルの実行に必要な少なくとも1つの特性の識別表示を受信する。
ローカルマシンは、当該ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する(ステップ908)。一実施態様では、ローカルマシン10は、ローカルマシン10上のオペレーティングシステムを評価して、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。別の実施態様では、ローカルマシン10は、ローカルマシン10上のオペレーティングシステムが使用する言語を識別し、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。さらに別の実施態様では、ローカルマシン10は、ローカルマシン10上のオペレーティングシステムのリビジョンレベルを識別し、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。さらに別の実施態様では、ローカルマシン10は、ローカルマシン10上に存在するアプリケーションプログラムのアプリケーションバージョンを識別し、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。実施態様によっては、ローカルマシン10は、ローカルマシン10がデバイスドライバを含むかどうかを決定して、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。他の実施態様では、ローカルマシン10は、ローカルマシン10がオペレーティングシステムを含むかどうかを決定して、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。さらに他の実施態様では、ローカルマシン10は、ローカルマシン10がライセンスを含むかどうかを決定して、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。
ローカルマシン10は、第2クライアントを実行し、ローカルマシン10は少なくとも1つの特性を持たないという決定に応じて、第2クライアントは、リモートマシン30上の複数のアプリケーションファイルの実行を要求する(ステップ910)。一実施態様では、ローカルマシン10は、ローカルマシン10が少なくとも1つの特性を持たないと決定した場合、ローカルマシン10は、アプリケーションストリームを受信することが可能な第1クライアントを実行しない。別の実施態様では、ポリシーは、ローカルマシン10が少なくとも1つの特性を持たない場合、ローカルマシン10が、アプリケーションストリーム上の複数のアプリケーションファイルを受信することを禁止する。実施態様によっては、ローカルマシン10は、ローカルマシン10が少なくとも1つの特性を含まないと決定する。これらの実施態様の1つでは、ローカルマシン10は第1クライアントを実行し、第1クライアントは、ローカルマシン上で実行されるリモートマシン30からの複数のアプリケーションファイルを含むアプリケーションストリームを受信する。
実施態様によっては、ローカルマシン10は、リモートマシン上の複数のアプリケーションファイルの実行を要求する。ローカルマシン10が少なくとも1つの特性を持たないと決定すると、第2クライアントを実行する。これらの実施態様の1つでは、第2クライアントは、複数のアプリケーションファイルをホストするリモートマシン30に要求を伝送する。これらとは別の実施態様では、リモートマシン30は、アプリケーションプログラムを含む複数のアプリケーションファイルを実行し、アプリケーション出力データを生成する。これらとはさらに別の実施態様では、第2クライアントは、リモートマシン上の複数のアプリケーションファイルの実行によって生成されるアプリケーション出力データを受信する。実施態様によっては、第2クライアントは、独立計算アーキテクチャ提示レベルプロトコル、Remote Desktop Windows(登録商標) 提示レベルプロトコル、またはX−Windows(登録商標)提示レベルプロトコルを介してアプリケーション出力データを受信する。これらとはさらに別の実施態様では、第2クライアントは、アプリケーション出力をローカルマシン10上に表示する。
実施態様によっては、第2クライアントは、複数のアプリケーションファイルをホストしないリモートマシン30に要求を伝送する。これらの実施態様の1つでは、リモートマシン30は、複数のアプリケーションファイルをホストする第2リモートマシン30に、複数のアプリケーションファイルを要求し得る。これらとは別の実施態様では、リモートマシン30は、アプリケーションストリーミングセッション全体で、複数のアプリケーションファイルを第2リモートマシン30から受信し得る。これらとはさらに別の実施態様では、リモートマシン30は、受信した複数のアプリケーションファイルを隔離環境に記憶し、アプリケーションプログラムを隔離環境内で実行する。これらとはさらに別の実施態様では、リモートマシンは、生成されたアプリケーション出力データを、ローカルマシン上の第2クライアントに伝送する。
再び図5を参照すると、一実施態様では、アプリケーションストリームを受信可能な第1クライアントは、アプリケーションストリーミングクライアント552である。アプリケーションストリーミングクライアント552は、ファイルを受信し、ファイルに応じて、複数のアプリケーションファイルの識別表示、および複数のアプリケーションファイルの実行に必要な少なくとも1つの特性を検索し、ローカルマシン10が少なくとも1つの特性を含むかどうかを決定する。別の実施態様では、第2クライアントは、クライアントエージェント560である。実施態様によっては、クライアントエージェント560は、ローカルマシン10が少なくとも1つの特性を持たないという、アプリケーションストリーミングクライアント552による決定に応じて、ファイルをアプリケーションストリーミングクライアント552から受信する。
実施態様によっては、ローカルマシン10上で実行されるアプリケーション566は、Win32 FindFirstFile( )およびFindNextFile( )APIコールを使用して、アプリケーション566に関連するファイルの一覧を作成する。これらの実施態様の1つでは、複数のアプリケーションファイルは、アプリケーション566を含む。これらとは別の実施態様では、複数のアプリケーションファイル内のすべてのファイルが、ローカルマシン10上に存在することはない。これらとはさらに別の実施態様では、ストリーミングサービス554は、アーカイブ対象ファイル内の複数のアプリケーションファイルを検索したが、複数のアプリケーションファイルのサブセットのみを抽出した。これらとはさらに別の実施態様では、ストリーミングサービス554、およびファイルシステムフィルタドライバ564は、要求されたファイルがローカルマシン10上に存在しない場合でも、一覧要求を満たすための機能を提供する。
一実施態様では、この機能は、一覧要求を傍受し、複数のアプリケーションファイル内のすべてのファイルがローカルマシン10上に存在するかのように、データを提供することによって提供される。別の実施態様では、この機能は、ファイルシステムフィルタドライバ564が、IRP_MJ_ディレクトリ_CONTROL IOCTLなどのIOCTLコマンドとして伝送される一覧要求を傍受することによって提供される。ファイルシステムフィルタドライバ564は、コールを傍受すると、要求をストリーミングサービス554にリダイレクトする。一実施態様では、ファイルシステムフィルタドライバ564は、要求をストリーミングサービス554にリダイレクトする前に、要求された一覧が、ローカルマシン10上の隔離環境内に存在すると決定する。別の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイル内のファイルであって、複数のアプリケーションファイルに関連するディレクトリ構造の一覧を含むファイルを使用して、要求を履行する。さらに別の実施態様では、ストリーミングサービス554は、一覧要求を履行するために、ファイルシステムフィルタドライバ564に対する要求に応答する。
次に、図11を参照すると、フロー図は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するための方法で行われるステップの一実施態様を示す。簡潔に説明すると、(i)リモートマシンによって記憶されたアプリケーションプログラムを表すディレクトリ構造、(ii)記憶されたアプリケーションプログラムを含む各々のファイルに関連するメタデータは、リモートマシンから受信される(ステップ1102)。ディレクトリ構造およびメタデータが記憶される(ステップ1104)。ディレクトリ構造内の特定のファイルに関連するメタデータにアクセスするための少なくとも1つの要求が受信される(ステップ1106)。少なくとも1つの要求は、記憶されたメタデータを使用して応答される(ステップ1108)。
図11をより詳細に参照すると、リモートマシンによって記憶されたアプリケーションプログラムを表すディレクトリ構造、および記憶されたアプリケーションプログラムを含む各々のファイルに関連するメタデータは、リモートマシンから受信される(ステップ1102)。一実施態様では、ストリーミングサービス554は、ディレクトリ構造およびメタデータを受信する。別の実施態様では、ストリーミングサービス554は、ストリーミングサービス554が、記憶されたアプリケーションプログラムを含む複数のアプリケーションファイルを検索する時に、ディレクトリ構造およびメタデータを受信する。さらに別の実施態様では、ディレクトリ構造およびメタデータは、複数のアプリケーションファイルのファイル内に記憶される。
一実施態様では、各々のファイルに関連するメタデータは、少なくとも1つのファイルの別名を含む。別の実施態様では、各々のファイルに関連するメタデータは、少なくとも1つのファイルに1つの省略名を含み、この名前は、8つの文字、1つのドット、および3桁の拡張子を有する。さらに別の実施態様では、各々のファイルに関連するメタデータは、少なくとも1つのファイルの別名と、少なくとも1つのファイルの省略名との間のマッピングを含む。実施態様によっては、複数のアプリケーションファイル内のファイルは、別のファイル名を有する。これらの実施態様の1つでは、ファイルが、ローカルマシンに対するストリーミングサービス554によって検索される場合、ファイルは、ファイルの別名と少なくとも1つのファイルの省略名との間のマッピングに応じて、省略名に関連付けられる。
ディレクトリ構造およびメタデータが記憶される(ステップ1104)。一実施態様では、ディレクトリ構造およびメタデータは、隔離環境556内に記憶される。別の実施態様では、ディレクトリ構造およびメタデータは、キャッシュメモリ要素内に記憶される。さらに別の実施態様では、リモートマシンによって記憶されたアプリケーションプログラムを表すディレクトリ構造は、ローカルマシンを実行するアプリケーションプログラムを表すディレクトリ構造の一覧を生成するために使用される。
ディレクトリ構造内の特定のファイルに関連するメタデータにアクセスするための少なくとも1つの要求が受信される(ステップ1106)。一実施態様では、この要求は、ファイル一覧の要求である。別の実施態様では、要求は、記憶されたアプリケーションプログラムを含むファイルのコピーが、ローカルに存在するかどうかを決定する要求である。
一実施態様では、要求は、ローカルマシン上の隔離環境内で実行されるアプリケーション566によって行われる。別の実施態様では、要求は、アプリケーションストリーミングクライアント552よって行われる。さらに別の実施態様では、要求は、アプリケーション566のために行われる。
一実施態様では、要求は、ファイルシステムフィルタドライバ564によって傍受される。別の実施態様では、要求は、ファイルシステムフィルタドライバ564によって、アプリケーションストリーミングクライアント552に回送される。さらに別の実施態様では、要求は、ファイルシステムフィルタドライバ564によって、ストリーミングサービス554に回送される。
実施態様によっては、要求は、ディレクトリの一覧を作成するオペレーティングシステムの1つまたは複数の機能を置き換える機能によってフックされる。別の実施態様では、ライブラリに動的にリンクするフッキングが、要求を傍受するために使用される。フッキング機能は、ユーザモードまたはカーネルモードで実行し得る。フッキング機能がユーザモードで実行される実施態様では、フッキング機能は、プロセスが生成される時に、当該プロセスのアドレス空間内にロードすることができる。フッキング機能が、カーネルモードで実行される実施態様では、フッキング機能は、ファイル動作の要求をディスパッチする際に使用されるオペレーティングシステムリソースに関連付けることができる。個々のオペレーティングシステム機能が、ファイルオペレーションの各々のタイプごとに提供される実施態様では、各々の機能は、別個にフックすることができる。あるいは、傍受によって、いくつかのタイプのファイル動作に対するコールを生成または開放する単一フッキング機能を提供することができる。
少なくとも1つの要求は、記憶されたメタデータを使用して応答される(ステップ1108)。一実施態様では、ファイルシステムフィルタドライバ564が要求に応答する。別の実施態様では、アプリケーションストリーミングクライアント552が要求に応答する。さらに別の実施態様では、ストリーミングサービス554が要求に応答する。一実施態様では、記憶されたメタデータは、少なくとも1つの要求に応答するためにアクセスされる。別の実施態様では、要求は、ファイルのリモートコピーがローカルに存在するという虚偽の指示で応答される。
一実施態様では、Windows(登録商標)オペレーティングシステムのFindFirst動作が、受信されたメタデータに応答して履行される。別の実施態様では、Windows(登録商標)オペレーティングシステムのFindNext動作が、受信されたメタデータに応じて履行される。さらに別の実施態様では、ディレクトリ構造内のルートノードが、受信されたメタデータに応じて履行される。実施態様によっては、WIN32_FIND_DATA APIなどのアプリケーション層APIが、操作に応答するために使用される。他の実施態様では、FILE_BOTH_DIR_INFORMATIONなどのカーネル層APIが、操作に応答するために使用される。
一実施態様では、メタデータは、ディレクトリ構造内のノードに関連するアクセス時間を識別するための動作を履行する。別の実施態様では、メタデータは、ディレクトリ構造内のノードに関連する修正時間を識別するための動作を履行する。さらに別の実施態様では、メタデータは、ディレクトリ構造内の修正されたノードを識別するための動作を履行する。
次に、図12を参照すると、ブロック図は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するシステムであって、ストリーミングサービス554と、ファイルシステムフィルタドライバ564と、ディレクトリ構造570と、複数のアプリケーションファイル572と、メタデータ574と、キャッシュメモリ要素576とを備えるシステムの一実施態様を示す。簡潔に説明すると、ディレクトリ構造570は、少なくとも1つのアプリケーションプログラムに関連する複数のファイルを識別する。メタデータ574は、複数のファイルの少なくとも1つに関連付けられ、複数のファイルの少なくとも1つは、リモートマシン上に存在する。一実施態様では、ディレクトリ構造570は、メタデータ574を含む。キャッシュメモリ要素576は、ディレクトリ構造570を記憶する。ファイルシステムフィルタドライバ564は、リモートに記憶されたファイルの少なくとも1つに関連するメタデータにアクセスする要求を傍受し、キャッシュメモリ要素にアクセスし、記憶されたディレクトリ構造を使用して、少なくとも1つの要求に応答する。
実施態様によっては、ストリーミングサービス554は、ディレクトリ構造570およびメタデータ574を受信する。これらの実施態様の1つでは、ディレクトリ構造570は、アプリケーションプログラムに関連する複数のアプリケーションファイル572を表し、複数のアプリケーションファイル572は、リモートマシン30などのリモートマシンに存在する。これらとは別の実施態様では、メタデータ574は、Windows(登録商標)オペレーティングシステムFindFirst要求に応答するための情報を含む。これらとはさらに別の実施態様では、メタデータ574は、Windows(登録商標)オペレーティングシステムFindNext要求に応答するための情報を含む。これらとはさらに別の実施態様では、メタデータ574は、ディレクトリ構造内のルートノードの識別表示に対する要求に応答するための情報を含む。これらとは別の実施態様では、メタデータ574は、ディレクトリ構造内のノードの識別表示に対する要求に応答するための情報を含む。実施態様によっては、WIN32_FIND_DATA APIなどのアプリケーション層APIが、操作に応答するために使用される。他の実施態様では、FILE_BOTH_DIR_INFORMATIONなどのカーネル層APIが、操作に応答するために使用される。
実施態様によっては、ファイルに関する少量のメタデータ574は、たとえば、メタデータ識別子が、特定のメタデータ状態に一意に関連する文字列であるメタデータ識別子を使って、仮想名に接尾辞を付けることによって、リテラルファイル名内直接記憶することができる。メタデータ識別子は、1個または数個のビットのメタデータを指示または符号化することができる。仮想ファイル名によるファイルに対するアクセス要求は、メタデータ識別子の存在に基づくリテラルファイル名の可能な変形を確認し、リテラル名で応答するために、ファイル自体の名前を検索する要求がフックまたは傍受される。他の実施態様では、ファイルの1つまたは複数の別名は、仮想ファイル名およびメタデータ識別子から形成することができ、ファイルシステムによって提供されるハードリンクまたはソフトリンク機能を使用して形成することができる。これらのリンクの存在は、リンクの名前を使ってファイルに対するアクセス要求が与えられる場合、ファイルが見つからないことを指示することによって、隔離環境によりアプリケーションから隠すことができる。特定のリンクの存在または不在は、各々のメタデータ識別子の1ビットのメタデータを指示することができ、数ビットのメタデータを指示するために、複数の状態を取ることが可能なメタデータ識別子とのリンクが存在する場合がある。さらに他の実施態様では、ファイルシステムが、別のファイルストリームをサポートする場合、別のファイルストリームは、メタデータを具現するために形成される場合があり、ストリームのサイズは数ビットのメタデータを示す。さらに他の実施態様では、ファイルシステムは、ファイルシステム内の各々のファイルのある第三者のメタデータを記憶する能力を直接提供することができる。さらに他の実施態様では、別個のサブスコープは、削除されたファイルを記録するために使用することができ、当該サブスコープ内のファイル(プレースホルダーとしてマークされていない)の存在は、ファイルが削除されたことを意味すると解釈される。
一実施態様では、ユーザ隔離環境、アプリケーション隔離環境、およびシステムスコープ内のデータは、アプリケーションを表すディレクトリ構造のローカルな一覧を形成するために結合される。別の実施態様では、ストリーミングサービス554は、メタデータ574およびディレクトリ構造570にアクセスし、アプリケーション隔離環境にポピュレートする。さらに別の実施態様では、ファイルシステムフィルタドライバ564は、ディレクトリ構造のローカルな一覧を生成する。さらに別の実施態様では、ディレクトリ構造のローカルな一覧は、複数のアプリケーションファイル572内の少なくとも1つのファイルを識別し、当該少なくとも1つのファイルはリモートマシン上に存在し、ローカルマシン上には存在しない。実施態様によっては、ディレクトリ構造のローカルな一覧は、キャッシュメモリ要素576上に記憶される。他の実施態様では、ストリーミングサービス554はアプリケーション隔離環境、およびディレクトリ構造のローカルな一覧を生成する。
一実施態様では、ファイルシステムフィルタドライバ564は、ディレクトリ構造のローカルな一覧にアクセスするために、システムに伝送される要求を傍受する。別の実施態様では、ファイルシステムフィルタドライバ564は、要求を傍受した後、ローカルな一覧を生成する。さらに別の実施態様では、ファイルシステムフィルタドライバ564は、ローカルな一覧の要求をユーザ隔離環境にリダイレクトする。さらに別の実施態様では、ファイルシステムフィルタドライバ564は、ローカルな一覧の要求をアプリケーション隔離環境にリダイレクトする。
実施態様によっては、ファイルシステムフィルタドライバ564は、ディレクトリのローカルな一覧内のファイル識別子に対するアクセス要求を傍受し、ファイルはリモートマシン上に存在する。これらの実施態様の1つでは、ファイルシステムフィルタドライバ564は、図13に関連して以下でより詳細に説明するように、ストリーミングサービス554によるファイルの検索を要求する。
隔離環境内で実行されるアプリケーションはファイルに要求し、フィルタドライバは、これらの要求を傍受する。この要求がファイルを開くことである場合、フィルタドライバは、先ず、要求を隔離環境にリダイレクトし、要求が隔離環境によって履行され得るかどうかを決定する。コールが成功した場合、フィルタドライバは、隔離環境内に位置するファイルのインスタンスで要求に応答するであろう。
しかし、要求されたファイルが隔離環境内に存在しない場合、フィルタドライバは、複数のアプリケーションファイルからファイルを検索するために、要求をストリーミングサービス554に送信し、要求が完了するまで遮断し、次に、再び最初の開放を試みる。実施態様によっては、フィルタドライバからの要求を受信後、複数のアプリケーションファイルからのファイルを検索するためのストリーミングサービス554の機能は、「オンデマンドキャッシング」と呼ばれる。
次に、図13を参照すると、フロー図は、ローカルに実行されるアプリケーションプログラムに関連するディレクトリ構造内のリモートファイルにアクセスする方法で行われるステップの一実施態様を示す。簡潔に説明すると、ファイルにアクセスするためのアプリケーションによる要求が傍受される(ステップ1302)。要求は、第1隔離環境にリダイレクトされる(ステップ1304)。要求されたファイルは、第1隔離環境内に存在しないという決定が行われる(ステップ1306)。この要求は、ファイルが、リモートマシン上に存在する複数のアプリケーションファイルに関連するディレクトリ構造の一覧内で識別されないという決定に応じて、第2隔離環境にリダイレクトされる(ステップ1308)。要求されたファイルは、第2隔離環境はファイルを含まず、ファイルは一覧内で識別されるという決定に応じて、リモートマシンから検索される(ステップ1310)。
図13をより詳細に参照すると、ファイルにアクセスするためのアプリケーションによる要求が傍受される(ステップ1302)。一実施態様では、この要求は、ファイルシステムのフィルタドライバによって傍受される。別の実施態様では、ファイルシステムフィルタドライバは、ファイルにアクセスするためのすべての要求を傍受する。さらに別の実施態様では、アプリケーションストリーミングクライアント552は、この要求を傍受する。実施態様によっては、実行可能ファイルにアクセスするためのアプリケーションによる要求が傍受される。他の実施態様では、ファイルにアクセスするためのアプリケーションによる要求、ローカルマシン10上で実行されるアプリケーションの一部が傍受される。
この要求は、第1隔離環境にリダイレクトされる(ステップ1304)。一実施態様では、このアプリケーションは、第1隔離環境内で実行される。一実施態様では、このアプリケーションは、ワード処理プログラムまたは表計算プログラムなどのアプリケーションプログラムである。別の実施態様では、このアプリケーションは、アプリケーションストリーミングクライアント552である。さらに別の実施態様では、このアプリケーションは、アプリケーションストリーミングクライアント552内の構成要素であり、ローカルマシン10のユーザのためにアプリケーションプログラムを開始しようとする。別の実施態様では、ファイルシステムフィルタドライバは、この要求を第1隔離環境にリダイレクトする。
要求されたファイルがファイルが第1隔離環境内に存在しないという決定が行われる(ステップ1306)。一実施態様では、ファイルシステムフィルタドライバは、要求されたファイルは第1隔離環境内に存在しないという指示を受信する。
要求は、リモートマシン上に存在する複数のアプリケーションファイルに関連するディレクトリ構造の一覧内で識別される(ステップ1308)。一実施態様では、ディレクトリ構造の一覧は、第1アプリケーションの実行に関連してアクセス情報とともに受信される。別の実施態様では、この一覧は、第2アプリケーションを含む複数のアプリケーションファイルを識別する。この実施態様では、第1アプリケーションは、第2アプリケーションのローカルコピーである。
要求されたファイルは、第2隔離環境はファイルを含まず、ファイルは一覧内で識別されるという決定に応じて、リモートマシンから検索される(ステップ1310)。一実施態様では、要求されたファイルは、第2リモートマシンから検索される。別の実施態様では、要求されたファイルは、ファイルサーバから検索される。実施態様によっては、ディレクトリ構造の一覧は、ローカルマシン上に存在する複数のアプリケーションファイルを識別する。他の実施態様では、複数のアプリケーションファイルがローカルマシン上に存在することを指示する。これらの実施態様の1つでは、アプリケーション要求が、複数のアプリケーションファイル内のファイルであって、ディレクトリ構造の一覧が、ローカルマシン上に存在することを指示したファイルにアクセスする場合、このファイルは、アクセス要求の傍受後にファイルサーバから取得される。これらとは別の実施態様では、ファイルサーバは、要求されたファイルをローカルマシンにストリーミングする。これらとはさらに別の実施態様では、要求されたファイルの受信後、要求されたファイルは第2隔離環境内に記憶される。さらに他の実施態様では、アプリケーションが、複数のアプリケーションファイル内のファイルであって、ディレクトリ構造の一覧が、ローカルマシン上に存在することを指示するファイルにアクセスすることを要求する場合、ファイルのコピーが、ローカルキャッシュからアプリケーションに提供される。
実施態様によっては、要求されたファイルは暗号化される。他の実施態様では、要求されたファイルは、暗号化形式で記憶される。さらに他の実施態様では、ファイルを要求するアプリケーションは、アプリケーションが、要求されたファイルにアクセスする承認を持たない場合、要求されたファイルを解読することを妨げられる場合がある。
一実施態様では、ディレクトリ構造の一覧はファイルを識別しないという決定が行われる。この実施態様では、ファイルにアクセスする要求は、第1隔離環境外、および第2隔離環境外の環境にリダイレクトすることができる。
実施態様によっては、ファイルにアクセスするための第2要求が傍受される。これらの実施態様の1つでは、ファイルにアクセスする要求は、第2アプリケーションによって行われる。これらとは別の実施態様では、第2アプリケーションは、第3隔離環境内で実行される。これらとはさらに別の実施態様では、要求は、ファイルが一覧に記載されてなく、第2隔離環境がファイルを含むという決定に応じて、第2隔離環境にリダイレクトされる。ローカルマシンが、ファイルをファイルサーバから受信後、第2隔離環境内のファイルを記憶したという決定が行われ得る。さらに他の実施態様では、ファイルは第3隔離環境内に記憶される。
次に、図14を参照すると、ブロック図は、アプリケーションに関連するディレクトリ構造のファイルにアクセスするシステムの一実施態様をを示す。簡潔に説明すると、ローカルマシン10は、アプリケーションストリーミングクライアント552、ストリーミングサービス554、隔離環境556、ファイルシステムフィルタドライバ564、および第1アプリケーション566を含む。ローカルマシン10は、ファイルサーバ540、リモートマシン30、ウェブインターフェース558、第2アプリケーション566’と相互作用する。
ローカルマシン10は、第1アプリケーション566を実行するために、アプリケーションストリーミングクライアント552を初期化する。一実施態様では、アプリケーションストリーミングクライアント552は、第1アプリケーション566を検索および実行するために、ストリーミングサービス554を初期化する。実施態様によっては、複数のアプリケーションファイルは、第1アプリケーション566を含む。これらの実施態様の1つでは、ストリーミングサービス554は、複数のアプリケーションファイルを検索し、複数のアプリケーションファイルを隔離環境566内に記憶する。これらとは別の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイルが存在するが、複数のアプリケーションファイルの検索は行わないリモートマシンのロケーションを識別する。これらとはさらに別の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイル内のファイルのサブセットを検索する。これらとはさらに別の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイルを含むアーカイブファイルを検索する。
一実施態様では、第1アプリケーション566は、リモートマシン30上に存在する第2アプリケーション566’のローカルコピーを含む。別の実施態様では、複数のアプリケーションファイルはリモートマシン30上に存在し、リモートマシン30上に存在する第2アプリケーション566’を含む。さらに別の実施態様では、第2アプリケーション566’を実行するために、ローカルマシン10は、複数のアプリケーションファイルを検索し、ローカルマシン上に第1アプリケーション566を作成し、第1アプリケーション566を実行する。実施態様によっては、アプリケーション566および566’は、ワード処理アプリケーション、表計算アプリケーション、または提示アプリケーションなどのユーザアプリケーションである。
実施態様によっては、複数のアプリケーションファイルは、リモートマシン30上の複数のアプリケーションファイルに関連するディレクトリ構造を識別するファイルを含む。これらの実施態様の1つでは、ファイルは、複数のアプリケーションファイル内の各々のアプリケーションファイルに関するメタデータを含む。これらとは別の実施態様では、ストリーミングサービス554は、図12に関連して上記で説明したように、メタデータをファイルから検索して、複数のアプリケーションファイルに関連するディレクトリ構造の一覧を生成する。これらとはさらに別の実施態様では、ストリーミングサービス554は、第2アプリケーション566’を含む複数のアプリケーションファイルに関連するディレクトリ構造の一覧を記憶する。実施態様によっては、ストリーミングサービス554は、第2隔離環境内の一覧を記憶する。
一実施態様では、ストリーミングサービス554は、第1アプリケーション566に関連する初期実行可能ファイルを検索する。別の実施態様では、ストリーミングサービス554は、初期実行可能ファイルの検索後、ローカルマシン10上の第1アプリケーション566を実行する。さらに別の実施態様では、第1アプリケーション566は、ファイルは第1アプリケーション566の連続的な実行を必要とするため、複数のアプリケーションファイル内の他のファイルにアクセスすることを要求する。実施態様によっては、第1アプリケーション566は、隔離環境556内で実行される。
ファイルシステムフィルタドライバ564は、複数のアプリケーションファイル内のファイルにアクセスするため、隔離環境556内で実行される第1アプリケーション566による要求を傍受する。ファイルシステムフィルタドライバ564は、この要求を隔離環境556にリダイレクトする。要求されたファイルが隔離環境556内に存在する場合、要求されたファイルに対するアクセスは、第1アプリケーション566に提供される。
要求されたファイルが、隔離環境556内に存在しない場合、ファイルシステムフィルタドライバ564は、要求を第2隔離環境にリダイレクトする。一実施態様では、第2隔離環境は、一実施態様では、第2隔離環境は、ストリーミングサービス554によって生成されるとともに、第2アプリケーション566’を含む複数のアプリケーションファイルに関連するディレクトリ構造の一覧を含む。別の実施態様では、要求されたファイルは、ディレクトリ構造の一覧内で識別されるという決定が行われる。
実施態様によっては、ストリーミングサービス554は、セマフォを隔離環境556に提供する。これらの実施態様の1つでは、ファイルシステムフィルタドライバ564は、セマフォを使用して、複数のアプリケーションファイル内のファイルにアクセスする必要があることをストリーミングサービス554に指示する。他の実施態様では、ファイルシステムフィルタドライバ564は、スレッドを使用して、ファイルにアクセスする必要があることをストリーミングサービス554に指示する。
ファイルシステムフィルタドライバ564から通知を受信後、ストリーミングサービス554は、要求されたファイルを複数のアプリケーションファイルから検索する。これらとはさらに別の実施態様では、ストリーミングサービス554は、要求されたファイルを第2アプリケーション隔離環境内に記憶する。一実施態様では、ファイルに対するアクセス要求は、複数のアプリケーションファイルから検索されるファイルのインスタンスとともに履行され、第2隔離環境に記憶される。別の実施態様では、要求されたファイルは、第1隔離環境にも記憶される。
実施態様によっては、第2隔離環境はファイルを含まず、ファイルは一覧内で識別されるという決定が行われる。これらの実施態様の1つでは、ファイルは、第2アプリケーション566’を含む複数のアプリケーションファイルに関連するディレクトリ構造の一覧内で識別され、このファイルは、複数のアプリケーションファイル内のファイルである。これらとは別の実施態様では、ストリーミングサービス554は、ファイルをリモートマシンから検索しなかった。これらとはさらに別の実施態様では、ストリーミングサービス554は、要求されたファイルを含む複数のアプリケーションファイルを検索しなかった。これらとはさらに別の実施態様では、ストリーミングサービス554は、アーカイブ対象ファイル内の複数のアプリケーションファイルを検索したが、要求されたファイルをアーカイブファイルから検索しなかった。
一実施態様では、ストリーミングサービス554は、ファイルシステムのフィルタドライバと通信する送受信機を備える。別の実施態様では、送受信機は、リダイレクトされた要求をファイルシステムのフィルタドライバから受信する。さらに別の実施態様では、送受信機は、ファイルの要求を、要求されたファイルをホストするリモートマシンに回送する。一実施態様では、リモートマシンはファイルサーバ540である。別の実施態様では、要求は、要求をファイルサーバ540に経路指定するリモートマシン30に回送される。実施態様によっては、ファイルサーバ540は、要求されたファイルをローカルマシン10上の送受信機にストリーミングする。他の実施態様では、リモートマシン30は、要求されたファイルをローカルマシン10上の送受信機にストリーミングする。さらに他の実施態様では、送受信機は、要求されたファイルをファイルサーバ540から受信後、受信したファイルを第2隔離環境内に記憶する。
一実施態様では、ファイルシステムフィルタドライバ564は、第3隔離環境において、ローカルマシン10上で実行される第3アプリケーション566’’が行うファイルに対する第2アクセス要求を傍受する。別の実施態様では、ファイルシステムフィルタドライバ564は、ファイルに対するアクセス要求を第2隔離環境にリダイレクトする。さらに別の実施態様では、ファイルシステムフィルタドライバ564は、ストリーミングサービス554が、第3アプリケーション566’’によるアクセス要求の傍受の前に、受信したファイルを第2隔離環境に記憶したと決定する。
実施態様によっては、初期化の後、ストリーミングサービス554は、アプリケーションプログラムの実行前に、キャッシュを隔離環境内にポピュレートし得る。これらの実施態様の1つでは、ストリーミングサービス554は、レジストリファイルを隔離環境内にインストールする。これらとは別の実施態様では、ストリーミングサービス554は、ファイルの長い名前と短いファイル名との間のマッピングを記憶する。
一実施態様では、ローカルマシン上の空間を節約するために、キャッシュのサイズは制限することができる。実施態様によっては、キャッシュが、その限界に近づくと、キャッシュ内の最も古いファイルは、新しいファイルに場所を空けるために自動的にパージされる。これらの実施態様の1つでは、ファイルの年齢は、オペレーティングシステムが維持するタイムスタンプにより決定され、これは、「最終アクセス」タイムスタンプの時刻を指示する。ファイルの年齢のほか、ファイルタイプが考慮されることがあり−−2進実行可能ファイル(.EXE、.DLLなど)は、他のタイプの類似の年齢のファイルより長く維持され得る。
初期化後、ストリーミングサービス554は、現在キャッシュ内にあるファイルを一覧にし、キャッシュの全体のサイズを決定する。ファイルが、隔離環境556またはストリーミングサービス554によってキャッシュに追加された後、ストリーミングサービス554は、新しいファイルのキャッシュシステムに、新しいファイルのロケーションおよびサイズを通知する機能を呼び出す。新たにキャッシュされた各々のファイルのサイズは、現在のキャッシュのサイズの現在高に追加される。この新しい合計は、次に、キャッシュサイズの制限と比較され、限界を超えている場合、コードはスレッドを送信して、キャッシュを古くさせる。常に、このスレッドの1つのインスタンスのみを、ある特定の時に実行することができる。
スレッドは、現在キャッシュにあるすべてのファイルのリストを生成し、このリストを最終アクセスタイムスタンプ別に分類し、次に、リストを下方にたどり始め、スレッドの終了基準を満たすのに十分なディスク空間が解放されるまでファイルを削除する。終了基準は、限界未満のレベルまでのキャッシュサイズの減少に基づき、このレベルは、限界の割合として決められる(デフォルト値は10%)。限界を超えるのを防止するために必要である以上に削除すると、新しいファイルが追加されるごとに、キャッシュがスラッシングするのを防止する。
実施態様によっては、ストリーミングサービス554は、アプリケーションプログラムを含む複数のアプリケーションファイル内のすべてのファイルを、圧縮ファイル形式でローカルマシン10にコピーする能力を提供する。この能力は、「予備キャッシング」と呼ぶことができる。これらの実施態様の1つでは、アプリケーションプログラムが続いて実行される場合、すべてのパッケージ要求は、ネットワークを横断するのではなく、ローカルコピーに行く。これらの実施態様は、ローカルマシン10のユーザが、ユーザがネットワークにアクセスできない時に、アプリケーションプログラムを実行することを可能にし得る。
リモートマシン30は、ローカルマシン10によるアプリケーションの使用を監視する機能を含む。リモートマシン30は、たとえば、アプリケーションの実行または終了時に、ローカルマシン10によって使用される各々のアプリケーションの状態を監視し得る。一実施態様では、リモートマシン30は、ローカルマシン10が実行するアプリケーションの状態に関するメッセージを伝送するように、ローカルマシン10に要求する。別の実施態様では、ローカルマシン10が、リモートマシン30が存在するネットワークに接続する時、ローカルマシン10は、ローカルマシン10がネットワークに接続したことを指示するメッセージを伝送する。
一実施態様では、ローカルマシン10は、ローカルマシン10がリモートマシン30と相互作用し、1つまたは複数のアプリケーションを実行する時、セッションを有すると言われる。別の実施態様では、リモートマシン30は、あるセッションの期間中、リモートマシンから受信するアプリケーションの実行を承認するライセンスを維持するように、ローカルマシンに要求する。さらに別の実施態様では、セッションは、リモートマシンに割り当てられる一意のセッション識別子を有する。
一実施態様では、ローカルマシン10は、メッセージをリモートマシン30に伝送し、ローカルマシン10は、リモートマシン30と相互作用してアプリケーションプログラムを受信し、実行する。別の実施態様では、ローカルマシン10は、リモートマシン30から、セッション管理サーバ562などの第2リモートマシンの識別子を受信し、第2リモートマシンは、ローカルマシン10上のセッションに関連するすべての伝送のメッセージを受信し、記憶する。
実施態様によっては、セッション管理サーバ562は、ライセンス管理およびセッション監視サービスを提供するリモートマシン30である。これらの実施態様の1つでは、セッション管理サーバ562は、これらのサービスを提供するサーバ管理サブシステム508を含む。
一実施態様では、ローカルマシン10は、メッセージを直接セッション管理サーバ562に伝送する。別の実施態様では、ローカルマシン10は、別の実施態様では、ローカルマシン10は、メッセージをリモートマシン30に伝送し、リモートマシン30は、このメッセージを、ローカルマシン10の識別表示とともにセッション管理サーバ562に回送する。
ローカルマシン10は、心拍メッセージをリモートマシン30に伝送し得る。一実施態様では、心拍メッセージは、ライセンスに対する要求を含む。この実施態様では、ローカルマシン10は、ローカルマシン10が、実行するための承認を要求したプログラムに関連するアクセス情報を受信後、心拍メッセージを伝送することができる。ローカルマシン10は、アプリケーションを実行する前に、心拍メッセージを伝送し得る。一実施態様では、ローカルマシン10は、アクセス情報とともに受信した開始チケットを心拍メッセージとともに含む。この実施態様では、リモートマシン30は、開始チケットの検証に成功した後、ローカルマシン552にライセンスを与え得る。
別の実施態様では、心拍メッセージは、ローカルマシンがアプリケーションの実行を開始したという指示を含む。さらに別の実施態様では、心拍メッセージは、ローカルマシンがアプリケーションの実行を終了したという指示を含む。さらに別の実施態様では、心拍メッセージは、アプリケーションの実行が失敗したという指示を含む。
一実施態様では、心拍メッセージは、セッション管理サーバ562などの第2セッション管理サーバの識別表示に対する要求を含む。別の実施態様では、心拍メッセージは、ローカルマシン10が、リモートマシン30が存在するネットワークに接続したという指示を含む。
実施態様によっては、心拍メッセージは、アプリケーションストリーミングセッションをリセットする要求を含む。これらの実施態様の1つでは、ローカルマシン10は、エラーが生じ、リモートマシン30が存在するネットワークと、ローカルマシン10との間の接続が終了した場合、この心拍メッセージを伝送する。これらとは別の実施態様では、ローカルマシン10は、心拍メッセージとともに、セッションに関連する情報を伝送する。これらとはさらに別の実施態様では、リモートマシン30は、セッションが終了した場合、セッション関連情報をローカルマシン10に伝送し得る。
これらとは別の実施態様では、リモートマシン30が、応答する際に使用するネットワークから切断される場合、ローカルマシン10は、リモートマシン30に伝送される心拍メッセージに対する応答を受信し得る。一実施態様では、ローカルマシン10は、セッションのリセットを要求するメッセージをリモートマシン30に伝送することによって、セッションを再確立し得る。別の実施態様では、ローカルマシン10は、セッションリセットを要求するメッセージを第2リモートマシン30に伝送することによって、セッションを再確立し得る。実施態様によっては、リモートマシン30は、ネットワークに際接続すると、リモートマシン30が切断されていた間に受信した各々のセッションリセット要求に関して、新しいセッションを作成する。これらの実施態様の1つでは、新しいセッションは、再接続および非ライセンス状態に関連付けられる。これらとは別の実施態様では、新しいライセンスが新しいセッションのために取得されるであろう。これらとはさらに別の実施態様では、ローカルマシン10が、アプリケーションを実行する時、新しいライセンスが取得され、ローカルマシン10に関連するのセッションは、アクティブおよびライセンス状態に関連付けられるであろう。
実施態様によっては、ローカルマシン10上のアプリケーションストリーミングクライアント552は、心拍メッセージを生成する。これらの実施態様の1つでは、アプリケーションストリーミングクライアント552は、心拍メッセージをウェブインターフェース558に回送して、ローカルマシン10に伝送し、リモートマシン30に伝送する。他の実施態様では、リモートマシン30上の管理サービス504は、心拍メッセージをローカルマシン10からウェブインターフェース558を介して受信する。さらに他の実施態様では、コレクタポイント240(図1Dに関連して上記で説明する)が、心拍メッセージを受信し記憶する。
実施態様によっては、アプリケーションストリーミングクライアント552は、ライセンスをリモートマシン30に要求する。これらの実施態様の1つでは、ライセンスは、ローカルマシン552上のアプリケーションプログラムの実行を承認する。これらとは別の実施態様では、リモートマシン30は、第2リモートマシンにアクセスして、ライセンスを提供し得る。これらとはさらに別の実施態様では、リモートマシン30は、ライセンスをローカルマシンに提供し得る。これらとはさらに別の実施態様では、リモートマシン30は、承認の目的で許容可能なライセンスを第2リモートマシンに提供し得る。実施態様によっては、ライセンスは、アプリケーションプログラムの実行が終了すると無効になる。
実施態様によっては、ファーム38内のリモートマシン30は、操作のためのライセンスを要求するサブシステムのためにライセンスを構成および維持し、これらのサブシステムに対する接続の数を制御するためのライセンス管理サブシステムを含む。他の実施態様では、リモートマシン30は、アプリケーション管理サブシステムおよびセッション管理サブシステムなどの他のサブシステム内に、ライセンス管理サブシステムの機能を含む。一実施態様では、各々のリモートマシン30は、ライセンス管理サブシステム、またはライセンス管理サブシステムに関連する機能を含む。ライセンス管理サブシステムは、2つのタイプのライセンス、(1)特徴ライセンス、および(2)接続ライセンスを管理する。簡潔に説明すると、ライセンス管理サブシステムは、ロード管理などのソフトウェア製品の「特徴」に対するアクセスを制御する特徴ライセンス、およびライセンスされたソフトウェア製品により許可されるユーザ接続の数を管理する接続ライセンスを使用する。特徴は、ソフトウェア製品のある態様または特定の機能であるか、あるいは特徴ライセンスがなければ動作しない全体の製品でよい。
図15は、ファーム38内のリモートマシン30の一実施態様を示し、リモートマシン30は、ライセンス管理サブシステム1510、グループサブシステム1520、持続ストアシステムサービスモジュール1570、動的ストアシステムサービスモジュール1580、関係サブシステム1530、特殊化リモートマシンサブシステム1540、およびイベントバス1570と通信する共通アクセスポイントサブシステム524を備える。図15に示されているこれらのサブシステムは、ライセンス管理サブシステム1510の挙動を記述するためのものである。リモートマシン30は、他のタイプのサブシステムを含むことができる。
ライセンス管理サブシステム1510は、イベントバスを通してグループサブシステム1520と通信し、ライセンスの論理的な群化(以下、「ライセンス群」と呼ぶ)を形成して維持し、ライセンスのプール、割当て、および群化を促進する。ライセンス群は、以下で説明するライセンス文字列の収集、および/またはライセンス群を含む。ライセンス群は、類似する特徴のライセンスを収集し、その結果、ライセンスをプールすることを可能にする。プールされたライセンスは、ファーム38内のリモートマシン30が使用可能なライセンスである。各々のライセンス群は、ライセンス群および他のライセンスサブ群(つまり、ライセンス群内の他のライセンス群)内のライセンスの集合的なライセンスを保持する。ライセンスのプールに関連する情報は、一実施態様では、動的ストア240内に維持される。この実施態様では、各々のライセンス管理サブシステム1610は、ライセンスの総数、およびファーム38内のリモートマシン30に割り当てられたライセンス数をローカルに記憶する。プールされたライセンスを付与した後、付与するライセンス管理サブシステム1510は、動的ストア240に記入し、ライセンスが「使用中」であることを指示する。他のすべてのライセンス管理サブシステム1510は、このようにプールされたライセンスは付与に使用できないことを認識する。ある特定の実施態様では、動的ストア240は、各々のライセンス群に関連するリモートマシンID/クライアントIDを記憶して、使用中であるプールされたライセンスを識別する。
関係性サブシステム1530は、ライセンスとリモートマシン30との間、およびライセンス群とリモートマシン30との間の関連性を維持する。関連性は、関連するリモートマシン30のみが取得し得る各々のライセンスおよびライセンス群(つまり、「ローカルライセンス」)のライセンス数を画定する。ローカルライセンスは、ファーム38ないの1つのリモートマシンに割り当てられ、他のリモートマシン38によって共用されないライセンスである。ライセンス管理サブシステム1510は、このような関連性を作成、削除、質問、および更新するために、関係性サブシステム1530と通信する。共通アクセスポイントサブシステム524は、リモートマシン30上に存在するソフトウェア製品によって使用されるリモート手順コール(RPC)を提供する。これらのRPCインターフェースは、こうしたソフトウェア製品が、共通アクセスサブシステム524を通して通信し、ライセンス付与情報にアクセスすることを可能にする。
さらに図15を参照すると、特殊化リモートマシンサブシステム1540は、ライセンス管理サブシステム1510と通信し、ライセンスが必要な特殊化リモートマシンサブシステム1540の各々の機能の特徴ライセンスを取得する。これは、特殊化リモートマシンサブシステム1540の開始時、および何らかのライセンスイベント後に生じる。特徴ライセンスを取得できない場合、特殊化リモートマシンサブシステム1540は、サブシステムがライセンスを提供することになっている機能を制限する。また、特殊化リモートマシンサブシステム1540は、クライアントセッションがリモートマシン30で開始される時は常に、ライセンス管理サブシステム1510を使用して、クライアント接続ライセンスを取得する。
ライセンス管理サブシステム1510は、持続ストアシステムサービスモジュール352と通信し、特徴および接続ライセンスをライセンスリポジトリ1550内に、命名規則に従って形成されたライセンス文字列として記憶する。ライセンスリポジトリ1550は、持続ストア230内に存在する。巡回冗長検査(CRC)は、ライセンスがライセンスリポジトリ1550内に記憶されている間に、ライセンスが不正変更されるのを防止する。ライセンス管理サブシステム1510は、ライセンス文字列に関連する情報もライセンスリポジトリ1550内に記憶する。たとえば、この情報は、どのライセンスがファーム38のどのリモートマシン30に割り当てられるか、また実施態様によっては、各々のライセンスの起動状態を指示し得る。一実施態様では、接続ライセンステーブル1560は、接続ライセンスを取得したローカルマシンの識別子を記憶する。
一実施態様では、ライセンス管理サブシステム1510は、プールされた使用可能なライセンスに対する要求など、ライセンスされた機能の使用を要求するサブシステムからのイベントをサポートする。このイベントは、ライセンスを要求するサブシステムのUID、およびサブシステムが存在するリモートマシン30のUIDを含む。このイベントは、要求されたライセンスタイプ(つまり、特徴または接続ライセンス)もライセンス群IDの形式で含む。持続ストア230内に記憶される実際のライセンス群IDは任意であるが、命名規則を遵守することによって、将来新しいソフトウェア製品(つまり、リモートマシン30にサブシステム)を追加する場合に対応性が得られる。
要求サブシステムがライセンスを求めることによって送信されるイベントは、(1)ライセンス群タイプの指示、ライセンスを要求するローカルマシンおよびリモートマシンのアイデンティティ、並びに「force acquire」フラグを含む。ライセンス群タイプの指示は、ロード管理などの特徴ライセンス、またはソフトウェアアプリケーション製品などの接続タイプライセンスの識別表示を含み得る。ライセンスを求めるローカルマシンおよびリモートマシンを識別するフィールドは、リモートマシンおよびローカルマシンに関連する一意の識別子を含み得る。force acquireフラグは、たとえば、ライセンス変更イベントの後に接続ライセンスを再度取得するために使用することができる。ライセンス変更イベントは、持続ストア230内のライセンス付与情報が変更された;たとえばライセンスが削除、追加、または割り当てられたことを指示する。ライセンス変更イベントの後、各々のリモートマシン30は、ライセンス変更イベントの特定の理由がリモートマシンに把握されていないため、ライセンス変更イベントの前に所有していたすべての接続ライセンスを再取得しようとする。このフラグは、設定されている場合、リモートマシン30との接続数が増加し、許容される接続の予め決められた最大数を超える場合でも、接続ライセンスを取得しなければならないことを指示する。新しい接続ライセンスは、使用されている接続ライセンス数が、この予め決められた最大数未満まで減少しない限り、その後付与されない。このようにして、ローカルマシンの接続は、ライセンス変更イベントによって中間セッションで終了されない。
次に、図16を参照すると、ブロック図は、ライセンス付与の実施に関連する構成要素の一実施態様を示す。リモートマシン30は、サーバ管理サブシステム508およびライセンス管理サブシステム512を含む。実施態様によっては、サーバ管理サブシステム508およびライセンス管理サブシステム512は、上記のライセンス管理サブシステム1510の機能を提供する。他の実施態様では、アプリケーション管理サブシステム506およびセッション管理サブシステム510は、上記のライセンス管理サブシステム1510の機能を提供する。さらに他の実施態様では、他のサブシステムは、上記のライセンス管理サブシステム1510の機能を提供する。
一実施態様では、サーバ管理サブシステム508は、ライセンスの発行および取消しを要求するために使用されるライセンス付与構成要素を含み得る。別の実施態様では、ライセンス管理サブシステム512は、サーバ管理サブシステム508から受信したライセンスの発行または取消し要求に対してポリシーを適用し得る。さらに別の実施態様では、ライセンス管理サブシステム512は、ライセンス実施機能を提供するリモートマシン30に要求を伝送し得る。実施態様によっては、管理サービス504は、ライセンス実施機能を提供する第2リモートマシン30との接続を維持し得る。他の実施態様では、リモートマシン30は、ライセンス実施機能を提供する。
実施態様によっては、ローカルマシン10が、予め決められた数の心拍メッセージをリモートマシンに伝送しない場合、ライセンスは失効し、有効であることを中止する。これらの実施態様の1つでは、ライセンスの失効によって、ローカルマシン10によるアプリケーションプログラムの実行の承認は無効になる。
他の実施態様では、セッションは、予め決められた期間が経過するとタイムアウトになる。一実施態様では、管理サービス504は、ライセンスの失効後、セッションが失効するまで、セッション関連のデータを維持する。実施態様によっては、セッション関連のデータは、セッション名、セッションid、クライアントid、クライアント名、セッション開示時刻、サーバ名(ファイルサーバのUNC経路)、アプリケーション名(ローカルマシンが、ブラウザ名に基づいて生成する一意の名前)、別名、セッションの状態(アクティブ/ライセンス付与、アクティブ/非ライセンス付与、再接続/非ライセンス付与)などの情報を含み得る。別の実施態様では、ローカルマシン10は、心拍メッセージの伝送を停止し、後のある時点で心拍メッセージの伝送を再開する。さらに別の実施態様では、管理サービス504は、ライセンスを再発行し、ローカルマシン10が、セッションの失効前に心拍メッセージの伝送を再開した場合、ローカルマシン10が、維持されているセッション関連のデータを利用できるようにする。
次に、図17を参照すると、フロー図は、ローカルマシン10上のセッション期間中に、リモートマシン30にライセンスを要求し、維持するために行われるステップの一実施態様を示す。簡潔に説明すると、アプリケーションストリーミングのクライアントは、ライセンスを要求する(ステップ1702)。リモートマシン30は、ライセンス要求を受信、要求に関連するチケットを検証し、ライセンスを発行する(ステップ1704)。リモートマシン30は、ライセンスに関連する情報をローカルマシン10に提供する(ステップ1706)。ローカルマシン10は、図7のステップ214に関連して上記で説明したアプリケーションを実行する。ローカルマシンは、ローカルマシンがアプリケーションを実行したことを指示する心拍メッセージを伝送する(ステップ1708)。リモートマシン30は、心拍メッセージを受信し、心拍メッセージとともに伝送された識別情報を検証する(ステップ1708)。リモートマシン30は、実行したアプリケーションおよびローカルマシン10に関連するセッションを作成する(ステップ1710)。セッション作成結果は、ローカルマシン10に伝送される(ステップ1712)。ローカルマシンは、図7のステップ216に関連して上記で説明したとおり、アプリケーションの実行全体で心拍メッセージを伝送する。ローカルマシンは、伝送された心拍メッセージに対する応答を受信する(ステップ1714)。ローカルマシンは、アプリケーションの実行の終了を指示する心拍メッセージを伝送する(ステップ1716)。リモートマシン30は心拍メッセージを受信し、セッション関連のデータを除去するかどうか、並びにローカルマシン10および終了したアプリケーションに関連するライセンスを解除するかどうかを決定する(ステップ1718)。リモートマシン30によって行われる決定の結果は、ローカルマシン10に伝送される(ステップ1720)。
次に、より詳細に図17を参照すると、ローカルマシン10上のアプリケーションストリーミングクライアントがライセンスを要求する(ステップ1702)。実施態様によっては、ローカルマシン10は、アプリケーションプログラムに関連するアクセス情報を受信後、ライセンスを要求する。これらの実施態様の1つでは、ローカルマシンは、ローカルマシン10によるアプリケーションプログラムの実行の承認を付与するリモートマシン30にライセンスを要求する。実施態様によっては、ライセンス要求は、アクセス情報とともにリモートマシン30から受信する開始チケットを含む。他の実施態様では、ローカルマシン10上のアプリケーションストリーミングクライアント552は、ウェブインターフェース558に対する要求を伝送し、ウェブインターフェース558は、要求をリモートマシン30に伝送する。さらに他の実施態様では、リモートマシン上のセッション管理サブシステム510は、ライセンス要求を受信して処理する。
リモートマシン30は、ライセンス要求を受信し、要求に関連するチケットを検証し、ライセンスを生成する(ステップ1704)。一実施態様では、リモートマシン30は、ローカルマシン10が、アプリケーションの実行を承認されることを検証する。別の実施態様では、リモートマシン30は、ローカルマシン10が既存のライセンスに既に関連するかどうかを決定する。さらに別の実施態様では、リモートマシン30は、ローカルマシン10が既存のライセンスに関連していると決定し、既存のライセンスを管理するセッション管理サーバ562の識別子をローカルマシン10に提供する。さらに別の実施態様では、リモートマシン30は、新しいライセンス、セッション識別子、および新しいライセンスを管理するセッション管理サーバ562の識別表示を生成し、ローカルマシン10に提供する。
実施態様によっては、リモートマシン30は、一実施態様におけるライセンス要求に応答するために、ライセンス管理サブシステム1510を使用する。ライセンス管理サブシステム1510は、ライセンス要求を受信する。この要求は、特徴ライセンスまたは接続ライセンスに対する要求でよい。ライセンス管理サブシステム1510は、ライセンスが既に付与されたかどうか、つまり、特徴が既に開始され、ローカルマシンに対する接続が既に存在するかどうかを決定する。ライセンスが既に付与されている場合、ライセンス管理サブシステム1510は、「付与」イベントをライセンス要求側に送信する。ライセンスが、以前に付与されていない場合、ライセンス管理サブシステム1510は、ローカルライセンス、つまりリモートマシン30に対して永続的に割り当てられたライセンスが使用可能であるかどうかを決定する。実施態様によっては、ライセンス管理サブシステム1510は、ローカルメモリを検査することによってこの決定を行う。ローカルライセンスが使用可能な場合、つまり、リモートマシン30が、現在付与されているライセンスより多くのライセンスを永続的に割り当てられている場合、ライセンス管理サブシステム1510は、「付与」イベントをライセンス要求側に送信する。
リモートマシン30は、ライセンスに関連する情報をローカルマシン10に提供する(ステップ1706)。一実施態様では、ライセンス、セッション識別子、およびセッション管理サーバ562の識別表示をリモートマシン30から受信後、ローカルマシン10はアプリケーションを実行する。ローカルマシン10は、図7のステップ214に関連して上記で説明したようにアプリケーションを実行し得る。ローカルマシンは、ローカルマシンがアプリケーションを実行したことを指示する心拍メッセージを伝送する(ステップ1708)。一実施態様では、ローカルマシンは、心拍メッセージはセッション管理サーバ562に伝送するために、心拍メッセージをリモートマシン30に伝送する。別の実施態様では、ローカルマシン10は、リモートマシン30から受信したセッション管理サーバ562の識別子に応じて、心拍メッセージをセッション管理サーバ562に直接伝送する。
リモートマシン30は、心拍メッセージを受信して検証し、心拍メッセージとともに伝送された情報を識別する(ステップ1708)。一実施態様では、リモートマシン30’はセッション管理サーバ562である。別の実施態様では、セッション管理サーバ562は、ローカルマシン10によって、心拍メッセージとともに提供されたサーバ識別子を検証する。さらに別の実施態様では、サーバ識別子は、リモートマシン30によってローカルマシン10に提供された識別子である。
リモートマシン30は、実行されたアプリケーション、およびローカルマシン10に関連するセッションを作成する(ステップ1710)。一実施態様では、セッション管理サーバ562は、心拍メッセージを受信後、実行アプリケーションに関連する新しいセッションを作成する。別の実施態様では、第3リモートマシン30が新しいセッションを作成する。実施態様によっては、セッション管理サーバ562は、新しいセッションを作成した後、セッションに関連する情報を記憶する。
セッション作成結果は、ローカルマシン10に伝送される(ステップ1712)。実施態様によっては、この結果は、セッションの作成を確認する。他の実施態様では、この結果は、セッションに関連する1つまたは複数のアプリケーションを識別する。ローカルマシンは、図7のステップ216に関連して上記で説明したように、アプリケーションの実行全体で心拍メッセージを伝送する。一実施態様では、ローカルマシン10は、心拍メッセージを一定間隔でセッション管理サーバ562に対し、アプリケーションプログラムが実行されている間周期的な間隔で伝送し続ける。ローカルマシンは、伝送された心拍メッセージに対する応答を受信する(ステップ1714)。一実施態様では、ローカルマシン10は、心拍メッセージの受信の確認をセッション管理サーバ562から受信する。別の実施態様では、ローカルマシン10は、セッション管理サーバ562による心拍メッセージの受信に応じて、実行コマンドをセッション管理サーバ562から受信する。
ローカルマシンは、アプリケーションの実行の終了を支持する心拍メッセージを伝送する(ステップ1716)。リモートマシン30は心拍メッセージを受信し、セッション関連データを除去するかどうか、ローカルマシン10、および終了したアプリケーションに関連するライセンスを解除するかどうかを決定する(ステップ1718)。リモートマシン30が行った決定の結果は、ローカルマシン10に伝送される(ステップ1720)。
次に、図18を参照すると、ブロック図は、管理サービス504が監視するセッションに関連し得る常態の一実施態様を示す。一実施態様では、管理サービス504上のセッション維持サブシステム510は、ローカルマシン10のセッションを監視し、状態をセッションに割り当てる。別の実施態様では、セッション維持サブシステム510は、ライセンス関連データのリストを維持し、このリストは、ローカルマシンに関連する識別子、セッションに関連する識別子、セッションの状態、およびリモートマシン30が、ローカルマシン10からメッセージを最後に受信したことを指示するタイムスタンプを含み得る。実施態様によっては、セッション維持サブシステム510は、セッション管理スレッドを含む。これらの実施態様の1つでは、セッション監視スレッドは、周期的なライセンスタイムアウト間隔で覚醒し、ライセンス関連データのリストを走査して、あるセッションのセッション状態を更新する。
セッションが存在し得る第1状態は、ライセンスされたアクティブな状態である。一実施態様では、この状態では、ローカルマシン10は、アプリケーションの実行を承認する有効ライセンスを維持していた。別の実施態様では、セッション管理サーバ562は、セッション関連のデータを維持する。実施態様によっては、セッション管理サーバ562は、セッション関連のデータを第2リモートマシン上に記憶する。一実施態様では、ローカルマシン10が、アプリケーションを最初に実行する時、ローカルマシンのセッションは、ライセンスされたアクティブな状態にある。
セッションが存在し得る第2状態は、ライセンスされないアクティブな状態である。一実施態様では、セッションは、ローカルマシン10が、心拍メッセージを伝送しない場合にこの状態にあり、ローカルマシン10に対するライセンスは失効している。別の実施態様では、セッションがこの状態にあり、ライセンスが失効している場合、セッションが失効するのに経過した時間は不十分であり、セッションはアクティブであると考えられる。実施態様によっては、セッションがこの状態にある間、リモートマシン30またはセッション管理サーバ562は、ローカルマシン10のためにセッション関連のデータを記憶し得る。他の実施態様では、ローカルマシン10が、セッションの失効前に心拍メッセージを伝送する場合、セッション関連のデータは、ライセンスとともにローカルマシン10に伝送され、セッションは、ライセンスされたアクティブな状態に戻る。一実施態様では、リモートマシン30は、セッション識別子、およびローカルマシンに関連する識別子を使用して、セッションが失効していないことを検証し、ローカルマシンに適切なセッション関連のデータを提供する。
セッションが存在し得る第3の状態は、切断された存在しない状態である。セッションが失効すると、セッション関連のデータは削除される。
セッションが存在し得る第4の状態は、再接続されたライセンスされない状態である。一実施態様では、ローカルマシン10上のセッションが失効すると、セッション関連のデータは削除される。別の実施態様では、ローカルマシン10が、新しい心拍メッセージを伝送する場合、新しいセッションおよびローカルマシン識別子が、ローカルマシン10に対して生成される。実施態様によっては、ローカルマシン10は、リモートマシン30に対して再度認証し、新しいライセンスを受信して、ライセンスされたアクティブな状態になる。
表3は、あるセッションに関連し得る状態をまとめるものである。
Figure 2009536377
実施態様によっては、パッケージ機構は、アプリケーションプログラムに関連する複数のアプリケーションファイルの作成を可能にする。これらの実施態様の1つでは、パッケージ機構は、複数のアプリケーションファイルの識別表示を可能にする。これらとは別の実施態様では、パッケージ機構は、個々のアプリケーションファイルを複数のアプリケーションファイルに群化することを可能にする。これらとはさらに別の実施態様では、パッケージ機構は、ファイルサーバまたはアプリケーションサーバなど、リモートマシン上の複数のアプリケーションファイルをホストすることを可能にする。
一実施態様では、パッケージ機構は、「ステージングマシン」として記述されたリモートマシン上で実行する。別の実施態様では、パッケージ機構は、「クリーンマシン」上で実行する。クリーンマシンは、オペレーティングシステムのみがインストールされたリモートマシンであり、追加のソフトウェア、ドライバ、レジストリエントリ、またはその他のファイルは存在しない。さらに別の実施態様では、パッケージマシンはリモートマシン上で実行し、このリモートマシンは、アプリケーションプログラムが実行し得るローカルマシンに類似している。実施態様によっては、パッケージ機構が上で実行するリモートマシンは、リモートマシン自体がクリーンマシンではない場合でも、アプリケーションをインストールし得るクリーンマシン環境を提供する隔離環境を含む。
一実施態様では、複数のアプリケーションファイルは、「パッケージ」と呼ばれる。別の実施態様では、パッケージは、複数のアプリケーションファイルを記憶するアーカイブファイルでよい。さらに別の実施態様では、パッケージは、複数のアプリケーションファイルを記憶するアーカイブファイル、および複数のアプリケーションファイル内の複数のアプリケーションファイル内の1つまたは複数のファイルに関連するメタデータを含むファイルでよい。実施態様によっては、パッケージは、アプリケーションプログラムから成る複数のアプリケーションファイルを含む。他の実施態様では、パッケージは、1組のアプリケーションプログラムから成る複数のアプリケーションファイルを含む。さらに他の実施態様では、パッケージは、アプリケーションプログラム、およびアプリケーションプログラムの実行のために必要な前提条件から成る複数のアプリケーションファイルを含む。
一実施態様では、パッケージ機構は、パッケージ機構は、隔離環境内でインストールプログラムの実行を開始する。別の実施態様では、パッケージ機構は、インストールプログラムによって生成された隔離環境の変更を監視する。さらに別の実施態様では、パッケージ機構は、隔離環境内のファイルのインストールプログラムによる生成を監視する。さらに別の実施態様では、パッケージ機構は、隔離環境内のファイルのインストールプログラムによる修正を監視する。実施態様によっては、複数のアプリケーションファイルは、インストールプログラムによって作成または修正されたファイルを含む。他の実施態様では、パッケージ機構は、隔離環境を監視するために、ファイルシステムフィルタドライバ564をインプリメントする。
実施態様によっては、パッケージ機構は、各々が、異なるターゲット環境内で実行するために構成されるアプリケーションプログラムの異なるバージョンを含む複数のアプリケーションファイルを生成し得る。これらの実施態様の1つでは、複数のアプリケーションファイルは、特定のオペレーティングシステム、リビジョンレベル、言語構成およびマスタードライブを有するローカルマシン上で実行するように構成される(たとえば、ある複数のアプリケーションファイルは、リビジョンレベルSP2以上のWindows(登録商標) XPプロフェッショナルオペレーティングシステムを有し、英語を使用し、マスタードライブDrive C:\を有するローカルマシン上で実行するように構成し得る)。これらとは別の実施態様では、複数の複数のアプリケーションファイルは、単一アーカイブファイル内で組み合わせることができる。これらとはさらに別の実施態様では、各々の複数のアプリケーションファイルは、「ターゲット」と呼ぶことができる。これらとはさらに別の実施態様では、1つまたは複数のアプリケーションファイルを含むアーカイブファイルは、「パッケージ」と呼ぶことができる。
次に、図19を参照すると、ブロック図は、各々のターゲットが、1つのアプリケーションを含む複数のアプリケーションファイルから成る2つのターゲットを含むパッケージを示す。図19では、アプリケーションプログラム「Foo」は、2つのターゲット内にパッケージされる。2つのターゲット間の違いは、「ターゲット言語」である。具体的には、ターゲット1は「英語」をサポートし、ターゲット2は「ドイツ語」をサポートする。一実施態様では、使用可能なアプリケーションプログラムの一覧は、アプリケーションプログラム「Foo」をリストし得る。別の実施態様では、適切な複数のファイルが、アプリケーションプログラムにアクセスすることを要求するローカルマシンに伝送される。さらに別の実施態様では、ローカルマシンの評価に応じて、特定のターゲットをローカルマシンに伝送するという決定が行われる。さらに別の実施態様では、パッケージに関連するファイルは、パッケージ内のターゲットに関連するとともに、ローカルマシンの実行に必要な少なくとも1つの特性を識別する。
実施態様によっては、パッケージ機構530は、アプリケーションプログラムに関連するインストールプログラムを実行することによって、ストリーミングのためのアプリケーションプログラムを作成する。これらの実施態様の1つでは、パッケージ機構は、パッケージ機構が上で実行するリモートマシン30上に隔離環境を生成する。これらとは別の実施態様では、パッケージ機構は、アプリケーションプログラムを隔離環境内で実行する。これらとはさらに別の実施態様では、パッケージ機構は、インストールプログラムによって生成または修正された複数のアプリケーションファイルを識別する。これらとはさらに別の実施態様では、パッケージ機構は、複数のアプリケーションファイルを含むアーカイブファイルを生成する。これらの実施態様の1つでは、パッケージ機構は、複数のアプリケーションファイルを含む.CABファイルを作成する。これらとは別の実施態様では、パッケージ機構はディレクトリを作成し、複数のアプリケーションファイルをディレクトリに記憶する。実施態様によっては、パッケージ機構は、複数のアプリケーションファイルをファイルサーバまたはその他のリモートマシン30上に記憶する。他の実施態様では、パッケージ機構は、複数のアプリケーションファイルを複数のリモートマシン上に記憶する
次に、図20を参照すると、フロー図は、オペレーティングシステムをリブートすることなく、アプリケーションプログラムを効果的にインストールするための、ポリシーベースの方法で行われるステップの一実施態様を示す。簡潔に説明すると、パッケージ機構は、隔離環境内でインストーラプログラムを実行し、このインストーラプログラムは、第2アプリケーションに関連する少なくとも1つのアプリケーションファイルを隔離環境内にインストールする(ステップ2002)。少なくとも1つのアプリケーションプログラミングインターフェース(API)に対するインストーラプログラムによるコールが傍受され、このコールは、オペレーティングシステムのリブート後に動作を実行することを要求する(ステップ2004)。傍受された少なくとも1つのコールの動作は、オペレーティングシステムをリブートすることなく実行される(ステップ2006)。少なくとも1つのアプリケーションファイルのファイルタイプの識別表示が受信される(ステップ2008)。少なくとも1つの実行方法は、識別されたファイルタイプに応じて、インストールされた少なくとも1つのアプリケーションファイルに関連付けられる(ステップ2010)。インストールされた少なくとも1つのアプリケーションファイルは、少なくとも1つのサーバ上に記憶される(ステップ2012)。第2アプリケーション、インストールされた少なくとも1つのアプリケーションファイル、少なくとも1つのサーバのロケーション、および少なくとも1つの実行方法について、一覧が生成される(ステップ2014)。
次に、図20をより詳細に参照すると、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、第2アプリケーションに関連する少なくとも1つのアプリケーションファイルを隔離環境内にインストールする(ステップ2002)。一実施態様では、隔離環境内でインストーラプログラムを実行することにより、パッケージ機構は、インストーラプログラムが、ローカルマシン上のファイルまたはレジストリに行った変更を隔離する。別の実施態様では、パッケージ機構は、インストーラプログラムによって要求された変更を傍受し、変更を隔離環境にリダイレクトして、ローカルマシン上で変更が行われるのを防止する。さらに別の実施態様では、パッケージ機構は、隔離環境内の第2インストーラプログラムを実行し、第2アプリケーションは、第3アプリケーションに関連する少なくとも1つのアプリケーションファイルを隔離環境にインストールする。
実施態様によっては、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、隔離環境内のアプリケーションに関連する少なくとも1つの実行可能なアプリケーションを実行する。インストーラがアプリケーションを実行する一実施態様では、アプリケーションの実行は、第2アプリケーションのインストールを可能にする。
これらとは別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、少なくとも1つの実行可能なアプリケーションの実行を必要とする。これらとはさらに別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、Internetブラウザアプリケーションの実行を必要とする。実施態様によっては、インストーラプログラムは、プログラムをインストールするために実行され、インストーラプログラムの実行は、プログラムをインストールするために必要な第2プログラムの実行を含む。これらの実施態様の1つでは、プログラムは、プラグインである。これらとは別の実施態様では、プログラムは、アクティブXコンポーネントである。これらとはさらに別の実施態様では、プログラムは、Flashコンポーネントである。これらとはさらに別の実施態様では、プログラムは、Yahoo!またはGoogleなど、カスタマイズされたツールバーである。他の実施態様では、プログラムは、第2プログラム内にインストールされるコンポーネントであり、第2プログラムに関係なく実行されない。
少なくとも1つのアプリケーションプログラミングインターフェース(API)に対するインストーラプログラムによるコールが傍受され、このコールは、オペレーティングシステムのリブート後の動作の実行を要求する(ステップ2004)。傍受された少なくとも1つのコの−ル動作は、オペレーティングシステムをリブートしないで実行される(ステップ2006)。実施態様によっては、動作の実行は、インストール時に修正されたレジストリのエントリの動作を実行することを含む。オペレーティングシステムをリブートしないで、傍受された少なくとも1つのコールを実行することに関連するさらに他の詳細は、図25に関連して以下に記載する。
少なくとも1つのアプリケーションファイルのファイルタイプの識別表示が受信される(ステップ2008)。少なくとも1つの実行方法は、識別されたファイルタイプに応じて、インストールされた少なくとも1つのアプリケーションファイルに関連付けられる(ステップ2010)。一実施態様では、少なくとも1つの実行方法は、少なくとも1つのアプリケーションファイルをクライアントにストリーミングすることを可能にする。別の実施態様では、少なくとも1つの実行方法は、インストールされた少なくとも1つのアプリケーションファイルをクライアント上で実行することを可能にする。さらに別の実施態様では、少なくとも1つの実行方法は、インストールされた少なくとも1つのアプリケーションファイルをサーバ上で実行することを可能にする。さらに別の実施態様では、少なくとも1つの実行方法は、少なくとも1つのアプリケーションファイルをサーバにストリーミングすることを可能にする。
インストールされた少なくとも1つのアプリケーションファイルは、少なくとも1つのサーバ上に記憶される(ステップ2012)。実施態様によっては、インストールされたアプリケーションプログラムは、インストールされた少なくとも1つのアプリケーションファイルを少なくとも1つのサーバ上に記憶する前に、隔離環境内で実行される。これらの実施態様の1つでは、追加のアプリケーションファイルは、インストールされたアプリケーションプログラムの実行に応じて生成される。これらとは別の実施態様では、データファイルが生成される。これらとはさらに別の実施態様では、インストールされたアプリケーションプログラムは、インストールを完了するために情報を要求し、この情報は、最初のインストールプロセス後に要求される。これらとはさらに別の実施態様では、ソフトウェア製品の識別子、ライセンス識別子、またはその他の信任状などの情報が要求される。
実施態様によっては、インストールされた少なくとも1つのアプリケーションファイルのロケーションを少なくとも1つのサーバ上で識別する識別子が提供される。これらの実施態様の1つでは、識別子は、汎用命名規則(UNC)に準拠する。他の実施態様では、インストールされた少なくとも1つのアプリケーションファイルは、.CABファイルなどのアーカイブファイル内に配置される。これらの実施態様の1つでは、複数のアプリケーションファイルはアーカイブファイル内に記憶され、アーカイブファイルは少なくとも1つのサーバ内に記憶される。これらとはさらに別の実施態様では、インストールされた少なくとも1つのアプリケーションファイルは、複数のサーバ上に記憶される。さらに他の実施態様では、少なくとも1つのアプリケーションファイルは、アプリケーションファイルを記憶するディレクトリ内に配置される。
第2アプリケーション、インストールされた少なくとも1つのアプリケーションファイル、少なくとも1つのサーバのロケーション、および少なくとも1つの実行方法の一覧が生成される(ステップ2014)。実施態様によっては、一覧はファイル内に記憶される。他の実施態様では、一覧は、マニフェストファイル内に記憶される。さらに他の実施態様では、一覧はXMLファイル内に記憶される。
一実施態様では、多数のアプリケーション、多数のアプリケーションの各々に関連する、インストールされた複数のアプリケーションファイル、およびインストールされた複数のアプリケーションファイルを記憶する少なくとも1つのサーバのロケーションの一覧が生成される。別の実施態様では、第2アプリケーションと、インストールされた複数のアプリケーションファイルとの関連性を含む一覧が生成される。さらに別の実施態様では、第2アプリケーション、インストールされた少なくとも1つのアプリケーションファイルを含む圧縮ファイルとの関連性を含む一覧が生成される。
次に、図21を参照すると、フロー図は、オペレーティングシステムをリブートすることなく、アプリケーションプログラムをインストールするためのポリシーベースの方法で行われるステップの一実施態様を示す。簡潔に説明すると、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、第2アプリケーションに関連する少なくとも1つのアプリケーションファイルを隔離環境内にインストールする(ステップ2102)。アプリケーションプログラミングインターフェース(API)に対するインストーラプログラムによるコールは傍受され、このコールは、オペレーティングシステムのリブート後に動作を実行することを要求する(2104)。傍受された少なくとも1つのコールの動作は、オペレーティングシステムをリブートしないで実行される(ステップ2106)。少なくとも1つのアプリケーションファイルの特性の識別表示が受信される(ステップ2108)。少なくとも1つの実行前提条件は、識別された特性に応じて、インストールされた少なくとも1つのアプリケーションファイルに関連付けられる(ステップ2110)。インストールされた少なくとも1つのアプリケーションファイルは、少なくとも1つのサーバ上に記憶される(ステップ2112)。第2アプリケーション、インストールされた少なくとも1つのアプリケーションファイル、少なくとも1つのサーバのロケーション、および少なくとも1つの実行前提条件の一覧が生成される(ステップ2114)。
次に、図21をさらに詳細に参照すると、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、第2アプリケーションに関連する少なくとも1つのアプリケーションファイルを間隔内にインストールする(ステップ2102)。一実施態様では、隔離環境内のインストーラプログラムを実行することによって、パッケージ機構は、ローカルマシン上のファイルまたはレジストリに対して、インストーラプログラムにより行われる変更を隔離することができる。別の実施態様では、パッケージ機構は、インストーラプログラムによって要求された変更を傍受し、隔離環境に対する変更をリダイレクトして、ローカルマシン上で変更が行われるのを防止する。さらに別の実施態様では、パッケージ機構は、隔離環境内の第2インストーラプログラムを実行し、第2アプリケーションは、第3アプリケーションに関連する少なくとも1つのアプリケーションファイルを隔離環境内にインストールする。
実施態様によっては、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、隔離環境内のアプリケーションに関連する少なくとも1つの実行可能アプリケーションを実行する。インストーラがアプリケーションを実行する一実施態様では、アプリケーションの実行により、第2アプリケーションのインストールが可能になる。これらとは別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、少なくとも1つの実行可能アプリケーションの実行を必要とする。これらとはさらに別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、Internetブラウザアプリケーションの実行を必要とする。
さらに図23を参照すると、ブロック図は、インストーラプログラム2350を隔離環境532内に実行するパッケージ機構530、ならびにパッケージ機構530および隔離環境532に関連するファイルシステムフィルタドライバ534を備えるシステムを示す。
一実施態様では、パッケージ機構530は、アプリケーションプログラムを隔離環境532にインストールすることによって、パッケージを生成する(図21に関連して上記で説明したとおり)。別の実施態様では、パッケージ機構530は、インストーラプログラム2350を実行することによって、アプリケーションプログラムを隔離環境532内にインストールする。実施態様によっては、パッケージ機構530は、グラフィカルユーザインターフェースを含む。これらの実施態様の1つでは、グラフィカルユーザインターフェースは、パッケージ機構530のユーザが、パッケージ機構530によるパッケージの生成をカスタマイズすることを可能にする。これらとは別の実施態様では、パッケージ機構530は、アクセス制御スート520上のグラフィカルユーザインターフェースと通信士、アクセス制御スート520のユーザが、パッケージ機構530によるパッケージの生成をカスタマイズすることを可能にする。
実施態様によっては、ファイルシステムフィルタドライバ532は、アプリケーションプログラムを隔離環境532内にインストールすることを可能にする。これらの実施態様の1つでは、ファイルシステムフィルタドライバ532は、インストーラプログラム2350による要求を傍受する。これらとは別の実施態様では、ファイルシステムフィルタドライバ532は、インストーラプログラム2350による要求を隔離環境532にリダイレクトする。これらとはさらに別の実施態様では、ファイルシステムフィルタドライバ532は、インストーラプログラム2350によって行われる要求の記録を記憶する。これらとはさらに別の実施態様では、ファイルシステムフィルタドライバ532は、インストーラプログラム2350によって作成または修正されたファイルのコピーを記憶する。実施態様によっては、ファイルシステムフィルタドライバ532によって生成され、記憶される記録は、アプリケーションプログラムを含む複数のアプリケーションファイルとして一緒に記憶される。他の実施態様では、複数のアプリケーションファイルは、ファイルサーバ540上に記憶される。
再度図21を参照すると、インストーラプログラムにより、少なくとも1つのアプリケーションプログラミングインターフェース(API)に対して行われるコールは傍受され、このコールは、オペレーティングシステムのリブート後に、動作を実行することを要求する(ステップ2104)。傍受された少なくとも1つのコールの動作は、オペレーティングシステムをリブートしないで実行される(ステップ2106)。実施態様によっては、この動作の実行は、コンピュータシステムのブート後に開始されるように構成されたドライバのインストールを含む。他の実施態様では、この動作の実行は、インストールの際に修正されたレジストリエントリの動作を実行することを含む。
少なくとも1つのアプリケーションファイルの特性の識別表示はが受信される(ステップ2108)。実施態様によっては、オペレーティングシステムタイプの識別表示が受信される。他の実施態様では、オペレーティングシステムが使用する言語の識別表示が受信される。さらに他の実施態様では、第2アプリケーションのバージョンの識別表示が受信される。
少なくとも1つの実行前提条件は、識別された特性に応じて、インストールされた少なくとも1つのアプリケーションファイルに関連付けられる(ステップ2110)。一実施態様では、少なくとも1つの実行前提条件は、特性に対するポリシーの適用に応じて、インストールされた少なくとも1つのアプリケーションファイルに関連付けられる。別の実施態様では、スクリプトは、インストールされた少なくとも1つのアプリケーションファイルに関連付けられる。図22を参照すると、画面ショットは、ローカルマシン上で実行されるスクリプトの一覧表の一実施態様を示す。スクリプトのタイプ2202は、スクリプトを実行するべき時、たとえばアプリケーションの実行前、またはアプリケーションの実行が終了した後を示す。隔離指標24は、ローカルマシン10上の隔離環境内でスクリプトを実行するべきかどうかを指示する。図22に示すように、実施態様によっては、スクリプトは、複数のアプリケーションファイルが一緒にパッケージされ、複数のアプリケーションファイルをホストするリモートマシン30’上に記憶された時点で、アプリケーションプログラムに関連付けられた。
実施態様によっては、少なくとも1つの実行前提条件は、インストールされた少なくとも1つのアプリケーションファイルを実行するシステム上に、あるバージョンのオペレーティングシステムをインストールすることを要求する。他の実施態様では、少なくとも1つの実行前提条件は、インストールされた少なくとも1つのアプリケーションファイルを実行するシステム上に、あるバージョンの第2アプリケーションをインストールすることを要求する。さらに他の実施態様では、インストラクションは、インストールされた少なくとも1つのアプリケーションファイルに関連付けられ、このインストラクションは、少なくとも1つの実行前提条件を満たさないクライアントによって使用される、インストールされた第2のアプリケーションファイルを指示する。さらに他の実施態様では、インストラクションは、インストールされた少なくとも1つのアプリケーションファイルに関連付けられ、このインストラクションは、少なくとも1つの実行前提条件を満たさないクライアント上で、インストールされた少なくとも1つのアプリケーションファイルを実行するための第2の実行方法を指示する。これらの実施態様の1つでは、実行方法は、インストールされた少なくとも1つのアプリケーションファイルに関連付けられ、この実行方法は、第2アプリケーションを含む複数のアプリケーションファイルをローカルマシンにストリーミングし、ローカルマシン上で実行することを承認する。これらとは別の実施態様では、ローカルマシンの評価は、ローカルマシン上に含まれないインストールされた少なくとも1つのアプリケーションファイルに関連付けられる少なくとも1つの特性を識別する。これらとはさらに別の実施態様では、複数のアプリケーションファイルを実行するための承認は無効にされる。これらとはさらに別の実施態様では、第2の実行方法は、複数のアプリケーションファイルを実行するために提供され、この第2の実行方法は、リモートマシン上で複数のアプリケーションファイルを実行し、アプリケーション出力データをリモートマシンからローカルマシンに伝送することを可能にする。
インストールされた少なくとも1つのアプリケーションファイルは、少なくとも1つのサーバ上に記憶される(ステップ2112)。実施態様によっては、インストールされたアプリケーションプログラムは、インストールされた少なくとも1つのアプリケーションファイルを少なくとも1つのサーバ上に記憶する前に、隔離環境内で実行される。これらの実施態様の1つでは、追加のアプリケーションファイルは、インストールされたアプリケーションプログラムの実行に応じて生成される。これらとは別の実施態様では、データファイルが生成される。これらとはさらに別の実施態様では、インストールされたアプリケーションプログラムは、インストールを完了するための情報を要求し、この情報は、最初のインストールプロセス後に要求される。これらとはさらに別の実施態様では、ソフトウェア製品識別子、ライセンス識別子、またはその他の信任状などの情報が要求される。
実施態様によっては、少なくとも1つのサーバ上で、インストールされた少なくとも1つのアプリケーションファイルのロケーションを識別する識別子が提供される。これらの実施態様の1つでは、識別子は、汎用命名規則(UNC)に準拠している。他の実施態様では、インストールされた少なくとも1つのアプリケーションファイルは、.CABファイルなどのアーカイブファイル内に配置される。これらの実施態様の1つでは、複数のアプリケーションファイルはアーカイブファイル内に記憶され、アーカイブファイルは、少なくとも1つのサーバ上に記憶される。これらとはさらに別の実施態様では、インストールされた少なくとも1つのアプリケーションファイルは、複数のサーバ上に記憶される。さらに他の実施態様では、インストールされた少なくとも1つのアプリケーションファイルは、アプリケーションファイルを記憶するディレクトリ内に配置される。
第2アプリケーション、インストールされた少なくとも1つのアプリケーションファイル、少なくとも1つのサーバのロケーション、および少なくとも1つの実行前提条件の一覧が生成される(ステップ2114)。実施態様によっては、一覧はファイル内に記憶される。他の実施態様では、一覧はマニフェストファイル内に記憶される。さらに他の実施態様では、一覧はXMLファイル内に記憶される。
一実施態様では、複数のアプリケーション、多数のアプリケーションの各々に関連する、インストールされた複数のアプリケーションファイル、およびインストールされた複数のアプリケーションファイルを記憶する少なくとも1つのサーバのロケーションの一覧が生成される。別の実施態様では、第2アプリケーションと、インストールされた複数のアプリケーションファイルとの関連性を含む一覧が生成される。さらに別の実施態様では、第2アプリケーションと、インストールされた少なくとも1つのアプリケーションファイルを含む圧縮ファイルとの関連性を含む一覧が生成される。
傍受された少なくとも1つのコールの動作が、オペレーティングシステムをリブートしないで実行されるステップ2106を再度参照すると、実施態様によっては、仮想化されたインストールおよび実行環境が提供され、インストールされるアプリケーションを実行する前に、システムをリブートする要件は排除される。
次に、図24を参照すると、フローチャートは、インストーラプログラムの実行が、インストーラプログラムが上で実行されるローカルマシン上でオペレーティングシステムをリブートする必要がある一実施態様を示す。従来のアプリケーションインストーラは、アプリケーションがインストールされるリモートマシン上にファイルをコピーする(ステップ2402)。実施態様によっては、ファイルをコピーすることによって、リモートマシンのリブートを行うことができる。アプリケーションインストーラは、少なくとも1つのファイルを、ロックしたファイルにコピーしようとする(ステップ2404)。一実施態様では、ロックしたファイルは、オペレーティングシステムが実行される(または「リブートされる」)時にのみ書き込むことができる。MOVE_FILE_DELAY_UNTIL_リブートオプションは、MoveFileEx( )Win32 APIで設定され(ステップ2406)、アプリケーションインストーラは、システム停止/リブート機能をコールする(ステップ2408)。リブート後、最初にロックしたファイルは、次にリブート後にインストールされる(ステップ2410)。
次に、図25を参照すると、ブロック図は、パッケージ機構がアプリケーションプログラムを上にインストールするリモートマシン30の一実施態様を示す。リモートマシン30は、システムリソース2502、システムAPI2504、およびアプリケーションをインストールするためのアプリケーションインストーラ2506を備える。リモートマシン30は、機能フッキング機構2508、インストール後プロセッサモジュール2510、およびアプリケーション隔離環境2512も備える。実施態様によっては、アプリケーションプログラムを隔離環境2512内にインストールすることにより、リモートマシン30をリブートせずにインストールすることができる。これらの実施態様の1つでは、隔離環境2512内で仮想化されるシステムリソース2502に行われる変更は、リモートマシン30上の対応するシステムリソース2502を変更しない。リモートマシン30上のシステムリソースは変更されないため、システムリソースの不適切な変更を防止するために、マシンをリブートする必要はない。
次に、図25をさらに詳細に参照すると、システムリソース2502は、レジストリエントリ、システムDLL、およびリモートマシン30が実行されている間に、オペレーティングシステムが書き込まれるのを防止するその他のロックしたファイルを含むことができる。システムAPI2504は、システムをリブートするために使用されるAPIであって、リモートマシン30のリブートを防止するために、アプリケーションインストーラ2506によってコールされ、機能フッキング機構2508によってフックされるAPIを含む。
アプリケーション隔離環境2512は、アプリケーションインストーラ2506に対し、オペレーティングシステムリソースのビューを含む環境を提供する。一実施態様では、アプリケーション隔離環境2512は隔離環境556である。実施態様によっては、アプリケーション隔離環境2512は、ファイルシステム、レジストリ、および命名されたオブジェクトなどのオペレーティングシステムのリソースの仮想化を提供する。一実施態様では、アプリケーションインストーラ2506は、アプリケーション隔離環境2512内で実行される。別の実施態様では、アプリケーションインストーラ2506は、アプリケーションプログラムをアプリケーション隔離環境2512内にインストールする。さらに別の実施態様では、アプリケーションインストーラ2506は、アプリケーション隔離環境2512の外部で実行され、アプリケーションプログラムをアプリケーション隔離環境2512内部にインストールする。
実施態様によっては、アプリケーション隔離環境2512は、アプリケーションインストーラ2506が、アプリケーションをアプリケーション隔離環境2512内にインストールする時に、リモートマシン30をリブートするための要件を回避する。一実施態様では、アプリケーション隔離環境2512は、アプリケーションファイルをロックしたファイルにコピーする要求を傍受する。別の実施態様では、アプリケーション隔離環境2512は、アプリケーションファイルをロックしていないファイルにコピーする要求をリダイレクトする。さらに別の実施態様では、アプリケーション隔離環境2512は、アプリケーションファイルを仮想化ファイルにコピーする要求をリダイレクトする。さらに別の実施態様では、アプリケーションファイルをコピーする要求をリダイレクトすることによって、リモートマシン30のリブートを要求しなくても、アプリケーションファイルのインストールが可能になる。一例として、アプリケーションインストーラ2506は、c:「windows\system32\mfc40.dllなどのロックしたファイルに書き込もうとする場合、アプリケーション隔離環境2512は要求を傍受し、別の(6)されていないロケーションにファイルをリダイレクトする。ロックしたファイルを回避するこの機能は、MoveFileEx( )APIおよびMOVE_FILE_DELAY_UNTIL_リブートフラグを使用しなくても、ファイルをインストールすることができることを意味する。この機能は、リモートマシン30のリブートの必要性をなくす。
一実施態様では、機能フッキング機構2508はファイルシステムフィルタドライバ564である。別の実施態様では、ファイルシステムフィルタドライバ564は、機能フッキング機構2508を備える。さらに別の実施態様では、機能フッキング機構2508は、アプリケーションインストーラ2506からの要求を傍受して、リモートマシン30を再始動させる。実施態様によっては、アプリケーション隔離環境2512は、ロックしていないファイルに対するアプリケーションファイルのコピーに備えている。しかし、アプリケーション隔離環境2512は、リモートマシン30をリブートするために、アプリケーションインストーラ2506による要求をアドレス指定する。機能フッキング機構2508は、リブート要求を傍受し、アプリケーションインストーラ2506に応答する。
アプリケーション隔離環境2512は、アプリケーションファイルを、ロックしていないファイルにコピーすることを可能にする。しかし、実施態様によっては、アプリケーションをインストールするために、その他の動作が必要であり、これらの動作はリブート後に行われる場合がある。リブートを防止することは、インストールプロセスでこれらの動作を完了する必要性を防止することではない。機能フッキング機構2508は、アプリケーションのインストールに関連する動作を実施する機能を提供し得る。
たとえば、アプリケーションのインストール中、HKLM\SYSTEM\CurrentControlSet\Control\Session_Manager\Pending−FileRenameOperationsなどのレジストリエントリを書き込むことができる。その他のアプリケーションは、マシンのブート後に始動する必要があるサービスまたはドライバをインストールし得る。インストール後プロセッサモジュール2510は、インストール時に修正されたアプリケーションファイルを識別し、アプリケーションファイルに関連する動作を実行する。
次に、図26を参照すると、フロー図は、アプリケーション隔離環境2512内にアプリケーションをインストールするために行われるステップの一実施態様を示す。アプリケーション隔離環境2512は、サーバオペレーティングシステムの仮想化ビューをアプリケーションインストーラに提供する(ステップ2602)。システムリブートおよび停止に関連するサーバ上のAPIは、アプリケーションインストーラ2506がリブートされるのを防止するためにフックされる(ステップ2604)。アプリケーションインストーラ2506は、ロックしたファイルに対するファイルコピー動作を要求し、この要求は傍受されて、矛盾しないロケーションにリダイレクトされる(ステップ2606)。アプリケーションインストーラ2506が、システムAPIをコールことによってリブートを試みると、要求が傍受され、リブートが防止される(ステップ2608)。インストール後プロセッサモジュール2510は、通常、リブート後に行われる動作を実行し(ステップ2610)、次に、アプリケーションは、リモートマシン30をリブートしないで、アプリケーション隔離環境2512内で実行することができる(ステップ2612)。
実施態様によっては、アプリケーションプログラムをアプリケーション隔離環境2512内にインストールした後、パッケージ機構は、アプリケーションプログラムのインストール時に作成または修正された複数のアプリケーションファイルを識別する。これらの実施態様の1つでは、複数のアプリケーションファイルは、リモートマシン上に記憶される。これらとは別の実施態様では、複数のアプリケーションファイルを検索するローカルマシンは、アプリケーションプログラムを実行し得る。
実施態様によっては、パッケージ機構530は、隔離環境532およびファイルシステムフィルタドライバ534を備えるリモートマシン上で実行され、アプリケーションプログラムを隔離環境532内にインストールする。これらの実施態様の1つでは、リモートマシンは、「クリーンマシン」または「ステージングマシン」と呼ばれる。これらとは別の実施態様では、隔離環境532は、クリーンマシン上でオペレーティングシステムによって提供されるネイティブリソースの修正可能な仮想化インスタンスを提供するアプリケーション隔離スコープを備える。これらとはさらに別の実施態様では、隔離環境532は、ネイティブリソースの読取り専用ビューを提供するシステム隔離スコープを備える。これらとはさらに別の実施態様では、ネイティブリソースの読取り専用ビューは、クリーンマシン上に存在するファイルシステムおよびレジストリのスナップショットを含む。
一実施態様では、リダイレクタは、ネイティブリソースを変更するための要求を傍受する。実施態様によっては、リダイレクタは、ファイルシステムフィルタドライバ534である。別の実施態様では、パッケージ機構530によって実行されるインストーラプログラムが、変更の要求を行う。さらに別の実施態様では、ネイティブリソースに対する変更は、アプリケーションプログラムをクリーンマシン上にインストールすることを必要とする。さらに別の実施態様では、リダイレクタは、この要求を隔離環境532にリダイレクトする。
実施態様によっては、ネイティブリソースを変更するための要求を隔離環境532リダイレクトすることによって、アプリケーションプログラムのインストールに関連する変更が隔離される。他の実施態様では、ネイティブリソースを変更する要求が変更され、記憶素子内に記憶される。これらの実施態様の1つでは、アプリケーションプログラムのインストールに関連するの変更は、記憶素子内に存在する。これらとは別の実施態様では、ローカルマシン552が記憶素子の内容を検索し、ローカルマシン552上の隔離環境556内に存在するネイティブリソースの変更をインプリメントすると、アプリケーションプログラムがローカルマシン552上にインストールされる。
実施態様によっては、ローカルマシン10の起動前の分析が必要な場合がある。これらの実施態様の1つでは、ローカルマシン10は、少なくとも1つの特性がローカルマシン10内に含まれていることを検証する。これらとは別の実施態様では、少なくとも1つの特性は、起動前の分析で、ローカルマシン10に少なくとも1つの特性がないことが決定された後に、ローカルマシン10に追加される。これらとはさらに別の実施態様では、少なくとも1つの特性は、アプリケーションプログラムをホストするリモートマシン内に含まれ、ローカルマシンが少なくとも1つの特性を含まない場合、アプリケーションプログラムの実行が妨げられるであろう。さらに別の実施態様では、アプリケーションプログラムは、実行のために、ローカルマシン上に少なくとも1つの特性が存在することを必要とする。
実施態様によっては、パッケージ機構は、少なくとも1つの特性の識別表示をローカルマシン上の起動前の分析で使用することを可能にする。他の実施態様では、パッケージ機構は、少なくとも1つの特性をアプリケーションプログラムと関連付けて、ローカルマシン上で実行するために使用することを可能にする。さらに他の実施態様では、パッケージ機構は、実行可能なスクリプトをアプリケーションプログラムと関連付けることを可能にし、ローカルマシンが、実行可能なスクリプトを実行して、起動前の分析を完了することを可能にする。さらに他の実施態様では、アプリケーションプログラムの実行後、少なくとも1つの特性がローカルマシン上に存在する必要がある。
パッケージ機構は、複数のアプリケーションファイルに署名するための機能を提供する。一実施態様では、複数のアプリケーションファイルに署名することによって、ローカルマシンは、複数のアプリケーションファイルの完全性を検証することが可能になる。別の実施態様では、複数のアプリケーションファイルに署名することによって、ローカルマシンが、破損したアプリケーションプログラムを実行するのを防止する。実施態様によっては、複数のアプリケーションファイル内のファイルのMD4、MD5ハッシュ、またはSHA−1ハッシュなどの暗号チェックサムが計算される。
他の実施態様では、すべての複数のアプリケーションファイル内のファイルの暗号チェックサムが計算される。これらの実施態様の1つでは、暗号チェックサムは第2ファイル内に記憶される。これらとは別の実施態様では、第2ファイルは、複数のアプリケーションファイルに関連付けられる。実施態様によっては、第2ファイルは、複数のアプリケーションファイルに追加される。他の実施態様では、第2ファイルは、X.509証明書などの証明書を使用して署名される。さらに他の実施態様では、複数のアプリケーションファイルを検索するローカルマシンは、証明書の公共部分を使用して署名を検証する。さらに他の実施態様では、ローカルマシンは、証明書の公共部分、および証明書信頼リストの識別表示を受信して署名を検証する。これらの実施態様の1つでは、ローカルマシンは、証明書信頼リストの識別表示を含むレジストリキーを受信する。
一実施態様では、パッケージ機構は、隔離環境をカスタマイズする機能を提供する。別の実施態様では、パッケージ機構は、隔離環境の定義を記憶するファイルを生成するための機能を提供する。さらに別の実施態様では、パッケージ機構は、アプリケーションプログラムを含む複数のアプリケーションファイルを有するファイルを含む。さらに別の実施態様では、ローカルマシンは、アクセス情報を含むファイルをリモートマシンから受信する。
実施態様によっては、複数のアプリケーションファイルは、アーカイブファイル内に記憶される。これらの実施態様の1つでは、アーカイブファイルはCABファイル形式である。これらとは別の実施態様では、アーカイブファイル形式は、ファイルの短いファイル名のアプリケーションプログラムによる仕様をサポートしない。これらとはさらに別の実施態様では、WINDOWS(登録商標) 2000などのオペレーティングシステムは、ファイルの短いファイル名のアプリケーションプログラムによる仕様をサポートしない場合がある。他の実施態様では、WINDOWS(登録商標) XPなどのオペレーティングシステムは、ファイルの短いファイル名のアプリケーションプログラムによる仕様をサポートする。これらの実施態様の1つでは、ファイルを実行する要求は、ファイルの正確な短いファイル名を含まなければならない。
一実施態様では、マッピングは、複数のアプリケーションファイル内のファイルの長いファイル名と、ファイルの省略名とを関連付けるために生成し得る。別の実施態様では、マッピングは、複数のアプリケーションファイル内のファイル内に記憶される。さらに別の実施態様では、ファイルは、ファイルの長いファイル名が12文字より長い場合にのみ、短いファイル名を有する。実施態様によっては、短いファイル名は、ファイルに関連する仮想ファイル名である。これらの実施態様の1つでは、ファイルは、実行のためにローカルマシン10に伝送され、長いファイル名とともにローカルマシン10に記憶される。これらとは別の実施態様では、ローカルマシン10上のアプリケーションファイルは、短いファイル名を使用するファイルの実行を要求する。これらとはさらに別の実施態様では、マッピングは、ファイルの実行を可能にするが、ファイルの実行のための要求は、ローカルマシン上のファイル名(長いファイル名)を使用しなかった。
実施態様によっては、パッケージャ機構530は、マッピングを生成する。これらの実施態様の1つでは、パッケージャ機構530は、長いファイル名を有するファイルに短いファイル名を選択する。これらとは別の実施態様では、上でパッケージャ機構530が実行しているリモートマシン30’上のオペレーティングシステムは、長いファイル名を有するファイルに短いファイル名を選択する。これらとはさらに別の実施態様では、一意の短いファイル名は、リモートマシン30’上の第2の短いファイル名と矛盾しない名前が選択される。これらとはさらに別の実施態様では、パッケージャ機構530によって実行されたインストーラプログラムは、長いファイル名と短いファイル名との間のマッピングを含むファイルを生成する。他の実施態様では、マッピングは、ファイルを検索するローカルマシン10に伝送される。これらの実施態様の1つでは、ローカルマシン10は、ファイルを実行する時にファイルを参照する。
以下の具体的な例は、上記の方法およびシステムが、アプリケーションプログラムを含む複数のファイルを選択し、ローカルマシンにストリーミングし、ローカルマシン上で実行するためにどのように使用することができるかを示す。これらの例は、具体的に説明するものであり、制限するものではない。
(実施例1)
一実施態様では、ローカルマシン10のユーザは、アプリケーションプログラムの一覧で識別されているワード処理プログラム、ウェブブラウジングアプリケーション、または表計算プログラムなどのアプリケーションプログラムにアクセスすることを要求する。この実施態様の一例では、ローカルマシン10は、ローカルマシン10が使用可能な圧力の一覧をリモートマシン30から受信するprogram neighborhoodアプリケーションを実行する。この実施態様の別の例では、ローカルマシン10は、リモートマシン30’’’などのウェブサーバと通信して、アプリケーションの一覧を受信する。ローカルマシン10のユーザは、一覧表のアプリケーションプログラムを表すグラフ描写を選択することによって、一覧表のアプリケーションプログラムにアクセスすることを要求し得る。ローカルマシン10のユーザは、ローカルマシン10上に以前にインストールされていないアプリケーションプログラムにアクセスすることを要求し得る。
ローカルマシン10は、アプリケーションプログラムにアクセスする要求をリモートマシン30に伝送する。ローカルマシン10は、リモートマシン30’’の識別表示を受信し、アプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供する。ローカルマシン10は、アプリケーションプログラムの実行に必要な少なくとも1つの特性を識別する。この実施態様の一例では、ローカルマシン10は、リモートマシン30によってローカルマシン10に伝送されたリモートマシン30’’の識別表示を含む少なくとも1つの特性を受信する。この実施態様の別の例では、ローカルマシン10は、リモートマシン30’’の識別表示を受信後、少なくとも1つの特性をリモートマシン30’’から検索する。ローカルマシン10は、複数のアプリケーションファイルを検索するための承認を受信する前に、少なくとも1つの特性を含むように要求される場合がある。あるいは、ローカルマシン10は、複数のアプリケーションファイルを実行する前に、少なくとも1つの特性を含むように要求される場合がある。この実施態様の一例では、ローカルマシン10は、複数のアプリケーションファイルの実行全体で、少なくとも1つの特性を含むように要求される場合がある。
ローカルマシン10が少なくとも1つの特性を含むことが、ローカルマシン10によって検証された後、ローカルマシン10は、少なくとも1つのアプリケーションファイルを複数のアプリケーションファイル内で検索し、検索されたアプリケーションファイルを実行して、アプリケーションプログラムを実行する。
(実施例2)
リモートマシン30は、アプリケーションプログラムにアクセスする要求をローカルマシン10から受信する。リモートマシン30は、ローカルマシン10を認証する。この実施態様の一例では、リモートマシン30は、ユーザ名およびパスワードなどの信任状をローカルマシン10から要求する。この実施態様の別の例では、リモートマシン30は、収集エージェント404をローカルマシン10に伝送する。収集エージェント404は、ローカルマシン10に関する情報を収集して、ローカルマシン10を認証する際に使用するために、その情報をリモートマシン30に伝送する。この実施態様のさらに別の例では、リモートマシン30は、ローカルマシン10の認証のために、ローカルマシン10に関する情報をポリシーエンジン406に提供する。リモートマシン30は、ポリシーエンジン406を含むことができる。あるいは、リモートマシン30は、ポリシーエンジン406を含むリモートマシン30’と通信することができる。
リモートマシン30は、アプリケーションプログラムを実行する方法を選択する。リモートマシン30は、ローカルマシン10の認証に応じて選択を行うことができる。この実施態様の一例では、リモートマシン30は、ローカルマシン10に関して収集された情報にポリシーを適用する。この実施態様の別の例では、リモートマシン30は、アプリケーションプログラムに適用されるポリシーに応じて選択を行う。この実施態様のさらに別の例では、リモートマシン30は、アプリケーションプログラムに関連するファイルタイプに適用されるポリシーに応じて選択を行う。リモートマシン30は、アプリケーションプログラムの実行方法の選択を行うために、ファイルを調査することができる。
リモートマシン30は、ローカルマシン10が、リモートマシン30’上でアプリケーションプログラムを実行することによって生成されたアプリケーション出力データを受信することが可能であるように、アプリケーションプログラムの実行方法を選択し得る。リモートマシン30は、ローカルマシン10が、アプリケーションプログラムを含む複数のアプリケーションファイルを検索した後、アプリケーションプログラムをローカルに実行することが可能であるように、アプリケーションプログラムの実行方法を選択し得る。
一実施態様では、リモートマシン30は、ローカルマシン10が、アプリケーションストリーミングセッション全体で、アプリケーションプログラムを含む複数のアプリケーションファイルを検索しながら、ローカルにアプリケーションプログラムを実行することが可能であるように、アプリケーションプログラムの実行方法を選択する。この実施態様の一例では、ローカルマシン10は、複数のアプリケーションファイルをホストするリモートマシンとのアプリケーションストリーミングセッションを確立し、ローカルマシン10は、アプリケーションストリーミングセッション全体で複数のアプリケーションファイルの検索を開始し、検索された複数のアプリケーションファイル内の第1アプリケーションファイルを実行し、同時に複数のアプリケーションファイル内で第2アプリケーションファイルを検索する。この実施態様の別の例では、ローカルマシン10は、複数のアプリケーションファイル内の第1アプリケーションファイルを実行し、第2アプリケーションファイルにアクセスするための要求を第1アプリケーションファイルから受信後、複数のアプリケーション内の第2アプリケーションファイルを検索する。
選択した実行方法によって、ローカルマシン10が、アプリケーションプログラムを含む複数のアプリケーションファイル内の少なくとも1つのアプリケーションファイルを検索することが可能になる実施態様では、リモートマシン30は、ローカルマシン10がアクセスするために使用可能なアプリケーションプログラムをホストするリモートマシン30’’を識別する。リモートマシン30’’は、アプリケーションプログラムを含む複数のアプリケーションファイルをホストする。リモートマシン30’’は、様々なアプリケーションプログラムを含む複数の複数のアプリケーションファイルをホストし得る。この実施態様の一例では、リモートマシン30’’は、いくつかの異なるバージョンのアプリケーションプログラムの各々に関する複数のアプリケーションファイルをホストする。
リモートマシン30’’は、特定のアプリケーションプログラムを含む複数のアプリケーションファイルをアプリケーションプログラムの記述に関連付ける。ファイルは、複数のアプリケーションファイルをマシンに伝送する前に、マシン上で識別されるべき1つまたは複数の実行前提条件も識別し得る。ファイルは、リモートマシン30’’のネットワーク上のロケーションの識別表示をさらに含み得る。この実施態様の一例では、リモートマシン30は、リモートマシン30’’のネットワーク上のロケーションを識別するために、ファイルを調査する。
リモートマシン30は、リモートマシン30’’を選択する。リモートマシン30は、ローカルマシン10にアクセス可能なネットワーク上のロケーションを有するリモートマシン30’’を選択し得る。リモートマシン30は、ローカルマシン10に適合するアプリケーションプログラムのバージョンをホストするリモートマシン30’’を選択し得る。リモートマシン30は、アプリケーションプログラムの選択された実行方法の識別表示、およびリモートマシン30’’の識別表示を、アプリケーションプログラムに対するアクセス要求の受信に応じてローカルマシン10に伝送する。リモートマシン30は、リモートマシン30は、ファイルをローカルマシン10に伝送し得る。
(実施例3)
一実施態様では、ローカルマシン10は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン30’’の識別表示を受信する。ローカルマシン10は、アプリケーションプログラムに対するアクセスの承認を検証する。この実施態様の一例では、ローカルマシン10は、起動前の分析を自発的に実行する。ローカルマシン10は、ローカルマシン10上で少なくとも1つの特性を識別し、その少なくとも1つの特性の存在を検証する。少なくとも1つの特性は、アプリケーションプログラムにアクセスして実行するための承認を維持する前提条件でよい。ローカルマシン10上の少なくとも1つの特性の存在を検証することは、ローカルマシン10の特性と、アプリケーションプログラムのシステム要件との間の互換性を保証することができ、セキュリティ方針またはライセンス契約の遵守をさらに保障することができる。
起動前の分析が正常に完了すると、ローカルマシン10は、リモートマシン30’’とのアプリケーションストリーミングセッションを確立し、複数のアプリケーションファイルに対するアクセスを提供する。アプリケーションストリーミングセッションは、ローカルマシン10が、接続を通して複数のアプリケーションファイル内のファイルを要求し、受信することができる任意の接続でよい。アプリケーションストリーミングセッションの確立は、ローカルマシン10が、複数のアプリケーションファイル内のすべてのファイルを検索する前に、複数のアプリケーションファイル内の第1アプリケーションファイルを実行することを可能にし得る。ローカルマシン10は、アプリケーションプログラムの実行を開始すると同時に、複数のアプリケーションファイル内の追加のアプリケーションファイルの検索を継続することができる。あるいは、ローカルマシン10は、アーカイブファイル内の複数のアプリケーションファイルを検索し、抽出された第1アプリケーションを実行すると同時に、第2アプリケーションファイルをアーカイブファイルから抽出する。
(実施例4)
一実施態様では、ローカルマシン10上のアプリケーションストリーミングクライアント552は、複数のアプリケーションファイルをリモートマシン30から検索する。アプリケーションストリーミングクライアントは、ストリーミングサービス554、隔離環境556、およびファイルシステムフィルタドライバ564を含む。ストリーミングサービス554は、複数のアプリケーションファイルを要求および検索するために、リモートマシン30とのアプリケーションストリーミングセッションを確立する。ストリーミングサービス554は、隔離環境556内のアプリケーションファイルを実行する。ファイルシステムフィルタドライバ564は、実行アプリケーションファイルからの要求を傍受し、要求を隔離環境556にリダイレクトすることによって、隔離環境556内のアプリケーションファイルを実行することを可能にする。
この実施態様の一例では、ストリーミングサービス554は、アプリケーションプログラムを有する複数のアプリケーションファイルを含むアーカイブファイルを検索する。ストリーミングサービス554は、アーカイブファイルから、複数のアプリケーションファイルからの第1アプリケーションファイルを抽出する。第1アプリケーションファイルは、実行可能ファイルでよい。ストリーミングサービス554は、隔離環境556内の第1アプリケーションファイルを実行し得る。第1アプリケーションファイルの実行は、アプリケーションプログラムの実行を開始し得る。
別の実施態様では、隔離環境556内で実行している第1アプリケーションファイルは、ローカルマシン10から、複数のアプリケーションファイルの一覧を要求する。ファイルシステムフィルタドライバ564は、一覧に対する要求を傍受し、要求をストリーミングサービス554にリダイレクトする。ストリーミングサービス554が、複数のアプリケーションファイルを検索した実施態様では、ストリーミングサービス554は、複数のアプリケーションファイルの一覧を生成し得る。ストリーミングサービス554が、複数のアプリケーションファイルを含むアーカイブファイルを検索した実施態様では、ストリーミングサービス554は、検索されたアーカイブファイルに含まれていた一覧に応じて、複数のアプリケーションファイルの一覧を生成し得る。他の実施態様では、ストリーミングサービス554は、複数のアプリケーションファイルの一覧のみを検索するが、複数のアプリケーションファイル内の少なくとも1つのアプリケーションファイルはリモートマシン30上に存在し、ストリーミングサービス554は、未だローカルマシン10まで検索していない。これらの実施態様では、ストリーミングサービス554は、検索された一覧に応じて、複数のアプリケーションファイルの一覧を生成し得る。これらの実施態様の一例では、ストリーミングサービス554は、複数のアプリケーションファイルがローカルマシン10上に存在するが、一覧のみがローカルマシン10に存在することを第1アプリケーションファイルに指示する。
(実施例5)
一実施態様では、隔離環境556内で実行している第1アプリケーションファイルは、複数のアプリケーションファイルの一覧によって識別されたファイルに対するアクセスを、ローカルマシン10から要求する。要求されたファイルが、第1アプリケーションファイルがアクセス可能な隔離環境556内のユーザスコープに存在する場合、第1アプリケーションファイルは、要求されたファイルにアクセスする。
要求されたファイルが、ユーザスコープ内、または隔離環境556内に存在しない場合、ファイルシステムフィルタドライバ564は、要求を傍受し、要求をストリーミングサービス554にリダイレクトする。要求されたファイルが、複数のアプリケーションファイルを含むアーカイブファイル内のファイルである場合、ストリーミングサービス554は要求されたファイルを抽出し、要求されたファイルをローカルマシン10上に記憶する。ストリーミングサービス554は、ファイルを隔離環境556内に記憶し得る。ファイルに対する要求は、ファイルが隔離環境556内に記憶されている時に履行される。
要求されたファイルが、隔離環境556内、または複数のアプリケーションファイルを含むアーカイブファイル内に存在しない場合、ストリーミングサービス554は、リモートマシン30からファイルを要求する。ストリーミングサービス554は、アプリケーションストリーミングセッション全体で、ファイルをリモートマシン30から受信することができる。ストリーミングサービス554は、受信したファイルを隔離環境556内に記憶する。ファイルに対する要求は、ファイルが隔離環境556内に記憶されている時に履行される。
この実施態様の一例では、第2アプリケーションファイルは、隔離環境556内の第2ユーザスコープを実行する。第2アプリケーションファイルは、第1アプリケーションファイルによって最初に要求されたファイルに対するアクセスを要求する。要求されたファイルのコピーが、第2ユーザスコープ内に存在しない場合、隔離環境556内に記憶された要求されたファイルのコピーは、アプリケーションファイルに対する要求に応じるために使用される。
(実施例6)
一実施態様では、ローカルマシン10は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン30’の識別表示をリモートマシン30から受信する。ローカルマシン10は、ローカルマシン10の起動前の分析を正常に完了する。ローカルマシン10は、アプリケーションプログラムの実行を承認するライセンスをリモートマシン30から受信する。この実施態様の一例では、ライセンスは、ローカルマシン10に対して、心拍メッセージをセッション管理サーバ562に伝送し、アプリケーションプログラムを実行するための承認を維持するように要求する。心拍メッセージは、アプリケーションプログラムの実行の開始、アプリケーションプログラムの実行の終了を指示するメッセージ、アプリケーションプログラムの実行全体で周期的に送信されるメッセージを含み得る。心拍メッセージは、ローカルマシン10がネットワークに接続する場合、またはローカルマシン10が、ネットワークに対する接続を終了する場合、ローカルマシン10の状態に関するメッセージも含み得る。この実施態様の別の例では、ライセンスは、ローカルマシン10が、アプリケーションプログラムを実行するための承認を有する予め決められる期間を指定する。
ローカルマシン10は、リモートマシン30’とのアプリケーションストリーミングセッションを確立し、複数のアプリケーションファイル内の少なくとも1つのアプリケーションファイルを検索する。少なくとも1つのアプリケーションファイルの実行時、受信したライセンスが、心拍メッセージの伝送を要求する実施態様では、ローカルマシン10は、心拍メッセージをセッション管理サーバ562に送信し、少なくとも1つのアプリケーションファイルを実行するための承認を維持する。
(実施例7)
一実施態様では、ローカルマシン10は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン30’の識別表示を受信する。ローカルマシン10は、ローカルマシン10の起動前の分析を正常に完了する。ローカルマシン10は、ローカルマシン10が、アプリケーションプログラムを実行するための承認を有する予め決められる期間を指定するライセンスを受信する。
ローカルマシン10は、リモートマシン30’とのアプリケーションストリーミングセッションを確立し、複数のアプリケーションファイル内の少なくとも1つのアプリケーションファイルを検索する。この実施態様の一例では、ローカルマシン10は、複数のアプリケーションファイルのサブセットを検索し、このサブセットは、ローカルマシン10がネットワークに接続されていない時に、アプリケーションプログラムを実行するのに必要な各々のファイルを含む。ローカルマシン10は、サブセットをローカルマシン10上のキャッシュ内に記憶する。
予め決められた期間内のある時点で、ローカルマシン10は、ネットワークから切断され、アプリケーションプログラムにアクセスするための要求をローカルマシン10のユーザから受信する。この実施態様の一例では、ローカルマシン10は、ラップトップなどのデバイスであり、ローカルマシン10のユーザは、航空機など、ネットワークに対する接続を禁止する環境に存在する。要求をユーザから受信後、ローカルマシン10は、複数のアプリケーションファイルからのアプリケーションファイルをキャッシュから検索し、アプリケーションプログラムを実行する。
(実施例8)
別の実施態様では、ローカルマシン10は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン30の識別表示を受信する。ローカルマシン10は、実行のためにローカルマシン10上に存在する第1クライアントエージェントの識別表示を受信し、アプリケーションストリーミングクライアントなどの複数のアプリケーションファイルを検索し得る。
この実施態様の一例では、ローカルマシン10は、起動前の分析を自発的に正常に完了することができない。ローカルマシン10には、特定のデバイスドライバ、またはオペレーティングシステムなど、アプリケーションプログラムの要件に適合する必要がある特性がない場合がある。ローカルマシン10には、セキュリティポリシーに適合する必要がある特性、たとえば、特定のアクティブディレクトリ内のメンバーシップ、またはプライベートネットワークにアクセスするための承認をがない場合がある。ローカルマシン10は、アプリケーションプログラムの要件と矛盾するマシンのタイプ、たとえば計算集約的なアプリケーションプログラムにアクセスしようとするパーソナルデジタルアシスタント、またはプライベートネットワーク上のリモートマシンによりホストされる安全なアプリケーションを実行しようとするキオスクにある公共マシンなどである場合がある。
ローカルマシン10は、ローカルマシン10には、アプリケーションプログラムにアクセスするために必要な少なくとも1つの特性がないという決定に応じて、アプリケーションストリーミングセッション全体で複数のアプリケーションファイルを検索しないことを決定する。ローカルマシン10は、識別された第1クライアントエージェントを実行するのではなく、ローカルマシン10上に存在する第2クライアントエージェントを実行する。この実施態様の一例では、ローカルマシン10は、第2クライアントエージェントの識別表示を受信し、起動前の分析を正常に完了しない場合に実行する。ローカルマシン10は、リモートマシン30’’上のアプリケーションプログラムの実行を要求する。第2クライアントエージェントは、リモートマシン30’’上のアプリケーションプログラムの実行により生成されるアプリケーション出力データを受信する。第2クライアントエージェントは、アプリケーション出力データをローカルマシン10上に表示する。
(実施例9)
一実施態様では、ネットワークの管理者は、ローカルマシン10のユーザに対し、アプリケーションプログラムに対するアクセスを提供する。管理者は、アプリケーションをリモートマシン30’上で実行し、アプリケーションプログラムを含む複数のアプリケーションファイルを生成する。アプリケーションは、グラフィカルユーザインターフェースを含み得る。管理者は、グラフィカルユーザインターフェースを使用して、アプリケーションプログラム、およびアプリケーションプログラムに関連するインストーラプログラムを識別し、アプリケーションプログラムに対するアクセスを承認する際に適用されるポリシーを画定し、提供されるアクセスのタイプに関する特性、たとえばアプリケーションプログラムにアクセスするか、またはアプリケーションプログラムを実行しようとするローカルマシン10が履行するべき要件を指定することができる。管理者は、全体のアプリケーションプログラム、またはアプリケーションプログラムの一部分、たとえばアップグレードもしくはパッチなどをインストールするインストーラプログラムを指定し得る。
この実施態様の一例では、リモートマシン30はパッケージ機構530を含む。パッケージ機構530は、隔離環境532内のインストーラプログラムをリモートマシン30上で実行する。インストーラプログラムの実行によって、アプリケーションプログラムに関連する少なくとも1つのアプリケーションファイルが、隔離環境532内にインストールされる。リモートマシン30は、ファイルシステムフィルタドライバ534を含むことができ、ファイルシステムフィルタドライバ534は、インストーラプログラムにより要求を傍受し、アプリケーションファイルをローカルマシン10上にインストールし、要求を隔離環境532にリダイレクトすることによって、アプリケーションファイルを隔離環境532内にインストールすることを保証する。パッケージ機構530は、ファイルシステムフィルタドライバ534を使用して、隔離環境532内にインストールされた各々のアプリケーションファイルの記録を維持する。
インストーラプログラムは、複数のアプリケーションファイルを隔離環境532内にインストールし得る。パッケージ機構530は、複数のアプリケーションファイル内のアプリケーションファイルの一覧を含むファイルを生成する。このファイルは、複数のアプリケーションファイルに関連する情報、たとえば、複数のアプリケーションファイルが構成するアプリケーションプログラムのタイプ、アプリケーションプログラムのバージョン、アプリケーションプログラムに関連する実行前提条件、およびポリシー要件、たとえば特定のアプリケーションプログラムに必要な実行方法を含み得る。パッケージ機構530は、複数のアプリケーションファイルおよびファイルをリモートマシン30’上に記憶する。
一実施態様では、ネットワークの管理者は、既存のアプリケーションプログラム、またはアプリケーションプログラムを含む複数のアプリケーションファイル内のアプリケーションファイルのアップデートバージョンを含むアプリケーションプログラムを識別する。
C.クライアント−サーバ通信を加速するためのシステムおよび方法
本発明の一実施態様は、クライアント−サーバ通信を加速するためのシステムおよび方法を目的とする。これらのシステムおよび方法は、単独で、または組み合わせて使用することができる、上記のコンピューティング環境を提供する任意のシステムおよび方法に関連して使用することができる。特に、加速技術の4つの一般的なカテゴリについて説明する。
1.動的に生成されたオブジェクトのキャッシング:実施態様によっては、クライアント−サーバ通信は、データ通信ネットワーク内の動的に生成されたオブジェクトのキャッシングを行うアプライアンス1250によって加速される。
2.接続プーリング:実施態様によっては、クライアント−サーバ通信は、接続プーリング技術を実行するアプライアンス1250によって加速される。
3.統合キャッシング:別の実施態様では、クライアント−サーバ通信は、複数の加速技術と統合されたキャッシングを実行するアプライアンス1250によって加速される。
4.クライアント側の加速:さらに別の実施態様では、クライアント−サーバ通信は、1つまたは複数の加速技術を実行するクライアント10上で実行するプログラムによって加速される。
1.動的に生成されたオブジェクトのキャッシング
本明細書でより詳細に説明するように、一実施態様では、アプライアンス1250は、オペレーティングシステムのカーネルレベルにおけるキャッシングの機能を、1つまたは複数のその他の処理タスクと統合することができ、その他の処理タスクとしては、解読、解凍、または認証および/または承認を含むが、これらだけに限らない。こうした一例のアーキテクチャについて、図27に関連して本明細書で説明するが、本明細書で説明する動作を実践する際に、その他のアーキテクチャを使用してよい。
図27は、アプライアンス1250の一例のアーキテクチャ3200を示す。上記のとおり、アーキテクチャ3200は、単に具体的に示すために記載するのであって、制限する意図はない。図2に示すように、一例のアーキテクチャ3200は、ハードウェア層3206、並びにユーザ空間3202およびカーネル空間3204に分割されたソフトウェア層から成る。
ハードウェア層3206は、カーネル空間3204およびユーザ空間3202内のプログラムおよびサービスが上で実行されるハードウェア要素を提供する。ハードウェア層3206は、カーネル空間3204およびユーザ空間3202内のプログラムおよびサービスが、内部および外部でアプライアンス1250に関連するデータを通信することを可能にする構造および要素も提供する。図27に示すように、ハードウェア層3206は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット3262、ソフトウェアおよびデータを記憶するためのメモリ3264、ネットワークを通してデータを伝送および受信するためのネットワークポート3266、並びにネットワークを通して伝送および受信されたデータのセキュアソケットレイヤー処理に関連する機能を実行する暗号化プロセッサ3260を含む。実施態様によっては、中央処理ユニット3262は、単一プロセッサ内で暗号化プロセッサ3260の機能を実行し得る。さらに、ハードウェア層3206は、処理ユニット3262および暗号化プロセッサ3260の各々に複数のプロセッサを備えることができる。アプライアンス1250のハードウェア層3206は、一般に暗号化プロセッサ3260で示されているが、プロセッサ3260は、セキュアソケット層(SSL)、またはトランスポート層セキュリティ(TLS)プロトコルなどの任意の暗号化プロトコルに関連する機能を実行するプロセッサでよい。実施態様によっては、プロセッサ3260は汎用プロセッサ(GPP)でよく、さらに他の実施態様では、任意のセキュリティ関連プロトコルの処理を実行するために実行可能なインストラクションを有する場合がある。
アプライアンス1250のハードウェア層3206は、図27に特定の要素で示されているが、アプライアンス1250のハードウェア部分または構成要素は、本明細書の図1Cおよび1Dに関連して図示および説明されているコンピューティングデバイス135などのコンピューティングデバイスの任意のタイプもしくは形式の要素、ハードウェア、またはソフトウェアを含むことができる。実施態様によっては、アプライアンス1250は、サーバ、ゲートウェイ、スイッチ、ブリッジ、またはその他のタイプの計算またはネットワークデバイスを備え、これらに関連する任意のハードウェアおよび/またはソフトウェア要素を有することができる。
アプライアンス1250のオペレーティングシステムは、使用可能なシステムメモリをカーネル空間3204およびユーザ空間3204に割り当て、管理するか、あるいは分離する。一例のソフトウェアアーキテクチャ3200では、オペレーティングシステムは、任意のタイプおよび/または形式のUnix(登録商標)オペレーティングシステムでよい。したがって、アプライアンス1250は、任意のオペレーティングシステム、たとえば、任意のバージョンのMicrosoft(登録商標)Windows(登録商標) オペレーティングシステム、Macintoshコンピュータ用の任意のバージョンのMac OS(登録商標)、任意の埋め込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の独自オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、アプライアンス1250上で実行可能か、または本明細書に記載する動作を実行する任意のその他のオペレーティングシステムを実行している可能性がある。
カーネル空間3204は、任意のデバイスドライバ、カーネル拡張、またはその他のカーネル関連ソフトウェアを含むカーネル3230を実行するために予約されている。当業者は周知しているように、カーネル3230は、オペレーティングシステムのコアであり、アプリケーション1250のハードウェアリソースおよびハードウェア関連要素に対するアクセス、これらの制御および管理を提供する。一実施態様によると、カーネル空間3204は、キャッシュマネジャー3232に関連して動作するある数のネットワークサービスまたはプロセスも含み、統合キャッシュと呼ばれることもあり、その利点は、本明細書でさらに詳細に説明する。さらに、カーネル3230の実施態様は、デバイス1250によってインストール、構成、あるいは使用されるオペレーティングシステムの実施態様によって決まるであろう。
一実施態様では、デバイス1250は、クライアント10および/またはサーバ30と通信するため、1つのネットワークスタック3267、たとえばTCP/IPベースのスタックを含む。一実施態様では、ネットワークスタック3267は、第1ネットワーク、たとえばネットワーク40、および第2ネットワーク40と通信するために使用される。実施態様によっては、デバイス1250は、クライアント10のTCP接続などの第1トランスポート層接続を終端させて、クライアント10によって使用されるサーバ30に対する第2トランスポート層接続を確立し、たとえば、第2トランスポート層接続は、アプライアンス1250およびサーバ30で終端する。第1および第2トランスポート層接続は、単一ネットワークスタック3267を介して確立することができる。他の実施態様では、デバイス1250は、複数のネットワークスタック、たとえば3267および3267’を含むことができ、第1トランスポート層接続は、1つのネットワークスタック3267で確立または終端し、第2トランスポート層接続は、第2ネットワークスタック3267’で確立または終端し得る。たとえば、1つのネットワークスタックは、第1ネットワーク上でネットワークパケットを受信および伝送し、第2ネットワークスタックは、第2ネットワーク上でネットワークパケットを受信および伝送し得る。一実施態様では、ネットワークスタック3267は、アプライアンス1250によって伝送される1つまたは複数のネットワークパケットを待ち行列に入れるためのバッファ3243を含む。
図27に示すように、カーネル空間3204は、キャッシュマネジャー3232、高速層2〜7統合パケットエンジン3240、暗号化エンジン3234、ポリシーエンジン3236、およびマルチプロトコル圧縮論理3238を含む。これらの構成要素、またはプロセス3232、3240、3234、3236、および3238を、ユーザ空間3202ではなくカーネル空間3204またはカーネルモードで実行すると、これらの構成要素の各々の性能が単独で、または組み合わせて改善される。カーネル動作は、これらの構成要素またはプロセス3232、3240、3234、3236、および3238が、デバイス1250のオペレーティングシステムのコアアドレス空間で実行されることを意味する。たとえば、カーネルモード内の暗号化エンジン3234は、暗号化および解読動作をカーネルに移動することによって暗号化性能を改善し、それによって、カーネルモードのメモリ空間またはカーネルスレッドと、ユーザモードのメモリ空間またはスレッドとの間のトランザクションの数を減少させる。たとえば、カーネルモード内で取得したデータは、ユーザモードで実行されるプロセスまたはスレッドに、たとえばカーネルレベルデータ構造からユーザレベルデータ構造に渡すか、またはコピーする必要はない場合がある。別の態様では、カーネルモードとユーザモードとの間のコンテキストスイッチの数も減少する。さらに、任意の構成要素またはプロセス3232、3240、3235、3236、および3238の同期化、またはこれらの間の通信は、カーネル空間3204でより効率的に実行することができる。
実施態様によっては、構成要素3232、3240、3234、3236、および3238の任意の部分は、カーネル空間3204内で実行または動作することができ、構成要素3232、3240、3234、3236、および3238の他の部分は、ユーザ空間3202で実行または動作することができる。一実施態様では、カーネルレベルデータ構造は、1つまたは複数のネットワークパケットの任意の部分、たとえば、クライアント10からの要求、またはサーバ30からの応答を含むネットワークパケットに対するアクセスを提供するために使用される。実施態様によっては、カーネルレベルデータ構造は、ネットワークスタック3267に対するトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン3240によって取得され得る。カーネルレベルデータ構造は、ネットワークスタック3267、ネットワークスタック3267によって受信または送信されるネットワークトラフィックまたはパケットに関連するカーネル空間3204を介してアクセス可能な任意のインターフェースおよび/またはデータを含み得る。他の実施態様では、カーネルレベルデータ構造は、構成要素またはプロセスの所望の動作を実行するために、任意の構成要素またはプロセス3232、3240、3234、3236、および3238によって使用され得る。一実施態様では、構成要素3232、3240、3234、3236、および3238は、カーネルレベルデータ構造を使用する場合、カーネルモード3204で動作し、別の実施態様では、構成要素3232、3240、3234、3236、および3238は、カーネルレベルデータ構造を使用する場合、ユーザモードで動作する。実施態様によっては、カーネルレベルデータ構造は、第2カーネルレベルデータ構造、または所望の任意のユーザレベルデータ構造にコピーするか、または渡すことができる。
キャッシュマネジャー3232は、任意のタイプおよび形式のコンテンツ、たとえばオブジェクト、または起源サーバ30によって供給され、動的に生成されるオブジェクトなどのキャッシュアクセス、制御、および管理を提供するために、ソフトウェア、ハードウェア、またはソフトウェアとハードウェアとの任意の組合せを含み得る。キャッシュマネジャー3232によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、任意の形式のデータ、たとえばマークアップ言語を含むか、または任意のプロトコルを介して通信し得る。実施態様によっては、キャッシュマネジャー3232は、どこかに記憶されている最初のデータ、または以前に計算、生成、または伝送されたデータを複製し、この場合、最初のデータは、キャッシュメモリ要素の解釈に関連してフェッチ、計算、あるいは取得するために、より長いアクセス時間を必要とする場合がある。データが、キャッシュメモリ要素内に記憶されると、最初のデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスすることによって、その後使用することができる。実施態様によっては、キャッシュメモリ要素は、デバイス1250のメモリ3264内にデータオブジェクトを含む。他の実施態様では、キャッシュメモリ要素は、メモリ3264より高速のアクセス時間を有するメモリを含み得る。別の実施態様では、キャッシュメモリ要素は、デバイス1250の任意のタイプおよび形式の記憶素子、たとえばハードディスクの一部分を含み得る。実施態様によっては、処理ユニット3262は、キャッシュマネジャー3232によって使用されるキャッシュメモリを提供し得る。さらに他の実施態様では、キャッシュマネジャー3232は、キャッシングデータ、オブジェクト、およびその他のコンテンツのためのメモリ、記憶装置、または処理ユニットの任意の一部分、またはこれらの組合せを使用し得る。
さらに、キャッシュマネジャー3232は、本明細書に記載する技術の任意の実施態様を履行するための任意の論理、機能、規則、または動作を含む。たとえば、キャッシュマネジャー3232は、無効期間の満了に基づいて、つまり、クライアント10またはサーバ30から無効コマンドを受信後、オブジェクトを無効にする論理または機能を含む。実施態様によっては、キャッシュマネジャー3232は、カーネル空間3204、および他の実施態様では、ユーザ空間3202で実行するプログラム、サービス、プロセス、またはタスクとして動作し得る。一実施態様では、キャッシュマネジャー3232の第1部分はユーザ空間3202内で実行され、第2部分はカーネル空間3204内で実行される。実施態様によっては、キャッシュマネジャー3232は、任意のタイプの汎用プロセッサ(GPP)、または任意のその他のタイプの集積回路、たとえばフィールドプログラマブルゲートアレイ(FPGA)、プログラマブルロジックデバイス(PLD)、またはアプリケーション固有集積回路(ASIC)を含み得る。
ポリシーエンジン3236は、たとえば知的統計エンジン、またはその他のプログラマブルアプリケーションを含み得る。一実施態様では、ポリシーエンジン3236は、ユーザが、キャッシングポリシーを識別し、指定、画定、または構成することを可能にする構成機構を提供する。ポリシーエンジン3236は、実施態様によっては、ユーザが選択するキャッシングポリシーの決定を可能にするため、ルックアップテーブルまたはハッシュテーブルなどのデータ構造をサポートするためのメモリに対するアクセスも有する。他の実施態様では、ポリシーエンジン3236は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス1250によって行われる任意のその他の機能もしくは動作のほかに、アプライアンス1250によってキャッシュされるオブジェクト、データ、またはコンテンツに対するアクセス、これらの制御、および管理を決定および提供するための任意の論理、規則、機能、または動作を含み得る。実施態様によっては、ポリシーエンジン3236は、ポリシーエンジン406の機能と統合され得る。一実施態様では、ポリシーエンジン3236は、収集エージェント404によって提供される情報に基づくキャッシングポリシー決定を決定し得る。実施態様によっては、ポリシーエンジン3236は、アプリケーションの実行に基づくキャッシングポリシー決定を決定し得る。一実施態様では、ポリシーエンジンは、アプリケーションがクライアント10にストリーミングされるかどうかに基づいて、キャッシングポリシー決定を決定し得る。特定のキャッシングポリシーのさらに他の例は、本明細書でさらに詳細に説明する。
暗号化エンジン3234は、任意のセキュリティ関連のプロトコル、たとえばSSLもしくはTLS、またはこれらに関連する任意の機能の処理を取り扱うための任意の論理、ビジネス規則、機能を含む。たとえば、暗号化エンジン3234は、アプライアンス1250を介して通信されるネットワークパケット、またはその任意の部分を暗号化または解読する。暗号化エンジン3234は、クライアント10、サーバ30、またはアプライアンス1250のために、SSLまたはTLS接続も設定または確立し得る。したがって、暗号化エンジン3234は、SSL処理のオフロードおよび加速を提供する。一実施態様では、暗号化エンジン3234は、クライアント10とサーバ30との間に仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。実施態様によっては、暗号化エンジン3234は、暗号化プロセッサ3260と通信する。他の実施態様では、暗号化エンジン3234は、暗号化プロセッサ3260上で実行される実行可能なインストラクションを含む。
マルチプロトコル圧縮エンジン3238は、ネットワークパケットの1つまたは複数のプロトコル、たとえば、デバイス1250のネットワークスタック3267によって使用される任意のプロトコルを圧縮するための任意の論理、ビジネス規則、機能、または動作を含む。一実施態様では、マルチプロトコル圧縮エンジン3238は、クライアント10とサーバ30との間で双方向に、メッセージングアプリケーションプログラミングインターフェース(MPAI)(電子メール)を含む任意のTCP/IPベースのプロトコル、ファイル転送プロトコル(FTP)、ハイパーテキスト転送プロトコル(HTTP)、共通インターネットファイルシステム(CIFS)プロトコル(ファイル転送)、独立計算アーキテクチャ(ICA)プロトコル、リモートデスクトッププロトコル(RDP)、無線アプリケーションプロトコル(WAP)、モバイルIPプロトコル、およびボイスオーバIP(VoIP)プロトコルを圧縮する。他の実施態様では、マルチプロトコル圧縮エンジン3238は、プロトコルに基づくハイパーテキストマークアップ言語(HTML)の圧縮を提供し、実施態様によっては、拡張可能マークアップ言語(XML)など、任意のマークアップ言語を提供する。一実施態様では、マルチプロトコル圧縮エンジン3238は、アプライアンス1250通信のために、アプライアンス1250用に設計された任意のプロトコルなど、任意の高性能プロトコルの圧縮を提供する。別の実施態様では、マルチプロトコル圧縮エンジン3238は、修正トランスポート制御プロトコル、たとえばトランザクションTCP(T/TCP)、選択承認を含むTCP(TCP−SACK)、TCPラージウィンドウ、混雑予測プロトコル、たとえばTCP−Vegasプロトコル、およびTCPスプーフィングプロトコルを使用して、任意のロードまたは任意の通信を圧縮する。
したがって、マルチプロトコル圧縮エンジン3238は、ユーザが、デスクトップクライアント、たとえばMicrosoft Outlookおよび非ウェブシンクライアント、たとえばOracle、SAP、およびSiebelなどの一般的な企業アプリケーション、さらにポケットPCなどのモバイルクライアントを介してアプリケーションにアクセスするための動作を加速する。実施態様によっては、マルチプロトコル圧縮エンジン3238は、カーネルモード3204で実行し、ネットワークスタック3267にアクセスするパケット処理エンジン3240と統合することによって、任意のアプリケーション層プロトコルなどのTCP/IPプロトコルによって行われる任意のプロトコルを圧縮することができる。
一般にパケット処理エンジンまたはパケットエンジンとも呼ばれる高速層2〜7統合パケットエンジン3240は、ネットワークポート3266を通してアプライアンス1250を介して受信および伝送されるパケットのカーネルレベル処理の管理に関与する。高速層2〜7統合パケットエンジン3240は、ネットワークパケットの受信、またはネットワークパッカーなどの受信などの処理時に、1つまたは複数のネットワークパケットを待ち行列に入れるためのバッファを備えることができる。さらに、高速層2〜7統合パケットエンジン3240は、1つまたは複数のネットワークスタック3267と通信し、ネットワークポート3266を介して、ネットワークパケットを送信および受信する。高速層2〜7統合パケットエンジン3240は、暗号化エンジン3234、キャッシュマネジャー3232、ポリシーエンジン3236、およびマルチプロトコル圧縮論理3238に関連して動作する。特に、暗号化エンジン3234は、パケットのSSL処理を実行するように構成され、ポリシーエンジン3236は、要求レベルのコンテンツの切り替え、および要求レベルのキャッシュのリダイレクトなど、トラフィック管理に関連する機能を実行するように構成され、マルチプロトコル圧縮論理3238は、データの圧縮および解凍に関連する機能を実行するように構成される。
高速層2〜7統合パケットエンジン240は、パケット処理タイマー3242を含む。一実施態様では、パケット処理タイマー3242は、着信、つまり受信、または送出、つまり伝送されるネットワークパケットの処理をトリガするため、1つまたは複数の時間間隔を提供する。実施態様によっては、高速層2〜7統合パケットエンジン3240は、タイマー3242に応じてネットワークパケットを処理する。パケット処理タイマー3242は、イベント、間隔、または発生を通知、トリガ、または通信するため、任意のタイプおよび形式の信号をパケットエンジン3240に提供する。多くの実施態様では、パケット処理タイマー3242は、たとえば100ミリ秒、50ミリ秒、または25ミリ秒など、ミリ秒台で動作する。たとえば、実施態様によっては、パケット処理タイマー3242は、時間間隔を提供するか、あるいは、ネットワークパケットが、高速層2〜7統合パケットエンジン3240によって、10ミリ秒の時間間隔で、他の実施態様では5ミリ秒の時間間隔、さらに他の実施態様では、3、2、または1ミリ秒の時間間隔で処理されるようにする。高速層2〜7統合パケットエンジン3240は、動作時に暗号化エンジン3234、キャッシュマネジャー3232、ポリシーエンジン3236、およびマルチプロトコル圧縮エンジン3238とインターフェースするか、統合されるか、または通信し得る。したがって、暗号化エンジン3234、キャッシュマネジャー3232、ポリシーエンジン3236、およびマルチプロトコル圧縮論理3238の任意の論理、機能、または動作は、パケット処理タイマー3242および/またはパケットエンジン3240に応じて実行することができる。したがって、暗号化エンジン3234、キャッシュマネジャー3232、ポリシーエンジン3236、およびマルチプロトコル圧縮論理3238の任意の論理、機能、または動作は、パケット処理タイマー3242を介して提供される時間間隔の粒度で、たとえば10ミリ秒以下の時間間隔で実行することができる。たとえば、一実施態様では、キャッシュマネジャー3232は、高速層2〜7統合パケットエンジン3240および/またはパケット処理タイマー3242に応じて、キャッシュされた任意のオブジェクトの無効化を実行し得る。別の実施態様では、キャッシュされたオブジェクトの満了または無効化時間は、10ミリ秒など、パケット処理タイマー3242の時間間隔と同じ粒度台に設定することができる。
ユーザ空間3202は、カーネル空間3204と違って、ユーザモードアプリケーションまたはプログラムによって使用されるか、あるいはユーザモードで実行しているオペレーティングシステムのメモリ空間または一部である。ユーザモードアプリケーションは、カーネルサービスにアクセスするために、カーネル空間3204に直接アクセスして、サービスコールを使用することはできない。図27に示すように、アプライアンス1250のユーザ空間3202は、グラフィカルユーザインターフェース(GUI)3210、コマンドラインインターフェース(CLI)3212、シェルサービス3214、健全性監視プログラム3216、およびデーモンサービス3218を含む。GUI210およびCLI3212は、システム管理者またはその他のユーザが、アプライアンス1250の動作と相互作用し、この動作を制御することを可能にする手段を提供する。GUI210およびCLI3212は、システム管理者またはその他のユーザが、アプライアンス1250のオペレーティングシステムを介して、ユーザ空間3202またはカーネル空間3204で、アプライアンス1250の動作と相互作用し、これを制御することを可能にする手段を提供する。GUI3210は、任意のタイプおよび形式のグラフィカルユーザインターフェースでよく、テキスト、グラフィックを介して、あるいは任意のタイプのプログラムまたはアプリケーション、たとえばブラウザを介して提示され得る。CLI3212は、任意のタイプおよび形式のコマンドラインまたはテキストベースのインターフェース、たとえばオペレーティングシステムによって提供されるコマンドラインでよい。たとえば、CLI3212は、ユーザがオペレーティングシステムと相互作用することを可能にするツールであるシェルを含み得る。実施態様によっては、CLI3212は、bash、csh、tcsh、またはkshタイプのシェルを介して提供され得るシェルサービス3214は、ユーザが、GUI3210および/またはCLI3212を介して、アプライアンス1250との相互作用をサポートするためのプログラム、サービス、タスク、プロセス、または実行可能なインストラクションを含む。
健全性監視プログラム3216は、ネットワークシステムが適切に機能しており、ユーザが、要求したコンテンツをネットワークを通して受信していることを監視、チェック、報告、および保証するために使用される。健全性監視プログラム3216は、アプライアンス1250の任意の活動を監視するための論理、規則、機能、または動作を提供するための1つまたは複数のプログラム、サービス、タスク、プロセス、または実行可能なインストラクションを含む。実施態様によっては、健全性監視プログラム3216は、アプライアンス1250を介して渡される任意のネットワークトラフィックを傍受し、検査する。他の実施態様では、健全性監視プログラム3216は、任意の適切な手段および/または機構により、以下の1つまたは複数とインターフェースする:暗号化エンジン3234、キャッシュマネジャー3232、ポリシーエンジン3236、マルチプロトコル圧縮論理3238、パケットエンジン3240、デーモンサービス3218、およびシェルサービス3214。したがって、健全性監視プログラム3216は、アプライアンス1250の健全性を決定するために、任意のアプリケーションプログラミングインターフェース(API)をコールし得る。たとえば、健全性監視プログラム3216は、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在実行されているかどうかをチェックするために、ステータス照会を定期的にピングまたは送信し得る。別の例では、健全性監視プログラム3216は、アプライアンス1250の任意の部分で任意の状況、ステータス、またはエラーを決定するために、任意のプログラム、プロセス、サービス、またはタスクによって提供される任意のステータス、エラー、または履歴ログをチェックし得る。
デーモンサービス3218は、連続的またはバックグラウンドで実行され、アプライアンス1250によって受信される定期的なサービス要求を処理するプログラムである。実施態様によっては、デーモンサービスは、必要に応じて、他のプログラムまたはプロセス、たとえば別のデーモンサービス3218などに要求を回送し得る。当業者は周知しているように、デーモンサービス3218は、操作者が存在しなくても、連続的または定期的にシステム全体の機能、たとえばネットワーク制御を実行するか、または任意の所望のタスクを実行するために動作し得る。実施態様によっては、1つまたは複数のデーモンサービス3218はユーザ空間3202で実行され、他の実施態様では、1つまたは複数のデーモンサービス3218はカーネル空間で実行される。
1つまたは複数の動的に生成されるオブジェクトなどの動的コンテンツは、図1Aに示すように、1つまたは複数のクライアント10、ローカル、またはリモートからのオブジェクト要求を処理するアプリケーション、もしくは起源サーバ30と呼ばれるサーバ、および/またはバックエンドデータベースによって生成され得る。これらのアプリケーションまたはデータベースは、クライアントから受信する入力に関連するデータを含むデータを処理するため、これらのデータベースおよびアプリケーションによって供給される応答オブジェクトは変化し得る。起源サーバ内のこれらのアプリケーションまたはデータベースによって生成された以前のオブジェクトは、もはやフレッシュではなくなり、したがって、もはやキャッシュによって記憶されない。たとえば、一連の入力が同じであると仮定すると、第1インスタンスの動的に生成されたオブジェクトは、第2インスタンスの動的に生成されたオブジェクトとは異なる場合がある。別の例では、同じオブジェクトは、一連の異なる入力で動的に生成され、その結果、オブジェクトの第1インスタンスは、オブジェクトの第2インスタンスとは別に生成される。
ネットワーク性能を改善するために、アプライアンス1250は、以下で詳細に説明するように、様々な方法により、動的に生成されたコンテンツをキャッシュする際に生じる問題に対処するうように設計および構成される。本明細書に記載するいくつかの実施態様では、アプライアンス1250は、動的に生成されるとともにキャッシュ内に記憶されたコンテンツを、より効率的かつ効果的に無効化するための1つまたは複数の一連の技術を含む。さらに、アプライアンスは、フラッシュクラウドのための制御およびキャッシングを実行する技術を組み込むことができる。キャッシュメモリは、一般に、オブジェクトに関する要求に対するすべての応答が、キャッシュ不能とマークされていない限り、これらのオブジェクトを記憶する。本明細書に記載されいてるとおり、動的に生成されたコンテンツの効果的なキャッシングには、起源サーバで変更されたキャッシュメモリ内のオブジェクトを適時無効化することを可能にする技術を要する。適時に無効化することによって、キャッシュは、古いコンテンツを供給するのを防止し、これは、特にコンテンツに対する変更が不規則に行われる場合、動的に生成されたコンテンツの特に問題になるタスクである。動的に生成されたコンテンツを確実に適時無効化するために、ある数の技術を以下に記載する。
a.統合機能
一態様では、動的に生成されたオブジェクトのキャッシングは、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン3234、および/またはマルチプロトコル圧縮エンジン3238の機能、論理、または動作を、パケット処理タイマー3242に応じて、高速層2〜7を統合されたパケットエンジン3240のパケット処理動作と統合する技術に関連する。たとえば、キャッシュマネジャー3232の動作は、ネットワークパケットの受信または伝送など、パケット処理動作に使用されるパケット処理タイマー3242の時間間隔内で実行することができる。一実施態様では、パケット処理動作を統合するか、および/またはパケット処理タイマーを使用することにより、キャッシュマネジャー3232は、以下でさらに詳細に説明するとおり、満了時間を非常に小さい時間間隔に短縮して、オブジェクトをキャッシュすることができる。他の実施態様では、キャッシュマネジャー3232は、パケット処理タイマー3242に応じて、オブジェクトキャッシュする非常に短い期間内で、オブジェクトを無効化するための無効化コマンドを受信すること可能である。
図28Aに示す方法3300は、高速層2〜7を統合されたパケットエンジンまたはパケット処理エンジン3240を処理する際に、またはこうした処理のための時間間隔に関連して、ある動作を実行するように、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン3234、および/またはマルチプロトコル圧縮エンジン3238に要求するための技術の一実施態様を示す。簡潔に説明すると、方法3300のステップでは、デバイス1250はネットワークパケットを受信し、あるいはネットワークパケットを伝送するように要求される。ステップ3315では、デバイス31250は、パケット処理タイマー3242に応じて、ネットワークパケットを処理するようにパケット処理エンジン3240に要求する。パケット処理動作の一部として、またはパケット処理動作に関連して、ステップ3320では、パケット処理エンジン240は、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン234、および/またはマルチプロトコル圧縮エンジン3238に対し、キャッシュされたオブジェクトに関する動作を実行するように要求する。ステップ3325では、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン234、および/またはマルチプロトコル圧縮エンジン3238は、要求された動作を実行し、この動作には、本明細書に記載する技術の任意の1つまたは組合せを含み得る。一実施態様では、キャッシュマネジャー3232は、キャッシュされたオブジェクトの無効化を決定し、キャッシュされた無効なオブジェクトをマークする。実施態様によっては、キャッシュマネジャー3232は、パケット処理エンジン3240による要求に応じて、無効なオブジェクトをフラッシュする。キャッシュマネジャー3232は、これらの動作をパケット処理タイマー3242に応じて実行しているため、オブジェクトの無効化は、ミリ秒台の期間内に行うことができ、オブジェクトは、10ミリ秒など、パケット処理タイマー3242によって提供される時間間隔台で満了する。
さらに詳細な方法3300の場合、ステップ3310では、アプライアンス1250は、1つまたは複数のネットワークパケットを受信し、および/または1つまたは複数のネットワークパケットを伝送する。実施態様によっては、アプライアンス1250は、ネットワーク40またはネットワーク40または40’を通して、1つまたは複数のネットワークパケットを伝送することを要求する。別の実施態様では、アプライアンス1250は、1つのポート3266を通してネットワークパケットを受信し、同じポート3266または異なるポート3266’を通してネットワークパケットを伝送する。実施態様によっては、アプライアンス1250のパケットエンジン3240は、1つまたは複数のネットワークパケットを伝送するか、または伝送することを要求する。一実施態様では、アプライアンス1250は、第1ネットワーク40を通してパケットを受信または伝送し、別の実施態様では、アプライアンス1250は、第2ネットワーク40’を通してパケットを受信または伝送する。他の実施態様では、アプライアンス1250は、同じネットワーク40を通してパケットを受信および伝送する。実施態様によっては、アプライアンス1250は、ネットワークパケットを受信し、および/または1つまたは複数のクライアント10に伝送する。他の実施態様では、アプライアンス1250は、ネットワークパケットを受信し、および/または1つまたは複数のサーバ30を通して伝送する。
ステップ3315では、デバイス1250は、デバイス1250のネットワークポート3266でネットワークパケットを受信後、ネットワークパケットをデバイス1250から伝送する要求の後、あるいは1つまたは複数のネットワークパケットの受信および/または伝送の任意の組合せの後、パケット処理エンジン3240のパケット処理動作を要求またはトリガし得る。実施態様によっては、パケット処理エンジン3240のパケット処理動作は、パケット処理タイマー3242によって提供される信号を介してトリガされる。一実施態様では、パケット処理タイマー3242は、1つまたは複数のネットワークパケットの受信および/または伝送に関連する割り込み駆動またはイベント駆動タイマーの機能を提供し得る。実施態様によっては、パケット処理タイマー3242は、デバイス1250を介してネットワークパケットの受信および/または伝送の速度で、あるいは各々のパケットまたはパケットのバッチが処理される速度で駆動される。したがって、パケット処理タイマー3242は、1つまたは複数のパケット処理動作の各々のセットの後、トリガおよびリセットされ得る。別の実施態様では、パケット処理タイマー3242は、パケット処理エンジン3240をトリガするか、起動するか、またはパケット処理エンジン3240に信号で通知して、受信されたパケットを処理するか、または提示されたパケットを伝送するための時間間隔、等しいかまたは可変の時間間隔を提供する。図27のデバイス1250に関連して上記で説明したとおり、パケット処理タイマー3242は、ミリ秒台で動作し、10ミリ秒以下の間隔で時間間隔を生じ、あるいはパケット処理動作をトリガすることができる。パケット処理タイマーの粒度タイマーの機能は、様々な方法で提供し、パケット処理エンジン3240のパケット処理動作を実行する際に使用することができる。
方法3300のステップ3320では、パケット処理エンジン3240は、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン3234、および/またはマルチプロトコル圧縮エンジン3238の1つまたは複数に対し、動作を実行するように要求する。一実施態様では、パケット処理エンジン3240、またはパケット処理タイマー3242は、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン3234、および/またはマルチプロトコル圧縮エンジン3238の1つまたは複数に対する1つまたは複数の信号を生成する。パケット処理エンジン3240は、ネットワークパケット、あるいは1つまたは複数のパケットのパケット処理動作前、動作中、あるいは動作後の任意の時点で、動作を要求するか、あるいは信号で通知することができる。一実施態様では、パケット処理エンジン240は、パケット処理タイマー3242のトリガ後、パケット処理タイマー3242によって提供された時間間隔の満了後、またはパケット処理動作をネットワークパケット上で実行する前に要求を行う。別の実施態様では、1つまたは複数のパケット処理動作を実行する過程で、パケット処理エンジン3240は要求を行う。たとえば、関数コール内など、ある動作の実行時に、パケット処理エンジン240は、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン3234、および/またはマルチプロトコル圧縮エンジン238の1つに対して、アプリケーションプログラミングインターフェース(API)コールを行うことができる。他の実施態様では、パケット処理エンジン3240は、ネットワークパケット処理動作の完了後に要求を行う。
ステップ3325では、要求された動作は、キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン3234、および/またはマルチプロトコル圧縮エンジン3238の1つまたは複数によって実行される。実施態様によっては、カーネル3204を介して提供される任意の機能または動作は、たとえばカーネルアプリケーションプログラミングインターフェース(API)を介して、実行するように要求され得る。したがって、デバイス1250の任意の機能は、パケット処理タイマー3232を介して、パケット処理のタイミングまたはタイミング間隔に関連して実行することができる。実施態様によっては、要求された動作は、パケット処理エンジン3240のパケット処理動作と同時に、この動作に関連して実行される。たとえば、パケット処理動作は、要求された動作の完了、または要求された動作からの応答を待ち、その後に継続する。他の実施態様では、予期された動作は、パケット処理動作と同時に実行される。たとえば、パケット処理エンジン3240は、動作を実行する要求を送信するが、動作からの応答を受信することを妨げるか、または待たない。図28Bに示す方法3350に関連してさらに詳細に説明するように、パケット処理エンジン3240は、キャッシュマネジャー3232に対して、任意のキャッシュ管理機能を実行するか、たとえばオブジェクトの満了または無効化をチェックする、オブジェクトを無効とマークする、または無効か、または満了したオブジェクトをフラッシュするように要求することができる。
実施態様によっては、パケット処理エンジン3240は、ステップ3320で、キャッシュマネジャー232に対する第1要求、および暗号化エンジン3234に対する第2要求など、複数の要求を送信する。他の実施態様では、パケット処理エンジン3240は、ステップ3320で、デバイス1250によって分配される複数の要求を含む1つの要求を、たとえばカーネル3230を介して、デバイス1250の意図された構成要素に送信する。一実施態様では、この要求は、その後互いに通信される。別の実施態様では、要求は、前の要求のステータス、結果、成功、または完了によって決まる場合がある。たとえば、ポリシーエンジン3236に対する第1の要求は、ネットワークパケットに関連する別のデバイスまたはユーザからのネットワークパケットを処理するためのポリシーを決定するために使用し得る。ポリシーエンジン3236のポリシーに基づいて、キャッシュに対する第2要求は、第1要求の結果に応じて行われるか、あるいは行われない場合がある。キャッシュマネジャー3232、ポリシーエンジン3236、暗号化エンジン3234、および/またはマルチプロトコル圧縮エンジン3238が、パケット処理エンジン3240を含むデバイス1250のカーネル空間204内に組み込まれると、本明細書で説明するようにデバイス1250の様々な動作があり、これらの動作は、パケット処理動作によってトリガするか、またはパケット処理動作と統合することができる。
b.無効化粒度
別の態様では、動的に生成されたオブジェクトのキャッシングは、パケット処理タイマーによって提供される時間間隔の粒度など、微細粒度の時間間隔に関連し、キャッシュによって記憶されたオブジェクトの満了時間を構成する能力をこうした微細粒度の時間間隔に組み込む。この特性は、「無効化粒度」と呼ばれる。したがって、一実施態様では、満了時間が非常に小さい時間的間隔まで減少したオブジェクトはキャッシュすることができる。他の実施態様では、パケット処理タイマーに応答するキャッシュマネジャーは、オブジェクトをキャッシュする非常に短期間の範囲内で、オブジェクトを無効化する無効化コマンドも受信する。この微細粒度を満了時間に提供することによって、キャッシュは、頻繁に、時には1秒以内に何度も変化するオブジェクトをキャッシュし、供給することができる。1つの手法は、ミリ秒台の時間増分で動作することが可能な一実施態様のデバイスによって使用されるパケット処理タイマーを強化し、10ミリ秒以下の無効化または満了粒度を可能にすることである。対照的に、従来のキャッシュは、一般に、1秒未満の満了または無効化粒度を設定しない。
次に、図28Bを参照すると、パケット処理タイマー3242および/またはパケット処理エンジン3240に応じて、キャッシュされたオブジェクトを無効化または失効させる方法3350の一実施態様が示されている。したがって、実施態様によっては、キャッシュされたオブジェクトは、10ミリ秒以下など、ミリ秒台で無効化または失効させることができる。概観では、方法3350のステップ3355では、キャッシュマネジャー3232は、パケット処理タイマー3242に応じて、パケット処理エンジン3240を介して動作を実行ための信号または要求を受信する。ステップ3360では、キャッシュマネジャー3232は、キャッシュされたオブジェクト、たとえば動的に生成されたオブジェクトは無効であるか、あるいは失効している。ステップ3365では、オブジェクトが無効である場合、キャッシュマネジャー3232は、オブジェクトを無効とマークし、ステップ3370では、無効なオブジェクトをキャッシュマネジャー3232からフラッシュする。
ステップ3355のさらに他の詳細では、実施態様によっては、キャッシュマネジャー3232は、ネットワークパケット処理時の任意の時点の動作に関連して、キャッシュを実行するように信号で通知されるか、または要求され得る。一実施態様では、ステップ3355で、キャッシュマネジャー3232は、デバイス1250によって受信されるか、または伝送されるネットワークパケットを処理する前に、動作要求を受信する。別の実施態様では、キャッシュマネジャー3232は、ネットワークパケットの処理の完了後に動作要求を受信する。たとえば、パケット処理エンジン3240は、ネットワークパケットの処理を完了し、タイマー3242の次の時間間隔を待つ前、あるいは次のパケットを処理する前に、キャッシュに動作を事故するように要求する。他の実施態様では、パケット処理の動作時に、パケット処理エンジン3240は、動作要求をキャッシュマネジャー3232に連絡する。別の実施態様では、キャッシュマネジャー3232は、たとえばパケット処理エンジン3240またはパケット処理タイマー3242から、キャッシュマネジャー3232をトリガして動作を実行するという信号を受信する。実施態様によっては、この信号は、キャッシュされたオブジェクトを無効化するか、またはキャッシュされたオブジェクトの有効期限を満了させることを指示する。
実施態様によっては、キャッシュマネジャー3232は、キャッシュマネジャー3232の外部の実態からキャッシュ動作を実行する要求、たとえばサーバ30によって連絡され、パケット処理エンジン3240によって処理されるオブジェクトを無効化する要求を受信する場合がある。一実施態様では、キャッシュマネジャー3232は、オブジェクトをキャッシュしてから10ミリ秒以内に、別の実施態様では、5ミリ秒、2ミリ秒、または1ミリ秒という短時間で無効化要求を受信し得る。他の実施態様では、キャッシュマネジャー3232は、キャッシュマネジャー3232の動作または機能、たとえばオブジェクトを無効化させるタイマーの満了に応じて、あるいは任意のキャッシュコマンドの処理時にキャッシュ動作を実行し得る。他の実施態様では、キャッシュマネジャー3232は、デバイス1250のパケット処理タイマー3242を使用して、キャッシュ動作をトリガする。たとえば、タイマー2342は、タイマー3242が設定可能な任意の時間間隔で、キャッシュされたオブジェクトの無効化または失効をチェックするために、キャッシュをトリガするか、または信号を送信し得る。一実施態様では、タイマー3242は、設定後10ミリ秒以内に、別の実施態様では5ミリ秒、2ミリ秒、1ミリ秒という短時間でキャッシュをトリガするか、または信号を送信する。実施態様によっては、起源サーバ30は、オブジェクトの失効時間を設定し得る。他の実施態様では、アプライアンス1250またはクライアント10は、オブジェクトの失効を設定することができる。
ステップ3360では、キャッシュマネジャー3232は、キャッシュ内に記憶されたオブジェクトの無効化または失効を決定する。実施態様によっては、キャッシュ内のオブジェクトは、タイマーの満了に基づいて無効化される。一実施態様では、キャッシュマネジャー3232は、タイマーの満了に基づいて、無効化コマンドを発行し得る。別の実施態様では、キャッシュ内に記憶されたオブジェクトは、パケット処理タイマー3242で設定されたタイマーなど、タイマーの満了に応じて、キャッシュマネジャー3232より自動的に無効化される。実施態様によっては、キャッシュマネジャー3232は、パケット処理タイマー3242に応答して、キャッシュされたオブジェクトの任意のタイマーの満了をチェックする。一実施態様では、キャッシュマネジャー3232は、オブジェクトタイマーが満了したと決定し、別の実施態様では、キャッシュマネジャー3232は、オブジェクトタイマーが満了していないと決定する。さらに他の実施態様では、キャッシュマネジャー3232は、さらに他の実施態様では、キャッシュマネジャー3232は、パケット処理タイマー3242の第2トリガまたは第2タイマー間隔に応じて、前にチェックしたオブジェクトタイマーが満了している場合、第2の時間をチェックするであろう。
実施態様によっては、キャッシュマネジャー3232は、無効化コマンドまたは要求に関して構文解析、解釈、アクセス、読み取り、あるいは処理を行うか、またはキャッシュ内で無効化するオブジェクトを識別するように要求する。一実施態様では、キャッシュマネジャー3232の外部の実態は、キャッシュマネジャー3232に対して、オブジェクト無効化する無効化コマンドを発行する。別の実施態様では、外部の実態は、パケット処理タイマー3242に応答して無効化コマンドを発行し得る。オブジェクトが有効であるか、および/または無効化されていない場合、キャッシュマネジャー3232は、要求に応じてオブジェクトを無効化する。実施態様によっては、キャッシュマネジャー3232よって処理される無効化要求は、要求を処理するパケット処理エンジン3240のパケット処理動作に応答し、その結果、パケット処理タイマー3242にも応答し得る。
ステップ3365では、キャッシュマネジャー3232は、オブジェクトを無効としてマークする。キャッシュマネジャー3232は、任意の適切または望ましい方法で、各々のオブジェクトを無効とマークする。一実施態様では、オブジェクトは、記憶されたオブジェクトのフラグ、属性、または特性を設定することにより無効とマークされる。たとえば、フラグは、キャッシュマネジャー3232に従ってオブジェクトが無効であることを識別する任意の値に設定することができる。別の実施態様では、オブジェクトは、無効なオブジェクトを記憶するためのキャッシュの領域または部分にオブジェクトを移動させることによって、無効とマークすることができる。他の実施態様では、キャッシュマネジャー3232は、データベース、またはリンクされたリスト、もしくは任意のタイプおよび形式のデータ構造によって、記憶されたオブジェクトの無効および/または有効状態を識別または追跡し得る。実施態様によっては、キャッシュマネジャー3232は、1つまたは複数のオブジェクトを使用して、キャッシュ内に記憶された1つまたは複数のオブジェクトの有効性または無効性を識別または追跡する。別の実施態様では、オブジェクトは、記憶されたオブジェクトを変更、修正、または改変する、たとえばオブジェクトの一部を削除または除去することによって使用できないようにするか、あるいはオブジェクトの名前を変更またはマングルすることによって、無効とマークされる。
ステップ3370では、キャッシュマネジャー3232は、実施態様によっては、無効とマークされたオブジェクトをキャッシュからフラッシュする。別の実施態様では、キャッシュマネジャー3232は、たとえばクライアント10によるオブジェクトに対する要求の後、キャッシュから無効なオブジェクトをフラッシュする。実施態様によっては、キャッシュマネジャー3232は、オブジェクトの無効化または失効後に受信したオブジェクトの更新されたコピーまたはバージョンを、無効なオブジェクトに上書きする。別の実施態様では、キャッシュマネジャー3232は、キャッシュメモリの同じ部分に別の部分を記憶することによって、無効なオブジェクトが占有していたキャッシュメモリを再利用する。さらに別の実施態様では、キャッシュマネジャー3232は、無効とマークされたオブジェクトをフラッシュせず、オブジェクトをキャッシュのメモリまたは記憶装置に記憶した状態を保つ。
方法3350は、無効化粒度を提供するために、パケット処理タイマーに応答するか、および/またはパケット処理動作に関連するキャッシュされたオブジェクトの無効化およびフラッシュについて説明しているが、本明細書に記載されているデバイス1250のキャッシュの任意の動作、およびキャッシュ管理の任意の技術、およびその他の任意の動作は、パケット処理タイマーによって提供される微細劉殿時間間隔で実行することができる。実施態様によっては、キャッシュされたオブジェクトの無効化または失効は、100ミリ秒という短い時間間隔で生じるが、別の実施態様では、50ミリ秒という短い時間間隔で生じる。実施態様によっては、キャッシュされたオブジェクトの無効化または失効は、25ミリ秒という短い時間間隔で生じ、他の実施態様では、10ミリ秒という短い時間間隔で生じる可能性がある。他の実施態様では、キャッシュされたオブジェクトの無効化または失効は、5ミリ秒という短い時間間隔で生じ、さらに他の実施態様では、3、2、あるいは1ミリ秒という短い時間間隔で生じる可能性がある。
上記の図28Aおよび28Bに関連する方法3300および3350に記載されているように、非常に短い時間増分の経過後、オブジェクトを無効化する能力を組み込むことによって、動的に生成されたコンテンツのキャッシングを改善することが可能になる。動的コンテンツによっては、実際上、キャッシュに短期間保存し、キャッシュから供給するのに適する。しかし、このようなコンテンツを正常にキャッシュするには、一実施態様による方法は、オブジェクトが無効化され、キャッシュメモリからフラッシュされる前の非常に短期間にわたってオブジェクトを提供する。たとえば動的に生成された一定のオブジェクトは、1秒間キャッシュ可能であり得るが、常に変化しているコンテンツの場合は、それ以上アクセスできない場合が多い。一実施態様では、この方法には、1秒の一部分の後、キャッシュされたコンテンツを無効化または失効させることが含まれた。一例として、アプリケーションが、動的応答の生成に100ミリ秒要する場合、キャッシュは、データのフレッシュさの点で妥協することなく、100ミリ秒間以下の期間にわたって当該応答を記憶および供給することができる。その100ミリ秒間は、新しいオブジェクトを生成するのに要する時間より短いため、100ミリ秒間で生成される新しいオブジェクトは存在しない。したがって、アプライアンス1250は、前のオブジェクトを当該期間で供給するようにセットアップすることができる。アプライアンス1250が、非常に短い時間増分まで無効化する能力は、データトランザクションの隔離レベルが、反復可能読取りまたは連続読取りを可能にするように設定されているアプリケーション環境に非常に有用である場合が多い。
c.無効化コマンド
従来のキャッシング技術は、コンテンツの予め決められた満了時間に基づいて、記憶されたコンテンツを無効化し、この満了時間は、一般に管理者によって構成されるか、あるいはオブジェクトを供給したサーバから受信される。動的に生成されたコンテンツをより効率的にキャッシュするために、コンテンツを無効化するためのもう1つの技術を以下で説明する。1つの技術は、キャッシュ内に無効としてリアルタイムで以前に記憶された1つまたは複数のオブジェクトを識別する無効化コマンドをアプライアンス1250で受信する機能を含む。たとえば、無効化コマンドは、クライアントに伝送されたネットワークパケット、またはサーバによって行われるアプリケーションプログラミングインターフェース(API)のコールを介して、アプライアンスに通信することができる。これは、サーバが単に、オブジェクトが供給される時点でオブジェクトヘッダに含んでいるキャッシュ満了時間を設定する従来の方法とは異なる。
1つの技術を図29Aおよび図29Bにより詳細に示す。図29Aは、コンピュータメモリのキャッシュなどのキャッシュを維持する方法を示すフローチャートである。簡潔に説明すると、ステップ3410により、動的に生成され、起源サーバ30から以前に供給されたオブジェクトはキャッシュ内に記憶される。たとえば、動的に生成されたオブジェクトは、キャッシュ可能として識別することはできないか、あるいは任意のキャッシュ、またはキャッシュ制御情報を含む。ステップ3420では、無効化コマンドは、キャッシュまたはキャッシュマネジャー3232で受信される。無効化コマンドは、以前に供給された1つまたは複数のオブジェクトを無効として識別する。ステップ3430では、キャッシュは、無効化コマンドに応答して、識別されたオブジェクトを無効とマークする。
さらに詳細にステップ3410で、キャッシュマネジャー3232は、任意のソースから受信、取得、または伝達され、動的に生成されたオブジェクトをキャッシュメモリ要素内に記憶する。実施態様によっては、動的に生成されたオブジェクトは、サーバ30から生成され、供給され得る。他の実施態様では、動的に生成されたオブジェクトは、クライアント10によって生成され、伝達され得る。実施態様によっては、アプライアンス1250の別の部分、構成要素、またはプロセスは、オブジェクトを生成し、オブジェクトをキャッシュ内に記憶する。さらに他の実施態様では、動的に生成されたオブジェクトは、ネットワーク上の別のアプライアンス1250、または別のコンピューティングデバイスによって生成され、アプライアンス1250に伝送または伝達され得る。実施態様によっては、動的に生成されたオブジェクトは、キャッシュ可能と識別されないか、あるいはキャッシュ不能と識別される。他の実施態様では、動的に生成されたオブジェクトは、キャッシュ可能と識別されるか、またはキャッシュ制御下にある。
ステップ3420では、キャッシュマネジャー3232は、動的に生成され、キャッシュ内に記憶されたオブジェクトなど、無効化するオブジェクトを識別する無効化コマンドを受信する。一実施態様では、無効化コマンドは、オブジェクトが無効であるか、あるいは古いかもしれないことをキャッシュに指示する任意のタイプの指示またはインストラクションを含み得る。実施態様によっては、無効化コマンドはオブジェクトを識別し、オブジェクトが無効である時点、およびオブジェクトのどの部分が無効であるかもしれないかも識別することができる。一実施態様では、キャッシュマネジャー3232は、起源サーバ30によってリモートに呼び出し得るアプリケーションプログラミングインターフェース(API)を提供する。実施態様によっては、キャッシュマネジャー3232は、1つまたは複数のネットワークパケットを介してコマンドを受信するとともに、コマンドに応答するための任意の任意のタイプおよび形式のプロトコルを提供し得る。一実施態様では、キャッシュマネジャー3232またはデバイス1250は、無効化コマンドを受信および処理する拡張可能マークアップ言語(XML)APIインターフェースを提供する。たとえば、キャッシュマネジャー3232は、ウェブサービスインターフェースを提供し得る。実施態様によっては、キャッシュマネジャー3232は、承認、ステータス、またはその他の応答を起源サーバ30に送信することによって、無効化コマンドに応答する。他の実施態様では、キャッシュマネジャー3232は、無効化コマンドに応答しない。一実施態様では、オブジェクトは、起源サーバ30で実行しているアプリケーションが、たとえばオブジェクトの新しいバージョンまたは更新バージョンを生成することによって、記憶されたオブジェクトが古くなる動作を実行した場合、無効とマークされる。これは、たとえば、新しいエディタが、高速に展開するニュースストーリに変更を加え、したがって、確実にストーリの一番最近のバージョンがクライアントに供給されることを望む場合に生じる可能性がある。
無効化コマンドは、別のサーバ30、または別のアプライアンス1250によってオブジェクトを生成したアプリケーションによって起源サーバから発行され得る。一実施態様では、起源サーバ30は、起源サーバ30上で動的に生成されたオブジェクトの変更に応じて、無効化コマンドをキャッシュ3232に自動的に発行または伝達する。無効化コマンドは、サーバ30およびアプライアンス1250の外部または外側の管理コントロールによって生成することも可能である。たとえば、管理コントロールは、ネットワーク上で実行されているとともに、管理者のコンソールなどのアプライアンス1250と通信する任意のタイプおよび形式プログラムまたはアプリケーションでよい。さらに、クライアント10は、無効化コマンドをアプライアンス1250またはキャッシュマネジャー3232に発行または伝達することが可能である。たとえば、起源サーバにおいて、要求されたオブジェクトに対する変更が行われるとクライアントが認識する動作が行われる場合、クライアントは、無効化コマンドを伝達する。キャッシュ内に記憶された任意のオブジェクトは、キャッシュでローカルに実行されるか、あるいはXML API基盤を使用してリモートに呼び出されるユーザコマンドをキャッシュに伝送することによって無効化することができる。
ステップ3430によると、キャッシュ内に記憶されたオブジェクト、たとえば、動的に生成され、以前に供給され、無効と識別されたオブジェクトは、無効化コマンドに応じてそのようにマークされる。無効なオブジェクトは、要求クライアントに対してキャッシュから提供されるのではなく、起源サーバから直接供給されるであろう。キャッシュマネジャー3232は、任意の適切または所望の方法で、各々のオブジェクトを無効とマークし得る。一実施態様では、オブジェクトは、記憶されたオブジェクトのフラグ、属性、または特性を設定することにより無効とマークされる。たとえば、フラグは、キャッシュマネジャー3232に対して、オブジェクトが無効であることを識別する任意の値に設定し得る。別の実施態様では、オブジェクトは、無効なオブジェクトを記憶するためのキャッシュの領域または部分にオブジェクトを移動させることによって無効とマークすることができる。他の実施態様では、キャッシュマネジャー3232は、データベース、またはリンクされたリスト、もしくは任意のタイプおよび形式のデータ構造によって、記憶されたオブジェクトの無効および/または有効状態を識別または追跡し得る。実施態様によっては、キャッシュマネジャー3232は、1つまたは複数のオブジェクトを使用して、キャッシュ内に記憶された1つまたは複数のオブジェクトの有効性または無効性を識別または追跡する。別の実施態様では、オブジェクトは、記憶されたオブジェクトを変更、修正、または改変する、たとえばオブジェクトの一部を削除または除去することによって使用できないようにするか、あるいはオブジェクトの名前を変更またはマングルすることによって、無効とマークされる。
実施態様によっては、アプライアンス1250は、その後、無効とマークされたオブジェクトをキャッシュからフラッシュする。別の実施態様では、アプライアンス1250は、たとえばクライアント10によるオブジェクトに対する要求の後、無効なオブジェクトをキャッシュからフラッシュする。実施態様によっては、アプライアンス1250は、無効なオブジェクトにオブジェクトの更新されたコピーまたはバージョンを上書きする。別の実施態様では、アプライアンス1250は、キャッシュメモリの同じ部分に、動的に生成された別のオブジェクトを記憶することによって、無効なオブジェクトが占有していたキャッシュメモリを再利用する。
アプライアンス1250と通信する任意のコンピューティングデバイスまたはユーザは、キャッシュマネジャー3232のコマンド無効化APIを使用して、キャッシュ内に記憶されたオブジェクト、たとえば動的に生成されたオブジェクトを無効化するように要求し得る。したがって、キャッシュ内に記憶されたオブジェクトの無効化は、予め決められた構成失効または無効化期間を使用するのではなく、リアルタイムで制御することができる。したがって、これらの技術を使用すると、キャッシュされたオブジェクトの寿命は、外部のアプリケーション処理ノード、たとえばデータベースまたは起源アプリケーションサーバから制御することができる。たとえば、アプライアンス1250は、データベースと連動して、データベースに変更を加えると、データベース(またはアプリケーション)から無効化コマンドを自動的にトリガして、特定の1つまたは複数のオブジェクトをフラッシュするように構成することができる。
d.無効化コマンドを使用する、群の無効化
さらに他の実施態様では、アプライアンス1250は、キャッシュによって記憶されたオブジェクト群を同時に識別および無効化する。従来のキャッシュメモリ内に記憶されたオブジェクトは各々、オブジェクトが古いかどうかを決定する際に、キャッシュによって個々に、別個に処理される。各々のオブジェクトがその指定された失効時間(一般に、サーバによって設定され、キャッシュによってテーブル内に記憶される)に達すると、そのアイテムはキャッシュメモリからフラッシュされる。しかし、従来の方法は、動的に生成されたコンテンツをキャッシュしようとする時に生じる問題に満足に対処するには非効率的であり、最終的に非効率的である。
図29Bは、コンピュータメモリのキャッシュなどのキャッシュを維持する方法の別の実施態様であって、アプライアンス1250が、以前に起源サーバ30から供給された関連オブジェクトの群を作成、記憶、および無効化する機能を有する実施態様を示す。簡潔に説明すると、ステップ3410では、動的に生成され、起源サーバ30から供給されたオブジェクトなどのオブジェクトは、キャッシュ内に記憶される。ステップ3412では、キャッシュマネジャー3232は、以前に供給され、キャッシュ内に記憶されたオブジェクトの群を形成する。一実施態様では、以下でさらに詳細に説明するとおり、1つまたは複数のオブジェクト決定要因に関連付けるか、または識別することができる。ステップ3414では、キャッシュマネジャー3232は、オブジェクト群の記録を維持する。ステップ3422では、キャッシュマネジャー3232は、オブジェクト群を無効化するための無効化コマンドを受信する。ステップ34232では、キャッシュマネジャー3232は、無効化コマンドに応じて、オブジェクト群を無効とマークする。
ステップ3410は、図29Aと同じであり、動的に生成され、以前に起源サーバ30から供給されたオブジェクトなどのオブジェクトは、アプライアンス1250のキャッシュ内に記憶される。実施態様によっては、1つまたは複数のオブジェクトは、キャッシュ可能であると識別されない場合があるか、あるいはキャッシュまたはキャッシュ制御情報を何も持たない場合がある。たとえば、サーバ30は、動的に生成されたオブジェクトがキャッシュされないであろうと仮定する場合がある。
ステップ3412によると、アプライアンス1250は、以前に起源サーバ30から供給され、キャッシュ内に記憶されたオブジェクトのセットから1つの群を形成する。適切であるか、または望ましい任意のオブジェクトのセットは互いに関連付けられ、1つの群を形成し得る。たとえば、ウェブページのために生成されるか、ウェブページに関連付けられ、ウェブページに供給される動的に生成されたオブジェクトは、1つの群を形成し得る。実施態様によっては、オブジェクトは、複数の群に関連し得る。他の実施態様では、オブジェクトの1つの群は、別のオブジェクト群のサブセットを形成し得る。実施態様によっては、形成されたオブジェクト群は、同じサーバ30から供給されたオブジェクトを有し、他の実施態様では、形成されたオブジェクト群は、異なるサーバ30から供給されたオブジェクトを有する。さらに他の実施態様では、形成されたオブジェクト群は、クライアント10からのオブジェクト、サーバ30からのオブジェクト、クライアント10およびサーバ30の両方によって生成されたか、または供給されたオブジェクトを含み得る。一実施態様では、群内のあるオブジェクトは静的に生成され、郡内の別のオブジェクトは動的に生成される。場合によっては、群内のあるオブジェクトはキャッシュ可能と識別されず、群内の別のオブジェクトはキャッシュ可能と識別される。他の場合には、群内のオブジェクトは、サーバ30によって提供される機能またはアプリケーションに従って論理的に関連付けることができる。別の場合には、群内のオブジェクトは、同じクライアント10または同じユーザに関連しているように関連付けることができる。
ステップ3414では、オブジェクト群の記録が維持される。オブジェクト群の記録を記録および維持するか、あるいはオブジェクトを関連付ける様々な技術は、本明細書で説明する動作のいくつかの実施態様を実践する際に使用し得る。一実施態様では、記録は、たとえば、直接ルックアップテーブル内に維持し得る。別の実施態様では、記録は、ハッシュテーブル形式で表現することができる。実施態様によっては、キャッシュマネジャー3232は、データベース内のオブジェクト、またはメモリ内のデータ構造もしくはオブジェクトの関連性を維持する。さらに他の実施態様では、群内の各々のオブジェクトのフラグ、特性、または属性は、群を識別する値、たとえば、群のオブジェクト決定要因など、群の名前または識別子に等しい値、こうした名前または識別子を識別するか、または参照する値に割り当てられるか、または設定され、オブジェクト決定要因については、以下でさらに詳細に説明する。実施態様によっては、オブジェクト群は、群を保持するとして識別されるキャッシュメモリの一部分内に配列、配置、または位置される。
ステップ3422では、無効化コマンドは、アプライアンス1250またはキャッシュマネジャー3232で受信される。図29Bに記載されている実施態様によると、無効化コマンドは、1つまたは複数のオブジェクトが無効であるか、あるいは古いことを識別する。実施態様によっては、無効化コマンドは、オブジェクト群の名前または識別子を引用、識別、または指定する。一実施態様では、無効化コマンドは、群内のすべてのオブジェクトを無効化するために、1つの無効化要求を含む。別の実施態様では、無効化コマンドは、無効化する群内の1つのオブジェクトを識別する。他の実施態様では、無効化コマンドは、群内の複数のオブジェクトを無効化するために、複数の無効化要求を含む。
ステップ3432では、無効化コマンドが、群のあるオブジェクトを無効、群内の各々のオブジェクトを無効、または群を無効として引用、識別、または指定する場合、以前に供給されたオブジェクト群は無効とマークされる。実施態様によっては、無効化コマンドが、群内のあるオブジェクトを無効と識別する場合、キャッシュマネジャー3232は、そのオブジェクトを無効と識別する。他の実施態様では、無効化コマンドが、群内のあるオブジェクトを無効と識別する場合、キャッシュマネジャー3232は、そのオブジェクト群を無効、またはその群内の各々のオブジェクトを無効とマークする。さらに他の実施態様では、キャッシュマネジャー3232は、複数のオブジェクトが、1つまたは複数の無効化コマンドを介して無効と識別される場合にのみ、オブジェクト群を無効化し得る。別の実施態様では、無効化コマンドは、群の名前または識別子を指定することができ、キャッシュマネジャー3232は、群を無効とマークするか、または群内の各々のオブジェクトを無効とマークする。
一実施態様では、アプライアンス1250またはキャッシュマネジャー3232は、無効とマークされたオブジェクト群をキャッシュメモリからフラッシュする。実施態様によっては、群内のオブジェクトは、群内の各々のオブジェクトが無効とマークされる場合にのみ、キャッシュメモリからフラッシュし得る。他の実施態様では、群のあるオブジェクトが、無効とマークされた場合、その群全体がフラッシュされる。別の実施態様では、無効とマークされたオブジェクト群、または群内の任意のオブジェクトは、オブジェクト群、群内の任意のオブジェクトに対する要求を受信後に、クライアント10によってフラッシュし得る。他の実施態様では、無効とマークされたオブジェクト群、または群内の任意のオブジェクトは、群内の1つまたは複数の新しいオブジェクトを提供するサーバ30から応答を受信後にフラッシュされ得る。
上記の実施態様の一例は、次のとおりである。顧客リソース管理(「CRM」)アプリケーションは、リソース管理のすべての態様を追跡および評価するために、多くの企業によって使用される。多くの場合、CRMアプリケーションは、Internetを含むプライベートおよびパブリックネットワークを通してインプリメントされ、アクセスされる。したがって、これらのアプリケーションは、頻繁にアクセスされる多量のデータに対するアクセスを提供し、こうしたアプリケーションによって生成されたデータのキャッシングから利益を得る。たとえば、営業報告は頻繁に作成され、リモートに接続されたユーザに供給される。これらの営業報告は、このようなアプリケーションサーバおよび/またはその下にあるデータベースにポストされる営業情報からデータを編集することによって、関連アプリケーションにより構成される。多くのユーザが、キャッシュせずに、同じ文書(つまり、特定の営業報告)を要求するため、アプリケーションサーバは、各々の要求ごとにオブジェクトを再生しなければならない。しかし、このようなオブジェクトをキャッシュ内に記憶することができれば、キャッシュは、要求するクライアントにより近く配置されるため、潜在的に価値のある帯域幅を含め、アプリケーションおよびデータベース処理は保存される。
こうしたオブジェクトをキャッシュする際の問題は、新しい売上げが、起源サーバで動作しているアプリケーション(またはその下にあるデータベース)にポストされるごとに、営業報告内の情報を更新する必要があるために生じる。その結果、これらのアプリケーションサーバをサポートする任意のキャッシュ内に記憶されているかもしれないすべての営業報告を無効化し、コンテンツをキャッシュメモリからフラッシュしなければならない。しかし、キャッシングの従来の方法は、下にあるデータベース、またはアプリケーションの変更が、いつ行われようとしているかを正確に決定する方法がないため、動的コンテンツのフレッシュさを合理的に評価することができない。データベース、アプリケーション、または起源サーバ内で変更が生じるごとに、キャッシュは、変更が行われたこと、その変更の結果、どのオブジェクト群を無効化するべきかを識別できなければならない。以前に供給されたオブジェクト群にリンクされるオブジェクト決定要因を含む無効化コマンドの生成は、上記のとおり、この必要性を満たす。
関連するオブジェクトの複数の群は、単一階層レベルで形成することができる。あるいは、下位オブジェクト群を形成して、複数の階層レベルを作成することができる。一実施態様では、オブジェクト群または下位オブジェクト群は、ユーザが予め指定することができる。別の実施態様では、ユーザは、アプライアンス1250が関連オブジェクト群を自動的に形成し、オブジェクト決定要因をこれらのオブジェクト群と関連付ける規則を確立することができる。
e.クライアントの要求または回答におけるオブジェクト決定要因の識別表示
ある実施態様は、オブジェクトの群化を生成し、およびパラメータ化された無効化をインプリメントすることによって、起源アプリケーションサーバ30(および/または下にあるデータベース)における状態の変化によって影響を受けるすべてのオブジェクトを識別することが可能である必要性にも対処する。この実施態様では、任意のオブジェクト、または予め画定されたオブジェクト群は、キャッシュが、オブジェクト決定要因を識別するために構文解析するという、たとえばクライアントから傍受されたHTTP要求によって無効化することができる。「オブジェクト決定要因」という用語は、一意に、または他の方法で1つのオブジェクト、または一連のオブジェクトを引用、識別、または特定する任意の情報、データ、データ構造、パラメータ、値、データパターン、要求、応答、またはコマンドを意味する。実施態様によっては、オブジェクトの決定は、オブジェクトに関連付けられるか、あるいは、通信がオブジェクトに関連しているか、または引用していることを一意に識別するために使用することができる、通信内のあるパターンのバイトまたは文字である。一実施態様では、オブジェクト決定要因は、起源サーバ内で変化が生じたか、あるいは今後生じるかどうかを、以前に供給され、オブジェクト決定要因が関連付けられているキャッシュマネジャー3232内に記憶されたオブジェクト群に指示する。実施態様によっては、オブジェクト群内のオブジェクトは、少なくとも1つのオブジェクト決定要因に関連するように関連付けられる。オブジェクト決定要因の特定の非制限的な例、およびこれらの使用法の実例は、以下でより完全に説明する。
この実施態様のいくつかの実施態様では、オブジェクト決定要因は、クライアントの要求または応答に含まれるか、または埋め込まれる、特定の予め画定されたパラメータまたはデータ構造である。他の実施態様では、クライアント10、サーバ30、またはアプライアンス1250は、1つまたは複数のオブジェクト決定要因、たとえば、オブジェクト決定要因を表現する予め確定された文字列または一連の文字を通信中に埋め込む。オブジェクト決定要因は、このような要求が、起源サーバ30、または起源サーバ30にリンクするデータベース内に記憶されたオブジェクトの状態を変化させる影響を有するかどうかを指示する。一実施態様では、要求中にオブジェクト決定要因が存在することは、オブジェクトが変更されたか、あるいはオブジェクトに変更が生じるかを指示する。別の実施態様では、オブジェクト決定要因の構文、構造、パラメータ、または値が、オブジェクトが変更されたか、あるいはオブジェクトに変更が生じるかどうかを指示する。一実施態様では、キャッシュは、クライアント10からのオブジェクト要求を受信する。この要求は、キャッシュが、起源サーバまたはアプリケーションサーバの状態が変化し、その結果、このような起源サーバまたはアプリケーションサーバ30によって以前に生成され、キャッシュマネジャー3232によって記憶されている特定の関連オブジェクトが古くなると認識する特定のパラメータまたは値(オブジェクト決定要因)を含み得る。ユーザが設定する無効化ポリシーに応じて、パラメータ(オブジェクト決定要因)は、起源サーバによって以前に供給され、キャッシュによって記憶されている1つまたは複数のオブジェクトまたはオブジェクト群の無効化を要求し得る。キャッシュは、この状態の変化による影響を受ける関連オブジェクト(つまり、オブジェクト決定要因にリンクされているオブジェクトまたはオブジェクト群)を識別し、各々のオブジェクトを無効にするか、および/またはこのようなオブジェクトをキャッシュメモリからフラッシュする方法を介して、これらのオブジェクトを無効化するように構成される。
上記の技術は、図29Cに示す。本明細書に記載する他の実施態様と同様、ステップ3410は、動的に生成され、起源サーバから以前に供給されたオブジェクトなどのオブジェクトをキャッシュ内に記憶するステップを含む。本明細書に記載する他の実施態様と同様、ステップ3410は、動的に生成され、以前に起源サーバから供給されたオブジェクトなどのオブジェクトをキャッシュ内に記憶するステップを含む。このオブジェクトは、起源サーバ30上で実行しているアプリケーションによって生成されるか、あるいは、たとえば起源サーバ30によってアクセスされるデータベースから取り出すことができる。実施態様によっては、動的に生成されたオブジェクトは、キャッシュ可能ではないと識別されるか、あるいはキャッシュ可能として識別されない。
ステップ3421によると、キャッシュは、クライアントおよびサーバ間の通信、たとえばクライアントからの要求、またはサーバからの応答を傍受するか、あるいは受信する。実施態様によっては、要求は、特定のオブジェクト、たとえば以前に供給され、キャッシュ内に記憶されたオブジェクトが対象である。別の実施態様では、通信は、要求されたオブジェクトを有するサーバからの応答を含む。一実施態様では、このような受信または傍受は、確立されたキャッシングプロトコルおよび通信規格に従って行われる。キャッシュマネジャー3232またはアプライアンス1250は、一般に、要求、応答、または通信を受信する時に、このような要求、応答、または通信を受信すると記述されるが、キャッシュ3232またはアプライアンス1250は、キャッシュに直接または明確に伝達されない場合でも、任意の適切な手段および/または機構によって、要求、応答、または通信を傍受または取得し得る。
ステップ3423では、オブジェクト決定要因は、傍受された通信内で識別される。キャッシュマネジャー3232は、傍受した通信を抽出し、解釈し、構文解析し、アクセスし、読み取り、あるいは処理して、通信内の1つまたは複数のオブジェクト決定要因を決定または識別し得る。通信の1つまたは複数の文字の任意のパラメータ、値、構文、データ、構造、または集合は、オブジェクト決定要因を識別するために使用し得る。一実施態様では、キャッシュマネジャー3232は、クライアントがオブジェクトを要求する、クライアント10からサーバ30への要求内のオブジェクトの名前または識別子を識別することができる。別の実施態様では、キャッシュマネジャー3232は、クライアント10の要求内の第1オブジェクトの名前または識別子、またはキャッシュ内に記憶されている第2オブジェクトに対して変更が行われたか、あるいは変更が行われることを指示するサーバ30からの応答の名前または識別子を識別し得る。他の実施態様では、キャッシュマネジャー3232は、要求内の任意のパターンの文字が、キャッシュ内のオブジェクトまたはオブジェクト群に関連する任意のオブジェクト決定要因と適合するかどうかを決定する。実施態様によっては、オブジェクト決定要因は、現在キャッシュ内に記憶されていないオブジェクトに関して決定することができる。他の実施態様では、オブジェクト決定要因は、現在無効とマークされているオブジェクトに関して決定することができる。他の実施態様では、要求されたオブジェクトのオブジェクト決定要因は、キャッシュされたオブジェクトのオブジェクト決定要因に関連すると決定される。さらに別の実施態様では、通信内のオブジェクトに関する最初の参照、要求、または応答の後、キャッシュマネジャー3232は、識別されたオブジェクト決定要因を、オブジェクトに対するオブジェクト決定要因として確立する。
クライアントの要求またはサーバの応答などの通信を受信し、構文解析して、オブジェクト決定要因を識別することによって、キャッシュマネジャー3232またはアプライアンス1250は、識別されたオブジェクト決定要因に関連している、キャッシュされたオブジェクトを無効とマークするかどうかを効果的に決定し得る。したがって、ステップ3425により、オブジェクト決定要因が、キャッシュされたオブジェクトの変更を指示するかどうかが決定される。実施態様によっては、識別されたオブジェクト決定要因は、オブジェクトを改変、修正、または生成しない通信の一部であり得る。他の実施態様では、識別されたオブジェクト決定要因は、オブジェクト決定要因に関連するオブジェクトに対して変更が行われたか、あるいは行われることを指示する通信の一部である。たとえば、通信は、動的に生成されたオブジェクトに対するGET要求であるか、または1つまたは複数の動的に生成されたオブジェクトに使用されるデータを変更する提示要求であり得る。実施態様によっては、通信内のオブジェクト決定要因の存在は、1つまたは複数のオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。別の実施態様では、通信内のコマンド、指令、またはインストラクションのタイプまたは名前は、オブジェクト決定要因とともに、1つまたは複数のオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。さらに他の実施態様では、コマンド、指令、またはインストラクションのパラメータまたは変数の存在、値、または設定は、オブジェクト決定要因に関連する1つまたは複数のオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。
他の実施態様では、キャッシュマネジャー3232は、傍受した通信またはオブジェクト決定要因に関するハッシュ関数、アルゴリズム、または動作を実行して、オブジェクトに変更が行われたかどうかを決定する。実施態様によっては、ハッシュ値は、当該オブジェクトについて以前に記憶されたハッシュ値と比較され、異なる場合、キャッシュマネジャー3232は、オブジェクトが変更されたことを認識する。さらに別の実施態様では、オブジェクトのハッシュ値は、通信またはオブジェクト決定要因に含み得る。一実施態様では、通信は、ブーリアンフラグを使用するなど、パラメータの値または設定によってオブジェクトが変更されたことを指示する。他の実施態様では、以下でより詳細に説明するように、エンティティタグコントロールおよび無効化機構を使用して、オブジェクトを識別し、オブジェクトが変更されたかどうかを決定することができる。
次に、ステップ3431で変更が指示された場合、オブジェクト決定要因に関連するか、またはオブジェクト決定要因によって識別されるオブジェクトは、無効とマークされる。実施態様によっては、傍受された通信によって要求されたオブジェクトは、ステップ3431に従って無効とマークされ、ステップ3440に従って起源サーバ30から検索される。あるいは、他の実施態様では、要求されたオブジェクトは、ステップ3450に従ってキャッシュから検索される。一実施態様では、無効とマークされた任意のオブジェクトは、キャッシュからフラッシュされるであろう。
f.オブジェクト決定要因に基づくオブジェクト群の無効化
上記の実施態様は、クライアント要求内のオブジェクト決定要因の識別表示にに基づいて、キャッシュマネジャー3232内の以前に供給されたオブジェクトを無効化する事例を説明する。この一般的なコンセプトは、別の実施態様では、1つまたは複数のオブジェクト決定要因が関連していたオブジェクト群を識別し、無効化するために使用することもできる。この実施態様は、図29Dに示す。
図29Dに記載する方法は、図29Cの方法と同じ様式で開始する。ステップ3410は、動的に生成され、以前に起源サーバから供給されたオブジェクトをキャッシュ内に記憶するステップを含む。実施態様によっては、1つまたは複数のオブジェクトは、キャッシュ可能として識別されない。ステップ3412によると、図29Bと同様に、以前に供給されたオブジェクトは群として形成される。一実施態様では、オブジェクト決定要因技術により、オブジェクト群は、少なくとも1つのオブジェクト決定要因に関連するか、あるいは少なくとも1つのオブジェクト決定要因によって識別される。以下で完全に説明するように、実施態様によっては、群オブジェクト決定要因との関連性は、ユーザのキャッシングポリシー、たとえば、ポリシーエンジン3236によって画定、制御、または使用されるポリシーの性質および詳細によって決まる。その他の実施態様では、群の1つまたは複数のオブジェクト決定要因は、群内のオブジェクトの1つまたは複数のオブジェクト決定要因を含む。別の実施態様では、群のオブジェクト決定要因は、群内のオブジェクトのオブジェクト決定要因の組合せを含む。
ステップ3414によると、群の記録は、群に関連するオブジェクト決定要因があれば、そのオブジェクト決定要因とともに維持される。このステップは、図29Bに示されているステップ3414に類似する。一実施態様では、群の記録、および/または任意のオブジェクト決定要因は、ルックアップテーブル内に維持される。他の実施態様では、群の記録、および/または任意のオブジェクト決定要因は、ハッシュテーブル形式で維持され得る。ハッシュテーブルは、英数字のシーケンスに広い隙間を有することができる不連続キーを効率的に記憶するように設計され得る。別の実施態様では、索引システムをハッシュテーブルの上に構成することができる。実施態様によっては、キャッシュマネジャー232は、データベース内に1つまたは複数のオブジェクト決定要因を有する群、あるいはメモリ内のデータ構造またはオブジェクトとして、オブジェクトの関連性を維持する。さらに他の実施態様では、群内の各々のオブジェクトのフラグ、特性、または属性は、群を識別する値、たとえば群の名前または識別子に等しいか、群の名前または識別子、あるいは群のオブジェクト決定要因を識別するか、あるいは引用する値に割り当てられるか、あるいは設定される。実施態様によっては、オブジェクト群は、群を保持すると識別されたキャッシュメモリの一部分に配列、配置、または位置される。別の実施態様では、1つまたは複数のオブジェクト決定要因は、オブジェクト群と関連して記憶される。
ステップ3421および3423は、図29Cに示すステップ3421および3423に類似している。ステップ3421によると、キャッシュマネジャー3232またはアプライアンス1250は、クライアント10およびサーバ30間の通信、たとえば、以前に供給されキャッシュ内に記憶されたオブジェクトに対するクライアントからの要求を傍受、あるいは受信する。一実施態様では、キャッシュマネジャー3232は、クライアント10からサーバ30への要求を傍受する。実施態様によっては、要求は、キャッシュ内に記憶されたオブジェクトに対する要求である。他の実施態様では、要求は、キャッシュ内に記憶されたオブジェクトを変更させる、たとえばオブジェクトを動的に生成させる、サーバ30に対するインストラクション、コマンド、または指令である。別の実施態様では、キャッシュマネジャー3232は、キャッシュ内に記憶されたオブジェクトを含むか、または識別する、サーバ30からクライアント10への要求を傍受する。
ステップ3423では、オブジェクト決定要因は、傍受された通信内で識別される。上記のとおり、オブジェクト決定要因は、起源サーバ30内において、要求されたオブジェクト内で変更が行われたか、あるいは変更が行われるかどうかを指示する。しかし、図29Dの実施態様では、オブジェクト決定要因は、オブジェクト群に関連付けることができる。これは、キャッシュ内に記憶され、特定のオブジェクト決定要因によって影響され得るすべてのオブジェクトを効率的に無効化することを可能にする。実施態様によっては、群内のあるオブジェクトのオブジェクト決定要因が識別される。他の実施態様では、オブジェクト群のオブジェクト決定要因、たとえば群オブジェクト決定要因が識別される。別の実施態様では、群内の1つまたは複数のオブジェクトのオブジェクト決定要因の組合せが識別される。
したがって、ステップ3427によると、オブジェクト決定要因が、以前に供給されたオブジェクトの群内の変化を指示するかどうかに関して決定が行われる。実施態様によっては、群のオブジェクト決定要因が傍受された通信内に存在することは、群内の1つまたは複数のオブジェクト、またはすべてのオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。他の実施態様では、傍受された通信内のコマンド、指令、またはインストラクションの名前およびタイプは、こうした変化を指示する。さらに別の実施態様では、通信内のパラメータまたは変数の存在、値、または設定は、こうした変化も指示し得る。
ステップ3427で、オブジェクト決定要因が、群内の変化を指示する場合、以前に供給されたオブジェクトの群は、ステップ3435に従ってキャッシュ内で無効とマークされる。実施態様によっては、群の1つまたは複数のオブジェクト、またはすべてのオブジェクトは、ステップ3440に従って、起源サーバ30から要求され、検索される。ステップ3427で、オブジェクト決定要因が、群内の変化を指示しない場合、実施態様によっては、傍受された通信の一部として要求され、以前に供給されて、キャッシュ内に記憶された任意のオブジェクトは、ステップ3450に従ってキャッシュマネジャー3232から検索される。一実施態様では、無効とマークされた任意のオブジェクトまたはオブジェクト群は、キャッシュマネジャー3232よって、キャッシュからフラッシュし得る。
g.群の定義
キャッシュの管理者は、どのオブジェクトが特定の群に含まれるかを明確に指定し得る。あるオブジェクトがキャッシュ内に記憶されている時は常に、管理者はオブジェクトを、構成に応じて、構成されたか、あるいは潜在的な群の1つの構成員にすることができる。構成された群は、管理者が以前に確立した構成に基づくか、あるいはオブジェクトの無効化に関連するアプリケーションの挙動、およびその他のデータに基づく。あるオブジェクトは、そのオブジェクトの構成された群が動的である場合、潜在的な群の一部でもあり得る。潜在的な群内のオブジェクトは、重要な無効化パラメータの値ごとに群化される。
オブジェクトの非常に順応性のある群化を可能にすることによって、キャッシュは、動的に生成されたコンテンツを効果的にキャッシュするのに必要な無効化の際に、あるレベルの適応性および調整を達成することができる。キャッシュは、非常に特有のオブジェクト群を同時に無効化し、それによって、動的に生成されたコンテンツを無効化するというよくある必要性に対して、より対応性のあるキャッシュを構成する。キャッシュが、あるオブジェクトを群に割り当てる場合、その群は、1つまたは複数のオブジェクト決定要因をオブジェクトに関連付けるために、当該オブジェクトに関連するある数のもの、たとえば無効化パラメータおよびヒット決定要因を決定する。
顧客リソース管理(「CRM」)の例では、キャッシュ管理者は、各々の群化を予め指定することができる。たとえば、管理者は、各々の営業部を名前別に群化するためにキャッシュを構成する。したがって、管理者は、自動車部門、オートバイ部門などを指定することができ、オブジェクト決定要因が、キャッシュに到達する要求内で認識されるごとに、その結果、キャッシュは、オブジェクト決定要因を介して適切な部門にリンクされている指定の群内に記憶されたすべてのオブジェクトを無効化することができる。
h.規則に基づく群化
あるいは、キャッシュ管理者は、キャッシュアプライアンスが、どのオブジェクトを特定の1つまたは複数の群に含むことができるかを実行時に決定することを可能にする規則を確立することができる。このような規則に基づく群化は、キャッシュが、関連する群を形成するために使用する重要なオブジェクト決定要因にオブジェクトをリンクさせる確立された規則による群の指定に頼ることができる。この方法の一例は、キャッシュが、どのオブジェクトを各々の群に配置するかを認識するために使用する規則を使って、キャッシュを構成することを含むことができる。
再びCRMの例を参照すると、規則では、アプリケーションに設定されている販売部門の各々の下位部門は、それ自体の群化としてキャッシュによって認識されるべきであるとされている。このようにして、群化は、キャッシュ管理者が各々の群化を具体的に特定せずに形成することができ、キャッシュが、関連する規則に基づいて決定することを可能にする。この技術は、群化を指定するために、より適応性があり、多くの場合はそれほど労働集約的ではない方法を生じる。キャッシュ管理者は、販売のすべての下位部門(つまり、sales\auto,sales\motorcycleなど)は、キャッシュによって新しい群化を生成されるべきであると定める規則を構成することができる。自動車販売部門からの要求は、アプリケーションによって、キャッシュを介して処理され、返されるため、キャッシュは、販売の各々の下位群化を認識し、そのために、予め構成された規則に基づいて自動的に群化を形成することができる。
規則は、キャッシュが、報告/販売/自動車、または報告/販売/オートバイなどのタイプのオブジェクトに対する新しい要求を見るごとに、キャッシュによってインプリメントされ得る。次に、このプロセスは、オートバイ販売部門が、それが販売部門の下位群化であることを提示するように要求し、次に、自転車販売部門などが要求する時に繰り返すことができる。既知の無効化要求が、これらの群化の1つにリンクされるキャッシュに到達するか、あるいは関連するオブジェクト決定要因が、クライアント要求で識別される場合(たとえば、要求を構文解析する際に見られるオートバイ販売部門の販売/オートバイに対する営業報告のポスト)、キャッシュは、オートバイ販売部門の群化で、キャッシュされたすべてのオブジェクトを評価することを把握する。
このようにして、キャッシュが、アプリケーションによって供給されたデータに変更が行われたか、あるいは変更が行われることを認識する場合(キャッシュが、キャッシュによって受信された要求の内容が、アプリケーションにおける変更をトリガすることを認識するため、あるいは多少外側で変化が生じるため)、上記の技術は、キャッシュが、迅速かつ単純に、どのオブジェクトが、群化のプロセスを通して無効化を要求するかを特定することを可能にする。このようにして、キャッシュは、アプリケーションまたはデータベースの状態の変化により、フレッシュではなくなった多くの動的に生成されたオブジェクトを無効化することができる。
キャッシュが、そのキャッシュメモリから、動的に生成されたコンテンツを正常に記憶し、供給する機能は、要求および応答のトラフィックを検査して、殆どのキャッシングの利益を提供すると思われるオブジェクトの集合をある期間にわたって決定するため、知的エンジンによっても強化することができる。このエンジンは、キャッシュアプライアンス自体内に統合するか、あるいは別個のコンピュータで発見的に実行し、オブジェクトのいくつかのサブセットを選択して、動的キャッシングに対する適合性を決定するためにさらに調査することができる。
i.オブジェクト決定要因のさらに他の使用法
上記のとおり、オブジェクト決定要因は、オブジェクト決定要因が関連するキャッシュ内に記憶され、以前に供給されたオブジェクトの群に対して、起源サーバ内で変更が行われたか、あるいは変更が行われるかどうかを指示する任意のデータ構造でよい。オブジェクト決定要因は、要求に埋め込まれた、予め画定された文字列に基づいて設定することができる。たとえば、要求が、特定のUSERIDとともに到着する場合、USERIDは、ポストまたはその他の要求が特定のUSERIDから到着するごとに、無効化するべきキャッシュメモリ内のオブジェクト群にリンクさせることができる。オブジェクト決定要因の潜在的な候補は、オブジェクトを最初に供給したサーバのサービス識別子を使用することも含むことができる。サービス識別子は、HTTP要求中に存在するサービスIPアドレス、TCPポート、およびサービス識別子を含む。
要求中に存在するもう1つの潜在的なオブジェクト決定要因は、要求ユニフォームリソースロケータ(「URL」)である。静的オブジェクトのキャッシングの場合、要求URLは、一般に、オブジェクトを一意に特定するのに十分である。しかし、動的に生成されたコンテンツの要求の場合、URL中に存在する情報は、キャッシュされたオブジェクトを特定するには十分ではない場合がある。したがって、キャッシュは、HTTPヘッダ、クッキーヘッダ、またはその他のカスタムHTTPヘッダ中に含まれるオブジェクト決定要因を発見するために、要求中の他の情報を検査しなければならない。キャッシュは、クライアント要求中の他の様々な場所に、関連パラメータ情報のサブセットをさらに探すことができる:これらの場所としては、URL問合せ文字列、POST本体、クッキーヘッダ、またはその他の任意の要求、または応答ヘッダを含むが、これらだけに限らない。
オブジェクト決定要因のURLを構文解析する際の問題は、URLおよびその他のヘッダが、キャッシュの決定に関連する情報のほかに多くの情報を含み得るということである。したがって、キャッシュは、適切なオブジェクト決定要因を識別することができる非常に多くの情報を通して構文解析することができなければならない。さらに、ヘッダ内のデータは任意に配列されることが多く、これは、このようなデータをHTTPヘッダ内に配置する標準化された方法がなく、多くの場合、このような文字列内の関連オブジェクト決定要因を探すには、単純な比較では不十分であることを意味する。
特定のオブジェクト決定要因を、キャッシュメモリ内に記憶された関連オブジェクトまたはオブジェクト群と適合させるための予め構成されたポリシーがない場合、キャッシュは、別の実施態様では、まだこのような決定を行い得る。たとえば、キャッシュは、要求の様々な態様を検査および構文解析して、他の任意のオブジェクト決定要因をこのような要求内で探して、キャッシュメモリに記憶され、無効化するべき特定のオブジェクトにその要求をリンクさせることができるかどうかを確認することができる。あるいは、キャッシュが予め画定された経験則に基づいて、特定のオブジェクトまたはオブジェクト群に有意にリンクさせることができると決定する特定のオブジェクト決定要因に対する要求を、キャッシュが検査することを可能にすることもできる。たとえば、要求が、特定のUSERIDに関連するカレンダーの更新のためにキャッシュに到着する場合、一実施態様は、カレンダーを更新する要求のUSERIDに等しいUSERIDを含み、任意のある特定の日のユーザのカレンダーを含むキャッシュされたすべてのオブジェクトを無効化する必要があることを認識するように設定することができる。
キャッシュは、オブジェクト決定要因が、名前=値の群、または類似の対として、不特定の順序でURLステム内、URL内に存在する問合せ、POST本体内、またはクッキーヘッダ内に存在すると仮定することもできる。一実施態様では、問い合わせは、名前=値の対のリストとしてフォーマットされると仮定される。したがって、ユーザは、どのパラメータ名が重要であるかを構成することができる。キャッシュされたすべてのオブジェクトは、最初にそのアクセスURLを使用してキーされる。このURLは、/site/application/special/file.ext?p1=v1&p2=v2&p3=v3のように見える。/site/application/special/file.ext部分は、URLステムである。p1=v1&p2=v2&p3=v3部分はURLの問い合わせであり、パラメータ−値の対を含む。これらのパラメータ−値の対も、POST本体内またはクッキーヘッダ内に存在し得る。
一実施態様では、ユーザまたは管理者は、p1およびp2は無効化パラメータまたはオブジェクト決定要因とすると確立する。したがって、キャッシュは、p1およびp2の値に一致したオブジェクトを自動的に群化するであろう。この群化をインプリメントする1つの方法は、p1およびp2をデータベーステーブル内の一次キーに、つまり、キャッシュが、検証ステータスを決定するためにどのように参照するかを理解するテーブル内の一意に識別可能なオブジェクトにマッピングすることである。これらのデータベーステーブル内の何かを更新して、キャッシュ内のデータストアがもはや有効ではないという事実を反映するため、キャッシュは、p1およびp2に新しい値を指定し、次にそれらのコンテンツを供給しようとする時に、この新しい値を認識すると、そのメモリ内に記憶され、リンクされているオブジェクトを無効化することを理解するであろう。キャッシュは、このような要求に遭遇し、この更新要求を見ると、一致するp1およびp2の値を含む群を無効化しなければならないことを理解する。つまり、キャッシュは、起源内のデータは変化しており、それによって、p1およびp2オブジェクト決定要因に関連するすべてのオブジェクトに影響することを理解するからである。
管理者が、要求内にオブジェクト決定要因として埋め込まれた特定のパラメータを予め構成していないというさらに複雑な事例に対処するには、キャッシュは、関連するオブジェクト決定要因を要求から抽出し、オブジェクトの群化をいつ無効化するかを識別する際に支援するように、ユーザが構成したポリシーを展開することができる。次に、決定要因文字列は、キャッシュ内に記憶されたオブジェクト群を探し、このようなオブジェクトを無効化するために使用される。これらのオブジェクト決定要因は、重要なパラメータ値のリストを作成するように、キャッシュを構成するために使用することができる。到着する書き込み要求が、この重要なパラメータに一致する値を有する場合、これらのパラメータ名に関連付けられているオブジェクトは無効化されるべきである。あるいは、ユーザは、オブジェクト決定要因文字列を要求から抽出することができるポリシーフレームワーク動作を指定することができる。オブジェクト決定要因文字列は、書き込み要求から抽出され、一致する決定要因文字列を含むすべてのオブジェクトは無効化される。この別の方法では、要求がキャッシュに到着し、キャッシュは、要求の文字列が検証ポリシーに一致するかどうかを決定する。無効化ポリシーは、コンテンツ群を無効化するべきオブジェクトを指定する。
あるいは、キャッシュは、クライアント要求内に存在し得る任意のその他の情報を使用することができる。上記のとおり、認証および承認の統合によって、キャッシュは、ユーザ情報にアクセスすることができる。USERIDまたはGROUPIDは、キャッシュされたオブジェクトの関連する群化が、ユーザまたはユーザ群にリンクされている場合に、決定要因の1つになり得る。ユーザ情報は、重要なオブジェクト決定要因であることが多いにも関わらず、HTTP要求内に存在しなくてもよい場合が多い。さらに他の実施態様では、動的キャッシング態様は、キャッシュを、特定の種類の認証、アクセス制御、および監査(AAA)基盤を実行する機能を含む多様なその他のネットワーク構築要素と統合するためのシステムおよび方法と結合することができる。したがって、アプリケーションによって生成されたデータに適するセキュリティレベルは、代わりにキャッシュから供給されるデータに適用される。この技術によって、アプリケーションは、さもなければキャッシュすることができない敏感なアクセス制御情報をキャッシュすることができる。
この方法は、キャッシュが、識別可能なユーザ情報をHTTP要求に含まないが、統合キャッシング特許に記載されているAAA法を介して識別可能であり得るユーザを識別することを可能にする。このような方法は、キャッシュが、AAA処理から分割することができる承認状態情報を検査することによって、特定の要求に関連するユーザを識別することを可能にする。さらに他の実施態様では、統合によって、キャッシュ内に記憶された情報にセキュリティポリシーを適用し、承認されないユーザが、キャッシュに記憶された情報にアクセスすることを防止することができる。
この方法は、動的に生成されたデータの相当部分は、このようなデータを要求するクライアントが承認および認証された後、キャッシュは、クライアントからの関連する要求に応答することができるという事実によって課される問題にも対処する。キャッシュには、認証されたユーザによって行われる要求を承認する機能がなければならないため、アプリケーションは、キャッシュ制御オブジェクトをキャッシュすることができ、このような動的なキャッシング技術を認証および承認情報と統合することによって、このセキュリティを達成することができる。USERIDまたはGROUPIDは、オブジェクトがユーザまたはユーザ群に個人化される場合、オブジェクト決定要因の1つであるだろう。したがって、アプリケーションによって生成されるデータに適するセキュリティレベルは、キャッシュされた情報にも適用される。この技術によって、アプリケーションは、さもなければキャッシュすることができない敏感なアクセス制御情報をキャッシュすることができる。
最後に、時刻、起源におけるデータベースの状態などのその他の情報は、要求から構文解析して、キャッシュ内に記憶されたオブジェクトがまだ有効かどうかを決定するために、オブジェクト決定要因として使用することができる。キャッシュは、このような外部の変数に敏感であるように構成されるオブジェクトを群化する際に、適切な失効様式を構成することによって、この状況に対処し得る。
動的コンテンツに対する要求は、キャッシングによって構文解析し、解釈しなければならないという事実によって生じる問題にさらに対処するため、一実施態様によるキャッシュは、どのパラメータがキャッシュに関連するオブジェクト決定要因であるとみなすかを制限することができる。このようにして、適用可能なアプリケーションサーバに要求を回送するのではなく、オブジェクトをキャッシュから供給する成功率を強化することができる。一例として、クライアントからの要求問い合わせは、ある都市および状態パラメータの両方を含み得る。しかし、キャッシュは、キャッシュが、クライアントから到着する要求であって、問い合わせの提示が、都市の値に関係のない特定の状態のすべてのクライアントから到着する要求に応答を供給することができることを認識するために、コンテンツを記憶しているアプリケーションの要件に適合するように構成することができる。このため、都市パラメータは関連性がなく、キャッシュは、この事実を認識することができる。別の実施態様は、状態パラメータに何がしていされているかに関係なく、都市パラメータだけが一致する場合、キャッシュから応答を供給することができるようにキャッシュを構成することを含む。
要約すると、キャッシュは、パラメータ化された汎用オブジェクトの適合をインプリメントする。この方法では、キャッシュは、オブジェクト決定要因として有用な要求内の情報のサブセットであって、特定のオブジェクトにリンクされるサブセットを認識し、このようなオブジェクト決定要因が認識される時に、キャッシュが、オブジェクトまたはオブジェクト群が、フレッシュであり、キャッシュから供給できる状態を維持するかどうかを評価する際に、このような決定要因の存在(あるいは、逆に、このような決定要因の不在)を利用することができるように構成される。キャッシュは、要求が到着するごとに、構成されたパラメータを対照するために調査し、要求されたデータがフレッシュな状態を保ち、キャッシュが、関連データを、キャッシュメモリ内に記憶された適切なオブジェクトと一致させることも可能かどうかを決定するためのテーブルを維持する。
j.インカーネーション番号
さらに別の実施態様では、キャッシュは、インカーネーション番号を使用してオブジェクト群を無効化することができる。キャッシュが、起源の状態が変化したために、ある時点でオブジェクト群の各々の状態を変更する必要がある場合、インカーネーション番号は、この無効化を行うための単純な技術を提供する。各々のオブジェクトを識別し、状態を個々に変更することは、キャッシュ内に記憶されたデータのフレッシュさを確保するのに非効率的な方法だが、インカーネーション番号を使用すると、はるかに単純かつ効率的な方法で、オブジェクト群を無効化することができる。この実施態様は、各々のオブジェクトが、群を表すデータ構造をどのように指示し、したがって、サーバが、その群のデータ構造内の状態を変更するコマンドのみを送信すればよいかを説明する。キャッシュされたオブジェクトに関するその後の要求が、クライアントから到着する場合、キャッシュは、状態が変化したかどうかを理解しなければならない。そのために、キャッシュは、データ構造を検索し、その群の状態が変化したかどうかを参照する。
データ構造を効率的にインプリメントするには、キャッシュは、状態の変化をルックアップするかどうかを決定することができなければならない。したがって、キャッシュは、キャッシュが、群内の状態の変化を既に確認したかどうかを決定することができなければならない。これは、インカーネーション番号が役立つ場合である。キャッシュは、動的に生成されたオブジェクトをコンテンツ群に関連付ける。これらのコンテンツ群の各々は、特定の索引値または「インカーネーション番号」がデータ構造内に含まれるハッシュテーブルルックアッププロセスにより表すことができる。その後、キャッシュが、状態の変化を生じるとキャッシュが認識するクライアント要求を受信する時は常に、クライアントは、関連するパラメータに関してクライアント要求を構文解析して、認識したオブジェクト決定要因に基づいてハッシュルックアップを実行し、データ構造内の索引またはインカーネーション番号を増加させる。指定の群化の際に記憶されたオブジェクトが、クライアントによって要求されるごとに、キャッシュは、オブジェクトに関してハッシュアルゴリズムを実行し、そのオブジェクトと、それらのコンテンツ群のデータ構造内記憶された元の値とを比較する。記憶された値が、そのオブジェクトに関してキャッシュが計算した数と同じである場合、キャッシュは、コンテンツはフレッシュな状態を保ち、要求側に供給することができることを理解する。キャッシュが、データ構造内の当該オブジェクトに関して計算された現在のインカーネーション番号と、データ構造内の当該コンテンツ群に関して記憶されている数との矛盾を検出した場合、キャッシュは、記憶されたオブジェクトはもはやフレッシュではないことを理解する。キャッシュは、次に、記憶されたオブジェクトを無効化し、要求をアプリケーションサーバに送信する。応答が戻る場合、キャッシュアプライアンスは、新しい応答をキャッシュメモリ内に記憶し、その応答を再び新しいデータ構造にリンクさせる。その後、キャッシュが、群化の際にオブジェクトに対する要求を受信するごとに、キャッシュは比較を行い、データ構造にさらに変更は行われなかったと仮定すると、キャッシュは、新たに記憶されたオブジェクトを供給することができる。
この様式のオブジェクト群の無効化を利用することによって、キャッシュは、非常に迅速に無効化することができ、所要時間は、無効化されるオブジェクトの数に関係なく一定である。このより迅速で、より効率的な無効化プロセスにより、この技術は、キャッシュが、動的に生成されたオブジェクトをより効率的に処理することを可能にする。この方法は、アプリケーションの前に位置するキャッシュアプライアンスが、当該データ内の迅速な変更のために、無効あるいは古いコンテンツを供給せずに、動的に生成されたオブジェクトをより積極的に記憶し、供給することを可能にする。この実施態様は、キャッシュが、頻繁に、あるいは予測不能に変化するデータを供給して、それによってキャッシュの性能を改善することを可能にする。キャッシュは、ユーザコマンドを使用して、また様々な種類のウェブトラフィックを検査および群化することによって、キャッシュメモリ内に記憶されたオブジェクトおよびオブジェクト群を無効化することもできる。
2.接続プーリング
一実施態様では、ネットワークアプライアンス1250(本明細書では、インターフェースユニット1250とも呼ぶ)は、各々のサーバとの1つまたは複数の接続を開き、クライアントがInternetを介してデータに繰り返しアクセスすることができるように、これらの接続を維持することによって、クライアントとの接続を繰り返し開閉することによって生じるサーバ30の処理負荷の多くを軽減する。この技術は、本明細書では「接続プーリング」と呼ぶ。
完全を期すために、接続プーリングの動作について、図30に関して次に簡単に説明する。このプロセスは、図30では、クライアント10が、インターフェースユニット1250が仲介するサーバファーム内の1つのサーバに対するアクセスを要求する時に開始する。ステップ4302に示すように、インターフェースユニット1250と、要求するクライアントとの間の接続が開かれ、インターフェースユニット1250は、サーバに対するクライアントのアクセス要求を受信する。インターフェースユニット1250は、ステップ4304に示すように、要求されたサーバのアイデンティティを決定する。一実施態様では、これは、クライアントの要求によって指定される宛先のネットワークアドレスを検査することによって達成される。別の実施態様では、これは、クライアントの要求によって指定されるネットワークアドレスおよびパス名を検査することによって達成される。
インターフェースユニット1250は、クライアントの要求を送るべきサーバ30のアイデンティティを決定した後、ステップ4306に示すように、サーバに対する自由接続(つまり、使用されていない接続)が既に開かれているかどうかを決定する。開かれている場合、ステップ4310で処理が再開する。開かれていない場合、インターフェースユニット1250は、ステップ4308に示すように、サーバに対する接続を開く。インターフェースユニット1250は、次に、ステップ4310に示され、図31に関して以下でより完全に説明するように、クライアントの要求を翻訳して、要求をサーバに渡す。サーバの処理の後、インターフェースユニットは、ステップ4312に示すように、要求をサーバから受信する。ステップ4314に示され、以下でさらに説明するように、サーバの応答は翻訳され、要求するクライアントに渡される。最後に、インターフェースユニット1250は、ステップ4316に示すように、クライアントとの接続を閉じる。しかし、インターフェースユニット1250およびサーバ間の接続は切断されない。サーバとのオープン接続を維持し、クライアントとの接続を必要に応じて開閉することによって、インターフェースユニット1250は、Internetを通してクライアントに供給することに関連して、ほぼすべての接続負荷問題からサーバ30を解放する。
以下でさらに説明するように、いくつかの実施態様は、ステップ4316に関連しており、インターフェースユニット1250は、クライアント10との接続を閉じる。インターフェースユニット1250がクライアントとの接続を閉じる場合、多くの状況がある。たとえば、クライアントは、FIN(終了)コマンド、またはRSI(リセット)コマンドを開始する場合がある。これらの2つの状況では、インターフェースユニット1250は、インターフェースユニット1250自体とクライアントとの間の接続がなくなる前に、これらのコマンドの1つを受信するまで待つ。接続プーリングによる非効率は、クライアントが接続を使用しないか、または接続を断つが、ある期間にわたって、この情報をインターフェースユニット1250に中継しない場合に生じる。インターフェースユニット1250は、別のクライアントとの接続を再使用するために、クライアントからのコマンドを待っているので、接続は不必要につながれている。
以下でさらに詳細に説明するとおり、ハイパーテキスト転送プロトコル(HTTP)1.1(初期設定で)およびHTTP 1.0(Connection:Keep−Alive技術による)は、クライアントおよび/またはインターフェースユニット1250が、要求に対するサーバの応答を受信後でも、サーバとの接続を開いておくことを可能にする。クライアントおよび/またはインターフェースユニット1250は、次に、直後、または相当な時間(あるいは、「思考時間」)が経過した後に、同じ接続を介して他の要求を発行し得る。クライアントは、クライアントの人間のオペレータが、ブラウザ上の次のリンクを決定してクリックする時などに「思考時間」にある。その結果、サーバが、接続を介して何かの要求を処理していない場合でも、接続がサーバによって維持されることになる。この場合、アイドル状態または「思考時間」にある接続が閉じられた後のKeep−Aliveタイムアウトを設定することによって、サーバ管理者は、サーバ上の非常に多くの同時接続に対する保護をせざるを得ない場合がある。ある実施態様は、クライアント10が「思考している」間に、クライアント10’によるサーバとの接続を可能にする。当然、クライアント10がサーバ接続を使用している時にクライアント10’が要求を行う場合、クライアント10’は、サーバに対する異なる接続を使用しなければならない。しかし、一実施態様の接続プーリングの効率性は、非常に少数の接続を超えて、一般的なケースになった時に実現される。一般的なケースとは、「n個」のクライアント接続が統計的に「m個」のサーバ接続上で多重化される場合のことで、この時「n」は「m」より大きい。
図31は、ステップ4310および4314(図30)に示すように、クライアントおよびサーバの要求を翻訳する一実施態様の動作を示すフローチャートである。一実施態様では、メッセージトラフィックはTCP/IPパケットの形式、先行技術で十分に公知のプロトコルスイートである。TCP/IPプロトコルスイートは、Telnet、ファイル転送プロトコル(FTP)、eメール、およびHTTPなどの多くのアプリケーションをサポートする。この実施態様は、HTTPプロトコルに関して説明する。しかし、このコンセプトは、当業者にとっては、本明細書を読むと明らかになるように、他のTCP/IPアプリケーションにも同様によく適用される。
各々のTCPパケットは、TCPヘッダおよびIPヘッダを含む。IPヘッダは、32ビットのソースIPアドレス、および32ビットの宛先IPアドレスを含む。TCPヘッダは、16ビットのソースポート番号、および16ビットの宛先ポート番号を含む。ソースIPアドレスおよびポート番号は、ソースネットワークアドレスと総称され、パケットのソースインターフェースを一意に識別する。同様に、宛先IPアドレスおよびポート番号は、宛先ネットワークアドレスと総称され、パケットの宛先インターフェースを一意に識別する。パケットのソースおよび宛先ネットワークアドレスは、接続を一意に識別する。同様に、宛先ネットワークアドレスと総称される宛先IPアドレスおよびポート番号は、パケットに対する宛先インターフェースを一意に識別する。パケットのソースおよび宛先ネットワークアドレスは、接続を一意に識別する。TCPヘッダは、32ビットのシーケンス番号、および32ビットの確認応答番号も含む。
パケットのTCP部分は、TCPセグメントと呼ばれる。TCPセグメントは、TCPヘッダおよび本文を含む。TCPセグメントの本文部分は、HTTPヘッダおよびメッセージを含む。メッセージの長さを決めるメカニズムは2つあり、一方はチャンク転送符号化に基づき、もう一方はコンテンツの長さに基づく。コンテンツ長ヘッダファイルは、HTTPヘッダに見られる。コンテンツ長ヘッダフィールドが存在する場合、そのバイト値はメッセージ本文の長さを表す。あるいは、チャンク転送符号化ヘッダがHTTPヘッダ内に存在し、「チャンク」転送符号化が適用されたことを指示する場合、メッセージの長さは、チャンク符号化によって画定される。チャンク符号化は、各々のチャンク自体の指標がチャンクサイズのフィールドに含まれる一連のチャンクとしてメッセージを転送するために、メッセージ本文を修正する。
以下で詳細に説明するとおり、一実施態様は、コンテンツ長パラメータおよび/またはチャンク転送符号化ヘッダを使用して、クライアントが「思考時間」にある状況を避けることによって、サーバおよびクライアント間の接続プーリングの効率を増加する。この実施態様がない場合、インターフェースユニット1250は、クライアントからのコマンドを待った後、別のクライアントに対する接続を再使用するか、あるいは接続は、非常に長い間アイドルだった時にタイムアウトになる。
上記の32ビットシーケンス番号は、TCPセグメント中のデータの最初のバイトが表す送信TCPから受信TCPへのデータの文字列中のバイトを識別する。交換されるすべてのバイトは番号が付けられるため、確認応答番号は、確認応答の送信側が受信することを予想する次のシーケンス番号を含む。したがって、これは、シーケンス番号に、最後に正常に受信されたデータのバイトの1つを加えた値である。チェックサムは、TCPセグメント、つまりTCPヘッダおよび応答データ(または本文)を対象とする。これは、送信側によって計算され、記憶されて、受信側によって検証されなければならない必須のフィールドである。
クライアントから意図するサーバに到着するパケットを正常に経路指定するか、またはサーバからクライアントに出て行くパケットを経路指定するために、インターフェースユニット1250は、「ネットワークアドレス翻訳」として公知のプロセスを使用する。ネットワークアドレス翻訳は、先行技術で公知であり、URLhttp://www.safety.net/RFC1631.txtで探すことができるrequest for comment(RFC)1631によって指定される。
しかし、クライアントとサーバとの接続を途切れなくスプライスするため、1998年11月10日に出願された本願と同一所有権者による米国特許出願第09/188,709号「Internet Client−Server Multiplexer」に、新規な翻訳技術が詳細に記載されており、この特許出願は、本明細書では「接続多重化」と呼ぶ。この技術によると、パケットは、シーケンス番号および確認応答番号をTCPプロトコルレベルで修正することによって翻訳される。この技術の重要な利点は、アプリケーション層の相互作用が不要なことである。
図31を参照すると、ステップ4402に示すように、パケットのネットワークアドレスが翻訳される。到着するパケット(つまり、クライアントから受信されるパケット)の場合、パケットのソースネットワークアドレスは、インターフェースユニット1250の出力ポートのアドレスに変更され、宛先ネットワークアドレスは、意図するサーバのアドレスに変更される。出て行くパケット(つまり、サーバから受信されるパケット)の場合、ソースネットワークアドレスは、サーバのアドレスからインターフェースユニット1250の出力ポートのアドレスに変更され、宛先アドレスは、インターフェースユニット1250のアドレスから要求するクライアントのアドレスに変更される。パケットのシーケンス番号および確認応答番号も、ステップ404および406に示され、以下で詳細に説明するように翻訳される。最後に、パケットのチェックサムは、ステップ4408に示すように、これらの翻訳を説明するように再計算される。
上記のとおり、一実施態様は、特に、コンテンツ長パラメータ、および/またはチャンク転送符号化ヘッダが、サーバおよびクライアント間の接続プーリングの効率を増加させるにも関わらず、ネットワーククライアント−サーバの接続を効率的にプールするための装置、方法、およびコンピュータプログラム製品に関する。効率の増加は、クライアントが「思考時間」にある時に、接続を占有するのを避けた結果である。一実施態様では、コンテンツ長パラメータは、メッセージの長さを決めるために使用される。別の実施態様では、チャンク転送符号化は、メッセージの長さを決めるために使用される。2つの実施態様について、それぞれ図32および33に関して次に説明する。
図32は、TCPセグメント4500と呼ばれるTCPパケットのTCP部分を示す。TCPセグメント4500は、TCPヘッダ4502および本文4504を含む。本文4504は、その他の情報にHTTPヘッダおよびメッセージを含む。コンテンツ長パラメータ4506は、HTTPヘッダ内に見られる。ある実施態様が、コンテンツ長パラメータ4506をどのように使用して、より効率的な接続プーリングを提供するかについて、図35および36に関して以下で説明する。
図33は、TCPセグメント4600と呼ばれるTCPパケットのTCP部分を示す。上記のとおり、チャンク転送符号化ヘッダが、HTTPヘッダ内に存在し、「チャンク」転送符号化が適用されたことを指示する場合、メッセージの長さはチャンク符号化によって画定される。チャンク符号化は、各々のチャンク自体の指標がチャンクサイズのフィールドに含まれる一連のチャンクとしてメッセージを転送するために、メッセージ本文を修正する。TCPセグメント4600は、TCPヘッダ(図示しない)および本文を含む。本文は、情報の中に、HTTPヘッダ4602A〜4602Cおよびメッセージを含む。HTTPヘッダ4602A〜4602Cは、7つのチャンクサイズのフィールド4606A〜4606G;および6つのチャンクメッセージデータ4604A〜4604Fから成る。
チャンクサイズのフィールド4606A〜4606Gは、図33に示すように、互いにリンクされる。チャンクサイズのフィールド4606Aは、チャンクメッセージデータ4604A内のメッセージの長さを指示し、チャンクサイズのフィールド4606Cは、チャンクメッセージデータ4604C内のメッセージの長さを指示し、以下同様である。最後のチャンクサイズのフィールド4606Gは、常に、後に続くメッセージは存在しないことを示す長さ値ゼロを含む。これは、すべてのメッセージがクライアントに送信されたという指示である。ある実施態様が、チャンクサイズのフィールド4606A〜4606Gをどのように使用して、より効率的な接続プーリングを提供するかは、図37および38に関して以下で説明する。図33のTCPセグメント4600は、具体的に説明するものでしかないことに注目することは重要である。
ある実施態様が、コンテンツ長パラメータをどのように使用して、接続プーリングの効率を高めるかの詳細を説明する前に、完全を期すために、1998年11月10日に出願された米国特許出願第09/188,709号「Internet Client−Server Multiplexer」に説明されている接続プーリングについて最初に説明する。図34は、接続プーリングを示すメッセージフロー図である。図34は、2つのクライアントC1およびC2をサーバSに接続するインターフェースユニット1250を示す。2つのクライアントC1およびC2は、本明細書に記載する任意のクライアント10を含むことができ、サーバSは、本明細書に記載する任意のサーバ30を含むことができる。先ず、インターフェースユニット1250は、フロー4702で示されるクライアントC1によって提供されるネットワークアドレス1を使用して、クライアントC1との接続を開く。流れ線4702は、TCP/IPプロトコルが多段ハンドシェークを使用して接続を開くため、双方向フローとして示されている。
接続が開放されると、インターフェースユニット1250は、流れ線704で示すように、/sales/forecast.htmlのパス名を指定するクライアントC1からGET要求を受信する。自由接続は、インターフェースユニット1250およびサーバS間で開いていないため、インターフェースユニット1250はサーバSとの接続を開放する。インターフェースユニット1250は、流れ線4706で示すように、この要求をネットワークアドレス2にマッピングし、ネットワークアドレス2はサーバSを指定する。また、インターフェースユニット1250は、流れ線4708に示すように、GET要求を当該サーバに渡す。サーバSは、流れ線4710で示すように、要求されたウェブページに応答する。インターフェースユニット1250は、流れ線4712に示すように、ウェブページをクライアントC1に回送する。最後に、流れ線4714に示すように、クライアントC1およびインターフェースユニット1250間の接続は閉鎖される。TCP/IPプロトコルによると、ネットワーク接続の閉鎖には、多段プロセスを含むことができる。したがって、流れ線4714は双方向に示されている。インターフェースユニット1250は、サーバSとの接続を閉鎖するのではなく、追加のデータ流に適応するように接続を開放した状態を保つことに注意することが重要である。
次に、流れ線4716に示すように、クライアントC2によって提供されるネットワークアドレス1を使用して、インターフェースユニット1250とクライアントC2との間の接続が開放される。次に、インターフェースユニット1250は、流れ線4718に示すように、Web page /sales/forecast.htmlを指定するGET要求をクライアントC2から受信する。自由接続は、インターフェースユニット1250とサーバSとの間で既に開放しているため、インターフェースユニット1250が、さらに接続を開放する処理負荷をサーバSに負わせる必要はない。インターフェースユニット1250は、自由なオープン接続を単に使用する。インターフェースユニット1250は、流れ線4720に示すように、GET要求をサーバSにマッピングし、それを転送し、それをサーバSに回送する。インターフェースユニット1250は、流れ線4722に示すようにサーバSから応答を受信し、流れ線4724に示すようにクライアントC2に回送する。最後に、インターフェースユニット1250は、流れ線4726に示すように、クライアントC2との接続を閉じる。再び、インターフェースユニット1250は、サーバSとの接続を閉じない。その代わりに、インターフェースユニット1250は、追加のデータ流に適応するように接続を開放した状態を保つ。
上記のとおり、インターフェースユニット1250が、流れ線4724に示すようにクライアントC2との接続を閉鎖する結果を生じる状況がいくつかある。たとえば、クライアントは、FIN(終了)コマンドを開始することができ、それは、クライアントが、要求されたすべてのデータ(またはメッセージ)を検索した後に生じる。クライアントは、RST(リセット)コマンドも開始し得る。RSTコマンドは、インターフェースユニット1250およびクライアント間の接続を閉じるほかに、サーバ側接続を良好に維持するために、ある数のハウスキーピング動作を実行する。特に、TCPプロトコルは、RSTコマンドが正しいSEQ(シーケンス)番号を有し、その結果、サーバがTCPセグメントを受け取ることを保証する;しかし、RSTコマンドは、正しいACK(肯定応答)番号を有することを保証されない。この状況に対処するために、インターフェースユニット1250は、サーバによって送信されるデータのバイト、およびクライアントによって肯定応答されるバイトを常時把握する。クライアントが、サーバによってすべてのデータをまだ肯定応答されない場合、インターフェースユニット1250は、肯定応答されないバイトを計算し、ACKをサーバに送信する。さらに、サーバ側PCBは、タイムアウト待ち行列上に配置され、未解決のサーバデータ転送をドレインすることを可能にする。
さらに、図34には示さないが、サーバは、サーバ自体とインターフェースユニット1250との間の接続も閉鎖することができる。サーバは、FINコマンドをインターフェースユニット1250に送信するであろう。この場合、サーバとインターフェースユニット1250との間の接続、およびインターフェースユニット1250とクライアントとの間の接続は閉鎖されるであろう。
もう1つの態様は、サーバが接続を閉鎖する原因を最小限にすることによって、サーバからの接続処理のオフロードを最大限にすることである。3つの事例がある:
(1)プロトコルバージョンHTTP/1.1が使用される。この場合、明確なKeep−Aliveヘッダは不要である。デフォルトで、サーバは、接続の開放状態を維持する;接続を閉鎖するのは、クライアント次第である。ある一実施態様は、サーバ側の接続を再使用することによってサーバをオフロードする。接続を閉鎖するのはクライアント次第であるため、接続プーリングによる非効率は、クライアントが、接続を断たれたが、この情報をインターフェースユニット1250に対し、ある期間にわたって中継しない時に生じる。インターフェースユニット1250は、別のクライアントのための接続を再使用するために、クライアントからのコマンドを待っているので、接続は、不必要につながれている。
(2)プロトコルバージョンHTTP/1.0は、クライアントによって「Connection:Keep−Alive」ヘッダが提供される。この場合、サーバは、接続を開放状態に保つ;接続を閉じるのは、クライアント次第である。ある実施態様は、サーバ側の接続を再使用することによって、サーバをオフロードする。プロトコルバージョンHTTP/1.1と同様、接続プーリングによる非効率は、クライアントが、接続を断たれたが、この情報をインターフェースユニット1250に対し、ある期間にわたって中継しない時に生じる。
(3)プロトコルバージョンHTTP/1.0が使用され、「Connection:Keep−Alive」ヘッダは、クライアントによって提供されない。この場合、サーバは、1つのGET要求に完全に応えた後に通常どおり閉鎖されるであろう。サーバが、各々の要求の後に接続を閉じると、これは、インターフェースユニット1250を拒絶し、サーバ側の接続を再使用する機会を拒絶する。結局、Internetの多くは、「Connection:Keep Alive」がないHTTP/1.0を依然として使用する。この特定の重要な事例でサーバ側接続の再使用を可能にする新規な技術は、1998年11月10日に出願された本願と同一の所有権者による米国特許出願第09/188,709号「Internet Client−Server Multiplexer」に詳細に記載されている。インターフェースユニット1250は、GETパケットを検査して、この状況を検出する。この事例が検出されると、インターフェースユニット1250は、「Connection:Keep Alive」をGETパケット内に挿入する。これは、クライアントに見えないように行われるため、インターフェースユニット1250は、サーバ側接続の「Bytes Added」の数を常時把握しなければならない。シーケンス番号は、最初のバイトのシーケンス番号であるため、「Bytes Added」は、GETパケット内のシーケンス番号に影響しない。しかし、インターフェースユニット1250は、クライアントからサーバへの後続のパケットのシーケンス番号に「Bytes Added」を追加しなければならない。逆に、サーバは追加のバイトに肯定応答するが、インターフェースユニット1250は、確認応答をクライアントに送信する前に、追加のバイトを引かなければならない−クライアントは、これらのバイトが追加されたことを把握しない。
上記のとおり、接続多重化は、多重化シーケンスおよび確認応答番号によって達成される。インターフェースユニット1250が受信したセグメントのシーケンスおよび確認応答番号は修正され、受信者が予想する値にマッピングされる。クライアントには、データは、サーバから到着するように思われ、逆もある。たとえば、「インフロー」が、インターフェースユニット1250が受信するセグメントを示し、「アウトフロー」は、対応する出て行くセグメントを示し、シーケンスおよび肯定応答番号は、以下のように変更される:
アウトフローシーケンス番号=インフローシーケンス番号−インフロー開始シーケンス番号+アウトフロー開始シーケンス番号
アウトフロー肯定応答番号=インフロー肯定応答番号−インフロー開始肯定応答番号+アウトフロー開始肯定応答番号
HTTP/1.0パケットの「Connection:Keep Alive」ヘッダの追加に対処するため、インターフェースユニット1250は、接続の適切な半分、この場合はサーバ側、における「Bytes Added」を常時把握する。シーケンス番号および確認応答番号の公式は、以下のように変更される:
アウトフローシーケンス番号=インフローシーケンス番号−インフロー開始シーケンス番号+アウトフロー開始シーケンス番号+追加アウトフローバイト
アウトフロー肯定応答番号=インフロー肯定応答番号−インフロー開始肯定応答番号+アウトフロー開始肯定応答番号−追加インフローバイト。
より効率的な接続プーリングを提供するために、これらの式を使用し、一実施態様のコンテンツ長パラメータ技術を組み込んで行われる翻訳の特定の例は、図35および36(コンテンツ長パラメータに関連する)、および図37および38(チャンクサイズのフィールドに関連する)に関して以下で説明する。
図35は、コンテンツ長パラメータ技術を導入する際に、一実施態様により実行される確認応答およびシーケンス番号の翻訳を示す詳細なフロー図である。図35内の各々のフローのラベルは、T:S,A(L)の形式であり、ここで、TはTCPセグメントのタイプを表し、Sはシーケンス番号、Aは確認応答番号、およびLはコンテンツ長パラメータである。コンテンツ長パラメータは、メッセージ中のデータのバイト数を記述する。
フロー4802A〜4802Cは、クライアントC1およびインターフェースユニット1250間の接続を開く1つの方法を提示する。各々のフローは、TCPセグメントを表す。TCPセグメント4802Aでは、TCPヘッダ内のSYNフラグが設定され、クライアントC1からの新しい接続要求を示す。クライアントC1は、開始シーケンス番号2000および確認応答番号2000を確立した。インターフェースユニット1250は、フロー4802Bに示すように、開始シーケンス番号4000を指定し、確認応答番号を2001に増加するSYN ACKセグメントに応答する。ネットワーク内の各々のエンティティ(たとえば、クライアント、サーバ、インターフェースユニット)は、先行技術で公知のように、独自のシーケンス番号および/または確認応答番号を設定する。クライアントC1は、フロー4802Cに示すように、シーケンス番号2001を指定し、確認応答番号を4001に増加するACKセグメントに応答する。クライアントC1は、次に、フロー4804に示すように、49バイトの長さを指定するGETセグメントを送信する。
インターフェースユニット1250が、フロー806Aに示すように、サーバSとの自由オープン接続は存在しないと決定し、その結果、SYNセグメントをサーバSに送信し、開始シーケンス番号1950を指定すると仮定する。サーバSは、4806Bに示すように、開始シーケンス番号6000を指定し、確認応答番号を1951に増加するSYN ACKセグメントに応答する。インターフェースユニット1250は、フロー8060に示すように、ACKセグメントに応答する。インターフェースユニット1250は、次に、流れ線4808に示すように、上記の翻訳式に従ってシーケンスおよび確認応答番号を修正した後、GETセグメントをクライアントC1からサーバSに回送する。
サーバSは、フロー4810に示すように、シーケンス番号6001、確認応答番号2000、およびコンテンツ長パラメータ999を指定する要求データに応答する。インターフェースユニット1250は、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、流れ線4812Aに示すように、RESPセグメントをクライアントC1に回送する。
この時点では、インターフェースユニット1250は、クライアントC2による要求を受信して接続を開く。上記のとおり、フロー4816A〜4816Cは、クライアントC2およびインターフェースユニット1250間の接続を開くための1つの方法を提示する。やはり、各々のフローは、TCPセグメントを表す。TCPセグメント4816Aでは、TCPヘッダ内のSYNフラグが設定され、クライアントC2からの新しい接続要求を指示する。クライアントC2は、開始シーケンス番号999および確認応答番号999を確立している。インターフェースユニット1250は、フロー4816Bに示すように、開始シーケンス番号4999を指定し、確認応答番号を1000に増加するSYN ACKセグメントに応答する。クライアントC2は、フロー4816Cに示すように、シーケンス番号1000を指定し、確認応答番号を5000に増加するACKセグメントに応答する。クライアントC2は、次に、フロー4818に示すように、50バイトの長さを指定するGETセグメントを送信する。
この時点では、インターフェースユニット1250には、サーバSに対する使用可能な接続がないと仮定する。目標は、クライアントC1が接続を断たれるか、あるいは「思考時間」にある場合、クライアントC1のために以前使用されていたサーバSに対する同じ接続を再使用することである。クライアントC1が、FIN(終了)コマンドまたはRST(リセット)コマンドを開始して接続を解放するのを待つのではなく、インターフェースユニット1250は、コンテンツ長パラメータを使用して、要求されたすべてのデータがクライアントC1によって受信されたことを確認する。この場合、フロー4812Bでは、インターフェースユニット1250は、クライアントC1が要求されたすべてのデータを実際に受信したという確認をクライアントC1から受信する。これは、インターフェースユニット1250に対して、クライアントC1がFINまたはRSTコマンドを送信する前に何らかの理由で一時停止するかも知れない場合でも、クライアントC1は接続を断たれることを指示する。インターフェースユニット1250は、確認応答およびシーケンス番号を修正して、フロー812Cに示すように、RESP ACKセグメントをサーバSに回送する。
クライアントC1に使用したのと同じ接続を使用して、インターフェースユニット1250は、次に、流れ線4820に示すように、上記の翻訳式に従ってシーケンスおよび確認応答番号を修正した後、GETセグメントをクライアントC2からサーバSに回送する。サーバSは、フロー822に示すように、シーケンス番号7000、確認応答番号2050、およびコンテンツ長パラメータ500を指定する、要求されたデータに応答する。
インターフェースユニット1250は、流れ線4824Aに示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、RESPセグメントをクライアントC2に回送する。この場合、フロー4824Bでは、インターフェースユニット1250は、クライアントC2が、要求されたすべてのデータを実際に受信したという確認をクライアントC2から取得する。インターフェースユニット1250は、フロー4824Cに示すように、確認応答およびシーケンス番号を修正して、RESP ACKセグメントをサーバSに回送する。
次に、フロー4826A〜4826Dに示すように、インターフェースユニット1250が、FINまたはRSTコマンドをクライアントC2から受信すると、クライアントC2およびインターフェースユニット1250間の接続は閉鎖されるか、あるいはリンクを削除される。同様に、次に、フロー4814A〜4814Dに示すように、FINまたはRSTコマンドをクライアントC1から受信すると、クライアントC1およびインターフェースユニット1250間の接続が閉鎖されるか、あるいはリンクを削除される。しかし、インターフェースユニット1250が、サーバSとの接続を維持していることに注意することは重要である。また、図36に関連して記載したイベントのシーケンスは、単に具体的に示すためであることに注意することも重要である。
図36は、コンテンツ長パラメータを使用して、一実施態様によるクライアントおよびサーバ間の接続のプーリングの効率を増加する動作を示すフローチャートである。インターフェースユニット1250は、複数のサーバとの接続を維持し、クライアント要求に指定されているパス名に基づいて、これらのサーバに対するクライアント要求の経路を指定する。まず、インターフェースユニット1250は、ステップ4902に示すように、サーバとの接続を開放する。次に、クライアントC1の要求に応じて、インターフェースユニット1250は、ステップ4904に示すように、クライアントC1との接続を開放し、パス名を使用してデータを検索する要求をクライアントC1から受信する。
インターフェースユニット1250は、次に、ステップ4906に示すように、パス名によって指定されるコンテンツをホストするサーバを選択する。代わりの実施態様では、インターフェースユニット1250は、予め画定されたその他のポリシーを調査し、サーバの負荷およびサーバの状態など、適切なサーバを選択する。インターフェースユニット1250は、サーバのデータベース、およびサーバが面倒を見るサーバファームを管理および維持する。特に、このデータベース内の情報は、インターフェースユニット1250が、到着するパケットを正しいサーバに方向付けることを可能にする、現在アクティブなポリシーおよび規則を含む。これらのポリシーおよび規則は、ネットワークの状態、および必要なサービスに応じて、非常に迅速に変更することができる。
インターフェースユニット1250は、次に、ステップ4908に示すように、要求を翻訳して、選択したサーバに翻訳した要求を渡す。インターフェースユニット1250は、ステップ4910に示すように、サーバSからの応答を受信する。インターフェースユニット1250は、次に、ステップ4912に示すように、この応答を翻訳し、翻訳した応答をクライアントC1に渡す。
具体的に説明する目的上、この時点で、インターフェースユニット1250は、データを検索する要求をクライアントC2から受信すると仮定する。インターフェースユニット1250は、ステップ4914に示すように、クライアントC2の要求に応じて、クライアントC2との接続を開放し、パス名を使用してデータを検索する要求をクライアントC2から受信する。インターフェースユニット1250は、次に、ステップ4916に示すように、パス名によって指定されるコンテンツをホストするサーバを選択する。
ステップ4918では、インターフェースユニット1250は、クライアントC2が、クライアントC1と同じサーバを選択したかどうかを決定する。ステップ4918の結果が否定である場合、インターフェースユニット1250は、クライアントC2の要求に応じるために必要な方法で続行する(この実施態様では、重要ではない)。この時点で、図36のフローチャートが終了する。あるいは、ステップ4918の結果が肯定である場合、インターフェースユニット1250は、ステップ920で、選択したサーバに対する任意のオープン接続が存在するかどうを決定する。
ステップ4920の結果が肯定の場合、インターフェースユニット1250は、クライアントC2の要求に応じるために必要な方法で続行する(この実施態様には重要ではない)。この時点で、図9のフローチャートは終了する。あるいは、ステップ4920の結果が否定である場合、インターフェースユニット1250は、ステップ4922に示すように、コンテンツ長パラメータを使用して、クライアントC1が要求したすべてのデータをクライアントC1が受信したことを確認する。インターフェースユニット1250は、クライアントC1が接続を断たれるか、あるいは「思考時間」にあると決定するために、クライアントC1がFINまたはRSTコマンドを送信することを待たないことに注意することは重要である。これは、インターフェースユニット1250が、クライアントが接続を閉鎖するのを待って、別のクライアントに対し接続を再使用する場合と比べて、インターフェースユニット1250がより迅速に各々の接続を使用することができるという事実により、より効率的な接続プーリングを可能にする。
ステップ4924では、インターフェースユニット1250は、次に、ステップ4924に示すように、要求を翻訳し、クライアントC1が使用した接続と同じ接続を使用して、選択されたサーバに翻訳された要求を渡す。インターフェースユニット1250は、ステップ4926に示すように、応答をサーバSから受信する。インターフェースユニット1250は、次に、ステップ4928に示すように、応答を翻訳し、翻訳した応答をクライアントC2に渡す。インターフェースユニット1250は、ステップ4930に示すように、コンテンツ長パラメータを使用して、クライアントC2が要求したすべてのデータをクライアントC2が受信したことを確認する。
次に、インターフェースユニット1250は、ステップ4932で、クライアントC2との接続を閉鎖するか、あるいはリンクを解除する。最後に、インターフェースユニット1250は、ステップ4934で、クライアントC1との接続を閉鎖するか、あるいはリンクを解除し、図36のフローチャートは終了する。図35に関連して上記で説明したように、図36に関連して説明したイベントのシーケンスは、単に具体的に示すためである。
図37は、チャンクサイズのフィールド技術を組み込む際に、一実施態様によって実行される確認応答およびシーケンス番号の翻訳を示す詳細なフロー図である。図37の各々のフローのラベルは、T:S,A(L)の形式であり、ここで、TはTCPセグメントのタイプを表し、Sはシーケンス番号、Aは確認応答番号、およびLはチャンクサイズのフィールドである。チャンクサイズのフィールドの全体の値は、TCPセグメント中のデータのバイト数を記述する。
分かりやすくするため、クライアントC1およびクライアントC2の両方に対する接続は、既に確立されていると仮定する。クライアントC1は、次に、フロー4002で示すように、49バイトの長さを指定するGETセグメントを送信する。インターフェースユニット1250は、サーバSとの自由なオープン接続が存在しないと決定し、その結果、サーバSとの接続を開放する(図37に示さない)。インターフェースユニット1250は、次に、流れ線4004に示すように、上記の翻訳式に従ってシーケンスおよび確認応答番号を修正した後、GETセグメントをクライアントC1からサーバSに回送する。
具体的に説明するために、応答セグメント中のデータは、総コンテンツデータ長999を有すると仮定する。さらに、データは、300個のデータチャンク2つ、および399個のデータチャンク1つで伝送されると仮定する。これは、単に具体的に説明するためであり、制限することを意図しているのではないことに注意する。したがって、サーバSは、先ず、フロー4008Aに示すように、シーケンス番号6001、確認応答番号2000、およびチャンクサイズのフィールド300を指定する、要求されたデータ(またはメッセージ)のチャンクに応答する。インターフェースユニット1250は、流れ線4006Aに示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、RESPセグメントをクライアントC1に回送する。クライアントC1は、流れ線4006Bに示すように、データの受信をインターフェースユニット1250に対して肯定応答する。インターフェースユニット1250は、その結果、流れ線4008Bに示すように、この確認応答をサーバSに渡す。
サーバSは、次に、フロー4012Aに示すように、シーケンス番号6301、確認応答番号2001、およびチャンクサイズのフィールド300を指定する、要求されたデータの第2チャンクに応答する。インターフェースユニット1250は、流れ線4010Aに示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、RESPセグメントをクライアントC1に回送する。クライアントC1は、流れ線4010Bに示すように、データの受信をインターフェースユニット1250に対して肯定応答する。インターフェースユニット1250は、その結果、流れ線4012Bに示すように、この確認応答をサーバSに渡す。
サーバSは、次に、シーケンス番号6601、フロー4016Aに示すように、確認応答番号2002、およびチャンクサイズフィールド399を指定する、要求されたデータの第3チャンクに応答する。インターフェースユニット1250は、流れ線4014Aに示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、RESPセグメントをクライアントC1に回送する。クライアントC1は、流れ線4014Bに示すように、データの受信をインターフェースユニット1250に対して肯定応答する。インターフェースユニット1250は、その結果、流れ線4016Bに示すように、この確認応答をサーバSに渡す。
最後に、サーバSは、フロー4020に示すように、シーケンス番号7000、確認応答番号2003、およびチャンクサイズのフィールド0を指定するゼロデータの最後のチャンク(ゼロに等しいチャンクサイズのフィールドで指示される)に応答する。インターフェースユニット1250は、流れ線4018に示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、RESPセグメントをクライアントC1に回送する。これは、インターフェースユニット1250およびクライアントC1に対し、要求されたすべてのデータが伝送されたことを指示する。
この時点で、クライアントC2は、次に、フロー4022に示すように、50バイトの長さを指定するGETセグメントを送信する。この時点で、インターフェースユニット1250には、サーバSに対する使用可能な接続がないと仮定する。この目標は、クライアントC1が接続を断たれるか、あるいは「思考時間」にある場合、クライアントC1に以前使用されたサーバSに対する同じ接続を再使用することである。クライアントC1が、FIN(終了)コマンドまたはRST(リセット)コマンドを開始して接続を解放するのを待つのではなく、インターフェースユニットは、ゼロに等しいチャンクサイズのフィールドを使用して、要求されたすべてのデータがクライアントC1によって受信されたことを確認する。これは、インターフェースユニット1250に対し、クライアントC1が、何らかの理由で、FINまたはRSTコマンドを送信する前に一時停止し得る場合でも、クライアントC1は接続を断たれることを指示する。インターフェースユニット1250は、フロー4024に示すように、確認応答およびシーケンス番号を修正し、GETセグメントをサーバSに回送する。
具体的に示す目的上、応答セグメント内のデータは総コンテンツデータ長500を有すると仮定する。さらに、データは、300個のデータチャンク1つおよび200個のデータチャンク1つで伝送されると仮定する。これは、単に具体的に示すためであり、制限する意図はないことに注意する。したがって、サーバSは、先ず、フロー1028Aに示すように、シーケンス番号7000、確認応答番号2050、およびチャンクサイズのフィールド300を指定する、要求されたデータのチャンクに応答する。インターフェースユニット1250は、流れ線1026Aに示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、RESPセグメントをクライアントC2に回送する。クライアントC2は、流れ線4026Bに示すように、データの受信をインターフェースユニット1250に肯定応答する。インターフェースユニット1250は、その結果、4028Bに示すように、この確認応答をサーバSに渡す。
サーバSは、次に、フロー4032Aに示すように、シーケンス番号7300、確認応答番号2051、およびチャンクサイズのフィールド200を指定する、要求されたデータの第2チャンクに応答する。インターフェースユニット1250は、流れ線4030Aに示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、RESPセグメントをクライアントC2に回送する。クライアントC2は、流れ線4030Bに示すように、データの受信をインターフェースユニット1250に肯定応答する。インターフェースユニット1250は、その結果、流れ線4032Bに示すように、この情報をサーバSに渡す。
最後に、サーバSは、フロー4036に示すように、シーケンス番号7500、確認応答番号2052、およびチャンクサイズのフィールド0を指定するゼロデータの最後のチャンク(ゼロに等しいチャンクサイズのフィールドで指示される)に応答する。インターフェースユニット1250は、流れ線4034に示すように、RESPセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、RESPセグメントをクライアントC2に回送する。これは、インターフェースユニット1250およびクライアントC2に対し、要求されたすべてのデータが伝送されたことを指示する。
次に、フロー4038に示すように、インターフェースユニット1250が、FINまたはRSTコマンドをクライアントC2から受信すると、クライアントC2およびインターフェースユニット1250間の接続は閉鎖されるか、あるいはリンクを削除される。同様に、フロー4040に示すように、インターフェースユニット1250が、FINまたはRSTコマンドをクライアントC1から受信すると、クライアントC1およびインターフェースユニット1250間の接続は閉鎖されるか、またはリンクを削除される。しかし、インターフェースユニット1250は、サーバSとの接続を維持することに注意することは重要である。図37に関して説明したように、イベントのシーケンスは単に具体的に示すためであり、制限するものではないことに注意することも重要である。
図38は、チャンクサイズのフィールドを使用して、一実施態様によりクライアントおよびサーバ間の接続のプーリングの効率を増加する動作を示すフローチャートである。インターフェースユニット1250は、複数のサーバとの接続を維持し、クライアントの要求に指定されたパス名に基づいて、これらのサーバに対するクライアント要求の経路を指定する。先ず、インターフェースユニット1250は、ステップ4102に示すようにサーバとの接続を解放する。次に、インターフェースユニット1250は、ステップ4104に示すように、クライアントC1の要求に応答して、クライアントC1との接続を開放し、要求をクライアントC1から受信して、パス名を使用してデータを検索する。
インターフェースユニット1250は、次に、ステップ4106に示すように、パス名で指定されるコンテンツをホストするサーバを選択する。インターフェースユニット1250は、次に、ステップ4108に示すように、要求を翻訳し、選択したサーバに翻訳された要求を渡す。インターフェースユニット1250は、ステップ4110に示すように、サーバSから応答を受信する。インターフェースユニット1250は、次に、ステップ4112に示すように、応答を翻訳し、チャンクサイズのフィールドがゼロに等しくなるまで、翻訳された応答をクライアントC1に渡す。
具体的に示すために、この時点で、インターフェースユニット1250は、クライアントC2からの要求を受信し、接続を開放すると仮定する。インターフェースユニット1250は、ステップ4114に示すように、クライアントC2の要求に応答して、クライアントC2に対する接続を開放し、クライアントC2から要求を受信し、パス名を使用してデータを検索する。インターフェースユニット1250は、次に、ステップ4116に示すように、パス名で指定されるコンテンツをホストするサーバを選択する。
ステップ4118では、インターフェースユニット1250は、クライアントC2が、クライアントC1と同じサーバを選択したかどうかを決定する。ステップ4118の結果が否定である場合、インターフェースユニット1250は、次に、クライアントC2の要求に応じるために必要な方法で続行する。この時点で、図38のフローチャートが終了する。あるいは、ステップ4118の結果が肯定である場合、インターフェースユニット1250は、ステップ4120に示すように、選択したサーバに対する任意のオープン接続が存在するかどうか決定する。
ステップ1120の結果が肯定である場合、インターフェースユニット1250は、クライアントC2の要求に応じるのに必要な方法で続行する。この時点で、図38のフローチャートは終了する。あるいは、ステップ4120の結果が否定である場合、インターフェースユニット1250は、チャンクサイズのフィールドが、ステップ4112でゼロに等しくなったという事実を使用して、クライアントC1が要求したすべてのメッセージデータをクライアントC1が受信したことを確認する。インターフェースユニット1250は、クライアントC1が接続を断たれるか、あるいは「思考時間」にあると決定するために、クライアントC1がFINまたはRSTコマンドを送信することを待たないことに注意することは重要である。
ステップ4122では、インターフェースユニット1250は、次に、要求を翻訳し、クライアントC1が使用した接続と同じ接続を使用して、選択されたサーバに翻訳された要求を渡す。インターフェースユニット1250は、ステップ4124に示すように、サーバSから応答を受信する。インターフェースユニット1250は、次に、ステップ4126に示すように、応答を翻訳し、チャンクサイズのフィールドがゼロに等しくなるまで、翻訳された応答をクライアントC2に渡す。インターフェースユニット1250は、チャンクサイズのフィールドを使用して、クライアントC2が要求したすべてのメッセージデータをクライアントC2が受信したことを確認する。
次に、インターフェースユニット1250は、ステップ4128で、クライアントC2との接続を閉鎖するか、またはリンクを解除する。最後に、インターフェースユニット1250は、ステップ4130で、クライアントC1との接続を閉鎖するか、あるいはリンクを解除し、図38のフローチャートは終了する。図37に関して上記で説明したとおり、図38に関して説明したイベントのシーケンスは、単に具体的に示すためであり、制限するものではない。
前の実施態様は、特に、インターフェースユニット、たとえば、接続処理のオーバヘッドをサーバからオフロードするためにファーム内のサーバに接続されるインターフェースユニット1250内にインプリメントされる場合に関して説明している。しかし、これらの実施態様は、クライアントおよびサーバ間のネットワーク接続経路内にあるその他の種類のデバイスに適用することもできる。ネットワークトラフィックはこうしたデバイスを通って流れるため、これらのデバイスはすべて、接続処理をオフロードする機会を有する。こうしたデバイスのいくつかの例は、以下のとおりである:
− クライアントのネットワーク接続をサーバファーム内の一連のサーバ間に分散させる負荷分散装置(ローカルまたは地理的に分散させる)。
− ネットワークトラフィックを監視し、パケットのフローを計測する帯域幅管理装置。
− パケットを監視し、承認されたパケットのみを流すファイアウォール。
− ルータおよびスイッチも、ネットワークトラフィックの経路内に存在する。業界の傾向は、追加の機能(負荷分散、帯域幅管理、およびファイアウォール機能)をこれらのデバイス内に統合することである。
実施態様によっては、ネットワーク接続のエンドポイントであるコンピュータシステム内に適用することもできる。この場合、アドオンカードは、コンピュータシステム内の主処理要素をオフロードするために使用することもできる。
3.統合キャッシング
図39は、一実施態様に従って統合キャッシング機能を提供するアプライアンスで生じ得るイベントのシーケンスのフローチャート5300を示す。しかし、この実施態様は、フローチャート5300によって提供される説明にに限定されない。むしろ、当業者には、本明細書で提供される教示から、その他の機能フロー(flours)が、この実施態様の範囲および精神の範囲内であることは明らかであろう。これらのその他の機能フローは、キャッシングの統合に関する様々な処理、様々なシーケンス、およびその他の変形を含む可能性がある。
フローチャート5300の方法は、データ通信ネットワークに通信可能に結合される1つまたは複数のデバイスにインプリメントすることができる。たとえば、フローチャート5300の方法は、図1Aに関して上記で説明したアプライアンス1250などのアプライアンスにインプリメントすることができ、図27に関して上記で説明したように、ソフトウェアアーキテクチャ3200を有する。フローチャート5300の方法について、引き続きこの例示的な実施態様に関して説明する。
図39に示すように、フローチャート5300の方法は、ステップ5302で開始し、アプライアンス1250は、暗号化されたパケットをクライアント10の1つから受信する。一実施態様では、アプライアンス1250は、サーバ30に対するプロキシSSLエンドポイントとして動作するように構成され、クライアント10から受信した暗号化されたパケットを解読し、次に、必要に応じてさらに処理するためにサーバ30に送信し、最終的に、暗号化されたパケット内のアドレス情報に基づいて適切なリソースに送信する。適切なリソースは、たとえば任意のサーバ30、あるいは、アプライアンス1250によって管理されるキャッシュでよい。ステップ5304では、アプライアンス1250は、パケットに関する解読処理を実行する。
ステップ5306では、アプライアンス1250は、アクセス制御のAAAポリシーを実行する一実施態様に従って構成されており、暗号化されたパケットの送信元のクライアントを認証および/または承認する。
ステップ5308では、アプライアンス1250は、特定のタイプのパケット処理を実行する一実施態様に従って構成されており、解読されたパケットに関するパケット処理を実行して、適用可能なネットワークプロトコルによって生成される接続オーバヘッド処理要件を減少させる。
ステップ5310では、アプライアンス1250は、コンテンツを圧縮し解凍する一実施態様に従って構成されており、パケットに関連する要求を解凍する。一実施態様では、要求はウェブのオブジェクト要求を含む。
ステップ5312では、アプライアンス1250は、次に、キャッシュ機能を活性化することができ、オブジェクトに対する明確な、および/または承認された、および/または解凍された、および/またはパケット処理された要求を受信する。ステップ5302、5304、306、5308、および5310に関して説明した上記の処理により、キャッシュ管理論理は、明確な/承認された/解凍された/パケット処理された要求に基づいてオブジェクトがキャッシュされたか、あるいはキャッシュ可能かどうかを決定し、その結果、従来のキャッシングよりもはるかに広いアレイの要求を処理し、従来の方法に基づいて行われるよりも効率的にキャッシングを行うことができる。さらに、キャッシュ管理論理は、他の処理とともにカーネル空間内で動作するため、他のアプリケーションの各々などのデータ構造に関連して、等しいステータスを有するデータ構造として関連オブジェクトに関連しており、その結果、統合は、きわめて効率的な方法で行われる。
ステップ5314に示すように、オブジェクトが既にキャッシュメモリ内に存在しない場合、アプライアンス1250は、要求を1つまたは複数のサーバ30に送信する。しかし、追加のいくつかの処理ステップは、要求が送信される前に生じ得る。
たとえば、ステップ5316では、アプライアンス1250は、サーバ(単数または複数)に対する要求の効率的な送信を保証するために接続処理を任意に実行し、ステップ5318では、アプライアンス1250は、要求が最も適切なサーバ(単数または複数)に送信されることを保証するために、任意に負荷分散の決定を行う。また、一実施態様では、要求は、暗号化された後、バックエンド暗号化プロセスを介してサーバ(単数または複数)に送信され、それによって、端末相互間のネットワークセキュリティを提供する。ステップ5320では、要求は、サーバ(単数または複数)に伝送される。
ステップ5322では、アプライアンス1250は、逆にサーバ30の1つから応答を受信する。上記のとおり、バックエンド暗号化がサポートされている場合、アプライアンス1250は、サーバからの要求を解読する。
ステップ5324では、アプライアンス1250は、サーバからの応答に関連するオブジェクトを圧縮する。一実施態様で、オブジェクトはウェブオブジェクトを含む。
ステップ5326では、アプライアンス1250内のキャッシュ管理論理は、オブジェクトを圧縮形式でキャッシュ内に記憶する。キャッシュ管理論理は、処理能力上の理由により、この方法で、圧縮されたオブジェクトを記憶することができる。オブジェクトがキャッシュ内に記憶されると、当該オブジェクトに対するその後のクライアントの要求は、上記のステップ5316、5318、5320、5322、5324、および5326を実行することなく、キャッシュから供給することができる。これは、フローチャート5300内の決定ステップ5314をステップ5328に直接接続するラインで指示される。
ステップ5328では、オブジェクトがサーバから受信されたか、あるいはキャッシュから検索された後、アプライアンス1250は、元のクライアントの要求をより効率的に供給するために、接続上でパケット処理を実行する。ステップ5330では、次に、応答オブジェクトは、再度暗号化され、逆にクライアントに提供される。
上記の各々の処理ステップは、アプライアンス1250のカーネル/OSレベルで行われる。キャッシュをカーネル/OS空間内の他の所望の処理ステップの中間でインプリメントし、他の処理ステップと統合することによって、ある実施態様は、追加の機能をもたらし、キャッシュの性能を改善することができる。
このような統合は、一実施態様によるキャッシュのインプリメンテーションが、従来的にはキャッシュの機能的な能力を超える付加的な機能を実行することを可能にする。たとえば、一実施態様は、キャッシュが、暗号化および/または圧縮されたオブジェクトで動作することを可能にする。
一実施態様により達成し得る追加の機能のもう1つの例は、端末相互間の暗号化されたHTTPSトラフィックのキャッシングを伴う。一般に、キャッシュは、サーバからの暗号化されたHTTP応答のみを記憶する。特定のキャッシュは、場合により、SSL暗号化されたHTTPSをキャッシュからクライアントに提供するのをサポートし得るが、場合によっては、従来のキャッシュは、サーバによって暗号化された応答をキャッシュすることはできないため、端末相互間(つまり、サーバおよびクライアント間)の暗号化をサポートすることはできない。一般に、ある応答が、サーバによってHTTPS形式で暗号化される場合、キャッシュは、このような応答を解読することはできず、その結果、この応答をキャッシュメモリ内に記憶することはできない。このため、従来のキャッシュは、ある実施態様の端末相互間の暗号化トラフィックの点では何らかの利益を提供することはできず、統合キャッシングアプライアンスは、SSL暗号化HTTPSトラフィックに対する双方向の終端点として動作する。
たとえば、一実施態様では、統合キャッシングアプライアンスは、サーバおよびアプライアンス間、アプライアンスおよびクライアント間の両方の暗号化トラフィックに対する終端点として動作する。このようにして、アプライアンスは、サーバから受信したSSL暗号化応答を解読し、キャッシュすることができ、このような応答をクライアントに供給する場合、このような応答を再度暗号化し、要求したクライアントにこの応答を安全に提供し、それによって端末相互間の暗号化を可能にし、より多様なウェブトラフィックに対するキャッシングの適用性を増加する。
一実施態様では、アプライアンスは、SSL仮想プライベートネットワーク(SSL VPN)内のエンドポイントとしても動作することができる。特に、アプライアンスは、プライベートデータ通信ネットワーク内の任意のリソースに対するプロキシSSLエンドポイントとして動作することができ、クライアントから受信した暗号化パケットを解読し、次に、暗号化されたパケット内のアドレス情報に基づいて、適切な宛先サーバリソースにそれらを送信する。クライアントおよびゲートウェイ間で確立されたデータ通信セッションは、本明細書の前の段落で説明したように、暗号化エンドポイントとして機能するゲートウェイで暗号化し得る。上記のとおり、クライアントは、セキュアソケットレイヤー(SSL)、IPSec、またはその他の何らかの暗号化法を使用して暗号化データ通信セッションを確立し、これによって、クライアント上の傍受機構は、トラフィックをゲートウェイに方向付け、その際、クライアントブラウザには、宛先サーバまたは宛先ネットワークと直接通信していると思わせる。このような実施態様では、暗号化データ通信セッションはゲートウェイで終了することができ、ゲートウェイは、本明細書に記載するように統合キャッシュも含む。このようにして、キャッシング機能は、SSL VPN機能に統合することができる。
ゲートウェイは、適用可能な任意のAAA.ポリシーを要求に実行することもでき、その結果、ゲートウェイは、キャッシュされたオブジェクトを適切に認証されたクライアントにのみ供給し、承認されさたユーザに対してのみ、キャッシュされた特定のオブジェクトにアクセスする要求を許可する。これは、ゲートウェイのアクセス制御ポリシーが、キャッシュが特定の何らかの要求に遭遇する前に実行されるように、キャッシュが統合されるために可能である。したがって、キャッシュされたオブジェクトは、キャッシュ自体が認証および承認を実行しなくても、アクセス制御の利点を得る。キャッシュとその他の機能との統合により、キャッシュ自体は、現在のネットワークを通過する多様なデータを処理する際に、より効率的かつより効果的になる。一実施態様では、ウェブトラフィックのより広範なアレイにキャッシング機能の利点を導入することによって、全体のネットワーク性能の効率を改善することもできる。
一実施態様による上記の統合モードのその他の独特な結果のいくつかは、以下のとおりである。1つの結果は、予め圧縮されたデータをキャッシュし、圧縮を認識するクライアントにそのデータを供給する能力である。もう1つの結果は、アクセス制御データをキャッシュする能力である。さらにもう1つの結果は、外部のキャッシュと連動して、キャッシュの拡張可能性を提供する能力である。キャッシュは、ゲートウェイでリダイレクトおよびトラフィック管理能力と統合されるため、外部キャッシュは、第2段階のキャッシングを提供するように展開することができ、それによってキャッシングの能力(および利点)を著しく拡張することができる。一実施態様により、この能力は、キャッシュリダイレクトポリシーを明確に実行する必要があるキャッシュモジュール自体がなくても形成される。
性能に関しては、上記のようにキャッシュを統合することによって、キャッシュのプロセッサは、ネットワーク上のノードとして動作するキャッシュが、従来的には実行することを要求される様々な接続処理タスクを実行することから解放され、その結果、プロセッサの最高の性能レベルでキャッシング機能を果たすことができる。当然、圧縮データのキャッシングを可能にすることによって、キャッシュは、より効率的に機能することができ、ユーザが、さらに高性能を実現することを可能にする。
本明細書で前に指摘したように、効率は、キャッシュがその他のネットワークサービスおよび技術、たとえば負荷分散技術、暗号化、AAA、圧縮、その他のタイプの加速およびパケット処理と統合される方法の結果として得られる。したがって、従来の統合方法により導入される処理の重複およびその他の非効率は回避される。不必要なコピーおよびコンテキストのスイッチングによって生じるこうした非効率は、デバイスによって受信される各々のオブジェクトがメッセージにコピーされ、次にプロセッサのメモリにコピーされてから、関連アプリケーションによって処理されなければならないために生じる。さらに、追加のメモリコピーを導入するキャッシュによって処理するためには、要求をオブジェクトまたはパケットレベルにコピーしなければならない。対照的に、一実施態様は、OSまたはカーネルレベルにおける統合を実施し、その結果、キャッシュが、データ構造に関連付けてデータ構造を処理する際に、他のアプリケーションおよび/またはプロセスと等しいステータスを有し、すべてのプロセスが同じデータ構造で動作しているため、このような追加のメモリコピーに対する必要性が排除される場合、キャッシュが、オブジェクト上でデータ構造として動作することを可能にする。その結果は、より効率的な統合である。
a.データ通信ネットワーク内の予防的な検証を含むキャッシング
ウェブオブジェクトは、時間の経過とともに変化する可能性があるため、潜在的にキャッシュ可能な各々のオブジェクトは、有効寿命、あるいは「フレッシュさ」を有すると言われる。フレッシュさの概念は、最初にコンテンツを生成したアプリケーションサーバが、当該オブジェクトを記憶し得るキャッシュが当該オブジェクトを供給することができる期間も決定するという事実を意味する。キャッシュは、そのメモリ内に記憶さたオブジェクトのコピーがまだ「フレッシュ」であるかどうか、あるいはキャッシュが、オブジェクトの新しいコピーを最初のサーバから検索する必要があるかどうかを決定することができなければならない。一実施態様は、オブジェクトのフレッシュさを保証する新規な方法をインプリメントする。従来の多くのキャッシュインプリメンテーションは、コンテンツを起源から予め決められたスケジュールでフェッチすることによって、キャッシュされたコンテンツをフレッシュに保とうとする。起源からのコンテンツのフェッチは、キャッシュ管理者が、一般に次の方法の一方または両方に基づいて確立した時に行われる:(i)定期的な特定の間隔、または(ii)コンテンツが失効しようとする時。
通常使用される上記の方法に関連して、一般に2つの問題がある。第1に、サーバは、コンテンツが最終的にクライアントに供給されるかどうかに関係なく、リフレッシュを要求するキャッシュにコンテンツを提供する必要があるため(このようなリフレッシュが、特定の間隔で生じるか、あるいはコンテンツが失効しそうであるかどうかに関係なく)、不必要な処理負荷が起源サーバに課せられる。第2に、キャッシュは、キャッシュが、リフレッシュしなければならない要素、およびリフレッシュするべき時を常時把握する必要があるために生じる過剰な処理オーバヘッドに基づいて、追加のプロセッサ負荷を負担する。
一実施態様によるキャッシュは、新規な事前フェッチ法を使用して上記の問題を解決する。コンテンツの事前フェッチは、予め画定されたスケジュールに従って実行されないか、あるいはコンテンツの失効以前に実行されない。その代わりに、一実施態様は、以下の条件の両方が満たされた時にのみ事前フェッチを実行する:(1)クライアントが、特定のコンテンツに対する要求を行った、および(2)コンテンツが失効しそうである。
この方法は、上記の両方の問題に対処する。予防的な再検証は、当該コンテンツがアクティブにアクセスされる場合にのみ、起源サーバからのコンテンツをリフレッシュする要求を生成する可能性が大きい。これは、起源サーバ上の「不必要な」負荷の量を最小限にする。上記のとおり、キャッシュが、クライアントに最終的に供給されない(あるいは、キャッシュの感度に応じてごくまれに供給される)オブジェクトのリフレッシュを要求する場合、キャッシュは、キャッシュ自体のリソース、および起源サーバのリソースの両方を非効率的に使用している。一実施態様は、アクティブにアクセスされるコンテンツのみを要求することによって、キャッシュおよびサーバリソースの非効率的な使用を回避する。この方法は、同じ理由で、事前フェッチに使用される帯域幅を減少させ、その結果、従来の方法と比べてより効率的にネットワークリソースを使用する。
さらに、一実施態様は、キャッシュされたオブジェクト自体に含まれる失効情報を使用して、起源サーバからのオブジェクトのリフレッシュを要求するかどうかを決定する。このような失効情報は、一般に、関連オブジェクトのヘッダ内に含まれる。したがって、この実施態様は、リフレッシュ用のスケジュールを追跡するテーブルを維持するためにキャッシュを必要とする従来の多くの方法と違って、フェッチするために何らかの追加の情報を開始するという非効率を回避する。また、「デマンドベース」の事前フェッチ技術を使用すると、事前フェッチに固有の利点を強化する。この技術は、頻繁にアクセスされるオブジェクトは、失効する前に予防的な再検証を受ける可能性が高いため、このようなオブジェクトのキャッシュのミス数を減少させる。この技術は、デマンドが高い大きい応答が失効する時に生じる可能性がある起源サーバに対するトラフィックのサージを防止することもできる。従来の方法では、キャッシュのコンテンツは失効しているため、このようなコンテンツに対するすべての要求はキャッシュを失い、起源サーバに送信される。対照的に、一実施態様では、キャッシュメモリのコンテンツは、一般に、失効直前にリフレッシュされ、その結果、キャッシュのミスが生じつつ、キャッシュがリフレッシュしている状況が生じる可能性は低くなる。
一実施態様では、事前フェッチのアグレシッブさは、コンテンツが失効しそうであると決定される失効前の期間の長さ、さらに関連するオブジェクトのキャッシュによってリフレッシュをトリガする必要があるクライアント要求の数を調節することによって制御することができる。
b.「拒否セル」を使用するキャッシング不能な大きい応答の処理の最適化
一実施態様により、キャッシュは、オブジェクトのヒット率を改善するために、指定サイズを超えるオブジェクトを認識して記憶しない。キャッシュは、一般に、キャッシュされたオブジェクトの記憶に充当するメモリ空間が限られているため、割り当てられたメモリ空間を超える一定の応答は、キャッシング不能として最終的に拒絶され、キャッシュによって記憶されない。従来のキャッシュでは、キャッシュは、大きい応答をキャッシュメモリ内に記憶しようとし、キャッシュが、その応答のサイズが予め確定された最大サイズを超えると認識すると、応答の記憶を中止するのみである。従来のキャッシュは、このような応答に対する要求が、キャッシュによってサーバから受信されるごとに、大きい応答をキャッシュしようと繰り返し試みるであろう。いずれの場合も、キャッシュは、オブジェクトが、メモリ空間を超えるためにキャッシング不能であると決定する必要がある。したがって、これは、明らかに非効率的な方法である。
一実施態様によると、キャッシュは、このような応答を記憶するために努力するのを避けるために、最適化を使用する。キャッシュは、応答のサイズが原因でキャッシング不能になる応答を検出すると常に、対応する要求に関する表記を「拒否セル」と名付けられたデータ構造内に記憶する。この表記は、要求がキャッシング不能であることを指示する。この場合、クライアントが同じオブジェクトを要求すると、要求は、データ構造内に記憶された第1要求とみなされる表記と照合される。照合が終わると、キャッシュはその応答のキャッシュを試みず、その代わりに、要求はキャッシュを完全にバイパスする。
拒否セルをキャッシュ内に保持するべき期間を指定するために必要なユーザ構成はない。実際、ユーザは、この特定のメカニズムが使用されていることに気付くこともない。一実施態様では、キャッシュは、大きい応答をキャッシュするために使用されたと思われる定期的な失効情報を使用して、当該応答に関する「拒否情報」をキャッシュする。
4.クライアント側の加速
一実施態様では、クライアント側加速プログラムは、サーバが提供するアプリケーションにアクセスするなど、クライアントとサーバとの通信、および/またはサーバに対するクライアントのアクセスを加速、強化、あるいは改善するために、1つまたは複数の加速技術を実行し得る。次に、図40Aを参照すると、加速プログラム6120を有するクライアント6205が示されている。簡潔に説明すると、クライアント6205は、カーネルモード6202およびユーザモード6202を含むオペレーティングシステム、並びに1つまたは複数の層6210a〜6210bを含むネットワークスタック6210を有するコンピューティングデバイス6100上で動作する。クライアント6205は、上記のあらゆるクライアント10を含み得る。1つのクライアント6205のみを示すが、任意の数のクライアント10がクライアント6205を含み得る。クライアント6205は、1つまたは複数のアプリケーション6220a〜6220nをインストールし、および/または実行し得る。実施態様によっては、1つまたは複数のアプリケーション6220a〜6220nは、ネットワークスタック6210を介してネットワークと通信し得る。アプリケーション6220Nの1つは、第1プログラム6222、たとえば、加速プログラム6120をインストールし、および/または実行するためにいくつかの実施態様で使用し得るプログラムも含み得る。
クライアント6205のネットワークスタック6210は、ネットワークとの接続性および通信を提供するために、任意のタイプおよび形式のソフトウェア、ハードウェア、またはこれらの組合せを含み得る。一実施態様では、ネットワークスタック6210は、ネットワークプロトコルスイートのためのソフトウェアを含む。ネットワークスタック6210は、当業者が認識し評価する開放型システム間相互接続(OSI)通信モデルの任意のネットワーク層など、1つまたは複数のネットワーク層を含み得る。したがって、ネットワークスタック6210は、次のOSIモデル層の何れかに対する任意のタイプおよび形式のプロトコルを含み得る:1)物理リンク層、2)データリンク層、3)ネットワーク層、4)トランスポート層、5)セッション層、6)プレゼンテーション層、および7)アプリケーション層。一実施態様では、ネットワークスタック310は、一般にTCP/IPと呼ばれるインターネットプロトコル(IP)のネットワーク層プロトコル上にトランスポート制御プロトコル(TCP)を含み得る。実施態様によっては、TCP/IPプロトコルは、Ethernet(登録商標)プロトコル上に乗せることができ、任意の類のIEEE広域ネットワーク(WAN)またはローカルエリアネットワーク(LAN)プロトコル、たとえばIEEE802.3が適用されるプロトコルを含み得る。実施態様によっては、ネットワークスタック6210は、任意のタイプおよび形式の無線プロトコル、たとえばIEEE802.11および/またはモバイルインターネットプロトコルを含む。
TCP/IPベースのネットワークを考慮すると、任意のTCP/IPベースのプロトコルを使用することができ、たとえば、メッセージングアプリケーションプログラミングインターフェース(MAPI)(eメール)、ファイル転送プロトコル(FTP)、ハイパーテキスト転送プロトコル(HTTP)、共通インターネットファイルシステム(CIFS)プロトコル(ファイル転送)、独立計算アーキテクチャ(ICA)プロトコル、リモートデスクトッププロトコル(RDP)、無線アプリケーションプロトコル(WAP)、モバイルIPプロトコル、およびボイスオーバIP(VoIP)プロトコルを使用することができる。別の実施態様では、ネットワークスタック210は、修正トランスポート制御プロトコルなどの任意のタイプおよび形式のトランスポート制御プロトコル、たとえばトランザクションTCP(T/TCP)、選択承認を含むTCP(TCP−SACK)、TCPラージウィンドウ(TCP−LW)、TCP−Vegasプロトコルなどの混雑予測プロトコル、およびTCPスプーフィングプロトコルを含む。他の実施態様では、任意のタイプおよび形式のユーザデータグラムプロトコル(UDP)、たとえばIP上のUDPは、音声通信またはリアルタイムデータ通信などのネットワークスタック6210によって使用し得る。
さらに、ネットワークスタック6210は、1つまたは複数の層をサポートする1つまたは複数のネットワークドライバ、たとえばTCPドライバまたはネットワーク層ドライバを含み得る。ネットワークドライバは、コンピューティングデバイス100のオペレーティングシステムの一部として、あるいはコンピューティングデバイス6100の任意のネットワークインターフェースカードまたはその他のネットワークアクセス構成要素の一部として含まれ得る。実施態様によっては、ネットワークスタック6210の任意のネットワークドライバは、本明細書に記載されている何らかの技術をサポートするネットワークスタック6210のカスタムまたは修正部分を提供するように、カスタマイズまたは修正するか、あるいは適応させることができる。他の実施態様では、加速プログラム6120は、クライアント205のオペレーティングシステムによってインストールされるか、またはこのオペレーティングシステムによって提供されるネットワークスタック6210で動作するか、またはこのネットワークスタック6210に関連して動作するように設計され、構成される。
ネットワークスタック6210は、クライアント6205のネットワーク通信に関連する任意の情報およびデータを受信し、取得し、提供するか、あるいは情報およびデータにアクセスするため、任意のタイプおよび形式のインターフェースを含む。一実施態様では、ネットワークスタック6210のインターフェースは、アプリケーションプログラミングインターフェース(API)を含む。このインターフェースは、任意のファンクションコール、フッキングまたはフィルタリング機構、イベントまたはコールバック機構、あるいは任意のタイプのインターフェース技術も含み得る。インターフェースを介したネットワークスタック6210は、ネットワークスタック6210の機能または動作に関連する任意のタイプおよび形式のデータ構造、たとえばオブジェクトを受信するか、または提供し得る。たとえば、データ構造は、ネットワークパケットに関連する情報およびデータ、あるいは1つまたは複数のネットワークパケットを含み得る。実施態様によっては、データ構造は、ネットワークスタック6210のプロトコル層で処理されるネットワークパケットの一部分、たとえばトランスポート層のネットワークパケットを含む。実施態様によっては、データ構造6225はカーネルレベルデータ構造を含み、他の実施態様では、データ構造6225はユーザモードのデータ構造を含む。カーネルレベルデータ構造は、カーネルモード6202で動作するネットワークスタック6210の一部分から取得するか、またはこの一部分に関連するデータ構造、カーネルモード6202で動作するネットワークドライバまたはその他のソフトウェア、あるいは、オペレーティングシステムのカーネルモードで実行または動作するサービス、プロセス、タスク、スレッド、またはその他の実行可能なインストラクションによって取得されるか、あるいは受信される任意のデータ構造を含み得る。
さらに、ネットワークスタック6210のいくつかの部分は、カーネルモード6202、たとえばデータリンクまたはネットワーク層で実行または動作し、他の部分は、ユーザモード6203、たとえばネットワークスタック6210のアプリケーション層で実行または動作し得る。たとえば、ネットワークスタックの第1部分6210aは、ネットワークスタック6210に対するユーザモードアクセスをアプリケーション6220a〜6220nに提供することができ、一方、ネットワークスタック6210の第2部分6210aは、ネットワークに対するアクセスを提供する。実施態様によっては、ネットワークスタックの第1部分6210aは、ネットワークスタック6210の1つまたは複数の上位層、たとえば任意の層5〜7を含み得る。他の実施態様では、ネットワークスタック6210の第2部分6210bは、1つまたは複数の下位層、たとえば任意の層1〜4を含む。ネットワークスタック6210の第1部分6210aおよび第2部分6210bの各々は、ネットワークスタック6210の任意の部分を、ユーザモード6203、カーネルモード6202、またはこれらの組合せの任意の1つまたは複数のネットワーク層に、ネットワーク層の任意の部分に、またはネットワーク層に対するインターフェースポイントに、あるいはユーザモード6203およびカーネルモード6203の任意の部分、またはこれらに対するインターフェースポイントに含み得る。
本発明の加速プログラム6120は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組合せを含み得る。実施態様によっては、加速プログラム6120は、本明細書に記載する機能および動作を実行または提供するように構成および設計された任意のタイプおよび形式の実行可能なインストラクションを含む。実施態様によっては、加速プログラム6120は、任意のタイプおよび形式のアプリケーション、プログラム、サービス、プロセス、タスク、またはスレッドを含む。一実施態様では、加速プログラム6120は、ネットワークスタック6210とインターフェースし、連動するように構成および設計されたネットワークドライバなどのドライバを含む。加速プログラム6120の実行可能なインストラクションの論理、機能、および/または動作は、1つまたは複数の以下の加速技術を実行し得る:1)マルチプロトコル圧縮6238、2)トランスポート制御プロトコルプーリング6224、3)トランスポート制御プロトコル多重化6226、4)トランスポート制御プロトコルバッファリング6228、および5)キャッシュマネジャー6232を介したキャッシング。これらについて、以下でさらに詳細に説明する。さらに、加速プログラム6120は、クライアント6205が受信および/または伝送した任意の通信の暗号化6234および/または解読を実行し得る。実施態様によっては、加速プログラム6120は、クライアント6205と、別のコンピューティングデバイス6100、たとえばサーバ30との間のトンネリングも実行する。他の実施態様では、加速プログラム6120は、サーバ30に対する仮想プライベートネットワーク接続を提供する。
実施態様によっては、加速プログラム6120は、ネットワークスタック6210の1つまたは複数の層、たとえばトランスポート層で動作する。一実施態様では、加速プログラム6120は、フィルタドライバ、フッキング機構、または、たとえばトランスポートドライバインターフェース(TDI)を介してネットワークスタックのトランスポート層にインターフェースする任意の形式およびタイプの適切なネットワークドライバインターフェースを含む。実施態様によっては、加速プログラム6120は、第1プロトコル層、たとえばトランスポート層、およびトランスポートプロトコル層の上の任意の層などの別のプロトコル層、たとえばアプリケーションプロトコル層にインターフェースする。一実施態様では、加速プログラム6120は、ネットワークドライバインターフェース規約(NDIS)に準拠するドライバ、つまりNDISドライバを含み得る。別の実施態様では、加速プログラム6120は、ミニフィルタ(min−filter)または小型ポートドライバを備え得る。一実施態様では、加速プログラム6120、またはその一部はカーネルモード6202で動作する。別の実施態様では、加速プログラム6120、またはその一部はユーザモード6203で動作する。実施態様によっては、加速プログラム6120の一部分は、カーネルモード6202で動作し、加速プログラム6120の別の部分はユーザモード6203で動作する。他の実施態様では、加速プログラム6120はユーザモード6203で動作するが、たとえばカーネルレベルデータ構造6225を取得するために、カーネルモードドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの一部分にインターフェースする。さらに他の実施態様では、加速プログラム6120は、アプリケーション6220a〜6220nなどのユーザモードアプリケーションまたはプログラムである。
加速プログラム6120は、ネットワークスタック6210の任意の他のプロトコル層に対して透過的にプロトコル層で動作するか、またはこのプロトコル層とインターフェースし得る。たとえば、一実施態様では、加速プログラム6120は、トランスポート層の下の任意のプロトコル層、たとえばネットワーク層、およびトランスポート層の上の任意のプロトコル層、たとえばセッション、プレゼンテーション、またはアプリケーション層プロトコルに対して透過的にネットワークスタック6210のトランスポート層で動作するか、またはこのトランスポート層とインターフェースする。これは、ネットワークスタック6210のその他のプロトコル層が、必要に応じて、加速プログラム6120を使用するように修正することなく動作することを可能にする。したがって、加速プログラム6120は、トランスポート層とインターフェースして、トランスポート層によって伝達される任意のプロトコル、たとえばTCP/IP上の任意のアプリケーション層プロトコルを介して提供される任意の通信を加速することができる。
さらに、加速プログラム6120は、アプリケーション6220a〜6220n、クライアント6205のユーザ、およびクライアント6205と通信する任意のその他のコンピューティングデバイス、たとえばサーバに対して透過的にネットワークスタック6210で動作するか、またはネットワークスタック6210とインターフェースし得る。加速プログラム6120は、加速プログラム6120が、アプリケーション6220a〜6220nを修正することなく、アプリケーション6220a〜6220nの任意の通信を加速し得るように、クライアント6205上にインストールされるか、またはクライアント6205上で実行され得る。実施態様によっては、クライアント6205のユーザ、またはクライアント6205と通信するコンピューティングデバイスは、加速プログラム6120の存在、実行、または動作を認識しない。したがって、実施態様によっては、加速プログラム6120は、アプリケーション6220a〜6220n、クライアント6205のユーザ、別のコンピューティングデバイス、たとえばサーバ、あるいは加速プログラム6120によってインターフェースされるプロトコル層の上および/または下の任意のプロトコル層に対して透過的にインストールされ、実行され、および/または作動される。
実施態様によっては、加速プログラム6120は、統合された方法または様式で、1つまたは複数の加速技術6224、6226、6228、6232を実行する。一実施態様では、加速プログラム6128は、ネットワークスタック6210のトランスポートプロトコル層で通信を傍受、フック、フィルタ、または受信する任意のタイプおよび形式の機構を含む。トランスポート層においてクライアント6205のネットワークパケットを傍受し、カーネルレベルデータ構造6225などのデータ構造を介して、トランスポート層においてネットワークスタック6210とインターフェースすることによって、加速プログラム120は、ネットワークパケット上でトランスポート層に関連する加速技術、たとえばトランスポート制御プロトコル(TCP)のバッファリング、TCPプーリング、およびTCP多重化を実行することができる。さらに、加速プログラム6120は、トランスポート層プロトコルのネットワークパケットのペイロードとして伝達される任意のプロトコル、または複数のプロトコル上で圧縮6225を実行することができる。
一実施態様では、加速プログラム6120は、カーネルレベルデータ構造6225を使用して、1つまたは複数のネットワークパケットの任意の部分、たとえばクライアント6205からの要求、またはサーバからの応答を含むネットワークパケットに対するアクセスを提供する。一実施態様では、カーネルレベルデータ構造は、所望の加速技術を実行するために加速プログラム6120によって使用され得る。一実施態様では、加速プログラム6120は、カーネルレベルデータ構造6225を使用する時にカーネルモード6202で実行され、別の実施態様では、加速プログラム6120は、カーネルレベルデータ構造6225を使用する時にユーザモード6203で実行される。実施態様によっては、カーネルレベルデータ構造は、第2カーネルレベルデータ構造、または任意の所望のユーザレベルデータ構造にコピーされるか、または渡され得る。加速プログラム6120は、一般に、図40Aには、ユーザモード6203で動作する第1部分、およびカーネルモード6202で動作する第2部分を有するように示されているが、実施態様によっては、加速プログラム6120の任意の部分は、ユーザモード6203またはカーネルモード6202で実行し得る。実施態様によっては、加速プログラム6120は、ユーザモード6203でのみ動作することができ、他の実施態様では、加速プログラム6120はカーネルモード6202でのみ動作することができる。
さらに、ネットワークスタック6210のトランスポート層を傍受するか、またはカーネルレベルデータ構造6225を介してネットワークパケットにアクセスすることによって、加速プログラム6120は、単一のインターフェースポイント、単一の実行個所、または加速プログラム6120の任意の実行可能なインストラクションを実行する時間に、複数の加速技術を実行するか、または適用することができる。たとえば、一実施態様では、加速プログラム6120のある関数または一連のインストラクションで、たとえば、加速技術を実行するように構成および設計された一連の実行可能なインストラクションを呼び出すことによって、複数の加速技術を実行することができる。実施態様によっては、加速プログラム6120は、1つのインターフェースポイント、実行場所、または一連のインストラクションにおいて、1)マルチプロトコル圧縮6238、2)トランスポート制御プロトコルプーリング6224、3)トランスポート制御プロトコル多重化6226、4)トランスポート制御プロトコルバッファリング6228、および5)キャッシュマネジャー6232を介したキャッシング、および実施態様によっては、暗号化6234を提供するように設計および構成された任意のプログラム、サービス、プロセス、タスク、スレッド、または実行可能なインストラクションに対する1つまたは複数のアプリケーションプログラムインターフェース(API)を呼び出す。
加速プログラム6120の実行可能なインストラクションのある場所またはロケーションにおいて、あるいはネットワークスタック6210の1つのプロトコル層、たとえばトランスポート層において、複数の加速技術を実行することによって、これらの加速技術の統合は、より効率的かつ効果的に実行される。一態様では、プロセス間のコンテキストスイッチの数は減少し、使用されるデータ構造の数、または必要であるか、または使用されるメモリ内のデータ構造のコピーを減少させる。さらに、任意の加速技術間の通信の同期化は、より効率的に、たとえば緊密に結合した状態で、加速プログラム6120の一連の実行可能なインストラクションで実行することができる。したがって、加速技術の順序、どの技術を実行するか、どのデータおよび情報を技術間で共用あるいは渡すかに関連する任意の論理、規則、機能、または動作は、より効率的に実行することができる。加速プログラム6120は、トランスポート層でTCPパケットを傍受し、カーネルレベルデータ構造6225を介してTCPパケットのペイロードを取得し、次に所望の加速技術を所望の順序で実行することができる。たとえば、ネットワークパケットは最初に圧縮され、次にキャッシュされ得る。別の例では、圧縮され、キャッシュされたデータは、バッファされ、プールされ、および/または多重化された、TCP接続を介してサーバに通信し得る。
実施態様によっては、さらに図40Aを参照すると、第1プログラム6222は、加速プログラム6120を自動的に、サイレントに、透過的に、あるいは他の方法でインストールおよび/または実行するために使用し得る。一実施態様では、第1プログラム6222は、プラグイン構成要素、たとえば、アプリケーション6220a〜6220n内にロードされるか、アプリケーション6220a〜6220nによって実行されるActiveXコントロール、またはJava(登録商標)コントロールまたはスクリプトを含む。たとえば、第1プログラムは、アプリケーション6220のメモリ空間またはコンテキスト内などに、ウェブブラウザアプリケーション6220によってロードされ実行されるActiveXコントロールを含む。別の実施態様では、第1プログラム6222は、ブラウザなどのアプリケーション6220a〜6220n内にロードされ、このアプリケーション6220a〜6220nによって実行される一連の実行可能なインストラクションを含む。一実施態様では、第1プログラム6222は、加速プログラム6120をインストールするように設計および構成されたプログラムを含む。実施態様によっては、第1プログラム6222は、ネットワークを介して別のコンピューティングデバイスから加速プログラム6120を取得、ダウンロード、あるいは受信する。別の実施態様では、第1プログラム6222は、ネットワークドライバなどのプログラムをクライアント6205のオペレーティングシステム上にインストールするためのインストーラプログラム、またはプラグアンドプレイマネジャーである。
他の実施態様では、第1プログラム6222は、本明細書のB項に記載したすべての機能を含み得る。一実施態様では、第1プログラム6222は、収集エージェント404を含み得る。別の実施態様では、第1プログラムは、収集エージェントをインストールするためのプログラムを含み得る。別の実施態様では、第1プログラム6222は、コンピューティング環境15も含み得る。一実施態様では、第1プログラム6222は、実行環境または仮想実行環境などのコンピュータ環境をインストールするための手段を含み得る。一実施態様では、第1プログラム6222は、上記のとおり、アプリケーションストリーミングクライアント442を含み得る。別の実施態様では、第1プログラム6222は、クライアント10上で実行されるアプリケーションを含み得る。
他の実施態様では、第1プログラム6222は、任意の加速技術など、本明細書に記載する加速プログラム6120の任意の機能、動作、および論理を促進または実行するように、加速プログラム6120の機能、動作、および論理の一部分を含み得る。実施態様によっては、第1プログラム6222は、トランスポート層接続、あるいはアプライアンスまたはサーバとの通信セッション、たとえばセキュアソケット層(SSL)通信セッションなどの接続を確立するために使用される。一実施態様では、第1プログラム6222は、仮想プライベートネットワーク接続および通信セッションを確立するか、または確立を促進するために使用される。
図40Aに示すように、加速プログラム6120またはクライアント6205のキャッシュマネジャー6232は、任意のタイプおよび形式のコンテンツ、たとえばオブジェクト、または動的に生成されたオブジェクトであって、サーバ30によって供給されたオブジェクトのキャッシュアクセス、制御、および管理を提供するためのソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組合せを含み得る。キャッシュマネジャー6232によって処理および記憶されたデータ、オブジェクト、またはコンテンツは、マークアップ言語などの任意の形式のデータ、あるいは任意のプロトコルを介して通信されるデータを含み得る。実施態様によっては、キャッシュマネジャー6232は、どこかに記憶されたオリジナルのデータ、あるいは以前に計算、生成、または伝送されたデータを複製し、この場合、オリジナルのデータは、キャッシュメモリ要素を読み取る場合と比べてフェッチ、計算、あるいは取得するのにより長いアクセス時間を要する場合がある。データが、キャッシュメモリ要素内に記憶されると、オリジナルのデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスすることによって将来使用することができ、それによってアクセス時間が短縮する。実施態様によっては、キャッシュメモリ要素は、クライアント6205のメモリ内にデータオブジェクトを含み得る。他の実施態様では、キャッシュメモリ要素は、クライアント6205によって別様に使用されるメモリより高速のアクセス時間を有するメモリを含み得る。別の実施態様では、キャッシュメモリ要素は、クライアント6205の任意のタイプおよび形式の記憶素子、たとえばハードディスクの一部分を含み得る。さらに別の実施態様では、キャッシュマネジャー6232は、データ、オブジェクト、およびその他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組合せを使用し得る。
さらに、キャッシュマネジャー6232は、本明細書に記載されている技術の何らかの実施態様を実行するための何らかの論理、機能、規則、または動作を含み得る。たとえば、キャッシュマネジャー6232は、無効化期間の満了に基づいて、あるいはクライアント6205a〜6205n、またはサーバ30から無効化コマンドを受信後、オブジェクトを無効化するための論理または機能を含む。実施態様によっては、キャッシュマネジャー6232は、カーネル空間6202内、および他の実施態様では、ユーザ空間6203内で実行されるプログラム、サービス、プロセス、またはタスクとして動作し得る。一実施態様では、キャッシュマネジャー6232の第1部分は、ユーザ空間6203内で実行され、第2部分はカーネル空間6202内で実行される。実施態様によっては、キャッシュマネジャー6232は、任意のタイプの汎用プロセッサ(GPP)、または任意のその他のタイプの集積回路、たとえばフィールドプログラマブルゲートアレイ(FPGA)、プログラマブルロジックデバイス(PLD)、またはアプリケーション固有集積回路(ASIC)を含むことができる。
加速プログラム6120またはクライアント6205の暗号化エンジン6234は、任意のセキュリティ関連プロトコルの処理に対処するための任意の論理、ビジネスルール、機能、または動作、たとえば、SSLまたはTLS、またはこれらに関連する任意の機能を含む。たとえば、暗号化エンジン6234は、クライアント6205によって伝達されたネットワークパケット、またはその任意の部分を暗号化し、解読する。暗号化エンジン6234は、クライアント6205に代わってSSLまたはTLS接続も設定あるいは確立する。したがって、暗号化エンジン6234は、SSL処理のオフロードおよび加速を提供する。一実施態様では、暗号化エンジン6234は、クライアント6205と他のコンピューティングデバイス、たとえばサーバとの間の仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。
さらに図40Aを参照すると、加速プログラム6120またはクライアント6205のマルチプロトコル圧縮エンジン6238は、ネットワークパケットの1つまたは複数のプロトコル、たとえばクライアント6205のネットワークスタック6210が使用する任意のプロトコルを圧縮するための任意の論理、ビジネスルール、機能、または動作を含む。たとえば、マルチプロトコル圧縮6238は、GZip圧縮および解凍、差動圧縮およびUnCompression(展開)、またはネットワークを通して伝送されるデータを圧縮および解凍するための任意のその他の占有権のある、あるいは公的に入手可能なユーティリティを含む圧縮および解凍ユーティリティを含み得る。一実施態様では、マルチプロトコル圧縮エンジン6238は、クライアント6205および別のコンピューティングデバイス、たとえばサーバ間で双方向に、TCP/IPベースのプロトコル、たとえば、メッセージングアプリケーションプログラミングインターフェース(MAPI)((eメール)、ファイル転送プロトコル(FTP)、ハイパーテキスト転送プロトコル(HTTP)、共通インターネットファイルシステム(CIFS)プロトコル(ファイル転送)、独立計算アーキテクチャ(ICA)プロトコル、リモートデスクトッププロトコル(RDP)、無線アプリケーションプロトコル(WAP)、モバイルIPプロトコル、およびボイスオーバIP(VoIP)プロトコルを圧縮する。他の実施態様では、マルチプロトコル圧縮エンジン238は、ハイパーテキストマークアップ言語(HTML)ベースのプロトコルの圧縮を提供し、実施態様によっては、拡張可能マークアップ言語(XML)などの任意のマークアップ言語の圧縮を提供する。したがって、マルチプロトコル圧縮エンジン6238は、デスクトップクライアント、たとえばMicrosoft Outlook、およびOracle、SAP、およびSiebelなどの企業アプリケーションによって開始される任意のクライアントなどの非ウェブシンクライアント、さらにポケットPCなどのモバイルクライアントを介してユーザがアプリケーションにアクセスする性能を促進する。
加速プログラム6120は、以下でさらに詳細に説明するように、バッファリング、プーリング、および多重化のトランスポートプロトコル層加速技術も実行する。したがって、加速プログラム6120は、本明細書に記載するこれらの任意の技術を実行するための論理、規則、機能、および動作を有する任意のタイプおよび形式の実行可能なインストラクションを含む。加速プログラム120は、ネットワークスタック210のトランスポート層において、アプリケーション6220a〜6220nが、ネットワークスタック6210を介して行う任意のトランスポート層アプリケーションプログラミングインターフェース(API)コールを傍受、制御、および管理する。加速プログラム6120は、予想どおりネットワークスタック6210のトランスポートプロトコル層からの応答をクライアント6205が受信するように、透過的な方法でクライアント6205の任意の要求に応答する。たとえば、一実施態様では、加速プログラム6120は、クライアント6205のネットワークスタック6210において、別のコンピューティングデバイス、たとえばサーバとのトランスポート層接続を確立する要求を傍受し、加速プログラム6120によって確立された1つまたは複数のトランスポート層接続のプールを使用して、この要求に応答し得る。別の実施態様では、加速プログラム6120は、第2アプリケーション6220bによって使用される、確立されたトランスポート層接続を介して、第1アプリケーション6220aからの要求を多重化する。
実施態様によっては、加速プログラム6120は、ネットワーク上で伝送する前に、クライアント6205においてクライアント6205の通信をバッファリングするか、または保持する機構を備える。たとえば、クライアント6205がネットワーク、たとえばサーバから受信した通信の消費速度は、クライアント6205がネットワーク上で伝送した通信の生産速度未満であり得る。したがって、クライアント6205は、クライアント6205がこのような要求からの応答を消費および処理できる速度より大きい速度で、より多くの要求をサーバ30に送信している場合がある。加速プログラム6120は、通信を傍受し、クライアント6205の消費速度および/または生産速度が、予め決められた閾値、たとえばユーザ、クライアント6205、または別のコンピューティングデバイスによって構成された閾値未満であるかどうかを決定する。決定された速度が所望の閾値未満である場合、加速プログラム6120は、クライアント6205の性能が、消費および/または生産の速度を、予め決められたか、または所望の閾値以上の速度に増加させるまで、傍受された通信をクライアントのメモリ要素に記憶する。この時点で、加速プログラム6120は、クライアントの通信をネットワークを通して伝達する。したがって、クライアント側の機構は、クライアント6205による通信の消費および/または生産の性能に基づいて、クライアント6205の通信を抑制するために設けられる。
図40Aに示すアプリケーション6220a〜6220nは、任意のタイプおよび/または形式のアプリケーション、たとえば任意のタイプおよび/または形式のウェブブラウザ、ウェブベースのクライアント、クライアント−サーバアプリケーション、シンクライアントコンピューティングクライアント、ActiveXコントロール、またはJava(登録商標)アプレット、またはクライアント6205上で実行可能か、またはネットワーク6204を介して通信可能なその他の任意のタイプおよび/または形式の実行可能なインストラクションでよい。アプリケーション6220a〜6220nは、任意のタイプのプロトコルを使用することができ、たとえばHTTPクライアント、FTPクライアント、Oscarクライアント、またはTelnetクライアントでよい。実施態様によっては、アプリケーション6220a〜6220nは、リモートディスプレーまたは提示レベルプロトコルを使用する。一実施態様では、アプリケーション6220a〜6220nは、フロリダ州、フォートローダーデールのCitrix Systems,Inc.によって開発されたICAクライアントである。他の実施態様では、アプリケーション6220a〜6220nは、ワシントン州、レドモンドのMicrosoft Corporationによって開発されたリモートデスクトップ(RDP)クライアントを含む。他の実施態様では、アプリケーション6220a〜6220nは、ソフトIP電話などのVoIP通信に関連する任意のタイプのソフトウェアを含む。さらに他の実施態様では、アプリケーション6220a〜6220nは、リアルタイムデータ通信、たとえばストリーミングビデオおよび/またはオーディオ用のアプリケーションに関連する任意のアプリケーションを含む。
図40Bは、図27に示すアプライアンスアーキテクチャに類似するアプライアンス1250の一例のアーキテクチャを示す。簡潔に説明すると、アプライアンス1250は、ハードウェア層6206と、ユーザ空間6203およびカーネル空間6202に分割されるソフトウェア層とを含む。ハードウェア層6206は、カーネル空間6202およびユーザ空間6203内のプログラムおよびサービスが、実行されるハードウェア要素を提供する。ハードウェア層6206は、カーネル空間6202およびユーザ空間6203内のプログラムおよびサービスが、アプライアンス1250に対して内部および外部の両方でデータを通信することを可能にする構造および要素も提供する。ソフトウェア層は、アプライアンス1250の論理、機能、および動作を提供するためのプログラム、サービス、プロセス、タスク、スレッド、および実行可能なその他のインストラクションを含む。
アプライアンス1250は、アプリケーション加速判定機構6275、およびクライアント側加速プログラム6120を含む。アプリケーション加速判定機構6275は、ソフトウェア、ハードウェア、またはハードウェアおよびソフトウェアの任意の組合せを含む。実施態様によっては、アプリケーション加速判定機構6275は、任意のタイプおよび形式の実行可能なインストラクション、たとえば、クライアント6205および/またはサーバ30上で実行するアプリケーション6220a〜6220nを加速することができるかどうか、あるいはクライアント6205およびサーバ30間のアクセスまたは通信を加速することができるかどうかを決定するための論理、機能、規則、または動作を有するプログラム、サービス、プロセス、タスク、またはスレッドを含む。一実施態様では、データベースは、アプリケーション6220a〜6220nを加速することが可能かどうかを決定するために、アプリケーション加速判定機構6275によって使用される。たとえば、データベースは、アプリケーション6220a〜6220nを、アプリケーション6220a〜6220nを加速することが可能な1つまたは複数の加速技術と関連付けることができ、さらに、クライアント6205および/またはサーバ30のユーザ、タイプ、形式、ロケーション、処理機能、およびその他の特性に基づくことができる。実施態様によっては、アプリケーション加速判定機構6275は、名前、タイプ、またはカテゴリによるアプリケーション6220a〜6220nを加速技術によって加速することが可能かどうかを識別する情報を含むメモリ内のルックアップテーブル、ファイル、データ構造、またはオブジェクトを使用する。他の実施態様では、アプライアンス1250および/またはアプリケーション加速判定機構6275は、アプリケーション6220a〜6220n、またはサーバ30に対するアクセスを加速することができるかどうかを識別、指定、または構成するためのユーザ入力を受信するためのユーザインターフェース、グラフィカル、コマンドラインなどの構成機構を備える。
実施態様によっては、アプリケーション加速判定機構6275は、アプリケーション6220a〜6220nを加速し得るかどうか、さらに他の実施態様では、どの加速技術(単数または複数)によって、どのタイプおよび形式のクライアント6205に関して加速し得るかどうかを識別する情報をサーバ30から要求する。さらに別の実施態様では、アプリケーション加速判定機構6275は、1つまたは複数のクライアント側加速技術の有無に関わらず、クライアント6205およびサーバ30間のアプリケーション6220a〜6220nの性能に関する履歴情報のデータベースを含み、クライアント側の加速技術を使用してアプリケーション6220a〜6220nが加速されるか、あるいは加速することができるかどうかに関する相対的かつ発見的な情報のデータベースを提供する。たとえば、アプライアンス1250は、アプリケーション6220a〜6220nの性能に関連する性能情報に関するネットワークをクライアント6205から捕捉し得る。したがって、アプリケーション6220a〜6220nが加速可能かどうかの決定は、ネットワーク6204の動作および性能特性の変化に適応させるか、こうした変化に基づくか、あるいは変化によって影響され得る。
一態様では、アプリケーション6220a〜6220nは、加速することができないか、あるいは加速はできるが、加速が効果的ではないか、さもなければ最低限であると思われる。一実施態様では、そのタイプおよび形式のアプリケーション6220a〜6220nはプロトコルを使用することができないか、あるいは加速技術に使用するのに適する方法で通信することはできない。別の実施態様では、アプリケーション6220a〜6220nが通信するプロトコルまたは方法は、加速技術の実行を可能にするが、クライアント6205、アプライアンス1250、またはサーバ30の動作または性能特性の何れかに基づいて、加速技術は効果的ではないか、さもなければ最低限の加速を提供すると思われる。したがって、アプリケーション加速判定機構6275は、アプリケーション6220a〜6220nが加速可能であるかどうか、あるいは加速が、性能改善に関する所望の予め決められた閾値に適合しそうかどうかに基づいて、アプリケーション6220a〜6220nを加速することが望ましくないと決定する場合がある。
もう1つの態様では、アプライアンス6250は、クライアント側加速プログラム6120を、アプライアンス1250の記憶またはメモリ要素、たとえばアプライアンスのハードウェア層6206によって提供される記憶装置またはメモリなどに記憶する。一実施態様では、アプライアンス1250は、クライアント6205によって使用されるか、あるいは使用されているアプリケーション6220a〜6220nが、クライアント6205上で実行している加速プログラム6120によって加速可能であり、加速プログラム6120をアプライアンス1250の記憶装置またはメモリからクライアント6205に伝送するか、あるいは伝達することを、アプリケーション加速判定機構6275を介して動的に決定する。別の実施形態では、アプライアンス1250は、クライアント6205およびサーバ30間の通信が、クライアント6205上で実行している加速プログラム6120によって加速可能であると決定し、加速プログラム6120をクライアント6205に伝達する。実施態様によっては、アプライアンス1250は、加速プログラム6120を別のコンピューティングデバイス6100、たとえばサーバ30から受信、ダウンロード、または取得する。
実施態様によっては、加速プログラム6120は、ポリシー情報をアプライアンス1250のポリシーエンジン3236から受信、ダウンロード、または取得する。他の実施態様では、加速プログラム6120は、アプライアンス1250のポリシーエンジン3236に関係なく、あるいはこれに関連して、ポリシーエンジンを実行および作動させる。他の実施態様では、パケットエンジン3240、またはその一部は、加速プログラム6120の一部などのクライアント6205上で作動させることができる。したがって、加速プログラム6120は、上記のとおり、パケット処理タイマー3242に従ってクライアント6205上で動作し得る。一実施態様では、加速プログラム6120は、実行中のある時点で、パック処理タイマー3242によって提供される粒度の細かい時間間隔に応じて統合加速技術を実行し得る。
実施態様によっては、健全性監視プログラム3216は、アプライアンス1250に関連するか、あるいはアプライアンス1250が加速プログラム6120を伝送した任意のクライアント6205上のクライアント側加速プログラム6120のステータス、エラー、または履歴を検査し、決定する。実施態様によっては、健全性監視プログラム3216、またはその一部分は、クライアント6205上で実行される。
次に、図41Aを参照すると、アプライアンス1250によって動的に加速プログラム6120を提供し、クライアント6205によって加速プログラム6120を自動的にインストールし、実行する方法6300の一実施態様が示されている。簡潔に説明すると、ステップ6310で、アプライアンス1250は、クライアント6205からの要求を傍受し、サーバとの通信セッションを確立する。ステップ6315で、アプライアンス1250は、クライアント6205が自動的にインストールし、実行するように、加速プログラム6120をクライアント6205に伝送する。ステップ6320で、クライアント6205は、加速プログラム6120を受信すると、加速プログラム6120のサイレントインストールを自動的に実行または実施する。ステップ6325で、クライアント6205は、加速プログラム6120のインストールの完了後、ネットワークスタック6210内で加速プログラム6120を自動的に実行し、クライアント6205およびサーバ30間の通信を傍受する。ステップ6330で、加速プログラム6120は、複数の加速技術の何れかを実施し、通信を暗号化および/または解読し得る。
さらに詳細には、ステップ6310で、アプライアンス1250は、任意の適切な手段および機構によって、クライアント6205からの要求を傍受するか、あるいは受信し、サーバ30との通信セッションを確立し得る。一実施態様では、アプライアンス1250のパケットエンジン6240は、クライアント6205からの通信を傍受する。他の実施態様では、アプライアンス1250は、クライアント6205、たとえば加速プログラム6120との第1トランスポート層接続を確立し、クライアント6205の代わりにサーバ6205との第2トランスポート層接続を確立する。したがって、アプライアンス1250は、サーバ30に伝送されるクライアントの何らかの通信を受信、傍受、あるいは取得し得る。実施態様によっては、アプライアンス1250は、クライアント6205に対する要求を傍受し、サーバ30とのトランスポート層接続を確立する。他の実施態様では、アプライアンス1250は要求を傍受し、トランスポート層接続上の任意のプロトコル層、たとえばHTTPのアプリケーション層プロトコルを介して、通信セッションを確立する。この方法のこの実施態様は、クライアント6205のネットワークスタック6210の任意のプロトコル層において通信セッションを確立する要求で実施し得る。
ステップ6315で、アプライアンス1250は、加速プログラム6120をクライアント6205に伝送する。アプライアンス1250は、クライアント6205によって要求された通信セッションを確立する前、確立時、または確立後のある時点で、加速プログラム6120を伝送し得る。一実施態様では、アプライアンス1250は、クライアントの要求の傍受に応じて、加速プログラム6120をクライアント6205に伝送する。別の実施態様では、アプライアンス1250は、要求をサーバ30に回送し、加速プログラム6120をクライアント6205に伝送する。実施態様によっては、アプライアンス1250は、サーバ30との通信セッションを確立し、通信セッションの確立後、アプライアンス1250は、加速プログラム6120を伝送する。さらに別の実施態様では、アプライアンス1250は、クライアント6205、またはクライアント6205のユーザの認証および/または承認を実施し、認証されたユーザまたはクライアント6205がそのように承認されると、アプライアンス1250は、加速プログラム6120をクライアント6205に伝送する。一実施態様では、アプライアンス1250は、認証および/または承認のためにクライアントの要求をサーバ30に回送し、サーバ30が、クライアントの要求を認証および/または承認すると、アプライアンス1250は、加速プログラム6120をクライアント6205に伝送する。
実施態様によっては、アプライアンス1250は、加速プログラム6120をアプライアンス1250の記憶装置またはメモリから伝送する。他の実施態様では、アプライアンス1250は、サーバ30からの加速プログラム6120を要求し、受信した加速プログラム1620をクライアント6205に回送する。別の実施態様では、サーバ30は、加速プログラム6120をクライアント6205に伝送する。一実施態様では、アプライアンス1250は、均一リソースロケータ(URL)をクライアント6205に伝送し、クライアント6205は加速プログラムを取得、ダウンロード、または受信する。実施態様によっては、URLは、アプライアンス1250の記憶装置またはメモリにおける加速プログラム6120のロケーションを識別し、他の実施態様では、URLは、ダウンロード用の加速プログラム6120を提供するウェブサーバなどのサーバ30上の加速プログラム6120を識別する。一実施態様では、加速プログラム6120は、クライアント6205上に記憶され、アプライアンス1250は、暗号化またはライセンスキーなどのキーをクライアント6205に伝送し、クライアント6205は、クライアント6205上に記憶された加速プログラム6120をインストールし、利用する。実施態様によっては、アプライアンス1250は、加速プログラム6120をクライアント6205上にインストールして実行するために使用される任意のファイル、構成、データ、またはその他の情報をクライアント6205に伝送する。
一実施態様では、加速プログラム6120は、クライアント6205によって自動的にインストールされ、実行されるように設計および構成される。加速プログラム6120は、加速プログラム6120が、クライアント6205のオペレーティングシステムによって、オペレーティングシステムのタイプおよび形式に従って登録または認識されるようにする任意のファイル、エントリ、構成、データ、またはインストラクションを含み得る。一実施態様では、サーバまたはアプライアンスなどの別のコンピューティングデバイスは、加速プログラムをクライアント6205に伝送し、クライアント6205は、加速プログラム6120を自動的にインストールし実行する。一実施態様では、加速プログラム6120は、実行しているコンピューティングデバイス6100に追加されるプラグアンドプレー(PnP)デバイスとして設計され、構成される。実施態様によっては、加速プログラム6120は、実行インストール型の実行可能ファイル、たとえばインストーラプログラムおよび加速プログラム6120を含む実行可能ファイルである。他の実施態様では、加速プログラム6120は、クライアント6205のオペレーティングシステムに加速プログラム6120を登録およびインストールするのに必要なファイルなどの複数のファイル、たとえばインストールパッケージまたはインストールダウンロードを含み得る。たとえば、加速プログラム6120は、.infファイルおよび.sysファイルを含み得る。.infファイルは、Microsoft Windows(登録商標)ファミリのオペレーティングシステム内Windows(登録商標)セットアップに、デバイスをセットアップするために必要な情報、たとえばデバイスに有効な論理構成、およびデバイスに関連するドライバファイルの名前のリストを提供する。実施態様によっては、.infファイルはautorun.infファイルを含み、このファイルは、どの実行可能ファイルを開始するのかを、さらに実行可能ファイルの開始に関連する任意の構成情報をオペレーティングシステムに知らせるか、あるいは通知する構成ファイルである。一実施態様では、.sysファイルは、加速プログラム6120またはその一部分を含むドライバファイルである。
ステップ6320で、クライアント6205は、加速プログラム6120を自動的にインストールする。加速プログラム6120は、クライアント6205のオペレーティングシステムに従って、任意の適切な方法でインストールし得る。一実施態様では、クライアント6205は、加速プログラム6120を受信すると、加速プログラム6120をインストールする。実施態様によっては、クライアント6205は、加速プログラム6120のサイレントインストールを自動的に実施または実行する。一実施態様では、サイレントインストールは、クライアント6205のユーザまたはアプリケーションに対して透過的に実施される。他の実施態様では、加速プログラム6120のサイレントインストールは、クライアント6205のリブートまたは再始動を必要としない。別の実施態様では、サイレントインストールは、インストールを開始および/または完了するために、ユーザによる相互作用を必要としない。他の実施態様では、加速プログラム120のサイレントインストールは、クライアント6205が実行されている時に、ネットワークスタック6210のネットワーク層、セッション層、および/またはアプリケーション層に対して透過的に行われる。実施態様によっては、加速プログラム6120は、クライアント6205によって実行される自己インストール型の実行可能ファイルである。他の実施態様では、クライアント6205は、加速プログラム6120をインストールするために、プラグアンドプレイマネジャーを使用する。一実施態様では、クライアント6205は、加速プログラム6120を受信してインストールするインストールマネジャーを含む。別の実施態様では、アプライアンス1250によって伝送される加速プログラム6120は、加速プログラム6120をインストールするインストールプログラムも含む。
別の実施態様では、加速プログラム6120は、サイレントインストールを介して自動的にインストールされる。一実施態様では、サイレントインストールは、ユーザが仲介しないインストールを含む。別の実施態様では、サイレントインストールは、インストールを開始および/または完了するために、ユーザによる相互作用を必要としないか、あるいは相互作用を有するインストールを含む。実施態様によっては、インストールは、インストールプロセスが、インストールの状況または進行に関する情報を表示しないという点でサイレントである。一実施態様では、インストールは、ユーザに対して透過的であるという点でサイレントである。他の実施態様では、インストールは、加速プログラム6120のインストールが、クライアント6205のリブートまたは再始動を必要としないためにサイレントである。別の実施態様では、インストールは、クライアント6205の動作時にシームレスに、クライアントの動作を中断または途絶せずに行われるという点でサイレントである。したがって、加速プログラム6120は、リブートを必要とせず、インストールに関連するユーザに対して何らかの情報を表示しないことによって、クライアント6205のユーザまたはアプリケーションに対して透過的な方法でインストールすることができる。
クライアント6205のリブートまたは再始動を防止または回避するために、実施態様によっては、クライアント6205、たとえばクライアント6205のオペレーティングシステムは、プラグアンドプレーデバイス用の加速プログラム6120の一実施態様のネットワークドライバなどのドライバを、オペレーティングシステムが実行している時にインストールし、構成するためのプラグアンドプレイマネジャーを有する。一実施態様では、プラグアンドプレイマネジャーは、加速プログラム6120のインストールパッケージの構成に基づいてクライアント6205をリブートまたは再始動するように指示されない。別の実施態様では、.infファイルは、コンピュータをリブートまたは再始動するためのインストラクションを含まない。一実施態様では、加速プログラム6120は、共用されている使用中のダイナミックリンクライブラリ(DLL)を置き換える代わりに、並列構成要素としてインプリメントすることができる。加速プログラム6120のネットワークドライバのための他の特定の実施態様では、加速プログラム6120は、INetCfgPnpReconfigCallbackネットワークドライバAPIを使用し、その結果、ユーザは、ドライバ内で構成の変更を生じさせるために、オペレーティングシステムをリブートする必要はないであろう。さらに、加速プログラム6120は、INetCfgComponentControlのApplyPnpChangesメソッドをインプリメントする範囲内でSendPnpReconfig APIをコールし、オブジェクトを所有するネットワーク構成要素のドライバに構成情報を送信する通知オブジェクトを有することができる。SendPnpReconfig APIは、データをドライバに送信するためのメカニズムを通知オブジェクトに提供し、実施態様によっては、ユーザが、構成の変更が生じる前に、オペレーティングシステムをリブートする必要を回避するために使用される。
ステップ6325では、加速プログラム6120を自動的に、サイレントに、透過的に、あるいは他の方法でインストールすることを完了した後、加速プログラム120には、クライアント6205上で自動的に実行される。実施態様によっては、加速プログラム6120をインストールするインストールプログラムは、加速プログラム6120を始動または実行する。実施態様によっては、加速プログラム6120用のインストーラプログラムは、加速プログラム120をクライアント6205のメモリ内にロードするか、または実行するためのシステムコールを行う。一実施態様では、加速プログラム6120のインストールは、加速プログラム6120を始動させるためのインストラクション、コマンド、または指令を含む。一実施態様では、加速プログラム6120は、加速プログラム6120を自動的に実行するようにクライアント6205に通知するautorun.infファイルなどの自動実行構成を含む。他の実施態様では、クライアント6205のプラグアンドプレイマネジャーまたはオペレーティングシステムは、インストール後に加速プログラム6120を自動的に実行する。一実施態様では、加速プログラム6120は、クライアント6205によって共用されるサービス、プロセス、スレッド、またはタスクを含む。実施態様によっては、加速プログラム6120は、自動的に始動するように構成されるオペレーティングシステムのサービスである。一実施態様では、加速プログラム6120は、クライアントのオペレーティングシステムのネットワークスタックのメモリ内にロードされるネットワークドライバを含む。
別の実施態様では、加速プログラム6120は、クライアント6205のメモリ内にロードされるネットワークドライバを含む。実施態様によっては、加速プログラム6120は、ネットワークスタック6210に割り当てられるメモリ内にロードされる。場合によっては、加速プログラム6120は、加速プログラム6120が、ネットワークスタックのプロトコル層、たとえばトランスポート層にアクセスすることを可能にするメモリ領域または空間にロードされ、実行される。他の場合には、加速プログラムは、加速プログラム6120がカーネルレベルデータ構造6225にアクセスすることを可能にするメモリ内にロードされ、実行される。他の実施態様では、加速プログラム6120は、アプリケーション6220a〜6220nのメモリ内にロードされる。別の実施態様では、加速プログラム6120は、それ自体のメモリ空間またはコンテンツ内で単独で実行される。一実施態様では、加速プログラム6120は、アプリケーション6220a〜6220nのメモリ空間またはコンテキスト内で実行される。実施態様によっては、加速プログラム6120は、ユーザモードメモリ、つまりユーザモード6203に割り当てられるメモリ内にロードされ、他の実施態様では、加速プログラム6120は、カーネルモードメモリ、つまりカーネルモード6202に割り当てられるメモリにロードされる。
実施態様によっては、加速プログラム6120は、メモリ内にロードされるか、および/またはクライアントのユーザ、クライアント6205のアプリケーション、アプライアンス1250、またはサーバ30に対して透過的に実行される。他の実施態様では、加速プログラム6120は、ネットワークスタック6210のトランスポート層とインターフェースするように実行され、トランスポート層上の任意のプロトコル層、たとえばセッションまたはアプリケーション層、およびトランスポート層下の任意のプロトコル層、たとえばネットワーク層に対して透過的に実行される。一実施態様では、加速プログラム6120は、クライアント6205、またはトランスポート層自体の任意のトランスポート層接続に対して透過的に実行される。
ステップ6330では、ロードされ、始動され、あるいは実行されている加速プログラム6120は、1)マルチプロトコル圧縮6238、2)トランスポート制御プロトコルプーリング6224、3)トランスポート制御プロトコル多重化6226、4)トランスポート制御プロトコルバッファリング6228、および5)キャッシュマネジャー6232によって提供される任意の技術など、加速プログラム6120の複数の加速技術の何れかを実行する加速プログラム6120は、クライアント6205とサーバ30との間の通信の任意の暗号化および/または解読も実行する。一実施態様では、加速プログラム6120は、マルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム6120は、トランスポート制御プロトコルプーリングを実行し、さらに他の実施態様では、加速プログラム6120は、プールされたトランスポート層接続を介して多重化を実行する。一実施態様では、加速プログラム6120は伝達制御プロトコルのバッファリングを実行する。実施態様によっては、加速プログラム6120はキャッシングを実行する。他の実施態様では、加速プログラム6120はキャッシングおよび圧縮を実行する。一実施態様では、加速プログラム6120は、トランスポート層プーリングおよび多重化を含むキャッシングを実行する。別の実施態様では、加速プログラム6120は、トランスポート層プーリングおよび多重化を含むマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム6120は、バッファリングを含む、さらに他の実施態様では、TCPプーリングおよび多重化を含むキャッシングおよび/または圧縮を実行する。
したがって、クライアント側の加速プログラム6120は、アプライアンス1250によって動的に提供され、サイレントな方法で、あるいはクライアント6205のユーザまたはアプリケーションに対して透過的にクライアント6205上に自動的にインストールされ、実行され、クライアント6205およびサーバ30間の通信に対して、1つまたは複数のクライアント側加速技術を実行する。加速プログラム6120は、ネットワークスタックの任意のプロトコル層に対して透過的に、およびクライアントのユーザ、クライアントのアプリケーション、アプライアンス、またはサーバに対して透過的にこれらの加速技術を実行し得る。
もう1つの態様では、アプライアンス1250は、クライアント6205によってアクセスされるアプリケーション要求が加速可能かどうかを決定し、アプリケーションが加速可能である場合、加速プログラム6120をクライアント6205に提供し得る。図41Bを参照すると、ある方法の別の実施態様が示されている。この方法は、接続または通信セッションを確立する要求、およびサーバ上のアプリケーションにアクセスする要求に対して実施し得る。方法6350を簡潔に説明すると、ステップ6355で、アプライアンス1250は、サーバ30上のアプリケーション6220a〜6220nに対するアクセスを要求するクライアント6205からの要求を傍受する。ステップ6260で、アプライアンス1250は、アプリケーション6220が加速可能かどうかを決定する。ステップ6365で、アプリケーション6220が加速できない場合、アプリケーションは、ステップ6267で要求をサーバに回送する。ステップ6365で、アプリケーション6220が加速可能である場合、アプライアンス1250は、加速プログラム6120がクライアント6205上にインストールされるか、あるいは以前にクライアント6205に伝送されたかどうかを決定する。加速プログラム6120が、まだクライアント6205に提供されていない場合、方法6350は、上記の方法6300のステップ6315で、実行可能プログラムを伝送、インストール、および実行することを続ける。加速プログラム6120がインストールされ、クライアント6205を実行している場合、アプライアンス1250は、ステップ6375で、クライアント6205上の加速プログラム6120にメッセージを送信し、アプリケーション6220を加速する。方法6350のステップ6330で、加速プログラム6120は、アプリケーション6220に対する通信に複数の加速技術を実行し、このような通信を暗号化および/または解読し得る。
さらに詳細には、ステップ6355で、アプライアンス1250は、任意の適切な手段および機構によって、クライアント6205からの要求を傍受し、サーバ30によって提供されるアプリケーションにアクセスし得る。一実施態様では、アプライアンス1250のパケットエンジン6240は、クライアント6205からの通信を傍受する。他の実施態様では、アプライアンス1250は、クライアント6205、たとえば加速プログラム6120との第1トランスポート層接続、およびクライアント6205に代わってサーバ6205との第2トランスポート層接続を確立する。したがって、アプライアンス1250は、サーバ30に伝送されるクライアントの何らかの通信を受信、傍受、あるいは取得し得る。実施態様によっては、アプライアンス1250は、クライアント6205に対する要求を傍受して、サーバ30との確立されたトランスポート層接続を介して、アプリケーション6220にアクセスする。他の実施態様では、アプライアンス6205は、要求を傍受して、トランスポート層接続上の任意のプロトコル層、たとえばHTTPのアプリケーション層プロトコルを介して、通信セッションを確立する。一実施態様では、アプライアンス6205は、クライアント205からの要求を傍受し、ICAまたはRDPなどのリモートディスプレープロトコルを介して、サーバ30からのアプリケーション6220を表示し、提供する。
ステップ6360で、アプライアンス1250は、クライアント6205によって要求されたアプリケーション6220が加速可能かどうかを決定する。実施態様によっては、アプライアンス1250は、アプリケーションを名前、タイプ、またはカテゴリで識別するアプリケーション識別子を傍受されたクライアント要求から識別、抽出、あるいは処理する。一実施態様では、アプリケーション加速判定機構6275は、アプリケーション6220が加速可能かどうかを決定するために、アプライアンス1250によって使用される。実施態様によっては、アプリケーション加速判定機構6275は、データベース、ルックアップテーブル、あるいはメモリまたは記憶装置内のその他の構造化ソース、たとえばデータ構造またはオブジェクト内で問い合わせまたはルックアップを実行し、アプリケーション6220が加速可能かどうかを決定する。別の実施態様では、アプライアンス1250は、サーバ30に対する要求などの通信を送信し、アプリケーション6220が加速可能かどうかを決定する。
他の実施態様では、アプライアンス1250は、アプリケーション6220が以前に加速されたかどうか、その加速が、アプリケーション6220の性能および動作を改善したかどうかを決定するための性能ログまたは履歴を有する。したがって、アプライアンス1250は、このような加速が、アプリケーション6220の性能または動作に対する改善の予め決められた閾値に適合する場合、アプリケーション6220を加速可能であると決定し得る。さらに別の実施態様ではアプライアンス1250は、ネットワーク6204、クライアント6205、またはサーバ30の現在の動作および性能に基づく発見的な規則を提供する。一実施態様では、アプリケーション6220は、クライアント6205が、一定の性能および動作特性、または能力、たとえば一定速度のプロセッサ、または最低量のメモリを有する場合、加速可能であると決定され得る。実施態様によっては、アプリケーション6220は、構成されたポリシーまたは規則に基づいて、たとえばアプライアンス1250のポリシーマネジャー内で加速可能であると決定され得る。たとえば、リモートユーザと、特定のタイプのアプリケーション220および/またはサーバ30にアクセスする特定タイプのクライアント6205との間で通信されるアプリケーション6220は加速され得る。他の実施態様では、アプリケーション6220は、ユーザまたはクライアント6205の認証および承認に基づいて、加速可能であると決定され得る。さらに別の実施態様では、アプリケーション6220は、加速が望ましくないと決定され得る。たとえば、このアプリケーション6220は、頻繁には使用されないタイプである。
ステップ6365では、アプリケーション6220は、加速することはできないと決定されるか、あるいはクライアント6205上のアプリケーション6220に加速技術を適用しないことがが望ましい場合、アプライアンス1250は、ステップ6368で、傍受されたクライアント要求をサーバ30に回送し、加速プログラム6120をクライアント6205に伝送または提供しない。一実施態様では、アプライアンス1250は、アプライアンス6220のアプライアンスに基づく加速を実行または提供し得る。他の実施態様では、アプライアンス1250は、アプライアンス1250上のアプリケーション6220の加速を実行しない。さらに別の実施態様では、アプライアンス1250が、アプリケーション6220が加速できないか、あるいは加速することが望ましくないと決定する場合、アプライアンス1250は、アプリケーション6220に対してある加速技術は実行し、他の加速技術は実行しないことができる。
ステップ6365では、アプリケーション6220が、加速可能であるか、あるいはクライアント6205上のアプリケーションに加速技術を適用することが望ましいと決定する場合、アプライアンス1250は、加速プログラム6120がクライアント6205に提供されたかどうかを決定する。一実施態様では、アプライアンス1250は、加速プログラム6120がクライアント6205上にインストールされたかどうか、あるいはクライアント6205上で実行されているかどうかを決定する。実施態様によっては、アプライアンス1250は、クライアント6205上の加速プログラム6120に通信を送信して、加速プログラム6120がクライアント6205上で実行されているかどうかを決定する。他の実施態様では、アプライアンス1250は、ログファイルまたは履歴ファイルを検査して、加速プログラム6120がクライアント6205に伝送されたかどうかを決定する。別の実施態様では、アプライアンス1250は、アプライアンス1250またはクライアント6205の健全性監視プログラム6216に問い合わせて、加速プログラム6120がクライアント6205上で実行されているかどうかを決定する。
アプライアンス1250が、加速プログラム6120がクライアント6205上に伝送され、インストールされ、および/または実行されたと決定する場合、アプライアンス1250は、図41Aに関連して説明する方法6300のステップに従って、加速プログラム6120を提供するであろう。たとえば、アプライアンス1250は、加速プログラム6120をクライアント6205に伝送し、クライアント205は、受信すると自動的にインストールおよび実行する。一実施態様では、方法6300の実施態様の適切なステップを実行した後、アプライアンス1250は、ステップ6275で、メッセージを加速プログラムに伝達し、1つまたは複数の加速技術をアプリケーション6220に適用する。他の実施態様では、加速プログラム6120が既にインストールされ、実行されている場合、ステップ6375で、アプライアンス1250は、メッセージを加速プログラム6120に伝達し、1つまたは複数の加速技術をアプリケーション6220に適用する。
実施態様によっては、加速プログラム6120は、識別されたアプリケーション6120に加速プログラム6120による使用が可能な任意の加速技術を実行する。他の実施態様では、アプライアンス1250は、どの加速技術をアプリケーション6220に対して実行するべきかを加速プログラム6120に指示する。一実施態様では、加速プログラム6120は、セッションごとに、望ましい加速技術をアプリケーション6120に適用し得る。つまり、アプライアンス1250から加速プログラム6120に対するメッセージは、単に、アプリケーション6220のこのインスタンスまたはセッションに加速技術を実行することを加速プログラム6120に通知する。他の実施態様では、加速プログラム6120が、アプライアンス1250からメッセージを受信して、識別されたアプリケーション6220に加速技術を適用すると、加速プログラム6120は、アプリケーション6220の任意のインスタンスまたはセッションに加速技術を適用するか、あるいはクライアント6205がリブートされるか、または再始動されるか、あるいはアプライアンス6205がリユーザされるか、または再始動されるまで、加速技術を適用する。
一実施態様では、ステップ6375におけるアプライアンス1250からのメッセージは、アプリケーションに特有ではない。たとえば、このメッセージは、加速プログラム6120に対し、1つまたは複数の加速技術をクライアント6205の任意のアプリケーションに実行することを通知する。実施態様によっては、クライアント6205に送信されるメッセージは、加速プログラム6120に対し、任意の1つまたは複数の加速技術をアプリケーション6220に、あるいはすべてのアプリケーション6220a〜6220nに使用することを停止するように通知する。別の実施態様では、アプライアンス1250は、特定のアプリケーション6220を無視するメッセージを加速プログラム6120に伝達する。さらに別の実施態様ではアプライアンス1250は、加速技術の更新、または新しい加速技術の適用など、構成データまたは情報を加速プログラム6120に提供するメッセージを加速プログラム6120に伝達する。
ステップ6330では、加速プログラム6120は、加速プログラム6120の任意の複数の加速技術、たとえば1)マルチプロトコル圧縮6238、2)トランスポート制御プロトコルプーリング6224、3)トランスポート制御プロトコル多重化6226、4)トランスポート制御プロトコルバッファリング6228、および5)キャッシュマネジャー6232を介したキャッシングによって提供される任意の技術をアプリケーション6220に実行する。また、加速プログラム6120は、クライアント6205およびサーバ30間のアプリケーション6220の通信の任意の暗号化および/または解読を実行し得る。一実施態様では、加速プログラム6120は、アプリケーション関連のデータのマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム6120は、トランスポート制御プロトコルのプーリングを実行し、さらに他の実施態様では、加速プログラム6120は、プールされたトランスポート層接続を介して多重化を実行する。一実施態様では、加速プログラム6120は、伝達制御プロトコルのバッファリングを実行する。実施態様によっては、加速プログラム6120はキャッシングを実行する。他の実施態様では、加速プログラム6120は、キャッシングおよび圧縮を実行する。一実施態様では、加速プログラム6120は、トランスポート層プーリングを含むキャッシングを実行し、さらに他の実施態様では、さらに多重化を実行する。別の実施態様では、加速プログラム6120は、TCPバッファリングを含むマルチプロトコル圧縮を実行し、さらに他の実施態様ではトランスポート層プーリング、さらに他の実施態様では多重化も含むマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム6120は、圧縮を含むキャッシングを実行し、さらに他の実施態様ではTCPプーリング、さらに他の実施態様では多重化を含むキャッシングを実行する。
したがって、アプライアンス1250は、アプリケーションを加速するかどうか、あるいはアプリケーションが加速可能かどうかを動的に決定して、クライアント側の加速プログラム6120に対し、クライアント6205上で、任意の1つまたは複数の加速技術をアプリケーション6220に実行することを伝達する。さらに、実施態様によっては、複数の加速プログラム6120は、アプライアンスによってクライアント6205に動的に供給され、クライアント6205によって自動的にインストールされ、実行され得る。たとえば、加速プログラムは、サーバ6205との各々の接続、またはアプリケーション6220との各々の通信セッションに関する技術および方法に従って提供され得る。したがって、クライアント6205は、各々のサーバ630および各々のアプリケーション6220a〜6220nの加速を処理し、実行するための複数の加速プログラム6120を自動的にインストールし、実行し得る。
図41Cを参照すると、複数の加速技術を統合された方法で実行するための方法6380の一実施態様が示されている。簡潔に説明すると、ステップ6280で、加速プログラム6120は、トランスポート層において、クライアント6205およびサーバ30間の通信のネットワークパケットをトランスポート層接続を介して傍受する。ステップ6390で、加速プログラム6120は、トランスポート層において、カーネルレベルデータ構造を介して、たとえばAPIを介してクライアント6205のネットワークスタック6210に提供されるデータ構造を介してネットワークパケットにアクセスする。ステップ6395で、加速プログラム6120は、加速プログラム6120のインターフェースポイントまたは実行個所にてカーネルレベルデータ構造を使用して、統合的な方法で複数の加速技術を実行する。
さらに詳細には、ステップ6385で、加速プログラム6120は、任意の適切な手段および機構により、トランスポート層接続を介してクライアント6205およびサーバ30間の通信のネットワークパケットを傍受する。一実施態様では、加速プログラム6120は、クライアントによる要求のネットワークパケット、またはこの要求に関連するネットワークパケット、または要求に対する応答を傍受し、クライアント6205およびサーバ30間のトランスポート層接続を確立する。別の実施態様では、加速プログラム6120は、要求のネットワークパケット、または要求に関連するネットワークパケット、または要求に対する応答を傍受し、クライアント6205およびサーバ30間のトランスポート層接続を介して、アプリケーション6220にアクセスするか、またはアプリケーション6220を使用する。一実施態様では、加速プログラム6120は、トランスポートプロトコル層において、トランスポートドライバインターフェースを介して、あるいはネットワークスタック6210のトランスポートプロトコル層にインターフェースするネットワークドライバを介してネットワークパケットを傍受する。別の実施態様では、加速プログラム6120は、トランスポートプロトコル層、またはネットワークスタック6210のその他の任意のプロトコル層において、ネットワークドライバインターフェース規約(NDIS)ドライバ、または小型ポートドライバ、または小型フィルタドライバを介してネットワークパケットを傍受する。実施態様によっては、加速プログラム120は、トランスポート層において、フッキングまたはフィルタリング機構を介してネットワークパケットを傍受する。
ステップ6390で、加速プログラム6120は、カーネルレベルデータ構造6225を介して、トランスポート層で傍受されたネットワークパケットの情報およびデータにアクセスするか、あるいは情報およびデータを取得する。カーネルレベルデータ構造6225を使用することによって、加速プログラム6120は、ペイロード(単数または複数)上の情報およびデータ、またはネットワークパケットによってトランスポート層において搬送または伝達される1つまたは複数のプロトコルを取得することができる。実施態様によっては、ネットワークパケットを表すカーネルレベルデータ構造をトランスポート層における、および/またはトランスポート層上のネットワークスタック層で使用すると、加速プログラム6120が、トランスポート層において、トランスポート層のネットワークパケットによって搬送されるプロトコル層に対して複数の加速技術を実行するか、または作動させることができる。一実施態様では、単一カーネルレベルデータ構造6225を使用して、コンテキストの切換えとともに、コピーおよびメモリの割当てが、ネットワークスタック6210の様々なプロトコル層における複数のデータ構造を使用するのを防ぐか、あるいは回避する。一実施態様では、加速プログラム6120は、カーネルレベルデータ構造6225を第2データ構造にコピーし、第2データ構造は、別のカーネルレベルデータ構造またはユーザレベルデータ構造を含み得る。
ステップ6395で、加速プログラム6120は、プログラム6210、またはプログラム6210の一連の実行可能なインストラクション、または1つの実行個所における1つのインターフェースポイントまたはロケーションで複数の加速技術を実施、実行、または作動させる。加速プログラム6120は、加速プログラム6120の複数の加速技術の何れか、たとえば1)マルチプロトコル圧縮6238、2)トランスポート制御プロトコルプーリング6224、3)トランスポート制御プロトコル多重化6226、4)トランスポート制御プロトコルバッファリング6228、および5)キャッシュマネジャー6232を介したキャッシングによって提供される任意の技術などを実行する。加速プログラム6120は、加速プログラム6120の加速技術を実行する際の同じ位置で、クライアント6205およびサーバ30間のアプリケーション6220の通信の任意の暗号化および/または解読も実行する。
一実施態様では、加速プログラム6120は、一連の実行可能なインストラクション、たとえばファンクションコール、あるいはある場所またはロケーションにおいて、任意の所望の複数の加速技術を互いに後で実行する。たとえば、加速プログラム6120は、カーネルレベルデータ構造を介して、傍受されたネットワークパケットを取得し、次に、加速技術の論理、機能、規則、または動作を表すインストラクションを互いに後で実行する。したがって、ネットワークパケットの情報およびデータは、カーネルレベルデータ構造6225を介していったん抽出または取得され、加速技術を表す加速プログラム6120の任意のインストラクションに対する入力、パラメータ、引数、および条件として使用される。ネットワークパケットは、より高レベルのプロトコルデータおよび情報を伝達するが、いくつかの実施態様の加速プログラム6120は、実行時のある位置およびある時点で、このネットワークパケット、およびより高レベルのプロトコルデータおよび情報を処理する。さらに、加速プログラム6120は、キャッシュマネジャー6232に記憶されたデータの圧縮、またはキャッシュから検索されたデータの圧縮/展開など、統合された方法の任意の所望の順序で複数の加速技術の各々を実行し得る。
一実施態様では、加速プログラム6120は、マルチプロトコル圧縮およびキャッシングを互いに後で実行する。別の実施態様では、加速プログラム6120は、プールされたトランスポート層接続を介して、トランスポート制御プロトコルプーリングおよび多重化に関連する動作を互いに後で実行する。一実施態様では、加速プログラム6120は、圧縮およびキャッシング、またはTCPプーリングおよび/または多重化の後でトランスポート制御プロトコルのバッファリングを実行する。実施態様によっては、加速プログラム6120はキャッシングを実行する。一実施態様では、加速プログラム6120は、トランスポート層プーリングおよび多重化とともに後でキャッシングを実行する。別の実施態様では、加速プログラム6120は、トランスポート層プーリングおよび多重化とともに後でマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム6120は、TCPバッファリングとともに後でキャッシングおよび/または圧縮を実行し、さらに他の実施態様では、TCPプーリングおよび多重化とともに後で実行する。
加速プログラムは、一般に、加速技術を後で実行すると記載されているが、後続の実行は、加速に関連しないが、各々の加速技術の間に統合され、実行されるその他の論理、機能、および動作も含み得る。加速プログラムは、加速技術に対する実行可能なインストラクションのような統合により、さらに動作および性能効率が得られ、その他の何らかの動作または機能は、実行可能プログラム内の単一のインターフェースポイントおよび実行個所で実行される。さらに、実行されるプロトコル層、あるいはトランスポートプロトコル層の上のプロトコル層に対する加速技術は、一度に、および/またはトランスポート層のあるロケーションで処理される。したがって、ネットワークパケットが横断し、これらの上位レベルのネットワークスタック6210、またはネットワークスタック6210内の後のある位置で処理されるため、これらの上位レベルのプロトコルの加速技術は再度適用する必要がない。
他の態様では、第1プログラム6222および加速プログラム6120(この実施態様では、第2プログラムとも呼ばれる)を使用することができる。一実施態様では、第1プログラム6222は、第2プログラム6120とともに、たとえば、クライアント側の加速技術を適用し得るアプライアンス1250を介して、サーバ30との仮想プライベートネットワーク接続を促進し、確立するために使用することができる。別の実施態様では、第1プログラム6222は、第2プログラム、または加速プログラム6120をインストールし、実行するために使用される。
次に、図42Aを参照すると、この態様を実施する方法6400の一実施態様が示されている。簡潔に説明すると、ステップ6402で、クライアント6205は、アプライアンス6205との通信セッションにログインし、セッションを確立する。ステップ6404で、アプライアンス1250は、第1プログラム6222をクライアント6205に送信する。ステップ6406で、クライアント6205は、第1プログラム6222をインストールして実行し、その結果、加速プログラム6120、つまり第2プログラムをインストールして実行する。ステップ6407で、クライアント6205は、確立された暗号化データ通信セッションを介して、プライベートネットワーク上のリソースと通信し、このリソースにアクセスする。ステップ6410で、クライアント6205はアプライアンス1250からログアウトし、アプライアンス1250との通信セッションを終了する。
方法6400のステップ6402で、クライアント6205は、ログイン手順を実行し、ネットワーク6204を介して、アプライアンス1250との暗号化データ通信セッションを確立する。一実施態様では、暗号化データ通信セッションは、クライアント6205からのトラフィックを、プライベートデータ通信ネットワーク内のアプライアンス1250の後ろに存在する任意のサーバ30にブリッジするためのトンネルとして使用される。一実施態様では、クライアント6205は、Microsoft Internet Explorer(登録商標)またはNetscape Navigator(登録商標)などのウェブブラウザを使用して、セキュアソケットレイヤー(SSL)またはその他の暗号化法、たとえばIPSec、およびトランスポート層セキュリティ(TLS)を使用するアプライアンス1250とのデータ通信セッションにログインし、セッションを確立する。別の実施態様では、ハイパーテキスト転送プロトコルセキュアソケットレイヤー(HTTPS)などのプロトコルは、暗号化データ通信セッションを開始するために使用し得る。
ステップ6404では、暗号化データ通信セッションのログインおよび確立に応じて、アプライアンス1250は、ネットワーク6204を通して第1プログラムをクライアント6205に送信する。第1プログラムは、暗号化データ通信セッションを通した通信のトンネルエンドポイントとして作用するように設計および構築されるか、あるいは構成される。一実施態様では、第1プログラムは、クライアント6204のブラウザによって自動的にインストールされ、実行されるプラグインアプリケーションを含む。たとえば、第1プログラムは、Microsoft Internet Explorer(登録商標)ウェブブラウザによって実行されるプラグインとして提供されるActiveXコントロールを含み得る。別の実施態様では、第1プログラムは、Netscape Navigator(登録商標)ウェブブラウザ、またはネットワーク環境全体で動作する別の制御またはプログラミング構成要素によって実行されるプラグインとして提供されるJava(登録商標)アプレットを含み得る。
ステップ406では、クライアント6205は、第1プログラム6222をインストールして実行し、第1プログラムの実行は、第2プログラムをクライアント6205にインストールすることを含む。一実施態様では、第1プログラム6222は、たとえば、方法6300および図41Aに関連して説明された技術の何れかを使用して、自動的にインストールされて実行され得る。実施態様によっては、第1プログラム6222は、第2プログラム、または加速プログラム6120をアプライアンス1250から取得、ダウンロード、または受信する。別の実施態様では、第1プログラム6222は、たとえばサイレントインストール、またはクライアント6205のユーザ、クライアント6205のアプリケーション6220、アプライアンス1250、またはサーバ30に対して透過的なインストールによって、第2プログラムを自動的にインストールして実行するための、加速プログラム6120などの第2プログラム用のインストーラまたはインストールマネジャーを含む。
一実施態様では、第2プログラムは、一部には、ネットワーク6204上のリソースに向けられる、クライアント6205上で実行されているアプリケーション6220からの通信を傍受し、傍受した通信を第1プログラム6222に提供し、暗号化データ通信セッションを介してアプライアンス1250に送信するように構成される。また、第2プログラムは、第2プログラムは、イントラネットネットワークの名前解決サービス、および任意に分割ネットワークトラフィックを提供するように構成してもよい。トラフィックを分割することによって、一実施態様は、どのトラフィックが、第1プログラム6222のSSLトンネルまたは暗号化トンネルに向けられるか、また、どのトラフィックが、クライアント6205の通常の、決まりきった、あるいは一般的な動作に基づいて、ネットワークスタック6210のトランスポート層による処理を継続することを許可されているか、継続することが可能かを決定することもできる。一実施態様では、第2プログラムは、「フック」としてクライアント6205のオペレーティングシステム内に挿入される動的傍受装置(たとえば、フィルタデバイスドライバ)を備える。たとえば、第2プログラムは、クライアントオペレーティングシステムのトランスポート層スタック、たとえばMicrosoft Windows(登録商標)(登録商標)オペレーティングシステムのトランスポート層スタックに取り付けられるフィルタデバイスドライバを備え得る。
ステップ6408では、第1および第2プログラムがインストールされると、クライアント6205上で実行されているアプリケーションは、確立された暗号化データ通信セッションを介して、プライベートデータ通信ネットワーク6204上のアプリケーションおよびデータなどのリソースと通信し、これらにアクセスし得る。この通信が行われる方法については、図42Bに関して以下でさらに詳細に説明する。一実施態様では、上記の第1プログラムおよび第2プログラムは、加速プログラム6120などのクライアント6205によって自動的にインストールされ、実行される単一制御またはプログラミング構成要素によって実行される。仮想プライベートネットワーク接続および通信を提供するほか、加速プログラム6120などの第1プログラム6222および/または第2プログラムは、仮想プライベートネットワーク接続、たとえばアプライアンス1250に対する暗号化トンネルまたはブリッジを介して、クライアントの通信に関して本明細書に記載する任意の加速技術を実行し得る。
ステップ6410で、クライアント6205は、ネットワーク6204から切断するためのログアウト手順を実行し、この手順は、アプライアンス1250との暗号化データ通信セッションを終了する。一実施態様では、第1プログラム6222は、ログアウト時に、クライアント6205のオペレーティングシステムに対して行われた修正を自動的に除去し、オペレーティングシステムを第1プログラム6222および/または第2プログラムのインストール以前の状態に戻す。一実施態様では、第1プログラム6222および/または第2プログラムは、第1および第2プログラムをクライアント6205のオペレーティングシステムから、あるいはクライアント6205の継続動作に対して非侵入的な方法で、クライアント6205上のさらに他の動作から除去するために、アンインストーラをさらに含むか、あるいはインストラクションをアンインストールする。さらに別の実施態様では第1プログラム6222および/または加速プログラム6120は、提供される任意の接続またはセッション時に、クライアント6205のアプリケーションによって使用される任意のファイル、たとえば一時ファイルまたはクッキーを除去する。
図42Bは、クライアント6205が、プライベートデータ通信ネットワーク6204上のリソースと通信し、アクセスする方法6450の一実施態様を示す。たとえば、方法6450は、方法6400のステップ6408を実施し得る方法を表す。簡潔に説明すると、ステップ6452で、クライアント6205は、第1プログラムおよび/または第2プログラムを介して、新たな接続を行うか、あるいはTCP/IPドメイン名解決など、ドメイン名を解決する。ステップ6454で、第2プログラムが実行される。ステップ6456で、第2プログラムは、プライベートネットワークに向けられるクライアント6205からの通信を傍受し、通信を第1プログラム6222に再経路指定するか、または送信する。ステップ6458で、第1プログラム6222は、接続を終了またはプロキシし、確立された暗号化通信セッションを介して提供するために、ペイロードを分割し、ペイロードをカプセル化する。ステップ6460で、第1プログラム6222は、傍受された通信を、パブリックネットワークを通して、予め確立された暗号化通信セッションを介してプライベートネットワーク内のアプライアンス1250に送信する。ステップ6462で、アプライアンス1250は、ステップ6462で、アプライアンス1250は、第1プログラムから受信した通信を解読し、解読した通信を適切な宛先リソース、たとえばサーバ30に回送する。ステップ6464で、宛先リソースは、解読した通信を処理し、ステップ6464で、宛先リソースは、応答通信がある場合、応答通信をアプライアンス1250に送信する。ステップ6468で、アプライアンス1250は、応答通信を暗号化し、暗号化された通信を、パブリックネットワークを通して、予め確立された暗号化通信セッションを介してクライアント6205の第1プログラム6222に送信する。ステップ6470で、第1プログラム6222は、応答通信を解読し、第2プログラムを介して、解読した通信を適切なクライアントアプリケーションに回送する。
ステップ6452で、クライアント6205のアプリケーション6220は、クライアント6205のネットワークスタック6210のトランスポートプロトコル層を介して、新たな接続を行うか、あるいはドメイン名を解決する。一実施態様では、アプリケーション6220は、クライアント6205およびサーバ30間、あるいはクライアント6205およびアプライアンス1250間のトランスポート層接続を確立することを要求し得る。別の実施態様では、アプリケーション220またはクライアント6205は、サーバ30によって提供されるアプリケーション6220に対するアクセスを要求し得る。たとえば、サーバ30は、サーバ30上で実行しているアプリケーション6220の出力を表現するICAまたはRDPのリモートディスプレープロトコルを伝送することによって、サーバベースコンピューティングまたはシンクライアントコンピューティングを提供し得る。別の実施態様では、クライアント6205は、サーバ30のリソース、たとえばファイルまたはディレクトリ、あるいはeメールサービスに対するアクセスを要求し得る。実施態様によっては、クライアント6205は、パブリックネットワーク40上にあり、サーバ30はネットワーク40’上にある。他の実施態様では、クライアント6205およびサーバ30は、異なるプライベートネットワーク上に存在し得る。
ステップ6454で、第2プログラムは、1つまたは複数の機能を自動的に、あるいはトランスポート層の機能が開始する前に実行する。実施態様によっては、第2プログラムは、加速プログラム6120であるか、あるいは加速プログラム6120を含む。一実施態様では、第2プログラムは、ステップ6452のクライアント要求を傍受するか、あるいは受信する。実施態様によっては、クライアント6205のアプリケーション6220は、ネットワークスタック6210に対するAPIコールを行い、これは、第2プログラムによって傍受される。任意のAPIコールが、ネットワークスタック6210のトランスポート層によって処理される前に、第2プログラムは、ネットワークスタック6210内にフックされるか、あるいはネットワークスタック6210にインターフェースされ、通信が伝送または処理され、トランスポート層接続を介して伝達される前に、論理、規則、機能、または動作を実行する。
ステップ6456で、第2プログラムは、たとえば、クライアント6205上のアプリケーション6220a〜6220nによるクライアント205から、ネットワーク40’上のリソースに向けられる通信を傍受し、ネットワーク環境全体で動作するActiveXコントロールプラグイン、Java(登録商標)アプレット、またはその他の制御またはプログラミング構成要素を含む第1プログラム6222に通信を再経路指定する。第2プログラムは、傍受された通信を提供するネットワークパケットまたはパケットからの宛先情報にアクセスし、宛先情報を読み取るか、あるいは取得して、通信が、アプライアンス1250の後ろのプライベートネットワーク40’などのネットワークに向けられていると決定する。たとえば、第2プログラムは、ネットワークパケットからの宛先IPアドレスおよび/またはポートを抽出または解釈し得る。傍受された通信がネットワーク40’に向けられると、第2プログラムは、任意の適切なインターフェース手段および機構を介して、たとえばプロセス間通信インターフェースまたはAPIコールを介して、傍受された通信を第1プログラム6222に伝達する。一実施態様では、傍受された通信は、そのまま第1プログラム6222に送信されるか、他の実施態様では、傍受された通信は、第1プログラム6222に送信される前に、第2プログラムによって予め処理される。たとえば、第2プログラムは、傍受された通信からペイロードを除去し、ペイロードを第1プログラム6222に回送する。
ステップ6458で、各々の傍受された通信は、第1プログラム6222によって終了またはプロキシされ、第1プログラム6222は、確立された暗号化データ通信セッションを介して伝送するように、傍受された通信を準備する。一実施態様では、第1プログラム6222は、ペイロードを取り除き、ペイロードをカプセル化して、確立された暗号化データ通信セッションを介して提供する。別の実施態様では、第1プログラム6222は、第2プログラムから受信し、傍受した通信をカプセル化する。実施態様によっては、ペイロードはTCPペイロードであり、アプライアンス1250を介して、クライアント6205およびサーバ30間の新しいTCP接続内にカプセル化される。
ステップ6460で、第1プログラム6222は、傍受された通信を、ネットワーク6204を通して、予め確立された暗号化データ通信セッションを介してアプライアンス1250に送信する。実施態様によっては、第1プログラム6222は、傍受された通信を暗号化し、傍受されて暗号化された通信をアプライアンス1250に送信する。一実施態様では、暗号化は、SSLプロトコルに従って実施される。別の実施態様では、暗号化はTLSに基づく。任意のタイプおよび形式暗号化および/または解読は、第1プログラム6222または加速プログラム6120によって使用され得る。
ステップ6462で、アプライアンス1250は、第1プログラム6222によって送信される接続を終了するプロキシとして動作する。アプライアンス1250は、第1プログラム6222から受信した通信を解読し、アプライアンス1250が、ネットワーク40’上の宛先リソースと確立した第2接続を介して、解読した通信をネットワーク40’上の適切な宛先リソースに回送する。一実施態様では、解読は、SSLプロトコル、またはその他の適用可能な暗号化および解読プロトコルに従って実施される。実施態様によっては、アプライアンス1250は、宛先リソースに回送された通信上で、以下の1)マルチプロトコル圧縮6238’、2)トランスポート制御プロトコルプーリング6224、3)トランスポート制御プロトコル多重化6226、4)トランスポート制御プロトコルバッファリング6228’、および5)キャッシュマネジャー6232’を介したキャッシングにより提供される技術のうちの1つまたは複数など、1つまたは複数の加速技術を実行する。
ステップ6464で、宛先リソースは、解読された通信を処理する。一実施態様では、解読された通信は、通信または通信セッションを確立する要求である。別の実施態様では、解読された通信は、クライアント6205の代わりに、アプリケーション6220を始動するか、またはアプリケーション6220にアクセスする要求である。他の実施態様では、解読された通信は、ウェブページに対する要求、たとえばウェブページをウェブサーバ30から受信するためのHTTP要求である。
ステップ6466で、解読された通信が要求を含み、その要求に対する応答がある場合、宛先リソースは、応答通信をアプライアンス1250に発信する。実施態様によっては、応答は、クライアント6205によって要求される接続または通信セッションを確立する肯定応答を含む。他の実施態様では、応答は、エラーメッセージを含む。一実施態様では、応答は、認証要求またはチャレンジ応答型メカニズムを含む。実施態様によっては、応答は、クライアント6205によって使用される加速プログラム6120を含む。別の実施態様では、応答は、クライアント6205によって表示されるウェブページなどのHTMLを含む。他の実施態様では、応答は、動的に生成されたオブジェクトなどのオブジェクトを含む。
ステップ6468で、アプライアンス1250は、ネットワーク40を通して応答通信を、予め確立された暗号化データ通信セッションを介してクライアント6205上の第1プログラム6220に送信する。一実施態様では、アプライアンス1250は、応答通信を暗号化し、暗号化された応答通信を第1プログラム6222に送信する。実施態様によっては、暗号化は、SSLプロトコル、またはその他の適用可能な暗号化および解読プロトコルに従って実施される。さらに、アプライアンス1250は、クライアント6205に対する通信で、任意の加速技術、たとえばマルチプロトコル圧縮6238’、キャッシング6232’、またはTCPバッファリング6228’を実行し得る。
ステップ6470で、第1プログラム6222は、応答通信を解読し、第2プログラムを介して、通信を適切なアプリケーション6222に回送する。第1プログラム6222は、任意の適切なインターフェース手段およびメカニズムを使用して、たとえば任意のタイプおよび形式のプロセス間通信機構またはAPIコールを介して、第2プログラムと通信し得る。第2プログラムは、クライアント6205のネットワークスタック6210を介して、アプリケーション6220に応答通信を提供する。したがって、アプリケーション6220は、アプリケーション6220に対する任意の変更または修正を行わずに、透過的に応答通信を受信する。
別の実施態様によると、クライアント6205は、ステップ6458で、ネットワーク40を通して通信を送信する前に、傍受された通信の追加の処理を実行する。一実施態様は、データを暗号化する前に、クライアントとの接続を終了するプロキシとして作用するVPNソリューションを提供するので、追加の処理が効率的に遂行される。このような処理は、クライアントアプリケーションが、自ら選択するどのようなIPアドレスでも使用することができ、また実行時にこれらのアドレスを動的に変更することができるように、傍受された通信に関するドメイン名サービス(DNS)名前解決を含むことができる。このような追加の処理は、実施態様を他の技術、たとえばグローバルサービス負荷分散と効果的に統合して、分散ゲートウェイまたはサーバ間でより大きい可用性およびより大きい効率を達成することを可能にする。追加の接続処理は、傍受された通信に関する詳細なログを維持することも可能にする。
別の実施態様では、アプライアンス1250は、クライアント6205上の第1プログラムから受信した通信を終了し、ステップ6462に示すようにネットワーク40’上の宛先に通信を回送するのではなく、この通信に含まれる1つまたは複数の要求をさらに処理する。このさらに他の処理は、通信が、ネットワーク40’上の適切な宛先に提供される前に、アプライアンス1250によって再暗号化され、それによって端末相互間ネットワークセキュリティを提供するバックエンド暗号化を含むことができる。宛先は、その後、トラフィックを解読し、適切に応答する。さらに、このような処理は、アプライアンス1250が、宛先サーバによる追加の作業を必要とするのではなく、キャッシュから応答を供給し、通信上のローカルネットワークの負荷分散、グローバルサービスの負荷分散、および/または圧縮を実行して、ネットワーク40の効率および応答性を強化することを可能にすることが可能である。
上記の方法に従って、V暗号化データ通信セッションに基づくVPNがクライアント205およびネットワーク40間に確立される。たとえば、一実施態様では、安全なVPNはHTTPSを介して確立される。したがって、クライアント6205からネットワーク40へのすべての通信は、この暗号化データ通信セッションを通して、第1プログラムを介してアプライアンス1250に、またこの逆に経路指定される。暗号化データ通信セッションは、HTTPSを使用して確立され得るが、暗号化データ通信セッションを通して渡される通信は、HTTPSパケットデータである必要はなく、またHTTPパケットデータである必要もないことに注意するべきである。たとえば、通信は、伝送制御プロトコル/ユーザデータグラムプロトコル(TCP/UDP)、またはインターネット制御メッセージプロトコル(ICPM)パケットデータも含むことができるが、これらの例は、制限することを意図しているのではない。さらに、図42Bに関して説明した方法は、クライアント6205上のアプリケーションと、ネットワーク40上のリソースとの間の要求−応答タイプの通信について記述しているが、暗号化通信は、要求−応答に基づく必要はない。むしろ、通信は、任意のタイプでよい。したがって、接続または通信セッション、たとえばUDPセッションを確立することができる任意のクライアントアプリケーションは、暗号化通信を送信および受信することができる。
別の態様では、加速プログラム6120は、クライアントから任意の中間デバイスを動的にバイパスして、サーバ30と接続または通信し得る。たとえば、クライアント6205は、1つまたは複数の中間手段、たとえばアプライアンス1250を介してサーバと接続し得る。ある理由または別の理由で、中間手段は、クライアント6205がサーバ30と通信するために使用することができなくなる場合があり、たとえばアプライアンス1250は、保守のために一時停止するか、あるいはリブートまたは再始動の過程にある場合がある。加速プログラム6120は、中間手段が使用可能ではないと決定し、サーバ30との別の接続または通信セッション経路を自動的に確立する。これは、クライアント6205のユーザまたはアプリケーションに対して透過的に行うことができ、その結果、接続および/または通信セッションは変化したか、さもなければ分離したように見えない。
次に、図43を参照すると、中間手段を自動的にバイパスする方法6500の一実施態様が示されている。簡潔に説明すると、ステップ6505で、加速プログラム6120は、アプライアンス1250などの中間手段を介して、クライアント6205およびサーバ30間のトランスポート層接続を確立する。ステップ6510で、加速プログラム6120は、クライアント6205が、確立されたトランスポート層接続を介してサーバ30と通信するために、中間手段を使用することはできないと決定する。ステップ6515で、加速プログラム6120は、クライアント6205上で、クライアント6205からサーバ30への通信を傍受する。ステップ6520で、加速プログラム6120は、クライアント6205およびサーバ30間に第2トランスポート層接続を確立し、その結果、サーバ30とのクライアントの通信に使用することはできないと決定された中間手段をバイパスする。ステップ6525で、加速プログラム6120は、第2トランスポート層接続を介して、クライアント6205の傍受された通信をサーバ30に伝送する。
さらに詳細には、ステップ6505で、加速プログラム120は、中間手段を介して、クライアント6205およびサーバ30間のトランスポート層接続を確立する。一実施態様では、中間手段は、アプライアンス6205を含む。他の実施態様では、中間手段は、以下の1つを含む:キャッシュ、サーバ、ゲートウェイ、ファイヤウォール、ブリッジ、ルータ、スイッチ、ハブ、プロキシ、あるいは任意のこれらのタイプおよび形式の中間手段として作動するか、あるいはこうした中間手段の機能および動作を提供する任意のソフトウェアアプリケーションまたはプログラム。一実施態様では、中間手段は、サーバ30上で作動し得る。実施態様によっては、トランスポート層接続は、同じタイプおよび形式、または異なるタイプおよび形式の複数の中間手段を介して確立される。別の実施態様では、トランスポート層接続は、クライアント6205として確立されたか、またはアプライアンス1250で確立されたトランスポート層接続のプールの接続から成る。
ステップ6510で、加速プログラム120は、クライアント6205が、確立されたトランスポート層接続を介してサーバ30と通信する際に、中間手段が使用可能ではないか、あるいは使用することができないと決定する。加速プログラム6120は、中間手段の状況、または任意の適切な手段および/または機構による中間手段の可用性を決定し得る。一実施態様では、加速プログラム6120は、中間手段に対する伝送に関連するエラーメッセージまたは障害応答を受信することによって、中間手段が使用可能ではないと決定する。たとえば、加速プログラム6120は、確立されたトランスポート層接続を介して、クライアント6205から通信を伝送する場合、失敗したトランスポート層接続通信の応答を受信し得る。別の実施態様では、加速プログラム6120は、予め決められた頻度でピングコマンドを中間手段に伝送し、中間手段の状況および可用性を監視し得る。加速プログラム6120が、中間手段からの応答を受信しないか、あるいは実施態様によっては、遅延応答、または所望の待ち時間より長い応答を受信する場合、加速プログラム6120は、中間手段がクライアント6205によって使用可能ではないか、あるいは使用することはできないと決定し得る。他の実施態様では、サーバ30、アプライアンス1250、または中間手段は、クライアント6205または加速プログラム6120にメッセージを送信し、中間手段がクライアント6205によって使用可能ではないか、あるいは使用することはできないことを識別する情報を提供し得る。実施態様によっては、確立されたトランスポート層接続は分離または中断されるか、他の実施態様では閉鎖される。
ステップ6515で、加速プログラム6120は、確立されたトランスポート層接続を通して、中間手段を介して移動するように定められたクライアント6205からサーバ30への通信を傍受する。加速プログラム6120は、ネットワークスタック6210内の任意のある位置、および任意のプロトコル層で通信を傍受し得る。一実施態様では、加速プログラム6120は、確立されたトランスポート層接続上で伝送する前に、トランスポートプロトコル層で通信を傍受する。たとえば、実施態様によっては、加速プログラム6120は、トランスポートドライバインターフェースを有するか、あるいはトランスポートプロトコル層にインターフェースするネットワークドライバを含む。その他の実施態様は、図42A〜42Bに関連して説明したように、第1プログラム6222、および第2プログラムとしての加速プログラム6120を含むことができ、第1プログラム6222または加速プログラム6120が通信を傍受する。
ステップ6520で、加速プログラム6120は、ステップ6510で使用可能ではないか、あるいは使用できないと決定された中間手段をバイパスするために、クライアント6205に対するサーバ6205との第2トランスポート層接続を確立する。一実施態様では、加速プログラム6120は、たとえば、クライアント6205およびサーバが同じネットワーク6205上に存在するか、あるいはクライアント6205およびサーバ30間に経路指定可能な異なるネットワーク上に存在する場合、サーバ30に対して直接第2トランスポート層接続を確立する。別の実施態様では、加速プログラム6120は、第2アプライアンス1250’などの第2中間手段との第2トランスポート層接続を確立する。実施態様によっては、加速プログラム6120は、サーバ1250との別のトランスポート層接続を確立するように、アプライアンス1250に要求する。一実施態様では、アプライアンス1250は、サーバ30に対するトランスポート層接続のプールの第2トランスポート層接続を使用する。別の実施態様では、加速プログラム6120は、第2トランスポート層接続を確立するようにサーバ30に要求する。実施態様によっては、加速プログラム6120は、加速プログラム6120によって確立された、サーバ30とのトランスポート層接続のプールからの第2トランスポート層接続を使用する。
一実施態様では、加速プログラム120は、ステップ6520で、クライアント6205のユーザまたはアプリケーション6220に対して透過的に、あるいは実施態様によっては、トランスポート層の上または下の任意のプロトコル層に対して透過的に第2トランスポート層接続を確立する。態様によっては、第2トランスポート層接続は、ステップ6510で、中間手段が、クライアント6205によって使用可能ではないか、あるいは使用されるべきではないと決定すると、クライアント6205に対して自動的に確立される。他の実施態様では、第2トランスポート層接続は、サーバ30に対する傍受された通信の伝送、たとえば通信を伝送する最初の試みが失敗すると、自動的に確立される。実施態様によっては、第2トランスポート層接続は、通信の1回または複数回の伝送再試行が失敗すると、あるいは予め決められた数の再試行が使い果たされた後、自動的に確立される。別の実施態様では、第2トランスポート層接続は、中間手段が、ネットワークパケット伝送または受信速度を遅延させており、待ち時間を生じているか、あるいは望ましくない状態でのトランスポート層接続の使用に影響していると決定されると確立される。一実施態様では、加速プログラム6120は負荷分散を実行し、中間手段をバイパスして、クライアント6205および/または第2中間手段に対する当該中間手段の任意の処理または動作をオフロードするために、第2トランスポート層接続を確立する。
ステップ6525で、加速プログラム6120は、クライアント6205の傍受された通信を、第2トランスポート層接続を介してサーバ30に伝送する。一実施態様では、加速プログラム6120は、傍受された通信を、サーバ30に直接伝送する。他の実施態様では、加速プログラム6120は、第2アプライアンス1250などの第2中間手段を介して、傍受された通信を伝送する。第2トランスポート層接続を使用することによって、加速プログラム6120は、中間手段をバイパスし、サーバ30とのクライアント6205のアプリケーション6220の動作を継続する。一実施態様では、クライアント6205のアプリケーション6220は、アプリケーション6220が、以前に、または最初に確立したトランスポート層接続を使用し続けていたかのように、サーバ6220との動作および通信を継続する。したがって、加速プログラム6120は、中間手段が加速プログラム6120によってバイパスされなかった場合に生じ得る何らかの通信の遮断、中断、待ち時間、遅延、あるいは操作または性能の問題を防止、回避、または迂回する。別の態様では、この技術は、中間デバイスからのアクセスに問題または中断がある場合でも、サーバ30に対する連続アクセス、またはリモートアクセスアプリケーションをクライアント6205に自動的に提供する。
さらに、上記のリダイレクトおよびバイパス技術は、クライアント6205上で負荷分散およびトラフィック管理を実行して、アプリケーション6220a〜6220n、またはその他のコンテンツ、および機能をクライアント6205に提供する1つまたは複数のサーバ30にアクセスするために使用することができる。たとえば、一実施態様では、クライアントがサーバにアクセスするために使用する中間手段またはアプライアンスは、トランスポート層接続が増加し、応答速度、性能、またはその他の動作が低下するにつれて過負荷状態になり得る。中間手段またはアプライアンスの性能の低下が決定されると、加速プログラム6120は、クライアントを別の中間手段またはアプライアンス、あるいはサーバにリダイレクトして、サーバに対するクライアントの端末相互間接続性における性能ボトルネックをバイパスすることができる。
他の態様では、クライアント側加速技術は、クライアントのネットワークスタックのトランスポートプロトコル層に関連付けるか、あるいはこのトランスポートプロトコル層で実行し得る。加速プログラム6120は、1)トランスポート制御プロトコル(TCP)バッファリング6228、2)TCP接続プーリング6224、および3)TCP多重化6226の1つまたは複数を実行するために実行可能なインストラクションを含み得る。実施態様によっては、加速プログラム6120が、クライアントのネットワークスタックのトランスポートプロトコル層で傍受される通信を透過的に処理するため、クライアントのTCP接続、その使用、およびクライアント6205のアプリケーション6220a〜6220nによる接続を通しての伝送を制御および管理することができる。図44は、TCPバッファリング技術を実施する方法6600の一実施態様を示し、図45A〜45Bは、TCP接続プーリング技術の一実施態様、図46、47、および48はTCP多重化技術の一実施態様を示す。
図44に示す方法6600の一実施態様を簡潔に説明すると、加速プログラム6120は、クライアント6205からサーバ30への通信、たとえばクライアント205によるサーバ30へのアクセス要求を傍受する。ステップ610で、加速プログラム6120は、受信したサーバ応答と、クライアントによって伝送された要求の生産速度との差が予め決められた閾値未満になるかどうかを決定する。ステップ6615で、生産および消費速度の差は、予め決められた閾値未満にならない場合、加速プログラム6120は、ステップ6617で通信をサーバ260に回送する。ステップ6615で、速度の差が、予め決められた閾値未満であれば、ステップ6620で、加速プログラム6120は、当該通信をクライアント6205のメモリ内に記憶する。ステップ6625で、加速プログラム6120は、速度の差が予め決められた閾値を超えて変化したかどうかを決定し、変化した場合、記憶された通信をサーバ30に回送する。あるいは、加速プログラム6120は、ある時点で、ステップ6625における速度の差の変化が予め決められた閾値を超える時まで、通信をクライアント6205のメモリ内に維持する。たとえば、クライアント6205が、生成された応答を消費できる速度より大きい速度で、要求をサーバ30に伝送している場合、加速プログラム6120は、速度の差が変化する将来のある時まで、それ以上の伝送を保持する。
さらに詳細には、ステップ6605で、加速プログラムは、クライアント6205からサーバ30への通信を傍受する。加速プログラム6120は、任意のある時点、およびネットワークスタック6210内の任意のプロトコル層における通信を傍受し得る。一実施態様では、加速プログラム6120は、確立されたトランスポート層接続で伝送する前に、トランスポートプロトコル層における通信を傍受する。たとえば、実施態様によっては、加速プログラム6120は、トランスポートドライバインターフェースを有するか、あるいはトランスポートプロトコル層にインターフェースするネットワークドライバを含む。その他の実施態様は、図41A〜42Bにに関連して説明したように、第1プログラム6222、および第2プログラムとして加速プログラム6120を含むことができ、第1プログラム6222または加速プログラム6120が通信を傍受する。一実施態様では、この通信は、アプリケーション6220などのサーバ30のリソースを使用するか、あるいはこのリソースにアクセスするための、クライアント6205による要求を含む。
ステップ6610で、加速プログラム6120は、クライアント6205の消費速度と生産速度との差が予め決められた閾値未満になるかどうかを決定する。一実施態様では、加速プログラム6120は、クライアント6205がサーバ30に伝送する要求の数を計算して追跡し、別の実施態様では、加速プログラム6120は、サーバ30からクライアント6205が受信する応答の数を計算して追跡する。実施態様によっては、クライアント6205は、アプリケーション6220ごとに伝送した応答、および受信した要求を追跡する。応答および要求は、ネットワークスタック6210の任意のプロトコル層で追跡され得る。一実施態様では、クライアント6205またはアプリケーション6220によって伝送された要求の数は、クライアント6205およびサーバ30間のトランスポート層またはトランスポート層接続に対して提示された時から計算および追跡される。同様に、別の実施態様では、クライアント6205またはアプリケーション6220がサーバ30から受信する応答の数は、トランスポート層における受信時点から、またはクライアント6205およびサーバ30間のトランスポート層接続から、および/または応答が、プロトコル層、たとえばネットワークスタック6210のトランスポート層上のアプリケーション層に提供された時点で計算および追跡される。
実施態様によっては、加速プログラム6120は、クライアント6205およびサーバ30間で、加速プログラム6120によって確立されたトランスポート層接続の送信および受信TCPバッファに関する情報およびデータにアクセスし、情報およびデータを検査、あるいは取得する。たとえば、加速プログラム6120は、TCP/IPバッファのデフォルトおよび最大サイズ、並びにクライアント6205からサーバ30へのネットワークパケットの送信および受信間の速度の差を決定するために現在使用されているバッファ部分を決定し得る。他の実施態様では、加速プログラム6120は、任意のタイプおよび形式の輻輳アルゴリズムを使用して、クライアント6205からサーバ30へのネットワークパケットの消費および生産の差による輻輳原因があるかどうかを決定する。別の実施態様では、加速プログラム6120は、トランスポート層接続により、たとえばネットワークドライバまたはTCPサービスプロバイダにより使用される輻輳アルゴリズムからの情報またはデータにインターフェースするか、あるいはこれらの情報またはデータを取得する。たとえば、一実施態様では、加速プログラム6120は、当該接続によって使用される輻輳ウィンドウに関連する情報およびデータを決定する。
予め決められた閾値は、加速プログラム6120の任意の適切な手段および機構によって構成、指定、画定、または識別することができる。一実施態様では、閾値は、クライアント6205および/またはアプリケーション6220の生産速度および消費速度間の相対的、絶対的、あるいはその他の割合として指定することができる。消費および/または生産の速度は、任意の期間に任意の粒度で消費される受信、および生産される伝送の数によって識別することができる。実施態様によっては、閾値は、クライアント6205および/またはアプリケーション6220の生産および消費速度間の数量差、実施態様によっては、期間の数量差として指定することができる。たとえば、閾値は、クライアント6205が、クライアント6205が消費した要求より多い6100の要求を生産した時点として指定し得る。別の例では、閾値は、クライアント6205が、クライアント6205が同じ期間に消費する要求より多い610の要求を、期間ごとにサーバ30に対して生産している時点として指定し得る。
ステップ6615では、クライアント6205および/またはアプリケーション6220の生産および消費速度の差が、予め決められた閾値未満ではない場合、加速プログラム6120は、ステップ6617で、通信をサーバ6260に回送する。実施態様によっては、加速プログラムは、通信のための任意の加速技術を実行する。たとえば、通信は、プールされた多重化トランスポート層接続を介してサーバに回送することができ、さらに圧縮することができる。他の実施態様では、クライアント6205は、通信をアプライアンス1250に回送し、サーバ30に対するクライアント6205の接続を提供し得る。
ステップ6615では、クライアント6205および/またはアプリケーション6220の生産および消費速度の差が、予め決められた閾値未満である場合、加速プログラム6120は、ステップ6620で、クライアント6205のメモリ内に消費を記憶する。実施態様によっては、メモリは、クライアント6205のメモリのカーネルモード6202のメモリであり得、他の実施態様では、メモリは、クライアント6205のユーザモード6203にあり得る。一実施態様では、加速プログラム6120は、キャッシュマネジャー6232を介して、通信をキャッシュ内に記憶することができる。他の実施態様では、加速プログラム6120は、加速プログラム6120がアクセス可能なオブジェクト、データ構造、またはその他のデータ要素を使用して、傍受された通信をバッファ、保持、あるいは記憶し得る。一実施態様では、傍受された通信は、圧縮された状態でメモリ内に記憶することができる。別の実施態様では、加速プログラム6120は、傍受された通信を第1プログラム6222に送信し、後のある時点で伝送するためにメモリ内に記憶または保持する。
ステップ6625で、加速プログラム6120は、記憶された通信をいつサーバ30に伝送するかを決定する。一実施態様では、加速プログラム6120は、クライアント6205の生産および消費速度の差が、加速プログラム6120が、ステップ6617で、記憶された通信をサーバ30に回送する閾値を超えるかどうかを決定するために、ステップ6610および6615を実行する。実施態様によっては、加速プログラム6120は、定期的または予め決められた頻度で、あるいはポーリングまたはイベントベースで、生産および消費速度の差を比較し、差が予め決められた閾値を超えると、加速プログラム6120は、通信をサーバ30に回送する。他の実施態様では、加速プログラム6120は、傍受された通信をどの程度の期間記憶するかを決定するタイマーを設定または構成する。タイマーが満了すると、加速プログラム6120は、記憶された通信をサーバ30に伝送する。別の実施態様では、加速プログラム6120は、傍受された通信を記憶した後に、クライアント6205によって消費されるサーバの応答の数を検査する。消費された応答の数は、予め決められた数を超える場合、加速プログラム6120は、傍受された通信をメモリバッファまたは記憶装置から解放し、サーバ30に伝送するために通信を提示する。
ステップ6625で、加速プログラム6120が、生産または消費速度が適切な方法で変化しなかったと決定した場合、加速プログラム6120は、適切な時間に達するまで、傍受された通信をメモリ内に保持または維持する。一実施態様では、加速プログラム6120は、生産および/または消費速度が変化しない場合でも、ステップ6617で通信をサーバに回送する。たとえば、ある期間、生産および/または消費速度が変化するのを待った後、速度が変化しない場合、加速プログラム6120は、通信をサーバ30に回送する。
TCPバッファリング技術は、傍受された通信または要求に関連して一般的に説明されているが、方法6600の実施態様は、サーバ30に対するクライアント6205の複数の傍受された通信に関して、その後ほぼ同時に、あるいは同時に実施することができる。さらに、別の実施態様では、方法6600は、クライアントから複数のサーバ30への通信に関連してクライアント上で実施し得る。たとえば、方法6600の第1インスタンスは、クライアント6205および第1サーバ30’間で実施することができ、方法6600の第2インスタンスは、クライアント6205および第2サーバ30’’間で実施することができる。たとえば、実施態様によっては、方法6600は、各アプリケーションの個々の生産および消費速度を使用して、第1アプリケーション6200aに対して、さらに第2アプリケーション6200bに対して実施し得る。他の実施態様では、方法6600は、第1アプリケーション6200aに対して実施することができるが、第2アプリケーション6200nに対しては実施することはできない。
別の態様によると、クライアント側加速プログラム6120は、クライアントの接続を繰り返し開放および閉鎖し、これらの接続を維持し、クライアント6205のアプリケーションがサーバ30に繰り返しデータアクセスすることを可能にすることによって生じるサーバ30および/またはアプライアンス1250の処理負荷を減少させる。この技術は、本明細書では、一般に「接続プーリング」と呼ばれる。次に、図45Aを参照し、方法6700を簡潔に説明すると、ステップ6702で、加速プログラム6120は、サーバにアクセスするためのアプリケーションの要求を傍受し、ステップ6704で、要求に関連するサーバのアイデンティティを決定する。ステップ6706で、加速プログラム6120は、加速プログラム6120がサーバ30に対する確立されたトランスポート層接続を有し、アプリケーション6220が使用するように空いているかどうかを決定する。アプリケーション6220が使用するように空いている、サーバ30に対するトランスポート層接続が存在しない場合、加速プログラム6220は、ステップ6708で、クライアント6205が使用するために、サーバ30に対するトランスポート層接続を確立する。ステップ6706で、アプリケーション6220が使用可能なトランスポート層接続が存在する場合、ステップ6710で、加速プログラム6120は、アプリケーションの要求を翻訳し、使用可能なトランスポート層接続を介して要求を伝送または伝達する。
さらに大まかに説明すると、ステップ6712で、加速プログラム6120は、サーバ30からの要求に対する応答を受信し、ステップ6714で、この応答をアプリケーション6220に対する応答に翻訳する。ステップ6716で、加速プログラム6120は、クライアント6205の任意のアプリケーション6220a〜6220nにより使用されるように、トランスポート層接続を開放状態に維持するか、または保つ。クライアント6205上で、サーバ30とのトランスポート層接続を開放状態に保ち、必要に応じてアプリケーションとの接続を開放および閉鎖することによって、加速プログラム6120は、インターネットなどのネットワーク40上でクライアント6205に供給することに関連するTCP接続負荷問題からサーバを解放する。ステップ6718で、接続が、クライアント6205の1つまたは複数のアプリケーション6220によって、サーバ30にアクセスする際にもはや使用されないと決定される場合、加速プログラム6120は、トランスポート層接続をある時点で閉鎖する。
さらに詳細には、ステップ6702で、加速プログラム6120は、クライアント6205の任意のアプリケーション6220a〜6220nがサーバ30にアクセスする要求を傍受する。実施態様によっては、この要求は、トランスポート層接続を介して要求を確立または伝送する前に、トランスポートプロトコル層で傍受される。他の実施態様では、要求は、トランスポート層上の任意のプロトコル層、またはトランスポート層接続で傍受される。一実施態様では、アプリケーション6220の要求は、サーバ30とのトランスポート層接続を開放または確立するための要求である。実施態様によっては、加速プログラム6120は、要求に応答して、クライアント6205のアプリケーション6220a〜6220nが使用するために、トランスポート層接続のプールの第1トランスポート層接続を確立する。別の実施態様では、アプリケーション要求は、クライアント6205の確立されたトランスポート層接続を介してサーバにアクセスするための要求である。
ステップ6704で、加速プログラム6120は、任意の適切な手段および機構による要求から、サーバ30のアイデンティティを決定する。実施態様によっては、サーバ30のドメイン名またはインターネットプロトコルアドレスは、要求のコンテンツによって識別されるか、あるいは参照され、たとえば要求の文字列は、サーバ30のドメイン名を識別し得る。一実施態様では、サーバ30のアイデンティティは、TCPパケットのヘッダ情報、たとえば宛先インターネットプロトコルアドレスおよびポート番号によって決定される。別の実施態様では、サーバ30は、アプリケーション6220に関連し、加速プログラム6120は、データベース、またはその他の構造化情報記憶装置内の関連性を検索または問い合わせる。
ステップ6706で、加速プログラム6120は、アプリケーション6220が使用可能か、または自由に使用できるトランスポート層接続が存在するかどうかを決定する。一実施態様では、加速プログラム6120は、サーバ30とのトランスポート層接続を未だ確立していないため、アプリケーション6220が使用可能なトランスポート層接続は存在しない。別の実施態様では、加速プログラム6120は、以前に確立されたサーバ30とのトランスポート層接続を有することができるが、別のアプリケーション6220が、現在アクティブに接続を使用していると決定する。以下に詳細に説明するように、加速プログラム6120は、確立されたトランスポート層接続が、別のアプリケーションによって使用可能であるか、あるいはサーバ30からアプリケーション6220に対して受信されるメッセージ、たとえば要求に対する応答の長さに基づいて、アプリケーション6220s〜6220nによって共用可能であるかどうか、および/またはサーバ30およびアプリケーション6220間の通信が現在アイドルであるかどうかを決定する。
ステップ6708で、加速プログラム6120が、トランスポート層接続がアプリケーション6220によって使用可能ではないと決定する場合、サーバ30とのトランスポート層接続を確立する。実施態様によっては、ステップ6708で確立されたトランスポート層接続は、サーバ30との第1トランスポート層接続であり、他の実施態様では、トランスポート層接続は、サーバ30に対する複数のトランスポート層接続の第2トランスポート層接続である。さらに別の実施態様では、加速プログラム6120は、既に確立されたトランスポート層接続が、アプリケーションの要求をサーバ30に伝達するために使用可能になるか、あるいは自由に伝達できるのを待つ。たとえば、加速プログラム6120は、第1アプリケーション6220aが、確立された接続を介してトランザクションを間もなく完了しそうであると決定し得る。
ステップ6710で、加速プログラム6120は、トランスポート層接続を介してサーバ6106に伝送されるアプリケーションの要求を翻訳する。実施態様によっては、加速プログラム6120は、接続を共用するクライアント6205のすべての アプリケーション6220a〜6220nのトランスポート層接続通信に、1つのポート番号を使用する。場合により、加速プログラム6120は、アプリケーションごとに要求、および要求に対する未処理の応答を追跡する。したがって、加速プログラム6120は、どのアプリケーション6220が、任意の特定の時に、サーバ30に対するトランスポート層接続を介して、ネットワークパケットを伝送および受信するかを認識する。一実施態様では、ある時点に1つのアプリケーション6220だけが、トランスポート層接続上で送信および受信するため、加速プログラム6220は、どのアプリケーション6220が接続を使用しているかを理解する。実施態様によっては、加速プログラム6120は、アプリケーション6220のプロセスidを要求に関連付ける。他の実施態様では、加速プログラム6120は、ポート番号を提供してアプリケーション6220に関連付け、アプリケーションの割り当てられたポート番号に伝送されるTCPネットワークパケット内のポート番号を修正する。別の実施態様では、ポート番号は、アプリケーション6220によって提供され、加速プログラム6120は、それに応じてTCPネットワークパケット内のポート番号を変更するか、あるいは提供する。
ステップ6712では、加速プログラム6120は、サーバ30からのアプリケーションの要求に対する応答を受信する。一実施態様では、サーバ30は、要求に対して応答しない。別の実施態様では、サーバ30は、エラーまたは障害メッセージに応答する。実施態様によっては、サーバ30は、複数の応答に応答する。他の実施態様では、サーバ30は、他の実施態様では、サーバ30は、複数のネットワークパケットまたは複数のTCPセグメントを含む応答に応答する。別の実施態様では、サーバ30は、アプリケーション6220に関連するか、またはアプリケーション6220に割り当てられるソースポート番号を識別する1つまたは複数のネットワークパケットに応答する。一実施態様では、サーバ30は、トランスポート層接続のソースポート番号を識別し、クライアント6205の複数のアプリケーションに使用される1つまたは複数のネットワークパケットに応答する。
ステップ6714で、加速プログラム6120は、アプリケーション6220に応答するように、サーバ30からの応答を翻訳するか、あるいは処理する。一実施態様では、加速プログラム6120は、受信した1つまたは複数のネットワークパケットのソースポート番号を、アプリケーション6220のポート番号と置き換える。別の実施態様では、加速プログラム6120は、追跡機構を介して、現在トランスポート層接続を使用しているアプリケーション6220を決定し、ネットワークスタック6210を介して、応答をアプリケーション6220に渡す。一実施態様では、応答は変更されず、接続のトランスポート層上のネットワークスタック6210のプロトコル層を介して処理するために渡される。実施態様によっては、加速プログラム6120は、受信する応答の複数部分、たとえばTCPセグメントを待ってから、応答を処理し、アプリケーション6220に回送する。一実施態様では、加速プログラム6120は、応答を第1プログラム6222に渡し、第1プログラム6222は、アプリケーション6220にインターフェースし、応答をアプリケーション6220に渡す。
ステップ6716で、加速プログラム6120は、クライアント6205からサーバ30への1つまたは複数のトランスポート層接続のプール内で、トランスポート層接続を開放状態に維持するか、または保つ。一実施態様では、加速プログラム6120、またはネットワークスタック6210のトランスポート層ドライバは、接続がさもなければアイドルの場合、たとえば送信するデータが存在しない場合、接続の他方の端部を定期的にプローブするKeep−Alive機構を含む。Keep−Alive機構は、応答を受信して、接続はアイドルであるかもしれないが、未だアクティブであることを確認するために、このメッセージを送信し得る。Keep−Aliveメッセージ、および対応する応答は、任意のタイプおよび形式のフォーマット、コマンド、指令、または通信を含み得る。したがって、実施態様によっては、加速プログラム6120は、トランスポート層ドライバを介して、Keep−Aliveメッセージをトランスポート層接続に伝送するか、あるいは伝送させる。実施態様によっては、加速プログラム6120は、Keep−Aliveメッセージの頻度を設定し、他の実施態様では、接続を使用する アプリケーション6220a〜6220nの挙動または活動に基づいて、Keep−Aliveメッセージの頻度を変更する。
実施態様によっては、加速プログラム6120は、任意のRSTおよび/またはFINコマンド、つまりTCP/IPコマンドを傍受して、トランスポート層接続を通して受信するTCP接続をリセットおよび/または終了する。一実施態様では、加速プログラム6120は、傍受したRSTおよび/またはFINコマンドを無視するか、何の処置も取らないか、さもなければドロップするか、削除するか、またはフラッシュする。別の実施態様では、加速プログラム6120は、RSTおよび/またはFINコマンドを傍受し、受信するが、接続の他方の端部にメッセージを送信し、接続を開放状態に保つか、あるいは維持する。他の実施態様では、加速プログラム6120は、RSTおよび/またはFINコマンドの処理による、確立されたトランスポート層接続の閉鎖に応答して、新しいトランスポート層接続を確立する。
他の実施態様では、加速プログラム6120は、クライアント6205の傍受された通信内に、クライアント6205がその旨のコマンドを送信しない限り、接続を開放状態に保つか、あるいは接続を閉鎖しないようにサーバ30に指示するインストラクション、コマンド、または指令を挿入する。たとえば、一実施態様では、加速プログラム6120は、HTTPプロトコル、たとえばプロトコルバージョン1.0のGET要求の通信を傍受し、Keep−Aliveヘッダ、たとえば「Connection:Keep Alive」をサーバ30に対する通信内に挿入する。他の実施態様では、GET要求、またはその他のコマンドは、Keep−Aliveヘッダを含み得る。これらの実施態様では、加速プログラム6120は、通信を傍受し、Keep−Aliveヘッダをチェックしてから、通信をサーバ30に回送する。実施態様によっては、バージョン1.1以上のHTTPが使用され、この場合、Keep−Alive機構は、クライアント6205が接続を閉鎖することを要求するまで、サーバ30が接続を開放状態に保つように黙示的に意味する。他の実施態様では、加速プログラム6120は、クライアント6205がリブートされるか、または再始動され、ネットワーク40が使用不能になるか、あるいはクライアント6205がネットワーク40から切断されるか、あるいはサーバ30がリブートまたは再始動されるまで、サーバ30に対してトランスポート層接続を開放状態に保つ。
ステップ6718で、加速プログラム6120は、任意の所望の時点で、クライアント6205およびサーバ30間の任意の1つまたは複数のトランスポート層接続を閉鎖し得る。実施態様によっては、加速プログラム6120は、接続を使用するクライアント6205上の1つまたは複数のアプリケーション6220a〜6220nが終了すると、トランスポート層接続を閉鎖する。他の実施態様では、加速プログラム6120は、任意のアプリケーション6220a〜6220nが接続を使用するタイムアウト時間が満了すると、トランスポート層接続を閉鎖する。たとえば、加速プログラム6120は、予め決められた期間後に満了するタイマーを構成、設定、または提供することができ、接続が当該期間中にアイドルであるか、またはアイドル状態を保つ場合、加速プログラム6120は接続を閉鎖する。実施態様によっては、サーバ30はリブートされ、再始動されるか、あるいは接続が遮断または中断され、加速プログラム6120は接続を閉鎖する。実施態様によっては、加速プログラム6120は、サーバ30に要求を送信し、サーバ30から応答のすべてのデータを受信後に接続を閉鎖するためのRSTおよび/またはFINコマンドを伝送するか、または伝送させる。他の実施態様では、トランスポート層接続またはトランスポート層接続のプールは、クライアント6205の再始動またはリブート、ネットワーク40に対する切断、ネットワーク40の使用不能、あるいはサーバ30の再始動またはリブートの後に閉鎖される。
実施態様によっては、サーバ30に対する第1トランスポート層接続は開放状態に保たれ、サーバに対する第2トランスポート層接続は閉鎖され、つまり、加速プログラム6120は、クライアント6205の1つまたは複数のアプリケーション6220a〜6220nが、サーバ30に対する接続を共用するためには、第1トランスポート層接続のみが必要であると決定するためである。他の実施態様では、加速プログラム6120は、任意のサーバ30に対する1つのトランスポート層接続のプールを維持し、クライアント6205上のアプリケーション6220a〜6220nの要求、通信、またはトランスポート層接続の使用の増加に基づいて、特定のサーバ30に対する第2の接続、または複数の接続を確立する。
方法6700の一実施態様は、一般に、クライアント6205からサーバ30への1つまたは複数のトランスポート層接続のプールに関連して説明されているが、加速プログラム6120は、その後ほぼ同時に、または同時に、クライアントおよび複数のサーバ30の各々間のトランスポート層接続のプールを確立し得る。したがって、第1アプリケーション6220aおよび第2アプリケーション6220bは、おそらく、サーバ30aに対する1つまたは複数のトランスポート層接続の第1プールを使用しており、第3アプリケーション6220cおよび第4アプリケーション6220dは、サーバ30bに対する1つまたは複数のトランスポート層接続の第2プールを使用している。さらに、方法6700の一実施態様の各々のステップは、異なるインスタンスにおいて、異なる頻度で実行することができる。実施態様によっては、加速プログラム6120の複数のインスタンスは、各々のサーバ30に対する1つまたは複数のトランスポート層接続の各々のプールを処理するために使用され得る。
次に、図45Bを参照すると、クライアント6205の2つのアプリケーション6220aおよび6220bによって使用される、一実施態様ではサーバ30に対する、あるいは別の実施態様ではアプライアンス1250に対するトランスポート層接続を提供する加速プログラム6120のフロー図が示されている。クライアント6205上の加速プログラム6120は、ステップ6752によって示されるように、アプリケーション6220によって提供されるネットワークアドレス1を使用して、クライアント6205およびサーバ30、またはアプライアンス1250間の第1トランスポート層接続を開放する。ステップ6752は、TCP/IPプロトコルが多段ハンドシェークを使用して接続を開放するため、双方向ステップとして示されている。
トランスポート層接続が確立されると、加速プログラム6120は、ステップ6754に示されるように、/sales/forecast.htmlのパス名を指定するアプリケーション6220aからのGET要求を傍受する。自由トランスポート層接続は、加速プログラム6120およびサーバ30、またはアプライアンス6205間で開放しているため、加速プログラム6120はトランスポート層接続を開放する。一実施態様では、加速プログラム6120は、ステップ6756に示されているように、アプリケーション6220aの要求を、ネットワークアドレス2の第2ネットワークアドレスにマッピングしなければならない。たとえば、加速プログラム120は、ネットワークアドレスの翻訳を実行し、アプリケーション6220aによて要求されるサーバ30’に対する、あるいは要求を処理するか、または要求に応答することも可能な別のサーバ30’’に対する宛先IPアドレスおよび/または宛先ポートを修正する。別の実施態様では、加速プログラム6120は、アプリケーション6220Sによって受信または生成された要求をサーバ30、またはアプライアンス1250に送信する。
加速プログラム6120は、ステップ6758に示すように、GET要求を当該サーバ30、またはアプライアンス1250に渡す。一実施態様では、アプライアンス1250は、要求をサーバ30に回送し、さらに他の実施態様では、アプライアンス1250が、アプライアンス1250およびサーバ30間のプールされたか、プールされて多重化されたトランスポート層接続を介して要求を回送する。実施態様によっては、サーバ30は、ステップ6760に示すように、要求されたウェブページに応答する。加速プログラム6120は、ステップ6762に示すように、ウェブページをアプリケーション6220aに回送する。一実施態様では、加速プログラム6120およびサーバ30、またはアプライアンス1250間のトランスポート層接続は、ステップ6764に示すように閉鎖される。他の実施態様では、加速プログラム6120は、閉鎖要求を傍受し、トランスポート層接続を開放させる要求を無視する。TCP/IPプロトコルによると、ネットワーク接続の閉鎖は多段プロセスを含むことができる。したがって、ステップ6764の流れ線は、双方であるように示されている。他の実施態様では、プーリング態様の技術により、アプリケーション6220のために確立され、アプリケーション6220よって使用されるトランスポート層接続は、開放状態に保たれるか、さもなければ、同じアプリケーション6220a、または異なるアプリケーション、たとえば第2アプリケーション6220bからのさらに他のデータステップに適応するように維持される。
ステップ6766で、加速プログラム6120は、第2アプリケーション6220aからサーバ30、またはアプライアンス1250への要求を傍受する。開放状態にあるか、および/または第2アプリケーション6220bによって使用可能な自由トランスポート層接続、たとえば第1アプリケーション6220aに関してステップ6756で確立されたトランスポート層接続が存在する場合、加速プログラム6120は、この以前に確立されたトランスポート層接続を使用する。したがって、第2トランスポート層接続は、ステップ6766で開放する必要はない。あるいは、加速プログラム6120は、サーバ30、またはアプライアンス1250に対する第2トランスポート層接続を確立する。ステップ6768で、加速プログラムは、第2アプリケーション6220bからの要求、たとえばWeb page/sales/forecast.htmlに対する要求を傍受し、ステップ6770で、その要求をサーバ30、またはアプライアンス1250に伝送する。自由接続は、加速プログラム6120およびサーバ6120間で既に開放しているため、加速プログラム6120が、サーバ6120に対し、不必要にさらに他の接続を開放する処理負荷を与えることはない。ステップ6772で、加速プログラム6120は、サーバ30からの応答を、たとえばアプライアンス1250を介してトランスポート層接続から傍受または受信し、この応答を第2アプリケーション6220bに回送する。ステップ6776で、加速プログラム120は、第2アプリケーション6220bからの閉鎖要求を傍受し、実施態様によっては接続を閉鎖し、他の実施態様では、要求を無視して、第1アプリケーション6220a、第2アプリケーション6220b、さらに別のアプリケーション6220c〜6220nからのさらに他のデータ要求に対応するように接続状態を保つ。
ステップ6776で、加速プログラム6120が、サーバ30、またはアプリケーション1250との接続を閉鎖する結果を生じるある程度の数の状況が存在する。たとえば、クライアント6205または加速プログラム6120は、クライアント6205は、アプリケーション6220aおよび6220bに関して要求されたすべてのデータを検索したと決定した後、あるいはアプリケーション6220aおよび6220bを終了、遮断、または中断した後にFIN(終了)コマンドを開始し得る。実施態様によっては、クライアント6205または加速プログラム6120は、類似の状態でRST(リセット)コマンドも開始する。加速プログラム6120およびサーバ30、またはアプライアンス1250間の接続を閉じるほかに、RSTコマンドは、サーバ側接続を良好に保つために行われるある数のハウスキーピング動作を生じる。特に、TCPプロトコルは、RSTコマンドが、SEQ(シーケンス)番号を有しているため、サーバがセグメントを認めることを保証する。しかし、RSTコマンドは、正しいACK(肯定応答)番号を有することは保証されていない。この状況に対処するため、加速プログラム6120は、サーバ30、またはアプライアンス1250によって送信されるデータのバイト、およびクライアント6205によって肯定応答されるバイトを常時把握する。クライアント6205が、サーバ30によって未だすべてのデータを肯定応答されていない場合、加速プログラム6120は、肯定応答されたバイトを計算し、ACKをサーバ6205に送信する。
さらに、図45Bに示さないが、サーバ30、またはアプライアンス1250は、それら自体とクライアント6205との間の接続も閉鎖することができる。サーバ30、またはアプライアンス1250は、FINコマンドをクライアント6205に送信するであろう。これに応じて、実施態様によっては、加速プログラム6120は接続を閉鎖し、さらに他の実施態様では、サーバ30、またはアプライアンス1250との別の接続を再確立する。
さらに、図45Aの方法6700の一実施態様、および図45Bの一例のフロー図は、一般に、複数のアプリケーションによって使用される1つまたは複数のトランスポート層接続のプーリングとして説明されているが、このプーリング技術は、複数のトランスポート層接続を要求または開始するとともに、これらの接続を介して要求する単一のアプリケーション6220に適用することができる。たとえば、HTTPプロトコルの一実施態様では、トランスポート層接続は、アプリケーションからの各々のHTTP要求について確立され得る。この技術を使用すると、1つまたは複数のトランスポート層接続のプールは、各々の要求に対するトランスポート層接続を開放または閉鎖することなく、アプリケーションによって使用することができる。
別の態様では、同じか、または共用トランスポート層接続を介してアプリケーション要求を多重化する技術を使用することができ、たとえば図45A〜45Bに関連して説明するプーリングを介して確立されるトランスポート層接続を使用することができる。実施態様によっては、確立されたトランスポート層接続の可用性が決定され、要求は、サーバ30からアプリケーションの要求に対する応答のコンテンツが完全に受信されたかどうかを検査することによって、接続を介して複数のアプリケーションから多重化され得る。以下でさらに詳細に述べるとおり、応答のすべてのデータが受信されたかどうかを確認するために、一実施態様では、応答のコンテンツ長パラメータが使用され、別の実施態様では、応答のチャンク転送符号化ヘッダが使用される。一態様では、応答からのすべてのデータが受信されたかどうかが確認され、プールされた接続は、現在、アプリケーションによって使用されるように空いているか、および/または、図45に示す方法6700のステップ6706および6708のように、サーバに対する接続のプールに別のトランスポート層接続を確立するかどうかが決定される。別の実施態様では、応答のコンテンツの長さを確認する技術は、同じトランスポート層接続を介して複数のアプリケーションからの要求を多重化する技術として使用される。
次に、図46を参照すると、クライアント6205からサーバ30への単一トランスポート層接続を介して、要求を多重化する方法6800の一実施態様が示されている。簡潔に説明すると、ステップ6805で、加速プログラム6120は、クライアント6205およびサーバ30間のトランスポート層接続を確立する。ステップ6810で、加速プログラム6120は、サーバ30に対する第1アプリケーション6220aの第1要求を傍受する。ステップ6815で、加速プログラム6120は、トランスポート層接続が、別のアプリケーションによって現在使用されているか、あるいはアイドルであるかどうかが決定される。ステップ6817で、トランスポート層接続が、アプリケーション6220aによって使用可能である場合、ステップ6820で、加速プログラム6120は要求をサーバに伝送する。あるいは、ステップ6817で、トランスポート層接続がアプリケーション6220aによって使用可能ではない場合、加速プログラム6120は、ステップ6819で、ある期間待ってからステップ6814に戻るか、またはアプリケーション6220によって使用される第2トランスポート層接続を確立する。ステップ6825で、加速プログラム6120は、サーバからのアプリケーションの要求に対する応答を受信する。ステップ6830で、加速プログラム6120は、第2アプリケーション6220bによる第2要求を傍受し、ステップ6815で、トランスポート層接続が、第2アプリケーション6220bにより使用可能であるかどうかの決定に着手する。実施態様によっては、加速プログラム6120は、ステップ6825で、第1要求の応答を受信する前、または応答のすべてのデータを受信する前に、ステップ6830で第2アプリケーション6220bの要求を傍受する。本明細書でさらに詳細に説明するように、実施態様によっては、加速プログラム6120は、コンテンツ長さ検査技術を使用して、トランスポート層接続がいつアイドルであるか、あるいはアプリケーションが、要求に対する応答のすべてのデータをいつ受信したかを決定する。
さらに詳細には、ステップ6805で、加速プログラム6120は、クライアント6205およびサーバ30間のトランスポート層接続を確立する。実施態様によっては、加速プログラム6120は、アプライアンス1250、または中間手段とのトランスポート層接続、またはアプライアンス1250、または中間手段を介したトランスポート層接続を確立する。一実施態様では、加速プログラム6120は、サーバ30に対するトランスポート層接続のプールとしてトランスポート層接続を確立する。したがって、実施態様によっては、トランスポート層接続は、サーバ30に対する第2または第3トランスポート層接続を含み得る。他の実施態様では、加速プログラム6120は、本明細書で以前に説明したように、第1プログラム6222を介してトランスポート層接続を確立し得る。実施態様によっては、加速プログラム6120は、クライアント6205の第1アプリケーション6220aによる要求に応じて、トランスポート層接続を確立した。
ステップ6810で、加速プログラム6120は、第1アプリケーション6220aによる第1要求を傍受して、サーバ30にアクセスする。実施態様によっては、要求は、トランスポート層接続を介して要求を確立または伝送する前に、トランスポートプロトコル層で傍受される。他の実施態様では、要求は、トランスポート層の上、またはトランスポート層接続の上の任意のプロトコル層で傍受される。実施態様によっては、要求は、第1プログラム6222によって傍受される。一実施態様では、アプリケーション6220aの要求は、サーバ30とのトランスポート層接続を開放または確立するための要求である。別の実施態様では、アプリケーション要求は、確立されたトランスポート層接続を介して、またはアプライアンス1250を介してサーバにアクセスするための要求である。
ステップ6815で、加速プログラム120は、トランスポート層接続がアイドルであるか、第1アプリケーション6220aによって使用可能であるか、あるいは第1アプリケーション6220aの第1要求を伝達するかどうかを決定する。実施態様によっては、加速プログラム6120は、1つまたは複数のトランスポート層接続から、プール内のどのトランスポート層接続がアイドルか、あるいは第1アプリケーション6220aによって使用されるように空いているかを決定する。一実施態様では、加速プログラム6120は、加速プログラム6120が、要求に応じて、または要求の直前にトランスポート層接続を確立したために、トランスポート層接続がアイドルであると決定する。実施態様によっては、加速プログラム6120は、アプリケーション6220から要求を何も受信していない場合があり、加速プログラム6120によって傍受および処理される第1要求として、この要求を認識する。別の実施態様では、加速プログラム6120は、トランスポート層接続上で伝送させた任意の要求の未処理の応答の数を追跡し、未処理の応答がない場合、加速プログラム6120は、トランスポート層接続は、第1アプリケーション6220aによって使用可能ではないと認識する。さらに別の実施態様では加速プログラム6120は、トランスポート層接続が現在アイドルであると認識する。たとえば、加速プログラム6120は、接続を開放状態に保つために、サーバに対するKeep−Alive要求を開始している場合がある。実施態様によっては、最後のトランザクションは完了したが、サーバ30および/またはクライアント6205は未だ、RSTおよび/またはFINコマンドを伝送していないため、トランスポート層接続はアイドルである。
実施態様によっては、加速プログラム6120は、応答のコンテンツの長さを確認して、サーバ30から第1アプリケーション6202aの第1要求への応答が完全か、あるいは加速プログラム6120が、応答に対するすべてのデータを受信したかどうかを決定し得る。上記のとおり、これらの技術は、実施態様によっては、プーリング技術のために別の接続を確立すると決定するためにも使用される。この技術に関連して、図47および48は、ある実施態様では応答のコンテンツ長パラメータ、別の実施態様では応答のチャンク転送符号化ヘッダを検査して、応答のすべてのデータが受信されたかどうかを決定することを説明するために使用される。図47は、TCPセグメント6900として呼ばれるTCPパケットのTCP部分を示す。TCPセグメント6900は、TCPヘッダ6902、および本文6904を含む。本文6904は、TCPパケットが、HTTPのアプリケーション層プロトコルを搬送する実施態様では、その他のデータおよび情報の中に、HTTPヘッダおよびメッセージを含む。実施態様によっては、コンテンツ長パラメータ6906は、HTTPヘッダによって、あるいはHTTPヘッダ内に位置し、発見され、あるいは参照される。一実施態様では、加速プログラム120は、コンテンツ長パラメータ6906を使用して、応答のすべてのデータが受信されるかどうかを決定する。
図48は、TCPパケットのTCPセグメントの別の実施態様を示す。トランスポート層接続上でHTTPプロトコルを使用するいくつかの実施態様では、チャンク転送符号化ヘッダが存在する場合があり、これは、チャンク転送符号化がTCPセグメントまたはパケットに適用されたことを指示する。したがって、この実施態様では、メッセージの長さは、チャンク符号化によって識別される。チャンク符号化は、各々のチャンクが、チャンクサイズのフィールド内にチャンク自体の長さ指標を有する一連のチャンクとしてメッセージを転送するために、メッセージ本文を修正する。TCPセグメント7600は、TCPヘッダ(図示しない)および本文を含む。本文は、他の情報の中に、HTTPヘッダ7602A〜7602Cおよびメッセージを含む。HTTPヘッダ7602A〜7602Cは、7つのチャンクサイズのフィールド7606A〜7601C、および6つのチャンクメッセージデータ7604A〜7604Fを含む。
チャンクサイズのフィールド7606A〜7606Gは、図48に示すように、互いにリンクされるか、参照されるか、あるいは関連付けられる。チャンクサイズのフィールド7606Aは、チャンクメッセージデータ7604A内のメッセージの長さを指示し、チャンクサイズのフィールド7606Cは、チャンクメッセージデータ7604C内のメッセージの長さを指示し、以下同様である。最後のチャンクサイズのフィールド7606Gは、それ以上のチャンク、またはそれ以上のメッセージは後に続かないことを指示する長さ値ゼロを含む。別の実施態様では、加速プログラム6120は、チャンクサイズのフィールドを介して、クライアント6205が、応答に対するすべてのデータを受信したと決定する。
図47および48は、要求に対する応答のすべてのデータが受信されたかどうかを検査する技術を一般的に示し、これらの技術は、非同期メッセージまたは通信をクライアント6205に送信するサーバ30またはアプライアンス1250に適用することができる。さらに、これらの技術は、一般に、HTTPプロトコルの図47および48に関連して説明され、これらの技術は、クライアント6205によって伝送または受信されるデータの長さの指示を提供した任意のプロトコル層の任意のプロトコルに使用することができる。したがって、実施態様によっては、加速プログラム6120は、任意のプロトコル層における部分を含むネットワークパケットの任意の部分にアクセスし、抽出し、検査し、分析し、あるいは処理して、クライアントおよびサーバまたはアプライアンス間の要求、応答、または通信に関連するすべてのデータが今までに受信されたかどうかを決定する。さらに別の実施態様では加速プログラム6120は、クライアント6205およびサーバ30間で伝送、受信、および肯定応答されたバイト数を追跡して、アプリケーション6220に関するクライアント6205およびサーバ30間で、あるバイトが未処理かどうかを決定する。
上記のコンテンツ長さ技術を使用することによって、加速プログラム6120は、クライアント6205のアプリケーション6220a〜6220nによって以前に使用されたか、使用中の同じトランスポート層接続をサーバ30に再使用することができる。ステップ6817で、加速プログラム6120は、トランスポート層接続が、第1要求を伝送するために使用可能であるかどうか、その場合、ステップ6820で、要求をサーバ30に伝達するかどうかを決定する。あるいは、ステップ6819で、加速プログラム6120は、アプリケーションの未処理の要求に関して、すべてのデータが受信されるまで待つことができる。たとえば、加速プログラム6120は、タイマーをたとえば短期間に設定し、ステップ6815に進むことができる。実施態様によっては、加速プログラム6120は、クライアント6205のネットワークスタック6210のパケット処理タイマーに応じて、すべてのデータが受信されたかどうかを検査する。別の実施態様では、ステップ6819で、加速プログラム6120は、第1アプリケーション6220aの第1要求を伝送するために、別のトランスポート層接続を確立する。
ステップ6820で、加速プログラム6120は、どのアプリケーション6220が、現在、接続上に未処理の要求および応答を有するか、あるいは現在、接続を使用しているかを追跡し得る。たとえば、接続上で、一度に1つのアプリケーション6220のみが要求を伝送し、応答を受信することができる。したがって、加速プログラム6120は、どのアプリケーション6220が接続を使用しているかを理解する。実施態様によっては、加速プログラム6120は、接続を共用するクライアント6205のすべての アプリケーション6220a〜6220nのトランスポート層接続通信に1つのポート番号を使用する。場合により、加速プログラム6120は、アプリケーションごとに、要求、および要求に対する未処理の応答を追跡する。実施態様によっては、加速プログラム6120は、アプリケーション6220のプロセスidを要求と関連付ける。さらに別の実施態様では、加速プログラム6120は、同じネットワークパケットまたはパケット、TCPセグメントまたはセグメントで、第2アプリケーション6220bとともに、第1アプリケーション6220aの要求を伝送する。他の実施態様では、加速プログラム6120は、1つまたは複数のTCPセグメントウィンドウの一連のTCPセグメントの一部と同じトランスポート層接続を介して、アプリケーション6220a〜6220nの複数の要求を伝送する。
他の実施態様では、加速プログラム6120は、ポート番号機構および/またはスキーマを使用して、受信したどの応答またはメッセージが、どのアプリケーション6220a〜6220nに関するかを追跡し、認識する。他の実施態様では、加速プログラム6120は、ポート番号を提供してアプリケーション6220に関連付け、アプリケーションの割り当てられたポート番号に伝送されるTCPネットワークパケット内のポート番号を修正する。別の実施態様では、ポート番号は、アプリケーション6220によって提供され、加速プログラム6120は、それに応じてTCPネットワークパケット内のポート番号を変更するか、あるいは提供する。したがって、加速プログラム6120は、クライアント6205の複数の アプリケーション6220a〜6220nからの要求を編成し、その結果、アプリケーション6220a〜6220nは、トランスポート層接続を同時に使用することができる。
ステップ6825では、加速プログラム6120は、たとえばアプライアンス6205を介して、サーバ30から第1アプリケーション6220aの第1要求に対する応答を受信し、当該応答を第1アプリケーション6220aに提供する。実施態様によっては、加速プログラム6120は、ネットワークスタック6210を介して、たとえば、接続のトランスポート層の上のプロトコル層によって応答を開始し、処理することを可能にして、応答を第1アプリケーション6220aに提供する。別の実施態様では、第1プログラム6222は、応答を第1アプリケーション6220aに提供する。他の実施態様では、加速プログラム6120は、APIなどのプロセス間通信機構またはインターフェースを介して、応答を第1アプリケーション6220aに提供し得る。実施態様によっては、加速プログラム6120は、図48に示すように、応答の一部分、たとえばマルチチャンクメッセージ内の第1チャンクのみを受信する。
ステップ6830で、加速プログラム6120は、第2アプリケーション6220bの要求を傍受して、サーバ30にアクセスする。実施態様によっては、加速プログラム6120は、ステップ6825以前に、第2アプリケーション6220bの要求を傍受する。他の実施態様では、加速プログラム6120は、ステップ6825で、応答の受信時に第2アプリケーション6220bの要求を傍受する。別の実施態様では、加速プログラム6120は、クライアント6205または加速プログラム6120が、第1アプリケーション6220aの第1要求の応答に関するすべてのデータを受信する前に、第2アプリケーション6220bの要求を傍受する。第2アプリケーション6220bの要求を傍受すると、加速プログラム6120は、一実施態様ではステップ6815に進み、トランスポート層接続を介して第2要求を多重化するか、あるいは接続のプール内の別の接続など、別のトランスポート層接続を確立するかを決定する。他の実施態様では、加速プログラム6120は、第1アプリケーション6220aと同じ接続を介して第2アプリケーション6220bの要求を伝送するが、第1アプリケーション6220aは、未処理の応答を有するか、あるいは第1要求の応答からすべてのデータを未だ受信していない。別の実施態様では、加速プログラム6120は、第1アプリケーション6220aが応答を受信後、生成される任意のRSTおよび/またはFINコマンドが、第1アプリケーション6220aに関連して生成される前に、第2アプリケーション6220bの要求を伝送する。
加速プログラム6120は、一般に、加速技術に関するクライアント側のインプリメンテーションおよび実行に関連して説明したが、加速プログラム6120は、アプライアンス1250に関連してインターフェースおよび動作し、アプライアンス側の加速技術もインプリメントおよび実行する。一実施態様では、クライアント側の加速プログラム6120、およびアプライアンス1250は、互いに関連して動作し、クライアント6205およびサーバ30間の通信上で複数の加速技術を実行し得る。実施態様によっては、クライアント側の加速プログラム120およびアプライアンス1250はともに、TCPプーリングを提供して多重化し、たとえばクライアント6205およびサーバ30間のカスケーディングまたは端末相互間プーリング、および多重化機構を提供する。たとえば、加速プログラム6120は、第1のプールされたトランスポート層接続をアプライアンス1250に提供することができ、次に、第2のプールされたトランスポート層接続をサーバ30に提供する。別の例では、加速プログラム6120は、クライアント6205上の第1のプールされたトランスポート層接続を介してアプリケーション要求を多重化し、アプリケーション要求は、次に、サーバ30に対する第2のプールされたトランスポート層接続を介して、アプライアンス1250によって多重化される。実施態様によっては、加速プログラム120は、要求をクライアント6205から伝送するためのスロットル機構を提供し、アプライアンス1250は、応答をサーバ30からクライアント6205に伝送するためのスロットル機構を提供する。別の実施態様では、加速プログラム6120は、クライアント6205に対するクライアント側のキャッシングを実行し、アプライアンス1250は、クライアント6205、およびその他のクライアント6205のためのオブジェクト、たとえば動的に生成されたオブジェクトのキャッシングを提供する。
実施態様によっては、クライアント6205および/またはアプライアンス上の加速技術の実行のほかに、あるいはこれに関連して、加速プログラム6120、およびアプライアンスは、アプライアンス1250を介したクライアント6205およびネットワーク40アクセス間の仮想プライベートネットワーク接続、および通信を提供し得る。別の実施態様では、加速プログラム6120は、アプリケーション6220から伝達されるデータを含むことができ、アプライアンス1250は、このデータを受信後、圧縮されたデータを解凍することができる。逆に、アプライアンス1250は、プライベートデータ通信ネットワーク40’上のサーバ30のアプリケーション6220から伝達されたデータを圧縮することができ、加速プログラム6120は、これらのデータを受信後、圧縮されたデータを解凍することができる。また、加速プログラム6120、およびアプライアンス1250は、暗号化データ通信またはトンネリングセッション内のエンドポイントとして動作することができ、この場合、加速プログラム6120は、アプリケーション6220から伝達されたデータを暗号化し、アプライアンス1250は、暗号化されたデータを受信後、暗号化データを解読する。同様の方法で、アプライアンス1250は、プライベートデータ通信ネットワーク上でアプリケーション6220から伝達されたデータを暗号化し、加速プログラム6120は、このデータを受信後に解読することができる。
D.コンピューティング環境の提供の加速例
上記のB項およびC項に記載した構造、機能、および動作を考慮して、実施態様によっては、クライアントに対するコンピューティング環境の提供を加速し得る。たとえば、本明細書に記載されている実施態様は、アプリケーションによって処理可能なアプリケーションおよびデータファイルを中央の企業データセンターからリモートユーザのロケーション、たとえば企業の支社に提供するために使用することができる。アプライアンス、および加速プログラムは、サーバからリモートクライアントへの任意のトランスポート層ペイロード、たとえばストリーミングされたアプリケーション、およびデータファイルを加速するための端末相互間加速技術を提供する。アプリケーション提供管理システムは、コンピューティング環境をリモートユーザのデスクトップに、複数の実行方法に基づいて、およびポリシーエンジンを介して適用される任意の認証および承認ポリシーに基づいて提供するためのアプリケーション提供技術を提供する。これらの技術を使用すると、リモートユーザは、コンピューティング環境を取得し、サーバに記憶されたアプリケーションおよびデータファイルに、任意のネットワーク接続デバイスからアクセスすることができる。
次に、図49Aを参照すると、上記の加速およびアプリケーションの提供システムおよび方法を実施するための一実施態様が示されている。簡潔に説明すると、クライアント10は、ネットワーク40、40’、およびアプライアンス1250を介してサーバ30と通信する。たとえば、クライアント10は、企業のリモートオフィス、たとえば支社内に存在し、サーバ30は、企業データセンターに存在するかもしれない。クライアント10は、クライアントエージェント560、およびコンピューティング環境15を含む。コンピューティング環境15は、データファイルにアクセスし、データファイルを処理または使用するアプリケーションを実行するか、または動作させる。コンピューティング環境15、アプリケーション、および/またはデータファイルは、アプライアンス1250および/またはサーバ30を介して提供され得る。実施態様によっては、クライアント10は、加速プログラム4120、収集エージェント404、およびストリーミングクライアント562をさらに含む。サーバ30は、アプリケーション提供システム500、および実施態様によってはポリシーエンジン406を含む。
一実施態様では、アプリケーション提供システム500は、サーバ30上に存在するか、あるいはサーバ30上で実行し得る。別の実施態様では、アプリケーション提供システム500は、複数のサーバ30〜30’’上に存在するか、あるいは複数のサーバ30〜30’’上で実行し得る。実施態様によっては、アプリケーション提供システム500は、サーバファーム内で実行し得る。一実施態様では、アプリケーション提供システム500を実行するサーバ30は、アプリケーションおよびデータファイルも記憶し、あるいは提供し得る。別の実施態様では、1つまたは複数のサーバ30の第1の集合は、アプリケーション提供システム500を実行することができ、別のサーバ30’は、アプリケーションおよびデータファイルを記憶するか、あるいは提供することができる。実施態様によっては、アプリケーション提供システム500、アプリケーションおよびデータファイルの各々は、異なるサーバ上に存在するか、または位置してよい。一実施態様では、アプリケーション提供システム500は、ポリシーエンジン406も含む。別の実施態様では、ポリシーエンジン406は、アプリケーション提供システム500から別個に実行する。実施態様によっては、ポリシーエンジン406は、アプリケーション提供システム500と同じサーバ30上にある。他の実施態様では、ポリシーエンジン406は、アプライアンス1250上で実行する。さらに別の実施態様ではアプリケーション提供システム500および/またはポリシーエンジン406の任意の部分は、アプライアンス1250、または複数のアプライアンス上に存在し、実行し、または記憶されるか、あるいはこれらのアプライアンスに分配される。
実施態様によっては、クライアントエージェント560は、上記のとおり、任意のストリーミングクライアント562、収集エージェント404、および/または加速プログラム6120を含む。一実施態様では、クライアントエージェント560、ストリーミングクライアント562、収集エージェント404、および/または加速プログラム6120は、各々の機能、論理、および動作を提供する単独のプログラム、または実行可能なインストラクションの集合を形成するか、あるいはこれらに組み込まれる。他の実施態様では、各々のストリーミングクライアント562、収集エージェント404、および加速プログラム6120は、クライアントエージェント560から別個に実行する。一実施態様では、クライアント10は、クライアントエージェント560を実行する。別の実施態様では、クライアント10は、ストリーミングクライアント562を実行する。実施態様によっては、クライアント10は、収集エージェント404を実行する。一実施態様では、クライアント10は、加速プログラム6120を実行する。実施態様によっては、クライアント10は、ストリーミングクライアント562、収集エージェント404、または加速プログラム6120の1つまたは複数とともに、クライアントエージェント560を実行する。他の実施態様では、クライアント10は、ストリーミングクライアント562および加速プログラム6120を実行する。一実施態様では、クライアント10は、加速プログラム6120および収集エージェント404を実行する。
実施態様によっては、クライアント10は、クライアントエージェント560、ストリーミングクライアント562、および/または収集エージェント404をサーバ30から取得する。他の実施態様では、クライアント10は、クライアントエージェント560、ストリーミングクライアント562、および/または収集エージェント404をアプライアンス1250から取得する。一実施態様では、任意のクライアントエージェント560、ストリーミングクライアント562、および/または収集エージェント404は、アプライアンス1250上に記憶し得る。たとえば、実施態様によっては、クライアントエージェント560、ストリーミングクライアント562、および/または収集エージェント404は、アプライアンス1250内にキャッシュされ得る。他の実施態様では、アプライアンス1250によって、アプリケーションが加速可能であると決定されると、アプライアンス1250は、クライアントエージェント560、ストリーミングクライアント562、加速プログラム6120、および/または収集エージェント404をクライアント10に伝送し得る。実施態様によっては、クライアント10は、任意のクライアントエージェント560、ストリーミングクライアント562、加速プログラム6120、および/または収集エージェント404を自動的にインストールおよび実行し得る。さらに別の実施態様では、任意のクライアントエージェント560、ストリーミングクライアント562、加速プログラム6120、および/または収集エージェント404は、クライアントのユーザまたはアプリケーションに対して、あるいはクライアントのネットワークスタックの任意の部分に対して透過的に実行することができる。
実施態様によっては、サーバ30またはネットワーク40’に対し、クライアント10のためのVPNまたはSSL VPN接続を確立する。他の実施態様では、アプライアンス1250は、プロキシとして動作し、サーバまたは負荷分散装置にアクセスして、1つまたは複数のサーバ30に対するアクセスを提供する。一実施態様では、アプライアンス1250、および/または加速プログラム6120は、クライアント10に対するストリーミングクライアント562、収集エージェント404、および/またはクライアントエージェント560の提供を加速する。一実施態様では、アプライアンス1250は、クライアント10に対する加速プログラム6120の提供を加速する。他の実施態様では、アプライアンス1250、および/または加速プログラム6120は、クライアント10に対するコンピューティング環境15、アプリケーション、および/またはデータファイルの提供を加速する。一実施態様では、クライアント10は、コンピューティング環境15を有し、アプライアンス1250、および/または加速プログラム6120は、アプリケーション、および/またはデータファイルの提供を加速する。一実施態様では、アプライアンス1250、および/または加速プログラム6120は、アプリケーションの提供を加速する。別の実施態様では、アプライアンス1250、および/または加速プログラム6120は、データファイルの提供を加速する。さらに別の実施態様では、アプライアンス1250、および/または加速プログラム6120は、コンピューティング環境15、たとえば、本明細書で以前に説明した実行環境、または仮想化実行環境の提供を加速する。
一実施態様では、アプライアンス1250は、収集エージェント404から収集された情報を使用して、コンピューティング環境15、アプリケーション、および/またはデータファイルを加速し得るかどうかを決定する。実施態様によっては、アプリケーション1250のポリシーエンジンは、ポリシーエンジン406を含む。他の実施態様では、アプライアンス1250は、ポリシーエンジン406と通信またはインターフェースして、リモートユーザまたはリモートクライアント10の認証および/または承認を決定し、サーバ30からコンピューティング環境15、アプリケーション、および/またはデータファイルにアクセスする。別の実施態様では、アプライアンス1250は、ポリシーエンジン406と通信またはインターフェースして、リモートユーザまたはリモートクライアント10の認証、および/または承認を決定し、アプリケーション提供システム500が、1つまたは複数のコンピューティング環境15、アプリケーション、および/またはデータファイルを提供するようにする。さらに別の実施態様では、アプライアンス1250は、リモートユーザまたはリモートクライアント10のポリシーエンジンの404認証および/または承認に基づいて、VPNまたはSSL VPNを確立する。一実施態様では、アプライアンス1250は、ポリシーエンジン406のポリシーに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。たとえば、アプライアンス1250は、ポリシーエンジン406に基づいて、コンピューティング環境15、アプリケーション、またはデータファイルに対するアクセスを制御し得る。
次に、図49Bを参照すると、リモートロケーションにおけるクライアントのリモートユーザに対するコンピューティング環境の提供を加速する方法の一実施態様が示されている。方法8000を簡潔に説明すると、ステップ8005で、サーバ30は、クライアント10上でアプリケーションを実行する要求を受信する。ステップ8010で、サーバ30は、クライアント10に対し、実行用のアプリケーションをストリーミングする。ステップ8015で、アプライアンス1250、および/またはクライアント側加速プログラム6120は、クライアント10に対するアプリケーションの伝送または提供を加速する。ステップ8020で、クライアント10またはアプリケーションは、アプリケーションが使用するために、サーバ30からデータファイルを要求する。ステップ8025で、サーバ30、および/またはアプライアンス1250は、データファイルをクライアント10に伝送する。ステップ8030で、アプライアンス1250、および/またはクライアント側加速プログラム6120は、クライアント10に対するデータファイルの伝送または提供を加速する。
さらに詳細には、ステップ8005で、サーバ30は、クライアント10上でアプリケーションを実行する要求を受信する。実施態様によっては、クライアント10のユーザが要求を行う。他の実施態様では、アプリケーション、オペレーティングシステム、またはコンピューティング環境15は、要求を伝送する。別の実施態様では、アプライアンス1250は、クライアント10からの要求を傍受し、その要求をサーバ30に回送する。一実施態様では、アプライアンス1250は、ユーザまたはクライアント10の認証および/または承認に基づいて、要求をサーバ30に回送する。別の実施態様では、アプライアンス1250は、収集エージェント404によって提供される情報に基づいて、要求をサーバ30に回送する。一実施態様では、要求は、複数の実行方法のうちの1つの方法でアプリケーションを実行する要求を含む。たとえば、クライアント10のユーザは、サーバからのアプリケーションストリームとして、ローカルにインストールされ、実行されるアプリケーションとして、またはサーバ30上で実行するサーバベースのアプリケーションとしてアプリケーションを実行し、クライアント10に対してリモートに表示することを要求し得る。実施態様によっては、要求は、ファイルタイプの関連性に基づく。たとえば、ユーザは、ファイルを読み込むか、またはファイルにアクセスするために使用されるアプリケーションに関連するファイルを選択し得る。
ステップ8010で、サーバ30は、ステップ8005の要求に応答して、実行用のアプリケーションをクライアント10に伝送する。実施態様によっては、サーバ30は、アプリケーションをクライアント10にストリーミングする。たとえば、ある実施態様におけるアプリケーションをストリーミングすることによって、アプリケーションは、インストールすることなく、クライアント10上で動作する。他の実施態様では、サーバ30は、クライアント10に対し、ローカルにインストールおよび実行するためのアプリケーションを伝送する。たとえば、C項の加速プログラム6120に関連して説明した自動インストールおよび実行技術を使用すると、クライアント10は、受信後に、自動的にアプリケーションをインストールおよび実行し得る。別の実施態様では、サーバ30は、クライアントの代わりにサーバ上でアプリケーションを実行し、リモートディスプレーまたはプレゼンテーション層プロトコルを介して、クライアント10にディスプレーを伝送する。さらに別の実施態様では、アプライアンス1250は、アプリケーションをクライアント10にストリーミングするか、またはアプリケーションをクライアント10に伝送して、インストールおよび/または実行する。実施態様によっては、アプライアンス1250、および/またはサーバ30は、アプリケーションを含むコンピューティング環境15を伝送する。他の実施態様では、アプライアンス1250、および/またはサーバ30は、要求に応じてコンピューティング環境15を伝送する。
ステップ8015で、アプライアンス1250、および/または加速プログラム6120は、クライアント10に対する実行用のアプリケーションの提供を加速する。一実施態様では、アプライアンス1250は、上記のC項で説明した複数の加速技術の1つまたは複数を実行または適用する。別の実施態様では、加速プログラム6120は、やはり上記のC項で説明した複数のクライアント側の加速技術の1つまたは複数を実行または適用する。実施態様によっては、加速プログラム1250、およびアプライアンス6120は、クライアント10およびアプライアンス1250の両方ので、複数の加速技術を実行するために、一緒に、あるいは互いに関連して動作する。たとえば、加速プログラム6120は、1つまたは複数の加速技術の第1の集合を実行し、アプライアンス1250は、1つまたは複数の加速技術の第2の集合を実行する。一実施態様では、加速プログラム1250、およびアプライアンス6120は、同じ加速技術を実行する。別の実施態様では、加速プログラム1250、およびアプライアンス6120は、異なる加速技術を実行する。
一実施態様では、アプライアンス1250、および/または加速プログラム6120は、クライアント10およびサーバ30間のトランスポート層接続を介して伝達される任意のペイロードを加速する。実施態様によっては、サーバ30は、アプリケーションを1つまたは複数のデータファイルとして、TCP/IPパケットのペイロードなどのトランスポート層接続を介してストリーミングする。他の実施態様では、サーバ30は、アプリケーション層プロトコルまたはストリーミングプロトコルを介して、トランスポート層接続を通してアプリケーションをストリーミングする。別の実施態様では、サーバ30は、ICAまたはRDPプロトコルを介し、トランスポート層接続を通してディスプレーの出力を伝送する。これらの任意の実施態様で、アプライアンス1250、および/または加速プログラム6120は、トランスポート層パケットのペイロードを介して、アプリケーションの提供を加速する。
ステップ8020で、クライアント10は、アプリケーションまたはコンピューティング環境15で使用されるデータファイルに対する要求を伝送する。実施態様によっては、データファイルに対する要求は、ステップ8005で、アプリケーションを実行する要求とともに伝送される。一実施態様では、アプリケーションを実行する要求は、データファイルに対する要求を含む。他の実施態様では、アプリケーションまたはコンピューティング環境は、アプリケーションまたはコンピューティング環境の任意の機能、動作、または論理を実行する途中で、データファイルを要求する。たとえば、アプリケーションまたはコンピューティング環境15は、任意のマクロ、スクリプト、構成データ、プロファイル、テンプレート、または規則をサーバ30から要求し得る。実施態様によっては、アプリケーションは、アプリケーションのバックグラウンドプロセスまたはタスクとして、データファイルを要求する。一実施態様では、アプリケーションまたはコンピューティング環境15のユーザは、アプリケーションまたはコンピューティング環境でファイルを読み取り、ファイルにアクセスし、あるいはファイルを処理するためのデータファイルを要求する。たとえば、ユーザは、アプリケーションを介して編集するファイルを開くこと、たとえば、ワード処理アプリケーションを介して編集するドキュメントを開くことができる。実施態様によっては、ユーザは、データファイルを要求するために、ファイルをコンピューティング環境のアプリケーション内にドラッグアンドドロップする。他の実施態様では、ユーザは、ファイルおよびディレクトリインターフェース、たとえばWindows(登録商標)オペレーティングシステム内のファイルエクスプローラを介して、ネットワーク化またはリモート記憶システムの記憶装置、たとえば中央サーバのネットワークドライバにデータファイルを要求し得る。
ステップ8025で、サーバ30またはアプライアンス1250は、要求されたデータファイルをクライアント10に伝送する。実施態様によっては、サーバ30またはアプライアンス1250は、ステップ8020の要求に応じて、データファイルをクライアント10に伝送する。他の実施態様では、サーバ30またはアプライアンス1250は、クライアント10からの要求がなくても、データファイルをクライアント10に伝送する。たとえば、サーバ30は、データファイルの更新をクライアント10に「プッシュ」し得る。一実施態様では、サーバ30は、要求されたデータファイルをクライアント10に伝送する。別の実施態様では、アプライアンス1250は、要求されたデータをクライアント10に伝送する。たとえば、一実施態様では、アプライアンス1250は、データファイルに対する要求を傍受し、データファイルに対するアプライアンス1250のキャッシュを検査し、キャッシュされたデータファイルをクライアント10に伝送する。さらに別の実施態様では、加速プログラム6120は、クライアント10におけるデータファイルの要求を傍受し、加速プログラム6120のキャッシュを介して、データファイルをクライアント10に提供する。実施態様によっては、アプライアンス1250またはサーバ30は、ストリーミングプロトコル、またはストリームを介して、データファイルを伝送する。他の実施態様では、アプライアンス1250またはサーバ30は、任意のタイプおよび形式のキャッシングプロトコルを介して、データファイルを伝送する。
ステップ8030で、アプライアンス1250、および/または加速プログラム6120は、クライアント10に対するデータファイルの提供または伝送を加速する。実施態様によっては、データファイルは、任意のタイプおよび形式のプロトコル、たとえばトランスポート層プロトコル上のアプリケーション層プロトコルを介して伝送され得る。一実施態様では、アプライアンス1250は、データファイルの伝送を加速する。別の実施態様では、加速プログラム6120は、データファイルの伝送を加速する。実施態様によっては、加速プログラム1250に関連するプライアンス1250は、データファイルの伝送を加速する。本明細書で説明するとおり、アプライアンス1250、および/または加速プログラム6120は、データファイルの伝送を加速するために、クライアント10およびアプライアンス30上で、1つまたは複数の加速技術を実行し得る。実施態様によっては、アプライアンス1250、および/または加速プログラム6120は、1つまたは複数のデータファイルをクライアント10またはアプライアンス1250上にキャッシュし、アプリケーションまたはコンピューティング環境15によって使用され得る。
代表的な例
一例の実施態様として、ユーザは、ローカルマシン10上で作業して、支社に位置し得る。ユーザは、MICROSOFT Wordなどのワード処理アプリケーションを使用して、ともに本社に位置するリモートマシン30上に存在する企業文書を編集することを望むかもしれない。この場合、ユーザは、リモートマシン30によってホストされる企業のウェブサイトにウェブブラウザをナビゲートし得る。ユーザが、リモートマシン30によって認証されると、リモートマシン30は、図3Aおよび3Bに関して本明細書で説明され、ローカルマシン10がアクセスするアプリケーションプログラムを表すグラフィカルアイコンが表示されるProgram Neighborhoodウィンドウを含むHTMLページを作成し、ローカルマシン10に伝送することができる。ローカルマシン10のユーザは、アイコンをクリックすることによって、アプリケーションの実行を呼び出すことができる。その結果、図4A〜4Dに記載したように、ポリシーエンジンは、ローカルマシン10がワード処理アプリケーションにアクセスするかどうか、どのようにアクセスするかを決定し得る。アプリケーションは、次に、図20〜21に記載した技術を使用して、ローカルにインストールおよび実行され得る。したがって、ユーザは、アプリケーションを使用してリモートマシン30上のドキュメントを選択し、編集し得る。アプライアンス1250は、次に、本明細書に記載する任意の技術を、たとえばTCP多重化を使用して、ローカルマシン10に対するファイルの提供を加速し得る。
別の例として、第2のユーザは、ローカルマシン10上で作業して、支社に位置し得る。ユーザは、ユーザの企業アカウントを通して、添付ファイルを含むeメールにアクセスすることを望むかもしれない。eメールアプリケーション、およびeメールデータファイルは、本社に存在し得る。ユーザが、eメールアプリケーションにアクセスすることを要求すると、図4A〜4Dに記載したポリシーエンジンは、本明細書に記載したストリーミング技術を使用して、eメールアプリケーションをユーザにストリーミングすると決定し得る。ポリシーエンジンは、ローカルマシン10に関して本明細書で説明したように、加速プログラムをインストールすることも決定し得る。アプリケーションストリーミングは、本明細書に記載する技術、たとえば動的キャッシングを使用して加速され得る。ローカルにインストールした後、ユーザは、次に閲覧のため、eメール、および添付ファイルを選択し得る。アプライアンス1250は、本明細書に記載したように、TCPプーリングなどの加速技術を使用することによって、ファイルの提供を加速し得る。アプライアンスは、その後の要求を加速するために、リモートマシンに提供されるデータファイルの一部または全部もキャッシュし得る。キャッシングは、実行可能プログラムに関連して、アプライアンス1250またはローカルマシン10上の何れかで行うことができる。
第3の例として、支社に位置するユーザは、MICROSOFT Excelなどの表計算プログラムにアクセスして、表計算を更新することを望むかもしれない。ユーザは、ローカルマシン10を使用して、本社にあるリモートマシン30に対するSSL接続を確立して、図3Aおよび3Bに記載するようなProgram Neighborhoodから表計算アプリケーションを選択することができる。図4Dに記載したような収集エージェントは、次に、ローカルマシンに関する情報を収集し、表計算アプリケーションをローカルマシン10にストリーミングすることができるかどうかを決定し得る。表計算アプリケーションは、次に、SSL接続を介してローカルマシン10にストリーミングされ得る。SSL接続は、本明細書に記載するようにSSLまたはTCP接続プーリング、および多重化を提供するアプライアンス1250によって加速され得る。アプリケーションストリーミングは、本明細書に記載する任意の動的キャッシングを提供するアプライアンス1250によって加速することもできる。ユーザは、次に、表計算アプリケーション内からファイルを選択し、編集することができる。ローカルマシン10は、ファイルに対する要求をリモートマシンに伝送し得る。アプライアンス1250は、次に、本明細書に記載する圧縮技術を使用して、ユーザに対するファイルの提供を加速することができる。
上記で一般に、アプリケーション提供システム、およびクライアントに対するコンピューティング環境の提供を加速するアプライアンスに関して説明したが、アプリケーション提供システム、およびアプライアンスは、クライアントに対する複数のコンピューティング環境、アプリケーション、および/またはデータファイルの提供を加速することができる。たとえば、アプリケーション提供システム、およびアプライアンスは、あるタイプのオペレーティングシステムに関連する第1コンピューティング環境、および第2のタイプのオペレーティングシステムに関連する第2コンピューティング環境のクライアントに対する提供を加速することができる。さらに、アプリケーション提供システム、およびアプライアンスは、複数のクライアントに対するコンピューティング環境、アプリケーション、および/またはデータファイルの提供を加速することができる。さらに、上記で一般的に、リモートユーザまたはリモートクライアントに対するコンピューティング環境の提供を加速するアプリケーション提供システムおよびアプライアンスに関して説明したが、アプリケーション提供システム、およびアプライアンスは、ローカル、リモートなどの任意のクライアント、たとえばサーバのLAN上のクライアントに対するコンピューティング環境、アプリケーション、および/またはデータファイルの提供を加速することができる。
さらに、上記で一般に、クライアントおよびアプリケーション提供システム間のアプライアンスに関して説明したが、1つまたは複数のクライアントおよび1つまたは複数のサーバ間に、複数のアプライアンスを使用し得る。実施態様によっては、第1アプライアンスは、クライアントのネットワーク上に存在し、第2アプライアンスはサーバのネットワーク上に存在した。一実施態様では、第1アプライアンスおよび第2アプライアンスは、本明細書に記載する動作を実行する際に互いに通信する。たとえば、第1アプライアンスおよび第2アプライアンスは、任意のノード間、高性能の、あるいはアプライアンス間通信プロトコルを介して通信し得る。さらに、複数のアプリケーション提供システムは、1つのアプライアンスまたは複数のアプライアンスに関連して使用され得る。アプリケーション提供システム、およびアプライアンスは、多様なネットワーク環境およびインフラストラクチャアーキテクチャ内で展開することができる。
これらの実施態様は、1つまたは複数の製品上、あるいは製品内に埋め込まれる1つまたは複数のコンピュータ可読プログラムとして提供することができる。製品は、フロッピー(登録商標)ディスク、ハードディスク、コンパクトディスク、デジタル多目的ディスク、フラッシュメモリカード、PROM、RAM、ROM、または磁気テープでよい。一般に、コンピュータ可読プログラムは、任意のプログラミング言語でインプリメントすることができる。使用可能な言語のいくつかの例としては、C、C++、C#、またはJAVA(登録商標)が挙げられる。ソフトウェアプログラムは、1つまたは複数の製品上、または製品内にオブジェクトコードとして記憶することができる。
図1Aは、ネットワーク環境を表すブロック図である。 図1Bは、ネットワーク環境内のリモートのコンピューティング環境の一実施態様を示すブロック図である。 図1Cは、記載されている実施態様に関連して有用なコンピュータの実施態様を示すブロック図である。 図1Dは、記載されている実施態様に関連して有用なコンピュータの実施態様を示すブロック図である。 図1Eは、コンピューティング環境をクライアントに提供するのに適する環境を示すブロック図である。 図1Fは、ウェブサービスディレクトリのGUIの発行を介して、ローカルマシンが利用可能な複数のアプリケーションプログラムを提供するためのシステムの一実施態様を示すブロック図である。 図2は、アプリケーションプログラムの実行方法を選択するために行われるステップの一実施態様を示すフロー図である。 図3Aは、ワールドワイドウェブを介してProgram Neighborhoodアプリケーションの実行を開始するローカルマシンの一実施態様を示す分解図である。 図3Bは、ウェブサービスディレクトリを使用して数えられたアプリケーションプログラムにアクセスするために、ローカルマシンによって行われるステップの一実施態様を示すフロー図である。 図4Aは、ローカルマシンのアプリケーションプログラムにポリシーに基づくアクセスを提供するネットワーク環境の一実施態様のブロック図である。 図4Bは、ポリシーエンジンのより詳細な実施態様を示すブロック図である。 図4Cは、ローカルマシンに関して受信した情報に基づいてアクセス制御を決定するために、ポリシーエンジンが行うステップの一実施態様を示すフロー図である。 図4Dは、複数のアプリケーションセッションに対する承認リモートアクセスが提供されるコンピュータネットワークの一実施態様を示すブロック図である。 図4Eは、ローカルマシンを関連するアプリケーションセッションに接続するために、セッションサーバが行うステップの一実施態様を示すブロック図である。 図5は、クライアントノードを関連するアプリケーションセッションに接続するために、セッションサーバが行うステップの一実施態様を示すフロー図である。 図6は、アプリケーション一覧を提供する管理サービスを含むリモートマシンの一実施態様を示すブロック図である。 図7は、アプリケーションプログラムを含む複数のファイルにアクセスするために行われるステップの一実施態様を示すフロー図である。 図8Aは、アプリケーションの互換性およびアプリケーションの適合性の問題が減少したオペレーティングシステムの制御下で動作するコンピュータの一実施態様を示すブロック図である。 図8Bは、アプリケーションの互換性およびアプリケーションの適合性の問題が減少したマルチユーザコンピュータの一実施態様を示すブロック図である。 図8Cは、プロセスを隔離スコープと関連付けるための方法で行われるステップの一実施態様を示すフロー図である。 図9は、アプリケーションプログラムを実行するための方法で行われるステップの一実施態様を示すフロー図である。 図10は、リモートマシン上に存在する複数のアプリケーションファイルの一実施態様を示すフロー図である。 図11は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するための方法で行われるステップの一実施態様を示すフロー図である。 図12は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するためのシステムの一実施態様を示すブロック図である。 図13は、ローカルに実行するアプリケーションプログラムに関連するディレクトリ構造内のリモートファイルにアクセスするための方法で行われるステップの一実施態様を示すフロー図である。 図14は、アプリケーションに関連するディレクトリ構造内のファイルにアクセスするためのシステムの一実施態様を示すブロック図である。 図15は、ライセンス管理サブシステムを含むリモートマシンの一実施態様のブロック図である。 図16は、リモートマシン上の管理サービス内の構成要素の一実施態様を示すブロック図である。 図17は、リモートマシンからライセンスを要求し、維持するために行われるステップの一実施態様を示すフロー図である。 図18は、管理サービスによって監視されるセッションと関連し得る状態の一実施態様を示すブロック図である。 図19は、各々のターゲットが、アプリケーションを含む複数のアプリケーションファイルを含む2つのターゲットを含むパッケージの一実施態様を示すブロック図である。 図20は、オペレーティングシステムをリブートすることなくアプリケーションプログラムをインストールするために、ポリシーに基づいて行われるステップの一実施態様を示すフロー図である。 図21は、オペレーティングシステムをリブートすることなく、アプリケーションプログラムをインストールするため、ポリシーに基づく方法で行われるステップの一実施態様を示すフロー図である。 図22は、ローカルマシン上で実行されるスクリプトの一覧の一実施態様を示す。 図23は、隔離環境内でインストーラプログラムを実行するパッケージング機構を含むシステムの一実施態様を示すブロック図である。 図24は、インストーラプログラムの実行が、オペレーティングシステムのリブートを要求する環境で行われるステップの一実施態様を示すフローチャートである。 図25は、パッケージング機構がアプリケーションプログラムをインストールするリモートマシンの一実施態様を示すブロック図である。 図26は、アプリケーションをアプリケーション隔離環境内にインストールするために行われるステップの一実施態様を示すフロー図である。 図27は、統合キャッシングを実行するアプライアンスのアーキテクチャの一実施態様を示すブロック図である。 図28Aは、デバイスの動作をパケット処理およびパケット処理タイマーと統合する方法の一実施態様で行われるステップのフロー図である。 図28Bは、図3Aの無効化粒度技術を実践する方法の一実施態様で行われるステップのフロー図である。 図29Aは、古いオブジェクトを無効化する無効化コマンドを使用する方法の一実施態様で行われるステップのフロー図である。 図29Bは、オブジェクト群の無効化を合併する方法の一実施態様で行われるステップのフロー図である。 図29Cは、クライアントの要求が、オブジェクト決定要因に対して構文解析される方法の一実施態様で行われるステップのフロー図である。 図29Dは、オブジェクト決定要因を使用して、オブジェクト群の無効化を合併する方法の一実施態様で行われるステップのフロー図である。 図30は、接続プーリングの方法の一実施態様で行われるステップのフローチャートである。 図31は、クライアントおよびサーバの要求を翻訳する方法の一実施態様で行われるステップのフローチャートである。 図32は、コンテンツ長パラメータの一実施態様を示す。 図33は、チャンクサイズのフィールドの一実施態様を示す。 図34は、接続プーリングの一実施態様を示すフロー図である。 図35は、コンテンツ長パラメータを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示す詳細なフロー図である。 図36は、コンテンツ長パラメータを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示すフローチャートである。 図37は、チャンクサイズのフィールドを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示す詳細なフロー図である。 図38は、チャンクサイズのフィールドを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示すフローチャートである。 図39は、統合キャッシングの機能を提供するために行われるステップの一実施態様のフローチャートである。 図40Aは、クライアント側の加速プログラムの一実施態様のブロック図である。 図40Bは、クライアント側に加速プログラムを提供するためのアプライアンスの一実施態様のブロック図である。 図41Aは、クライアント側に加速プログラムを動的に提供して、自動的にインストールおよび実行するための方法の一実施態様のステップ図である。 図41Bは、アプリケーションを加速することができるかどうかを決定する方法の一実施態様のステップ図である。 図41Cは、加速プログラムによる複数の加速技術を実行して、トランスポート層で傍受し、カーネルレベルデータ構造を使用する方法のもう1つの実施態様のステップ図である。 図42Aは、第1プログラムを介してクライアント上に加速プログラムを自動的にインストールして実行する方法のもう1つの実施態様のステップ図である。 図42Bは、仮想プライベートネットワークの接続性を提供し、1つまたは複数の加速技術を実行するための第1プログラムおよび加速プログラムの方法の一実施態様のステップ図である。 図43は、サーバに対するクライアントの通信をリダイレクトして、通信をサーバに伝送するために使用できないと決定された中間手段をバイパスする方法の一実施態様のステップ図である。 図44は、伝達制御プロトコルのバッファリングのクライアント側加速技術を実行する方法の一実施態様のステップ図である。 図45Aは、伝達制御プロトコルの接続プーリングのクライアント側加速技術を実行する方法の一実施態様のステップ図である。 図45Bは、一実施態様の1つまたは複数のトランスポート層接続のプールを介して、複数のアプリケーションにより実行される一連のHTTPトランザクションの線図である。 図46は、伝達制御プロトコルの多重化のクライアント側加速技術を実行する方法の一実施態様のステップ図である。 図47は、トランスポート層パケットのコンテンツ長さ識別子の一実施態様の線図である。 図48は、複数のチャンクを介して伝送されるメッセージのコンテンツ長さ識別子のもう1つの実施態様の線図である。 図49Aは、リモートクライアントに対するコンピューティング環境の提供を加速するためにネットワークされたコンピュータシステムの一例の実施態様を示すブロック図である。 図49Bは、リモートクライアントに対するコンピューティング環境の提供を加速する方法のステップの一実施態様を示すフロー図である。

Claims (60)

  1. リモートクライアントに対するコンピューティング環境の提供を加速する方法であって、
    (a)アプリケーションを実行するためのリモートクライアントからの要求を前記サーバによって受信するステップであって、前記リモートクライアントおよびサーバは、アプライアンスを介して通信する、ステップと、
    (b)前記リモートクライアントに対して、実行のためにアプリケーションを前記サーバによってストリーミングするステップと、
    (c)前記リモートクライアントによって要求され、前記ストリーミングされたアプリケーションによりアクセスされるデータファイルを前記サーバによって伝送するステップと、
    (d)前記リモートクライアントに対する前記データファイルの伝送を、前記アプライアンスによって加速するステップと
    を含む、方法。
  2. 前記データファイルは、前記アプリケーションによって使用可能なフォーマットである、請求項1に記載の方法。
  3. 前記アプリケーションは、前記データファイルのファイルタイプに関連付けられている、請求項1に記載の方法。
  4. 前記リモートクライアントに対する前記アプリケーションのストリーミングを、前記アプライアンスによって加速することを含む、請求項1に記載の方法。
  5. 前記アプライアンスによって、
    圧縮と、
    伝送制御プロトコルの多重化と、
    伝送制御プロトコルのバッファリングと、
    キャッシングと
    の加速技術のうちの1つを実行することにより、前記データファイルの前記伝送、または前記アプリケーションの前記ストリーミングの一方を加速することを含む、請求項1に記載の方法。
  6. 前記リモートクライアント上の加速プログラムによって、前記リモートクライアントと前記サーバとの間の通信を加速することを含む、請求項1に記載の方法。
  7. 前記アプライアンスによって、前記リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー(SSL)接続の一方を確立することを含む、請求項1に記載の方法。
  8. 前記サーバとの接続またはセッションの一方を確立するための前記クライアントからの要求の後、前記アプライアンスによって、前記リモートクライアントに対して加速プログラムを伝送することを含む、請求項1に記載の方法。
  9. 前記アプライアンスからの受信の後、前記リモートクライアントによって、前記加速プログラムを自動的にインストールして実行することを含む、請求項8に記載の方法。
  10. 前記アプリケーションまたは前記サーバの一方に対して透過的に、前記リモートクライアントによって前記加速プログラムを実行することを含む、請求項9に記載の方法。
  11. 前記アプリケーションが加速可能であることを前記アプライアンスによって決定し、前記決定に応じて、加速プログラムを前記リモートクライアントに対して、前記アプライアンスによって伝送することを含む、請求項1に記載の方法。
  12. 前記リモートクライアント上の加速プログラムによって、
    圧縮と、
    伝送制御プロトコルの多重化と、
    伝送制御プロトコルのバッファリングと、
    キャッシングと
    の加速技術のうちの1つを実行することを含む、請求項1に記載の方法。
  13. 前記アプライアンスによって、前記データファイルをキャッシュすることを含む、請求項1に記載の方法。
  14. 前記アプライアンスによって、前記データファイルに対する前記リモートクライアントからの要求を傍受し、前記要求に応じて、前記キャッシュされたデータファイルを前記リモートクライアントに伝送することを含む、請求項13に記載の方法。
  15. 前記アプライアンスによって、前記サーバから受信した前記データファイルを圧縮し、前記圧縮されたデータファイルを前記リモートクライアントに伝送することを含む、請求項1に記載の方法。
  16. 前記ストリーミングされたアプリケーションまたは前記データファイルの一方を、前記サーバから、複数のクライアントによって使用されるプールされたトランスポート層接続を介して、前記アプライアンスによって受信することを含む、請求項1に記載の方法。
  17. 前記ストリーミングされたアプリケーションまたは前記データファイルの一方の前記伝送のネットワークパケットを、前記プールされたトランスポート層接続を介して、前記アプライアンスによって多重化することを含む、請求項16に記載の方法。
  18. 前記リモートクライアントは、第1ネットワーク上に位置し、前記サーバまたは前記アプライアンスの一方は、第2ネットワーク上に位置する、請求項1に記載の方法。
  19. 前記リモートクライアントは、支社に位置し、前記サーバまたは前記アプライアンスの一方は、データセンターに位置する、請求項1に記載の方法。
  20. リモートクライアントに対するコンピューティング環境の提供を加速するシステムであって、
    1つまたは複数のクライアントと1つまたは複数のサーバとの間の通信を加速するためのアプライアンスと、
    アプリケーションを実行するためのリモートクライアントからの要求を受信するサーバであって、前記要求に応じて実行するアプリケーションを、前記アプライアンスを介して前記リモートクライアントにストリーミングするサーバと
    を含み、
    前記サーバは、前記ストリーミングされたアプリケーションによるアクセスのために、前記リモートクライアントによって要求されたデータファイルを伝送し、
    前記アプライアンスは、前記リモートクライアントに対する前記データファイルの伝送を加速する、
    システム。
  21. 前記データファイルは、前記アプリケーションによって使用可能なフォーマットである、請求項20に記載のシステム。
  22. 前記アプリケーションは、前記データファイルのファイルタイプに関連付けられている、請求項21に記載のシステム。
  23. 前記アプライアンスは、前記リモートクライアントに対する前記アプリケーションのストリーミングを加速する、請求項20に記載のシステム。
  24. 前記リモートクライアントと前記サーバとの間の通信を加速する加速プログラムを前記リモートクライアント上に含む、請求項20に記載のシステム。
  25. 前記アプライアンスは、前記リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー(SSL)接続の一方を確立する、請求項20に記載のシステム。
  26. 前記アプライアンスは、前記サーバとの接続またはセッションの一方を確立するための要求を前記クライアントからの受信の後に、加速プログラムを前記リモートクライアントに伝送する、請求項20に記載のシステム。
  27. 前記リモートクライアントは、前記アプライアンスからの受信の後に、前記加速プログラムを自動的にインストールして実行する、請求項26に記載のシステム。
  28. 前記リモートクライアント上の前記加速プログラムは、
    圧縮と、
    解凍と、
    伝送制御プロトコルの多重化と、
    伝送制御プロトコルのバッファリングと、
    キャッシングと
    の加速技術のうちの1つを実行する、請求項26に記載のシステム。
  29. 前記リモートクライアントは、前記アプリケーションまたは前記サーバの一方に対して透過的に前記加速プログラムを実行する、請求項26に記載のシステム。
  30. 前記アプライアンスは、前記アプリケーションが加速可能であると決定し、前記決定に応じて、加速プログラムを前記リモートクライアントに対して伝送することが可能である、請求項20に記載のシステム。
  31. 前記アプライアンスは、
    圧縮と、
    伝送制御プロトコルの多重化と、
    伝送制御プロトコルのバッファリングと、
    キャッシングと
    の加速技術のうちの1つを実行することにより、前記データファイルの前記伝送または前記アプリケーションの前記ストリーミングの一方を加速する、請求項20に記載のシステム。
  32. 前記アプライアンスは、前記データファイルをキャッシュするためのキャッシュを備える、請求項20に記載のシステム。
  33. 前記アプライアンスは、前記データファイルに対する要求を傍受し、前記リモートクライアントに対し、前記要求に応じて前記キャッシュされたデータファイルを伝送する、請求項32に記載のシステム。
  34. 前記アプライアンスは、前記サーバから受信した前記データファイルを圧縮し、前記圧縮されたデータファイルを前記リモートクライアントに伝送する、請求項23に記載のシステム。
  35. 前記アプライアンスは、前記ストリーミングされたアプリケーションまたは前記データファイルの一方を前記サーバから、複数のクライアントによって使用されるプールされたトランスポート層接続を介して受信する、請求項23に記載のシステム。
  36. 前記アプライアンスは、プールされたトランスポート層接続を介して、前記ストリーミングされたアプリケーションまたは前記データファイルの一方の伝送のネットワークパケットを多重化する、請求項32に記載のシステム。
  37. 前記リモートクライアントは、第1ネットワーク上に位置し、前記サーバまたは前記アプライアンスの一方は、第2ネットワーク上に位置する、請求項23に記載のシステム。
  38. 前記リモートクライアントは、支社に位置し、前記サーバまたは前記アプライアンスの一方は、データセンターに位置する、請求項23に記載のシステム。
  39. クライアントエージェントおよびアプライアンスを介して、リモートクライアントに対するコンピューティング環境の提供を加速する方法であって、
    (a)アプライアンスを介してクライアントエージェントに対し、リモートクライアントによって要求された実行用のアプリケーションをストリーミングするステップと、
    (b)前記アプライアンスを介して、前記リモートクライアントによって要求されたデータファイルを伝送するステップであって、前記データファイルは、前記ストリーミングされたアプリケーションによってアクセスされる、ステップと、
    (c)前記クライアントエージェントまたは前記アプライアンスの一方によって、前記リモートクライアントに対する前記データファイルの提供を加速するステップと
    を含む、方法。
  40. 前記クライアントエージェントまたは前記アプライアンスの一方によって、前記リモートクライアントに対する前記ストリーミングされたアプリケーションの提供を加速することを含む、請求項39に記載の方法。
  41. 前記クライアントエージェントまたはアプライアンスの一方によって、
    圧縮と、
    伝送制御プロトコルの多重化と、
    伝送制御プロトコルのバッファリングと、
    キャッシングと
    の加速技術のうちの1つを実行することにより、前記データファイルまたは前記ストリーミングされたアプリケーションの一方の提供を加速することを含む、請求項39に記載の方法。
  42. 前記クライアントエージェントおよび前記アプライアンスを介して、前記リモートクライアントに対する仮想プライベートネットワーク接続、またはセキュアソケットレイヤー(SSL)接続の一方を確立することを含む、請求項39に記載の方法。
  43. 前記クライアントエージェントまたは前記アプライアンスの一方によって、前記データファイルをキャッシュすることを含む、請求項39に記載の方法。
  44. 前記クライアントエージェントまたは前記アプライアンスの一方によって、前記データファイルに対する前記リモートクライアントからの要求を傍受し、前記要求に応じて、前記キャッシュされたデータファイルを提供することを含む、請求項39に記載の方法。
  45. サーバから受信した前記データファイルを前記アプライアンスによって圧縮し、前記圧縮されたデータファイルを前記クライアントエージェントに伝送することを含む、請求項39に記載の方法。
  46. 前記アプライアンスから受信した前記圧縮されたデータファイルを、前記クライアントエージェントによって解凍し、前記リモートクライアント上で実行する前記ストリーミングされたアプリケーションに対して、前記データファイルを提供することを含む、請求項45に記載の方法。
  47. 前記ストリーミングされたアプリケーションまたは前記データファイルの一方を前記アプライアンスから、前記アプライアンスとサーバとの間のプールされたトランスポート層接続を介して、前記クライアントエージェントによって受信することを含む、請求項39に記載の方法。
  48. 前記クライアントエージェントに対する前記ストリーミングされたアプリケーションまたは前記データファイルの一方の伝送のネットワークパケットを、前記プールされたトランスポート層接続を介して、前記アプライアンスによって多重化することを含む、請求項47に記載の方法。
  49. 前記クライアントエージェントと前記アプライアンスとの間に確立された第1トランスポート層接続と、前記アプライアンスとサーバとの間に確立された第2トランスポート層接続との間で、前記ストリーミングされたアプリケーションまたは前記データファイルの一方を伝送することを含む、請求項39に記載の方法。
  50. クライアントエージェントを介して、リモートクライアントに対するコンピューティング環境の提供を加速する方法であって、
    (a)サーバから実行のために要求され、ストリーミングされたアプリケーションを、クライアントエージェントによって受信するステップであって、前記リモートクライアントは、前記クライアントエージェントを介して前記サーバと通信する、ステップと、
    (b)前記ストリーミングされたアプリケーションによってアクセスされるデータファイルを、前記クライアントエージェントによって前記サーバから要求するステップと、
    (c)前記リモートクライアントの前記ストリーミングされたアプリケーションに対する前記データファイルの提供を、前記クライアントエージェントによって加速するステップと
    を含む方法。
  51. 前記リモートクライアントに対する前記ストリーミングされたアプリケーションの提供を、前記クライアントエージェントによって加速することを含む、請求項50に記載の方法。
  52. 前記データファイルまたは前記ストリーミングされたアプリケーションの一方の提供を、前記クライアントエージェントによって、
    圧縮と、
    伝送制御プロトコルの多重化と、
    伝送制御プロトコルのバッファリングと、
    キャッシングと
    の加速技術のうちの1つを実行することにより加速することを含む、請求項50に記載の方法。
  53. 前記サーバに対する前記リモートクライアントの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー(SSL)接続の一方を、前記クライアントエージェントを介して確立することを含む、請求項50に記載の方法。
  54. 前記データファイルまたは前記ストリーミングされたアプリケーションの一部分を、前記クライアントエージェントによってキャッシュすることを含む、請求項50に記載の方法。
  55. 前前記クライアントエージェントによって、前記データファイルに対する前記リモートクライアントの要求を傍受し、前記要求に応じて、キャッシュされたデータファイルの一部分を提供する、請求項54に記載の方法。
  56. 前記クライアントエージェントによって、前記ストリーミングされたアプリケーションに対するユーザの要求を傍受し、前記要求に応じて、ストリーミングされたアプリケーションの一部分を提供するステップを含む、請求項54に記載の方法。
  57. アプライアンスまたは前記サーバの一方から受信された、圧縮されたデータファイルを前記クライアントエージェントによって解凍し、前記リモートクライアント上で実行する前記ストリーミングされたアプリケーションに対して前記データファイルを提供することを含む、請求項50に記載の方法。
  58. 前記ストリーミングされたアプリケーションまたは前記データファイルの一方を、前記クライアントエージェントによって、プールされたトランスポート層接続を介して受信することを含む、請求項50に記載の方法。
  59. 前記ストリーミングされたアプリケーションまたは前記データファイルの一方のために受信したネットワークパケットを、前記クライアントエージェントによって、前記プールされたトランスポート層接続を介して、多重分離することを含む、請求項58に記載の方法。
  60. 前記クライアントエージェントとアプライアンスとの間に確立された第1トランスポート層接続と、前記アプライアンスとサーバとの間に確立された第2トランスポート層接続との間で、前記ストリーミングされたアプリケーションまたは前記データファイルの一方を受信することを含む、請求項50に記載の方法。
JP2009505595A 2006-04-12 2007-04-11 リモートユーザに対するコンピューティング環境の提供を加速するためのシステムおよび方法 Pending JP2009536377A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US74472006P 2006-04-12 2006-04-12
PCT/US2007/066433 WO2007121241A2 (en) 2006-04-12 2007-04-11 Systems and methods for accelerating delivery of a computing environment to remote user

Publications (2)

Publication Number Publication Date
JP2009536377A true JP2009536377A (ja) 2009-10-08
JP2009536377A5 JP2009536377A5 (ja) 2010-05-13

Family

ID=38595542

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009505595A Pending JP2009536377A (ja) 2006-04-12 2007-04-11 リモートユーザに対するコンピューティング環境の提供を加速するためのシステムおよび方法

Country Status (10)

Country Link
US (3) US8151323B2 (ja)
EP (1) EP2005712B1 (ja)
JP (1) JP2009536377A (ja)
KR (1) KR20080110894A (ja)
CN (2) CN101473628A (ja)
AU (1) AU2007238099B2 (ja)
BR (1) BRPI0709986B1 (ja)
CA (1) CA2646414A1 (ja)
IL (1) IL194567A0 (ja)
WO (1) WO2007121241A2 (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013009329A (ja) * 2011-05-20 2013-01-10 Nippon Hoso Kyokai <Nhk> 受信機
KR20150082723A (ko) * 2014-01-06 2015-07-16 에스케이플래닛 주식회사 데이터의 저장 효율성을 높이기 위한 사용자 단말기 및 사용자 단말기의 데이터 저장 방법
JP2015531517A (ja) * 2012-09-20 2015-11-02 アルカテル−ルーセント システム制御
JP2015537269A (ja) * 2012-09-07 2015-12-24 オラクル・インターナショナル・コーポレイション Ldapベースのマルチテナント・インクラウド・アイデンティティ管理システム
JP2017531337A (ja) * 2014-07-10 2017-10-19 アール・エイ・アイ・ストラテジック・ホールディングス・インコーポレイテッド 読み出し要求に基づくデバイスの操作を制御するためのシステム及び関連する方法、装置、ならびにコンピュータプログラム製品
JP2017538987A (ja) * 2014-09-30 2017-12-28 クアルコム,インコーポレイテッド トランスポートアクセラレータによるユーザエージェントシグナリング要求加速のためのシステムおよび方法
KR20180033667A (ko) * 2016-09-26 2018-04-04 삼성전자주식회사 스트리밍 서비스를 제공하는 방법 및 장치
US10581867B2 (en) 2012-09-07 2020-03-03 Oracle International Corporation Multi-tenancy identity management system

Families Citing this family (798)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7343413B2 (en) 2000-03-21 2008-03-11 F5 Networks, Inc. Method and system for optimizing a network by independently scaling control segments and data flow
US8380854B2 (en) 2000-03-21 2013-02-19 F5 Networks, Inc. Simplified method for processing multiple connections from the same client
EP1466261B1 (en) 2002-01-08 2018-03-07 Seven Networks, LLC Connection architecture for a mobile network
US7035595B1 (en) * 2002-01-10 2006-04-25 Berkana Wireless, Inc. Configurable wireless interface
US7461262B1 (en) * 2002-03-19 2008-12-02 Cisco Technology, Inc. Methods and apparatus for providing security in a caching device
US8370420B1 (en) 2002-07-11 2013-02-05 Citrix Systems, Inc. Web-integrated display of locally stored content objects
US7760729B2 (en) 2003-05-28 2010-07-20 Citrix Systems, Inc. Policy based network address translation
US20040243852A1 (en) 2003-05-28 2004-12-02 Rosenstein Adam H. Method, system and software for state signing of internet resources
CA2527501A1 (en) 2003-05-28 2004-12-09 Caymas Systems, Inc. Multilayer access control security system
US7978716B2 (en) 2003-11-24 2011-07-12 Citrix Systems, Inc. Systems and methods for providing a VPN solution
US8566946B1 (en) * 2006-04-20 2013-10-22 Fireeye, Inc. Malware containment on connection
US7757074B2 (en) 2004-06-30 2010-07-13 Citrix Application Networking, Llc System and method for establishing a virtual private network
US8739274B2 (en) 2004-06-30 2014-05-27 Citrix Systems, Inc. Method and device for performing integrated caching in a data communication network
US8495305B2 (en) 2004-06-30 2013-07-23 Citrix Systems, Inc. Method and device for performing caching of dynamically generated objects in a data communication network
KR20070037648A (ko) 2004-07-23 2007-04-05 사이트릭스 시스템스, 인크. 주변장치에서 가상 사설망 게이트웨이로 패킷을 라우팅하기위한 방법 및 시스템
US7808906B2 (en) 2004-07-23 2010-10-05 Citrix Systems, Inc. Systems and methods for communicating a lossy protocol via a lossless protocol using false acknowledgements
US8095940B2 (en) 2005-09-19 2012-01-10 Citrix Systems, Inc. Method and system for locating and accessing resources
US8171479B2 (en) 2004-09-30 2012-05-01 Citrix Systems, Inc. Method and apparatus for providing an aggregate view of enumerated system resources from various isolation layers
US7680758B2 (en) 2004-09-30 2010-03-16 Citrix Systems, Inc. Method and apparatus for isolating execution of software applications
US7810089B2 (en) 2004-12-30 2010-10-05 Citrix Systems, Inc. Systems and methods for automatic installation and execution of a client-side acceleration program
US8549149B2 (en) 2004-12-30 2013-10-01 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing
US8700695B2 (en) 2004-12-30 2014-04-15 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP pooling
US8954595B2 (en) 2004-12-30 2015-02-10 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP buffering
US8706877B2 (en) 2004-12-30 2014-04-22 Citrix Systems, Inc. Systems and methods for providing client-side dynamic redirection to bypass an intermediary
US8255456B2 (en) 2005-12-30 2012-08-28 Citrix Systems, Inc. System and method for performing flash caching of dynamically generated objects in a data communication network
WO2006081032A2 (en) 2005-01-24 2006-08-03 Citrix Systems, Inc. Systems and methods for performing caching of dynamically generated objects in a network
US7843938B1 (en) 2005-02-25 2010-11-30 Citrix Systems, Inc. QoS optimization with compression
US8438633B1 (en) 2005-04-21 2013-05-07 Seven Networks, Inc. Flexible real-time inbox access
AU2006239882B2 (en) * 2005-04-25 2009-10-29 Network Appliance, Inc. System and method for caching network file systems
US8167722B2 (en) 2005-05-11 2012-05-01 Qualcomm Atheros, Inc Distributed processing system and method
US7756826B2 (en) * 2006-06-30 2010-07-13 Citrix Systems, Inc. Method and systems for efficient delivery of previously stored content
US8943304B2 (en) 2006-08-03 2015-01-27 Citrix Systems, Inc. Systems and methods for using an HTTP-aware client agent
US9407608B2 (en) 2005-05-26 2016-08-02 Citrix Systems, Inc. Systems and methods for enhanced client side policy
US9621666B2 (en) 2005-05-26 2017-04-11 Citrix Systems, Inc. Systems and methods for enhanced delta compression
US9692725B2 (en) 2005-05-26 2017-06-27 Citrix Systems, Inc. Systems and methods for using an HTTP-aware client agent
WO2006136660A1 (en) 2005-06-21 2006-12-28 Seven Networks International Oy Maintaining an ip connection in a mobile network
US20070002367A1 (en) * 2005-06-29 2007-01-04 Eric Yuan Methods and apparatuses for selectively controlling a remote device
US8095774B1 (en) 2007-07-05 2012-01-10 Silver Peak Systems, Inc. Pre-fetching data into a memory
US8171238B1 (en) 2007-07-05 2012-05-01 Silver Peak Systems, Inc. Identification of data stored in memory
US8370583B2 (en) 2005-08-12 2013-02-05 Silver Peak Systems, Inc. Network memory architecture for providing data based on local accessibility
US8392684B2 (en) 2005-08-12 2013-03-05 Silver Peak Systems, Inc. Data encryption in a network memory architecture for providing data based on local accessibility
WO2009149416A1 (en) * 2008-06-05 2009-12-10 3Tera, Inc. Automated filer technique for use in virtualized appliances and applications
US8811431B2 (en) 2008-11-20 2014-08-19 Silver Peak Systems, Inc. Systems and methods for compressing packet data
US8929402B1 (en) 2005-09-29 2015-01-06 Silver Peak Systems, Inc. Systems and methods for compressing packet data by predicting subsequent data
US8489562B1 (en) 2007-11-30 2013-07-16 Silver Peak Systems, Inc. Deferred data storage
US9455844B2 (en) * 2005-09-30 2016-09-27 Qualcomm Incorporated Distributed processing system and method
US8997246B2 (en) * 2005-10-04 2015-03-31 Disney Enterprises, Inc. System and/or method for authentication and/or authorization via a network
US8131825B2 (en) 2005-10-07 2012-03-06 Citrix Systems, Inc. Method and a system for responding locally to requests for file metadata associated with files stored remotely
EP1955526B1 (en) 2005-12-02 2010-05-05 Citrix Systems, Inc. Method and apparatus for providing authentication credentials from a proxy server to a virtualized computing environment to access a remote resource
US7924884B2 (en) 2005-12-20 2011-04-12 Citrix Systems, Inc. Performance logging using relative differentials and skip recording
US8301839B2 (en) 2005-12-30 2012-10-30 Citrix Systems, Inc. System and method for performing granular invalidation of cached dynamically generated objects in a data communication network
US7921184B2 (en) 2005-12-30 2011-04-05 Citrix Systems, Inc. System and method for performing flash crowd caching of dynamically generated objects in a data communication network
US8151323B2 (en) 2006-04-12 2012-04-03 Citrix Systems, Inc. Systems and methods for providing levels of access and action control via an SSL VPN appliance
EP2023245B1 (en) * 2006-04-26 2016-02-17 Nippon Telegraph And Telephone Corporation Load control device and its method
US9037542B2 (en) * 2006-05-03 2015-05-19 Oracle International Corporation Reducing programming complexity in client applications when interfacing with database servers operating with different programming interfaces
US7971182B1 (en) * 2006-05-09 2011-06-28 Vmware, Inc. Application environment specifications for provisioning application specific runtime environments using undefined symbols
US7702796B2 (en) * 2006-05-18 2010-04-20 International Business Machines Corporation Recovering a pool of connections
US8224975B1 (en) * 2006-05-24 2012-07-17 Avaya Inc. Web service initiation protocol for multimedia and voice communication over internet protocol
US20070280254A1 (en) * 2006-05-31 2007-12-06 Microsoft Corporation Enhanced network communication
US7778184B2 (en) * 2006-06-06 2010-08-17 Murata Kikai Kabushiki Kaisha Communication system and remote diagnosis system
US7853753B2 (en) * 2006-06-30 2010-12-14 Verint Americas Inc. Distributive network control
US8971217B2 (en) * 2006-06-30 2015-03-03 Microsoft Technology Licensing, Llc Transmitting packet-based data items
US20080018649A1 (en) * 2006-07-18 2008-01-24 Zheng Yuan Methods and apparatuses for utilizing an application on a remote device
US8885632B2 (en) 2006-08-02 2014-11-11 Silver Peak Systems, Inc. Communications scheduler
US8755381B2 (en) 2006-08-02 2014-06-17 Silver Peak Systems, Inc. Data matching using flow based packet data storage
US8626946B2 (en) * 2006-08-03 2014-01-07 Citrix Systems, Inc. Systems and methods for hierarchical global load balancing
US8392977B2 (en) * 2006-08-03 2013-03-05 Citrix Systems, Inc. Systems and methods for using a client agent to manage HTTP authentication cookies
US8561155B2 (en) 2006-08-03 2013-10-15 Citrix Systems, Inc. Systems and methods for using a client agent to manage HTTP authentication cookies
US8572721B2 (en) * 2006-08-03 2013-10-29 Citrix Systems, Inc. Methods and systems for routing packets in a VPN-client-to-VPN-client connection via an SSL/VPN network appliance
US7953889B2 (en) 2006-08-03 2011-05-31 Citrix Systems, Inc. Systems and methods for routing VPN traffic around network disruption
US8244883B2 (en) 2006-08-03 2012-08-14 Citrix Systems, Inc. Systems and methods of for providing multi-mode transport layer compression
US8677007B2 (en) 2006-08-03 2014-03-18 Citrix Systems, Inc. Systems and methods for bypassing an appliance
US7917963B2 (en) * 2006-08-09 2011-03-29 Antenna Vaultus, Inc. System for providing mobile data security
US7769869B2 (en) * 2006-08-21 2010-08-03 Citrix Systems, Inc. Systems and methods of providing server initiated connections on a virtual private network
US8418243B2 (en) * 2006-08-21 2013-04-09 Citrix Systems, Inc. Systems and methods of providing an intranet internet protocol address to a client on a virtual private network
US8451806B2 (en) * 2006-08-21 2013-05-28 Citrix Sysrems, Inc. Systems and methods for pinging a user's intranet IP address
US8213393B2 (en) 2006-08-21 2012-07-03 Citrix Systems, Inc. Methods for associating an IP address to a user via an appliance
US20080072060A1 (en) * 2006-08-28 2008-03-20 Susan Cannon Memory device for cryptographic operations
US7743258B2 (en) * 2006-08-28 2010-06-22 Sandisk Corporation Method for interacting with a memory device in cryptographic operations
KR100856409B1 (ko) * 2006-10-09 2008-09-04 삼성전자주식회사 로컬 네트워크 장치의 원격 제어 방법 및 그 장치
US8238882B2 (en) * 2006-10-19 2012-08-07 Research In Motion Limited System and method for storage of electronic mail
US8355709B2 (en) * 2006-10-23 2013-01-15 Qualcomm Incorporated Device that determines whether to launch an application locally or remotely as a webapp
US8583793B2 (en) * 2006-11-20 2013-11-12 Apple Inc. System and method for providing a hypertext transfer protocol service multiplexer
WO2008061483A1 (fr) * 2006-11-24 2008-05-29 Hangzhou H3C Technologies Co., Ltd. Procédé et appareil d'identification de contenu de données
US8935296B2 (en) * 2006-12-14 2015-01-13 Taylor Morgen Corp. Method of facilitating contact between mutually interested people
CN101206649B (zh) * 2006-12-20 2011-06-22 鸿富锦精密工业(深圳)有限公司 多任务解析系统及方法
FR2911026B1 (fr) * 2006-12-29 2009-04-24 Ubicmedia Soc Par Actions Simp Procede et dispositif pour controler et gerer les fichiers multimedias compresses et librement telecharges
US8918427B1 (en) * 2006-12-29 2014-12-23 Symantec Operating Corporation Virtualization of file input/output operations
EP2835951B1 (en) 2007-01-17 2018-08-22 Intertrust Technologies Corporation Methods, systems, and apparatus for fragmented file sharing
US20080178010A1 (en) 2007-01-18 2008-07-24 Vaterlaus Robert K Cryptographic web service
US20080194233A1 (en) * 2007-02-12 2008-08-14 Bridgewater Systems Corp. Systems and methods for context-aware service subscription management
US9442708B1 (en) * 2007-02-16 2016-09-13 Bladelogic, Inc. System and method for installing, updating and uninstalling applications
US9274811B1 (en) 2007-02-16 2016-03-01 Bladelogic, Inc. System and method for cloud provisioning and application deployment
US20080201332A1 (en) * 2007-02-20 2008-08-21 Souders Steven K System and method for preloading content on the basis of user context
US7844710B2 (en) * 2007-02-27 2010-11-30 Novell, Inc. Proxy caching for directory services
US8201218B2 (en) 2007-02-28 2012-06-12 Microsoft Corporation Strategies for securely applying connection policies via a gateway
US7809818B2 (en) 2007-03-12 2010-10-05 Citrix Systems, Inc. Systems and method of using HTTP head command for prefetching
US7760642B2 (en) 2007-03-12 2010-07-20 Citrix Systems, Inc. Systems and methods for providing quality of service precedence in TCP congestion control
US7706266B2 (en) 2007-03-12 2010-04-27 Citrix Systems, Inc. Systems and methods of providing proxy-based quality of service
US7532134B2 (en) 2007-03-12 2009-05-12 Citrix Systems, Inc. Systems and methods for sharing compression histories between multiple devices
US7827237B2 (en) 2007-03-12 2010-11-02 Citrix Systems, Inc. Systems and methods for identifying long matches of data in a compression history
US7619545B2 (en) 2007-03-12 2009-11-17 Citrix Systems, Inc. Systems and methods of using application and protocol specific parsing for compression
US7796510B2 (en) 2007-03-12 2010-09-14 Citrix Systems, Inc. Systems and methods for providing virtual fair queueing of network traffic
US7584294B2 (en) 2007-03-12 2009-09-01 Citrix Systems, Inc. Systems and methods for prefetching objects for caching using QOS
US8701010B2 (en) 2007-03-12 2014-04-15 Citrix Systems, Inc. Systems and methods of using the refresh button to determine freshness policy
US7460038B2 (en) 2007-03-12 2008-12-02 Citrix Systems, Inc. Systems and methods of clustered sharing of compression histories
US8255570B2 (en) 2007-03-12 2012-08-28 Citrix Systems, Inc. Systems and methods of compression history expiration and synchronization
US7720936B2 (en) 2007-03-12 2010-05-18 Citrix Systems, Inc. Systems and methods of freshening and prefreshening a DNS cache
US7865585B2 (en) 2007-03-12 2011-01-04 Citrix Systems, Inc. Systems and methods for providing dynamic ad hoc proxy-cache hierarchies
US7783757B2 (en) 2007-03-12 2010-08-24 Citrix Systems, Inc. Systems and methods of revalidating cached objects in parallel with request for object
US8037126B2 (en) 2007-03-12 2011-10-11 Citrix Systems, Inc. Systems and methods of dynamically checking freshness of cached objects based on link status
US8504775B2 (en) 2007-03-12 2013-08-06 Citrix Systems, Inc Systems and methods of prefreshening cached objects based on user's current web page
US8103783B2 (en) 2007-03-12 2012-01-24 Citrix Systems, Inc. Systems and methods of providing security and reliability to proxy caches
KR20080090976A (ko) * 2007-04-06 2008-10-09 엘지전자 주식회사 콘텐츠 처리 방법 및 그 단말
US8539480B2 (en) * 2007-04-09 2013-09-17 Sugarcrm Inc. Multi-instance “shadow” system and method for automated resource redundancy reduction across dynamic language applications utilizing application of dynamically generated templates
US8209669B2 (en) * 2007-04-20 2012-06-26 Sap Ag System and method for supporting software
US8756293B2 (en) * 2007-04-23 2014-06-17 Nholdings Sa Providing a user with virtual computing services
US20080270911A1 (en) * 2007-04-24 2008-10-30 Nehal Dantwala System and method to develop a custom application for a multi-function peripheral (mfp)
US9547415B2 (en) * 2007-04-30 2017-01-17 Oracle International Corporation Suite-wide navigation
US8347263B1 (en) 2007-05-09 2013-01-01 Vmware, Inc. Repository including installation metadata for executable applications
US8219987B1 (en) 2007-08-24 2012-07-10 Vmware, Inc. Optimized virtual machine specification for provisioning application specific runtime environment
US11262996B2 (en) 2007-05-09 2022-03-01 Vmware, Inc. Repository including exclusion list
US9015180B1 (en) * 2007-05-09 2015-04-21 Vmware, Inc. Repository including file identification
US8577937B1 (en) 2007-05-09 2013-11-05 Vmware, Inc. Repository including exclusion list
US7756130B1 (en) * 2007-05-22 2010-07-13 At&T Mobility Ii Llc Content engine for mobile communications systems
US8805425B2 (en) 2007-06-01 2014-08-12 Seven Networks, Inc. Integrated messaging
US8407696B2 (en) * 2007-06-04 2013-03-26 International Business Machines Corporation Method for delivering, testing, and applying software patches or other changes to a conventionally installed application in virtual application containers
US7945639B2 (en) * 2007-06-27 2011-05-17 Microsoft Corporation Processing write requests with server having global knowledge
US20090006537A1 (en) * 2007-06-29 2009-01-01 Microsoft Corporation Virtual Desktop Integration with Terminal Services
KR101275995B1 (ko) * 2007-06-29 2013-06-19 차이나 모바일 커뮤니케이션즈 코포레이션 정보 가전의 데이터 저장 시스템 및 데이터 처리 방법
US8347286B2 (en) 2007-07-16 2013-01-01 International Business Machines Corporation Method, system and program product for managing download requests received to download files from a server
US9264483B2 (en) 2007-07-18 2016-02-16 Hammond Development International, Inc. Method and system for enabling a communication device to remotely execute an application
US8176409B2 (en) * 2007-07-24 2012-05-08 De Novo Software System and method for electronic publication of scientific data and analysis
US10540651B1 (en) * 2007-07-31 2020-01-21 Intuit Inc. Technique for restricting access to information
US9009327B2 (en) * 2007-08-03 2015-04-14 Citrix Systems, Inc. Systems and methods for providing IIP address stickiness in an SSL VPN session failover environment
KR100889670B1 (ko) * 2007-08-08 2009-03-19 삼성에스디에스 주식회사 모바일 디바이스상에서 tcp 기반의 서비스거부 공격의 차단 방법
US20090055835A1 (en) * 2007-08-20 2009-02-26 Telefonaktiebolaget Lm Ericsson (Publ) System and Method for Managing License Capacity in a Telecommunication Network
US8392529B2 (en) * 2007-08-27 2013-03-05 Pme Ip Australia Pty Ltd Fast file server methods and systems
US8908700B2 (en) 2007-09-07 2014-12-09 Citrix Systems, Inc. Systems and methods for bridging a WAN accelerator with a security gateway
CA2697936A1 (en) * 2007-09-12 2009-03-19 Citrix Systems, Inc. Methods and systems for generating desktop environments providing integrated access to remote and local resources
US8024771B2 (en) * 2007-09-19 2011-09-20 International Business Machines Corporation Policy-based method for configuring an access control service
US20090083422A1 (en) * 2007-09-25 2009-03-26 Network Connectivity Solutions Corp. Apparatus and method for improving network infrastructure
US7954145B2 (en) * 2007-09-27 2011-05-31 Novell, Inc. Dynamically configuring a client for virtual private network (VPN) access
KR20100068473A (ko) 2007-09-28 2010-06-23 엑세리온 악티에볼라그 네트워크 오퍼레이팅 시스템
KR101433859B1 (ko) * 2007-10-12 2014-08-27 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 파일 데이터 관리 방법
US7925694B2 (en) 2007-10-19 2011-04-12 Citrix Systems, Inc. Systems and methods for managing cookies via HTTP content layer
US8171483B2 (en) 2007-10-20 2012-05-01 Citrix Systems, Inc. Method and system for communicating between isolation environments
WO2009052529A1 (en) * 2007-10-20 2009-04-23 Citrix Systems, Inc. Methods and systems for remoting three dimensional graphical data
US7917584B2 (en) * 2007-10-22 2011-03-29 Xcerion Aktiebolag Gesture-based collaboration
US9122397B2 (en) * 2007-10-26 2015-09-01 Emc Corporation Exposing storage resources with differing capabilities
US9413825B2 (en) * 2007-10-31 2016-08-09 Emc Corporation Managing file objects in a data storage system
US20090112789A1 (en) * 2007-10-31 2009-04-30 Fernando Oliveira Policy based file management
US7836018B2 (en) * 2007-10-24 2010-11-16 Emc Corporation Simultaneously accessing file objects through web services and file services
US20090112921A1 (en) * 2007-10-31 2009-04-30 Fernando Oliveira Managing files using layout storage objects
CN101836184B (zh) * 2007-10-24 2013-07-17 伊姆西公司 访问数据文件对象的方法
US7840653B1 (en) * 2007-10-25 2010-11-23 United Services Automobile Association (Usaa) Enhanced throttle management system
JP4936549B2 (ja) * 2007-10-30 2012-05-23 キヤノン株式会社 サーバ装置、管理システム、管理方法、記憶媒体、プログラム
US20090112805A1 (en) * 2007-10-31 2009-04-30 Zachary Adam Garbow Method, system, and computer program product for implementing search query privacy
DE102007057248A1 (de) * 2007-11-16 2009-05-20 T-Mobile International Ag Verbindungsschicht für Datenbanken
US8307115B1 (en) * 2007-11-30 2012-11-06 Silver Peak Systems, Inc. Network memory mirroring
JP5088735B2 (ja) * 2007-12-07 2012-12-05 インターナショナル・ビジネス・マシーンズ・コーポレーション データベースへのアクセスを制御する技術
US9002828B2 (en) 2007-12-13 2015-04-07 Seven Networks, Inc. Predictive content delivery
US8661524B2 (en) * 2007-12-14 2014-02-25 Novell, Inc. Selective desktop control of virtual private networks (VPN's) in a multiuser environment
JP5507046B2 (ja) 2007-12-27 2014-05-28 株式会社インテック サービス提供システム
US8234633B2 (en) * 2008-01-09 2012-07-31 Sap Ag Incident simulation support environment and business objects associated with the incident
US8291406B2 (en) * 2008-01-16 2012-10-16 Verizon Patent And Licensing Inc. Data imaging system and methods
US8566431B2 (en) * 2008-01-16 2013-10-22 Razer (Asia-Pacific) Pte. Ltd. Identification device and method for device identification
US8805949B2 (en) * 2008-01-16 2014-08-12 Netapp, Inc. System and method for populating a cache using behavioral adaptive policies
US8756700B2 (en) 2008-01-16 2014-06-17 Verizon Patent And Licensing Inc. Custom data image building
US8862657B2 (en) 2008-01-25 2014-10-14 Seven Networks, Inc. Policy based content service
CN105450674B (zh) * 2008-01-26 2019-05-10 思杰系统有限公司 用于配置和细粒度策略驱动web内容检测和重写的系统和方法
US8646067B2 (en) * 2008-01-26 2014-02-04 Citrix Systems, Inc. Policy driven fine grain URL encoding mechanism for SSL VPN clientless access
EP2241081B1 (en) 2008-01-26 2018-05-02 Citrix Systems, Inc. Systems and methods for fine grain policy driven cookie proxying
US20090193338A1 (en) 2008-01-28 2009-07-30 Trevor Fiatal Reducing network and battery consumption during content delivery and playback
US20090193147A1 (en) * 2008-01-30 2009-07-30 Viasat, Inc. Methods and Systems for the Use of Effective Latency to Make Dynamic Routing Decisions for Optimizing Network Applications
US8881172B2 (en) * 2008-02-04 2014-11-04 Red Hat, Inc. Configuration interface manager
US8442052B1 (en) 2008-02-20 2013-05-14 Silver Peak Systems, Inc. Forward packet recovery
US8612993B2 (en) * 2008-02-21 2013-12-17 Microsoft Corporation Identity persistence via executable scripts
US8145768B1 (en) * 2008-02-26 2012-03-27 F5 Networks, Inc. Tuning of SSL session caches based on SSL session IDS
US8683062B2 (en) 2008-02-28 2014-03-25 Microsoft Corporation Centralized publishing of network resources
US8806037B1 (en) * 2008-02-29 2014-08-12 Netapp, Inc. Remote support automation for a storage server
US9323751B2 (en) * 2008-03-05 2016-04-26 International Business Machines Corporation Controlling access to documents by parties
US7895259B2 (en) * 2008-03-26 2011-02-22 International Business Machines Corporation Method for preventing use of multiple application instances
US8560593B2 (en) * 2008-03-27 2013-10-15 Dell Software Inc. System for provisioning, allocating, and managing virtual and physical desktop computers in a network computing environment
CN101547161B (zh) 2008-03-28 2012-09-26 阿里巴巴集团控股有限公司 文件夹传输系统、文件夹传输装置及文件夹传输方法
US8225106B2 (en) * 2008-04-02 2012-07-17 Protegrity Corporation Differential encryption utilizing trust modes
US8019629B1 (en) 2008-04-07 2011-09-13 United Services Automobile Association (Usaa) Systems and methods for automobile accident claims initiation
US20090259757A1 (en) * 2008-04-15 2009-10-15 Microsoft Corporation Securely Pushing Connection Settings to a Terminal Server Using Tickets
US20090265586A1 (en) * 2008-04-18 2009-10-22 Sun Microsystems, Inc. Method and system for installing software deliverables
US8806053B1 (en) 2008-04-29 2014-08-12 F5 Networks, Inc. Methods and systems for optimizing network traffic using preemptive acknowledgment signals
US7840656B2 (en) * 2008-04-30 2010-11-23 International Business Machines Corporation Policy control architecture for blade servers upon inserting into server chassis
JP5247245B2 (ja) 2008-05-30 2013-07-24 キヤノン株式会社 情報処理装置及びインストール方法
US20090300208A1 (en) * 2008-06-02 2009-12-03 Viasat, Inc. Methods and systems for acceleration of mesh network configurations
US8787947B2 (en) 2008-06-18 2014-07-22 Seven Networks, Inc. Application discovery on mobile devices
US7814140B2 (en) * 2008-06-19 2010-10-12 Unisys Corporation Method of monitoring and administrating distributed applications using access large information checking engine (ALICE)
US9172709B2 (en) * 2008-06-24 2015-10-27 Raytheon Company Secure network portal
US8121061B2 (en) * 2008-06-26 2012-02-21 Microsoft Corporation Efficient file management through granular opportunistic locking
US8688845B2 (en) * 2008-06-27 2014-04-01 Microsoft Corporation Remote computing session feature differentiation
US8612862B2 (en) * 2008-06-27 2013-12-17 Microsoft Corporation Integrated client for access to remote resources
US10164861B2 (en) 2015-12-28 2018-12-25 Silver Peak Systems, Inc. Dynamic monitoring and visualization for network health characteristics
US8743683B1 (en) 2008-07-03 2014-06-03 Silver Peak Systems, Inc. Quality of service using multiple flows
US10805840B2 (en) 2008-07-03 2020-10-13 Silver Peak Systems, Inc. Data transmission via a virtual wide area network overlay
US9717021B2 (en) 2008-07-03 2017-07-25 Silver Peak Systems, Inc. Virtual network overlay
US8359357B2 (en) * 2008-07-21 2013-01-22 Raytheon Company Secure E-mail messaging system
US20100029306A1 (en) * 2008-07-31 2010-02-04 Sybase, Inc. Mobile Banking with Short Message Service
US8085810B2 (en) * 2008-08-06 2011-12-27 Movik Networks Cross-layer pipelining optimizations for reduced roundtrips and improving quality of experience
US20100057926A1 (en) * 2008-08-28 2010-03-04 Sycamore Networks, Inc. Digital custom data content injection mechanism for a content delivery network
US9208104B2 (en) * 2008-08-28 2015-12-08 Citrix Systems, Inc. Content replacement and refresh policy implementation for a content distribution network
US8271610B2 (en) * 2008-08-28 2012-09-18 Sycamore Networks, Inc. Distributed content caching solution for a mobile wireless network
US8060697B1 (en) * 2008-09-18 2011-11-15 Sprint Communications Company L.P. Dynamically allocated secondary browser cache
US8396819B2 (en) * 2008-09-30 2013-03-12 Lockheed Martin Corp Unique interface in service oriented architecture
US8589579B2 (en) * 2008-10-08 2013-11-19 Citrix Systems, Inc. Systems and methods for real-time endpoint application flow control with network structure component
US8909759B2 (en) 2008-10-10 2014-12-09 Seven Networks, Inc. Bandwidth measurement
US7873060B2 (en) * 2008-10-18 2011-01-18 Fortinet, Inc. Accelerating data communication using tunnels
US8707387B2 (en) * 2008-10-22 2014-04-22 Personal Capital Technology Corporation Secure network computing
US8667512B2 (en) * 2008-10-29 2014-03-04 Qualcomm Incorporated Flexible hierarchical settings registry for operating systems
US8484462B2 (en) * 2008-11-07 2013-07-09 Lockheed Martin Corporation System and method for establishing a self-realizing expandable communications network
US8380808B2 (en) * 2008-11-24 2013-02-19 Royal O'Brien Dynamic medium content streaming system
US20100131617A1 (en) * 2008-11-25 2010-05-27 John Osborne Method and system for differential transmission of web page structures
US8639813B2 (en) * 2008-11-25 2014-01-28 Citrix Systems, Inc. Systems and methods for GSLB based on SSL VPN users
US10419541B2 (en) 2008-11-26 2019-09-17 Free Stream Media Corp. Remotely control devices over a network without authentication or registration
US9154942B2 (en) 2008-11-26 2015-10-06 Free Stream Media Corp. Zero configuration communication between a browser and a networked media device
US9961388B2 (en) 2008-11-26 2018-05-01 David Harrison Exposure of public internet protocol addresses in an advertising exchange server to improve relevancy of advertisements
KR101711863B1 (ko) 2008-11-26 2017-03-13 캘거리 싸이언티픽 인코포레이티드 애플리케이션 프로그램의 상태에 대한 원격 액세스를 제공하기 위한 방법 및 시스템
US9519772B2 (en) 2008-11-26 2016-12-13 Free Stream Media Corp. Relevancy improvement through targeting of information based on data gathered from a networked device associated with a security sandbox of a client device
US10977693B2 (en) 2008-11-26 2021-04-13 Free Stream Media Corp. Association of content identifier of audio-visual data with additional data through capture infrastructure
US9026668B2 (en) 2012-05-26 2015-05-05 Free Stream Media Corp. Real-time and retargeted advertising on multiple screens of a user watching television
US10567823B2 (en) 2008-11-26 2020-02-18 Free Stream Media Corp. Relevant advertisement generation based on a user operating a client device communicatively coupled with a networked media device
US10334324B2 (en) 2008-11-26 2019-06-25 Free Stream Media Corp. Relevant advertisement generation based on a user operating a client device communicatively coupled with a networked media device
US8572251B2 (en) 2008-11-26 2013-10-29 Microsoft Corporation Hardware acceleration for remote desktop protocol
US9986279B2 (en) 2008-11-26 2018-05-29 Free Stream Media Corp. Discovery, access control, and communication with networked services
US10880340B2 (en) 2008-11-26 2020-12-29 Free Stream Media Corp. Relevancy improvement through targeting of information based on data gathered from a networked device associated with a security sandbox of a client device
US8180891B1 (en) 2008-11-26 2012-05-15 Free Stream Media Corp. Discovery, access control, and communication with networked services from within a security sandbox
US10631068B2 (en) 2008-11-26 2020-04-21 Free Stream Media Corp. Content exposure attribution based on renderings of related content across multiple devices
US9386356B2 (en) 2008-11-26 2016-07-05 Free Stream Media Corp. Targeting with television audience data across multiple screens
CN101753592B (zh) * 2008-11-28 2013-04-17 国际商业机器公司 用于数据处理的方法和系统
US8745361B2 (en) 2008-12-02 2014-06-03 Microsoft Corporation Sandboxed execution of plug-ins
US8359641B2 (en) * 2008-12-05 2013-01-22 Raytheon Company Multi-level secure information retrieval system
US8145593B2 (en) 2008-12-11 2012-03-27 Microsoft Corporation Framework for web services exposing line of business applications
US20100153565A1 (en) * 2008-12-11 2010-06-17 Microsoft Corporation Connection management in line-of-business
US8464256B1 (en) 2009-04-10 2013-06-11 Open Invention Network, Llc System and method for hierarchical interception with isolated environments
US8341631B2 (en) 2009-04-10 2012-12-25 Open Invention Network Llc System and method for application isolation
US8752071B2 (en) * 2008-12-19 2014-06-10 International Business Machines Corporation Identifying subscriber data while processing publisher event in transaction
CN101771564B (zh) * 2008-12-31 2013-10-09 华为技术有限公司 会话上下文的处理方法、装置和系统
CN101504610A (zh) * 2009-01-10 2009-08-12 周建江 管理软件开发方法和系统
US20100186072A1 (en) * 2009-01-21 2010-07-22 Akshay Kumar Distributed secure telework
US9021598B1 (en) * 2009-01-23 2015-04-28 Sprint Communications Company L.P. Managing application events
US8209283B1 (en) * 2009-02-19 2012-06-26 Emc Corporation System and method for highly reliable data replication
US8667483B2 (en) * 2009-03-25 2014-03-04 Microsoft Corporation Device dependent on-demand compiling and deployment of mobile applications
GB0906004D0 (en) * 2009-04-07 2009-05-20 Omnifone Ltd MusicStation desktop
US9058599B1 (en) 2009-04-10 2015-06-16 Open Invention Network, Llc System and method for usage billing of hosted applications
US11538078B1 (en) 2009-04-10 2022-12-27 International Business Machines Corporation System and method for usage billing of hosted applications
US8555360B1 (en) * 2009-04-10 2013-10-08 Open Invention Network Llc System and method for on-line and off-line streaming application isolation
US10419504B1 (en) * 2009-04-10 2019-09-17 Open Invention Network Llc System and method for streaming application isolation
US8856783B2 (en) * 2010-10-12 2014-10-07 Citrix Systems, Inc. Allocating virtual machines according to user-specific virtual machine metrics
WO2010127266A1 (en) * 2009-05-01 2010-11-04 Citrix Systems, Inc. Systems and methods for providing a virtual appliance in an application delivery fabric
US8090797B2 (en) 2009-05-02 2012-01-03 Citrix Systems, Inc. Methods and systems for launching applications into existing isolation environments
US8275890B2 (en) 2009-06-03 2012-09-25 International Business Machines Corporation Detecting an inactive client during a communication session
US8526924B1 (en) * 2009-06-10 2013-09-03 Sprint Communications Company L.P. Off-device service platform discovery
US8856869B1 (en) * 2009-06-22 2014-10-07 NexWavSec Software Inc. Enforcement of same origin policy for sensitive data
US8205035B2 (en) * 2009-06-22 2012-06-19 Citrix Systems, Inc. Systems and methods for integration between application firewall and caching
US8489685B2 (en) 2009-07-17 2013-07-16 Aryaka Networks, Inc. Application acceleration as a service system and method
EP2467778A4 (en) * 2009-08-17 2013-01-16 Virtual Computer Inc LAYERED VIRTUAL FILES SYSTEM
US9277021B2 (en) * 2009-08-21 2016-03-01 Avaya Inc. Sending a user associated telecommunication address
US8090744B1 (en) * 2009-08-26 2012-01-03 Symantec Operating Corporation Method and apparatus for determining compatibility between a virtualized application and a base environment
US8572603B2 (en) * 2009-09-04 2013-10-29 Adobe Systems Incorporated Initializing an application on an electronic device
CN102025515A (zh) 2009-09-14 2011-04-20 阿里巴巴集团控股有限公司 基于文件目录的文件传输方法及其装置和系统
US10157280B2 (en) 2009-09-23 2018-12-18 F5 Networks, Inc. System and method for identifying security breach attempts of a website
US8327228B2 (en) * 2009-09-30 2012-12-04 Intel Corporation Home agent data and memory management
US8799586B2 (en) * 2009-09-30 2014-08-05 Intel Corporation Memory mirroring and migration at home agent
FR2951298B1 (fr) 2009-10-12 2016-02-05 France Etat Systeme informatique d'acces a des donnees confidentielles par au moins un boitier distant, boitier distant
US8397066B2 (en) * 2009-10-20 2013-03-12 Thomson Reuters (Markets) Llc Entitled data cache management
US9397976B2 (en) * 2009-10-30 2016-07-19 International Business Machines Corporation Tuning LDAP server and directory database
US8738711B2 (en) * 2009-11-03 2014-05-27 Oto Technologies, Llc System and method for redirecting client-side storage operations
US10721269B1 (en) 2009-11-06 2020-07-21 F5 Networks, Inc. Methods and system for returning requests with javascript for clients before passing a request to a server
US9773431B2 (en) * 2009-11-10 2017-09-26 Maxim Integrated Products, Inc. Block encryption security for integrated microcontroller and external memory system
US8341722B2 (en) * 2009-11-30 2012-12-25 Unisys Corporation Load balancing and failover of gateway devices
US9054913B1 (en) 2009-11-30 2015-06-09 Dell Software Inc. Network protocol proxy
FR2953611A1 (fr) * 2009-12-07 2011-06-10 Spawnapps Procede de mise a disposition d'une application-cible
CN102098271B (zh) * 2009-12-10 2015-01-07 华为技术有限公司 用户信息的获取方法、装置和系统
US9055080B2 (en) * 2009-12-14 2015-06-09 Citrix Systems, Inc. Systems and methods for service isolation
US20110145786A1 (en) * 2009-12-15 2011-06-16 Microsoft Corporation Remote commands in a shell environment
US20110145723A1 (en) * 2009-12-16 2011-06-16 Oto Technologies, Llc System and method for redirecting client-side storage operations
WO2011100518A2 (en) * 2010-02-12 2011-08-18 Movik Networks, Inc. Charging-invariant and origin-server-friendly transit caching in mobile networks
US9350702B2 (en) * 2010-02-17 2016-05-24 Hewlett Packard Enterprise Development Lp Virtual insertion into a network
US9923995B1 (en) * 2010-02-27 2018-03-20 Sitting Man, Llc Methods, systems, and computer program products for sharing information for detecting an idle TCP connection
US8799640B2 (en) * 2010-02-27 2014-08-05 Novell, Inc. Techniques for managing a secure communication session
US8903847B2 (en) 2010-03-05 2014-12-02 International Business Machines Corporation Digital media voice tags in social networks
WO2011111009A1 (en) * 2010-03-09 2011-09-15 Happy Cloud Inc. Data streaming for interactive decision-oriented software applications
US20110231476A1 (en) * 2010-03-22 2011-09-22 Hung Tso-Sung Information service platform equipped with dynamic distribution operators
US20140032654A1 (en) * 2010-03-22 2014-01-30 Tso-Sung HUNG Information service platform providing dynamic distribution operators
US9369384B2 (en) * 2010-03-22 2016-06-14 Tso-Sung HUNG Server system connection process method preventing network congestion
EP2378739B1 (en) * 2010-04-15 2015-04-01 BlackBerry Limited Method and system for transmitting an application to a device
US8769131B2 (en) * 2010-04-16 2014-07-01 Oracle America, Inc. Cloud connector key
US8972551B1 (en) * 2010-04-27 2015-03-03 Amazon Technologies, Inc. Prioritizing service requests
US9129000B2 (en) * 2010-04-30 2015-09-08 International Business Machines Corporation Method and system for centralized control of database applications
US8719447B2 (en) * 2010-05-04 2014-05-06 Aryaka Networks, Inc. Heterogeneous service provider model through pay-for-performance based transit settlements
US8380863B2 (en) 2010-05-05 2013-02-19 Cradle Technologies Control of security application in a LAN from outside the LAN
US9356991B2 (en) 2010-05-10 2016-05-31 Litera Technology Llc Systems and methods for a bidirectional multi-function communication module
JP5325159B2 (ja) 2010-05-12 2013-10-23 インターナショナル・ビジネス・マシーンズ・コーポレーション ファイルリストを抽出してクライアントにて表示するファイルサーバ、クライアントにて表示する方法及びファイルサーバで実行することが可能なコンピュータプログラム
KR101053681B1 (ko) * 2010-05-19 2011-08-02 계영티앤아이 (주) 사용자 단말 및 이의 소프트웨어 관리제어방법 및 장치
WO2011146742A2 (en) * 2010-05-19 2011-11-24 Akamai Technologies Inc. Edge server http post message processing
CN101820635A (zh) * 2010-05-20 2010-09-01 中兴通讯股份有限公司 一种移动通讯数据的采集方法和装置
US10318477B2 (en) * 2010-05-26 2019-06-11 Red Hat, Inc. Managing and archiving system and application log files
CN102142939B (zh) * 2010-06-12 2013-12-04 华为技术有限公司 一种前传规则的测试方法和装置
WO2011160139A1 (en) 2010-06-18 2011-12-22 Sweetlabs, Inc. Systems and methods for integration of an application runtime environment into a user computing environment
US9141625B1 (en) 2010-06-22 2015-09-22 F5 Networks, Inc. Methods for preserving flow state during virtual machine migration and devices thereof
US10015286B1 (en) 2010-06-23 2018-07-03 F5 Networks, Inc. System and method for proxying HTTP single sign on across network domains
US9344432B2 (en) 2010-06-24 2016-05-17 Microsoft Technology Licensing, Llc Network layer claims based access control
US8918856B2 (en) 2010-06-24 2014-12-23 Microsoft Corporation Trusted intermediary for network layer claims-enabled access control
EP2403216B1 (en) * 2010-06-30 2014-03-05 Alcatel Lucent Method for installation of an application
US8908545B1 (en) 2010-07-08 2014-12-09 F5 Networks, Inc. System and method for handling TCP performance in network access with driver initiated application tunnel
US8347100B1 (en) 2010-07-14 2013-01-01 F5 Networks, Inc. Methods for DNSSEC proxying and deployment amelioration and systems thereof
US8839346B2 (en) * 2010-07-21 2014-09-16 Citrix Systems, Inc. Systems and methods for providing a smart group
US8838783B2 (en) 2010-07-26 2014-09-16 Seven Networks, Inc. Distributed caching for resource and mobile network traffic management
EP2599003B1 (en) 2010-07-26 2018-07-11 Seven Networks, LLC Mobile network traffic coordination across multiple applications
WO2013015835A1 (en) 2011-07-22 2013-01-31 Seven Networks, Inc. Mobile application traffic optimization
KR101753195B1 (ko) * 2010-07-27 2017-07-19 아주대학교산학협력단 통신 시스템에서 세션 연결 제어 장치 및 방법
US9083760B1 (en) * 2010-08-09 2015-07-14 F5 Networks, Inc. Dynamic cloning and reservation of detached idle connections
US9363337B2 (en) * 2010-08-09 2016-06-07 Yahoo! Inc. Conversion tracking and context preserving systems and methods
US10097428B2 (en) * 2010-08-22 2018-10-09 Qwilt, Inc. System and method for caching popular content respective of a content strong server in an asymmetrical routing topology
US10127335B2 (en) 2010-08-22 2018-11-13 Qwilt, Inc System and method of performing analytics with respect to content storing servers caching popular content
US9774670B2 (en) 2010-08-22 2017-09-26 Qwilt, Inc. Methods for detection of content servers and caching popular content therein
US10097863B2 (en) * 2010-08-22 2018-10-09 Qwilt, Inc. System and method for live service content handling with content storing servers caching popular content therein
US11032583B2 (en) 2010-08-22 2021-06-08 QWLT, Inc. Method and system for improving high availability for live content
US8918550B2 (en) * 2010-08-27 2014-12-23 Total Phase, Inc. Real-time USB class level decoding
US8630174B1 (en) 2010-09-14 2014-01-14 F5 Networks, Inc. System and method for post shaping TCP packetization
US8886981B1 (en) 2010-09-15 2014-11-11 F5 Networks, Inc. Systems and methods for idle driven scheduling
US8804504B1 (en) 2010-09-16 2014-08-12 F5 Networks, Inc. System and method for reducing CPU load in processing PPP packets on a SSL-VPN tunneling device
US8732150B2 (en) * 2010-09-23 2014-05-20 Salesforce.Com, Inc. Methods and apparatus for suppressing network feed activities using an information feed in an on-demand database service environment
US20120079393A1 (en) * 2010-09-29 2012-03-29 Microsoft Corporation Adaptable License Platform for Remote Sessions
US20120089700A1 (en) * 2010-10-10 2012-04-12 Contendo, Inc. Proxy server configured for hierarchical caching and dynamic site acceleration and custom object and associated method
US20120102220A1 (en) * 2010-10-20 2012-04-26 Microsoft Corporation Routing traffic in an online service with high availability
US8615569B2 (en) * 2010-10-25 2013-12-24 Gregory A. Pearson, Inc. Dynamic content delivery systems and methods for providing same
WO2012058486A2 (en) 2010-10-29 2012-05-03 F5 Networks, Inc. Automated policy builder
US9554276B2 (en) 2010-10-29 2017-01-24 F5 Networks, Inc. System and method for on the fly protocol conversion in obtaining policy enforcement information
US8880666B2 (en) * 2010-10-29 2014-11-04 At&T Intellectual Property I, L.P. Method, policy request router, and machine-readable hardware storage device to select a policy server based on a network condition to receive policy requests for a duration
US8484314B2 (en) 2010-11-01 2013-07-09 Seven Networks, Inc. Distributed caching in a wireless network of content delivered for a mobile application over a long-held request
US8843153B2 (en) 2010-11-01 2014-09-23 Seven Networks, Inc. Mobile traffic categorization and policy for network use optimization while preserving user experience
US9060032B2 (en) 2010-11-01 2015-06-16 Seven Networks, Inc. Selective data compression by a distributed traffic management system to reduce mobile data traffic and signaling traffic
CN103620576B (zh) 2010-11-01 2016-11-09 七网络公司 适用于移动应用程序行为和网络条件的缓存
WO2012060995A2 (en) 2010-11-01 2012-05-10 Michael Luna Distributed caching in a wireless network of content delivered for a mobile application over a long-held request
GB2500327B (en) 2010-11-22 2019-11-06 Seven Networks Llc Optimization of resource polling intervals to satisfy mobile device requests
US8495108B2 (en) * 2010-11-30 2013-07-23 International Business Machines Corporation Virtual node subpool management
KR20120058782A (ko) * 2010-11-30 2012-06-08 삼성전자주식회사 컨텐츠 중심 네트워킹 환경에서의 단말, 중간 노드 및 이들의 통신 방법
US8589800B2 (en) * 2010-12-10 2013-11-19 Wyse Technology Inc. Methods and systems for accessing and controlling a remote desktop of a remote machine in real time by a web browser at a client device via HTTP API utilizing a transcoding server
US20120155360A1 (en) * 2010-12-20 2012-06-21 Lockheed Martin Corporation Negative-acknowledgment oriented reliable multicast offload engine architecture
US20120158819A1 (en) * 2010-12-21 2012-06-21 Microsoft Corporation Policy-based application delivery
US9354852B2 (en) * 2010-12-23 2016-05-31 Microsoft Technology Licensing, Llc Satisfying application dependencies
WO2012092261A2 (en) 2010-12-29 2012-07-05 Citrix Systems, Inc. Systems and methods for multi-level tagging of encrypted items for additional security and efficient encrypted item determination
US9741084B2 (en) 2011-01-04 2017-08-22 Calgary Scientific Inc. Method and system for providing remote access to data for display on a mobile device
US9247120B2 (en) 2011-01-04 2016-01-26 Calgary Scientific, Inc. Method and system for providing remote control from a remote client computer
EP2661697B1 (en) 2011-01-07 2018-11-21 Seven Networks, LLC System and method for reduction of mobile network traffic used for domain name system (dns) queries
US9258271B1 (en) 2011-01-13 2016-02-09 Google Inc. Network address translation for virtual machines
US9135037B1 (en) 2011-01-13 2015-09-15 Google Inc. Virtual network protocol
US8874888B1 (en) 2011-01-13 2014-10-28 Google Inc. Managed boot in a cloud system
US8627467B2 (en) 2011-01-14 2014-01-07 F5 Networks, Inc. System and method for selectively storing web objects in a cache memory based on policy decisions
US9311135B2 (en) * 2011-01-18 2016-04-12 Scality, S.A. Method for generating universal objects identifiers in distributed multi-purpose storage systems
US8898742B2 (en) * 2011-10-11 2014-11-25 Paramount Pictures Corporation Systems and methods for controlling access to content distributed over a network
US9237068B2 (en) * 2011-01-30 2016-01-12 Blue Coat Systems, Inc. System and method for distributing heuristics to network intermediary devices
US8849899B1 (en) * 2011-01-30 2014-09-30 Israel L'Heureux Accelerated delivery of media content via peer caching
US9306933B2 (en) 2011-02-11 2016-04-05 Mocana Corporation Ensuring network connection security between a wrapped app and a remote server
US8990920B2 (en) 2011-02-11 2015-03-24 Mocana Corporation Creating a virtual private network (VPN) for a single app on an internet-enabled device or system
US9537869B2 (en) 2011-02-11 2017-01-03 Blue Cedar Networks, Inc. Geographical restrictions for application usage on a mobile device
US8549656B2 (en) * 2011-02-11 2013-10-01 Mocana Corporation Securing and managing apps on a device
US8893298B2 (en) 2011-02-11 2014-11-18 Mocana Corporation Network linker for secure execution of unsecured apps on a device
US8533796B1 (en) 2011-03-16 2013-09-10 Google Inc. Providing application programs with access to secured resources
US9237087B1 (en) 2011-03-16 2016-01-12 Google Inc. Virtual machine name resolution
US9063818B1 (en) 2011-03-16 2015-06-23 Google Inc. Automated software updating based on prior activity
US20120246238A1 (en) * 2011-03-21 2012-09-27 International Business Machines Corporation Asynchronous messaging tags
US9240952B2 (en) * 2011-04-02 2016-01-19 Open Invention Network, Llc System and method for communication between networked applications
JP5691062B2 (ja) * 2011-04-04 2015-04-01 株式会社日立製作所 仮想計算機の制御方法及び管理計算機
US9104475B2 (en) * 2011-04-07 2015-08-11 Qualcomm Innovation Center, Inc. Methods and apparatus for managing operations of a web browser by predicting time period of subsequent script execution activity
US9398103B2 (en) * 2011-04-15 2016-07-19 Qualcomm Incorporated Methods and apparatus for enhancing device performance through flow control
US8316098B2 (en) 2011-04-19 2012-11-20 Seven Networks Inc. Social caching for device resource sharing and management
WO2012145002A1 (en) * 2011-04-21 2012-10-26 Hewlett-Packard Development Company, L.P. Installing an application into a virtualized environment
US8880991B2 (en) 2011-04-21 2014-11-04 Qualcomm Innovation Center, Inc. Methods and apparatus for improved browsing performance by precompilation of high-priority JavaScripts in a webpage and delaying the removal of corresponding compiled code
PL2702524T3 (pl) * 2011-04-27 2018-02-28 Seven Networks Llc Wykrywanie i filtrowanie złośliwego oprogramowania, oparte na obserwacji ruchu wykonywanego w rozproszonym układzie zarządzania ruchem w sieciach mobilnych
GB2504037B (en) 2011-04-27 2014-12-24 Seven Networks Inc Mobile device which offloads requests made by a mobile application to a remote entity for conservation of mobile device and network resources
US8621075B2 (en) 2011-04-27 2013-12-31 Seven Metworks, Inc. Detecting and preserving state for satisfying application requests in a distributed proxy and cache system
US8825842B2 (en) * 2011-04-28 2014-09-02 Facebook, Inc. Managing notifications pushed to user devices
JP5772195B2 (ja) * 2011-05-06 2015-09-02 ブラザー工業株式会社 通信装置
TW201249135A (en) * 2011-05-30 2012-12-01 Wistron Corp Remote management method and remote management system
US20120311551A1 (en) * 2011-06-06 2012-12-06 International Business Machines Coporation Automation of post-linker functions in embedded applications
US8914784B2 (en) * 2011-06-10 2014-12-16 International Business Machines Corporation Method and system for checking the consistency of application jar files
US9110745B2 (en) * 2011-06-17 2015-08-18 Oracle International Corporation System and method for flow control in a messaging subsystem based on message-in/out rates
US9628574B2 (en) 2011-06-20 2017-04-18 Sweetlabs, Inc. Systems and methods for streamlined content download
US9246819B1 (en) 2011-06-20 2016-01-26 F5 Networks, Inc. System and method for performing message-based load balancing
KR101507919B1 (ko) 2011-07-01 2015-04-07 한국전자통신연구원 가상 데스크탑 서비스를 위한 방법 및 장치
EP2737741A4 (en) 2011-07-27 2015-01-21 Seven Networks Inc SURVEILLANCE OF MOBILE APPLICATION ACTIVITIES IN SEARCH OF MALICIOUS TRAFFIC ON A MOBILE DEVICE
US9075979B1 (en) 2011-08-11 2015-07-07 Google Inc. Authentication based on proximity to mobile device
JP2014531626A (ja) 2011-08-15 2014-11-27 カルガリー サイエンティフィック インコーポレイテッド アプリケーションプログラムへの非侵襲的遠隔アクセス
US9720747B2 (en) * 2011-08-15 2017-08-01 Calgary Scientific Inc. Method for flow control and reliable communication in a collaborative environment
US9936037B2 (en) * 2011-08-17 2018-04-03 Perftech, Inc. System and method for providing redirections
US8966198B1 (en) 2011-09-01 2015-02-24 Google Inc. Providing snapshots of virtual storage devices
CN109614244B (zh) * 2011-09-12 2023-10-13 英特尔公司 应用和web服务之间元数据驱动的合作
WO2013038320A1 (en) * 2011-09-16 2013-03-21 Strangeloop Networks, Inc. Mobile resource accelerator
US9577824B2 (en) * 2011-09-23 2017-02-21 CSC Holdings, LLC Delivering a content item from a server to a device
US9213579B2 (en) * 2011-09-28 2015-12-15 International Business Machines Corporation Software component placement on execution platforms
US8549108B2 (en) * 2011-09-29 2013-10-01 Riverbed Technology, Inc. Optimized prefetching of compound data
CA2850422C (en) 2011-09-30 2023-09-26 Calgary Scientific Inc. Uncoupled application extensions including interactive digital surface layer for collaborative remote application sharing and annotating
US9252979B2 (en) * 2011-10-01 2016-02-02 Oracle International Corporation Transparent configuration of virtual hosts supporting multiple time zones in an enterprise platform
US9712599B2 (en) 2011-10-03 2017-07-18 International Business Machines Corporation Application peak load processing
US8751679B2 (en) * 2011-10-07 2014-06-10 Ericsson Television Inc. HTTP adaptive streaming server with automatic rate shaping
US9280377B2 (en) 2013-03-29 2016-03-08 Citrix Systems, Inc. Application with multiple operation modes
US9143529B2 (en) 2011-10-11 2015-09-22 Citrix Systems, Inc. Modifying pre-existing mobile applications to implement enterprise security policies
US20140032733A1 (en) 2011-10-11 2014-01-30 Citrix Systems, Inc. Policy-Based Application Management
US20140053234A1 (en) 2011-10-11 2014-02-20 Citrix Systems, Inc. Policy-Based Application Management
US9215225B2 (en) 2013-03-29 2015-12-15 Citrix Systems, Inc. Mobile device locking with context
US9130991B2 (en) 2011-10-14 2015-09-08 Silver Peak Systems, Inc. Processing data packets in performance enhancing proxy (PEP) environment
US8898244B2 (en) * 2011-10-20 2014-11-25 Allen Miglore System and method for transporting files between networked or connected systems and devices
US8195799B1 (en) * 2011-10-26 2012-06-05 SHTC Holdings LLC Smart test article optimizer
US9160778B2 (en) * 2011-10-26 2015-10-13 Nokia Solutions And Networks Oy Signaling enabling status feedback and selection by a network entity of portions of video information to be delivered via wireless transmission to a UE
US9626224B2 (en) 2011-11-03 2017-04-18 Silver Peak Systems, Inc. Optimizing available computing resources within a virtual environment
US9519781B2 (en) 2011-11-03 2016-12-13 Cyphort Inc. Systems and methods for virtualization and emulation assisted malware detection
US9686293B2 (en) * 2011-11-03 2017-06-20 Cyphort Inc. Systems and methods for malware detection and mitigation
US9792430B2 (en) 2011-11-03 2017-10-17 Cyphort Inc. Systems and methods for virtualized malware detection
WO2013072764A2 (en) 2011-11-11 2013-05-23 Calgary Scientific Inc. Session transfer and suspension in a remote access application framework
KR101850817B1 (ko) 2011-11-17 2018-04-23 삼성전자주식회사 서로 다른 단말에 어플리케이션을 자동으로 설치하는 장치 및 방법
WO2013076554A1 (en) * 2011-11-23 2013-05-30 Calgary Scientific Inc. Methods ans systems for collaborative remote application sharing and conferencing
CN104246737B (zh) * 2011-12-01 2017-09-29 华为技术有限公司 在内容分发网络中使用视频流的连接池技术的系统和方法
US8958293B1 (en) 2011-12-06 2015-02-17 Google Inc. Transparent load-balancing for cloud computing services
US8918503B2 (en) 2011-12-06 2014-12-23 Seven Networks, Inc. Optimization of mobile traffic directed to private networks and operator configurability thereof
EP2789138B1 (en) 2011-12-06 2016-09-14 Seven Networks, LLC A mobile device and method to utilize the failover mechanisms for fault tolerance provided for mobile traffic management and network/device resource conservation
EP2788889A4 (en) 2011-12-07 2015-08-12 Seven Networks Inc FLEXIBLE AND DYNAMIC INTEGRATION SCHEMES OF A TRAFFIC MANAGEMENT SYSTEM WITH VARIOUS NETWORK OPERATORS TO REDUCE NETWORK TRAFFIC
US9277443B2 (en) 2011-12-07 2016-03-01 Seven Networks, Llc Radio-awareness of mobile device for sending server-side control signals using a wireless network optimized transport protocol
US8959425B2 (en) 2011-12-09 2015-02-17 Microsoft Corporation Inference-based extension activation
US20130159511A1 (en) 2011-12-14 2013-06-20 Seven Networks, Inc. System and method for generating a report to a network operator by distributing aggregation of data
CN104040522A (zh) * 2011-12-22 2014-09-10 惠普发展公司,有限责任合伙企业 使用应用元数据和客户端更新使能远程受管应用的执行
CN103179104B (zh) * 2011-12-23 2016-04-27 中国移动通信集团公司 一种远程服务的访问方法、系统及其设备
US9270766B2 (en) 2011-12-30 2016-02-23 F5 Networks, Inc. Methods for identifying network traffic characteristics to correlate and manage one or more subsequent flows and devices thereof
US8800009B1 (en) 2011-12-30 2014-08-05 Google Inc. Virtual machine service access
DE102012200042A1 (de) * 2012-01-03 2013-07-04 Airbus Operations Gmbh Serversystem, luft- oder raumfahrzeug und verfahren
GB2499306B (en) 2012-01-05 2014-10-22 Seven Networks Inc Managing user interaction with an application on a mobile device
US9609020B2 (en) * 2012-01-06 2017-03-28 Optio Labs, Inc. Systems and methods to enforce security policies on the loading, linking, and execution of native code by mobile applications running inside of virtual machines
US9787681B2 (en) 2012-01-06 2017-10-10 Optio Labs, Inc. Systems and methods for enforcing access control policies on privileged accesses for mobile devices
WO2013103989A1 (en) 2012-01-06 2013-07-11 Optio Labs, LLC Systems and meathods for enforcing secutity in mobile computing
US9680925B2 (en) 2012-01-09 2017-06-13 At&T Intellectual Property I, L. P. Methods and apparatus to route message traffic using tiered affinity-based message routing
US9954718B1 (en) * 2012-01-11 2018-04-24 Amazon Technologies, Inc. Remote execution of applications over a dispersed network
US9015235B2 (en) 2012-01-13 2015-04-21 Antecea, Inc. Server aggregated application streaming
US9397932B2 (en) * 2012-01-17 2016-07-19 Reno Acquisitions, Llc Systems and methods for routing network information
US9679163B2 (en) * 2012-01-17 2017-06-13 Microsoft Technology Licensing, Llc Installation and management of client extensions
US9536105B2 (en) 2012-01-26 2017-01-03 Nokia Technologies Oy Method and apparatus for providing data access via multi-user views
US8983860B1 (en) 2012-01-30 2015-03-17 Google Inc. Advertising auction system
US9449112B2 (en) 2012-01-30 2016-09-20 Microsoft Technology Licensing, Llc Extension activation for related documents
US9256445B2 (en) 2012-01-30 2016-02-09 Microsoft Technology Licensing, Llc Dynamic extension view with multiple levels of expansion
US8843822B2 (en) 2012-01-30 2014-09-23 Microsoft Corporation Intelligent prioritization of activated extensions
US20130208729A1 (en) * 2012-02-14 2013-08-15 Neutral Tandem, Inc. d/b/a Inteliquent Systems and methods for facilitation of communications sessions amongst a plurality of networks
US10230566B1 (en) 2012-02-17 2019-03-12 F5 Networks, Inc. Methods for dynamically constructing a service principal name and devices thereof
US9172753B1 (en) 2012-02-20 2015-10-27 F5 Networks, Inc. Methods for optimizing HTTP header based authentication and devices thereof
US9231879B1 (en) 2012-02-20 2016-01-05 F5 Networks, Inc. Methods for policy-based network traffic queue management and devices thereof
US9137210B1 (en) * 2012-02-21 2015-09-15 Amazon Technologies, Inc. Remote browsing session management
US8996887B2 (en) 2012-02-24 2015-03-31 Google Inc. Log structured volume encryption for virtual machines
US9049246B2 (en) * 2012-02-28 2015-06-02 Red Hat, Inc. Reducing web page loading time
US9191285B1 (en) * 2012-03-14 2015-11-17 Domo, Inc. Automatic web service monitoring
JP6040980B2 (ja) * 2012-03-16 2016-12-07 日本電気株式会社 時系列データ処理装置、時系列データ処理方法及び時系列データ処理プログラム
US8677449B1 (en) 2012-03-19 2014-03-18 Google Inc. Exposing data to virtual machines
US20150058478A1 (en) * 2012-03-30 2015-02-26 Nec Corporation Information processing device load test execution method and computer readable medium
US10198462B2 (en) * 2012-04-05 2019-02-05 Microsoft Technology Licensing, Llc Cache management
US8812695B2 (en) 2012-04-09 2014-08-19 Seven Networks, Inc. Method and system for management of a virtual network connection without heartbeat messages
US20130268656A1 (en) 2012-04-10 2013-10-10 Seven Networks, Inc. Intelligent customer service/call center services enhanced using real-time and historical mobile application and traffic-related statistics collected by a distributed caching system in a mobile network
US9338153B2 (en) * 2012-04-11 2016-05-10 Telecommunication Systems, Inc. Secure distribution of non-privileged authentication credentials
US9195840B2 (en) 2012-04-23 2015-11-24 Google Inc. Application-specific file type generation and use
US9176720B1 (en) 2012-04-23 2015-11-03 Google Inc. Installation of third-party web applications into a container
WO2013163648A2 (en) 2012-04-27 2013-10-31 F5 Networks, Inc. Methods for optimizing service of content requests and devices thereof
WO2015116768A2 (en) * 2014-01-29 2015-08-06 Sipn, Llc Systems and methods for protecting communications
CN102752365B (zh) * 2012-05-29 2016-07-06 华为终端有限公司 信息处理的方法与装置
JP6022215B2 (ja) 2012-05-31 2016-11-09 任天堂株式会社 投稿情報共有システム、情報処理システム、情報処理方法、プログラムおよびコンピュータプラットフォーム
JP6159511B2 (ja) * 2012-06-01 2017-07-05 任天堂株式会社 情報処理システム、情報処理装置および情報処理方法
TWI468976B (zh) * 2012-06-05 2015-01-11 Quanta Comp Inc 動態軟體授權平台及方法
US9053302B2 (en) 2012-06-08 2015-06-09 Oracle International Corporation Obligation system for enterprise environments
US20130340086A1 (en) * 2012-06-13 2013-12-19 Nokia Corporation Method and apparatus for providing contextual data privacy
US8819663B2 (en) * 2012-06-18 2014-08-26 Lsi Corporation Acceleration of software modifications in networked devices
US9710247B2 (en) * 2012-06-26 2017-07-18 Microsoft Technology Licensing, Llc Identification of host-compatible downloadable applications
US9317709B2 (en) 2012-06-26 2016-04-19 Google Inc. System and method for detecting and integrating with native applications enabled for web-based storage
WO2014011216A1 (en) 2012-07-13 2014-01-16 Seven Networks, Inc. Dynamic bandwidth adjustment for browsing or streaming activity in a wireless network based on prediction of user behavior when interacting with mobile applications
US8589911B1 (en) * 2012-07-26 2013-11-19 Google Inc. Intent fulfillment
US20140032743A1 (en) * 2012-07-30 2014-01-30 James S. Hiscock Selecting equipment associated with provider entities for a client request
US8868905B2 (en) * 2012-08-07 2014-10-21 Appsense Limited Adaptive document redaction
US8892872B2 (en) * 2012-08-07 2014-11-18 Appsense Limited Secure redacted document access
KR101621791B1 (ko) * 2012-08-14 2016-05-31 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 현재 이용되는 장치 업데이팅
US9363670B2 (en) 2012-08-27 2016-06-07 Optio Labs, Inc. Systems and methods for restricting access to network resources via in-location access point protocol
US8775925B2 (en) 2012-08-28 2014-07-08 Sweetlabs, Inc. Systems and methods for hosted applications
US9143498B2 (en) 2012-08-30 2015-09-22 Aerohive Networks, Inc. Internetwork authentication
US9015114B2 (en) 2012-09-07 2015-04-21 Oracle International Corporation Data synchronization in a cloud infrastructure
US9667470B2 (en) 2012-09-07 2017-05-30 Oracle International Corporation Failure handling in the execution flow of provisioning operations in a cloud environment
US9621435B2 (en) 2012-09-07 2017-04-11 Oracle International Corporation Declarative and extensible model for provisioning of cloud based services
US10521746B2 (en) 2012-09-07 2019-12-31 Oracle International Corporation Recovery workflow for processing subscription orders in a computing infrastructure system
US9524190B1 (en) * 2012-09-07 2016-12-20 Veritas Technologies, LLC Systems and methods for caching data on virtualization servers
US10148530B2 (en) 2012-09-07 2018-12-04 Oracle International Corporation Rule based subscription cloning
US9253113B2 (en) 2012-09-07 2016-02-02 Oracle International Corporation Customizable model for throttling and prioritizing orders in a cloud environment
US9542400B2 (en) 2012-09-07 2017-01-10 Oracle International Corporation Service archive support
US9467355B2 (en) 2012-09-07 2016-10-11 Oracle International Corporation Service association model
CN102857949B (zh) * 2012-09-14 2018-11-20 中兴通讯股份有限公司 一种规划数据一致性保证的方法和装置
US20150248441A1 (en) * 2012-09-18 2015-09-03 Nec Corporation Time-series data processing device, time-series data processing method and medium for storing time-series data processing program
US9703792B2 (en) * 2012-09-24 2017-07-11 Moxtra, Inc. Online binders
US9774658B2 (en) 2012-10-12 2017-09-26 Citrix Systems, Inc. Orchestration framework for connected devices
US8745755B2 (en) 2012-10-12 2014-06-03 Citrix Systems, Inc. Controlling device access to enterprise resources in an orchestration framework for connected devices
US9516022B2 (en) 2012-10-14 2016-12-06 Getgo, Inc. Automated meeting room
US20140109176A1 (en) 2012-10-15 2014-04-17 Citrix Systems, Inc. Configuring and providing profiles that manage execution of mobile applications
US8910239B2 (en) 2012-10-15 2014-12-09 Citrix Systems, Inc. Providing virtualized private network tunnels
CN104854561B (zh) 2012-10-16 2018-05-11 思杰系统有限公司 用于应用程序管理框架的应用程序封装
US9606774B2 (en) 2012-10-16 2017-03-28 Citrix Systems, Inc. Wrapping an application with field-programmable business logic
US20140108793A1 (en) 2012-10-16 2014-04-17 Citrix Systems, Inc. Controlling mobile device access to secure data
US9971585B2 (en) 2012-10-16 2018-05-15 Citrix Systems, Inc. Wrapping unmanaged applications on a mobile device
US9161258B2 (en) 2012-10-24 2015-10-13 Seven Networks, Llc Optimized and selective management of policy deployment to mobile clients in a congested network to prevent further aggravation of network congestion
RU2509425C1 (ru) * 2012-11-12 2014-03-10 Федеральное государственное казенное военное образовательное учреждение высшего профессионального образования "ВОЕННАЯ АКАДЕМИЯ СВЯЗИ имени Маршала Советского Союза С.М. Буденного" Министерства обороны Российской Федерации Способ и устройство управления потоками данных распределенной информационной системы
JP6062722B2 (ja) 2012-11-16 2017-01-18 任天堂株式会社 情報処理システム、情報処理装置、情報処理方法、およびコンピュータプログラム
CN102970294A (zh) * 2012-11-21 2013-03-13 网神信息技术(北京)股份有限公司 安全网关的病毒检测方法及装置
CN102968331B (zh) * 2012-11-27 2016-08-10 中标软件有限公司 一种虚拟机管理系统及其文件访问方法
US9130979B2 (en) 2012-12-11 2015-09-08 Microsoft Technology Licensing, Llc Systems and methods for using virtual machines to sequence native applications into virtual packages and for reimaging virtual machines
WO2014100384A1 (en) * 2012-12-19 2014-06-26 Rabbit, Inc. Audio video streaming system and method
US9369670B2 (en) 2012-12-19 2016-06-14 Rabbit, Inc. Audio video streaming system and method
WO2014100374A2 (en) 2012-12-19 2014-06-26 Rabbit, Inc. Method and system for content sharing and discovery
CN103036897A (zh) * 2012-12-20 2013-04-10 曙光云计算技术有限公司 瘦客户端与服务器端之间基于远程桌面连接的通信方法
US9307493B2 (en) 2012-12-20 2016-04-05 Seven Networks, Llc Systems and methods for application management of mobile device radio state promotion and demotion
US9654579B2 (en) 2012-12-21 2017-05-16 Akamai Technologies, Inc. Scalable content delivery network request handling mechanism
US9509804B2 (en) 2012-12-21 2016-11-29 Akami Technologies, Inc. Scalable content delivery network request handling mechanism to support a request processing layer
US20140189127A1 (en) * 2012-12-27 2014-07-03 Anjaneya Reddy Chagam Reservation and execution image writing of native computing devices
US20150012863A1 (en) * 2012-12-28 2015-01-08 Panasonic Intellectual Property Corporation Of America Control method
US9773107B2 (en) 2013-01-07 2017-09-26 Optio Labs, Inc. Systems and methods for enforcing security in mobile computing
US9241314B2 (en) 2013-01-23 2016-01-19 Seven Networks, Llc Mobile device with application or context aware fast dormancy
US8874761B2 (en) 2013-01-25 2014-10-28 Seven Networks, Inc. Signaling optimization in a wireless network for traffic utilizing proprietary and non-proprietary protocols
US10375155B1 (en) 2013-02-19 2019-08-06 F5 Networks, Inc. System and method for achieving hardware acceleration for asymmetric flow connections
US9002982B2 (en) 2013-03-11 2015-04-07 Amazon Technologies, Inc. Automated desktop placement
US10142406B2 (en) 2013-03-11 2018-11-27 Amazon Technologies, Inc. Automated data center selection
US8750123B1 (en) 2013-03-11 2014-06-10 Seven Networks, Inc. Mobile device equipped with mobile network congestion recognition to make intelligent decisions regarding connecting to an operator network
US9148350B1 (en) 2013-03-11 2015-09-29 Amazon Technologies, Inc. Automated data synchronization
US9740390B2 (en) * 2013-03-11 2017-08-22 Spikes, Inc. Dynamic clip analysis
US10313345B2 (en) 2013-03-11 2019-06-04 Amazon Technologies, Inc. Application marketplace for virtual desktops
US9608958B2 (en) 2013-03-12 2017-03-28 Oracle International Corporation Lightweight directory access protocol (LDAP) join search mechanism
US20140283136A1 (en) 2013-03-13 2014-09-18 Optio Labs, Inc. Systems and methods for securing and locating computing devices
US9363329B1 (en) 2013-03-15 2016-06-07 Instart Logic, Inc. Identifying correlated components of dynamic content
US9762679B2 (en) 2013-03-15 2017-09-12 Aerohive Networks, Inc. Providing stateless network services
US9430578B2 (en) 2013-03-15 2016-08-30 Google Inc. System and method for anchoring third party metadata in a document
US9242043B2 (en) 2013-03-15 2016-01-26 Tandem Diabetes Care, Inc. Field update of an ambulatory infusion pump system
US20140280715A1 (en) * 2013-03-15 2014-09-18 First Principles, Inc. Real time remote desktop
US9769056B2 (en) 2013-03-15 2017-09-19 Aerohive Networks, Inc. Gateway using multicast to unicast conversion
US8959595B2 (en) * 2013-03-15 2015-02-17 Bullaproof, Inc. Methods and systems for providing secure transactions
US9298455B1 (en) * 2013-03-15 2016-03-29 Instart Logic, Inc. Provisional execution of dynamic content component
US9516127B2 (en) 2013-03-25 2016-12-06 Seven Networks, Llc Intelligent alarm manipulator and resource tracker
US9727577B2 (en) 2013-03-28 2017-08-08 Google Inc. System and method to store third-party metadata in a cloud storage system
US9369449B2 (en) 2013-03-29 2016-06-14 Citrix Systems, Inc. Providing an enterprise application store
US9985850B2 (en) 2013-03-29 2018-05-29 Citrix Systems, Inc. Providing mobile device management functionalities
US9355223B2 (en) 2013-03-29 2016-05-31 Citrix Systems, Inc. Providing a managed browser
US8849979B1 (en) 2013-03-29 2014-09-30 Citrix Systems, Inc. Providing mobile device management functionalities
US10284627B2 (en) 2013-03-29 2019-05-07 Citrix Systems, Inc. Data management for an application with multiple operation modes
US9390088B2 (en) * 2013-04-22 2016-07-12 International Business Machines Corporation Ensuring access to long-term stored electronic documents
GB2513344B (en) 2013-04-23 2017-03-15 Gurulogic Microsystems Oy Communication system utilizing HTTP
CN104166588B (zh) * 2013-05-16 2018-10-09 腾讯科技(深圳)有限公司 阅读内容的信息处理方法及装置
CN103281369B (zh) * 2013-05-24 2016-03-30 华为技术有限公司 报文处理方法及广域网加速控制器woc
US10216549B2 (en) 2013-06-17 2019-02-26 Seven Networks, Llc Methods and systems for providing application programming interfaces and application programming interface extensions to third party applications for optimizing and minimizing application traffic
US9401973B2 (en) * 2013-06-18 2016-07-26 Vmware, Inc. Systems and methods for transmitting data
US9253244B1 (en) * 2013-06-20 2016-02-02 Amazon Technologies, Inc. Subscription based polling for resource updates
US10623243B2 (en) 2013-06-26 2020-04-14 Amazon Technologies, Inc. Management of computing sessions
US10686646B1 (en) 2013-06-26 2020-06-16 Amazon Technologies, Inc. Management of computing sessions
US9973965B2 (en) * 2013-07-12 2018-05-15 Seven Networks, Llc Transport protocol layer optimization for managing signaling and power consumption
EP3022708B1 (en) * 2013-07-19 2018-03-28 Opanga Networks, Inc. Content source discovery
US9065765B2 (en) 2013-07-22 2015-06-23 Seven Networks, Inc. Proxy server associated with a mobile carrier for enhancing mobile traffic management in a mobile network
US9137162B2 (en) 2013-07-23 2015-09-15 Sap Se Network traffic routing optimization
US9535794B2 (en) * 2013-07-26 2017-01-03 Globalfoundries Inc. Monitoring hierarchical container-based software systems
CN103412914A (zh) * 2013-08-05 2013-11-27 广州仙海网络科技有限公司 网络客户端
US9380077B2 (en) * 2013-08-08 2016-06-28 Iboss, Inc. Switching between networks
CN103442007A (zh) * 2013-08-29 2013-12-11 成都卫士通信息安全技术有限公司 基于虚拟桌面控制方式实现访问远端应用服务的方法
CN103458029A (zh) * 2013-09-02 2013-12-18 百度在线网络技术(北京)有限公司 通过浏览器进行加速下载的方法、系统和装置
US8910263B1 (en) 2013-09-17 2014-12-09 Iboss, Inc. Mobile device management profile distribution
US9225611B1 (en) * 2013-10-10 2015-12-29 Parallels IP Holdings GmbH Method for interception and blocking of mouse move and resize events on mobile device
US9535567B1 (en) * 2013-10-10 2017-01-03 Parallels International Gmbh Method for interception and blocking of mouse move and resize events on mobile device
US9065854B2 (en) * 2013-10-28 2015-06-23 Citrix Systems, Inc. Systems and methods for managing a guest virtual machine executing within a virtualized environment
US10187317B1 (en) 2013-11-15 2019-01-22 F5 Networks, Inc. Methods for traffic rate control and devices thereof
US10069867B2 (en) * 2013-11-29 2018-09-04 Nokia Technologies Oy Method and apparatus for determining privacy policy for devices based on brain wave information
US10225352B2 (en) * 2013-12-20 2019-03-05 Sony Corporation Work sessions
WO2015100340A1 (en) 2013-12-26 2015-07-02 Tandem Diabetes Care, Inc. Safety processor for wireless control of a drug delivery device
US9737656B2 (en) 2013-12-26 2017-08-22 Tandem Diabetes Care, Inc. Integration of infusion pump with remote electronic device
US9749440B2 (en) 2013-12-31 2017-08-29 Sweetlabs, Inc. Systems and methods for hosted application marketplaces
CN104796313B (zh) * 2014-01-20 2020-10-16 腾讯科技(深圳)有限公司 自动对话工具接入第三方的方法和装置
KR101586720B1 (ko) * 2014-01-22 2016-01-21 전자부품연구원 클라우드 스토리지 표준 관리를 위한 프런트-엔드 어플리케이션 라이브러리 설계
WO2015126674A1 (en) * 2014-02-10 2015-08-27 Bigcommerce Pty. Ltd. System, method and acrhitecture for providing integrated applications
JP2015158728A (ja) * 2014-02-21 2015-09-03 東芝テック株式会社 情報閲覧装置、及び、情報閲覧プログラム
US11405410B2 (en) 2014-02-24 2022-08-02 Cyphort Inc. System and method for detecting lateral movement and data exfiltration
US10095866B2 (en) 2014-02-24 2018-10-09 Cyphort Inc. System and method for threat risk scoring of security threats
US10326778B2 (en) 2014-02-24 2019-06-18 Cyphort Inc. System and method for detecting lateral movement and data exfiltration
US10225280B2 (en) 2014-02-24 2019-03-05 Cyphort Inc. System and method for verifying and detecting malware
JP2015166971A (ja) * 2014-03-04 2015-09-24 富士通株式会社 情報処理装置、情報処理システム、情報処理方法、及び、情報処理プログラム
US9703611B1 (en) 2014-03-21 2017-07-11 Amazon Technologies, Inc. Isolating resources for utilization by tenants executing in multi-tenant software containers
US10218633B2 (en) * 2014-03-28 2019-02-26 Amazon Technologies, Inc. Implementation of a service that coordinates the placement and execution of containers
US10057325B2 (en) * 2014-03-31 2018-08-21 Nuvestack, Inc. Remote desktop infrastructure
US9244801B2 (en) * 2014-03-31 2016-01-26 International Business Machines Corporation Increasing the accuracy of service quality management metrics
US10154110B2 (en) 2014-04-22 2018-12-11 Qwilt, Inc. System and methods thereof for delivery of popular content using a multimedia broadcast multicast service
CN103927489B (zh) * 2014-04-22 2017-01-18 陈幼雷 一种数据可信存储的系统及其方法
US9961131B2 (en) * 2014-04-25 2018-05-01 Microsoft Technology Licensing, Llc Enhanced reliability for client-based web services
US9848067B2 (en) * 2014-04-25 2017-12-19 Cisco Technology, Inc. Managing sequence values with added headers in computing devices
US9672353B2 (en) 2014-04-28 2017-06-06 Blue Cedar Networks, Inc. Securing and managing apps on a device using policy gates
US9483310B2 (en) * 2014-04-29 2016-11-01 Bluedata Software, Inc. Associating cache memory with a work process
EP2942925B1 (en) * 2014-05-05 2016-08-24 Advanced Digital Broadcast S.A. A method and system for providing a private network
US10089098B2 (en) 2014-05-15 2018-10-02 Sweetlabs, Inc. Systems and methods for application installation platforms
US9871849B2 (en) * 2014-05-20 2018-01-16 Citrix Systems, Inc. Systems and methods for just-in-time state sharing
US20150348126A1 (en) * 2014-05-30 2015-12-03 Transilio, Inc. Personalized user engagement system using operating system notification script
ES2556252B1 (es) * 2014-07-14 2016-12-28 Gabriel NIETO FOMBELLA Método de un cortafuegos con reglas dinámicas mediante SQL
US11838851B1 (en) 2014-07-15 2023-12-05 F5, Inc. Methods for managing L7 traffic classification and devices thereof
CN105338026B (zh) * 2014-07-24 2018-10-09 阿里巴巴集团控股有限公司 数据资源的获取方法、装置和系统
US9948496B1 (en) 2014-07-30 2018-04-17 Silver Peak Systems, Inc. Determining a transit appliance for data traffic to a software service
CN106575427B (zh) * 2014-08-12 2020-12-08 艾高特有限责任公司 基于零知识环境的社交网络引擎
US9992619B2 (en) 2014-08-12 2018-06-05 Aerohive Networks, Inc. Network device based proximity beacon locating
US10122630B1 (en) 2014-08-15 2018-11-06 F5 Networks, Inc. Methods for network traffic presteering and devices thereof
US10013430B2 (en) * 2014-08-18 2018-07-03 Vmware, Inc. Remotely stored application files
US9875344B1 (en) 2014-09-05 2018-01-23 Silver Peak Systems, Inc. Dynamic monitoring and authorization of an optimization device
US9794266B2 (en) 2014-09-05 2017-10-17 Qualcomm Incorporated Using multiple credentials for access and traffic differentiation
US20160080519A1 (en) * 2014-09-11 2016-03-17 Microsoft Technology Licensing, Llc Local caching and resolution of service calls
CN107111594A (zh) * 2014-09-24 2017-08-29 V5系统公司 动态数据管理
WO2016056013A1 (en) * 2014-10-07 2016-04-14 Routier Ltd. Systems and methods for http message content modification streaming
TWI565266B (zh) * 2014-10-23 2017-01-01 Tso-Sung Hung A server system that prevents network congestion, and a connection method
US9736754B2 (en) * 2014-10-30 2017-08-15 Sap Se Data distribution to portable electronic devices
US10182013B1 (en) 2014-12-01 2019-01-15 F5 Networks, Inc. Methods for managing progressive image delivery and devices thereof
JP6880549B2 (ja) * 2014-12-25 2021-06-02 株式会社リコー 情報処理システム、画像処理装置、情報処理方法、および情報処理プログラム
FR3031258B1 (fr) * 2014-12-31 2017-01-27 Bull Sas Methode de communication entre un gestionnaire d'action distant et un boitier de communication
US11615199B1 (en) * 2014-12-31 2023-03-28 Idemia Identity & Security USA LLC User authentication for digital identifications
US9998521B2 (en) 2015-01-08 2018-06-12 Instart Logic, Inc. HTML streaming
US9507581B2 (en) * 2015-01-14 2016-11-29 Dell Products Lp Systems and methods of device firmware delivery for pre-boot updates
CN104618237B (zh) * 2015-01-21 2017-12-12 网宿科技股份有限公司 一种基于tcp/udp的广域网加速系统及方法
US11895138B1 (en) 2015-02-02 2024-02-06 F5, Inc. Methods for improving web scanner accuracy and devices thereof
US20150149362A1 (en) * 2015-02-04 2015-05-28 vitaTrackr, Inc. Encryption and Distribution of Health-related Data
US20150161413A1 (en) * 2015-02-16 2015-06-11 vitaTrackr, Inc. Encryption and distribution of health-related data
US10129098B2 (en) * 2015-03-27 2018-11-13 Microsoft Technology Licensing, Llc Networked device resource enumeration
US10834065B1 (en) 2015-03-31 2020-11-10 F5 Networks, Inc. Methods for SSL protected NTLM re-authentication and devices thereof
CN104935632A (zh) * 2015-04-24 2015-09-23 网宿科技股份有限公司 一种基于cifs协议的加速方法及系统
US10325014B2 (en) 2015-04-30 2019-06-18 Workiva Inc. System and method for convergent document collaboration
US9292482B1 (en) 2015-04-30 2016-03-22 Workiva Inc. System and method for convergent document collaboration
US10505818B1 (en) 2015-05-05 2019-12-10 F5 Networks. Inc. Methods for analyzing and load balancing based on server health and devices thereof
US11350254B1 (en) 2015-05-05 2022-05-31 F5, Inc. Methods for enforcing compliance policies and devices thereof
US9891891B2 (en) 2015-05-11 2018-02-13 Inteliquent, Inc. Systems and methods for integration of carrier-based SMS and voice functionality within API platform
CN106302571B (zh) 2015-05-14 2020-07-28 微软技术许可有限责任公司 用于对服务器连接进行维护和高速缓存的系统和方法
US11468101B2 (en) * 2015-05-29 2022-10-11 Kuni Ahi LLC Context-rich key framework implementations for global concept management
US10075450B2 (en) * 2015-05-29 2018-09-11 Rockwell Automation Technologies, Inc. One time use password for temporary privilege escalation in a role-based access control (RBAC) system
US9986040B2 (en) 2015-07-21 2018-05-29 Amadeus S.A.S. Communications management system with a separate peripherals server
CN105162831B (zh) * 2015-07-27 2018-09-18 北京京东尚科信息技术有限公司 用于实现远程虚拟桌面的移动端和服务端操作方法及装置
US9813504B2 (en) * 2015-08-03 2017-11-07 Citrix Systems, Inc. Virtualizing device management services on a multi-session platform
US10320934B1 (en) * 2015-08-25 2019-06-11 Instart Logic, Inc. One-time cache
US11709799B2 (en) * 2015-08-29 2023-07-25 Vmware, Inc. Content or file based application virtualization using a cache
CN106528188B (zh) 2015-09-09 2019-08-30 腾讯科技(深圳)有限公司 一种应用加速方法及装置
WO2017053509A1 (en) * 2015-09-22 2017-03-30 Conjur, Inc. Dynamic computing resource access authorization
EP3367249A4 (en) * 2015-10-20 2018-12-05 Sony Corporation Information processing system and information processing method
US9710689B2 (en) 2015-10-30 2017-07-18 Essential Products, Inc. Fingerprint sensors for mobile devices
KR101977726B1 (ko) 2015-11-17 2019-05-14 한국전자통신연구원 가상 데스크탑 서비스 방법 및 장치
US20170161253A1 (en) * 2015-11-17 2017-06-08 Upsyte Corporation System and Method for Dynamically Integrating Web Data, Services, and Functionality Into A Web Site
US20170153951A1 (en) * 2015-11-30 2017-06-01 Microsoft Technology Licensing, Llc Incremental synchronous hierarchical system restoration
US10581819B1 (en) * 2015-12-17 2020-03-03 Ca, Inc. Network traffic scanning of encrypted data
US10419310B1 (en) * 2015-12-17 2019-09-17 8×8, Inc. Monitor device for use with endpoint devices
KR20170074328A (ko) * 2015-12-22 2017-06-30 주식회사 마크애니 티씨피 동기 패킷을 이용한 인증 시스템 및 방법 및 클라이언트 및 기록매체
US11757946B1 (en) 2015-12-22 2023-09-12 F5, Inc. Methods for analyzing network traffic and enforcing network policies and devices thereof
US9584378B1 (en) * 2015-12-22 2017-02-28 International Business Machines Corporation Computer-implemented command control in information technology service environment
US10771597B2 (en) * 2016-01-11 2020-09-08 Telefonaktiebolaget Lm Ericsson (Publ) Synchronized connection closing
US10404698B1 (en) 2016-01-15 2019-09-03 F5 Networks, Inc. Methods for adaptive organization of web application access points in webtops and devices thereof
US10797888B1 (en) 2016-01-20 2020-10-06 F5 Networks, Inc. Methods for secured SCEP enrollment for client devices and devices thereof
US11178150B1 (en) 2016-01-20 2021-11-16 F5 Networks, Inc. Methods for enforcing access control list based on managed application and devices thereof
JP2017134480A (ja) * 2016-01-26 2017-08-03 キヤノン株式会社 情報処理装置、情報処理システム、情報処理装置の制御方法、及びプログラム
WO2017130033A1 (en) * 2016-01-26 2017-08-03 Ale International Service delivery through wireless access systems
US9614919B1 (en) 2016-01-26 2017-04-04 Ale International Service delivery through wireless access systems
CN107045508B (zh) * 2016-02-05 2020-03-03 腾讯科技(深圳)有限公司 应用程序的处理方法和装置
US10541987B2 (en) 2016-02-26 2020-01-21 Tandem Diabetes Care, Inc. Web browser-based device communication workflow
US10097606B2 (en) * 2016-03-14 2018-10-09 Amazon Technologies, Inc. Application streaming using access and execution environments
CN107229415B (zh) * 2016-03-24 2020-06-02 华为技术有限公司 一种数据写方法、数据读方法及相关设备、系统
US10021183B2 (en) * 2016-05-09 2018-07-10 Bank Of America Corporation System for tracking external data transmissions via inventory and registration
US10769145B1 (en) * 2016-05-17 2020-09-08 United Services Automobile Association (Usaa) Unified and compressed statistical analysis data
US10298582B2 (en) * 2016-05-18 2019-05-21 Salesforce.Com, Inc. Environment-differentiated named credential instances for development and deployment
US10432484B2 (en) 2016-06-13 2019-10-01 Silver Peak Systems, Inc. Aggregating select network traffic statistics
US10791088B1 (en) 2016-06-17 2020-09-29 F5 Networks, Inc. Methods for disaggregating subscribers via DHCP address translation and devices thereof
US10523635B2 (en) * 2016-06-17 2019-12-31 Assured Information Security, Inc. Filtering outbound network traffic
US10250716B2 (en) * 2016-06-30 2019-04-02 Salesforce.Com, Inc. Priority-driven boxcarring of action requests from component-driven cloud applications
US10250715B2 (en) * 2016-06-30 2019-04-02 Salesforce.Com, Inc. Dynamic adjustment of boxcarring of action requests from component-driven cloud applications
EP3481099B1 (en) * 2016-08-19 2021-10-06 Huawei Technologies Co., Ltd. Load balancing method and associated device
US9967056B1 (en) 2016-08-19 2018-05-08 Silver Peak Systems, Inc. Forward packet recovery with constrained overhead
CN107786338B (zh) * 2016-08-25 2021-04-27 大连楼兰科技股份有限公司 动态密码校验中的共享平台
US20180059990A1 (en) 2016-08-25 2018-03-01 Microsoft Technology Licensing, Llc Storage Virtualization For Files
CN106411642B (zh) * 2016-09-21 2019-09-17 杭州迪普科技股份有限公司 一种报文转发路径探测的方法和装置
CN106533974B (zh) * 2016-10-10 2020-04-07 网宿科技股份有限公司 应用程序的流量管理方法、系统及具有该系统的终端设备
US10025826B2 (en) 2016-10-31 2018-07-17 International Business Machines Corporation Querying in-flight streamed data from a relational database
US10127283B2 (en) 2016-10-31 2018-11-13 International Business Machines Corporation Projecting effect of in-flight streamed data on a relational database
US9836467B1 (en) 2016-10-31 2017-12-05 International Business Machines Company Altering in-flight streamed data from a relational database
US11063758B1 (en) 2016-11-01 2021-07-13 F5 Networks, Inc. Methods for facilitating cipher selection and devices thereof
US10505792B1 (en) 2016-11-02 2019-12-10 F5 Networks, Inc. Methods for facilitating network traffic analytics and devices thereof
US10379881B2 (en) * 2016-11-16 2019-08-13 Citrix Systems, Inc. Delivering an immersive remote desktop
CN106506522B (zh) * 2016-11-28 2019-08-06 杭州迪普科技股份有限公司 Tcp连接的管理方法和装置
US10362110B1 (en) * 2016-12-08 2019-07-23 Amazon Technologies, Inc. Deployment of client data compute kernels in cloud
US10970754B2 (en) * 2016-12-12 2021-04-06 Ncr Corporation Real-time service status
US10530747B2 (en) 2017-01-13 2020-01-07 Citrix Systems, Inc. Systems and methods to run user space network stack inside docker container while bypassing container Linux network stack
US10417239B2 (en) 2017-01-13 2019-09-17 International Business Machines Corporation Reducing flow delays in a data streaming application caused by lookup operations
US10860342B2 (en) * 2017-01-30 2020-12-08 Citrix Systems, Inc. Computer system providing cloud-based session prelaunch features and related methods
US10892978B2 (en) 2017-02-06 2021-01-12 Silver Peak Systems, Inc. Multi-level learning for classifying traffic flows from first packet data
US11044202B2 (en) 2017-02-06 2021-06-22 Silver Peak Systems, Inc. Multi-level learning for predicting and classifying traffic flows from first packet data
US10771394B2 (en) 2017-02-06 2020-09-08 Silver Peak Systems, Inc. Multi-level learning for classifying traffic flows on a first packet from DNS data
US10257082B2 (en) 2017-02-06 2019-04-09 Silver Peak Systems, Inc. Multi-level learning for classifying traffic flows
US11496438B1 (en) 2017-02-07 2022-11-08 F5, Inc. Methods for improved network security using asymmetric traffic delivery and devices thereof
US10791119B1 (en) 2017-03-14 2020-09-29 F5 Networks, Inc. Methods for temporal password injection and devices thereof
US10812266B1 (en) 2017-03-17 2020-10-20 F5 Networks, Inc. Methods for managing security tokens based on security violations and devices thereof
US10936593B2 (en) * 2017-03-27 2021-03-02 Liberation Distribution, Inc. Resolving a query to a database by transmitting identifiers of objects satisfying the query
US10778684B2 (en) 2017-04-07 2020-09-15 Citrix Systems, Inc. Systems and methods for securely and transparently proxying SAAS applications through a cloud-hosted or on-premise network gateway for enhanced security and visibility
US10931662B1 (en) 2017-04-10 2021-02-23 F5 Networks, Inc. Methods for ephemeral authentication screening and devices thereof
US10536466B1 (en) * 2017-04-26 2020-01-14 Branch Banking And Trust Company Risk assessment of electronic communication using time zone data
US10574680B2 (en) 2017-05-12 2020-02-25 Teachers Insurance And Annuity Association Of America Malware detection in distributed computer systems
US11343237B1 (en) 2017-05-12 2022-05-24 F5, Inc. Methods for managing a federated identity environment using security and access control data and devices thereof
US11122042B1 (en) 2017-05-12 2021-09-14 F5 Networks, Inc. Methods for dynamically managing user access control and devices thereof
US10594670B2 (en) * 2017-05-30 2020-03-17 Servicenow, Inc. Edge encryption with metadata
US10509921B2 (en) 2017-05-31 2019-12-17 Intuit Inc. System for managing transactional data
US10990291B2 (en) * 2017-06-12 2021-04-27 Dell Products, L.P. Software assist memory module hardware architecture
US11048660B2 (en) 2017-06-20 2021-06-29 Netflix, Inc. Acceleration system for facilitating processing of API calls
US10938855B1 (en) * 2017-06-23 2021-03-02 Digi International Inc. Systems and methods for automatically and securely provisioning remote computer network infrastructure
US11025724B2 (en) * 2017-07-24 2021-06-01 Facebook, Inc. Transport of control data in proxy-based network communications
EP3662456A4 (en) * 2017-07-31 2020-12-23 Citibank, N.A. ELECTRONIC PROXY VOTING SYSTEMS AND PROCEDURES
CN107396186B (zh) * 2017-08-11 2019-11-08 四川长虹电器股份有限公司 Linux设备WebOS系统应用管理方法
US10785335B2 (en) * 2017-08-22 2020-09-22 Tracefree Corp. Secure and private web browsing system and method
US11601467B2 (en) 2017-08-24 2023-03-07 L3 Technologies, Inc. Service provider advanced threat protection
US11122083B1 (en) 2017-09-08 2021-09-14 F5 Networks, Inc. Methods for managing network connections based on DNS data and network policies and devices thereof
JP6904183B2 (ja) * 2017-09-12 2021-07-14 富士通株式会社 情報処理装置、プログラム及び情報処理方法
US10949486B2 (en) 2017-09-20 2021-03-16 Citrix Systems, Inc. Anchored match algorithm for matching with large sets of URL
US11212210B2 (en) 2017-09-21 2021-12-28 Silver Peak Systems, Inc. Selective route exporting using source type
CN117215824A (zh) * 2017-09-28 2023-12-12 北京忆芯科技有限公司 基于机器学习的读出数据错误处理
CN107689964B (zh) * 2017-09-28 2020-10-23 深圳市友华通信技术有限公司 嵌入式web服务器防重放攻击的方法
US11552987B2 (en) * 2017-09-28 2023-01-10 L3 Technologies, Inc. Systems and methods for command and control protection
US10805381B2 (en) * 2017-10-03 2020-10-13 Citrix Systems, Inc Web storage based IoT device protect mechanism
CN107770030B (zh) * 2017-10-17 2021-01-05 浙江大丰实业股份有限公司 基于vpn技术的舞台设备控制系统、控制方法及控制装置
US11550898B2 (en) 2017-10-23 2023-01-10 L3 Technologies, Inc. Browser application implementing sandbox based internet isolation
US11012555B2 (en) * 2017-11-20 2021-05-18 International Business Machines Corporation Non-verbal sensitive data authentication
US10805420B2 (en) * 2017-11-29 2020-10-13 Forcepoint Llc Proxy-less wide area network acceleration
CN108304214B (zh) * 2017-12-13 2022-05-13 超聚变数字技术有限公司 一种立即数的完整性的校验方法及装置
CN107835260A (zh) * 2017-12-15 2018-03-23 吉旗(成都)科技有限公司 一种文件快速传输方法
US10691489B2 (en) 2018-01-29 2020-06-23 International Business Machines Corporation Managing the processing of streamed data in a data streaming application using query information from a relational database
CN108491174A (zh) * 2018-02-01 2018-09-04 西安万像电子科技有限公司 画面传输方法、装置及系统
US10938872B2 (en) * 2018-03-12 2021-03-02 Qualcomm Incorporated Processing interactivity events for streaming media data
US10637721B2 (en) 2018-03-12 2020-04-28 Silver Peak Systems, Inc. Detecting path break conditions while minimizing network overhead
US11658995B1 (en) 2018-03-20 2023-05-23 F5, Inc. Methods for dynamically mitigating network attacks and devices thereof
EP3550791B1 (en) 2018-04-03 2023-12-06 Palantir Technologies Inc. Controlling access to computer resources
CN108665141B (zh) * 2018-04-03 2022-03-22 山东科技大学 一种从突发事件预案中自动抽取应急响应流程模型的方法
US11438369B2 (en) * 2018-04-09 2022-09-06 Winn Schwartau Information security
CN108616579B (zh) * 2018-04-09 2021-06-15 深圳市腾讯网络信息技术有限公司 应用数据下载方法、服务器、存储介质和电子装置
US11070539B2 (en) * 2018-04-10 2021-07-20 ArecaBay, Inc. Network security dynamic access control and policy enforcement
US11194930B2 (en) * 2018-04-27 2021-12-07 Datatrendz, Llc Unobtrusive systems and methods for collecting, processing and securing information transmitted over a network
US11489843B2 (en) * 2018-05-16 2022-11-01 Equifax Inc. Controlling access to secured data via timed filtering of data
US10353700B1 (en) * 2018-05-21 2019-07-16 Microsoft Technology Licensing, Llc Code base sharing between standalone and web-based versions of an application via an emulated network communication channel
CN109011566A (zh) * 2018-07-23 2018-12-18 广州趣丸网络科技有限公司 一种在实时通讯群组内筛子类游戏的实现方法
US10862757B2 (en) * 2018-08-07 2020-12-08 Dell Products L.P. Isolating a redirected biometric device to a remote session
CN109582320B (zh) * 2018-08-08 2022-05-10 深圳市飞速创新技术股份有限公司 写码方法及终端设备
US10873635B2 (en) * 2018-09-24 2020-12-22 Salesforce.Com, Inc. Multi-channel session connection management mechanism
US20200099738A1 (en) * 2018-09-24 2020-03-26 Citrix Systems, Inc. Systems and methods for bridge protocol between diverse applications
US11516083B2 (en) * 2018-09-28 2022-11-29 Mastercard International Incorporated Systems, computer-readable media and computer-implemented methods for automated, dynamic capacity planning using HTTP response header fields
US11204926B2 (en) 2018-10-31 2021-12-21 International Business Machines Corporation Storing partial tuples from a streaming application in a database system
US10740085B2 (en) * 2018-11-30 2020-08-11 Target Brands, Inc. Webserver interface for deployment management tool
US11204819B2 (en) 2018-12-21 2021-12-21 Samsung Electronics Co., Ltd. System and method for offloading application functions to a device
US20220129800A1 (en) * 2019-01-30 2022-04-28 IC Manage Inc. Global File Flow Forecasting System and Methods of Operation
WO2020171838A1 (en) 2019-02-19 2020-08-27 Tandem Diabetes Care, Inc. System and method of pairing an infusion pump with a remote control device
CN109981734A (zh) * 2019-02-21 2019-07-05 广东星辉天拓互动娱乐有限公司 一种基于互联网的全球业务加速方法
US11659059B2 (en) * 2019-03-01 2023-05-23 Hewlett Packard Enterprise Development Lp Parallel sharing of hardware
CN110046143B (zh) * 2019-03-04 2023-03-28 国网辽宁省电力有限公司信息通信分公司 一种一体化数据平台的整体架构优化系统及优化方法
US11586750B2 (en) * 2019-03-21 2023-02-21 Blackberry Limited Managing access to protected data file content
US11305057B2 (en) 2019-03-26 2022-04-19 Tandem Diabetes Care, Inc. Method and system of operating an infusion pump with a remote control device
US10805652B1 (en) * 2019-03-29 2020-10-13 Amazon Technologies, Inc. Stateful server-less multi-tenant computing at the edge
US10868855B2 (en) 2019-04-01 2020-12-15 Citrix Systems, Inc. File containerization and management
US11943340B2 (en) * 2019-04-19 2024-03-26 Intel Corporation Process-to-process secure data movement in network functions virtualization infrastructures
CN112035272A (zh) * 2019-06-03 2020-12-04 华为技术有限公司 进程间通信的方法、装置以及计算机设备
CN110543371B (zh) * 2019-08-29 2023-11-17 张浩天 一种远程调用接口的方法、装置、电子设备和存储介质
US11704441B2 (en) 2019-09-03 2023-07-18 Palantir Technologies Inc. Charter-based access controls for managing computer resources
US11755825B2 (en) 2019-09-12 2023-09-12 Workiva Inc. Method, system, and computing device for facilitating private drafting
US11240338B2 (en) * 2019-10-22 2022-02-01 Cisco Technology, Inc. Integrated content delivery of enhanced mobile gateway system
US11586685B2 (en) 2019-10-31 2023-02-21 Citrix Systems, Inc. Systems and methods for generating data structures from browser data to determine and initiate actions based thereon
WO2021092448A1 (en) * 2019-11-06 2021-05-14 Fastly, Inc. Managing shared applications at the edge of a content delivery network
US11169864B2 (en) * 2019-11-21 2021-11-09 Spillbox Inc. Systems, methods and computer program products for application environment synchronization between remote devices and on-premise devices
US11231930B2 (en) * 2019-11-25 2022-01-25 Alibaba Group Holding Limited Methods and systems for fetching data for an accelerator
US11075905B2 (en) * 2019-12-09 2021-07-27 Google Llc Requesting and transmitting data for related accounts
US11822522B2 (en) * 2020-01-31 2023-11-21 EMC IP Holding Company LLC Intelligent filesystem for container images
CN111371868B (zh) * 2020-02-26 2023-02-03 北京奇艺世纪科技有限公司 关联web应用和客户端的方法、装置、设备、系统以及存储介质
CN113569245A (zh) * 2020-04-28 2021-10-29 阿里巴巴集团控股有限公司 处理装置、嵌入式系统、片上系统以及安全控制方法
US11409860B2 (en) * 2020-05-21 2022-08-09 Equalearning Corp. System and method for remote authentication
EP3923170A1 (fr) * 2020-06-10 2021-12-15 Bull SAS Système de fichiers distribués et procédé d'accès à un fichier dans un tel système
US11526825B2 (en) 2020-07-27 2022-12-13 Cygnvs Inc. Cloud-based multi-tenancy computing systems and methods for providing response control and analytics
CN111880852B (zh) * 2020-07-28 2022-06-07 平安科技(深圳)有限公司 操作系统初始化方法、系统、计算机设备及存储介质
US11100281B1 (en) 2020-08-17 2021-08-24 Workiva Inc. System and method for maintaining links and revisions
US11443108B2 (en) 2020-08-17 2022-09-13 Workiva Inc. System and method for document management using branching
US11546176B2 (en) * 2020-08-26 2023-01-03 Rockwell Collins, Inc. System and method for authentication and cryptographic ignition of remote devices
US11916908B2 (en) * 2020-10-26 2024-02-27 Dell Products L.P. Method and system for performing an authentication and authorization operation on video data using a data processing unit
US11514949B2 (en) 2020-10-26 2022-11-29 Dell Products L.P. Method and system for long term stitching of video data using a data processing unit
US11599574B2 (en) 2020-10-26 2023-03-07 Dell Products L.P. Method and system for performing a compliance operation on video data using a data processing unit
US11106825B1 (en) 2020-11-10 2021-08-31 Netskope, Inc. Predetermined credential system for remote administrative operating system (OS) authorization and policy control
CN112328701B (zh) * 2020-11-27 2023-11-10 广东睿住智能科技有限公司 数据同步方法、终端设备及计算机可读存储介质
US11880482B2 (en) * 2020-12-10 2024-01-23 International Business Machines Corporation Secure smart containers for controlling access to data
US11397569B2 (en) * 2020-12-21 2022-07-26 Sap Se Deploying micro frontends to different clusters from a single repository
US11868464B2 (en) * 2020-12-22 2024-01-09 Sentrybay Limited Launching applications
US11610011B2 (en) * 2021-01-29 2023-03-21 Akamai Technologies, Inc. Secure transfer of data between programs executing on the same end-user device
US11100277B1 (en) 2021-02-15 2021-08-24 Workiva Inc. Systems, methods, and computer-readable media for flow-through formatting for links
US11716405B1 (en) * 2021-04-14 2023-08-01 Splunk Inc. System and method for identifying cache miss in backend application
US11354362B1 (en) 2021-05-06 2022-06-07 Workiva Inc. System and method for copying linked documents
US11514042B1 (en) * 2021-06-03 2022-11-29 Sap Se Managing multiple cache specifications within a database environment
KR102593034B1 (ko) * 2021-07-02 2023-10-23 고려대학교 산학협력단 다차원 데이터베이스를 위한 스토리지내 데이터 재구성 가속기
US20230015697A1 (en) * 2021-07-13 2023-01-19 Citrix Systems, Inc. Application programming interface (api) authorization
US11477208B1 (en) * 2021-09-15 2022-10-18 Cygnvs Inc. Systems and methods for providing collaboration rooms with dynamic tenancy and role-based security
US11640495B1 (en) 2021-10-15 2023-05-02 Workiva Inc. Systems and methods for translation comments flowback
US20230185915A1 (en) * 2021-12-14 2023-06-15 Palo Alto Networks, Inc. Detecting microsoft windows installer malware using text classification models
CN114422365B (zh) * 2022-01-21 2024-03-19 成都飞鱼星科技股份有限公司 一种基于硬件流加速的上网行为管理方法及系统
CN117336101B (zh) * 2023-11-29 2024-02-23 南京中孚信息技术有限公司 一种细粒度网络接入控制方法、系统、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003029996A (ja) * 2001-07-18 2003-01-31 Toshiba Corp サーバ・システム、クライアント・システム、ソフトウェアストリーミング方法及びプログラム
JP2003281023A (ja) * 2002-03-26 2003-10-03 Toshiba Corp データ転送装置、データ転送方法、データ受信表示装置、プログラム
WO2006005078A2 (en) * 2004-06-30 2006-01-12 Netscaler, Inc. Method and device for performing integrated caching in a data communication network

Family Cites Families (261)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US179955A (en) * 1876-07-18 Improvement in weather-boarding
US229381A (en) * 1880-06-29 John clayton
US225753A (en) * 1880-03-23 Middlings-purifier
US225720A (en) * 1880-03-23 Expanding drill
US2006016A (en) * 1934-07-31 1935-06-25 American Zinc Lead & Smelting Method of making pigmented paper
US4935870A (en) 1986-12-15 1990-06-19 Keycom Electronic Publishing Apparatus for downloading macro programs and executing a downloaded macro program responding to activation of a single key
US5483630A (en) 1990-07-12 1996-01-09 Hitachi, Ltd. Method and apparatus for representing motion of multiple-jointed object, computer graphic apparatus, and robot controller
CA2145921A1 (en) 1994-05-10 1995-11-11 Vijay Pochampalli Kumar Method and apparatus for executing a distributed algorithm or service on a simple network management protocol based computer network
US5485460A (en) 1994-08-19 1996-01-16 Microsoft Corporation System and method for running multiple incompatible network protocol stacks
US5742829A (en) 1995-03-10 1998-04-21 Microsoft Corporation Automatic software installation on heterogeneous networked client computer systems
US5805809A (en) 1995-04-26 1998-09-08 Shiva Corporation Installable performance accelerator for maintaining a local cache storing data residing on a server computer
US5874960A (en) 1995-07-05 1999-02-23 Microsoft Corporation Method and system for sharing applications between computer systems
US6750877B2 (en) 1995-12-13 2004-06-15 Immersion Corporation Controlling haptic feedback for enhancing navigation in a graphical environment
US6253188B1 (en) 1996-09-20 2001-06-26 Thomson Newspapers, Inc. Automated interactive classified ad system for the internet
US5987611A (en) * 1996-12-31 1999-11-16 Zone Labs, Inc. System and methodology for managing internet access on a per application basis for client computers connected to the internet
US6052718A (en) 1997-01-07 2000-04-18 Sightpath, Inc Replica routing
US6026440A (en) 1997-01-27 2000-02-15 International Business Machines Corporation Web server account manager plug-in for monitoring resources
US5941988A (en) 1997-01-27 1999-08-24 International Business Machines Corporation Session and transport layer proxies via TCP glue
US6021470A (en) * 1997-03-17 2000-02-01 Oracle Corporation Method and apparatus for selective data caching implemented with noncacheable and cacheable data for improved cache performance in a computer networking system
US5960170A (en) 1997-03-18 1999-09-28 Trend Micro, Inc. Event triggered iterative virus detection
US5909559A (en) 1997-04-04 1999-06-01 Texas Instruments Incorporated Bus bridge device including data bus of first width for a first processor, memory controller, arbiter circuit and second processor having a different second data width
DE69835314T2 (de) 1997-04-15 2007-05-10 Hewlett-Packard Development Co., L.P., Houston Verfahren und Vorrichtung zur formatgesteuerten Interaktion zwischen Geräten
US6088728A (en) 1997-06-11 2000-07-11 Oracle Corporation System using session data stored in session data storage for associating and disassociating user identifiers for switching client sessions in a server
US6442549B1 (en) 1997-07-25 2002-08-27 Eric Schneider Method, product, and apparatus for processing reusable information
US6006268A (en) 1997-07-31 1999-12-21 Cisco Technology, Inc. Method and apparatus for reducing overhead on a proxied connection
US6061796A (en) 1997-08-26 2000-05-09 V-One Corporation Multi-access virtual private network
US5987482A (en) 1997-09-08 1999-11-16 International Business Machines Corporation Computer system and method of displaying hypertext documents with internal hypertext link definitions
US6023724A (en) 1997-09-26 2000-02-08 3Com Corporation Apparatus and methods for use therein for an ISDN LAN modem that displays fault information to local hosts through interception of host DNS request messages
US6032260A (en) 1997-11-13 2000-02-29 Ncr Corporation Method for issuing a new authenticated electronic ticket based on an expired authenticated ticket and distributed server architecture for using same
US6085247A (en) 1998-06-08 2000-07-04 Microsoft Corporation Server operating system for supporting multiple client-server sessions and dynamic reconnection of users to previous sessions using different computers
US6415329B1 (en) * 1998-03-06 2002-07-02 Massachusetts Institute Of Technology Method and apparatus for improving efficiency of TCP/IP protocol over high delay-bandwidth network
US6292172B1 (en) 1998-03-20 2001-09-18 Samir B. Makhlouf System and method for controlling and integrating various media devices in a universally controlled system
US6578073B1 (en) 1998-05-13 2003-06-10 Hewlett-Packard Development Company, L.P. Accelerated content delivery over a network using reduced size objects
US6640248B1 (en) 1998-07-10 2003-10-28 Malibu Networks, Inc. Application-aware, quality of service (QoS) sensitive, media access control (MAC) layer
US6452915B1 (en) 1998-07-10 2002-09-17 Malibu Networks, Inc. IP-flow classification in a wireless point to multi-point (PTMP) transmission system
US6151599A (en) 1998-07-17 2000-11-21 International Business Machines Corporation Web client scripting test architecture for web server-based authentication
US7197570B2 (en) 1998-07-22 2007-03-27 Appstream Inc. System and method to send predicted application streamlets to a client device
US6687732B1 (en) * 1998-09-28 2004-02-03 Inktomi Corporation Adaptive traffic bypassing in an intercepting network driver
US7136645B2 (en) 1998-10-09 2006-11-14 Netmotion Wireless, Inc. Method and apparatus for providing mobile and other intermittent connectivity in a computing environment
US8078727B2 (en) 1998-10-09 2011-12-13 Netmotion Wireless, Inc. Method and apparatus for providing mobile and other intermittent connectivity in a computing environment
US8060656B2 (en) 1998-10-09 2011-11-15 Netmotion Wireless, Inc. Method and apparatus for providing mobile and other intermittent connectivity in a computing environment
US6546425B1 (en) 1998-10-09 2003-04-08 Netmotion Wireless, Inc. Method and apparatus for providing mobile and other intermittent connectivity in a computing environment
US6550012B1 (en) * 1998-12-11 2003-04-15 Network Associates, Inc. Active firewall system and methodology
AUPP773898A0 (en) 1998-12-16 1999-01-21 Silverbrook Research Pty Ltd An image creation method and apparatus(CEP01)
AUPP773798A0 (en) 1998-12-16 1999-01-21 Silverbrook Research Pty Ltd An image creation method and apparatus(CEP02)
SG116488A1 (en) 1998-12-16 2005-11-28 Silverbrook Res Pty Ltd Printer transfer roller with internal drive motor.
US6631986B2 (en) 1998-12-16 2003-10-14 Silverbrook Research Pty Ltd Printer transport roller with internal drive motor
US6522342B1 (en) 1999-01-27 2003-02-18 Hughes Electronics Corporation Graphical tuning bar for a multi-program data stream
US9141717B2 (en) 1999-03-22 2015-09-22 Esdr Network Solutions Llc Methods, systems, products, and devices for processing DNS friendly identifiers
US7225333B2 (en) * 1999-03-27 2007-05-29 Microsoft Corporation Secure processor architecture for use with a digital rights management (DRM) system on a computing device
US6701432B1 (en) 1999-04-01 2004-03-02 Netscreen Technologies, Inc. Firewall including local bus
US6948113B1 (en) * 1999-04-21 2005-09-20 Seagate Technology Llc Self-throttling error-correction buffer and method for a disc drive
US6505230B1 (en) 1999-05-14 2003-01-07 Pivia, Inc. Client-server independent intermediary mechanism
US6536037B1 (en) 1999-05-27 2003-03-18 Accenture Llp Identification of redundancies and omissions among components of a web based architecture
US6721713B1 (en) 1999-05-27 2004-04-13 Andersen Consulting Llp Business alliance identification in a web architecture framework
US6519571B1 (en) 1999-05-27 2003-02-11 Accenture Llp Dynamic customer profile management
US6957186B1 (en) 1999-05-27 2005-10-18 Accenture Llp System method and article of manufacture for building, managing, and supporting various components of a system
US7165041B1 (en) 1999-05-27 2007-01-16 Accenture, Llp Web-based architecture sales tool
US6615166B1 (en) 1999-05-27 2003-09-02 Accenture Llp Prioritizing components of a network framework required for implementation of technology
US6473794B1 (en) 1999-05-27 2002-10-29 Accenture Llp System for establishing plan to test components of web based framework by displaying pictorial representation and conveying indicia coded components of existing network framework
US7882247B2 (en) 1999-06-11 2011-02-01 Netmotion Wireless, Inc. Method and apparatus for providing secure connectivity in mobile and other intermittent computing environments
US6885920B2 (en) 1999-07-30 2005-04-26 Oshkosh Truck Corporation Control system and method for electric vehicle
US7100195B1 (en) 1999-07-30 2006-08-29 Accenture Llp Managing user information on an e-commerce system
US6601233B1 (en) 1999-07-30 2003-07-29 Accenture Llp Business components framework
US6718535B1 (en) 1999-07-30 2004-04-06 Accenture Llp System, method and article of manufacture for an activity framework design in an e-commerce based environment
US7184866B2 (en) 1999-07-30 2007-02-27 Oshkosh Truck Corporation Equipment service vehicle with remote monitoring
US6633878B1 (en) 1999-07-30 2003-10-14 Accenture Llp Initializing an ecommerce database framework
US6523027B1 (en) 1999-07-30 2003-02-18 Accenture Llp Interfacing servers in a Java based e-commerce architecture
US6609128B1 (en) 1999-07-30 2003-08-19 Accenture Llp Codes table framework design in an E-commerce architecture
US6993421B2 (en) 1999-07-30 2006-01-31 Oshkosh Truck Corporation Equipment service vehicle with network-assisted vehicle service and repair
US6704873B1 (en) 1999-07-30 2004-03-09 Accenture Llp Secure gateway interconnection in an e-commerce based environment
US6609198B1 (en) 1999-08-05 2003-08-19 Sun Microsystems, Inc. Log-on service providing credential level change without loss of session continuity
US6691232B1 (en) 1999-08-05 2004-02-10 Sun Microsystems, Inc. Security architecture with environment sensitive credential sufficiency evaluation
US6697849B1 (en) 1999-08-13 2004-02-24 Sun Microsystems, Inc. System and method for caching JavaServer Pages™ responses
US6539396B1 (en) 1999-08-31 2003-03-25 Accenture Llp Multi-object identifier system and method for information service pattern environment
US6477665B1 (en) 1999-08-31 2002-11-05 Accenture Llp System, method, and article of manufacture for environment services patterns in a netcentic environment
US6477580B1 (en) 1999-08-31 2002-11-05 Accenture Llp Self-described stream in a communication services patterns environment
US6640249B1 (en) 1999-08-31 2003-10-28 Accenture Llp Presentation services patterns in a netcentric environment
US6571282B1 (en) 1999-08-31 2003-05-27 Accenture Llp Block-based communication in a communication services patterns environment
US6434568B1 (en) 1999-08-31 2002-08-13 Accenture Llp Information services patterns in a netcentric environment
US6502213B1 (en) 1999-08-31 2002-12-31 Accenture Llp System, method, and article of manufacture for a polymorphic exception handler in environment services patterns
US6256773B1 (en) 1999-08-31 2001-07-03 Accenture Llp System, method and article of manufacture for configuration management in a development architecture framework
US6405364B1 (en) 1999-08-31 2002-06-11 Accenture Llp Building techniques in a development architecture framework
US6606660B1 (en) 1999-08-31 2003-08-12 Accenture Llp Stream-based communication in a communication services patterns environment
US6442748B1 (en) 1999-08-31 2002-08-27 Accenture Llp System, method and article of manufacture for a persistent state and persistent object separator in an information services patterns environment
US6529948B1 (en) 1999-08-31 2003-03-04 Accenture Llp Multi-object fetch component
US6636242B2 (en) 1999-08-31 2003-10-21 Accenture Llp View configurer in a presentation services patterns environment
US6615253B1 (en) 1999-08-31 2003-09-02 Accenture Llp Efficient server side data retrieval for execution of client side applications
US6715145B1 (en) 1999-08-31 2004-03-30 Accenture Llp Processing pipeline in a base services pattern environment
US6742015B1 (en) 1999-08-31 2004-05-25 Accenture Llp Base services patterns in a netcentric environment
US6549949B1 (en) 1999-08-31 2003-04-15 Accenture Llp Fixed format stream in a communication services patterns environment
US6289382B1 (en) 1999-08-31 2001-09-11 Andersen Consulting, Llp System, method and article of manufacture for a globally addressable interface in a communication services patterns environment
US6640238B1 (en) 1999-08-31 2003-10-28 Accenture Llp Activity component in a presentation services patterns environment
US6842906B1 (en) 1999-08-31 2005-01-11 Accenture Llp System and method for a refreshable proxy pool in a communication services patterns environment
US6324647B1 (en) 1999-08-31 2001-11-27 Michel K. Bowman-Amuah System, method and article of manufacture for security management in a development architecture framework
US6578068B1 (en) 1999-08-31 2003-06-10 Accenture Llp Load balancer in environment services patterns
US6314452B1 (en) 1999-08-31 2001-11-06 Rtimage, Ltd. System and method for transmitting a digital image over a communication network
US6601192B1 (en) 1999-08-31 2003-07-29 Accenture Llp Assertion component in environment services patterns
US6370573B1 (en) 1999-08-31 2002-04-09 Accenture Llp System, method and article of manufacture for managing an environment of a development architecture framework
US6601234B1 (en) 1999-08-31 2003-07-29 Accenture Llp Attribute dictionary in a business logic services environment
US6662357B1 (en) 1999-08-31 2003-12-09 Accenture Llp Managing information in an integrated development architecture framework
US6434628B1 (en) 1999-08-31 2002-08-13 Accenture Llp Common interface for handling exception interface name with additional prefix and suffix for handling exceptions in environment services patterns
US6496850B1 (en) 1999-08-31 2002-12-17 Accenture Llp Clean-up of orphaned server contexts
US6550057B1 (en) 1999-08-31 2003-04-15 Accenture Llp Piecemeal retrieval in an information services patterns environment
US6640244B1 (en) 1999-08-31 2003-10-28 Accenture Llp Request batcher in a transaction services patterns environment
US7139999B2 (en) 1999-08-31 2006-11-21 Accenture Llp Development architecture framework
US6529909B1 (en) 1999-08-31 2003-03-04 Accenture Llp Method for translating an object attribute converter in an information services patterns environment
US6438594B1 (en) 1999-08-31 2002-08-20 Accenture Llp Delivering service to a client via a locally addressable interface
US6615199B1 (en) 1999-08-31 2003-09-02 Accenture, Llp Abstraction factory in a base services pattern environment
US6339832B1 (en) 1999-08-31 2002-01-15 Accenture Llp Exception response table in environment services patterns
US6332163B1 (en) 1999-09-01 2001-12-18 Accenture, Llp Method for providing communication services over a computer network system
JP3873548B2 (ja) 1999-10-29 2007-01-24 富士通株式会社 情報提供サービス、情報提供方法及び情報提供装置
US6449658B1 (en) 1999-11-18 2002-09-10 Quikcat.Com, Inc. Method and apparatus for accelerating data through communication networks
US20020073167A1 (en) 1999-12-08 2002-06-13 Powell Kyle E. Internet content delivery acceleration system employing a hybrid content selection scheme
JP3546787B2 (ja) 1999-12-16 2004-07-28 インターナショナル・ビジネス・マシーンズ・コーポレーション アクセス制御システム、アクセス制御方法、及び記憶媒体
US7149222B2 (en) 1999-12-21 2006-12-12 Converged Access, Inc. Integrated access point network device
US7167844B1 (en) 1999-12-22 2007-01-23 Accenture Llp Electronic menu document creator in a virtual financial environment
US7069234B1 (en) 1999-12-22 2006-06-27 Accenture Llp Initiating an agreement in an e-commerce environment
US6629081B1 (en) 1999-12-22 2003-09-30 Accenture Llp Account settlement and financing in an e-commerce environment
US6665726B1 (en) 2000-01-06 2003-12-16 Akamai Technologies, Inc. Method and system for fault tolerant media streaming over the internet
US6820133B1 (en) * 2000-02-07 2004-11-16 Netli, Inc. System and method for high-performance delivery of web content using high-performance communications protocol between the first and second specialized intermediate nodes to optimize a measure of communications performance between the source and the destination
US6496935B1 (en) * 2000-03-02 2002-12-17 Check Point Software Technologies Ltd System, device and method for rapid packet filtering and processing
US20020059274A1 (en) 2000-03-03 2002-05-16 Hartsell Neal D. Systems and methods for configuration of information management systems
US20020174227A1 (en) * 2000-03-03 2002-11-21 Hartsell Neal D. Systems and methods for prioritization in information management environments
US20020049608A1 (en) * 2000-03-03 2002-04-25 Hartsell Neal D. Systems and methods for providing differentiated business services in information management environments
US20020116452A1 (en) 2000-03-03 2002-08-22 Surgient Networks, Inc. Network connected computing system including storage system
US20020049841A1 (en) * 2000-03-03 2002-04-25 Johnson Scott C Systems and methods for providing differentiated service in information management environments
US20030236837A1 (en) 2000-03-03 2003-12-25 Johnson Scott C. Content delivery system providing accelerate content delivery
US20020105972A1 (en) 2000-03-03 2002-08-08 Richter Roger K. Interprocess communications within a network node using switch fabric
US20020107989A1 (en) * 2000-03-03 2002-08-08 Johnson Scott C. Network endpoint system with accelerated data path
US20030236745A1 (en) 2000-03-03 2003-12-25 Hartsell Neal D Systems and methods for billing in information management environments
US20020065864A1 (en) * 2000-03-03 2002-05-30 Hartsell Neal D. Systems and method for resource tracking in information management environments
US20020107903A1 (en) * 2000-11-07 2002-08-08 Richter Roger K. Methods and systems for the order serialization of information in a network processing environment
US20030236919A1 (en) 2000-03-03 2003-12-25 Johnson Scott C. Network connected computing system
US20020107990A1 (en) * 2000-03-03 2002-08-08 Surgient Networks, Inc. Network connected computing system including network switch
US20020108059A1 (en) * 2000-03-03 2002-08-08 Canion Rodney S. Network security accelerator
US20030236861A1 (en) 2000-03-03 2003-12-25 Johnson Scott C. Network content delivery system with peer to peer processing components
US20020133593A1 (en) 2000-03-03 2002-09-19 Johnson Scott C. Systems and methods for the deterministic management of information
US20020095400A1 (en) 2000-03-03 2002-07-18 Johnson Scott C Systems and methods for managing differentiated service in information management environments
US7020719B1 (en) * 2000-03-24 2006-03-28 Netli, Inc. System and method for high-performance delivery of Internet messages by selecting first and second specialized intermediate nodes to optimize a measure of communications performance between the source and the destination
US6701514B1 (en) 2000-03-27 2004-03-02 Accenture Llp System, method, and article of manufacture for test maintenance in an automated scripting framework
US6502102B1 (en) 2000-03-27 2002-12-31 Accenture Llp System, method and article of manufacture for a table-driven automated scripting architecture
US6907546B1 (en) 2000-03-27 2005-06-14 Accenture Llp Language-driven interface for an automated testing framework
US6553377B1 (en) 2000-03-31 2003-04-22 Network Associates, Inc. System and process for maintaining a plurality of remote security applications using a modular framework in a distributed computing environment
US7054279B2 (en) 2000-04-07 2006-05-30 Broadcom Corporation Method and apparatus for optimizing signal transformation in a frame-based communications network
US20010030667A1 (en) 2000-04-10 2001-10-18 Kelts Brett R. Interactive display interface for information objects
US6981041B2 (en) 2000-04-13 2005-12-27 Aep Networks, Inc. Apparatus and accompanying methods for providing, through a centralized server site, an integrated virtual office environment, remotely accessible via a network-connected web browser, with remote network monitoring and management capabilities
US6701345B1 (en) 2000-04-13 2004-03-02 Accenture Llp Providing a notification when a plurality of users are altering similar data in a health care solution environment
US20020002603A1 (en) 2000-04-17 2002-01-03 Mark Vange System and method for web serving
US6976090B2 (en) 2000-04-20 2005-12-13 Actona Technologies Ltd. Differentiated content and application delivery via internet
JP3557998B2 (ja) 2000-04-28 2004-08-25 日本電気株式会社 フラグメンテーション処理デバイスおよびこれを用いたフラグメンテーション処理装置
US6868451B1 (en) 2000-06-20 2005-03-15 Palm Source, Inc. Data exchange between a handheld device and another computer system using an exchange manager via synchronization
US7047281B1 (en) * 2000-08-08 2006-05-16 Fineground Networks Method and system for accelerating the delivery of content in a networked environment
US20020038339A1 (en) 2000-09-08 2002-03-28 Wei Xu Systems and methods for packet distribution
AU2001293269A1 (en) 2000-09-11 2002-03-26 David Edgar System, method, and computer program product for optimization and acceleration of data transport and processing
US7958185B2 (en) 2000-09-18 2011-06-07 Bentley Systems, Inc. Spatial data enabled engineering, construction, and operations computer-aided design (CAD) project system, method and computer program product
US6970939B2 (en) 2000-10-26 2005-11-29 Intel Corporation Method and apparatus for large payload distribution in a network
US8996698B1 (en) 2000-11-03 2015-03-31 Truphone Limited Cooperative network for mobile internet access
US6959320B2 (en) 2000-11-06 2005-10-25 Endeavors Technology, Inc. Client-side performance optimization system for streamed applications
US6918113B2 (en) 2000-11-06 2005-07-12 Endeavors Technology, Inc. Client installation and execution system for streamed applications
US7043524B2 (en) 2000-11-06 2006-05-09 Omnishift Technologies, Inc. Network caching system for streamed applications
US20020107962A1 (en) * 2000-11-07 2002-08-08 Richter Roger K. Single chassis network endpoint system with network processor for load balancing
US20020107971A1 (en) * 2000-11-07 2002-08-08 Bailey Brian W. Network transport accelerator
AU2002227121A1 (en) 2000-11-07 2002-05-21 Surgient Networks, Inc. Systems and methods for providing differentiated business services in information management environments
US7191252B2 (en) 2000-11-13 2007-03-13 Digital Doors, Inc. Data security system and method adjunct to e-mail, browser or telecom program
US7146644B2 (en) 2000-11-13 2006-12-05 Digital Doors, Inc. Data security system and method responsive to electronic attacks
US7140044B2 (en) 2000-11-13 2006-11-21 Digital Doors, Inc. Data security system and method for separation of user communities
US7082409B1 (en) 2000-11-22 2006-07-25 Richard Sutton Cherry Fully integrated on-line interactive purchasing club incorporating extremely rapid fulfillment
JP2002162337A (ja) * 2000-11-26 2002-06-07 Yoshikazu Nakayama 集束イオンビーム加工による走査型顕微鏡用プローブ
US7225040B2 (en) 2001-11-14 2007-05-29 Exxon Mobil Oil Corporation Method and system for reducing lead-time in the packaging industry
US20020111972A1 (en) 2000-12-15 2002-08-15 Virtual Access Networks. Inc. Virtual access
US6963981B1 (en) 2001-01-29 2005-11-08 Akamai Technologies, Inc. Method and apparatus for remote installation of an operating system over a network connection
US7383329B2 (en) 2001-02-13 2008-06-03 Aventail, Llc Distributed cache for state transfer operations
US7360075B2 (en) 2001-02-12 2008-04-15 Aventail Corporation, A Wholly Owned Subsidiary Of Sonicwall, Inc. Method and apparatus for providing secure streaming data transmission facilities using unreliable protocols
US7353380B2 (en) 2001-02-12 2008-04-01 Aventail, Llc, A Subsidiary Of Sonicwall, Inc. Method and apparatus for providing secure streaming data transmission facilities using unreliable protocols
US20040073512A1 (en) 2001-02-23 2004-04-15 David Maung Unique session storage design
US7310687B2 (en) * 2001-03-23 2007-12-18 Cisco Technology, Inc. Methods and systems for managing class-based condensation
US7506047B2 (en) 2001-03-30 2009-03-17 Bmc Software, Inc. Synthetic transaction monitor with replay capability
US7099273B2 (en) 2001-04-12 2006-08-29 Bytemobile, Inc. Data transport acceleration and management within a network communication system
US7277953B2 (en) 2001-04-18 2007-10-02 Emc Corporation Integrated procedure for partitioning network data services among multiple subscribers
WO2002103521A1 (en) * 2001-06-19 2002-12-27 Cable & Wireless Internet Services, Inc. Real-time streaming media measurement system and method
US7149892B2 (en) 2001-07-06 2006-12-12 Juniper Networks, Inc. Secure sockets layer proxy architecture
JP2003037623A (ja) * 2001-07-23 2003-02-07 Philips Japan Ltd Mpegネットワーク上におけるダイレクトrtp伝送方法及びシステム
EP1563389A4 (en) 2001-08-01 2008-06-25 Actona Technologies Ltd VIRTUAL DATA DISTRIBUTION NETWORK
WO2003014867A2 (en) 2001-08-03 2003-02-20 John Allen Ananian Personalized interactive digital catalog profiling
US7100054B2 (en) 2001-08-09 2006-08-29 American Power Conversion Computer network security system
ATE397817T1 (de) 2001-08-31 2008-06-15 First Hop Oy Verfahren zur optimierung der leistung in drahtlosen netzwerken unter verwendung von snmp- agenten
FI114365B (fi) * 2001-08-31 2004-09-30 First Hop Oy Menetelmä langattomien verkkojen suorituskyvyn optimoimiseksi
EP1440550B8 (en) * 2001-10-24 2018-04-11 Rateze Remote Mgmt. L.L.C. Methods for multicasting content
US20060274828A1 (en) 2001-11-01 2006-12-07 A4S Security, Inc. High capacity surveillance system with fast search capability
AU2002357711A1 (en) 2001-11-13 2003-05-26 Ems Technologies, Inc. Flow control between performance enhancing proxies over variable bandwidth split links
US7380120B1 (en) * 2001-12-12 2008-05-27 Guardian Data Storage, Llc Secured data format for access control
US20030115421A1 (en) 2001-12-13 2003-06-19 Mchenry Stephen T. Centralized bounded domain caching control system for network edge servers
US7194521B1 (en) 2001-12-18 2007-03-20 Cisco Technology, Inc. HTTP call Recognition on a PSTN device
EP1326185A1 (en) 2002-01-08 2003-07-09 Alcatel Offline behaviour analysis for online personalisation of value added services
US20040039594A1 (en) 2002-01-09 2004-02-26 Innerpresence Networks, Inc. Systems and methods for dynamically generating licenses in a rights management system
US7246230B2 (en) 2002-01-29 2007-07-17 Bea Systems, Inc. Single sign-on over the internet using public-key cryptography
US7984157B2 (en) 2002-02-26 2011-07-19 Citrix Systems, Inc. Persistent and reliable session securely traversing network components using an encapsulating protocol
US20030172138A1 (en) 2002-03-11 2003-09-11 Mccormack Jonathan I. System and method for managing two or more electronic devices
US7707287B2 (en) * 2002-03-22 2010-04-27 F5 Networks, Inc. Virtual host acceleration system
US7607062B2 (en) * 2002-03-25 2009-10-20 Akamai Technologies, Inc. System for fast recovery from losses for reliable data communication protocols
WO2003083692A1 (en) 2002-03-27 2003-10-09 First Virtual Communications System and method for traversing firewalls with protocol communications
US7133905B2 (en) * 2002-04-09 2006-11-07 Akamai Technologies, Inc. Method and system for tiered distribution in a content delivery network
WO2003088125A2 (en) 2002-04-10 2003-10-23 Transtech Pharma, Inc. System and method for integrated computer-aided molecular discovery
CN1279439C (zh) * 2002-04-18 2006-10-11 阿登斯公司 将数据流式传输至一网络中的计算机的系统和方法
US7631107B2 (en) 2002-06-11 2009-12-08 Pandya Ashish A Runtime adaptable protocol processor
US7107309B1 (en) 2002-07-03 2006-09-12 Sprint Spectrum L.P. Method and system for providing interstitial notice
US6987987B1 (en) 2002-07-03 2006-01-17 Sprint Spectrum L.P. Method and system for providing advanced notice of cost to access web content
US7260639B2 (en) * 2002-07-09 2007-08-21 Akamai Technologies, Inc. Method and system for protecting web sites from public internet threats
US7395355B2 (en) * 2002-07-11 2008-07-01 Akamai Technologies, Inc. Method for caching and delivery of compressed content in a content delivery network
US20040015591A1 (en) 2002-07-18 2004-01-22 Wang Frank Xiao-Dong Collective TCP control for improved wireless network performance
US6678828B1 (en) 2002-07-22 2004-01-13 Vormetric, Inc. Secure network file access control system
US7171469B2 (en) 2002-09-16 2007-01-30 Network Appliance, Inc. Apparatus and method for storing data in a proxy cache in a network
US20040078772A1 (en) 2002-10-16 2004-04-22 Cosine Communications, Inc. Dynamic route exchange
US7120666B2 (en) * 2002-10-30 2006-10-10 Riverbed Technology, Inc. Transaction accelerator for client-server communication systems
US8176186B2 (en) 2002-10-30 2012-05-08 Riverbed Technology, Inc. Transaction accelerator for client-server communications systems
US8069225B2 (en) 2003-04-14 2011-11-29 Riverbed Technology, Inc. Transparent client-server transaction accelerator
US7363347B2 (en) 2002-11-07 2008-04-22 Hewlett-Packard Development Company, L.P. Method and system for reestablishing connection information on a switch connected to plural servers in a computer network
US7353533B2 (en) 2002-12-18 2008-04-01 Novell, Inc. Administration of protection of data accessible by a mobile device
US20040148292A1 (en) 2003-01-27 2004-07-29 Clemens Ian Kyle Method of adaptive data transmission
US7126955B2 (en) 2003-01-29 2006-10-24 F5 Networks, Inc. Architecture for efficient utilization and optimum performance of a network
US7426543B2 (en) 2003-04-25 2008-09-16 Sap Ag Accessing data stored in multiple locations
US7681235B2 (en) 2003-05-19 2010-03-16 Radware Ltd. Dynamic network protection
US7260840B2 (en) 2003-06-06 2007-08-21 Microsoft Corporation Multi-layer based method for implementing network firewalls
US7359395B2 (en) 2003-06-16 2008-04-15 Packeteer, Inc. Pre-fetch communication systems and methods
US7739715B2 (en) 2003-06-24 2010-06-15 Microsoft Corporation Variable play speed control for media streams
US7636917B2 (en) 2003-06-30 2009-12-22 Microsoft Corporation Network load balancing with host status information
US7613822B2 (en) 2003-06-30 2009-11-03 Microsoft Corporation Network load balancing with session information
US7286476B2 (en) * 2003-08-01 2007-10-23 F5 Networks, Inc. Accelerating network performance by striping and parallelization of TCP connections
US8131739B2 (en) 2003-08-21 2012-03-06 Microsoft Corporation Systems and methods for interfacing application programs with an item-based storage platform
US7353499B2 (en) 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US7552109B2 (en) 2003-10-15 2009-06-23 International Business Machines Corporation System, method, and service for collaborative focused crawling of documents on a network
US7058058B2 (en) * 2003-11-05 2006-06-06 Juniper Networks, Inc. Transparent optimization for transmission control protocol initial session establishment
US8255973B2 (en) 2003-12-10 2012-08-28 Chris Hopen Provisioning remote computers for accessing resources
US8572249B2 (en) 2003-12-10 2013-10-29 Aventail Llc Network appliance for balancing load and platform services
US7827590B2 (en) 2003-12-10 2010-11-02 Aventail Llc Controlling access to a set of resources in a network
US7380039B2 (en) 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US20050177866A1 (en) 2004-02-09 2005-08-11 Kirsch Steven T. Method and system for acceleration of secure socket layer transactions in a network
FI117813B (fi) 2004-03-11 2007-02-28 First Hop Oy Sovellukseen integroitu kiihdytysasiakas
US7827294B2 (en) 2004-05-06 2010-11-02 American Express Travel Related Services Company, Inc. System and method for dynamic security provisioning of computing resources
US8230095B2 (en) 2004-05-07 2012-07-24 Wyse Technology, Inc. System and method for integrated on-demand delivery of operating system and applications
US8812613B2 (en) 2004-06-03 2014-08-19 Maxsp Corporation Virtual application manager
EP1767010B1 (en) 2004-06-15 2015-11-11 Tekelec Global, Inc. Method, system, and computer program products for content-based screening of MMS messages
KR20070037648A (ko) * 2004-07-23 2007-04-05 사이트릭스 시스템스, 인크. 주변장치에서 가상 사설망 게이트웨이로 패킷을 라우팅하기위한 방법 및 시스템
JP4394541B2 (ja) 2004-08-23 2010-01-06 日本電気株式会社 通信装置、データ通信方法およびプログラム
US7711835B2 (en) * 2004-09-30 2010-05-04 Citrix Systems, Inc. Method and apparatus for reducing disclosure of proprietary data in a networked environment
AU2005322870A1 (en) 2004-12-30 2006-07-13 Citrix Systems, Inc. Systems and methods for providing client-side acceleration techniques
US7420992B1 (en) 2005-03-17 2008-09-02 Packeteer, Inc. Adaptive network traffic compression mechanism including dynamic selection of compression algorithms
US7899864B2 (en) 2005-11-01 2011-03-01 Microsoft Corporation Multi-user terminal services accelerator
US20070130324A1 (en) 2005-12-05 2007-06-07 Jieming Wang Method for detecting non-responsive applications in a TCP-based network
US20070174429A1 (en) * 2006-01-24 2007-07-26 Citrix Systems, Inc. Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment
US8151323B2 (en) 2006-04-12 2012-04-03 Citrix Systems, Inc. Systems and methods for providing levels of access and action control via an SSL VPN appliance
US8572721B2 (en) 2006-08-03 2013-10-29 Citrix Systems, Inc. Methods and systems for routing packets in a VPN-client-to-VPN-client connection via an SSL/VPN network appliance
US8694684B2 (en) * 2006-08-21 2014-04-08 Citrix Systems, Inc. Systems and methods of symmetric transport control protocol compression
US8312120B2 (en) * 2006-08-22 2012-11-13 Citrix Systems, Inc. Systems and methods for providing dynamic spillover of virtual servers based on bandwidth
CA2665873A1 (en) 2006-10-20 2008-05-02 Citrix Systems, Inc. Methods and systems for accessing remote user files associated with local resources
US7853679B2 (en) * 2007-03-12 2010-12-14 Citrix Systems, Inc. Systems and methods for configuring handling of undefined policy events
US8490148B2 (en) * 2007-03-12 2013-07-16 Citrix Systems, Inc Systems and methods for managing application security profiles
US7853678B2 (en) * 2007-03-12 2010-12-14 Citrix Systems, Inc. Systems and methods for configuring flow control of policy expressions
US7865589B2 (en) * 2007-03-12 2011-01-04 Citrix Systems, Inc. Systems and methods for providing structured policy expressions to represent unstructured data in a network appliance
US8484656B2 (en) 2007-03-12 2013-07-09 Citrix Systems, Inc. Systems and methods for providing global server load balancing of heterogeneous devices

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003029996A (ja) * 2001-07-18 2003-01-31 Toshiba Corp サーバ・システム、クライアント・システム、ソフトウェアストリーミング方法及びプログラム
JP2003281023A (ja) * 2002-03-26 2003-10-03 Toshiba Corp データ転送装置、データ転送方法、データ受信表示装置、プログラム
WO2006005078A2 (en) * 2004-06-30 2006-01-12 Netscaler, Inc. Method and device for performing integrated caching in a data communication network

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013009329A (ja) * 2011-05-20 2013-01-10 Nippon Hoso Kyokai <Nhk> 受信機
JP2015537269A (ja) * 2012-09-07 2015-12-24 オラクル・インターナショナル・コーポレイション Ldapベースのマルチテナント・インクラウド・アイデンティティ管理システム
US10581867B2 (en) 2012-09-07 2020-03-03 Oracle International Corporation Multi-tenancy identity management system
JP2015531517A (ja) * 2012-09-20 2015-11-02 アルカテル−ルーセント システム制御
KR20150082723A (ko) * 2014-01-06 2015-07-16 에스케이플래닛 주식회사 데이터의 저장 효율성을 높이기 위한 사용자 단말기 및 사용자 단말기의 데이터 저장 방법
KR102177924B1 (ko) * 2014-01-06 2020-11-13 에스케이플래닛 주식회사 데이터의 저장 효율성을 높이기 위한 사용자 단말기 및 사용자 단말기의 데이터 저장 방법
JP2017531337A (ja) * 2014-07-10 2017-10-19 アール・エイ・アイ・ストラテジック・ホールディングス・インコーポレイテッド 読み出し要求に基づくデバイスの操作を制御するためのシステム及び関連する方法、装置、ならびにコンピュータプログラム製品
JP2017538987A (ja) * 2014-09-30 2017-12-28 クアルコム,インコーポレイテッド トランスポートアクセラレータによるユーザエージェントシグナリング要求加速のためのシステムおよび方法
KR20180033667A (ko) * 2016-09-26 2018-04-04 삼성전자주식회사 스트리밍 서비스를 제공하는 방법 및 장치
KR102610480B1 (ko) * 2016-09-26 2023-12-06 삼성전자 주식회사 스트리밍 서비스를 제공하는 방법 및 장치

Also Published As

Publication number Publication date
CN101473628A (zh) 2009-07-01
WO2007121241A2 (en) 2007-10-25
US20100023582A1 (en) 2010-01-28
US8151323B2 (en) 2012-04-03
EP2005712B1 (en) 2019-03-06
CA2646414A1 (en) 2007-10-25
BRPI0709986A2 (pt) 2011-08-02
US20070245409A1 (en) 2007-10-18
CN104767834B (zh) 2018-09-14
KR20080110894A (ko) 2008-12-19
US8886822B2 (en) 2014-11-11
US7970923B2 (en) 2011-06-28
BRPI0709986B1 (pt) 2019-10-15
WO2007121241A3 (en) 2007-12-13
CN104767834A (zh) 2015-07-08
US20070244987A1 (en) 2007-10-18
EP2005712A2 (en) 2008-12-24
IL194567A0 (en) 2009-08-03
AU2007238099A1 (en) 2007-10-25
AU2007238099B2 (en) 2012-02-23

Similar Documents

Publication Publication Date Title
US7970923B2 (en) Systems and methods for accelerating delivery of a computing environment to a remote user
CN110710184B (zh) 用于安全且透明地代理SaaS应用的系统和方法
JP4734592B2 (ja) クライアントリダイレクトによるプライベートネットワークへの安全なアクセス提供方法およびシステム
US7660902B2 (en) Dynamic file access control and management
JP5372083B2 (ja) クライアント側の加速技術を提供するシステムおよび方法
US8397287B2 (en) Method and system for authorizing a level of access of a client to a virtual private network connection, based on a client-side attribute
US8831995B2 (en) Optimized server for streamed applications
US8132247B2 (en) Systems and methods for authorizing a client in an SSL VPN session failover environment
KR100794432B1 (ko) 데이터 통신 프로토콜
AU2012200921A1 (en) Systems and methods for accelerating delivery of a computing environment to a remote user
KR101130475B1 (ko) 데이터 통신 프로토콜
WO2002041554A9 (en) Dynamic file access control and management

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100319

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110915

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110921

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20111220

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20111228

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120312