• No results found

Infrastructure as a Service (IaaS)

In document Contributions to Edge Computing (Page 101-104)

3.7 Plugin Implementations

4.1.2 Infrastructure as a Service (IaaS)

Infrastructure as a Service (IaaS) is a form of cloud computing that is focused on the management of computational, network, and storage infrastructure components. IaaS is most commonly used to automate the provisioning of virtual machines. IaaS resource management provides identity management, provisioning, monitoring, and resource utilization accounting. There exist a number of public IaaS providers in- cluding but not limited to Amazon Web Services [16], Google Cloud Platform [132], and Microsoft Azure [17], where underlying resources are owned and operated by the public cloud provider. In addition, there exist software such as OpenStack, that can be used to deploy private clouds, where the underlying cloud infrastructure is owned

and operated by the institution consuming the resources.

IaaS frameworks provide programatic interfaces to manage collections of resources across individual servers, server clusters, and collections of geographically distributed clusters. Collections of underlying infrastructure such as CPU, RAM, and Disk stor- age are assigned to virtual machine instances. As described in the previous section, virtual machines provisioned from IaaS providers function as isolated resources. Clus- ters of locally-distributed servers managed by IaaS frameworks are typically referred to as zones. Parameters such as resources sizing and zone identification are specified at time of instance creation. A kernel-level scheduler assigns time to system-level (CPU, RAM, IO, etc) resources on a single node to processes, in order to satisfy workload request. Similar to a kernel scheduling assigning time to infrastructure components, an IaaS scheduler provisions infrastructure resources from a number of potential nodes to form virtual machines. The IaaS scheduler attempts to balance resource assignments evenly between infrastructure components within availability zones. For example, if a IaaS cluster manages N infrastructure nodes with equal available resources and N resources are requested from those nodes, then a single resource will be provisioned from each node. Likewise, consider the case where ini- tially M resources were provisioned on node0 and M ∗ 2 resources were provisioned

on node1. If M additional resources are requested, the IaaS scheduler will assign

resources from node0. After this assignment M ∗ 2 resources are provisioned from

both node0 and node1, thus balancing allocations across resource nodes.

Many IaaS frameworks, such as OpenStack, lack the concept of inter-node resource scheduling. If resources for high-value workloads are provisioned on the same node with low-value allocations, the two will compete for resources without preference from the kernel-level scheduler. Similarly, instances that compete for specific resources, such as highly computational workloads are intentionally scheduled on separate nodes. The lack of inter-node scheduling in IaaS frameworks leads to workload performance variations across nodes. As we discussed in the previous section, it would be possible

to manage allocation preference on this level, but this is not typically the practice within IaaS frameworks.

Vertical resource scaling is the process of increasing the access to, or capacity of isolated resources, such as increasing a processes priority or increasing the quality of resources assigned to an individual virtual machine. In IaaS, vertical scaling can be accomplished for individual resources, to the extent of the maximum infrastructure resource available. Specifically, resource allocations can not exceed the physical size of individual components. Resources such as CPU and RAM are typically3 deployed

from resources in the same power domain (same node), while storage is often provided from a separate domain. For example, IaaS can not be used to provision a virtual machine in which the size of the virtual machine exceeds the capacity of the largest available physical machine4.

Horizontal resource scaling is the process of increasing the quality of process or isolated resources, such as the distribution of workload across multiple threads and processor cores or the provisioning on additional Cresco Agents and Plugins. Hori- zontal scaling in IaaS is accomplished by provisioning additional IaaS instances. For example, IaaS frameworks provide the ability to provision (clone) new virtual ma- chines from existing machines. Likewise, existing virtual machines can be suspended or deleted, resulting in a release of active resources. The process of dynamically scal- ing applications using this method is referred to as elastic computing[135]. A single node OpenStack deployment might only scale a few instances across a few CPU cores, where as large deployments like those maintained by CERN, might span thousands of instances over one hundred fifty thousand cores [136].

As described in Section 3.7.1, Infrastructure as a Service (IaaS) Plugin, we have implemented a plugin that provides the ability to interface with IaaS management frameworks for the propose of infrastructure provisioning. While IaaS does not allow

3This may change in the future with the advancement of so-called memory-centric computing

[133].

4Software exist [134] to overcome this problem, but it is not considered a typical feature of an

us to observe the underlying physical resources of instances, we can observe resource utilization and workload performance of Cresco-enabled instances. As described in Section 3.7.2, System Information Plugin, we have developed a plugin to report the operating state, inventory, resource utilization, and performance of isolated resources (physical devices, virtual machines, containers, etc).

In the next section we discuss the language used to describe and abstract Cresco applications from underlying resources, allowing for automated and semi-automated resource management.

In document Contributions to Edge Computing (Page 101-104)