# An Intelligent Approach to Allocating Resources within an Agent-Based Cloud Computing Platform
## 1 Introduction  
Cloud computing (CC) has undergone rapid growth since users began to notice its great advantage over traditional IT systems. This is because this paradigm facilitates the development of distributed computing systems, data management and computing resources through a scalable network, data processing centers and web services [1]. Hence, this technology is leading the revolution of distributed computing and has resulted in the rapid growth of private and public platforms [2; 3; 4; 5]. There is no doubt that the general social acceptance of this paradigm [6] has largely contributed to its development, due to the economic interests of large technology companies that underline the purely technical aspects [7; 8]. The marketing model used in the CC paradigm is also innovative, as it is based on a pay-as-you-go concept [7] for utility services such as water, gas, etc. In the utility computing paradigm [9], users are required to first negotiate and establish a service level agreement (SLA) to have access to the goods [10]. Having established a contract for the computing-based goods, both users (who pay fees on a regular basis) and the CC system (through service maintenance) are obliged to comply with the agreement. This marketing model contractually requires CC platforms to maintain the quality of services (QoS) aspreviously agreed upon, which makes it necessary for the internal architecture to monitor and adapt to the demand dynamically. In this respect, the novelty is reflected in the range of innovative underlying technologies, such as web services and microservices, virtualization, dynamic resource allocation or service farms, among others, which have made it possible for services to be offered dynamically, regardless of existing user demand [11; 12; 13]. The resources of a CC environment are distributed among all of the services. Each service has specific characteristics and requirements; thus, computational resources are assigned dynamically to each service in accordance with the demand. In order to do so, these platforms use a system for the management (monitoring and control) of the underlying computational infrastructure and for the implementation of algorithms that allow for greater elasticity in the amount of resources dedicated to each service, depending on the instant demand. Therefore, if a specific service has, for example, established a specific set of SLAs with its end-users, the system must be able to satisfy the pre-established agreement regardless of existing demand. That is, it must be able to add new resources as demand increases and, likewise, to remove these resources when the demand decreases. In other words, the main objective of elastic algorithms is to allocate the appropriate amount of computational resources to a specific service according to the instantaneous demand of those services. At the technological level, a CC platform is mainly based on virtualization technology, which is a software layer that can abstractly visualize the underlying infrastructure as virtual computing nodes. The main advantage of virtualization is that the assignment of computational resources can be dynamically reconfigured, giving rise to an abstract or virtual view, which is homogeneous and can be easily controlled, unlike the real hardware environment [14]. Therefore, given that the services offered by a CC environment are distributed in different computational nodes, the assignment or withdrawal of resources is based on adding or eliminating computational nodes to/from a specific service. In any case, although the process of managing the infrastructure is simplified as a result of virtualization, the new generation of algorithms should not only provide an elastic model (increasing and decreasing) for allocating resources, but it should also reduce operational costs in the CC environment.