Self-adaptive containers : a novel framework for building scalable QoS-aware software with low programmer overhead

As the number of execution environments increases dramatically, ever-changing non-functional requirements often lead to the challenge of frequent code refactoring. Despite help of traditional software engineering techniques, adapting software to meet each execution environment and application contex...

Full description

Bibliographic Details
Main Author: Huang, Wei-Chih
Other Authors: Knottenbelt, William
Published: Imperial College London 2015
Subjects:
004
Online Access:https://ethos.bl.uk/OrderDetails.do?uin=uk.bl.ethos.749076
Description
Summary:As the number of execution environments increases dramatically, ever-changing non-functional requirements often lead to the challenge of frequent code refactoring. Despite help of traditional software engineering techniques, adapting software to meet each execution environment and application context remains a non-trivial endeavour. Manually reimplementing software possibly takes months or years of programmer effort and requires high levels of expertise. Furthermore, to build software for different execution environments often results in either a small code base which cannot guarantee Quality of Service or a large manually-optimised code base which is difficult to maintain. This thesis presents a novel self-adaptive container framework which can dynamically adjust its resource usage in an effort to meet resource constraints and scalability requirements. Each container instance is associated with programmer-specified Service Level Objectives with respect to performance, reliability, and primary memory use. To prevent ambiguity among multiple Service Level Objectives, each of them is specified in the format of standard Web Service Level Agreement. This framework features tighter functionality specification than that of standard container frameworks, which enables greater scope for efficiency optimisations, including the exploitation of probabilistic data structures, out-of-core storage, parallelism, and cloud storage. These techniques are utilised in a low-cost way through the integration of third-party libraries, which also enable our framework to provide a wider class of Service Level Objectives. In addition, to reduce the time of learning how to use the framework, its interfaces are designed to be close to those of standardised libraries. The framework has been implemented in C++ and utilised in two case studies centred on explicit state-space exploration adopting a breadth-first search algorithm, and route planning adopting a Dijkstra’s shortest path algorithm. In order to illustrate the framework's viability and capability, various Service Level Objectives are assigned. Furthermore, the implementation of our framework is utilised to explore approximately 240 million states in the first case study and to find the shortest path of a graph representing the USA road network, containing approximately 24 million nodes and 58 million arcs. The experimental results show that the framework is capable of dynamically adjusting its resource usage according to assigned Service Level Objectives and dealing with large-scale data. At the same time, the programmer overhead is kept low in terms of the degree to which code is modified.