Provisioning computing resources to virtual machines suitable for hosting a set of applications associated with the user
The system optimally allocates virtual machines to users based on their applications' resource needs, dynamically adjusting resources, and uses streaming technology to ensure efficient and cost-effective computing resource utilization.
Patent Information
- Application Number
- CN202111226550.1
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- Priority Date
- 2015-12-28
- Filing Date
- 2016-12-21
- Publication Date
- 2024-12-31
- Estimated Expiration
- 2036-12-21
AI Technical Summary
Existing methods struggle to optimally allocate computing resources to employees based on their specific job functions, leading to potential waste or impairment of performance due to excess or insufficient resources.
A system that assigns virtual machines to users based on their identified applications, allocating resources according to the applications' requirements, and dynamically adjusts resources based on usage patterns and budget constraints, using streaming technology to deliver display information to client systems.
This approach ensures efficient use of computing resources, optimizing performance for employees' tasks while minimizing waste and costs, and allowing for flexible scaling based on user needs and budget limitations.
Smart Images

Figure CN114116088B_ABST
Abstract
Description
[0001] Divisional application
[0002] This application is a divisional application of application number 201680076813.6, application date December 21, 2016, and titled “Provisioning computing resources to a virtual machine suitable for hosting a set of applications associated with a user”.
[0003] CROSS-REFERENCE TO RELATED APPLICATIONS
[0004] This application claims priority to U.S. Patent Application No. 14 / 981,774, filed on December 28, 2015, entitled “COMPUTING RESOURCE MANAGEMENT,” the contents of which are incorporated herein by reference in their entirety. background
[0005] In an enterprise environment, many employees require access to computing resources in order to perform their job functions. For example, an administrative assistant may need access to word processing, data processing, and data access functions. An engineer may require computer-aided drawing ("CAD") applications and complex simulation software. Some enterprises provide computing resources to their employees by purchasing a personal computer for each employee. Personal computers can be configured with different amounts of memory, storage, and processing power. Determining the appropriate configuration for each employee is a difficult problem. If computing resources that significantly exceed an employee's computing needs are provided to the employee, the excess resources may be wasted. If insufficient computing resources are provided to an employee, the employee's ability to perform job functions may be impaired, and the computer system may require premature replacement or expensive upgrades.
[0006] Some enterprises choose to solve these problems by obtaining computing resources on demand from online service providers. Online service providers can provide computing services to employees via thin clients or terminals. Although this model provides a certain degree of flexibility in adjusting the amount of computing resources provided, it is still difficult to determine the optimal amount of computing resources to provide to each employee and is still prone to the problems discussed above, etc. BRIEF DESCRIPTION OF THE DRAWINGS
[0007] Various techniques will be described with reference to the accompanying drawings, in which:
[0008] Figure 1 Illustrative examples of environments in which various embodiments may be practiced are shown;
[0009] Figure 2 An illustrative example of a process for determining computing resource requirements of a client based at least in part on a set of selected applications as a result of being executed according to one embodiment is shown;
[0010] Figure 3 shows an illustrative example of a process for assigning a type of virtual instance to a user as a result of being executed according to one embodiment;
[0011] Figure 4 An illustrative example of a client-server computer system that provides computing resources suitable for hosting a specified set of applications to a client is shown according to one embodiment;
[0012] Figure 5 An illustrative example of a process for provisioning computing resources from a server and receiving a display stream from an application running on the server as a result of execution by a client computer system according to one embodiment is shown;
[0013] Figure 6 An illustrative example of a client-server computer system that provides computing resources to clients in the form of multiple virtual machines according to one embodiment, and each virtual machine is adapted to host a specific application specified by the client;
[0014] Figure 7 An illustrative example of a client-server computer system that receives multiple display streams from multiple computing resources and combines the display streams into a unified screen on a client display according to one embodiment is shown;
[0015] Figure 8 An illustrative example of a process for provisioning a set of virtual machines from a server and merging display information streams from the virtual machines into a unified display screen as a result of execution by a client computer system according to one embodiment is shown;
[0016] Fig. 9 An illustrative example of a client-server computer system that provides computing resources to multiple clients by providing a virtual machine hosting a single application supporting multiple sessions according to one embodiment is shown; and
[0017] Fig.10 An environment is shown in which various embodiments may be implemented. Detailed Description
[0018] This document describes providing computing resources 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 identifying a set of applications used by the user and allocating an amount of computing resources to a virtual machine suitable for hosting the identified set of applications. Each application has an associated set of computing resource requirements that describe the computing resources needed to host the application. Each set of requirements specifies the amount of various types of computing resources, such as disk storage, free memory, video memory, and processor speed.
[0019] In some environments, a single virtual machine hosts an identified application. Multiple sets of requirements for the identified application are combined into a single set of requirements, and the single set of requirements is used to generate a virtual machine capable of hosting the identified application based on the combined requirements. 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 generate a virtual machine for a user. A streaming agent running on the virtual machine encodes display information provided by the hosted application and transmits the encoded display information to a client computer system belonging to the user via an application streaming client. The user can interact with the virtual machine via the client computer system, and typically, the computing resources provided by the virtual machine can be maintained, upgraded, or changed in response to an administrator or another party changing user needs or changing application requirements.
[0020] The combination of application requirements can be adjusted based on predicted or observed application usage patterns. For example, multiple sets of application requirements can be combined in a way that assumes that users do not run multiple applications at the same time or that only specified applications can be run at the same time. If two applications are running at the same time, the virtual machine hosting the application is allocated an amount of memory equal to the sum of the memory requirements of each application. If multiple applications are not running at the same time, the virtual machine hosting the application is allocated an amount of memory equal to the maximum amount of memory required by each application. Whether or not an application is running, certain types of computing resources, such as disk storage, are used, so the virtual machine hosting multiple applications is allocated an amount of disk storage equal to the sum of the disk storage requirements of the applications. Processing requirements can be combined using a hybrid approach because the processor requirements of applications are often based on maximum processor usage rather than stable average usage. In some instances, 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 instance, 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 portion of the processing resources requested by the remaining applications.
[0021] In other environments, multiple virtual machines may be used to host applications for users. In one embodiment, a virtual machine is provisioned for each of the identified applications, and each virtual machine is adapted to the resource requirements of the specific 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 the client computer system. The application streaming client running on the client computer system includes a stream combiner that receives display streams from each virtual machine and combines the display streams into a single display presented to the user. The virtual machine can be shut down and started when the user opens and closes the application, and computing resources can be allocated to each virtual machine based on the requirements of the specific application hosted by the virtual machine.
[0022] In another environment, multiple users share access to a single virtual machine. The virtual machine hosts an application instance that supports multiple simultaneous user sessions. Each session of the application utilizes a separate streaming agent running within the virtual machine. Each streaming agent connects to an application streaming client running on a client computer system serving a user. The streaming agents on a 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 common to multiple user sessions. Application sessions can share common operating components such as static and dynamic libraries, resource files, and databases.
[0023] When the streaming agent encodes display information for transmission to the client computer system, the encoding operation can be optimized in a variety of ways. Static or infrequently changing portions of the application display screen may be retained and reused by the streaming agent. If the application streaming client running on the client computer system is application-aware, 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 provided by the streaming agent. In some embodiments, the window manager on the client computer system combines one or more display streams provided by one or more streaming agents, and a portion of one or more display streams may be obscured on the client display. The window manager provides viewport information to the streaming agent, which identifies portions of the display stream that are not visible on the client and therefore do not require encoding or transmission.
[0024] Applications for use by a user may be identified manually by the user or an administrator, or automatically by monitoring the user's application usage using an agent running on a client computer system. For example, computing resources may be provisioned and provided to a user who is allowed to execute all applications. The agent monitors the actual use of the applications, and after a period of time, the information obtained by the agent is used to identify applications that are available to the user but not in use. Unused applications are deleted from the user's profile, and based on the specific applications actually in use, the amount of computing resources allocated to the user's virtual machine is reduced. In another example, a set of applications is provided to the user, and the agent identifies when more than one application is in use simultaneously. As a result of detecting simultaneous application usage, the user's computing resource requirements are recalculated based on the simultaneous application usage, and appropriately increased computing resources are allocated to the user's virtual machine.
[0025] The computing resources may be adjusted based at least in part on the budget allocated to the user. Typically, a virtual machine is provided to the user, and the virtual machine is configured to provide optimal performance for an application identified as being for use by the user. As the computing resources are used, the budget associated with the user is allocated by the computing resource service provider. As the budget is consumed, the computing resource service provider will determine whether the remaining budget will be exhausted before the budget period expires. If the remaining budget will be exhausted before the budget period expires, the computing resource service provider rations the computing resources allocated to the user's virtual machine to ensure that the budget lasts until the budget period expires. When adjustments are made based on budget constraints, notifications may be sent to users and administrators requesting an increase in the computing resource budget.
[0026] Figure 1An illustrative example of an environment in which various embodiments can be practiced is shown. Environment 100 includes a client computer system 102, which is used by a user 104 to access a computing resource service provider 106 via a computer network 108. The computing resource service provider 106 includes one or more server computer systems that host virtual machines 112 of the user 104. The computing resource service provider 106 configures the virtual machine by allocating computing resources from the server computer system to the virtual machine and installing one or more applications from an application store 110 onto the virtual machine. The application store 110 stores the application in the form of an installation file that is run on the virtual machine to install the application, or in the form of an executable image that can be transferred to a virtual storage resource on the virtual machine. The virtual machine 112 hosts a word processing application 114, a solid modeling application 116, and a video editing application 118. The application generates display information, which is encoded into a display stream by a streaming agent 120 running on the virtual machine 112. The display stream is streamed to the client computer system 102 via the computer network 108. The client computer system 102 receives the display stream using an application streaming client (such as a web browser or a standalone streaming application configured with application streaming software). 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.
[0027] The user 104 starts the application streaming process by accessing the application proxy interface on the client computer system 102. The application proxy interface displays a list of applications available to the user in the form of a menu, such as icons on the desktop, tiles on the home screen, or interfaces required by other applications. In some instances, the application proxy interface is provided via a command line. The application proxy interface populates the list of available applications by accessing the application proxy service running on the computing resource service provider 106. The application proxy service maintains a database that specifies a set of applications available to the user. The database is populated by an administrator of the computing resource service.
[0028] As a result of the user launching the application streaming client, the computing resource service provider 106 launches a virtual machine 112 having computing resources suitable for running the set of applications that the user 104 has been authorized to access. The applications that the user 104 has been authorized to 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, thereby providing the user 104 with a user interface for the applications hosted on the virtual machine 112. The user 104 can execute one or more of the installed applications, which share the computing resources on the virtual machine 112.
[0029] In another embodiment, when the user starts the application streaming client, the computing resource service provider 106 does not start the virtual machine until or unless the user 104 selects an application to run. The application streaming client running on the client computer system 102 generates a desktop interface and presents it to the user 104. The application that the user 104 is authorized to can be launched from the desktop interface via an icon, menu or other user interface element. Selecting an application from the desktop interface sends a command to the computing resource service provider 106, which starts a virtual machine configured with computing resources suitable for executing the selected application. If an additional application is selected from the desktop interface, the computing resource service provider 106 starts an additional virtual machine with computing resources suitable for executing the additional application. If the application is closed, the corresponding virtual machine and the associated computing resources are released. Each virtual machine contains a streaming agent that encodes the display information provided by the application running on the virtual machine. The client computer system 102 receives a display stream from each virtual machine. The display stream is received and combined by the stream combiner component in the application streaming client and presented on a unified desktop interface.
[0030] Figure 2 An illustrative example of a process for determining a client's computing resource requirements based at least in part on a set of selected applications as a result of being executed according to one embodiment is shown. Process diagram 200 shows information maintained by a computing resource service provider that allows the computing resource service provider to configure a virtual machine suitable for a specific set of applications available to a user. Computer applications are associated with a set of computing resource requirements. Resource requirements describe the minimum and recommended amounts of various computing resource types, such as permanent storage, memory, processing power, network bandwidth, graphics memory, graphics capabilities, peripheral device requirements, support software requirements, or other requirements. Processing capabilities can be specified as minimum and recommended clock speeds, or a combination of clock speeds and processor types. In some instances, processing capabilities can be specified in general terms, such as the number of operations per second, the number of floating-point operations per second, or the rate at which operations are executed. Graphics capabilities may be part of application requirements, and a minimum amount of graphics memory and / or a minimum speed or graphics processor type may be specified. Some applications may require the presence of certain peripherals or interfaces, and some applications require specific support software to be installed with the application, such as a specific type of operating system with a minimum version number. The virtual machine can be used to meet the application requirements by configuring the virtual machine with virtual resource equivalents that correspond to the computing resource requirements of the application.
[0031] Application template 202 specifies a set of applications made available to the user by a computing resource service provider. The computing resource service provider may obtain application template 202 from the user or from an administrator responsible for providing computing services to the user. In some embodiments, application template 202 is obtained by analyzing information collected by a monitoring agent executed on the user's client computer system. The monitoring agent records application usage patterns and identifies a set of applications used and records the combination of applications used simultaneously. Application template 202 is linked to three selected application profiles. Word processing profile 204 describes a set of requirements for executing a corresponding word processing application on a host computer system. Solid modeling profile 206 describes a set of requirements for executing a corresponding solid modeling application and a host computer system. Video editing profile 208 describes a set of requirements for executing a corresponding video editing application on a computer system. These three application profiles specify 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, respectively.
[0032] The computing resource service provider combines the profiles of the applications selected in the application template 202 to generate a set of virtual machine requirements 210. If one application is expected to run at a time, the requirements can be combined by identifying the maximum of the minimum CPU, memory, graphics memory, and network bandwidth constraints. Since disk storage requirements generally apply even when the application is not running, the disk storage requirements of each application are added to determine the disk storage requirements for the set of virtual machine requirements 210. If the applications are expected to run simultaneously, the virtual machine requirements 210 are determined by adding the requirements of the applications that will be running simultaneously. For example, in Figure 2 In the example of , if a word processing application and a solid modeling application are to be run simultaneously, the virtual machine requirements are a 3GHz CPU, 600MB of memory, 1.15GB of disk storage, 700kB of network bandwidth, and 3GB of graphics memory.
[0033] In some instances, the computing resource requirements of an application represent maximum temporary resource usage rather than consistent usage, so less than the sum of the resource requirements may be necessary for simultaneous application execution. For a set of applications to be run simultaneously, the individual items of virtual machine requirements 210 may be determined by identifying, for each application, the maximum value of the minimum required resource of each resource type, and adding a fraction of the difference between the identified maximum value and the sum of all application resources. For example, in Figure 2In the example, for three selected applications to be run simultaneously, the virtual machine requirement 210 for memory may be determined by identifying the maximum amount of memory required by the three applications (1 GB), and adding a fraction (in this example, half) of the requirements of the remaining applications (400 MB + 200 MB) to arrive at a virtual machine memory requirement of 1.3 GB (1 GB + (0.5 x (400 MB + 200 MB)) = 1.3 GB). The fraction may be adjusted based at least in part on the variability of actual computing resource usage by the applications.
[0034] Figure 3 An illustrative example of a process for allocating a type of virtual instance to a user as a result of being executed according to one embodiment is shown. Process diagram 300 shows how a computing resource service provider can use a virtual machine requirement 302 to identify an appropriate virtual machine profile template for configuring a virtual machine. In some embodiments, a computing resource service provider uses multiple predefined virtual machine profile templates to provide virtual machines to clients. The virtual machine profile template specifies the configuration of computing resources that serve as a template for provisioning virtual machines. By providing multiple predefined virtual machine configurations, in some embodiments, a computing resource service provider can generate and maintain a pool of virtual machines before any client request. As a result, when a computing resource service provider receives a request to execute an application, a virtual machine can be provisioned from an existing pool of virtual machines, and the application can be installed and started more quickly.
[0035] exist Figure 3 In the example shown, a virtual machine profile template is selected by identifying a virtual machine profile template that meets or exceeds the virtual machine requirements 302. The computing resource service provider supports three virtual machine profile templates. The first VM profile template 304 is not suitable because the amount of processing power, disk storage, graphics memory, and network bandwidth is less than the minimum amount specified in the virtual machine requirements 302. The second VM profile template 306 is suitable because the amount of each type of computing resource in the profile meets or exceeds the minimum amount specified in the virtual machine requirements 302. The third VM profile template 308 is not suitable because the amount of processing power is less than the minimum amount specified in the virtual machine requirements 302. If more than one VM profile template meets the virtual machine requirements 302, the computing resource service provider uses multiple criteria to select from the satisfactory VM profile templates. In some examples, the computing resource service provider selects a specific VM profile template from a set 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 computing resource type specified in the VM profile template, and each VM profile template is analyzed to determine the overall metric of the VM profile. For example, the following metrics can be applied to various types of compute resources:
[0036] CPU 50 / Ghz Memory 0.2 / Mb Disk storage 0.5 / GB Graphics Memory 100 / GB Network bandwidth 0.1 / MB
[0037] Applying the above metrics produces Figure 3 The following overall metrics for the VM profile template shown in .
[0038] resource ratio VM Profile 1 Resource Metrics CPU 50 / Ghz 1Ghz 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
[0039] Total metric = 351.5
[0040] resource ratio VM Profile 2 Resource Metrics 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
[0041] Total metrics = 755
[0042] resource ratio VM Profile 3 Resource Metrics 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
[0043] Total metrics = 710
[0044] The overall metric determined for each VM profile allows the various VM profiles to be compared with each other 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 as long as it meets the minimum requirements. The second VM profile template 306 is next preferred, followed by the third VM profile template 308.
[0045] In some embodiments, the availability of pre-configured virtual machines can influence or override the selection of a specific VM profile template. When a computing resource service provider supplies virtual machines from a pre-existing pool of virtual machines, the presence or absence of virtual machines in a pool with a specific VM profile template can be used to select a specific VM profile template for a new client request. For example, if multiple VM profile templates meet or exceed the virtual machine demand 302, but only one of the multiple VM profile templates has a corresponding virtual machine in the available VM pool, the computing resource service provider will allocate an existing virtual machine from the pool instead of creating a new virtual machine.
[0046] In some embodiments, the computing resource service provider generates a virtual machine based at least in part directly on the virtual machine requirements 302 and does not rely on a limited set of VM templates. A VM profile template matching the virtual machine requirements 302 may be created, or a virtual machine may be generated directly from the virtual machine requirements 302. Once the VM has been acquired by the computing resource service provider, the VM is allocated to the user 310. Figure 2 When combined with the processes of , user 310 is provided with a virtual machine suitable for hosting a specific application used by the user.
[0047] Figure 4An illustrative example of a client-server computer system that provides computing resources suitable for hosting a specified set of applications to a client according to one embodiment is shown. System diagram 400 includes a client computer system 402, which is 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 set of applications used by the user 404. The set of virtual machine requirements 408 includes specifications 410 that identify various quantities and characteristics of specific computing resources. An application streaming client runs on the client computer system 402. The application streaming client is an application that interacts 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 output interface data performed by the user 404, such as keystrokes, mouse movements, 3-D mouse movements and positions, and mouse clicks, and transmits the interface data to the host server 406. The virtual machine running on the host server 406 executes the application requested by the user 404, and the display information generated by the application is encoded and streamed to the application streaming client 412. The application streaming client 412 decodes the received streaming display information and presents an operation user interface to the user 404, which allows the user to interact with the application running on the virtual machine.
[0048] In some instances, the host server 406 provides a single virtual machine to the user 404 based at least in part on a single set of combined VM requirements sufficient to host an application used by the user. The user 404 launches an application streaming client 412. The application streaming client 412 presents a display to the user 404 that allows the user to request execution of an application. The application streaming client 412 provides the virtual machine requirements 408 to a computing resource service provider running on the host server 406. In some embodiments, the computing resource service provider accesses a database of VM templates 414. The database of VM templates 414 retains a plurality of VM profile templates supported by the computing resource service provider. The computing resource service provider compares the provided virtual machine requirements 408 with the VM profile templates retained on the database of VM templates 414, and selects a specific VM profile to satisfy the user's request. The computing resource service provider launches a virtual machine instance 416 according to the selected VM profile. In another embodiment, the computing resource service provider generates the virtual machine instance 416 directly from the virtual machine requirements 408.
[0049] One or more applications are typically installed on the virtual machine instance 416 from an application store 418 by the computing resource service provider. The application can be installed on the virtual machine instance 416 by executing an installation program or installer provided by the manufacturer of the application, or by copying a pre-installed disk image of the application to the virtual machine instance 416. In some embodiments, the application is provided to the virtual machine instance 416 by allowing the virtual machine instance 416 to execute a remote copy of the application outside of the virtual machine instance 416. The application can be installed as needed as a result of a user 404 requesting execution of a specific application.
[0050] The streaming agent on the virtual machine instance 416 captures the display information generated by the application running on the virtual machine instance 416, encodes the display information into a display stream, and the display stream is transmitted to the application streaming client 412 on the client computer system 402. The application streaming client 412 decodes the display information and presents a user interface that allows the user to interact with the application to the user 404. In some embodiments, the computing resource service provider provides more than one virtual machine instance to the user 404. For example, in some embodiments, a virtual machine instance is created for each application available to the user 404. The streaming agent running on each virtual machine provides the display stream to the application streaming client 412. The application streaming client 412 combines the display streams and presents a single user interface to the user 404.
[0051] The streaming agent can adapt the encoding algorithm for encoding 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 of the encoded display stream. If the network bandwidth becomes limited, the streaming agent can reduce the rate of the encoded display screen by reducing the resolution of the encoded display information or reducing the frame rate of the encoded display information. In some embodiments, the streaming agent adapts the encoding algorithm based at least in part on the application program that displays the encoded display. For example, a word processing application can be encoded with a higher resolution and a lower frame rate, while a video game can be encoded with a lower resolution and a higher frame rate to maintain smooth motion. Adjustment of the encoding algorithm can be completed by the streaming agent or by the streaming client running on the client computer system. Adjustment of the encoding algorithm can include adjustment of the audio encoding associated with the video display information. For example, the audio encoding can be adjusted to select between stereo audio and mono audio, and to select between voice quality, radio quality and CD quality audio. Audio encoding can be based at least in part on the audio playback facilities available to the client computer system 402.
[0052] Figure 5 An illustrative example of a process of supplying computing resources from a server and receiving a display stream from an application running on the server as a result of being executed by a client computer system according to one embodiment is shown. Process diagram 500 starts at box 502, where a user installs an application streaming client on a local client computer system. In some instances, the application streaming client is a web browser or a web browser configured with a plug-in that provides application streaming functionality. In another instance, the application streaming client is a standalone application installed on a client computer system. At box 504, the user logs into the application streaming client, which authenticates the user using a service that acts as a computing resource service provider. A user profile is provided to the application streaming client that identifies the application used by the user. In some instances, the user profile includes information describing the usage pattern of the identified application, such as identifying applications used simultaneously. Using the information contained in the user profile, the client computer system determines 506 a set of virtual machine requirements that adapt to the use of the application described in the user profile.
[0053] At box 508, the client computer system starts the virtual machine according to the determined virtual machine requirements. In some instances, the client computer system requests the creation of a virtual machine by a computing resource service provider. The computing resource service provider can create a virtual machine that matches the provided virtual machine requirements. In other instances, the computing resource service provider creates a virtual machine from one of a plurality of machine profiles that meets or exceeds the determined virtual machine requirements. In yet another instance, the computing resource service provider selects a virtual machine from a pool of previously created virtual machines available for use. At box 510, the client computer system installs an application on the provided virtual machine. The application can be installed on the provided virtual machine by the client or the computing resource service provider according to the client's request.
[0054] The client computer system establishes 512 a screening connection to the provided virtual machine via a stream transmission agent. The stream transmission agent is installed on the provided virtual machine, and the display information from the installed application is encoded, and the resulting display stream is transmitted to the client computer system to be displayed to the user. The client computer system receives 514 encoded display information, and displays the display information to the user. User inputs such as keystrokes, mouse movements, 3-D mouse movements and orientation and mouse clicks from the user are encoded by the application streaming client and transmitted to the stream transmission agent. In addition to the video display information, additional signals can be encoded and streamed to the application streaming client by the stream transmission agent. In some instances, the audio information generated by the operating system and the application is encoded and sent to the application streaming client.
[0055] Figure 6 An illustrative example of a client-server computer system that provides computing resources to a client in the form of multiple virtual machines according to one embodiment is shown, and each virtual machine is suitable for hosting a specific application specified by the client. Computing environment 600 includes a client computer system 602 operated by a user 604. The client computer system 602 communicates with a virtual machine host server 606 that provides access to multiple 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 splicer 612. The VM manager 610 is connected 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 converts these requests into requests for virtual machines from the virtual machine host server 606. When the user 604 closes the application, the VM manager 610 notifies the virtual machine host server 606 that the virtual machine is no longer in use. In some instances, the virtual machine host server 606 stops using the virtual machine and releases the resources allocated to the virtual machine. In another instance, the virtual machine host server 606 puts the deactivated virtual machine into a virtual machine pool that can be reused. In some embodiments, the computing resource service provider generates multiple virtual machines before the client computer system requests them, and places the virtual machines in the available virtual machine pool. If the available virtual machine pool consumes more than a predetermined amount of resources, or if the virtual machine host server 606 is insufficient in resources to allocate two additional virtual machines, the virtual machines in the virtual machine pool can be recycled and the corresponding computing resources can be restored.
[0056] The application stream splicer 612 includes a window manager 614 and a stream combiner 616. The stream combiner 616 receives a display stream from a virtual machine assigned to a user 604 by a virtual machine host server 606. The stream combiner 616 decodes the information in the display stream and generates 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 combined display screen. The window manager 614 allows the user 604 to select a display stream for viewing, 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. The window manager 614 can provide information to the stream transmission agent on the virtual machine, which allows the stream transmission agent to optimize the information provided in the display stream. For example, the window manager 614 can provide a signal to the stream transmission agent, which indicates when the corresponding display information is not visible to the user 604 (such as when the corresponding window is behind another window or minimized). In some embodiments, the window manager 614 can indicate when a portion of the corresponding display information is not visible or is hidden by another element of the display screen.
[0057] The virtual machine host server 606 can be composed of a single physical server or a group of servers configured to provide multiple virtual machines. The virtual machine host server 606 hosts virtual machines suitable for specific applications and runs the specific applications for which they are suitable. The virtual machine host server 606 hosts a group of word processing VM instances 618, a group of solid modeling VM instances 620, a group of video editing VM instances 622, and a group of database VM instances 624. The applications are installed by the virtual machine host server 606 from the application storage 626 to the newly created virtual machines. These applications can be maintained in the form of executable installers or in the form of image files that can be used to quickly configure virtual machines for hosting applications. The client computer system 602 is provided with a VM instance for each running application. For example, in Figure 6 In the embodiment, the client computer system 602 is equipped with a word processing VM instance, a solid modeling VM instance, and a video editing VM instance. The display streams generated from the applications running on these three VM instances are provided to the application stream stitcher 612, which combines the display information from the three applications into a single display screen presented to the user 604.
[0058] Figure 7An illustrative example of a client-server computer system that receives multiple display streams from multiple computing resources and combines the display streams into a unified screen on a client display according to one embodiment is shown. The computing environment 700 includes a client computer system 702 that communicates 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 a video editing VM instance 708. The word processing VM instance 704 hosts a word processing application 710 and a streaming agent 712, which encodes and streams display information and other output from the word processing application 710 to the client computer system 702. The solid modeling VM instance 706 hosts a solid modeling application 714 and a streaming agent 716, which encodes and streams display information to the client computer system 702. The video editing VM instance 708 hosts a video editing application 718 and a streaming agent 720, which encodes and streams display information from the video editing application 718 to the client computer system 702.
[0059] The client computer system 702 runs an application streaming client 722, which can be an independent application or can be based on a web browser. The application streaming client 722 includes a virtual machine manager 724 and an application stream splicer 726. The application stream splicer 726 includes a window manager 728 and a stream combiner 730. The stream combiner 730 receives display streams from the stream transmission agents 712, 716 and 720, and decodes the display streams to generate a combined user interface. The combined user interface includes a display window 734 for displaying word processing, a display window 736 for video editing, and a display window 738 for solid modeling. The combined user interface is displayed on a display screen 732 connected to the client computer system 702. The window manager 728 is connected to the stream combiner 730 to identify display information that is hidden, minimized or covered due to combination with other streams or due to manipulation by the user of the client computer system 702. The window manager 728 provides display boundary information describing the covered area of the corresponding display information to the stream transmission agents 712, 716 and 720. Using this information, the streaming agent can avoid encoding and transmitting to the client computer system 702 information that is not currently visible.
[0060] In some examples, the display information generated by the streaming agent is merged on the computing resource service provider using a server-side application stream splicer. The server-side application stream splicer merges the display information and transmits the merged display information to the application streaming client 722 on the client computer system 702. The server-side application stream splicer sends viewport information to the streaming agent, which identifies the display information areas that are covered or hidden as a result of the merging process. The streaming agent uses the viewport information to avoid encoding display data for display areas that are not visible, and also avoids providing display information for display areas that are not visible.
[0061] Figure 8 An illustrative example of a process of supplying a set of virtual machines from a server and merging display information streams from the virtual machines into a unified display screen as a result of execution by a client computer system according to one embodiment is shown. Process diagram 800 begins with installing an application streaming client on a client computer system. The application streaming client presents a menu, icon, or other interface that allows the user to select one or more applications to a user of the client computer system. At box 804, the user selects one or more applications, and the application streaming client transmits the selection to a computing resource service provider. A virtual machine is started 806 for each application by the computing resource service provider, and the virtual machine is configured with computing resources suitable for hosting the application hosted by each virtual machine. The computing resource service provider installs 808 applications on its corresponding virtual machines, and also installs a streaming agent to provide display information from the application hosted by the virtual machine to the client computer system.
[0062] The client computer system establishes 810 a streaming connection to each streaming agent. Viewport information can be provided by the client computer system, and the information helps the streaming agent to encode information and transmit the 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 combined 814 into a single display screen by the stream combiner in the application streaming agent. The window manager component identification 816 in the application streaming client of the display information is protected, hidden or minimized as a result of combining the updated display information into a single display screen. The identified area is characterized as a set of display viewport information, and the viewport information is provided 818 to the streaming agent on the virtual machine. The streaming agent can use this information to avoid encoding and transmitting information that is not visible on the display screen.
[0063] Fig. 9An illustrative example of a client-server computer system that provides computing resources to multiple clients by providing a virtual machine that hosts a single application that supports multiple sessions is shown according to one embodiment. Environment 900 includes a word processing VM instance 902 hosted by a computing resource service provider on a host computer system. Word processing VM instance 902 hosts multiple word processing application sessions 903, 904, and 905. 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. Fig. 9 , a 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.
[0064] When a user logs into a client computer system and requests access to a word processing application via an application streaming client, the application streaming client contacts a computing resource service provider that creates a word processing application session on a 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 corresponding to the user's word processing request. By using a single application instance, many resources can be shared on a word processing session. For example, elements of a word processing application user interface can be encoded by one streaming agent and reused by the remaining agents, thereby eliminating the recoding of common UI elements such as menus, ribbons, and icons.
[0065] Additionally, embodiments of the present disclosure may be described in terms of the following:
[0066] 1. A computer-implemented method, the computer-implemented method comprising:
[0067] Under the control of one or more computer systems configured with executable instructions,
[0068] Identify the set of applications associated with a user identity;
[0069] obtaining a set of application resource profiles by retrieving a resource profile for each application in the set of applications;
[0070] generating a virtual machine profile based at least in part on the set of application resource profiles;
[0071] creating a virtual machine having a configuration of computing resources satisfying the virtual machine profile;
[0072] installing the set of applications on the virtual machine;
[0073] launching at least one application from the set of applications; and
[0074] A streaming connection is caused to be established between the virtual machine and a client computer system, the streaming connection transmitting the encoded display information from the virtual machine to the client computer system.
[0075] 2. The computer-implemented method of clause 1, further comprising selecting a profile template from a set of virtual machine profile templates based at least in part on the virtual machine profile, wherein:
[0076] The set of virtual machine profile templates are associated with virtual machine configurations that are supportable by a computing resource service provider; and
[0077] The virtual machine is configured according to the profile template.
[0078] 3. The computer-implemented method of clause 1 or 2, wherein identifying the set of applications associated with the user identity is accomplished at least in part by:
[0079] retrieving application usage information from said client computer system;
[0080] identifying a specific application that has been running on the client computer system using the user identity; and
[0081] The specific application is added to the set of applications.
[0082] 4. The computer-implemented method of any one of clauses 1 to 3, further comprising:
[0083] identifying a second set of applications that can run concurrently;
[0084] generating a combined resource profile for the second set of applications; and
[0085] The virtual machine profile is altered based at least in part on the combined resource profile.
[0086] 5. A non-transitory computer-readable storage medium having executable instructions stored thereon, which, as a result of execution by one or more processors of a computer system, cause the computer system to at least:
[0087] sending a request to a computing resource service provider to use a first application, the request to use the first application causing the computing resource service provider to provision a first virtual machine, the first virtual machine being configured based at least in part on computing resource requirements of the first application;
[0088] receiving, using an application streaming client, a first encoded display information stream from the first virtual machine;
[0089] sending a request to a computing resource service provider to use a second application, the request to use the second application causing the computing resource service provider to provision a second virtual machine, the second virtual machine being configured based at least in part on the computing resource requirements of the second application;
[0090] receiving, using the application streaming client, a second encoded display information stream from the second virtual machine;
[0091] combining the first encoded display information stream and the second encoded display information stream to produce a combined user interface for the first application and the second application; and
[0092] The combined user interface is presented on a display connected to the computer system.
[0093] 6. The non-transitory computer-readable storage medium of clause 5, wherein the instructions further comprise instructions that, as a result of execution by the one or more processors, cause the computer system to:
[0094] identifying at least a portion of the first encoded display information stream that is not visible on the user interface; and
[0095] Viewport information describing the portion of the first stream is sent to the computing resource service provider.
[0096] 7. The non-transitory computer-readable storage medium of clause 5 or 6, wherein the instructions further comprise instructions that, as a result of being executed by the one or more processors, cause the computer system to:
[0097] determining that a network connection to the computing resource service provider has been lost; and
[0098] As a result of determining that the network connection has been lost, the computing resource service provider is caused to de-allocate the virtual machine.
[0099] 8. The non-transitory computer-readable storage medium of any of clauses 5 to 7, wherein the combined user interface comprises a first window displaying encoded display information from the first virtual machine and a second window displaying encoded information from the second virtual machine.
[0100] 9. The non-transitory computer-readable storage medium of any one of clauses 5 to 8, wherein the instructions further comprise instructions that, as a result of execution by the one or more processors, cause the computer system to:
[0101] encoding user input from one or more devices connected to the computer system into an input stream; and
[0102] The input stream is transmitted to the computing resource service provider.
[0103] 10. The non-transitory computer-readable storage medium of clause 9, wherein the one or more devices include one or more of a keyboard, a mouse, a 3-D mouse, a microphone, and a camera.
[0104] 11. A non-transitory computer-readable storage medium as described in any of clauses 5 to 10, wherein one or more services include a web browser, the web browser being configured with: a virtual machine manager that controls the provision of virtual machines by the computing resource service provider; and an application stream stitcher that receives the encoded display information stream and integrates it into the user interface.
[0105] 12. The non-transitory computer-readable storage medium of any of clauses 5 to 11, wherein:
[0106] The first encoded display information stream includes audio information generated by the first application;
[0107] The second encoded display information stream includes audio information generated by the second application; and
[0108] The user interface includes audio information from the first application and the second application.
[0109] 13. A system comprising at least one computing device implementing one or more services, wherein the one or more services:
[0110] receiving a request from a client computer system to provide an application;
[0111] selecting a virtual machine profile from a set of virtual machine profiles based at least in part on resource requirements associated with the application;
[0112] assigning to the virtual machine a configuration based at least in part on the virtual machine profile;
[0113] executing the application on the virtual machine; and
[0114] A connection is established between the virtual machine and the client computer system, the connection transmitting display information associated with the application to the client computer system.
[0115] 14. A system as described in clause 13, wherein:
[0116] The display information is encoded at a resolution and frame rate appropriate for the amount of network bandwidth available to the client computer system; and
[0117] The display information includes audio information encoded based at least in part on characteristics of an audio playback facility associated with the client computer system.
[0118] 15. A system as described in clause 13 or 14, wherein the display information is encoded at a resolution and frame rate appropriate for the application.
[0119] 16. The system of any of clauses 13 to 15, wherein the one or more services allocate the virtual machine by selecting the virtual machine at least in part from a pool of available virtual machines running on a host computer system.
[0120] 17. A system as described in any of clauses 13 to 16, wherein the one or more services further:
[0121] receiving an additional request to provide an additional application to the client computer system;
[0122] determining an additional virtual machine profile based at least in part on resource requirements associated with the additional application;
[0123] allocating an additional virtual machine based at least in part on the additional virtual machine profile;
[0124] executing the additional application on the additional virtual machine; and
[0125] An additional connection is established between the additional virtual machine and the client computer system, the additional connection transmitting display information associated with the additional application to the client computer system.
[0126] 18. A system as described in any of clauses 13 to 17, wherein the one or more services further:
[0127] receiving additional requests to provide the application to additional client computer systems;
[0128] generating an additional application session for the application running on the virtual machine; and
[0129] An additional connection is established between the additional application session on the virtual machine and the client computer system, the additional connection transmitting display information associated with the additional application session to the client computer system.
[0130] 19. The system of clause 18, wherein the display information associated with the additional application session is provided at least in part from display information associated with the application session.
[0131] 20. A system as described in any of clauses 13 to 19, wherein the one or more services further:
[0132] receiving viewport information identifying a portion of the display information that is not visible on the client computer system; and
[0133] The portion of the display information is excluded from transmission of the display information to the client computer system.
[0134] Fig.10Aspects of an exemplary environment 1000 for implementing aspects according to various embodiments are shown. It should be understood that, although a web-based environment is used for the purpose of illustration, various embodiments may be implemented using different environments in appropriate circumstances. The environment includes an electronic client device 1002, which may include any appropriate device operable to send and / or receive requests, messages or information through an appropriate network 1004 and transmit information back to the user of the device in some embodiments. Examples of such client devices include personal computers, mobile phones, handheld messaging devices, laptop computers, tablet computers, set-top boxes, personal data assistants, embedded computer systems, e-book readers, and the like. The network may include any appropriate 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 of the above-mentioned networks. The components used for such a system may depend at least in part on the type of the selected network and / or environment. The protocols and components used to communicate through such a network are well known and will not be discussed in detail herein. Communication via a network may be achieved by wired or wireless connections and combinations thereof. In this example, the network includes the Internet, as the environment includes a network server 1006 for receiving requests and serving content in response to the requests, but for other networks, alternative devices serving similar purposes may be used, as will be apparent to one of ordinary skill in the art.
[0135] The illustrative environment includes at least one application server 1008 and a data storage area 1010. It should be understood that there may be several application servers, layers or other elements and processes or components that can be linked or otherwise configured, which can interact to perform tasks such as obtaining data from appropriate data storage areas. The server as used herein can be implemented in various ways, such as a hardware device or a virtual computer system. In some cases, a server can refer to a programming module being executed on a computer system. As used herein, unless otherwise specified or clear from the context, the term "data storage area" refers to any device or combination of devices that can store, access and retrieve data, and the device or combination of devices can include any combination of data servers, databases, data storage devices and data storage media in any standard, distributed, virtual or clustered environment and any number of the data servers, databases, data storage devices and data storage media. The application server can include any appropriate hardware, software and firmware, which are used to integrate with the data storage area as needed to perform some or all of the aspects of one or more applications of the client device, the data access of the processing application and the business logic. The application server can cooperate with the data storage area to provide access control services, and can generate content including but not limited to the following: text, graphics, audio, video and / or other content that can be used to provide to users, which can be served to users by the web server in the form of hypertext markup language ("HTML"), extensible markup language ("XML"), JavaScript, cascading style sheets ("CSS"), or another appropriate client-side structured language. The content transmitted to the client device can be processed by the client device to provide content in one or more forms, including but not limited to forms that can be perceived by the user through hearing, vision, and / or other senses (including touch, taste, and / or smell). The processing of all requests and responses and the delivery of content between the client device 1002 and the application server 1008 can be processed by the web server using PHP: in this example, it is a hypertext preprocessor ("PHP"), Python, Ruby, Perl, Java, HTML, XML, or another appropriate server-side structured language. It should be understood that the web and application servers are not necessary and are merely exemplary components, because the structured code discussed herein can be executed on any appropriate device or host, as discussed elsewhere herein. Furthermore, unless otherwise clear from the context, operations described herein as being performed by a single device may be collectively performed by multiple devices, possibly forming a distributed and / or virtual system.
[0136] The data storage area 1010 may include several separate data tables, databases, data documents, dynamic data storage schemes and / or other data storage mechanisms and media for storing data related to specific aspects of the present disclosure. For example, the data storage area shown may include a mechanism for storing production data 1012 and user information 1016, which can be used to serve the content of the production side. The data storage area shown also includes a mechanism for storing log data 1014, which can be used for reporting, analysis or other such purposes. It should be understood that there may be many other aspects that may need to be stored in the data storage area, such as page image information and access rights information, which can be stored in any of the mechanisms listed above or in another mechanism in the data storage area 1010 as appropriate. The data storage area 1010 can be operated by logic associated therewith to receive instructions from the application server 1008, and obtain data, update data or otherwise process data in response to the instructions. The application server 1008 can provide static, dynamic data or a combination of static and dynamic data in response to the received instructions. Dynamic data such as data used in web logs (blogs), shopping applications, news services, and other such applications can be generated by a server-side structured language as described herein or can be provided by a content management system ("CMS") operating on an application server or under its control. In one example, a user can submit a search request for a certain type of project through a device operated by a user. In this case, the data storage area may access user information to verify the identity of the user, and the directory details may be accessed to obtain information about the project of the type. The information can then be returned to the user in the form of a result list such as on a web page, and the user can view the web page through a browser on a client device 1002. The information of a specific project of interest can be viewed in a dedicated browser page or window. However, it should be noted that the embodiments of the present disclosure are not necessarily limited to the context of a web page, but can be more generally applicable to processing general requests, wherein the request is not necessarily a request for content.
[0137] Each server will typically include an operating system that provides executable program instructions for general management and operation of the server, and will typically include a computer-readable storage medium (e.g., a hard disk, random access memory, read-only memory, etc.) storing instructions that, when executed by the server's processor, allow the server to perform its intended functions. Suitable implementations of the operating system and general functionality of the server are known or commercially available and are readily implemented by one of ordinary skill in the art, especially in light of the disclosure herein.
[0138] In one embodiment, the environment is a distributed and / or virtual machine utilizing several computer systems and components that are interconnected via communication links using one or more computer networks or direct connections. However, it should be understood by those of ordinary skill in the art that such systems may be deployed in environments having more than Fig.10 Systems with fewer or more components than shown may operate equally well. Fig.10 The depiction of system 1000 in FIG. 1 should be regarded as illustrative in nature and not limiting the scope of the present disclosure.
[0139] Various embodiments can also be implemented in various operating environments, which can include one or more user computers, computing devices or processing devices that can be used to operate any one of multiple applications in some cases.Users or client devices can include any one of multiple general personal computers, such as desktop computers, laptop computers or tablet computers running standard operating systems, and cellular, wireless and handheld devices that run mobile software and can support multiple networks and messaging protocols.Such a system can also include multiple workstations, which run any one of multiple commercially available operating systems and other known applications, for purposes such as development and database management.These devices can also include other electronic devices, such as virtual terminals, thin clients, game systems and other devices that can communicate via a network.These devices can also include virtual devices, such as virtual machines, hypervisors and other virtual devices that can communicate via a network.
[0140] Various embodiments of the present disclosure utilize at least one network that may be familiar to those skilled in the art to support communications using any of a variety of commercially available protocols, such as the Transmission Control Protocol / Internet Protocol ("TCP / IP"), the User Datagram Protocol ("UDP"), protocols operating in various layers of the Open Systems Interconnection ("OSI") model, the File Transfer Protocol ("FTP"), the Universal Plug and Play ("UPnP"), the Network File System ("NFS"), the Common Internet File System ("CIFS"), and AppleTalk. The network can 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 of the above networks. In some embodiments, a connection-oriented protocol can be used to communicate between network endpoints. A connection-oriented protocol (sometimes referred to as a connection-based protocol) is capable of transmitting data in the form of an ordered stream. A connection-oriented protocol 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 are in contrast to packet-oriented protocols (such as UDP), which transmit packets without guaranteed ordering.
[0141] In embodiments utilizing a web server, the web server may run any of a variety of server or middle-tier applications, including a Hypertext Transfer Protocol ("HTTP") server, an FTP server, a Common Gateway Interface ("CGI") server, a data server, a Java server, an Apache server, and a business application server. The server may also be capable of executing programs or scripts in response to requests from user devices, such as by executing a program that may be implemented in any programming language (such as, C, C# or C++) or any scripting language (such as Ruby, PHP, Perl, Python or TCL) and their combinations. The server may also include a database server, including but not limited to commercially available as well as The database servers may include those servers of the type used in the database, 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. The database servers may include table-based servers, document-based servers, unstructured servers, relational servers, non-relational servers, or a combination of these and / or other database servers.
[0142] The environment may include various data storage areas and other memory and storage media, as discussed above. These may reside in various locations, such as, local to one or more of the computers (or reside in the computer) or away from any or all of the storage media in the computers across the network. In a specific set of embodiments, the information may reside in a storage area network ("SAN") familiar to those skilled in the art. Similarly, any necessary files for performing functions attributed to computers, servers or other network devices may be stored locally and / or remotely where appropriate. In the case where the system includes a computerized device, each such device may include hardware elements that may be electrically coupled via a bus, including, for example, at least one central processing unit ("CPU" or "processor"), at least one input device (e.g., mouse, 3-D mouse, keyboard, controller, touch screen or keypad) and at least one output device (e.g., display device, printer or speaker). Such systems 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 memory cards, etc.
[0143] Such devices may also include a computer-readable storage medium reader, a communication device (e.g., a modem, a network card (wireless or wired), an infrared communication device, etc.), and a working memory as described above. A computer-readable storage medium reader may be connected to or configured to receive a computer-readable storage medium, which represents a remote, local, fixed and / or removable storage device, and a storage medium for temporarily and / or more permanently containing, storing, transmitting and retrieving computer-readable information. Systems and various devices will also typically include a plurality of software applications, modules, services, or other elements located within at least one working memory device, including an operating system and an application, such as a client application or a web browser. It should be understood that alternative embodiments may have variations different from the above-described embodiments. For example, custom hardware and / or specific elements may also be used to implement hardware, software (including portable software, such as applets), or both. In addition, connections to other computing devices such as network input / output devices may be employed.
[0144] Storage media and computer-readable media for containing code or code portions may include any suitable 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 technology 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 disk read-only memory ("CD-ROM"), digital versatile disk (DVD) or other optical storage devices, magnetic cassettes, magnetic tapes, magnetic disk storage devices or other magnetic storage devices, or any other medium that can be used to store the desired information and can be accessed by the system device. Based on the disclosure and teachings provided herein, those of ordinary skill in the art will understand other ways and / or methods for implementing various embodiments.
[0145] In the preceding and following descriptions, various techniques are described. For the purpose of explanation, specific configurations and details will be set forth in order to provide a thorough understanding of possible ways to implement the techniques. However, it is also apparent that the techniques described in this document may be practiced in different configurations without the specific details. In addition, well-known features may be omitted or simplified to avoid obscuring the techniques described.
[0146] The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention as set forth in the claims.
[0147] Other variations are within the spirit of the present disclosure. Thus, while the disclosed technology is susceptible to various modifications and alternative constructions, certain illustrated embodiments thereof are shown in the accompanying drawings and have been described in detail above. However, it should be understood that it is not intended to limit the invention to the specific form or forms disclosed, but rather, the invention is intended to cover all modifications, alternative constructions, and equivalents that fall within the spirit and scope of the invention, as defined in the appended claims.
[0148] Unless otherwise specified herein or explicitly contradicted by context, the use of the terms "one" and "a kind of" and "said" and similar referents in the context of describing the disclosed embodiments (particularly in the context of the appended claims) should be interpreted as covering both the singular and the plural. Unless otherwise specified, the terms "include", "have", "include" and "contain" will be interpreted as open terms (i.e., meaning "including but not limited to"), unless otherwise specified. In the case of unmodified and physical connection, the term "connection" should be interpreted as partially or completely included, attached to or joined together, even if there is some intervention. Unless otherwise specified herein, the enumeration of the range of values herein is intended only to be used as a shorthand method for individually referring to each individual value falling within the range, and each individual value is incorporated into this specification as if individually listed herein. Unless otherwise specified or contradicted by context, the use of the term "set" (e.g., "a set of items") or "subset" should be interpreted as a non-empty set including one or more members. Furthermore, unless otherwise indicated or contradicted by context, the term "subset" of a corresponding set does not necessarily mean a true subset of the corresponding set, but rather a subset and a corresponding set may be equal.
[0149] Unless specifically stated otherwise or otherwise clearly contradicted by context, conjunction language such as phrases of the form "at least one of A, B, and C" or "at least one of A, B, and C" can be understood in the context of general usage to mean that a certain item, term, etc. can be A or B or C, or any non-empty subset of the set of A and B and C. For example, in the illustrative example of a set with three members, the conjunction phrases "at least one of A, B, and C" and "at least one of A, B, and C" refer to any of the following sets: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Thus, such conjunction language is generally not intended to imply that certain embodiments require that at least one of A, at least one of B, and at least one of C each be present.
[0150] Unless otherwise specified herein or explicitly contradictory to the context, the operation of the process described herein can be performed in any suitable order. The process described herein (or its variation and / or its combination) can be performed under the control of one or more computer systems configured with executable instructions, and can be implemented as a code (e.g., executable instructions, one or more computer programs, or one or more applications) executed jointly on one or more processors by hardware or its combination. The code can be stored on a computer-readable storage medium, such as in the form of a computer program including multiple instructions that can be executed by one or more processors. The computer-readable storage medium can be non-transitory. In addition, in some instances, the computer system is configured to implement one or more services that jointly perform the operation of the process described herein. Such a computer system can, for example, be configured with applicable hardware and / or software that can perform operations. In addition, the computer system implementing various embodiments of the present disclosure can be a single device in some instances, and in other instances, it is a distributed computer system including multiple devices that operate differently, so that the distributed computer system performs the operations described herein.
[0151] Unless otherwise specified, the use of any and all examples or exemplary language (e.g., "such as") provided herein is intended only to better illustrate the embodiments of the present invention and is not intended to limit the scope of the present invention. No language in this specification should be construed as indicating that any non-claimed element is essential to the practice of the present invention.
[0152] Embodiments of the present disclosure are described herein, including the best mode known to the inventor for implementing the present invention. After reading the foregoing description, the changes of these embodiments may become apparent to those of ordinary skill in the art. The inventor expects that such changes will be appropriately used by those skilled in the art, and the inventor intends to practice the embodiments of the present disclosure in a manner different from the specific description herein. Therefore, the scope of the present disclosure includes all modifications and equivalents to the subject matter recited in the attached claims as allowed by applicable law. In addition, unless otherwise stated herein or otherwise explicitly contradicted with the context, the scope of the present disclosure covers any combination of the above-mentioned elements in all possible changes thereof.
[0153] All references, including publications, patent applications, and patents, cited 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 were set forth in its entirety herein.
Claims
1. A computer-implemented method for provisioning computing resources, comprising: Under the control of one or more computer systems configured with executable instructions, Identify the set of applications associated with a user identity; obtaining a set of application profiles by retrieving an application profile for each application in the set of applications, the application profile for each application indicating a set of computing resource requirements for executing each respective application; generating a virtual machine profile based at least in part on combining computing resource requirements described by the set of application profiles, wherein combining the resource requirements comprises summing the computing resource requirements of the set of applications when the set of applications are expected to be run concurrently or comprises identifying a maximum resource requirement of the set of applications when the set of applications are expected to be run sequentially; creating a virtual machine having a configuration of computing resources satisfying the virtual machine profile; installing the set of applications on the virtual machine; launching at least one application from the set of applications; as well as A streaming connection is caused to be established between the virtual machine and a client computer system, the streaming connection transmitting the 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 set of virtual machine profile templates based at least in part on the virtual machine profile, wherein: The set of virtual machine profile templates are associated with virtual machine configurations that are supportable by a computing resource service provider; and The virtual machine is configured according to the profile template.
3. The computer-implemented method of claim 1 , wherein identifying the set of applications associated with the user identity is accomplished at least in part by: retrieving application usage information from said client computer system; identifying a specific application that has been running on the client computer system using the user identity; and The specific application is added to the set of applications.
4. The computer-implemented method of claim 1 , further comprising: identifying a second set of applications that can run concurrently; generating a combined resource profile for the second set of applications; as well as The virtual machine profile is altered based at least in part on the combined resource profile.
5. A system for provisioning computing resources, the system comprising at least one computing device implementing one or more services, wherein the one or more services: identifying a set of applications associated with a user identity; obtaining a set of application profiles for each application in the set of applications, the application profile for each application indicating a set of computing resource requirements for executing each respective application; generating a virtual machine profile based at least in part on a combination of computing resource requirements, wherein the combination comprises summing the computing resource requirements of the set of applications when the set of applications are expected to be run concurrently or comprises identifying a maximum resource requirement of the set of applications when the set of applications are expected to be run sequentially; assigning to a virtual machine a configuration based at least in part on the virtual machine profile; installing the set of applications on the virtual machine; executing at least one application from the set of applications on the virtual machine; as well as A connection is established between the virtual machine and a client computer system, the connection transmitting display information associated with at least one application in the set of applications to the client computer system.
6. The system of claim 5, wherein: The display information is encoded at a resolution and frame rate appropriate for the amount of network bandwidth available to the client computer system; and The display information includes audio information encoded based at least in part on characteristics of an audio playback facility associated with the client computer system.
7. The system of claim 5, wherein the display information is encoded with a resolution and frame rate appropriate for at least one application in the set of applications.
8. The system of claim 5, wherein the one or more services allocate the virtual machine by selecting the virtual machine at least in part from a pool of available virtual machines running on a host computer system.
9. The system of claim 5, wherein the one or more services further: receiving an additional request to provide an additional application to the client computer system; determining an additional virtual machine profile based at least in part on resource requirements associated with the additional application; allocating an additional virtual machine based at least in part on the additional virtual machine profile; executing the additional application on the additional virtual machine; as well as An additional connection is established between the additional virtual machine and the client computer system, the additional connection transmitting display information associated with the additional application to the client computer system.
10. The system of claim 5, wherein the one or more services further: receiving a request to provide at least one application from the set of applications to an additional client computer system; generating an additional application session for at least one application in the set of applications running on the virtual machine; and An additional connection is established between the additional application session on the virtual machine and the client computer system, the additional connection transmitting display information associated with the additional application session to the client computer system.
11. The system of claim 10, wherein the display information associated with the additional application session is provided at least in part from the display information associated with the application session.
12. The system of claim 5, wherein the one or more services further: receiving viewport information identifying a portion of the display information that is not visible on the client computer system; and The portion of the display information is excluded from transmission of the display information to the client computer system.
