title: Improving elastic testing using container-based virtualization
Creators: name: Preißler, Thomas
Publisher: name: TU Wien
Year: 2016
Subjects: subject: Cloud Computing
subject: elastische Web-Anwendungen
subject: container-basierte Virtualisierung
subject: Docker
subject: Cloud Computing
subject: Elastic Web Applications
subject: container-based virtualisation
subject: Docker

description: Abhängig von veränderter Last skalieren elastische Web-Anwendungen automatisiert um die Anzahl der zur Verfügung stehenden Server anzupassen und so alle Anfragen bedienen zu können ohne stets eine große Anzahl an Servern vorhalten zu müssen. Solche Elastic Applications gewinnen aufgrund der günstigen und weit verbreiteten Clouds, wie sie von Amazon AWS, Microsoft Azure und anderen angeboten werden, zunehmend an Bedeutung. Eine Elastic Application enthält eine Algorithmus, die sogenannte Skalieriungsstrategie. Diese entscheidet über den Zeitpunkt der Skalierung und über notwendig gewordenen Ressourcen. Eingabeparameter wie die aktuelle Anzahl von parallelen Anfragen, Prozessorauslastung, Speicherauslastung und viele andere bilden eine Entscheidungsgrundlage. Cloud-Anbieter garantieren jedoch keine Ressourcen, diese können stark fluktuieren. Um sicherzustellen, dass ein solcher Skalierungsalgorithmus wie erwartet funktioniert, muss dieser getestet werden. Oftmals werden für Tests eines solchen Skalierungsalgorithmus echte Cloud-Instanzen herangezogen. Dieser Ansatz ist jedoch schwerfällig und sehr teuer. Eine echte Cloud zu nutzen kostet Geld und Zeit bis Testergebnisse zur Verfügung stehen. Darüber hinaus gibt es keine Steuerungsmöglichkeit für die aktuell verfügbaren Ressourcen. Diese Arbeit schlägt eine System vor, das eine containerbasierte Virtualisierung nutzt um einen solchen Skalierungsalgorithmus zu testen ohne auf eine reale Cloud zurückgreifen zu müssen. Containervirtualiserung erlaubt mehrere Instanzen einer Anwendung streng voneinander getrennt zu starten und hierbei deutlich weniger Overhead als im Vergleich zu einer Vollvirtualisierung zu erzeugen. Das vorgeschlagene System kann mehrere Anwendungsinstanzen des zu testenden System auf einer lokalen Maschine betreiben. Durch eine zur Verfügung gestellte API kann die verfügbare CPU-Zeit und der Arbeitsspeicher gesteuert werden um die Fluktuation von verfügbaren Ressourcen zu simulieren. Eine Integration in JUnit erlaubt einen einfachen Einstieg beim Schreiben von Testfällen. Wird eine Abstraktionsschicht wie JClouds genutzt, ist beim zu testenden System keine Anpassung notwendig. Aufgrund der lokalen Ausführung der Testumgebung fallen keine Kosten an wie für die Nutzung einer Cloud. Verschiedene Experimente zeigen die Machbarkeit des entwickelten Systems. Es wird dargelegt, wie Bugs im Skalierungsalgorithmus sehr einfach gefunden werden können, sobald der Algorithmus auf fluktuierende Ressourcen reagieren muss.
description: Elastic web applications automatically scale up and down depending on the current workload. Scaling up and down enables to distribute the application workload to more or less servers. Such elastic applications are getting popular because of the cheap and high-available public clouds as provided by Amazon AWS, Microsoft Azure and others. An elastic application contains an algorithm, the so-called elasticity policy, that decides how much and when to scale up and down the application depending on various inputs. There are inputs such as the current number of requests, CPU load, memory consumption and many more. On public clouds, the computing power of the available resources may fluctuate, therefore the elasticity policy cannot assume constant and continuous performance. In order to ensure that the algorithm behaves as expected it needs to be tested against such brittle behaviour. Usually, when testing elasticity policies one takes a real cloud instances and simulates some workloads. This approach is quite cumbersome and quite expensive. Using a real cloud costs money, it takes time to get results and the fluctuation of available resources cannot be controlled. This thesis proposes a system that employs container-based virtualisation to test an elastic algorithm without the need of a real cloud. Container virtualisation allows to run multiple instances of an application strictly separated from each other and with very little overhead compared to real virtualisation. The proposed system is able to start multiple instances of the system under test in parallel on the local development machine using container-based virtualisation. By offering an API the available CPU time and memory can be controlled in order to simulate resource shortage. An integration to JUnit offers an easy entry point for testers to write their test cases. There is no need to adjust the system under test if it connects to the API of a cloud provider using an abstraction layer such as JClouds. Because of the local execution of the test environment a test run is free of charge. Several experiments show the feasibility of the developed system. It can be seen that there exist use cases where bugs of the elastic policy can be found easily when tests are performed with resource limitations as offered by the developed system in the context of this Thesis.