364 lines
No EOL
12 KiB
TeX
364 lines
No EOL
12 KiB
TeX
\documentclass{beamer}
|
|
|
|
\mode<presentation>{\usetheme{Madrid}}
|
|
|
|
\usepackage[german]{babel}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{times}
|
|
\usepackage[T1]{fontenc}
|
|
|
|
|
|
\title[Perl-Monitoring] % (optional, nur bei langen Titeln nötig)
|
|
{Monitoring von Perl-basierten Web Anwendungen mit Kieker}
|
|
|
|
\subtitle{Bachelor-\\Abschlusskolloquium}
|
|
\author{Nis Wechselberg}
|
|
\institute[CAU Kiel]{Institut für Informatik\\Christian-Albrechts-Universität zu Kiel}
|
|
|
|
\date{26. März 2013}
|
|
|
|
% Folgendes sollte gelöscht werden, wenn man nicht am Anfang jedes
|
|
% Unterabschnitts die Gliederung nochmal sehen möchte.
|
|
\AtBeginSection[]
|
|
{
|
|
\begin{frame}<beamer>{Gliederung}
|
|
\tableofcontents[currentsection,hideothersubsections,hideothersections,sectionstyle=show/hide]
|
|
\end{frame}
|
|
}
|
|
|
|
|
|
% Falls Aufzählungen immer schrittweise gezeigt werden sollen, kann
|
|
% folgendes Kommando benutzt werden:
|
|
|
|
% \beamerdefaultoverlayspecification{<+->}
|
|
|
|
\begin{document}
|
|
|
|
\begin{frame}
|
|
\titlepage
|
|
\end{frame}
|
|
|
|
\begin{frame}{Gliederung}
|
|
\tableofcontents[hidesubsections]
|
|
% Die Option [pausesections] könnte nützlich sein.
|
|
\end{frame}
|
|
|
|
\section{Motivation}
|
|
|
|
\subsection{System}
|
|
\begin{frame}{Kielprints}
|
|
\begin{center}
|
|
\includegraphics[width=0.93\textwidth]{images/kielprints}
|
|
\end{center}
|
|
\end{frame}
|
|
\begin{frame}{Projektbeschreibung}
|
|
\begin{itemize}
|
|
\item
|
|
Plattform zur Veröffentlichung von wissenschaftlichen Dokumenten (\emph{self archiving})
|
|
\item
|
|
Ergänzte und modifizierte Version von EPrints
|
|
\item
|
|
Betrieben durch das GEOMAR | Helmholtz Zentrum für Ozeanforschung Kiel
|
|
\item
|
|
Erweiterung des OceanRep GEOMAR
|
|
\item
|
|
Über 15000 Veröffentlichungen von mehr als 1000 Autoren
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Beobachtete Performanceprobleme}
|
|
\begin{frame}{Benutzerperspektive}
|
|
\begin{itemize}
|
|
\item
|
|
Abrufen von Einträgen über die Plattform: \\[0.5cm]
|
|
\item
|
|
Erhöhte Antwortzeiten
|
|
\item
|
|
Langsame Suche in den Fachbereichen
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}{Administration/Betrieb}
|
|
\begin{itemize}
|
|
\item
|
|
Hohe Wartezeiten bei Seitenwechseln im Backend
|
|
\item
|
|
Beispiel: Beim Eintragen von neuen Publikationen über das Backend und hinzufügen von Autoren dauert die Generierung von Dropdown-Menüs etwa 10 Sekunden.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\section{Technologien und Methoden}
|
|
\subsection{Kieker-Framework}
|
|
\begin{frame}{Kieker Monitoring Framework}
|
|
\begin{itemize}
|
|
\item Monitoring Tool aus diesem Lehrstuhl
|
|
\item Empfohlenes Tool im SPEC RG Software Repository
|
|
\end{itemize}
|
|
\includegraphics[scale=0.7]{images/kiekerComponentDiagram-woCloud-bw-w-record-newNames-withTraceAnalysis-colors}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Überblick über Kieker}
|
|
\begin{itemize}
|
|
\item Aufteilung in \emph{Kieker.Monitoring} und \emph{Kieker.Analysis}
|
|
\item \emph{Kieker.Monitoring} zur Instrumentierung und Überwachung
|
|
\item \emph{Kieker.Analysis} zur Auswertung und Veranschaulichung
|
|
\item Kommunikation über Monitoring Log oder Stream\\[0.5cm]
|
|
\item Bisher keine Unterstützung für Perl
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Programmiersprache Perl}
|
|
|
|
\begin{frame}{Programmiersprache Perl}
|
|
\begin{itemize}
|
|
\item imperative, plattformunabhängige, interpretierte Sprache
|
|
\item Entwickelt 1987, heute in Version 5.16 verfügbar
|
|
\item Module für Objektorientierung über CPAN verfügbar
|
|
\item Sehr viele Freiheiten für Programmierer (freie Syntax)
|
|
\item Starke Funktionen für String-Manipulationen und Reguläre Ausdrücke
|
|
\item Direkte Integration in Webserver mittels mod\_perl
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Performance-Monitoring}
|
|
|
|
\begin{frame}{Vorgehen bei Performance-Monitoring}
|
|
\begin{enumerate}
|
|
\item Instrumentierung des Codes mit \emph{Probes}
|
|
\item Ausführung des instrumentierten Codes
|
|
\item Protokollierung von Monitoring Daten
|
|
\item Auswertung der Daten mittels geeigneter Tools
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Erfasste Daten}
|
|
\begin{itemize}
|
|
\item Anwendungsdaten
|
|
\begin{itemize}
|
|
\item Aufrufreihenfolge
|
|
\item Aufrufhäufigkeiten
|
|
\item Ausführungszeiten
|
|
\end{itemize}
|
|
\item Systemdaten
|
|
\begin{itemize}
|
|
\item CPU-Auslastung
|
|
\item Arbeitsspeicher
|
|
\item aktive Prozesse
|
|
\item ...
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\section{Perl.Kieker Implementierung}
|
|
|
|
\subsection{Architektur}
|
|
|
|
\begin{frame}{Architekturentwurf}
|
|
\includegraphics[width=0.95\textwidth]{images/Deployment-Diagram-Client-Server-Model}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Neuimplementierungen in Perl}
|
|
\includegraphics[width=0.95\textwidth]{images/Classdiagram-Kieker-Perl}
|
|
\begin{itemize}
|
|
\item Implementierung von Monitoring Records, Monitoring Writer und Kontrollmechanismen
|
|
\item Unterstützte Records: OperationEntryEvent, OperationExitEvent, Trace
|
|
\item Auswertung mit \emph{Kieker.Analysis}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Basismodule}
|
|
|
|
\begin{frame}{Kieker in Perl}
|
|
\begin{itemize}
|
|
\item Kieker
|
|
\begin{itemize}
|
|
\item Kapselt die weiteren Module zur einfacheren Verwendung
|
|
\item Hält die Instanzen von Kieker::Writer und Kieker::Controlling
|
|
\end{itemize}
|
|
\item Kieker::Controlling
|
|
\begin{itemize}
|
|
\item Verwaltet Trace-IDs und Order-Indices
|
|
\item Erzeugt bei Bedarf neue Traces
|
|
\end{itemize}
|
|
\item Kieker::Util
|
|
\begin{itemize}
|
|
\item Verwaltet Zeitmessung
|
|
\item Rechnet Perl-Mikrosekunden in Nanosekunden um
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Kieker in Perl - Writer}
|
|
\begin{itemize}
|
|
\item Kieker::Writer::FileWriter
|
|
\begin{itemize}
|
|
\item Schreibt serialisierte Records in angelegte Datei
|
|
\item Wurde für frühe Test verwendet
|
|
\end{itemize}
|
|
\item Kieker::Writer::JMSWriter
|
|
\begin{itemize}
|
|
\item Verwendet den Java Message Service zur Übertragung der Nachrichten
|
|
\item Anbindung an Kieker mittels Kieker-Data-Bridge
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Kieker in Perl - Records}
|
|
\begin{itemize}
|
|
\item Kieker::Record::Trace
|
|
\item Kieker::Record::OperationEntryEvent // OperationExitEvent
|
|
\begin{itemize}
|
|
\item Zeigen Start und Ende einer Funktion an
|
|
\item Benötigte Daten: Funktionsname, Paketname, Zeitstempel, Trace, OrderIndex
|
|
\item Rekonstruktion durch Kieker.Analysis
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Kieker-Data-Bridge}
|
|
\begin{frame}{Kieker-Data-Bridge I}
|
|
\includegraphics[width=0.95\textwidth]{images/kieker-data-bridge}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Kieker-Data-Bridge II}
|
|
\begin{itemize}
|
|
\item Entwickelt aus dem MENGES-Projekt heraus
|
|
\item Stellt eine einheitliche Schnittstelle für neue Erweiterungen dar
|
|
\item Verschiedene Konnektoren \\
|
|
(TCP Client, TCP Server, JMS Client, JMS Embedded)
|
|
\item Empfängt Binärdaten und Textnachrichten
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Kieker-Data-Bridge III}
|
|
\begin{itemize}
|
|
\item Textnachrichten mit Semikolon getrennt
|
|
\item Records werden mit Mapping-Datei identifiziert
|
|
\item Parameter hängen von Record-Typ ab
|
|
\item Beispiel: \texttt{1;1362747533540734000;6889; \\5;EPrints.current\_repository;EPrints}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\section{Instrumentierung}
|
|
|
|
\begin{frame}{Automatische Instrumentierung}
|
|
\begin{itemize}
|
|
\item Verwendung von CPAN-Modul Sub::WrapPackages
|
|
\item Automatische Erstellung von Wrappern
|
|
\item[] \includegraphics[width=0.7\textwidth]{images/Instrument-Code}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\section{Testdurchführung}
|
|
\subsection{System}
|
|
\begin{frame}{Vergleichstest}
|
|
\begin{itemize}
|
|
\item Virtuelle Maschine unter Ubuntu 12.04 LTS
|
|
\item Datenbasis vom GEOMAR vom 7. Februar 2013
|
|
\item Vergleich von EPrints 3.2 und Kielprints
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Komponenten}
|
|
\begin{center}
|
|
\includegraphics[width=0.7\textwidth]{images/Kielprints-Deployment}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\subsection{Requests}
|
|
\begin{frame}
|
|
\begin{itemize}
|
|
\item 5 beispielhafte Anfragen auf der Admin-Oberfläche
|
|
\item Anwendungsfall \emph{Neue Publikation eintragen} (Skizze)
|
|
\item 4 normale Requests, 1 AJAX Request
|
|
\item[] \includegraphics[width=0.7\textwidth]{images/Screenshot-Trace4}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\section{Ergebnisse}
|
|
\subsection{Zeitliches Verhalten}
|
|
\begin{frame}[shrink=15]{Zeitmessungen}
|
|
\begin{table}
|
|
\begin{tabular}{l|rrrrr}
|
|
Request & 1 & 2 & 3 & 4 & 5 \\
|
|
\hline
|
|
EP norm. & 402 ms & 220 ms & 136 ms & 413 ms & 348 ms \\
|
|
EP inst. & 15389 ms & 15043 ms & 18408 ms & \textbf{23430 ms} & \textbf{7066 ms} \\
|
|
\hline
|
|
KP norm. & 10270 ms & 227 ms & 166 ms & 13420 ms & 18890 ms \\
|
|
KP inst. & 28505 ms & 16623 ms & 17414 ms & \textbf{280927 ms} & \textbf{342662 ms} \\
|
|
\hline
|
|
F1 & 25,5 & 1,0 & 1,2 & 32,5 & 54,3 \\
|
|
F2 & 1,8 & 1,1 & 0,9 & 11,9 & 48,5
|
|
\end{tabular}
|
|
\caption{Zeitliches Verhalten von Eprints und Kielprints vor und nach Instrumentierung}
|
|
\end{table}
|
|
\textbf{Requests}
|
|
\begin{enumerate}
|
|
\item Admin Homepage
|
|
\item Neue Publikation eintragen
|
|
\item Dateiupload
|
|
\item Metadaten
|
|
\item AJAX: Mehr Autorenfelder
|
|
\end{enumerate}
|
|
\end{frame}
|
|
\subsection{Funktionsaufrufe}
|
|
\begin{frame}[shrink=15]{Funktionsaufrufe}
|
|
\begin{table}[h!tb]
|
|
\begin{tabular}{l|rrrrr|r}
|
|
Request & 1 & 2 & 3 & 4 & 5 & Summe \\
|
|
\hline
|
|
Eprints & 20875 & 28590 & 33171 & 43056 & 16980 & 142672 \\
|
|
% \hline
|
|
Kielprints & 31742 & 36681 & 40165 & 905580 & 934760 & 1948928 \\
|
|
% \hline
|
|
Faktor & 1,5 & 1,3 & 1,2 & 21,0 & 55,1 & 13,7
|
|
\end{tabular}
|
|
\caption{Funktionsaufrufe von EPrints und Kielprints}
|
|
\end{table}
|
|
\end{frame}
|
|
\subsection{Aktive Pakete}
|
|
\begin{frame}[shrink=10]{Aktive Pakete}
|
|
\begin{table}[h!tb]
|
|
\begin{tabular}{lrlr}
|
|
\textbf{EPrints} & \textbf{Aufrufe} & \textbf{Kielprints} & \textbf{Aufrufe} \\
|
|
EPrints.Script.Compiler & 30304 & EPrints.MetaField & 501872 \\
|
|
EPrints.Repository & 25980 & EPrints.DataSet & 253493 \\
|
|
EPrints.MetaField & 18374 & EPrints.Repository & 243699 \\
|
|
EPrints.XML & 12486 & EPrints.Database & 189624 \\
|
|
EPrints.DataSet & 7488 & EPrints.DataObj & 156391 \\
|
|
EPrints.Utils & 7220 & EPrints.MetaField.Id & 155978 \\
|
|
EPrints.XML.EPC & 5703 & EPrints.Utils & 118036 \\
|
|
EPrints.DataObj & 5439 & EPrints.XML & 107939 \\
|
|
EPrints.Database & 3466 & EPrints.MetaField.Multilang & 45312 \\
|
|
EPrints.Script.Compiled & 3404 & EPrints.Script.Compiler & 39550
|
|
\end{tabular}
|
|
\caption{Die 10 aktivsten Pakete}
|
|
\end{table}
|
|
\end{frame}
|
|
\subsection{Abhängigkeiten}
|
|
\begin{frame}{Abhängigkeitsgraph EPrints}
|
|
\begin{center}
|
|
\includegraphics[width=0.6\textwidth]{images/Dependency-Graph-EPrints}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Reduzierter Abhängigkeitsgraph}
|
|
\begin{center}
|
|
\includegraphics[width=0.65\textwidth]{images/Condensed-Dependency-Graph}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
|
|
\section{Fazit}
|
|
|
|
\begin{frame}{Fazit}
|
|
\begin{itemize}
|
|
\item Es wurde ein erstes Monitoringverfahren für Perl-Anwendungen etabliert.
|
|
\item Die Perl-Data-Bridge wurde das erste Mal \emph{produktiv} eingesetzt.
|
|
\item Es wurde ein Vergleichstest von EPrints und Kielprints durchgeführt.
|
|
\item Es wurden häufige Datenbankanfragen in Kielprints festgestellt.
|
|
\item Es wurden Schwächen in der Architektur sowohl von EPrints und Kielprints erkannt.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\end{document} |