U.S. patent application number 13/566099 was filed with the patent office on 2014-02-06 for facilitating customer-initiated virtual machine migration and swapping.
This patent application is currently assigned to INTERNATIONAL BUSINESS MACHINES CORPORATION. The applicant listed for this patent is Salman A. Baset, Hai Huang, Kyung Hwa Kim, Chunqiang Tang. Invention is credited to Salman A. Baset, Hai Huang, Kyung Hwa Kim, Chunqiang Tang.
Application Number | 20140040889 13/566099 |
Document ID | / |
Family ID | 50026847 |
Filed Date | 2014-02-06 |
United States Patent
Application |
20140040889 |
Kind Code |
A1 |
Baset; Salman A. ; et
al. |
February 6, 2014 |
Facilitating Customer-Initiated Virtual Machine Migration and
Swapping
Abstract
Techniques for facilitating customer-initiated virtual machine
(VM) migration and swapping. A method includes obtaining
documentation of at least one performance parameter of two or more
virtual machines running on two or more physical machines,
obtaining a request for a virtual machine exchange from a user of a
first virtual machine, wherein the request comprises a preference
for at least one desired performance parameter in at least one
additional virtual machine, matching the request from the user of
the first virtual machine with at least one additional virtual
machine that includes the at least one desired performance
parameter without assistance from a cloud provider, and exchanging
the first virtual machine with a virtual machine from the at least
one additional virtual machine that includes the at least one
desired performance parameter.
Inventors: |
Baset; Salman A.; (New York,
NY) ; Huang; Hai; (White Plains, NY) ; Kim;
Kyung Hwa; (New York, NY) ; Tang; Chunqiang;
(Ossining, NY) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
Baset; Salman A.
Huang; Hai
Kim; Kyung Hwa
Tang; Chunqiang |
New York
White Plains
New York
Ossining |
NY
NY
NY
NY |
US
US
US
US |
|
|
Assignee: |
INTERNATIONAL BUSINESS MACHINES
CORPORATION
Armonk
NY
|
Family ID: |
50026847 |
Appl. No.: |
13/566099 |
Filed: |
August 3, 2012 |
Current U.S.
Class: |
718/1 |
Current CPC
Class: |
G06F 9/45558 20130101;
G06F 9/455 20130101; G06F 9/45533 20130101; G06F 2009/4557
20130101 |
Class at
Publication: |
718/1 |
International
Class: |
G06F 9/455 20060101
G06F009/455 |
Claims
1. A method for exchanging two or more virtual machines miming on
two or more physical machines, the method comprising: obtaining
documentation of at least one performance parameter of two or more
virtual machines running on two or more physical machines;
obtaining a request for a virtual machine exchange from a user of a
first virtual machine, wherein the request comprises a preference
for at least one desired performance parameter in at least one
additional virtual machine; matching the request from the user of
the first virtual machine with at least one additional virtual
machine that includes the at least one desired performance
parameter; and exchanging the first virtual machine with a virtual
machine from the at least one additional virtual machine that
includes the at least one desired performance parameter without
assistance from a cloud provider; wherein at least one of the steps
is carried out by a computer device.
2. The method of claim 1, comprising: obtaining a second request
for a virtual machine exchange from a user of a second virtual
machine, wherein the request comprises a preference for at least
one desired performance parameter in at least one additional
virtual machine.
3. The method of claim 2, comprising: matching the first request
from the user of the first virtual machine with the second request
from the user of the second virtual machine if: the first virtual
machine includes the at least one desired performance parameter
from the second request; and the second virtual machine includes
the at least one desired performance parameter from the first
request.
4. The method of claim 3, comprising: exchanging the first virtual
machine with the second virtual machine.
5. The method of claim 4, comprising: obtaining assent from the
first user and the second user for said exchanging.
6. The method of claim 1, wherein the at least one performance
parameter comprises central processing unit, memory, network,
storage, and/or number of hops between virtual machines.
7. The method of claim 1, wherein said exchanging comprises:
starting the first virtual machine and the virtual machine from the
at least one additional virtual machine in a stateless mode with
each corresponding boot disk being unmounted.
8. The method of claim 7, comprising: copying each used disk block
from the first virtual machine to a temporary storage.
9. The method of claim 8, comprising: copying the contents of the
virtual machine from the at least one additional virtual machine to
a storage component of the first virtual machine.
10. The method of claim 9, comprising: copying the contents of the
first virtual machine from the temporary storage to a disk of the
virtual machine from the at least one additional virtual
machine.
11. The method of claim 1, wherein said exchanging comprises using
a third party broker.
12. The method of claim 11, comprising: obtaining assent, via the
third party broker, from the user of the first virtual machine and
the user of the virtual machine from the at least one additional
virtual machine for said exchanging.
13. The method of claim 11, comprising: revoking, via the third
party broker, user access to the first virtual machine and the
virtual machine from the at least one additional virtual machine;
and shutting down, via the third party broker, the first virtual
machine and the virtual machine from the at least one additional
virtual machine.
14. The method of claim 13, comprising: attaching, via the third
party broker, a remote disk to each virtual machine; setting, via
the third party broker, the remote disks as boot; and unmounting,
via the third party broker, each virtual machine disk.
15. The method of claim 14, comprising: restarting, via the third
party broker, each virtual machine; and swapping, via the third
party broker, the virtual machine disks using an intermediary
storage controlled by broker.
16. The method of claim 15, comprising: removing, via the third
party broker, the remote disks; and restoring, via the third party
broker, newly copied disks on the virtual machine disks and
rebooting the virtual machines.
17. The method of claim 1, comprising: verifying the documentation
of the at least one performance parameter of the two or more
virtual machines.
18. The method of claim 17, wherein said verifying comprises
running at least one micro-benchmark of each virtual machine for
comparison with the documentation.
19. The method of claim 1 comprising: exchanging ownership of the
first virtual machine and the virtual machine from the at least one
additional virtual machine in connection with exchanging the first
virtual machine with the virtual machine from the at least one
additional virtual machine.
Description
FIELD OF THE INVENTION
[0001] Embodiments of the invention generally relate to information
technology, and, more particularly, to virtual machine migration
and provisioning.
BACKGROUND
[0002] In Infrastructure-as-a-Service (IaaS) cloud service model,
users can obtain on-demand resources by rapid provisioning of
virtual machines (VMs). VMs of one user are typically co-located
with VMs of another user on a physical host, especially in a public
cloud. Each identically configured VM is expected to receive
similar performance for central processing unit (CPU), memory, disk
input/output (I/O), and network bandwidth regardless of its
location in the cloud (that is, the physical machine on which the
VM is placed). However, such services do not necessarily provide
performance guarantees.
[0003] In practice, the performance of a VM depends on the
underlying hardware, how the hardware is configured, and the amount
of shared resources consumed by its co-located virtual machines. As
workloads have different resource requirements, it is possible that
an insufficient host for one VM can be sufficient for another VM,
and swapping the locations of the two VMs may even improve the
performance (or other metrics) of both VMs. However, in existing
approaches, cloud providers do not offer a VM swapping service.
SUMMARY
[0004] In one aspect of the present invention, techniques for
facilitating customer-initiated virtual machine (VM) migration and
swapping are provided. An exemplary computer-implemented method for
exchanging two or more virtual machines can include steps of
obtaining documentation of at least one performance parameter of
two or more virtual machines running on two or more physical
machines, obtaining a request for a virtual machine exchange from a
user of a first virtual machine, wherein the request comprises a
preference for at least one desired performance parameter in at
least one additional virtual machine, matching the request from the
user of the first virtual machine with at least one additional
virtual machine that includes the at least one desired performance
parameter without assistance from a cloud provider, and exchanging
the first virtual machine with a virtual machine from the at least
one additional virtual machine that includes the at least one
desired performance parameter.
[0005] Another aspect of the invention or elements thereof can be
implemented in the form of an article of manufacture tangibly
embodying computer readable instructions which, when implemented,
cause a computer to carry out a plurality of method steps, as
described herein. Furthermore, another aspect of the invention or
elements thereof can be implemented in the form of an apparatus
including a memory and at least one processor that is coupled to
the memory and operative to perform noted method steps. Yet
further, another aspect of the invention or elements thereof can be
implemented in the form of means for carrying out the method steps
described herein, or elements thereof; the means can include (i)
hardware module(s), (ii) software module(s), or (iii) a combination
of hardware and software modules; any of (i)-(iii) implement the
specific techniques set forth herein, and the software modules are
stored in a tangible computer-readable storage medium (or multiple
such media).
[0006] These and other objects, features and advantages of the
present invention will become apparent from the following detailed
description of illustrative embodiments thereof, which is to be
read in connection with the accompanying drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
[0007] FIG. 1 is a diagram illustrating techniques for swapping two
virtual machines, according to an embodiment of the present
invention;
[0008] FIG. 2 is a diagram illustrating example system
architecture, according to an embodiment of the present
invention;
[0009] FIG. 3 is a flow diagram illustrating techniques for
exchanging two or more virtual machines, according to an embodiment
of the invention; and
[0010] FIG. 4 is a system diagram of an exemplary computer system
on which at least one embodiment of the invention can be
implemented.
DETAILED DESCRIPTION
[0011] As described herein, an aspect of the present invention
includes swapping virtual machines without cloud provider
assistance. At least one embodiment of the invention includes a
cloud provider-agnostic method in which a customer or different
customers running two or more virtual machines (VMs) in a cloud
environment can agree to swap the VMs based on an assessment of
whether the new location(s) better serves the needs of workloads
running in those virtual machines.
[0012] Accordingly, the techniques detailed herein leverage
performance differences among identically or near-identically
provisioned VMs that may be hosted within the same cloud provider
or different cloud providers in a provider agnostic manner. As
noted, because applications running in VMs are different, their
respective needs are not identical and can also vary with time. For
example, some VM workloads may be CPU-intensive while others may be
more network or disk intensive. The difference in resource
requirements of VMs due to varying workloads imply that, at any
moment in time, an insufficient physical host for one VM may in
fact be a sufficient physical host for another VM. Consequently,
the performance (or any metric) of both VMs can be improved by
swapping the physical hosts of two VMs.
[0013] Accordingly, as described herein, at least one embodiment of
the invention includes distributed agents that run on VMs
interested in leveraging performance differences, as well as a
centralized broker. The VM agents utilize the centralized broker to
discover other VM agents and communicate with the other VM agents
to determine the existence of performance differences by running
micro-benchmarks. Additionally, the broker facilitates performance
of a swap of physical hosts without any cloud provider assistance.
In at least one embodiment of the invention, the broker is run by a
party that users of both VMs trust.
[0014] As described in accordance with embodiments of the
invention, there are multiple ways of moving virtual machines
across physical hosts. One technique is provider-assisted
migration. Such an approach includes live or offline migration of
VMs with the assistance of a cloud provider(s). However, this
mechanism may not be preferred because it requires exposing the
underlying physical infrastructure and a (partial) hypervisor-level
control to the customer, which may not be desirable from the cloud
provider's perspective.
[0015] Another technique for moving virtual machines across
physical hosts includes provisioning a large number of virtual
machines, measuring their performance, selecting the most desirable
performing ones and decommissioning the rest (that is, those that
are not selected). However, this approach also may not be preferred
for one of multiple reasons. For example, the result is largely
dependent on where new virtual machines are provisioned (for
example, the lack of randomness in a placement algorithm can yield
poor result). Also, the cost of provisioning a large number of
virtual machines can be prohibitive, and in a highly utilized
environment, location of the newly provisioned virtual machines can
be constrained. Additionally, the performance of VMs varies as
workloads running in co-located VMs may change.
[0016] FIG. 1 is a diagram illustrating techniques for swapping two
virtual machines, according to an embodiment of the present
invention. As depicted in FIG. 1, another technique for moving
virtual machines across physical hosts includes swapping the
locations between two consenting virtual machines after incentives
have been negotiated and accepted by both VMs.
[0017] Similar to migration, swapping two virtual machines can be
carried out if hypervisor-level control is acquired, and "live
swapping" is not difficult to emulate. Without a provider's
assistance, however, it is also possible to swap two virtual
machines in a secure manner, as detailed in accordance with at
least one embodiment of the invention. As depicted in FIG. 1,
swapping two virtual machines, VM1 (102) and VM2 (106), essentially
includes swapping the respective persistent storage of each VM.
That is, when VM1 boots from a disk partition that contains VM2's
data and vice versa, VM1 and VM2, for all practical purposes, have
exchanged locations. Swapping two disk images, VD1 (108) and VD2
(110), can be done through a temporary storage 104. Swapping two
virtual machines via a shared storage 104 includes the following
steps.
[0018] Initially, VM1 (102) and VM2 (106) are re-booted to a
stateless mode. Data is read from virtual disk 1 (108), and VD1
(108) content is written to the shared storage 104. Data is read
from virtual disk 2 (106), VD2 110 content is sent from VM2 106 to
VM1 102, and VD2 110 content is written to VM1's 102 persistent
storage. Further, VD1 108 content is read from the shared storage
104 and written to VM2's 106 persistent storage.
[0019] To maintain disk image fidelity, file system level copy may
not be sufficient. It may be necessary to perform block-level copy
to preserve disk meta-data and data layout. Additionally, before a
disk partition can be copied, the disk needs to be in a quiescent
state (that is, not mounted). Accordingly, at least one embodiment
of the invention includes rebooting the disk's virtual machine in a
stateless mode from a random access memory (RAM) disk (initrd). An
agent within the RAM disk can copy the content from the un-mounted
disk partition to the designated shared storage area (104) via an
internet protocol (IP) network or a storage area network (SAN).
[0020] When the two virtual machines restart, the respective
original workload of each will now run in new locations. The VMs
running in the new location use the IP addresses of the VMs that
were previously running in that location; otherwise, network
connectivity will no longer work. Further, the ownership of the
swapped VMs is transferred using a broker so that users cannot
inadvertently access each other's VMs.
[0021] FIG. 2 is a diagram illustrating example system
architecture, according to an embodiment of the present invention.
As detailed herein, embodiments of the invention include providing
a framework that enables VMs to exchange performance information.
Such framework includes customer VMs (such as VM 202 and VM 204)
and a broker 206 service, wherein the broker 206 is a central
server trusted by VMs that maintains the list of all agents
participating in the exchange network.
[0022] In order to participate in the VM swapping to improve
performance, an agent running on a VM (such as agent 212 running on
VM 210 on physical machine 208, or agent 218 running on VM 216 on
physical machine 214) registers itself with the broker 206, and
stores its network address, instance specification (that is,
provisioned CPU), memory, disk, network, and usage of above
resources (for example, CPU utilization, disk throughput). The
broker 206 stores this information in an internal database and
provides access to the database when agents query for matching VMs
(based on desired performance parameters).
[0023] By way of example, consider a VM that is experiencing
sufficient CPU performance but mediocre disk and network
performance. The VM agent (such as agent 212 or 218) queries the
broker 206 for other VMs with sufficient disk and network
performance and advertises itself (that is, its VM) as having
sufficient CPU performance. The broker 206 finds a list of suitable
candidate VMs and returns related information to the querying VM.
The broker 206 can return the complete set of VMs matching the
query if it is not too large, or the broker 206 can also return a
subset based on suitable criteria (for example, fairness, load
distribution).
[0024] Additionally, the information pertaining to VM performance
can potentially become stale because the performance of each VM
changes over time. Second, an application running on a VM may have
a specific performance requirement which can only be determined by
running an application specific micro-benchmark. Therefore, at
least one embodiment of the invention including running an
application-specific micro-benchmark to more precisely gauge
performance of the VM.
[0025] The user of the probing VM (such as VM 202 or VM 204)
defines a set of micro-benchmarks to gauge performance of other VMs
in order to determine their suitability for a potential swap. The
micro-benchmarks can measure multiple properties such as, for
example, CPU, memory, network latency (round trip time (RTT)
between two VMs), or network bandwidth. To evaluate the CPU
performance, an agent measures the elapsed time required to execute
a pre-defined function that contains a cpu-intensive calculation.
Similarly, an agent can run micro-benchmarks to gauge the disk and
network throughput.
[0026] The probing agent requests the agents running on VMs being
probed to run these micro-benchmarks, and additionally passes the
relevant executable of the benchmark because for instance, the
agent does not trust the user-supplied micro benchmarks. To protect
against malicious code, the micro-benchmarks can be run in a
sandbox. Examples of such sandboxes include Linux containers or a
Java-like virtual machine (JVM). Alternatively, the applications
can submit their micro-benchmarks to the broker. Additionally, the
VMs will run the benchmarks that have been cryptographically signed
by the broker. After running the micro-benchmarks, the probed
agents return the result to the probing agent.
[0027] Once the probing agent finds a list of suitable VMs, the
agent sends a swap request to the VMs on the list. The agents
running on VMs being probed must also ascertain the performance of
a probing agent by requesting the agent to run micro-benchmarks
specific to their applications. The agreeing agents can then
document the agreement and initiate the swap process, as described
herein.
[0028] Additionally, at least one embodiment of the invention
includes verifying the results of the micro-benchmark process. By
way of example, instead of rebooting a VM from any RAM disk, a VM
can be rebooted from a remote disk that is under the control of the
broker. In this way, a broker can prohibit users from accessing
their VMs temporarily, and the broker can execute the benchmarks
and verify the results reported by the agents. Accordingly, because
users cannot manipulate the remote disk under broker control, the
benchmark results are trustworthy.
[0029] As detailed herein, a broker represents a trusted service,
and to ensure authenticity of a transaction, various agents are
dispatched onto VMs that are to be potentially swapped. Agents are
programs or scripts that are secure and have low-overhead.
Additionally, the price of a VM location can vary from time to time
and is driven by supply and demand, but it is also a function of
the standard rate that cloud providers set. By way of illustration,
consider the following example scenario of VM bidding.
[0030] A customer who is willing to swap his VM location registers
with the broker and sets a desired price. Another customer who
wants to find a better or more sufficient location for his/her VMs
can query the broker with a set of desired features. If there is a
match and price of the discovered match is below the buyer's
budget, a swapping request is sent to the broker to initiate the
swapping operation and related financial transactions. Also,
because it is possible that there are multiple buyers, a simple
bidding system can facilitate the process.
[0031] In a cloud, a VM is owned by the user who initially creates
the VM. As detailed herein, at least one embodiment of the
invention includes swapping the contents of two (or more) VMs, but
without changing the ownership of the VMs perceived by the cloud
management system. This, without additional corresponding action,
can potentially cause several issues. For example, the usage of a
VM would be incorrectly billed to its original user rather than its
current user. Also, even if the original user cannot log into the
VM, he or she still has control over the VM by using the cloud's
management tool (for example, to take a snapshot of the VM's disk
image and gain access to its data, which becomes a security
breach).
[0032] Accordingly, in at least one embodiment of the invention,
after two (or more) VMs are swapped, the ownership of the VM is
transferred to its new user so that the previous/original user no
longer has control over the VM. This can be achieved in multiple
ways. For example, the cloud service provider may provide a public
service to transfer the ownership of a VM from one user to another
user. Alternatively, this capability may be offered by a third
party (broker) that provides value-add services on top of one or
more public clouds. The third party can offer its own layer of VM
ownership management and allow VM ownership transfer between its
customers.
[0033] FIG. 3 is a flow diagram illustrating techniques for
exchanging two or more virtual machines running on two or more
physical machines, according to an embodiment of the invention.
Step 302 includes obtaining documentation of at least one
performance parameter of two or more virtual machines running on
two or more physical machines.
[0034] Step 304 includes obtaining a request for a virtual machine
exchange from a user of a first virtual machine, wherein the
request comprises a preference for at least one desired performance
parameter in at least one additional virtual machine. The
performance parameter can include, for example, central processing
unit, memory, network, storage, and/or number of hops between
virtual machines.
[0035] Step 306 includes matching the request from the user of the
first virtual machine with at least one additional virtual machine
that includes the at least one desired performance parameter
without assistance from a cloud provider.
[0036] Step 308 includes exchanging the first virtual machine with
a virtual machine from the at least one additional virtual machine
that includes the at least one desired performance parameter.
Exchanging can include starting the first virtual machine and the
virtual machine from the at least one additional virtual machine in
a stateless mode with each corresponding boot disk being unmounted,
and copying each used disk block from the first virtual machine to
a temporary storage. Exchanging can additionally include copying
the contents of the virtual machine from the at least one
additional virtual machine to a storage component of the first
virtual machine, and copying the contents of the first virtual
machine from the temporary storage to a disk of the virtual machine
from the at least one additional virtual machine.
[0037] The techniques depicted in FIG. 3 can additionally include
obtaining a second request for a virtual machine exchange from a
user of a second virtual machine, wherein the request includes a
preference for at least one desired performance parameter in at
least one additional virtual machine. Additionally, at least one
embodiment of the invention includes matching the first request
from the user of the first virtual machine with the second request
from the user of the second virtual machine if the first virtual
machine includes the at least one desired performance parameter
from the second request and the second virtual machine includes the
at least one desired performance parameter from the first request.
Accordingly, exchanging the first virtual machine is then exchanged
with the second virtual machine subsequent to obtaining assent from
the first user and the second user for the exchange.
[0038] As detailed herein, in at least one embodiment of the
invention, the exchanging step includes using a third party broker.
By way of example, the broker obtains assent from the user of the
first virtual machine and the user of the virtual machine from the
at least one additional virtual machine for said exchanging.
Further, the broker revokes user access to the first virtual
machine and the virtual machine from the at least one additional
virtual machine, and shuts down the first virtual machine and the
virtual machine from the at least one additional virtual machine.
Additionally, in at least one embodiment of the invention, the
broker attaches a remote disk to each virtual machine, sets the
remote disks as boot, and unmounts each virtual machine disk. Also,
the broker can restart each virtual machine, swap the virtual
machine disks using an intermediary storage controlled by broker,
remove the remote disks, and restore the newly copied disks on the
virtual machine disks and rebooting the virtual machines.
[0039] The techniques depicted in FIG. 3 can additionally include
verifying the documentation of the at least one performance
parameter of the two or more virtual machines by running at least
one micro-benchmark of each virtual machine for comparison with the
documentation. Further, at least one embodiment of the invention
includes exchanging ownership of the first virtual machine and the
virtual machine from the at least one additional virtual machine in
connection with exchanging the first virtual machine with the
virtual machine from the at least one additional virtual
machine.
[0040] The techniques depicted in FIG. 3 can also, as described
herein, include providing a system, wherein the system includes
distinct software modules, each of the distinct software modules
being embodied on a tangible computer-readable recordable storage
medium. All of the modules (or any subset thereof) can be on the
same medium, or each can be on a different medium, for example. The
modules can include any or all of the components shown in the
figures and/or described herein. In an aspect of the invention, the
modules can run, for example, on a hardware processor. The method
steps can then be carried out using the distinct software modules
of the system, as described above, executing on a hardware
processor. Further, a computer program product can include a
tangible computer-readable recordable storage medium with code
adapted to be executed to carry out at least one method step
described herein, including the provision of the system with the
distinct software modules.
[0041] Additionally, the techniques depicted in FIG. 3 can be
implemented via a computer program product that can include
computer useable program code that is stored in a computer readable
storage medium in a data processing system, and wherein the
computer useable program code was downloaded over a network from a
remote data processing system. Also, in an aspect of the invention,
the computer program product can include computer useable program
code that is stored in a computer readable storage medium in a
server data processing system, and wherein the computer useable
program code is downloaded over a network to a remote data
processing system for use in a computer readable storage medium
with the remote system.
[0042] As will be appreciated by one skilled in the art, aspects of
the present invention may be embodied as a system, method or
computer program product. Accordingly, aspects of the present
invention may take the form of an entirely hardware embodiment, an
entirely software embodiment (including firmware, resident
software, micro-code, etc.) or an embodiment combining software and
hardware aspects that may all generally be referred to herein as a
"circuit," "module" or "system." Furthermore, aspects of the
present invention may take the form of a computer program product
embodied in a computer readable medium having computer readable
program code embodied thereon.
[0043] An aspect of the invention or elements thereof can be
implemented in the form of an apparatus including a memory and at
least one processor that is coupled to the memory and operative to
perform exemplary method steps.
[0044] Additionally, an aspect of the present invention can make
use of software running on a general purpose computer or
workstation. With reference to FIG. 4, such an implementation might
employ, for example, a processor 402, a memory 404, and an
input/output interface formed, for example, by a display 406 and a
keyboard 408. The term "processor" as used herein is intended to
include any processing device, such as, for example, one that
includes a CPU (central processing unit) and/or other forms of
processing circuitry. Further, the term "processor" may refer to
more than one individual processor. The term "memory" is intended
to include memory associated with a processor or CPU, such as, for
example, RAM (random access memory), ROM (read only memory), a
fixed memory device (for example, hard drive), a removable memory
device (for example, diskette), a flash memory and the like. In
addition, the phrase "input/output interface" as used herein, is
intended to include, for example, a mechanism for inputting data to
the processing unit (for example, mouse), and a mechanism for
providing results associated with the processing unit (for example,
printer). The processor 402, memory 404, and input/output interface
such as display 406 and keyboard 408 can be interconnected, for
example, via bus 410 as part of a data processing unit 412.
Suitable interconnections, for example via bus 410, can also be
provided to a network interface 414, such as a network card, which
can be provided to interface with a computer network, and to a
media interface 416, such as a diskette or CD-ROM drive, which can
be provided to interface with media 418.
[0045] Accordingly, computer software including instructions or
code for performing the methodologies of the invention, as
described herein, may be stored in associated memory devices (for
example, ROM, fixed or removable memory) and, when ready to be
utilized, loaded in part or in whole (for example, into RAM) and
implemented by a CPU. Such software could include, but is not
limited to, firmware, resident software, microcode, and the
like.
[0046] A data processing system suitable for storing and/or
executing program code will include at least one processor 402
coupled directly or indirectly to memory elements 404 through a
system bus 410. The memory elements can include local memory
employed during actual implementation of the program code, bulk
storage, and cache memories which provide temporary storage of at
least some program code in order to reduce the number of times code
must be retrieved from bulk storage during implementation.
[0047] Input/output or I/O devices (including but not limited to
keyboards 408, displays 406, pointing devices, and the like) can be
coupled to the system either directly (such as via bus 410) or
through intervening I/O controllers (omitted for clarity).
[0048] Network adapters such as network interface 414 may also be
coupled to the system to enable the data processing system to
become coupled to other data processing systems or remote printers
or storage devices through intervening private or public networks.
Modems, cable modem and Ethernet cards are just a few of the
currently available types of network adapters.
[0049] As used herein, including the claims, a "server" includes a
physical data processing system (for example, system 412 as shown
in FIG. 4) running a server program. It will be understood that
such a physical server may or may not include a display and
keyboard.
[0050] As noted, aspects of the present invention may take the form
of a computer program product embodied in a computer readable
medium having computer readable program code embodied thereon.
Also, any combination of computer readable media may be utilized.
The computer readable medium may be a computer readable signal
medium or a computer readable storage medium. A computer readable
storage medium may be, for example, but not limited to, an
electronic, magnetic, optical, electromagnetic, infrared, or
semiconductor system, apparatus, or device, or any suitable
combination of the foregoing. More specific examples (a
non-exhaustive list) of the computer readable storage medium would
include the following: an electrical connection having one or more
wires, a portable computer diskette, a hard disk, a random access
memory (RAM), a read-only memory (ROM), an erasable programmable
read-only memory (EPROM or Flash memory), an optical fiber, a
portable compact disc read-only memory (CD-ROM), an optical storage
device, a magnetic storage device, or any suitable combination of
the foregoing. In the context of this document, a computer readable
storage medium may be any tangible medium that can contain, or
store a program for use by or in connection with an instruction
execution system, apparatus, or device.
[0051] A computer readable signal medium may include a propagated
data signal with computer readable program code embodied therein,
for example, in baseband or as part of a carrier wave. Such a
propagated signal may take any of a variety of forms, including,
but not limited to, electro-magnetic, optical, or any suitable
combination thereof. A computer readable signal medium may be any
computer readable medium that is not a computer readable storage
medium and that can communicate, propagate, or transport a program
for use by or in connection with an instruction execution system,
apparatus, or device.
[0052] Program code embodied on a computer readable medium may be
transmitted using an appropriate medium, including but not limited
to wireless, wireline, optical fiber cable, RF, etc., or any
suitable combination of the foregoing.
[0053] Computer program code for carrying out operations for
aspects of the present invention may be written in any combination
of at least one programming language, including an object oriented
programming language such as Java, Smalltalk, C++ or the like and
conventional procedural programming languages, such as the "C"
programming language or similar programming languages. The program
code may execute entfrely on the user's computer, partly on the
user's computer, as a stand-alone software package, partly on the
user's computer and partly on a remote computer or entirely on the
remote computer or server. In the latter scenario, the remote
computer may be connected to the user's computer through any type
of network, including a local area network (LAN) or a wide area
network (WAN), or the connection may be made to an external
computer (for example, through the Internet using an Internet
Service Provider).
[0054] Aspects of the present invention are described herein with
reference to flowchart illustrations and/or block diagrams of
methods, apparatus (systems) and computer program products
according to embodiments of the invention. It will be understood
that each block of the flowchart illustrations and/or block
diagrams, and combinations of blocks in the flowchart illustrations
and/or block diagrams, can be implemented by computer program
instructions. These computer program instructions may be provided
to a processor of a general purpose computer, special purpose
computer, or other programmable data processing apparatus to
produce a machine, such that the instructions, which execute via
the processor of the computer or other programmable data processing
apparatus, create means for implementing the functions/acts
specified in the flowchart and/or block diagram block or
blocks.
[0055] These computer program instructions may also be stored in a
computer readable medium that can direct a computer, other
programmable data processing apparatus, or other devices to
function in a particular manner, such that the instructions stored
in the computer readable medium produce an article of manufacture
including instructions which implement the function/act specified
in the flowchart and/or block diagram block or blocks. Accordingly,
an aspect of the invention includes an article of manufacture
tangibly embodying computer readable instructions which, when
implemented, cause a computer to carry out a plurality of method
steps as described herein.
[0056] The computer program instructions may also be loaded onto a
computer, other programmable data processing apparatus, or other
devices to cause a series of operational steps to be performed on
the computer, other programmable apparatus or other devices to
produce a computer implemented process such that the instructions
which execute on the computer or other programmable apparatus
provide processes for implementing the functions/acts specified in
the flowchart and/or block diagram block or blocks.
[0057] The flowchart and block diagrams in the figures illustrate
the architecture, functionality, and operation of possible
implementations of systems, methods and computer program products
according to various embodiments of the present invention. In this
regard, each block in the flowchart or block diagrams may represent
a module, component, segment, or portion of code, which comprises
at least one executable instruction for implementing the specified
logical function(s). It should also be noted that, in some
alternative implementations, the functions noted in the block may
occur out of the order noted in the figures. For example, two
blocks shown in succession may, in fact, be executed substantially
concurrently, or the blocks may sometimes be executed in the
reverse order, depending upon the functionality involved. It will
also be noted that each block of the block diagrams and/or
flowchart illustration, and combinations of blocks in the block
diagrams and/or flowchart illustration, can be implemented by
special purpose hardware-based systems that perform the specified
functions or acts, or combinations of special purpose hardware and
computer instructions.
[0058] It should be noted that any of the methods described herein
can include an additional step of providing a system comprising
distinct software modules embodied on a computer readable storage
medium; the modules can include, for example, any or all of the
components detailed herein. The method steps can then be carried
out using the distinct software modules and/or sub-modules of the
system, as described above, executing on a hardware processor 402.
Further, a computer program product can include a computer-readable
storage medium with code adapted to be implemented to carry out at
least one method step described herein, including the provision of
the system with the distinct software modules.
[0059] In any case, it should be understood that the components
illustrated herein may be implemented in various forms of hardware,
software, or combinations thereof, for example, application
specific integrated circuit(s) (AS ICS), functional circuitry, an
appropriately programmed general purpose digital computer with
associated memory, and the like. Given the teachings of the
invention provided herein, one of ordinary skill in the related art
will be able to contemplate other implementations of the components
of the invention.
[0060] The terminology used herein is for the purpose of describing
particular embodiments only and is not intended to be limiting of
the invention. As used herein, the singular forms "a," "an" and
"the" are intended to include the plural forms as well, unless the
context clearly indicates otherwise. It will be further understood
that the terms "comprises" and/or "comprising," when used in this
specification, specify the presence of stated features, integers,
steps, operations, elements, and/or components, but do not preclude
the presence or addition of another feature, integer, step,
operation, element, component, and/or group thereof.
[0061] The corresponding structures, materials, acts, and
equivalents of all means or step plus function elements in the
claims below are intended to include any structure, material, or
act for performing the function in combination with other claimed
elements as specifically claimed.
[0062] At least one aspect of the present invention may provide a
beneficial effect such as, for example, migration with multiple
cloud environments and trusted third parties.
[0063] The descriptions of the various embodiments of the present
invention have been presented for purposes of illustration, but are
not intended to be exhaustive or limited to the embodiments
disclosed. Many modifications and variations will be apparent to
those of ordinary skill in the art without departing from the scope
and spirit of the described embodiments. The terminology used
herein was chosen to best explain the principles of the
embodiments, the practical application or technical improvement
over technologies found in the marketplace, or to enable others of
ordinary skill in the art to understand the embodiments disclosed
herein.
* * * * *