{'fraction_non_alphanumeric': 0.028209764918625677, 'fraction_numerical': 0.0003616636528028933, 'mean_word_length': 4.910256410256411, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Self-Aware Multidimensional Auto-Scaling

Modern internet applications are often designed using a layered architecture and are to an increasing degree deployed in public infrastructure cloud environments. In most cases, a fix amount of resources is provisioned, that introduces performance problems when load peaks occur and become inefficient when the load decreases. Therefore, the public cloud provides the possibility to dynamically add or remove resources to the application to match the actual demand. Auto-scalers use this technique to provision and deprovision resources to match the demand in an automatic manner. Existing auto-scalers often support only single-tier applications and it is possible to instantiate one auto-scaler per tier. However, several problems like bottleneck shifting and oscillations may occur. Therefore, a multi-tier auto-scaler should know all tiers and be able to scale the tiers independently but according to dependencies between the tiers. In addition, when hosting an application in the public cloud, the cloud providers often charge the costs based on instance time. For example Amazon EC2 charges on an hourly basis and rounds all started hours to a full hour. This can increase the costs when using an auto-scaler as resources are provisioned and deprovisioned as required without knowledge about the charging model. While several multi-tier auto-scaler exist in the literature, they are very limited to specific use-cases. In addition, most of them are either proactive or reactive auto-scalers. Proactive auto-scalers have to rely on their forecast and do not anticipate whether the forecast drifts off the actual demand. Reactive auto-scalers rely on the actual values that can be measured, e.g., request rates. Therefore, if the load increases, the scale up of reactive mechanisms is often to late meaning that the application is already in an overloaded state. Moreover, most of them do not provide a cost-effectiveness logic to control the costs in the public cloud. In this thesis, a single-tier approach, called Chameleon, is used as basis hybrid auto-scaler and is developed further to support multi-tier auto-scaling. Therefore, the decision logic is changed from measured CPU utilisation to the theoretical queueing theory utilisation per tier. Each tier is modelled as a M/M/n-∞ queue with variable number of service units, i.e., virtual machines. In addition, the decision logic is extended to find scaling decisions for each tier with the knowledge of the scaling at the other tiers. Moreover, a cost-efficiency component is added to make multi-tier Chameleon cost-aware. This component reviews all decisions for cost-efficiency and selects the virtual machine, that introduces less financial loss, to stop.