Benjamin Mayer,
"Eine Monitoring Infrastruktur für Microservices"
, 12-2016
Original Titel:
Eine Monitoring Infrastruktur für Microservices
Sprache des Titels:
Deutsch
Original Kurzfassung:
Microservices sind ein modernes Software Architektur Konzept zur Realisierungen größeren Softwarevorhaben als eine Menge kleiner autonomer Services. Diese Services laufen dabei als unabhängige Prozesse in einer eigenen Laufzeitumgebung und erfordern dadurch eine Kommunikation über das Netzwerk, um mit anderen Microservices interagieren zu können. Der Umstieg auf eine Microservice Architektur ist dabei mit vielen Vorteilen aber auch Herausforderungen technischer und organisatorischer Art verbunden. Einer der wesentlichen Vorteile einer Microservice Architektur ist die agile und unabhängige Skalierung, die erreicht werden kann, da genau jene Komponenten des gesamten Systems skaliert werden können die am stärksten beansprucht werden. Weiteres bietet dieses Konzept die Möglichkeit, Services unabhängig von anderen Services in Produktion zu bringen, wodurch neue Features dem Kunden eher zur Verfügung gestellt werden können. Außerdem bietet die Verwendung von Microservices bei richtiger Konzeption einen guten Grad an Robustheit, da vermieden wird, dass sich ein Fehlverhalten eines Service fortsetzt und das Gesamtsystem beeinträchtigt.
Eine große Herausforderung in Bezug auf Microservices stellt das Monitoring dar, da durch die hohe Anzahl an zu überwachenden Systemen die Komplexität dieser Aufgabe steigt. Aus diesem Grund ist eine automatisierte Erhebung der benötigten Monitoring-Informationen unumgänglich. Des Weiteren ist die Analyse der Laufzeitinformationen einzelner Microservices nicht ausreichend. Vielmehr ist das Erkennen von Beziehungen zwischen Services ausschlaggebend, um im Problemfall die jeweilige Ursache finden zu können. Um diese Zusammenhänge erkennen zu können, ist es notwendig, die Daten aus den verschiedenen Microservices an einer zentralen Stelle zu kombinieren. Um dies zu vereinfachen, ist die Definition von verpflichtenden MonitoringInformationen sinnvoll, die in einem einheitlichen Format angeboten werden.
Im Rahmen dieser Arbeit wurde eine Monitoring Infrastruktur speziell für den Einsatz in einer Microservice Architektur entwickelt. Dieses Werkzeug wurde auf Basis eines eigenen Datenmodells realisiert, welches für den Einsatz in einer Graphen Datenbank konzipiert ist. Das Hauptaugenmerk bei der Entwicklung galt der Erfassung und der Verarbeitung der Laufzeitinformationen eines Microservices. Neben den Laufzeitinformationen beinhaltet das definierte Datenmodell auch statische Informationen, wodurch auch ein gewisser Dokumentationsaspekt bedient wird. Im Rahmen dieses Werkzeugs wurde sowohl die Möglichkeit geschaffen, die jeweiligen Microservices dahingehend zu instrumentieren, dass diese die benötigen Daten bereitstellen, als auch ein System entworfen, welches diese Daten an zentrale Stelle kombiniert und persistiert.
Schließlich werden im Rahmen dieser Arbeit bereits bestehende Monitoring Werkzeuge auf deren Eignung für die Verwendung in einer Microservice Architektur untersucht. Dabei wird die Funktionalität jedes Werkzeugs beschrieben, während anschließend ein Vergleich mit der im Rahmen der Arbeit entwickelten implementierten Monitoring Infrastruktur folgt.
Sprache der Kurzfassung:
Deutsch
Englische Kurzfassung:
Microservices is a modern software architecture concept for realising large software systems as a collection of small autonomous services [1]. These services are running in independent processes and are therefore using the network to communicate with other microservices. The change to a microservice architecture leads to numerous technical and organizational advantages as well as challenges. One of the major advantages of a microservice architecture is the possibility to scale exactly those components of a system, which are heavily used. For this reason microservices enable agile and independent scaling [2]. Furthermore, services can be brought to production independently, which allows new features to be offered immediately [1]. In a microservice architecture the services should be built in a way to compensate the failures of collaborating microservices. This provides a sufficient level of robustness since the misbehaviour of one microservice will not affect the entire system [2].
A big challenge concerning microservices is monitoring, because of the huge number of supervised services. Dealing with a huge number of monitored services requires an automated process for collecting the necessary Monitoring-Information. Furthermore, the analysis of the runtime information of individual services is not sufficient. It is a crucial factor to recognise the connections between microservices to find out the root causes of failures. To identify those connections, it is required to combine the data provided by individual services in a centralised system. In order to achieve this, it is essential to define a set of mandatory Monitoring-Information, every microservice should offer. [2]
In the context of this thesis a monitoring infrastructure for microservices has been developed. The monitoring infrastructure stores monitoring data in a graph database. The data model for this database has also been developed as part of this thesis. The focus of the infrastructure is collecting and processing runtime data from microservices. However, the infrastructure also provides descriptive (static) data about services, which can be used for documentation and management purposes. The infrastructure supports instrumenting microservices, collecting the necessary data, and aggregating and storing the collected data in a central database.
This thesis starts with describing fundamental concepts of microservice architectures and monitoring. The main part is the description of the developed microservice infrastructure. Finally, related infrastructures that can be used for microservice monitoring are discussed and compared with the developed infrastructure.