LazySpread
Definition
Signature
lazySpread(s : set<VM>)
s
: a set of at least 2 VMs for a meaningful constraint. VMs not in theRunning
state are ignored.
The lazySpread
constraint forces all the running VMs in s
to be hosted on distinct servers at the end of a reconfiguration process.
Classification
- Primary users: application administrator
- Manipulated elements: VM placement
- Concerns: VM-to-VM placement, Fault tolerance, Partitioning
Usage
The lazySpread
constraint may be used by an application administrator to provide to a replicated service, fault tolerance to hardware failures. By hosting each replicas on a distinct server, the service will be
available while at least one server is still online. To achieve this purpose, one lazySpread
constraint can
be used with the replicas provided as arguments.
Example
Figure 12 depicts a sample reconfiguration between a source and a destination
configuration. In this example, the following lazySpread
constraints were considered:
N1: VM1 VM2
N2: VM4
N3: VM3

N1: VM1
N2: (VM4) VM3
N3: VM2
Figure 12: A reconfiguration motivated by lazySpread
constraints.
lazySpread({VM1, VM3, VM4})
. This constraint was satisfied in the source configuration as each VM were running on distinct servers. The constraint is still satisfied in the destination configuration despiteVM3
andVM4
are colocated asVM4
has been suspended.lazySpread({VM1,VM2})
. This constraint was not satisfied in the source configuration as both VMs where running onN1
. The relocation ofVM2
toN3
fixed this violation.lazySpread({VM2, VM3})
. This constraint was satisfied in the source configuration as both VMs were running on distinct servers. The constraint is still satisfied in the destination configuration despite the relocation ofVM2
toN3
that was runningVM3
initially asVM3
has been relocated elsewhere to let both VMs be running on distinct servers at the end of the reconfiguration process.
See also
Related Constraints
gather
: the opposite constraint ofspread
spread
: a constraint similar tolazySpread
but which also guarantee that the VMs will never overlap on a same server, even during the reconfiguration process.
Reformulation(s)
Using
mostlySpread
:lazySpread(s)
↔mostlySpread(s,|s|)
Using
splitAmong
:lazySpread(s1)
↔splitAmong(s/|s|,N/|N|)
Using
split
:lazySpread(s)
↔split(s/|s|)