Verteilte Systeme Projekt 2005/2006

Werbung
Verteilte Systeme Projekt
2005/2006
Eine ARM 4.0-Instrumentierung für
Tomcat
Andy Pelzer und Waldemar Echler
Gesamt-Überblick
ARM 4.0 Standard
Tomcat 5.5
Unser Projekt
Demo
Ausblick
2
ARM 4.0
Überblick
Einführung
Features und deren Nutzen
Transaktionskonzept
Errorhandling
Implementierungen
Tang-ARM Paket
3
ARM 4.0
Einführung
Motivation
Funktionalität einer Anwendung ist nicht alles!
„Zeit ist Geld“ (speziell bei QoS)
Anwendungen werden zunehmend komplexer
Management von Anwendungen gewinnt an Bedeutung
Administratoren / Analysten benötigen Informationen über eine Anwendung
und Werkzeuge zur Analyse dieser Daten
Instrumentierung von Anwendungen (Aspektorientierte Programmierung)
zum Zweck der Steuerung / Überwachung von Anwendungen (dynamisch
oder manuell)
4
ARM 4.0
Einführung
Application Response Measurement Standard der Open Group
Mark Johnson, IBM
Bill Furnas, Hewlett-Packard
Marcus Thoss, tang-IT Consulting GmbH
Geschichte
1996 (Vers. 1.0): C-API zur Messung von Antwortzeiten und Status von
Transaktionen
1997 (Vers. 2.0): Korrelation von Transaktionen und zusätzliche Messungen
1998 (Vers. 3.0): Java-Interface
2004 (Vers. 4.0): Unterstützung von Threads, Einheitliche Schnittstelle für C/Java,
Callback-Mechanismus zur Fehler-Behandlung
5
ARM 4.0
Einführung
Was definiert ARM?
Schnittstelle zwischen Agent und
instrumentierter Anwendung (Library)
Unterstützung von verteilten Anwendungen
und mehreren Instanzen
Universelles Konzept zur Instrumentierung
jeglicher Art (mehr als Response
Measurement)
Was lässt ARM offen?
Aufgaben des Agents (Verwendung,
Persistenz und Darstellung der Messdaten)
Architektur des Agents
Welche Daten zusätzlich zur Zeitmessung
und zum Status gesammelt werden
6
ARM 4.0
Features und Nutzen
Zeitmessung und Status von selbst definierten Transaktionen
Assoziation beliebiger Kenngrößen / Daten der Anwendung mit
Transaktionen (Metrics, Properties)
Verbesserung des Antwortzeitverhaltens von Anwendungen durch Aufspüren von
Bottlenecks (Profiling)
Nachweis einer gewissen QoS (Abrechnung)
Steuerung der Anwendung (z.B. Bereitstellung von zusätzlichen Ressourcen bei
steigender Last)
Informationen über den Umfang einer Transaktion und dadurch bessere
Rückschlüsse über die Performanz (z.B. wie viele MB wurden gesichert?)
Informationen über zur Verfügung stehende Ressourcen, die die Dauer von
Transaktionen beeinflussen (z.B. Länge von Warteschlangen, CPU-Nutzung)
Detaillierte Fehlermeldungen der Anwendung und dadurch schnellere Reaktion
Zwei Arten der Messung
ARM-Agent misst die Zeit (ermöglicht „Heartbeats“ und entlastet den
Programmierer)
Anwendung misst die Zeit und übermittelt diese an den ARM-Agent (vereinfacht
Migration auf ARM-Standard und unterstützt Messungen von verteilten
Anwendungen, unabhängig von der ARM-Implementierung)
7
ARM 4.0
Transaktionskonzept
Quelle: Technical Standard
Application Response
Measurement (ARM)
Issue 4.0, Version 2 – Java
Binding, The Open Group
8
ARM 4.0
Transaktionskonzept
Quelle: Technical Standard
Application Response
Measurement (ARM)
Issue 4.0, Version 2 – Java
Binding, The Open Group
9
ARM 4.0
Errorhandling
Philosophie: Programmierer und Administratoren müssen über Fehler
bescheid wissen, das Programm muss es nicht!!!
ARM-Objekte werfen keine Exceptions
(Ausnahmen: java.lang.Error, java.lang.RuntimeException)
Es werden immer syntaktisch korrekte Objekte erzeugt
(können im Fehlerfall „Datenmüll“ beinhalten)
Gute ARM-Implementierung loggt Fehler zentral und löst sie wenn möglich auf
Wie KANN eine Instrumentierte Anwendung ARM-Fehler behandeln?
Rückgabewert von ARM-Methoden prüfen (nur teilweise möglich)
getErrorCode() / getErrorMessage() für ARM-Objekte aufrufen
Als zentraler ARM-Error-Handler registrieren(<Factory-Object>.setErrorCallback())
und ArmErrorCallback Interface implementieren (errorCodeSet())
10
ARM 4.0
Implementierungen
Referenzimplementierung der Open Group
Open Source
Lediglich Ausgabe auf stdout oder in ein Logfile
Enthält „null-SDK“ (leere Methoden)
Tang-ARM (Tang-IT Consulting GmbH)
Kommerzielle Lizenz
Übernimmt keine Steuerungsaufgaben
Grafisches Frontend „ARM-Manager“ (sehr hilfreich zur Sichtung der Daten)
Granularität im Nanosekunden-Bereich
Unterstützung unterschiedlicher Backends für Messdaten
Bietet C++ Interface zur Bereitstellung gemessener Daten
(Möglichkeit der Steuerung oder anderer Datenverarbeitung)
11
ARM 4.0
Tang-ARM Architektur
Quelle: www.arm.tang-it.com
12
Tomcat 5.5
Überblick
Einführung
Was ist der Apache Tomcat?
Entwickler / Hersteller
Architektur
Überblick
Digester
Connectoren
Listener
13
Tomcat 5.5
Einführung
Was ist der Apache Tomcat?
Servlet Container
Vollständiger HTTP Server (Webserver)
Aus Gründen der Performanz hauptsächlich für die Entwicklung eingesetzt
JSP Compiler (Jasper)
Referenzimplementierung der Java Servlet und Java Server Pages Technologien
Laufzeitübersetzung von JSP Seiten in Servlets
Unterstützt noch zwei weitere J2EE APIs: JNDI und JMX
14
Tomcat 5.5
Einführung
Entwickler / Hersteller
Gestartet von James Duncan Davidson als Implementierung der Java
Servlet / JSP Standards (bei Sun Microsystems)
Wurde 1999 von Sun an die Apache Software Foundation übergeben, ab
da Teilprojekt von Apache Jakarta (Version 3.0).
Seit 2005 eigenes Apache Projekt, nicht länger zu Jakarta zugehörig
(Version 5.5.x).
Entwickelt von Freiwilligen weltweit (u.a. auch weiterhin Sun Mitarbeiter)
Herausgegeben unter der Apache Software Lizenz als Open Source
15
Tomcat 5.5
Architektur
Überblick (1 / 3)
16
Tomcat 5.5
Architektur
Überblick (2 / 3)
Server
Repräsentiert den Tomcat selbst
Kontrolliert einen Steuerungsport, um den
Tomcat zu stoppen
Service
Gruppiert eine Engine mit ihren Connectoren
Engine
Repräsentiert die Catalina Servlet Engine
Ermittelt das Ziel (Host / Context) eines
Requests anhand des HTTP-Headers und leitet ihn entsprechend weiter
Oberste Ebene der Requestverarbeitung
Host
Repräsentiert eine Gruppe von Webanwendungen
Umsetzung des „virtueller Host“ Konzepts des Apache HTTP Servers (mehrere
virtuelle Server auf einem System, unterschieden über ihre Adressen)
Ermittelt das Ziel (Context) eines Requests und leitet ihn entsprechend weiter
Context
Repräsentiert / Kapselt eine einzelne Webanwendung
17
Tomcat 5.5
Architektur
Überblick (3 / 3)
Multithreaded ab den Connectoren
Schachtelung der Container folgt dem „Chain of Responsibility“ Pattern,
d.h. ein Request wird weitergereicht, bis er an dem, für seine endgültige
Verarbeitung zuständigen, Container angelangt ist.
Sehr flexible Konfiguration durch Digester-Konzept
18
Tomcat 5.5
Architektur
Digester (engl. für Kocher, Kochtopf)
Zusammenstellung der Komponenten des Tomcat durch XMLKonfigurationsdateien
Werden beim Start des Tomcat vom sog. Digester geparst
Enthalten Satz von Regeln zum Zusammenbau des Tomcat
Digester erzeugt entsprechend der Regeln neue Objekte (z.B. Container)
Oder ruft Methoden existierender auf (z.B. Registrierung von Listenern)
Dadurch hohe Anpassungsfähigkeit an Anwendungssituation
Und Flexibilität bei der Konfiguration von Listenern, Valves etc.
19
Tomcat 5.5
Architektur
Connectoren (engl. für Anschluss, Verbinder)
Verbindung der Servlet Engine mit der „Außenwelt“
Umsetzung der protokollspezifischen Requests in ein Paar von
ServletRequest- und ServletResponse Objekten (Kapselung der
Netzwerkprogrammierung)
Verwaltung des Thread Pools
Verteilung der Client-Anfragen auf die Threads
Standardmäßig gibt es drei Connectoren:
AJP: Apache JServ Protocol
Coyote für das HyperText Transfer Protocol (HTTP 1.1)
SSL: Secure Socket Layer
Weitere Connectoren (z.B. für eigene Protokolle) möglich
20
Tomcat 5.5
Architektur
Listener (engl. für Empfänger, Zuhörer)
Java Klassen, implementieren bestimmte Interfaces
Konfiguration über XML-Dateien
Prinzip des Observer-Patterns:
Werden beim Start des Tomcats registriert (durch den Digester)
Benachrichtigung, sobald das überwachte Ereignis eintritt
Wichtigste Typen von Listenern:
Lifecycle Listener (Server, Engine, Host, Context)
Instance Listener (Ereignisse einer Servlet-Instanz)
Servlet Request Listener (Ereignisse eines Requests)
Servlet Context Listener (Ereignisse eines Contexts)
Und noch einige mehr…
21
Unser Projekt
Überblick
Aufgaben / Anforderungen
Konfiguration
Instrumentierungspunkte
Konzept
Correlatoren
Verbindung zum Apache
22
Unser Projekt
Aufgaben/Anforderungen
Einarbeitung in ARM
Einarbeitung in Tomcat
Konzept zur ARM-Instrumentierung von Tomcat mit tang-ARM 4.0
Implementierung
Beispielszenario zur Demonstration
Versionsübergreifende Instrumentierung
Flexibel konfigurierbar zur Laufzeit des Servlet Containers
Threadsicherheit
23
Unser Projekt
Konfiguration
Konfiguration der Instrumentierung
Erfolgt, wie auch die Tomcat-Konfiguration, über eine XML-Datei namens
„instrumentation.xml“
Wird bei jedem Request auf Änderungen geprüft und ggf. neu geladen
Konfigurationsänderungen so ohne Neustart des Tomcat möglich
Implementierung der Konfiguration
Parsen der XML-Datei durch Java XML Processing API (ereignisgetriebene
Variante; kein Modell der XML-Datei im Speicher)
Kapselung der Konfiguration in einer Klasse (enthält Parser, Update-Methode und
Abfrage-Methoden für Listener)
Update-Methode prüft Timestamp der Datei und parst nur bei Änderungen erneut
(Performanz); Aufruf pro Request durch den ServletRequestListener
Listener nutzen Abfrage-Methoden um zu prüfen, ob gemessen/geloggt werden soll
24
Unser Projekt
Konfiguration
Konfigurationsmöglichkeiten:
Instrumentierung ein/ausschalten
Filtern:
Nach Servlet
Nach Context (Webapplikation)
Nach Context UND Servlet filtern
Nicht filtern
Debug-Ausgaben ein/ausschalten
25
Unser Projekt
Instrumentierungspunkte
Warum haben wir Listener verwendet?
Wesentlich robuster gegenüber Veränderungen (neue Tomcat Versionen), als
direkte Instrumentierung des Tomcat-Codes
Daher relativ zukunftssicher (solange Listener API des Tomcat stabil)
Einfach hinzukonfigurierbar, Tomcat muss für die Instrumentierung nicht neu
übersetzt werden, ein einzelner Neustart reicht aus
Durch Vorgabe der Hinzukonfigurierbarkeit auf Listener
beschränkt
Mögliche Instrumentierungspunkte:
Request erreicht / verlässt Webapplikation
Beginn / Ende der service() Methode eines Servlets
Beginn / Ende einer HTTP-Session
Lebenszyklus eines Containers (Server, Engine, Host, Context)
26
Unser Projekt
Instrumentierungspunkte
Gewählte Instrumentierungspunkte
Generische Instrumentierung der eingebetteten
Anwendungen im Vordergrund
Request erreicht / verlässt Webapplikation
Ermöglicht die Messung der Dauer der gesamten Verarbeitung innerhalb
dieser Webapplikation
Beginn / Ende der service() Methode eines Servlets
Erlaubt es die Ausführungsdauer jedes einzelnen Servlets der Webapplikation
zu messen
27
Unser Projekt
Konzept
Request
Context
Instrumentation.xml
Servlet X
Config
Logfile
(stdout/stderr)
WebApp
Lifecycle
Listener
Global
Servlet
Request
Listener
Global
Instance
Listener
Servlet Y
Servlet Y
Servlet Z
bedingte Aufrufe/Zugriffe
constante Aufrufe
Normaler Fluss eines
Requests im Thread
28
Events
Unser Projekt
Correlatoren
Weitergabe der Correlatoren
Hierarchische Verknüpfung der beiden Transaktionen durch
Korrelatoren
Effiziente und thread-sichere Weitergabe der Correlatoren dem
natürlichen Informationsfluss folgend (als Attribut im ServletRequest)
Ergänzung des ServletRequest-Objektes um folgende Objekte:
Stack mit Korrelatoren (Notwendig für Beziehungen der Transaktionen)
Stack mit Transaktionen (Notwendig zum Stoppen der Transaktionen)
ARMTransactionFactory (Zum Anlegen der Transaktionsobjekte benötigt)
ARMApplication (Zum Anlegen der Transaktionsobjekte benötigt)
29
Unser Projekt
Correlatoren
30
Unser Projekt
Verbindung zum Apache
Weitergabe von Servlet-Requests von Apache (Webserver) an Tomcat
(Servlet Container) z.B. über mod_jk (AJP) weit verbreitet
Instrumentierung des ganzen interessant und sinnvoll
Apache wurde bereits instrumentiert (Verteilte Systeme Projekt von
Fr. Küppers)
Vorhandene Apache-Instrumentierung übergibt den Correlator bereits im
Request (über mod_arm4, kodiert)
Unsere Aufgabe: Auspacken und Dekodieren des kodierten Correlators
um Apache- und Tomcat-Transaktionen zu verknüpfen
31
Demo
JMeter
Windows
HTTP
Apache
Tomcat
AJP
Connector
Tomcat
Linux
AJP
mod_jk
mod_arm4
instrumentation
tangitArmManager
armtcpd
TCP
armtcpd
Request-Fluss
sqliteDB
Response-Fluss
ARM Aufrufe
ARM-interne Aufrufe
32
Ausblick
Einsatz unserer Instrumentierung
Apache ist bereits instrumentiert (Verteilte Systeme Projekt von
Fr. Küppers)
Aktuelle Diplomarbeit: Instrumentierung des JBoss
J2EE-Applikationsserver
JBoss nutzt Tomcat als Servlet Container und Apache als Webserver
Verbindung der Diplomarbeit mit unserer Arbeit nahe liegend (und
Grundlage für unser Projekt?)
Verknüpfung im Anschluss an dieses Semester geplant
Veröffentlichung der Gesamtarbeit als Open Source
Promotion für tangIT-ARM
33
Quellen
Technical Standard Application Response Measurement (ARM)
Issue 4.0, Version 2 – Java Binding, The Open Group
http://www.opengroup.org/management/arm/
Chopra, Bakore, Eaves, Galbraith, Li, Wiggers – „Professional Apache
Tomcat 5“, Wiley Publishing, 2004
Moczar – „Tomcat 5 Unleashed“, Sams Publishing, 2005
http://de.wikipedia.org/wiki/Apache_Tomcat
Homepage des Apache Tomcat: http://tomcat.apache.org/
Homepage von tang-IT ARM:
http://arm.tang-it.com/
34
Vielen Dank!
Fragen?
35
Herunterladen