New architectures and current technologies in software engineering enable the construction of systems with ever-increasing complexity. Distributed software systems today are most often composed of a number of building-blocks, operating in a networked environment and working together to achieve a variety of tasks. Software systems can cover several application domains, from smaller-scale dedicated or embedded systems (e.g. a security and video-surveillance system or a scientific simulator) to multi-user large-scale applications (e.g. web-based stores, or enterprize class data management systems). These systems are designed to be functionally correct according to some specification and at the same time to satisfy requirements related to the Quality of Service (QoS) they provide. This provided QoS depends on many parameters, such as properties of the network, the underlying execution hardware and system configuration. Mainly, two categories of properties can be considered: (i) capabilities, such as available bandwidth, processing power, storage and memory capacities, etc., and (ii) QoS requirements, such as volume of transactions, availability of hosts, amount of processing power, among others.
The topic of this thesis is how to decide where to allocate instances of software in a network of compute resources, under a variety of resource constraints and QoS requirements. The allocation of components in a distributed system, in other words its deployment mapping, can have a significant impact on the QoS provided by the system. Often, there are numerous deployment mappings that offer the same functionality, but nevertheless have very different QoS. In addition, some of the requirements the service has may be conflicting, so that improving the deployment with respect to one requirement might degrade the solution from another perspective. Hence, the problem of finding an optimal deployment mapping has many challenges and can be viewed from many angles. Obtaining a solution is further complicated when there is extensive dynamism and scale involved.
With the appearance of complex software systems the need for methods and algorithms that enable reconfiguration and adaptation has arisen. Self-adaptation has been an inherent property of several complex systems in nature that have been described theoretically and explored extensively. Thus, this thesis investigates how a bio-inspired method can be applied to the problem of obtaining deployment mappings for software services, and what are the benefits and tradeoffs of its application. The thesis presents a novel heuristic method for decentralized optimization aimed at finding near optimal mappings within reasonable time and for large scale.
Different incarnations of the deployment problem are explored throughout the papers included and several representative scenarios are investigated using simulations. For one of the scenario types means for obtaining global optimum solutions are provided and the results are used for cross-validating the simulations and to show that the heuristic algorithm presented in this thesis is able to provide effective means for solving deployment problems.
Furthermore, a formal approach is introduced to model services and deployment scenarios with different sets of requirements and optimization algorithms are given for the various scenarios. The approximative, computationally efficient, decentralized approach presented is believed to be adequate for on-line execution and can be tailored to given sets of requirements.