Nickel, B. (2015). Enhanced performance testing and monitoring of JVM-based distributed data-processing applications [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://doi.org/10.34726/hss.2015.32880
Apache Spark; Apache Storm; Performance Monitoring; Performance Testing; Data Processing; Distributed Systems; Big Data; Performance Analysis; Aspect-Oriented Programming
en
Abstract:
In Zeiten von Big Data, mit ständig-wachsenden Datenmengen, sind Datenverarbeitungsprogramme mit beachtlichen Performance-Herausforderungen konfrontiert. Da Datenverarbeitungsprogramme, welche ihren Performance-Anforderungen nicht gerecht werden, nicht ihren eigentlich angedachten Mehrwert liefern, sind Performance-Überwachung und Tests daher wichtige und nicht zu vernachlässigende Teile beim Einsatz solcher Programme, da sie es erlauben, Performance zu analysieren, zu beurteilen und Grenzen auszuloten. Weil Datenverarbeitungsprogramme, die nur auf einzelnen Computern laufen, in der Verarbeitung nicht mehr mit den entstehenden Datenmengen zurecht kommen, werden häufig verteilte Systeme eingesetzt. Unglücklicherweise hat der Einsatz solcher verteilter Systeme seine Nachteile: Abgesehen davon, dass es viel schwieriger ist solche Systeme zu entwerfen und zu verwalten, ist das Überwachen und Testen wesentlich schwieriger als bei einfachen Programmen. Das trifft insbesondere auf Datenverarbeitungsprogramme zu, bei denen die Überwachung nicht zum Zeitpunkt des Entwurfs berücksichtigt wurde, da es sehr viel schwieriger ist die Überwachungslogik im Nachhinein einzubauen. Es gibt zwar fertige Lösungen und Produkte zur Überwachung und zum Testen verteilter Systeme, diese haben aber häufig einen eingeschränkten Fokus: Entweder, sie sind limitiert auf bestimmte Metriken, wie zum Beispiel Ressource-Metriken eines Servers, oder erfordern auf den Einsatz bestimmter Software-Umgebungen oder Software-Engines. Das Ziel dieser Arbeit ist es, eine Lösung zu finden, wie man JVM-basierte verteilte Datenverarbeitungsprogramme überwachen und testen kann, ohne dabei an eine bestimmte Software-Umgebungen oder Software-Engine gebunden zu sein. Die dafür notwendigen Anforderungen werden Schritt für Schritt, von der Definition geeigneter Metriken, über die Erfassung und Verteilung von Messdaten bis hin zur Analyse, diskutiert. Auf Basis dieser Anforderungen, wird ein Entwurf für ein Framework zur Überwachung und Durchführung von Tests JVM-basierter verteilter Datenverarbeitungsprogramme vorgestellt. Um die Plausibilität des Entwurfs zu überprüfen, wird eine Proof-of-Concept Implementierung entwickelt. Abschließend wird das Framework auf zwei Implementierungen eines Demonstrationszenarios, eine basierend auf Apache Spark Streaming und eine basierend Apache Storm, angewandt und die resultierenden Messdaten analysiert, um die Anwendbarkeit und den Mehrwert dieser Arbeit zu im praktischen Anwendungsfall zu zeigen.
de
In the age of big data with ever-growing data volumes, data-processing applications face considerable performance challenges. If they do not fulfill their performance requirements, they do not deliver their intended benefit to their organization. Therefore, performance testing and monitoring is crucial for organizations as it enables them to test, analyze and assess the performance of their data-processing applications. Since single machines have not kept up with the growing data volumes, data-processing applications have to scale across clusters, grids or other distributed infrastructures. Whereas distribution allows such applications to meet their performance requirements, it comes at a cost. Besides the design and manageability challenges that emerge, performance testing and monitoring become more difficult to conduct. This especially applies to data-processing applications, where monitoring has not been considered at design time. There are existing testing and monitoring solutions for distributed systems. Unfortunately these tools are often limited in their scope: Either they are focused on certain metrics, such as a server's resource metrics, or bound to a particular environment or data-processing engine. The goal of this work is to investigate how the performance of distributed JVM-based dataprocessing applications can be tested and monitored independently from a particular environment or data-processing engine. The different challenges when monitoring a JVM-based distributed data-processing application are analyzed step by step, from defining proper metrics, dealing with data acquisition and publication, to measurement data analysis. Based on the result of the analysis, a design for a framework that allows to monitor and test any JVM-based distributed data-processing application is proposed. To demonstrate the feasibility of our design, a proof-of-concept implementation of the framework is developed. Finally, in order to evaluate the framework and to show that it serves its purpose, it is applied to a demonstration scenario implemented based on both, Apache Spark Streaming and Apache Storm, where the resulting measurement data is analyzed and the results are discussed.