Forschungsbericht 2019 - Max-Planck-Institut für Softwaresysteme, Standort Saarbrücken

Das Verhalten von verteilten Cloudanwendungen rückverfolgen

Autoren
Mace, Jonathan
Abteilungen
Max-Planck-Institut für Softwaresysteme, Standort Saarbrücken, Saarbrücken
Zusammenfassung
Bei vielen der von uns heutzutage verwendeten Computerprogramme handelt es sich um verteilte Systeme, die in Rechenzentren laufen. Für die Menschen, die diese Programme betreiben und warten, kann die Diagnose von Problemen eine wirkliche Herausforderung darstellen, weil die Symptome und die eigentlichen Wurzelursachen über viele verschiedenen Rechner und Systemkomponenten verteilt sein können. Um den Betrieb komplexer Systeme einfacher zu machen, brauchen wir Werkzeuge, die ihr Betriebsverhalten verteilt sein können. Um den Betrieb komplexer Systeme einfacher zu machen, brauchen wir Werkzeuge, die ihr Betriebsverhalten aufzeichnen und analysieren und auftretende Probleme lokalisieren und diagnostizieren.

Die meisten Computerprogramme, die wir heutzutage nutzen, laufen auf cloud-basierten verteilten Systemen. Denken Sie beispielsweise an all die Websites und Apps, die wir täglich nutzen: Online-Shops, Nachrichten-Websites, Suchmaschinen, soziale Netzwerke, Navigationsprogramme, Instant-Messaging-Apps und vieles mehr. Die meisten dieser Programme laufen nicht einfach isoliert auf unseren Laptops oder Smartphones, sondern sind über das Internet mit Backends und Datenbanken verknüpft, die in Rechenzentren auf der ganzen Welt betrieben werden. Diese Backends üben ein breites Spektrum an Aufgaben aus, darunter auch den Aufbau Ihres personalisierten sozialen Netzwerk-Feeds, das Speichern und Aufrufen von Kommentaren auf Message Boards und die Berechnung der Ergebnisse für Ihre Suchanfragen. Aus unserer Sicht als Nutzer sind die Handlungen, die wir ausführen, wie das Öffnen der App oder das Laden unseres personalisierten Profils, ganz einfach. Hinter den Kulissen führt jedoch jede Handlung zu einer komplexen Verarbeitung über viele verschiedene Prozesse und Rechner in einem Rechenzentrum.

Nie war es leichter, derart komplexe Programme zu schreiben und einzusetzen. Cloud-Computing-Unternehmen, die eigene Rechenzentren besitzen (wie beispielsweise Google, Amazon und Microsoft) vermieten überaus gerne IT-Dienstleistungen auf Knopfdruck. Programmierer können mit Designs wie Microservices problemlos aus kleineren, einfacheren Baublöcken komplexe Programme erstellen. Es gibt Rahmen und Open-Source-Softwarepakete, die Entwicklern dabei helfen, aus kleinen Baustücken große Anwendungen zu konstruieren, diese kleinen Stücke über mehrere Rechner in einem Rechenzentrum zu verbreiten und sie über das Netzwerk miteinander kommunizieren und interagieren zu lassen.

Probleme treten dann auf, wenn die Software in den Echtbetrieb geht. Verglichen mit der Entwicklung und dem Einsatz der Software ist es sehr viel schwieriger, einen reibungslosen Betrieb der Software sicherzustellen. Verteilte Computerprogramme bestehen aus einer Vielzahl an beweglichen Stücken: Deshalb gibt es auch eine Vielzahl an Möglichkeiten, wie etwas schief lauft. Wenn etwa ein Rechner in einem Rechenzentrum ein Hardwareproblem aufweist oder ein Code fehlerhaft ist oder auch, wenn zu viele Nutzer gleichzeitig auf den Rechner zugreifen wollen, kann das weitreichende Auswirkungen haben. Es kann einen Schmetterlingseffekt an Problemen nach sich ziehen, die wir als kaskadierende Ausfälle bezeichnen. Diese können dazu führen, dass die App oder die Website langsam wird oder ganz abstürzt. Für Programmierer ist es sehr schwierig, Problemen dieser Art auf den Grund zu gehen, weil es keinen einzelnen Rechner oder Prozess gibt, der die gesamte Arbeit erledigt. Ein Problem, das auf einem Rechner auftritt, könnte später in Form von seltsamen Symptomen auch auf einem anderen Rechner auftreten. Die Kernursache eines Problems herauszufinden, kann eine ebenso große Herausforderung darstellen wie die Vorwegnahme von Problemen. Selbst große Internetunternehmen wie Facebook und Google haben heutzutage mit solchen Problemen zu tun.

Mit Problemen dieser Art befasst sich unsere Forschungsgruppe Cloud-Software-Systems am Max-Planck-Institut für Softwaresysteme. Wir erforschen Möglichkeiten für Betreiber, mit denen sie ihre verteilten Systeme verstehen können, bei Betrieb auftretende Probleme lokalisieren und beheben können oder wich sich Systeme entwickeln lassen, die Probleme proaktiv vermeiden.

