Concurrency limits at the platform level
The most basic level of concurrency configuration is at the platform level:
—
{code:java}
abiquo.virtualfactory.openSession
abiquo.virtualfactory.device.openSession
abiquo.virtualfactory.backup.openSession
{code}
This limits the number of concurrent operations for the same connection (hypervisor IP or endpoint). So openSession= 2 means the platform can perform 2 concurrent operations on the same vCenter (for VMX_04 or CLUSTER plugins) or AWS region. So this means, you can have 2 connections to vCenter1 + 2 connections to vCenter2 + 2 connections to any of the public cloud regions.
VM concurrency
Abiquo only controls these concurrency constraints for VMs so the only operations affected are:
*
Table of Contents |
---|
Introduction to concurrent VM operations
Excerpt |
---|
The platform uses configuration properties to control the number of concurrent operations to:
The platform can control concurrency for:
You can define concurrency limits at the level of:
You can also allow concurrent operations to change the state of a VM (e.g. power on), while limiting concurrent configure operations. See the "openSession" properties at Abiquo configuration properties#virtualfactory |
List of VM operations for which the platform controls concurrency
The platform controls concurrency for VMs, which means the following operations that are managed through the provider/hypervisor, device, or backup manager.
- VM state changes (powerOn, powerOff, etc)
...
- Configure/Deconfigure/Reconfigure VM
...
- Register/Unregister/Update VM with Firewall Policy / Load Balancer / Nat
...
- Rule
...
- Perform Backup / Schedule Backup / Restore From Backup of a
...
Concurrency limits at the virtual datacenter level
In Abiquo 4.5+ you can limit concurrency for a virtual datacenter (instead of for a connection):
VirtualDatacenterId (or vpc provider identifier) can be found in this entities:
* VirtualMachineIdentifier (+ VirtualMachineIdentifierWithAddresses + VirtualMachineDefinition)
* Vpc
* Network
* PublicIp
* FirewallPolicy
* LoadBalancer
* VPN
* NatIp (ABICLOUDPREMIUM-11391)
Its also required to provide a way to configure a different value based on the plugin type. (eg: 2 concurrent operations for all the vcenter instances but 1 for vcloud).
By virtualdatacenter
—
Explained for compute plugins but also valid for '''device''' and '''backup'''.
{code:java}
abiquo.virtualfactory.openSession.byvdc=false
{code}
If true then the limit of concurrency (openSession) apply for each distinct virtualdatacenter.
Eg:
abiquo.virtualfactory.openSession.byvdc=true
abiquo.virtualfactory.openSession=1
No concurrency in the same virtual datacenter. All the operations to the same vdc will be executed one after another.
In the same PCR endpoint (ConnectionData) will be possible to execute multiple concurrent operations but only if affects different virtualdatacentrs.
Fast state changes
—
{code:java}
abiquo.virtualfactory.openSession.faststatechanges=true
{code}
If true, VirtualMachine state changes (powerOn/powerOff/shutdown/reset/pause/resume) escape the ''openSession'' limitation, those operations are always executed when requested without waiting for any ''available worker in the pool''.
Eg:
abiquo.virtualfactory.openSession.faststatechanges=true
abiquo.virtualfactory.openSession=1
Only one configure/deconfigure/reconfigure etc at a time but any state changes can occurs concurrently.
...
- VM
An example of the application of concurrency limits is when you are deploying a virtual appliance with multiple VMs.
The concurrency limits do not apply to non-VM entities related to virtual datacenters because the platform does not use the same pool for these, for example, the platform does not restrict the number of concurrent operations to create a private network.
Set default concurrency limits for the platform
The top level of concurrency configuration is the platform. These properties limit the number of concurrent operations for the same connection (hypervisor IP or endpoint), device, or backup manager.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.openSession
abiquo.virtualfactory.device.openSession
abiquo.virtualfactory.backup.openSession
|
For example, to allow two connections to each public cloud region and hypervisor, set openSession to 2.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.openSession=2
|
This means that if you have two vCenters and some public cloud regions, you can perform two concurrent operations on vCenter1, and two on vCenter2, and two on each of the public cloud regions.
Set concurrency limits for a type of hypervisor or public cloud provider, device, or backup manager
To limit concurrency for specific plugins, devices, or backup managers, set the specific properties for this purpose.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.{pluginTypeInLowerCase}.openSession |
...
abiquo.virtualfactory.{ |
...
backupManagerLowerCase}.backup.openSession |
...
abiquo.virtualfactory.{ |
...
deviceLowerCase}.device.openSession |
...
|
If you do not specify a value, then the default is ''abiquo.virtualfactory.openSession
\{byvdc,faststatechanges}
''.
Limitations
—
* the properties only apply to the virtualfactory (vm centric ops) so don't expect other operations with entities related to virtualdatacenter are also executed in the same pool (eg: create private network doesn't follow this concurrency limitations)
* byvdc requires a Vpc interface implementation
** compute plugin also implements Vpc. eg: PCR vcloud
** compute plugin + networking device. eg: vcenter + nsx device
* when usgin ''opensessions.byvdc'' the max number of concurrent connections to the same ConnectionData (provider endpoint or hypervisor ip) is not limited.
* when using ''faststatechanges'' the max number of concurrent operations coulb be <= opensessions x 2 for deploy operations (configure + powerOn) or unlimited if performing other state changes in vms.
* changing the behavior of the pool when using a provider also capable of device ops (public clouds with lb,fw, net or nat features), previously using 2 pools (opensessions + device.opensessions), now a plugin capable of executin device ops only use the opensessions pool.
* also removed many DEBUG DeadLeter from virtualfactory.log caused by Ok$Ok messages confirming operations in AMQP channels.
Use Cases
—
* no concurrency in a virtualdatacenter (by type)
{code:java}
Given
abiquo.properties:
* abiquo.virtualfactory.vcd.openSession=1
* abiquo.virtualfactory.vcd.openSession.byvdc=true
a vcloud public cloud region
2 virtualdatacenters (2 vapps in vcloud)
When
deploy a vapp with +1 vm in each vdc
Then
only one concurrent operation for each virtualdatacenter
concurrent operations can affect different virtualdatacenters
{code}
* no limitation if not specified by type
{code:java}
Given
abiquo.properties:
* abiquo.virtualfactory.vcd.openSession=1
* abiquo.virtualfactory.vcd.openSession.byvdc=true
an amazon public cloud region
2 virtualdatacenters
When
deploy a vapp with +1 vm in each vdc
Then
the default is applied (abiquo.virtualfactory.openSession=2 / abiquo.virtualfactory.openSession.byvdc=false)
only 2 concurrent operations independent of the virtualdatacenter
{code}
* change the default concurrency context
{code:java}
Given
abiquo.properties:
* the platform level property.
For example, to allow only one operation at any time on each AWS region.
Code Block |
---|
abiquo.virtualfactory.amazon.openSession=1 |
Control concurrency at the virtual datacenter level
Concurrency control at the VDC level means that the platform will apply the concurrency limits (for hypervisor/PCR endpoint, device, and backup manager) PER VDC.
The platform supports "byvdc" properties when you have either a public cloud region with native support for VDCs (e.g. AWS VPC, Azure Virtual Network, vCloud vApp) or a hypervisor with a network device, (e.g. vCenter + NSX device).
If you do not specify these properties, the default values are false, which means that the platform will apply the concurrency limits PER hypervisor/public cloud endpoint, device, or backup manager.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.openSession.byvdc=false
abiquo.virtualfactory.device.openSession.byvdc=false
abiquo.virtualfactory.backup.openSession.byvdc=false
|
To prevent compute concurrency in the same virtual datacenter, which means all the operations to the same VDC will be executed one after another, set the "byvdc" property to true and restrict the total number of sessions as the platform or provider/hypervisor level.
For example, with the the following properties, it will only be possible to execute multiple concurrent operations (for the same hypervisor/PCR endpoint (connection data)) if they affect different virtual datacenters.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.openSession.byvdc=true
abiquo.virtualfactory.openSession=1 |
When you use ''byvdc'' properties, the platform does not limit the maximum number of concurrent connections to the hypervisor/PCR endpoint, device, or backup manager.
For example, for the following configuration, in AWS you could have a total number of concurrent operations equal to the number of virtual datacenters x 2.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.openSession.byvdc=true |
...
* compute plugin without vpc device
{code:java}
Given
abiquo.properties:
* abiquo.virtualfactory.openSession.byvdc=true
a esx datacenter without any networking device (or using a device not implementing Vpc - nowadays all implements Vpc)
2 virtualdatacenters
When
deploy a vapp with +1 vm in each vdc
Then
vms doesnt have the sense of virtualdatacenter (any?=(no)? Vpc plugin capable of setting the vpc/vdcProviderId)
only 2 concurrent operations independent of the virtualdatacenter
this means the same result will apply with the same setup but using the default openSession.byvdc=false
{code}
* fast powerOn
{code:java}
Given
abiquo.properties:
* abiquo.virtualfactory.vmx_04.openSession=1
* abiquo.virtualfactory.vmx_04.openSession.faststatechanges=true
a esx-vcenter private datacenter (with or without device)
2 virtualdatacenters
When
deploy a vapp with +1 vm in each vdc
Then
only one configure operation concurrently, but all powerOn after the configure of the vm (regardless if performing other powerOns or other vm configure)
{code}
...
abiquo.virtualfactory.amazon.openSession=2 |
In contrast, if the "byvdc" properties are false (or not present) the platform will only allow two concurrent operations for each hypervisor/provider endpoint, device, or backup manager.
Allow fast VM state changes
When you use the fast state changes functionality, the platform will always execute VM state changes when you request them, without waiting for any concurrent operations to finish.
The VM state change operations are as follows:
- powerOn
- powerOff
- shutdown
- reset
- pause
- resume
To always allow VM state changes without considering the ''openSession'' limitation, set the fast state changes property to true, as shown here.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.openSession.faststatechanges=true
|
For example, with the following configuration, the platform will only allow one configure/deconfigure/reconfigure at a time, but several state changes can occur concurrently.
Code Block | ||||
---|---|---|---|---|
| ||||
abiquo.virtualfactory.openSession.faststatechanges=true
abiquo.virtualfactory.openSession=1
|