PROVISION OF COMPUTING RESOURCES TO A VIRTUAL MACHINE DESIGNED TO HOST A GROUP OF APPLICATION PROGRAMS ASSIGNED TO A USER
Patent Information
- Application Number
- DE112016006083
- Authority / Receiving Office
- DE · DE
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2015-12-28
- Filing Date
- 2016-12-21
- Publication Date
- 2025-07-17
- Estimated Expiration
- 2036-12-21
Smart Images

Figure 00000000_0000_ABST
Abstract
Description
GENERAL STATE OF THE ART
[0001] In a business environment, many workers require access to computing resources to perform their job duties. For example, an administrative worker may need access to word processing, data processing, and database access capabilities. An engineer may need computer-aided drafting (CAD) applications and complex simulation software. Some companies provide computing resources to their workers by acquiring personal computers for each worker. Personal computers can be configured with varying amounts of memory, data storage, and processing capabilities. Specifying the correct configuration for each worker is a difficult problem. If a worker is provided with computing resources that significantly exceed the worker's computing needs, the excess resources may be wasted.If an employee is provided with insufficient computing resources, the employee's ability to perform their job duties may be impaired and the computer system may require early replacement or costly upgrades.
[0002] Some companies have chosen to solve these problems by obtaining computing resources from online service providers on an as-needed basis. An online service provider can provide computing services to employees via thin clients or terminals. While this model allows for some increased flexibility in adjusting the amount of computing resources provided, it can still be difficult to determine the optimal amount of computing resources to provide to each employee, and it is still subject to the problems discussed above, among others.
[0003] US 2014 / 0258155 A1 discloses systems and methods for accessing an application available in a data center of a program execution service. Metadata associated with a user computing device can be used to determine whether the user computing device is authorized to access the application via a virtual desktop instance. At least a portion of the application can be executed by the virtual desktop instance and made available to the user. Applications can be purchased, licensed, or rented by a user.
[0004] US 2015 / 0019733 A1 discloses a process for managing remote computing sessions directed at executing and managing aspects of virtual instances running on computers of a data center on a PES (Program Execution Service) platform. A computing session may be established between the PES platform and a computer connected to the PES platform via a communications network. The data created by the user of the client computing device interacting with the virtual instance may be stored, and after an interruption of the remote computing session, the data may be used when reestablishing the remote computing session. BRIEF DESCRIPTION OF THE DRAWINGS
[0005] Various techniques are described with reference to the drawings in which: Fig.1 shows an illustrative example of an environment in which various embodiments may be performed; Fig. 2 shows an illustrative example of a process that, as a result of its performance, determines the computing resource requirements for a client based at least in part on a group of selected application programs, according to one embodiment; Fig. 3 shows an illustrative example of a process that, as a result of its execution, assigns a virtual instance type to a user according to one embodiment; Fig. 4 shows an illustrative example of a client-server computer system that provides computing resources to a client configured to host a defined set of applications, according to one embodiment; Fig.5 shows an illustrative example of a process that, as a result of being performed by a client computer system, provides computing resources from a server and receives display streams from applications executing on the server, according to one embodiment; Fig. 6 shows an illustrative example of a client-server computer system that, according to one embodiment, provides computing resources to a client in the form of a series of virtual machines, each virtual machine configured to host a particular application defined by the client; Fig. 7 shows an illustrative example of a client-server computer system that receives a number of display streams from a number of computing resources and combines the display streams into a unified screen on a client display, according to one embodiment; Fig.8 shows an illustrative example of a process that, as a result of being performed by a client computer system, provides a group of virtual machines from a server and consolidates streams of display information from the virtual machines into a unified display screen, according to one embodiment; Fig. 9 shows an illustrative example of a client-server computer system that, according to one embodiment, provides computing resources to a number of clients by providing a virtual machine that hosts a single application that supports multiple sessions; and Fig. Figure 10 illustrates an environment in which various embodiments may be implemented. DETAILED DESCRIPTION
[0006] This document describes making computing resources available to a user by assigning one or more virtual machines ("VMs") to the user and streaming display information from applications hosted on the virtual machines to an application streaming client running on a client computer system. The characteristics of the virtual machines are determined by specifying a set of applications for use by the user and allocating to the virtual machines a set of computing resources designed to host the specified set of applications. Each application has an associated set of computing resource requirements that describe the computing resources required to host the application.Each group of requirements defines the amounts of different types of computing resources, such as disk space, free memory, frame buffer, and processor speed.
[0007] In some environments, a single virtual machine hosts the specified applications. The sets of requirements for the specified applications are merged into a single set of requirements, and the single set of requirements is used to create a virtual machine according to the merged requirements that is capable of hosting the specified applications. In another example, the single set of requirements is used to select a resource profile from a set of predefined resource profiles, and the selected resource profile is used to create the virtual machine for the user.A streaming agent running on the virtual machine encodes display information provided by the hosted applications and transmits the encoded display information to a client computer system associated with the user via an application streaming client. The user is able to interact with the virtual machine through the client computer system, and generally, the computing resources provided by the virtual machine can be maintained, expanded, or modified by an administrator or other party in response to changing user needs or changing application requirements.
[0008] The merging of application requests can be customized based on predicted or observed application usage patterns. For example, the groups of application requests can be merged in a way that assumes the user is not running more than one application at a time, or that only defined applications can run concurrently. When two applications are running concurrently, the virtual machine hosting the applications is allocated an amount of memory equal to the sum of the memory requests for each application. When a number of applications are not running concurrently, the virtual machine hosting the applications is allocated an amount of memory equal to the maximum amount of memory required by each application.Certain types of computing resources, such as disk storage, are used regardless of whether an application is running or not, so a virtual machine hosting multiple applications is allocated an amount of disk storage equal to the sum of the applications' disk storage requirements. Processing requests can be aggregated using a hybrid approach because processor requirements for applications are predominantly based on maximum processor utilization rather than a uniform average utilization level. In some examples, a virtual machine hosting multiple applications is allocated an amount of processing resources equal to the maximum amount of processing resources requested by any single application.In another example, a virtual machine hosting multiple applications is allocated an amount of processing resources equal to the maximum amount of processing resources requested by a single application and an additional amount of processing resources equal to a proportion of the processing resources requested by the remaining applications.
[0009] In other environments, multiple virtual machines may be used to host applications for the user. In one implementation, a virtual machine is deployed for each of the specified applications, and each virtual machine is designed to meet the resource requirements of the particular application hosted by the virtual machine. A streaming agent runs on each virtual machine and streams display information from the application hosted by the virtual machine to a client computer system. An application streaming client running on the client computer system includes a stream merging element that receives display streams from each virtual machine and merges the display streams into a single display that is presented to the user.Virtual machines can be started and stopped when applications are opened and closed by the user, and each virtual machine can be allocated computing resources based on the needs of the specific application hosted by the virtual machine.
[0010] In yet another environment, multiple users share access to a single virtual machine. The virtual machine hosts an instance of an application that supports multiple concurrent user sessions. Each application session uses a separate streaming agent running within the virtual machine. Each streaming agent is connected to an application streaming client running on a client computer system serving a user.The streaming agents in the single virtual computer environment can coordinate the encoding of display information by sharing encoded information associated with display components such as toolbars, static display areas, or other user interface components that are common to multiple user sessions. Application sessions can share common operational components such as static and dynamic libraries, resource files, and databases.
[0011] When a streaming agent encodes display information for transmission to the client computer system, the encoding process can be optimized in several ways. Portions of an application display screen that are static or do not change frequently can be retained and reused by the streaming agent. If the application streaming client executing on the client computer system is application-centric, the application streaming client can provide information to the streaming agent indicating that certain portions of the application display stream do not need to be made available by the streaming agent. In some implementations, a window manager on the client computer system merges one or more display streams provided by one or more streaming agents, and a portion of one or more display streams may be obscured from the client display.The window manager provides viewport information to the streaming agent, indicating sections of the display stream that are not visible on the client and therefore do not need to be encoded or transmitted.
[0012] Applications for use by the user can be specified manually by the user or an administrator, or automatically by monitoring the user's application usage with an agent running on the client computer system. For example, computing resources can be provisioned and made available to a user with which to run all applications. The actual usage of the applications is tracked by an agent, and after a certain period of time, the information obtained by the agent is used to indicate applications that are available to the user but unused. The unused applications are removed from the user's profile, and a reduced amount of computing resources is allocated to the user's virtual machine based on the specific applications actually used.In another example, a group of applications is made available to the user, and an agent indicates when more than one application is being used concurrently. Upon detection of concurrent application usage, the user's computing resource requirements are recalculated according to the concurrent application usage, and the user's virtual machine is allocated appropriately increased computing resources.
[0013] The computing resources may be adjusted based at least in part on a budget assigned to the user. Generally, users are provided with virtual machines designed to provide optimal performance for the applications specified for use by the user. As computing resources are used, a budget assigned to the user is allocated by the computing resource service provider. As the budget is consumed, the computing resource service provider determines whether the remaining budget will be exhausted before the end of the budget period. If the remaining budget will be exhausted before the end of the budget period, the computing resource service provider rations the computing resources allocated to the user's virtual machine to ensure that the budget lasts until the end of the budget period.If adjustments are made based on budget constraints, a message can be sent to the user and an administrator requesting an increase in the compute resource budget.
[0014] Fig.1 shows an illustrative example of an environment in which various embodiments may be performed. An environment 100 includes a client computer system 102 used by a user 104 to access a computing resource service provider 106 over a computer network 108. The computing resource service provider 106 includes one or more server computer systems that host a virtual machine 112 for the user 104. The computing resource service provider 106 configures the virtual machines by allocating computing resources from the server computer systems to the virtual machines and installing one or more applications from an application store 110 on the virtual machines.Application storage 110 stores the applications in the form of installation files that run on a virtual machine to install the application, or in the form of an executable image that can be transferred to virtual storage resources on a virtual machine. Virtual machine 112 hosts a word processing application 114, a solid modeling application 116, and an image editing application 118. The applications generate display information that is encoded into display streams by a streaming agent 120 running on virtual machine 112. The display streams are streamed over computer network 108 to client computer system 102. Client computer system 102 receives the display streams using an application streaming client, such as a web browser configured with application streaming software or a standalone streaming application.The application streaming client decodes the display stream and displays the application user interface on a display screen connected to the client computer system 102.
[0015] The user 104 initiates the application streaming process by accessing an application broker interface on the client computer system 102. The application broker interface displays a list of applications available to the user in the form of a menu, as icons on a desktop, as tiles on a start screen, or another application-requiring interface. In some examples, the application broker interface is provided via the command line. The application broker interface populates the list of available applications by accessing an application broker service executing on the computing resource service provider 106. The application broker service maintains a database that defines a set of applications available for use by the user. The database is populated by an administrator of the computing resource service.
[0016] As a result of the user launching the application streaming client, the computing resource service provider 106 launches the virtual machine 112 with computing resources configured to run the set of applications to which the user 104 has been granted access. The applications to which the user 104 has been granted access are installed on the virtual machine 112 from the application store 110, and a display stream is established between the virtual machine and the client computer system 102, providing the user 104 with the user interface to the applications hosted on the virtual machine 112. The user 104 may run one or more of the installed applications that share the computing resources on the virtual machine 112.
[0017] In other embodiments, when the user launches the application streaming client, the computing resource service provider 106 does not launch a virtual machine unless and until the user 104 selects an application to run. The application streaming client, executing on the client computer system 102, creates and presents a desktop interface to the user 104. The applications to which the user 104 is authorized can be launched from the desktop interface via icons, a menu, or other user interface elements. Upon selecting an application from the desktop interface, a command is sent to the computing resource service provider 106, which launches a virtual machine configured with computing resources adapted to run the selected application.When an additional application is selected from the desktop interface, the computing resource service provider 106 launches an additional virtual machine with computing resources configured to execute the additional application. When an application is closed, the corresponding virtual machine and associated computing resources are released. Each virtual machine includes a streaming agent that encodes display information provided by the application executing on the virtual machine. The client computer system 102 receives a display stream from each virtual machine. The display streams are received and merged by a stream merger component in the application streaming client and presented on a unified desktop interface.
[0018] Fig.2 shows an illustrative example of a process that, when performed, determines computing resource requirements for a client based at least in part on a set of selected application programs, according to one embodiment. A process diagram 200 shows information maintained by the computing resource service provider that allows the computing resource service provider to configure virtual machines designed for the particular set of applications made available to the user. Computer applications are associated with a set of computing resource requirements. The resource requirements describe minimum and recommended amounts of various computing resource types, such as persistent storage, memory, processing power, network bandwidth, graphics memory, graphics power, peripheral device requirements, supporting software requirements, or other requirements.Processing performance can be defined as a minimum and recommended clock speed, or a combination of clock speed and processor type. In some examples, processing performance can be defined in general terms, such as operations per second, floating-point operations per second, or an operation execution rate. Graphics performance can be part of the application requirements and can define a minimum amount of graphics memory and / or a minimum speed or type of graphics processor. Some applications may require that certain peripherals or interfaces be present, and some applications may require that certain supporting software be installed with the application, such as a certain type of operating system with a minimum version number.Application requirements can be met using a virtual machine by configuring the virtual machine with virtual resource equivalents that match the application's compute resource requirements.
[0019] An application template 202 defines a group of applications to be made available to the user by a computing resource service provider. The computing resource service provider may obtain the application template 202 from the user or from an administrator responsible for providing computing services to the user. In some embodiments, the application template 202 is obtained by analyzing information collected by a monitoring agent executing on the user's client computer system. The monitoring agent captures application usage patterns and indicates the group of applications being used, as well as captures combinations of applications being used simultaneously. The application template 202 is coupled with three selected application profiles.A word processing profile 204 describes a set of requirements for running a corresponding word processing application on a host computer system. A solid modeling profile 206 describes a set of requirements for running a corresponding solid modeling application on a host computer system. An image processing profile 208 describes a set of requirements for running a corresponding image processing application on a computer system. The three application profiles each define a minimum CPU speed, a minimum amount of memory, a minimum amount of disk storage, a minimum amount of graphics memory, and a minimum amount of available network bandwidth.
[0020] The computing resource service provider combines the profiles of the applications selected in the application template 202 to create a group of requests 210 to the virtual machine. If applications are expected to be executed sequentially, the requests can be combined by specifying the maximum of the minimum constraints with respect to CPU, memory, graphics memory, and network bandwidth. Since the disk storage requirements apply generally even when the application is not running, the disk storage requirements for each application are added to determine the disk storage requirements for the group of requests 210 to the virtual machine. If applications are expected to be executed concurrently, the requests 210 to the virtual machine are determined by adding the requests of the applications that are to be executed concurrently. If, in the example of Fig. 2 For example, if the word processing application and the solid modeling application are to be run simultaneously, the virtual machine requirements would be 3 GHz CPU, 600 MB memory, 1.15 GB disk space, 700 kB network bandwidth, and 3 GB graphics memory.
[0021] In some examples, the computing resource requirements of an application represent a maximum temporary resource usage rather than a persistent usage, and therefore less than the sum of the specified resource requirements may be required for the applications to execute concurrently. For a group of applications to execute concurrently, various elements of the virtual machine requirements 210 may be determined by specifying the maximum of the minimum required resources for each resource type for each application and adding a portion of the difference between the specified maximum and the sum of all application resources. For the three selected applications in Fig.2 to be executed concurrently, the virtual machine memory requirements 210 may be determined by specifying the maximum amount of memory required by the three applications (1GB) and adding a proportion (half in this example) of the requirements of the remaining applications (400MB + 200MB) to achieve a virtual machine memory requirement of 1.3GB (1GB + (0.5 x (400MB + 200MB)) = 1.3GB). The proportion may be adjusted based at least in part on the variability of the actual computing resource usage by the applications.
[0022] Fig.3 shows an illustrative example of a process that, as a result of its execution, assigns a virtual instance type to a user, according to one embodiment. A process diagram 300 shows how virtual machine requests 302 may be used by the computing resource service provider to specify an appropriate virtual machine profile template for configuring a virtual machine. In some implementations, a computing resource service provider provides virtual machines to clients using a set of predefined virtual machine profile templates. The virtual machine profile templates define a configuration of computing resources that serve as a template for provisioning virtual machines.By providing a set of predefined virtual machine configurations, the computing resource service provider can, in some embodiments, create and maintain a pool of virtual machines in advance of any client requests. Consequently, when a request to run an application is received from the computing resource service provider, a virtual machine can be provisioned from the existing pool of virtual machines, and applications can be installed and launched more quickly.
[0023] In the Fig.3, the virtual machine profile template is selected by specifying a virtual machine profile template that meets or exceeds the virtual machine requirements 302. Three virtual machine profile templates are supported by the compute resource service provider. A first VM profile template 304 is unsuitable because the amount of processing power, disk storage, graphics memory, and network bandwidth are below the minimum amount defined in the virtual machine requirements 302. A second VM profile template 306 is suitable because the amount of all compute resource types in the profile meets or exceeds the minimum amount defined in the virtual machine requirements 302. A third VM profile template 308 is unsuitable because the amount of processing power is below the minimum amount defined in the virtual machine requirements 302.If more than one VM profile template meets the virtual machine requirements 302, the compute resource service provider uses a set of criteria to select from the satisfactory VM profile templates. In some examples, the compute resource service provider selects a particular VM profile template from a group of satisfactory VM profile templates based at least in part on a metric that is substantially proportional to the cost of operating a virtual machine according to each VM profile template. The metric is applied to each compute resource type defined in the VM profile templates, and each VM profile template is analyzed to determine an overall metric for the VM profile. For example, the following metric may be applied to different types of compute resources: CPU 50 GHz memory 0.2 / Mb Disk storage 0.5 / GB Graphics memory 100 / GB Network bandwidth 0.1 / MB
[0024] Applying the above metric results in the following overall metric for the Fig.3 VM profile templates shown. resource rate VM Profile 1 Resource metric CPU 50 / GHz 1 GHz 50 memory 0.2 / Mb 1GB 200 Disk storage 0.5 / GB 2GB 1 Graphics memory 100 / GB 1GB 100 Network bandwidth 0.1 / MB 5MB / s 0,5 Total metric = 351.5 resource rate VM Profile 2 Resource metric CPU 50 / GHz 3GHz 150 memory 0.2 / Mb 2GB 400 Disk storage 0.5 / GB 6GB 3 Graphics memory 100 / GB 2GB 200 Network bandwidth 0.1 / MB 20MB / s 2 Total metric = 755 resource rate VM Profile 3 Resource metric CPU 50 / GHz 2GHz 100 memory 0.2 / Mb 1GB 200 Disk storage 0.5 / GB 10GB 5 Graphics memory 100 / GB 4GB 400 Network bandwidth 0.1 / MB 50MB / s 5 Total metric = 710
[0025] The overall metric determined for each VM profile allows the various VM profiles to be compared for the purpose of selecting a specific VM profile from a plurality of satisfactory VM profiles (VM profiles that meet or exceed the desired requirements). In the example shown above, the first VM profile template 304 is preferred if it meets the minimum requirements. The second VM profile template 306 is preferred next, followed by the third VM profile template 308.
[0026] In certain implementations, the availability of preconfigured virtual machines may influence or override the selection of a particular VM profile template. If the compute resource service provider provisions virtual machines from a pre-existing pool of virtual machines, the presence or absence of virtual machines with a particular VM profile template in the pool may be used to select a particular VM profile template for a new client request. For example, if a set of VM profile templates meets or exceeds the virtual machine requirements 302, but only one of the set of VM profile templates has a corresponding virtual machine in a pool of available VMs, the compute resource service provider will allocate the existing virtual machine from the pool rather than create a new virtual machine.
[0027] In some embodiments, the computing resource service provider creates a virtual machine based at least in part directly on the virtual machine requirements 302 and does not rely on a finite set of VM profile templates. A VM profile template may be created that matches the virtual machine requirements 302, or a virtual machine may be created directly from the virtual machine requirements 302. After the VM is acquired by the computing resource service provider, the VM is assigned to a user 310. When merged with the process from Fig. 2, the user 310 is provided with a virtual machine designed to host the particular applications used by the user.
[0028] Fig.4 shows an illustrative example of a client-server computer system that, according to one embodiment, provides computing resources to a client configured to host a defined set of applications. A system diagram 400 includes a client computer system 402 used by a user 404 to access computing resources provided by a host server 406. A set of virtual machine requirements 408 is determined based at least in part on a specified set of applications used by the user 404. The set of virtual machine requirements 408 includes specifications 410 that specify various amounts and characteristics of certain computing resources. An application streaming client is executing on the client computer system 402.The application streaming client is an application program that interfaces with the host server 406 to obtain computing resources in the form of access to one or more virtual machines hosted by the host server 406. The application streaming client 412 processes outgoing interface data, such as keystrokes, mouse movements, 3D mouse movements and positions, and mouse clicks performed by the user 404, and transmits the interface data to the host server 406. Virtual machines executing on the host server 406 execute applications requested by the user 404, and display information generated by the applications is encoded and streamed to the application streaming client 412.The application streaming client 412 decodes the received streamed display information and presents an operational user interface to the user 404, allowing the user to interact with the applications running on the virtual machines.
[0029] In some examples, host server 406 provides a single virtual machine to user 404 based at least in part on a single aggregated set of VM requests sufficient to host the applications used by the user. User 404 launches application streaming client 412. Application streaming client 412 presents a display to user 404 that allows the user to request execution of an application. Application streaming client 412 provides the virtual machine requests 408 to a compute resource service provider running on host server 406. In some implementations, the compute resource service provider accesses a database of VM profile templates 414. VM template database 414 stores a set of VM profile templates supported by the compute resource service provider.The computing resource service provider compares the provided virtual machine requirements 408 with the VM profile templates stored in the VM template database 414 and selects a specific VM profile to satisfy the user's query. The computing resource service provider launches a virtual machine instance 416 according to the selected VM profile. In other implementations, the computing resource service provider creates the virtual machine instance 416 directly from the virtual machine requirements 408.
[0030] Generally, the computing resource service provider installs one or more applications from an application store 418 onto the virtual machine instance 416. Applications may be installed on the virtual machine instance 416 by running an installation program or installer provided by the application manufacturer or by copying a pre-installed disk image of the application onto the virtual machine instance 416. In some implementations, applications are made available to the virtual machine instance 416 by allowing the virtual machine instance 416 to run a remote copy of the application outside of the virtual machine instance 416. Applications may be installed on demand, as a result of the user 404 requesting the specific application to run.
[0031] A streaming agent on the virtual machine instance 416 captures the display information generated by the application executing on the virtual machine instance 416, encodes the display information into a display stream, which is transmitted to the application streaming client 412 from the client computer system 402. The application streaming client 412 decodes the display information and presents a user interface to the user 404 that allows the user to interact with the application. In some implementations, the computing resource service provider provides more than one virtual machine instance to the user 404. For example, in some embodiments, one virtual machine instance is created for each application available to the user 404. A streaming agent executing on each virtual machine provides a display stream to the application streaming client 412.The application streaming client 412 merges the display streams and presents a single user interface to the user 404.
[0032] The streaming agent is capable of adjusting the encoding algorithms used to encode the display information based on available network bandwidth and performance. When additional bandwidth is available, the streaming agent increases the resolution of the encoded display information, resulting in a higher bit rate for the encoded display stream. When network bandwidth is constrained, the streaming agent may decrease the rate of the encoded display screen by decreasing the resolution of the encoded display information or decreasing the frame rate of the encoded display information. In some implementations, the streaming agent adjusts the encoding algorithm based at least in part on the application whose display is being encoded.For example, a word processing application may be encoded at a higher resolution and a lower frame rate, whereas a video game may be encoded at a lower resolution and a higher frame rate to preserve smooth motion. Adjustments to the encoding algorithm may be made by the streaming agent or the streaming client executing on the client computer system. Adjustments to the encoding algorithm may include adjustments to the audio encoding associated with the video display information. For example, the audio encoding may be adjusted to select between stereo and mono audio, as well as between voice-quality, radio-quality, and CD-quality audio. The audio encoding may be based at least in part on audio playback capabilities available to the client computer system 402.
[0033] Fig.5 shows an illustrative example of a process that, as a result of being performed by a client computer system, provides computing resources from a server and receives display streams from applications executing on the server, according to one embodiment. A process diagram 500 begins at block 502, where a user installs an application streaming client on a local client computer system. In some examples, the application streaming client is a web browser or a web browser configured with plug-ins that provide application streaming functionality. In another example, the application streaming client is a standalone application installed on the client computer system. At block 504, the user logs in to the application streaming client, which authenticates the user with a service acting as a computing resource service provider.The application streaming client is provided with a user profile that specifies applications used by the user. In some examples, the user profile includes information describing usage patterns of the specified applications, such as specifying applications that are used concurrently. Using the information contained in the user profile, the client computer system 506 determines a set of virtual machine requirements that enable the application usage described in the user profile.
[0034] At block 508, the client computer system starts a virtual machine according to the determined virtual machine requirements. In some examples, the client computer system requests that the virtual machine be created from a computing resource service provider. The computing resource service provider can create a virtual machine that matches the provided virtual machine requirements. In other examples, the computing resource service provider creates a virtual machine from one of a number of machine profiles that meets or exceeds the determined virtual machine requirements. In yet another example, the computing resource service provider selects a virtual machine from a pool of previously created virtual machines available for use. At block 510, the client computer system installs applications on the provided virtual machine.The applications can be installed on the provided virtual machine by the client or the computing resource service provider at the client's request.
[0035] The client computer system establishes 512 a streaming connection to the provided virtual machine via a streaming agent. The streaming agent is installed on the provided virtual machine and encodes display information from the installed applications and transmits the resulting display stream to the client computer system for display to the user. The client computer system receives 514 the encoded display information and displays the display information to the user. User input from the user, such as keystrokes, mouse movements, 3D mouse movements and orientations, and mouse clicks, is encoded by the application streaming client and transmitted to the streaming agent. In addition to image display information, additional signals may be encoded by the streaming agent and streamed to the application streaming client.In some examples, the audio information generated by the operating system and applications is encoded and sent to the application streaming client.
[0036] Fig.6 shows an illustrative example of a client-server computer system that, according to one embodiment, provides computing resources to a client in the form of a set of virtual machines, each virtual machine configured to host a particular application defined by the client. A computing environment 600 includes a client computer system 602 operated by a user 604. The client computer system 602 communicates with the virtual machine host server 606, which provides access to a set of virtual machines. The client computer system 602 includes an application streaming client 608. The application streaming client 608 includes a VM manager 610 and an application stream stitcher 612. The VM manager 610 has an interface to a computing resource service provider on the virtual machine host server 606.The VM manager 610 receives requests for computing resources from the user 604 and translates these requests into requests for virtual machines from the virtual machine host server 606. When the user 604 closes an application, the VM manager 610 notifies the virtual machine host server 606 that the virtual machine is no longer in use. In some examples, the virtual machine host server 606 decommissions the virtual machine and releases the resources allocated to the virtual machine. In another example, the virtual machine host server 606 contributes the decommissioned virtual machine to a pool of virtual machines available for reuse.In some embodiments, the computing resource service provider creates a number of virtual machines before they are requested by a client computer system and places the virtual machines into the pool of available virtual machines. If the pool of available virtual machines consumes resources beyond a predetermined amount, or if the virtual machine host server 606 lacks the resources to allocate two additional virtual machines, virtual machines within the virtual machine pool may be recycled, and the corresponding computing resources may be reclaimed.
[0037] The application stream stitcher 612 includes a window manager 614 and a stream merger 616. The stream merger 616 receives display streams from the virtual machines assigned to the user 604 by the virtual machine host server 606. The stream merger 616 decodes the information in the display streams and creates a single display screen that can be viewed and interacted with by the user 604. The window manager 614 assists the user 604 and manages the merged display screen. The window manager 614 allows the user 604 to select display streams to view, view multiple display streams on a single screen, arrange and position user interface windows for displaying display streams, and minimize and maximize windows associated with display streams.Window manager 614 may provide the streaming agents with information about the virtual machines that allows the streaming agents to optimize the information provided in the display stream. For example, window manager 614 may provide the streaming agent with a signal indicating when the corresponding display information is not visible to user 604 (such as when the corresponding window is behind another window or minimized). In some implementations, window manager 614 may indicate when a portion of the corresponding display information is not visible or is obscured by another element on the display screen.
[0038] The virtual machine host server 606 may consist of a single physical server or a group of servers configured to provide a number of virtual machines. The virtual machine host server 606 hosts virtual machines designed for specific applications, which execute the specific application for which they are designed. The virtual machine host server 606 hosts a number of word processing VM instances 618, a number of solid modeling VM instances 620, a number of image editing VM instances 622, and a number of database VM instances 624. Applications are installed by the virtual machine host server 606 on newly created virtual machines from the application store 626.The applications may be maintained in the form of executable installers or in the form of image files that can be used to quickly configure a virtual machine to host the application. A VM instance is provided to client computer system 602 for each application being executed. For example, in . Fig. 6, a word processing VM instance, a solid modeling VM instance, and an image editing VM instance are provided. The display streams generated by the applications running on the three VM instances are provided to the application stream stitcher 612, which merges the display information from the three applications into a single display screen presented to the user 604.
[0039] Fig.7 shows an illustrative example of a client-server computer system that receives a number of display streams from a number of computing resources and consolidates the display streams into a unified screen on a client display, according to one embodiment. A computing environment 700 includes a client computer system 702 in communication with three virtual machines provided by a computing resource service provider. The virtual machines include a word processing VM instance 704, a solid modeling VM instance 706, and an image processing VM instance 708. The word processing VM instance 704 hosts a word processing application 710 and a streaming agent 712 that encodes display information and other output from the test processing application 710 and transmits a stream to the client computer system 702.The solid modeling VM instance 706 hosts a solid modeling application 714 and a streaming agent 716 that encodes and transmits display information to the client computer system 702. The image processing VM instance 708 hosts an image processing application 718 and a streaming agent 720 that encodes and streams display information from the image processing application 718 to the client computer system 702.
[0040] The client computer system 702 executes an application streaming client 722, which may be a standalone application or may be based on a web browser. The application streaming client 722 includes a virtual machine manager 724 and an application stream stitcher 726. The application stream stitcher 726 includes a window manager 728 and a stream merger 730. The stream merger 730 receives the display streams from the streaming agents 712, 716, and decodes 720 the display streams to produce a merged user interface. The merged user interface includes the display of a word processor display window 734, an image processing display window 736, and a solid modeling display window 738. The merged user interface is displayed on a display screen 732 connected to the client computer system 702.Window manager 728 has an interface to a stream merger 730 to indicate display information that is hidden, minimized, or obscured due to merging with other streams or manipulation by the user of client computer system 702. Window manager 728 provides streaming agents 712, 716, and 720 with display boundary information describing the obscured areas of the corresponding display information. Using this information, the streaming agents are able to avoid encoding and transmitting information to client computer system 702 that is not currently visible.
[0041] In some examples, the display information generated by the streaming agents is federated at the computing resource service provider using a server-side application stream stitcher. The server-side application stream stitcher federates the display information and transmits the federated display information to the application streaming client 722 on the client computer system 702. The server-side application stream stitcher sends viewport information to the streaming agents, which display the portions of the display information that are obscured or hidden as a result of the federation process. The streaming agents use the viewport information to prevent encoding display data for display regions that are not visible and also to prevent providing display information for the non-visible display regions.
[0042] Fig.8 shows an illustrative example of a process that, as a result of being performed by a client computer system, provisions a group of virtual machines from a server and consolidates streams of display information from the virtual machines into a unified display screen, according to one embodiment. A process diagram 800 begins with the installation of an application streaming client on a client computer system. The application streaming client presents the menu, icons, or other interface to a user of the client computer system, allowing the user to select one or more applications. At block 804, the user selects one or more applications, and the application streaming client communicates the selection to a computing resource service provider.For each application, a virtual machine is launched 806 by the computing resource service provider, and the virtual machines are configured with computing resources designed to host the application hosted by each virtual machine. The computing resource service provider installs 808 the applications on their respective virtual machines and also installs the streaming agent to provide the client computer system with display information from the application hosted by the virtual machines.
[0043] The client computer system establishes 810 a streaming connection to each streaming agent. Viewport information may be provided by the client computer system to assist the streaming agents in encoding and transmitting information to the client computer system. The client computer system receives 812 updated display information from each application via the streaming agent. The updated display information is merged 814 into a single display screen by a stream merge element in the application streaming agent. A window manager component in the application streaming client specifies 816 regions of the display information that are protected, hidden, or minimized as a result of the merge of the updated display information into a single display screen.The specified areas are identified as a set of display view window information that is made available to the streaming agents on the virtual machines 818. The streaming agents can use this information to avoid encoding and transmitting information that is not visible on the display screen.
[0044] Fig.9 shows an illustrative example of a client-server computer system that, according to one embodiment, provides computing resources to a number of clients by providing a virtual machine hosting a single application that supports multiple sessions. An environment 900 includes a word processing VM instance 902 hosted by a computing resource service provider on a host computer system. The word processing VM instance 902 hosts a number of word processing application sessions 903, 904, and 905. The word processing application sessions 903, 904, and 905 execute on the same VM instance 902. Each word processing application session has an associated streaming agent to provide display information associated with the session. In Fig.9, the word processing VM instance 902 hosts a first streaming agent 906, a second streaming agent 908, and a third streaming agent 910. The first streaming agent 906 provides a display stream to a first application streaming client 912 hosted by a first client computer system 914 operated by a first user 916. The second streaming agent 908 provides a display stream to a second application streaming client 918 hosted by a second client computer system 920 operated by a second user 922. The third streaming agent 910 provides a display stream to a third application streaming client 924 hosted by a third client computer system 926 operated by a third user 928.
[0045] When the user logs on to a client computer system and requests access to a word processing application via an application streaming client, the application streaming client contacts the computing resource service provider, which creates a word processing application session on the word processing VM instance 902. The word processing application session causes a corresponding streaming agent to be instantiated on the word processing VM instance 902. A streaming session is created between the application streaming client and the streaming agent, and the word processing application provides display information for the new session that corresponds to the user's word processing request.By using a single application instance, many resources can be shared across multiple word processing sessions. For example, user interface elements for word processing applications can be coded by one streaming agent and reused by the remaining agents, eliminating the need to recode common user interface elements such as menus, ribbons, and icons.
[0046] Additionally, embodiments of the present disclosure may be described in terms of the following sentences: 1. Computer-implemented method comprising: under the control of one or more computer systems configured with executable instructions, Specifying a group of application programs associated with a user identity; Obtaining a group of application resource profiles by retrieving a resource profile for each application program in the group of application programs; Creating a virtual machine profile based at least in part on the set of application resource profiles; Creating a virtual machine with a configuration of computing resources that meets the virtual machine profile; Installing the set of application programs on the virtual machine; launching at least one application from the set of application programs; and causing a streaming connection to be established between the virtual machine and a client computer system, the streaming connection transmitting encoded display information from the virtual machine to the client computer system. 2. The computer-implemented method of sentence 1, further comprising selecting a profile template from a group of virtual machine profile templates based at least in part on the virtual machine profile, wherein: the set of virtual machine profile templates is associated with virtual machine configurations that can be supported by a compute resource service provider; and the virtual machine is configured according to the profile template. 3. A computer-implemented method according to sentence 1 or 2, wherein specifying the group of application programs associated with the user identity is achieved at least in part by: Retrieving application usage information from the client computer system; Specifying a particular application program that was executed on the client computer system using the user identity; and Add the specific application program to the group of applications. 4. Computer-implemented method according to one of sentences 1-3 further comprising: Specifying a second group of application programs that can be executed concurrently; generating a consolidated resource profile for the second group of application programs; and Modify the virtual machine profile based at least in part on the merged resource profile. 5. A non-transitory computer-readable storage medium having stored thereon executable instructions which, when executed by one or more processors of a computer system, cause the computer system to at least: Sending a request to use a first application to a computing resource service provider, wherein the request to use the first application causes the computing resource service provider to provision a first virtual machine, the first virtual machine configured at least in part based on the computing resource requirements of the first application; Receiving a first stream of encoded display information from the first virtual machine using an application streaming client; Sending a request to use a second application to a computing resource service provider, wherein the request to use the second application causes the computing resource service provider to provision a second virtual machine, the second virtual machine configured at least in part based on the computing resource requirements of the second application; Receiving a second stream of encoded display information from the second virtual machine using the application streaming client; Merging the first stream of encoded display information and the second stream of encoded display information to produce a merged user interface for the first application and the second application; and Displaying the merged user interface on a display connected to the computer system. 6. The non-transitory computer-readable storage medium of sentence 5, wherein the instructions further comprise instructions that, as a result of their execution by the one or more processors, cause the computer system to: specify at least a portion of the first stream of encoded display information that is not visible on the user interface; and Send viewport information to the compute resource service provider describing the section of the first stream. 7. The non-transitory computer-readable storage medium of sentence 5 or 6, wherein the instructions further comprise instructions that, as a result of their execution by the one or more processors, cause the computer system to: to determine that the network connection to the computing resource service provider has been interrupted; and as a result of determining that the network connection to the computing resource service provider has been interrupted, cause the computing resource service provider to deallocate the virtual machine. 8. The non-transitory computer-readable storage medium of any one of clauses 5-7, wherein the merged user interface includes a first window displaying encoded display information from the first virtual machine and a second window displaying encoded display information from the second virtual machine. 9. The non-transitory computer-readable storage medium of any one of sentences 5-8, wherein the instructions further comprise instructions that, as a result of their execution by the one or more processors, cause the computer system to: encode user input from one or more devices connected to the computer system into an input stream; and to transmit the input stream to the computing resource service provider. 10. The non-transitory computer-readable storage medium of sentence 9, wherein the one or more devices include one or more of a keyboard, a mouse, a 3D mouse, a microphone, and a camera. 11. The non-transitory computer-readable storage medium of any one of sentences 5-10, wherein the one or more services include a web browser configured with a virtual machine manager that controls the provisioning of virtual machines by the computing resource service provider, and an application stream stitcher that receives the streams of encoded display information and integrates them into the user interface. 12. Non-transitory computer-readable storage medium according to any one of sentences 5-11, wherein: the first stream of encoded display information includes audio information generated by the first application; the second stream of encoded display information includes audio information generated by the second application; and the user interface includes audio information from the first application and the second application. 13. A system comprising at least one computing device implementing one or more services, wherein the one or more services: receive a request from a client computer system to provide an application; select a virtual machine profile from a group of virtual machine profiles based at least in part on the computing resource requirements associated with the application; assign to the virtual machine a configuration based at least in part on the virtual machine profile; run the application on the virtual machine; and establish a connection between the virtual machine and the client computer system that transmits display information associated with the application to the client computer system. 14. System according to sentence 13, where: the display information is encoded at a resolution and frame rate designed for an amount of network bandwidth available to the client computer system; and the display information includes audio information encoded with features based at least in part on audio playback capabilities associated with the client computer system. 15. The system of sentence 13 or 14, wherein the display information is encoded at a resolution and frame rate designed for the application. 16. The system of any one of sentences 13-15, wherein the one or more services allocate the virtual machine at least in part by selecting a virtual machine from a pool of available virtual machines executing on a host computer system. 17. The system of any one of sentences 13-16, wherein the one or more services further: receive an additional request to provide an additional application to the client computer system; determine an additional virtual machine profile based at least in part on the computing resource requirements associated with the additional application; assign an additional virtual machine based at least in part on the additional virtual machine profile; run the additional application on the additional virtual machine; and establish an additional connection between the additional virtual machine and the client computer system that transmits display information associated with the additional application to the client computer system. 18. The system of any one of sentences 13-17, wherein the one or more services further: receive an additional request to make the application available to an additional client computer system; create an additional application session for the application running on the virtual machine; and establish an additional connection between the additional application session on the virtual machine and the client computer system that transmits display information associated with the additional application session to the client computer system. 19. The system of sentence 18, wherein the display information associated with the additional application session is provided at least in part by the display information associated with the application session. 20. The system of any one of sentences 13-19, wherein the one or more services further: receive viewport information that indicates a portion of the display information that is not visible on the client computer system; and exclude the portion of the display information from the display information that is transmitted to the client computer system.
[0047] Fig.10 illustrates aspects of an example environment 1000 for implementing aspects according to various embodiments. Although a web-based environment is used for purposes of explanation, it should be understood that other environments may be used to implement various embodiments, if appropriate. The environment includes an electronic client device 1002, which may include any suitable device operable to send and / or receive requests, messages, or information over a suitable network 1004, and in some embodiments, to transmit information back to a user of the device. Examples of such client devices include personal computers, cellular phones, portable messaging devices, laptop computers, tablet computers, set-top boxes, embedded computer systems, personal data assistants, e-book readers, and the like.The network may include any suitable network, including an intranet, the Internet, a cellular network, a local area network, a satellite network, or any other such network, and / or a combination thereof. Components used for such a system may depend, at least in part, on the type of network and / or environment selected. Protocols and components for communicating over such a network are well known and will not be discussed in detail here. Communication over the network may be enabled via wired or wireless connections, and combinations thereof.In this example, the network includes the Internet since the environment includes a web server 1006 for receiving requests and presenting content in response thereto, although for other networks, an alternative device serving a similar purpose could be used, as will be apparent to one of ordinary skill in the art.
[0048] The illustrative environment includes at least one application server 1008 and a data store 1010. It should be understood that there may be multiple application servers, layers, or other elements and operations or components that may be chained or otherwise configured and that may interact to perform tasks such as retrieving data from a suitable data store. Servers, as used herein, may be implemented in various ways, such as hardware devices or virtual computer systems. In some contexts, servers may refer to a programming module executing on a computer system.Unless otherwise specified or clear from the context, the term "data store" as used herein refers to any device or combination of devices capable of storing, accessing, and retrieving data, which may include any combination and number of data servers, databases, data storage devices, and data storage media in any standard, distributed, virtual, or clustered environment. The application server may include any suitable hardware, software, and firmware for integrating with the data store as necessary to execute aspects of one or more applications for the client device and handle some or all of the data access and business logic for an application.The application server, in conjunction with the data store, may provide access control services and is capable of generating content, including, but not limited to, text, graphics, audio, video, and / or other content that may be used for delivery to the user, which may be made available to the customer using the web server in the form of HyperText Markup Language ("HTML"), Extensible Markup Language ("XML"), JavaScript, Cascading Style Sheets ("CSS"), or other appropriate client-side structured language. Content transmitted to a customer device may be processed by the customer device to deliver the content in one or more forms, including, but not limited to, forms that are perceivable to the user audibly, visually, and / or through other senses, including touch, taste, and / or smell.The handling of all requests and responses, as well as the delivery of content between the client device 1002 and the application server 1008, may be handled by the web server using PHP: Hypertext Preprocessor (PHP), Python, Ruby, Perl, Java, HTML, XML, or another suitable server-side structured language in this example. It should be understood that the web and application servers are not required and are merely exemplary components, as structured code discussed herein may be executed on any suitable device or host machine, as discussed elsewhere herein. Furthermore, operations described herein as being performed by a single device may, unless the context indicates otherwise, be performed jointly by multiple devices, which may form a distributed and / or virtual system.
[0049] The data store 1010 may include multiple separate data tables, databases, data documents, dynamic data storage schemes, and / or other data storage mechanisms and media for storing data related to a particular aspect of the present disclosure. For example, the illustrated data store may include mechanisms for storing production data 1012 and user information 1016, which may be used to present content to the production site. The data store is also shown to include a mechanism for storing log data 1014, which may be used for reporting, analytics, or other such purposes.It should be understood that there may be many other aspects that need to be stored in the data store, such as page image information and access rights information, which may be stored in any of the mechanisms listed above or in additional mechanisms in the data store 1010, as appropriate. The data store 1010 may be operable, through logic associated therewith, to receive instructions from the application server 1008 and to acquire, update, or otherwise process data in response thereto. The application server 1008 may provide static, dynamic, or a combination of static and dynamic data in response to the received instructions.Dynamic data, such as data used in weblogs (blogs), shopping applications, news services, and other such applications, may be generated by server-side structured languages, as described herein, or may be provided by a content management system ("CMS") running on or controlled by the application server. In one example, a user may submit a search request for a certain type of object through a device operated by the user. In this case, the data store may access the user information to verify the user's identity and may access the catalog detail information to obtain information about objects of that type. The information may then be output to the user, such as in a results listing on a web page that the user may view via a browser on client device 1002.Information for a particular object of interest may be viewed on a dedicated page or in a dedicated browser window. However, it should be noted that embodiments of the present invention are not necessarily limited to the context of web pages, but are more generally applicable to processing requests in general, where the requests are not necessarily requests for content.
[0050] Each server typically includes an operating system that provides executable program instructions for the general administration and operation of that server, and typically includes a computer-readable storage medium (e.g., a hard disk, random access memory, read-only memory, etc.) on which instructions are stored that, when executed by a processor of the server, enable the server to perform its intended functions. Suitable implementations for the operating system and general functionality of the servers are known or commercially available and will be readily implemented by one of ordinary skill in the art, particularly in light of the disclosure herein.
[0051] The environment, in one embodiment, is a distributed and / or virtual machine utilizing multiple computer systems and components interconnected via communication links using one or more computer networks or direct connections. However, it will be apparent to one skilled in the art that such a system may be implemented in a system with fewer or greater numbers of components than in Fig. 10 illustrates that the system can work equally well. Thus, the representation of the system 1000 in Fig. 10 should be considered illustrative and not limiting as to the scope of the disclosure.
[0052] The various embodiments may further be implemented in a wide variety of operating environments, which in some cases may include one or more user computers, computing devices, or processing devices that may be used to run any number of applications. User or client devices may include any number of general-purpose computers, such as desktop, laptop, or tablet computers running a standard operating system, as well as cellular, wireless, and wearable devices running mobile software and capable of supporting a variety of networking and messaging protocols. Such a system may also include a number of workstations running any of a variety of commercially available operating systems and other known applications for purposes such as development and database management.These devices may also include other electronic devices, such as dummy terminals, thin clients, gaming systems, and other devices capable of communicating over a network. These devices may also include virtual devices, such as virtual machines, hypervisors, and other virtual devices capable of communicating over a network.
[0053] Various embodiments of the present disclosure utilize at least one network known to one of ordinary skill in the art to support communications using a variety of commercially available protocols, such as the Transmission Control Protocol / Internet Protocol ("TCP / IP"), the User Datagram Protocol ("UDP"), protocols operating at various layers of the Open Systems Interconnection ("OSI") model, the File Transfer Protocol ("FTP"), Universal Plug and Play ("UPnP"), the Network File System ("NFS"), the Common Internet File System ("CIFS"), and AppleTalk. The network may be, for example, a local area network, a wide area network, a virtual private network, the Internet, an intranet, an extranet, a public switched telephone network, an infrared network, a wireless network, a satellite network, and any combination thereof.In some embodiments, connection-oriented protocols can be used to communicate between network endpoints. Connection-oriented protocols (sometimes referred to as connection-based protocols) are capable of transmitting data in an ordered stream. Connection-oriented protocols can be reliable or unreliable. For example, the TCP protocol is a reliable connection-oriented protocol. Asynchronous Transfer Mode (ATM) and Frame Relay are unreliable connection-oriented protocols. Connection-oriented protocols contrast with packet-oriented protocols such as UDP, which transmits packets without a guaranteed order.
[0054] In embodiments that utilize a web server, the web server may execute any of a variety of server or mid-tier applications, including Hypertext Transfer Protocol (HTTP) servers, FTP servers, Common Gateway Interface (CGI) servers, data servers, Java servers, Apache servers, and business application servers. The server(s) may also be capable of executing programs or scripts in response to requests from user devices, such as by executing one or more web applications, which may be implemented as one or more scripts or programs written in any programming language, such as Java. ® , C, C# or C++ or any scripting language such as Ruby, PHP, Perl, Python or TCL, and combinations thereof. The server(s) may also include database servers, including, but not limited to, those provided by Oracle ® , Microsoft ® , Sybase® and IBM ® commercially available, as well as open source servers, such as MySQL, Postgres, SQLite, MongoDB, and any other server capable of storing, retrieving, and accessing structured or unstructured data. Database servers include table-based servers, document-based servers, unstructured servers, relational servers, non-relational servers, or combinations thereof, and / or other database servers.
[0055] The environment may include a variety of data stores and other storage and storage media, as discussed above. These may be located in a variety of locations, such as on a storage medium local to (and / or located within) one or more of the computers, or remote from any or all of the computers across the network. In a particular set of embodiments, the information may be located in a Storage Area Network ("SAN"), which is known to those skilled in the art. Likewise, any files required to perform the functions associated with the computers, servers, or other network devices may be stored locally and / or remotely, as appropriate.When a system includes computer-based devices, each such device may include hardware elements that may be electrically coupled via a bus, where the elements may include, for example, at least one central processing unit ("CPU" or "processor"), at least one input device (e.g., a mouse, a 3D mouse, a keyboard, a controller, a touchscreen, or a keypad), and at least one output device (e.g., a display device, a printer, or a speaker). Such a system may also include one or more storage devices, such as disk drives, optical storage devices, and solid-state storage devices such as random access memory ("RAM") or read-only memory ("ROM"), as well as removable media devices, memory cards, flash cards, etc.
[0056] These devices may also include a computer-readable storage media reader, a communication device (e.g., a modem, a network card (wireless or wired), an infrared communication device, etc.), and memory, as described above. The computer-readable storage media reader may be connected to or configured to receive a computer-readable storage medium, including remote, local, fixed, and / or removable storage devices, as well as storage media for temporarily and / or permanently containing, storing, transmitting, and retrieving computer-readable information.The system and the various devices also typically include a number of software applications, modules, services, or other elements located within at least one memory device, including an operating system and application programs such as a client application or a web browser. It should be understood that alternative embodiments may include numerous variations from that described above. For example, customized hardware may also be used and / or specialized elements may be implemented in hardware, software (including portable software such as applets), or both. Furthermore, connection to other data processing devices, such as network input / output devices, may be used.
[0057] Storage media and computer-readable media containing code or portions of code may include any convenient media known or used in the art, including storage media and communication media, such as, but not limited to, volatile and non-volatile, removable and non-removable media implemented in any method or technique for storing and / or transmitting information, such as computer-readable instructions, data structures, program modules, or other data, including RAM, ROM, electrically erasable programmable read-only memory ("EEPROM"), flash memory or other storage technology, compact disc read-only memory ("CD-ROM"), digital versatile disk (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used toto store the desired information and which can be accessed by a system device. Based on the disclosure and teachings provided herein, one of ordinary skill in the art will understand that other ways and / or methods exist to implement the various embodiments.
[0058] In the foregoing and following descriptions, various techniques are described. For purposes of explanation, specific configurations and details are set forth to provide a thorough understanding of possible ways to implement the techniques. However, it will also be appreciated that the techniques described in this document may be implemented in various configurations without the specific details. Furthermore, well-known features may be omitted or simplified to avoid obscuring the described techniques.
[0059] The specification and drawings are accordingly to be regarded in an illustrative rather than restrictive sense. However, it should be understood that various modifications and changes may be made therein without departing from the broader spirit and scope of the invention as set forth in the claims.
[0060] Other variations are included within the spirit of the present disclosure. Thus, while various modifications and alternative constructions may be made to the disclosed techniques, certain illustrative embodiments thereof are shown in the drawings and have been described in detail above. However, it is to be understood that there is no intention to limit the invention to the precise form(s) disclosed, but on the contrary, the intention is to cover all modifications, alternative constructions, and equivalents falling within the spirit and scope of the invention as defined in the appended claims.
[0061] The use of the terms "a" and "an" and "the" and similar referents in the context of describing the disclosed embodiments (particularly in the context of the following claims) is intended to be construed to cover both the singular and the plural, unless otherwise stated herein or clearly contradicted by the context. The terms "comprising," "having," "including," and "containing" are to be construed as open-ended terms (i.e., "including, among other things") unless otherwise stated. The term "connected" is to be construed as partially or wholly contained, attached, or attached to one another when unmodified and refers to physical connections even when an element is interposed therebetween.The mention of ranges of values herein is intended merely as a quick way of referring to each separate value that falls within the range, unless otherwise stated herein, and each separate value is included in the description as if it were individually recited herein. Use of the term "group" (e.g., "a group of objects") or "subset" is to be construed as a non-empty collection comprising one or more elements, unless otherwise stated or the context otherwise contradicts. Furthermore, unless otherwise stated or the context otherwise contradicts, the term "subset" does not necessarily denote a proper subset of the corresponding group; the subset and the corresponding group may be the same.
[0062] Linking language, such as expressions of the form "at least one of A, B, and C" or "at least one of A, B, and C," are otherwise to be understood in the context in which they are generally used to represent that an object, concept, etc., can be either A, B, C, or any non-empty subset of the group formed by A, B, and C, unless otherwise specified or unless the context clearly indicates otherwise. For example, in the illustrative example of a group having three elements, the linking expressions "at least one of A, B, and C" and "at least one of A, B, and C" refer to one of the following groups: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Thus, this linking language is not generally intended to imply that particular embodiments require that at least one of A, at least one of B, and at least one of C each be present.
[0063] Operations of processes described herein may be performed in any suitable order unless otherwise specified herein or the context otherwise clearly indicates otherwise. Processes described herein (or variations and / or combinations thereof) may be performed under the control of one or more computer systems configured with executable instructions and may be implemented as code (e.g., executable instructions, one or more computer programs, or one or more applications) that together execute one or more processors, by hardware, or combinations thereof. The code may be stored on a computer-readable storage medium, for example, in the form of a computer program comprising a plurality of instructions executable by one or more processors. The computer-readable storage medium may be non-transitory.Furthermore, in some examples, computer systems are configured to implement one or more services that collectively perform operations of processes described herein. These computer systems may, for example, be configured with appropriate hardware and / or software that enables the operations to be performed. Furthermore, computer systems implementing various embodiments of the present disclosure may, in some examples, be single devices, and in other examples, may be distributed computer systems that include multiple devices that operate differently such that the distributed computer system performs the operations described herein.
[0064] The use of any examples or exemplary language (e.g., "such as") provided herein is intended merely to better illustrate embodiments of the invention and is not intended to limit the scope of the invention unless otherwise claimed. No language in the specification should be construed to identify any unclaimed element as essential to practicing the invention.
[0065] Embodiments of this disclosure are described herein, including the best mode known to the inventors for carrying out the invention. Those skilled in the art, upon reading the foregoing description, will recognize variations to these described embodiments. The inventors believe that those skilled in the art will employ such variations as appropriate, and the inventors contemplate that the embodiments of the present disclosure may be practiced otherwise than as specifically described herein. Accordingly, the scope of the present invention includes all modifications and equivalents of the subject matter recited in the claims appended hereto, as permitted by applicable law.Furthermore, any combination of the elements described above in all possible variations thereof is covered by the scope of the present disclosure unless otherwise stated herein or the context otherwise clearly contradicts it.
[0066] Any references, including publications, patent applications, and patents mentioned herein are hereby incorporated by reference to the same extent as if each reference were individually and specifically indicated to be incorporated by reference and set forth in its entirety herein.
Claims
[1] Computer-implemented method comprising: under the control of one or more computer systems configured with executable instructions, Specifying a group of application programs associated with a user identity; Obtaining a set of application program profiles by retrieving an application program profile for each application program in the set of application programs, wherein the application program profile describes for each application program a set of computing resource requirements for executing the corresponding application program; Creating a virtual machine profile based at least in part on merging the computing resource requirements described by the group of application program profiles, wherein the merging of the computing resource requirements is based at least in part on determining whether the group of application programs should be executed concurrently or sequentially; Creating a virtual machine with a configuration of computing resources that meets the virtual machine profile; Installing the set of application programs on the virtual machine; Starting at least one application from the group of application programs; and Causing a streaming connection to be established between the virtual machine and a client computer system, the streaming connection transmitting encoded display information from the virtual machine to the client computer system. [2] The computer-implemented method of claim 1, further comprising selecting a profile template from a group of virtual machine profile templates based at least in part on the virtual machine profile, wherein: the set of virtual machine profile templates is associated with virtual machine configurations that can be supported by a compute resource service provider; and the virtual machine is configured according to the profile template. [3] The computer-implemented method of claim 1, wherein specifying the set of application programs associated with the user identity is achieved at least in part by: Retrieving application usage information from the client computer system; Specifying a particular application program that was executed on the client computer system using the user identity; and Adding the specific application program to the group of application programs. [4] The computer-implemented method of claim 1, further comprising: Specifying a second group of application programs that can run concurrently; Generating a consolidated resource profile for the second group of application programs; and Modify the virtual machine profile based at least in part on the merged resource profile. [5] A system comprising at least one computing device implementing one or more services, wherein the one or more services: specify a group of application programs associated with a user identity; obtain a set of application program profiles by retrieving an application program profile for each application program in the set of application programs, wherein the application program profile describes for each application program a set of computing resource requirements for executing the corresponding application program; generate a virtual machine profile based at least in part on merging the computing resource requirements described by the group of application program profiles, wherein the merging of the computing resource requirements is based at least in part on determining whether the group of application programs should be executed concurrently or sequentially; create a virtual machine with a configuration of computing resources that meets the virtual machine profile; install the set of application programs on the virtual machine; start at least one application from the group of application programs; and Causing a streaming connection to be established between the virtual machine and a client computer system, the streaming connection transmitting encoded display information from the virtual machine to the client computer system. [6] System according to claim 5, wherein: the display information is encoded at a resolution and frame rate designed for an amount of network bandwidth available to the client computer system; and the display information includes audio information encoded with features based at least in part on audio playback capabilities associated with the client computer system. [7] The system of claim 5, wherein the one or more services allocate the virtual machine at least in part by selecting a virtual machine from a pool of available virtual machines executing on a host computer system. [8] The system of claim 5, wherein the one or more services further comprise: receive a request to provide an additional application program to the client computer system; determine an additional virtual machine profile based at least in part on the computing resource requirements associated with the additional application program; assign an additional virtual machine based at least in part on the additional virtual machine profile; run the additional application program on the additional virtual machine; and establish an additional connection between the additional virtual machine and the client computer system that transmits display information associated with the additional application program to the client computer system. [9] The system of claim 5, wherein the one or more services further: receive a request to make at least one application program of the group of application programs available to an additional client computer system; create an additional application session for the application program running on the virtual machine; and establish an additional connection between the additional application session on the virtual machine and the client computer system that transmits display information associated with the additional application session to the client computer system. [10] The system of claim 5, wherein the one or more services further: receive viewport information that indicates a portion of the display information that is not visible on the client computer system; and exclude the portion of the display information from the display information that is transmitted to the client computer system.
Citation Information
Patent Citations
Application marketplace for virtual desktops
US20140258155A1
Management of computing sessions
US20150019733A1