End-to-end-Anfragen in verteilten Systemen nachverfolgen

Zu den Ansätzen, die wir verfolgen, gehört unter anderem die Entwicklung von verteilten Ablaufverfolgungswerkzeugen, die die Systembetreiber verwenden können. Das Ziel der verteilten Ablaufverfolgung besteht darin, Informationen darüber aufzuzeichnen, was ein Programm während des Betriebs macht. Die Werkzeuge zeichnen Ereignisse, Kennzahlen und Leistungszähler auf, die zusammen den aktuellen Status und die aktuelle Leistung des Systems anzeigen und außerdem verfolgen, wie sich das System mit der Zeit ändert. Ein wichtiger zusätzlicher Schritt, den die verteilten Ablaufverfolgungswerkzeuge ergreifen, besteht in der Aufzeichnung des kausalen Ordnens der Ereignisse, die im System passieren — also der Interaktionen und Abhängigkeiten zwischen Rechnern und Prozessen. Das kausale Ordnen ist für die Diagnose von Problemen, die sich über mehrere Prozesse und Rechner erstrecken, äußerst nützlich, insbesondere wenn gleichzeitig eine Vielzahl von anderen, nicht mit diesen Problemen zusammenhängende Tätigkeiten stattfinden. Es lässt uns die End-to-end-Ausführungspfade von Anfragen über alle Komponenten und Rechner hinweg rekonstruieren und anschließend über die Abfolge von Bedingungen und Ereignissen diskutieren, die zu einem Problem geführt haben. Ohne kausales Ordnen fehlen diese Informationen und die genaue Bestimmung der Kernursache eines Problems wäre vergleichbar mit der sprichwörtlichen Suche nach der Stecknadel in einem Heuhaufen.

In unserer Forschungsgruppe haben wir effiziente, skalierbare und umfassend einsetzbare Ablaufverfolgungswerkzeuge entwickelt und dabei eine Reihe von Herausforderungen untersucht. In unserer aktuellen Arbeit haben wir Möglichkeiten studiert, neue Instrumente effizient in bereits laufende Systeme einzufügen, um neue Informationen gewinnen zu können, ohne das System neu starten zu müssen [1]. Wir haben Probleme in der Datenqualität und im Sampling untersucht — das heißt entscheiden, welche Daten zweckmäßigerweise behalten und welche gelöscht werden können [2, 3]. Wir haben auch geprüft, wie das Design der verteilten Ablaufverfolgungsrahmen aufskaliert werden kann und wie Tracing-Daten in Echtzeit erfasst, gesammelt und verarbeitet werden können [4].

Derzeit untersuchen wir Möglichkeiten dafür, die von den Ablaufverfolgungswerkzeugen aufgezeichneten Daten in Entscheidungen zurückzuführen, die von der Infrastruktur des Rechenzentrums getroffen werden, wie etwa Ressourcenmanagement, zeitliche Planung und Lastausgleich. Wir untersuchen auch neue Herausforderungen, die in skalierbaren Datenanalysen aufkommen: Wie lassen sich große Ablaufverfolgungsdatensätze analysieren und Erkenntnisse über das aggregierte Systemverhalten gewinnen? Ein Ansatz, den wir erkunden, nutzt Techniken im darstellenden maschinellen Lernen,  mit denen sich reich annotierte Ablaufverfolgungsdaten in eine geschmeidigere Form für die Analyse umzuwandeln lassen. Daneben forschen wir an einer Vielzahl von Vorgehensweisen, mit denen sich die verteilten Systeme selbst besser entwerfen und entwickeln lassen. Letzten Endes besteht unser Ziel darin, die Bedienung, das Verständnis und die Diagnose moderner Cloudsysteme einfacher zu gestalten.

Literaturhinweise

1.
Mace, J.; Roelke, R.; Fonseca, R.
Pivot Tracing: Dynamic Causal Monitoring for Distributed Systems
Proceedings of the 25th ACM Symposium on Operating Systems Principles (2015)
2.
Las-Casas, P.; Mace, J.; Guedes, D.; Fonseca, R.
Weighted Sampling of Execution Traces: Capturing More Needles and Less Hay
Proceedings of the 9th ACM Symposium on Cloud Computing (2018)  
3.
Las-Casas, P.; Papakerashvili, G.; Anand, V.; Mace, J.
Sifter: Scalable Sampling for Distributed Traces, Without Feature Engineering
Proceedings of the 10th ACM Symposium on Cloud Computing (2019)
4.
Kaldor, J.; Mace, J.; Bejda, M.; Gao, E.; Kuropatwa, W.; O’Neill, J.; Ong, K. W.; Schaller, B.; Shan, P.; Viscomi, B.; Venkataraman, V.; Veeraraghavan, K.; Song, Y. J.  
Canopy: An End-to-End Performance Tracing And Analysis System
Proceedings of the 26th ACM Symposium on Operating Systems Principles (2017)

Weitere interessante Beiträge

Zur Redakteursansicht