ProjINF - Reduzierung der Netzwerklast von CEP unter Zuhilfenahme von Datenbanken Benjamin Braun† , Karsten Schatz‡ , und Vethiga Srikanthan∗ Abstract— Die Bedeutung von Complex Event Processing (CEP) nimmt heutzutage immer weiter zu. Sei es bei der Analyse bzw. Überwachung von Börsendaten oder bei der Beobachtung von Geschäftsprozessen. Für solche Fälle verwendet man meist stark verteilte Systeme, da zum Beispiel bei der Überwachung des Weltmarktes Daten aus vielen verschiedenen Quellen weltweit benötigt werden. In aktuellen CEP-Systemen werden jedoch zumeist alle erzeugten Daten übertragen, um die Verfügbarkeit aller relevanten Werte zu gewährleisten. Dies kann unter Umständen eine sehr hohe Netzwerklast verursachen. In dieser Arbeit präsentieren wir einen Ansatz, der die anfallenden Daten in Klassen von hochfrequenten und niederfrequenten Datenströmen einteilt, um mit Hilfe dieser Einteilung die Netzwerklast zu verringern. Hierbei werden die hochfrequenten, also für die Netzwerklast schlechteren, Datenströme nicht versandt, sondern in einer Datenbank zurückgehalten. Wird das Eintreffen von niederfrequenten Daten detektiert, werden die relevanten hochfrequenten Daten aus der Datenbank abgefragt. Bei entsprechendem Verhältnis von niederfrequenten zu hochfrequenten Daten kann dies die Netzwerklast um über 90% vermindern, wie wir auch in einigen Experimenten zeigen. Index Terms—Complex Event Processing, Verringerung von Netzwerklast. 1 E INFÜHRUNG Complex Event Processing (kurz CEP) bezeichnet Techniken, Methoden und Werkzeuge, die Ereignisse zeitnah verarbeiten. Dabei werden sogenannte Events bearbeitet. Es gibt zwei Arten von Events: Einfache Events und komplexe Events. Einfache Events enthalten Werte von z.B. Sensoren. Werden diese Events vom CEP-System gefiltert, zusammengefügt und miteinander verglichen, stellen die Ergebnisse dann komplexe Events dar. Diese komplexen Events können wiederum zu einem komplexen Event weiterverarbeitet werden. Das CEPSystem verarbeitet Eventströme von einer oder mehreren Informationsquellen. Diese Eventströme enthalten zeitlich geordnete Werte, also Events, die sowohl eine fachliche Information, als auch einen Zeitstempel enthalten. samte CEP-Systems besteht aus einem Netzwerk von mehreren CEPEngines, die miteinander kommunizieren. Bei ständiger Übertragung der Events ist die Netzwerklast sehr hoch. Im System werden Events übertragen, die für die Erkennung von komplexen Events nicht notwendig sind. Es muss eine Lösung gefunden werden, durch die die Last im Netzwerk reduziert werden kann, ohne relevante Informationen zu verlieren, indem man diese nicht relevanten Events nicht überträgt. In unserem Anwendungsbeispiel soll die Temperatur das hochfrequente Event und der Niederschlag das niederfrequente Event sein. Ein Niederschlagswert über 10l/m2 tritt nicht so häufig auf, wie ein Temperaturwert unter 4 ˚ C. Es entstehen also viele Temperaturwerte, die nicht relevant für den Schneefall sind, da der Niederschlag nicht so häufig über 10l/m2 ist. Es müsste also genügen die Temperatur nur bei einem Niederschlagswert über 10l/m2 auszulesen und auf die Bedingung für ein komplexes Event hin zu prüfen. Um die Netzwerklast zu reduzieren, müssen wir also einen Weg finden, bei dem Ereignisse, die häufig auftreten, abgespeichert und bei Bedarf entnommen werden. Ereignisse, die nicht so häufig auftreten, sollen kontinuierlich weitergeleitet werden. In unserem Fall sollte der Temperaturwert nicht verloren gehen, aber auch nicht ständig übertragen werden. Hier führen wir eine Datenbank ein. In dieser Datenbank werden Temperaturwerte gespeichert. Sie werden also abrufbereit gelagert. Tritt dann ein Niederschlagswert ein, bei dem Schneefall möglich ist, wird die Temperatur aus der Datenbank erfragt. So werden nur die Events übertragen, die relevant sein könnten. Im Folgenden klären wir in Sektion 2 (Systemmodell) einige grundlegenden Begriffsbedeutungen und die allgemeine Funktion unseres Systems. In Sektion 3 geben wir eine genaue Erklärung für unser System wie Datenbank und Trigger genau funktionieren. Zusätzlich erläutern wir auch Hindernisse, die wir dabei entdeckt haben. In Sektion 4 stellen wir unsere Testergebnisse für unser System dar. Hierbei betrachten wir sowohl die Netzwerklast, als auch die Berechnungsdauer unseres Systems im Vergleich zur Methode ohne Datenbank. In Sektion 5 geben wir noch einen Überblick über verwandte Arbeiten auf diesem Gebiet und stellen dar, wie die aktuelle Situation aus wissenschaftlicher Sicht ist. In Sektion 6 fassen wir unsere Arbeit zusammen und geben einen kurzen Ausblick auf Dinge, mit der wir unsere Arbeit erweitern könnten. Abbildung 1: Beispiel für CEP Betrachten wir nun folgende Situation: Der Winterdienst möchte anhand von Wetterdaten bestimmen, ob Schneegefahr besteht. Dazu benötigt man die aktuelle Temperatur und die Menge des Niederschlags. Diese Werte werden als einfache Events empfangen. Man muss jedoch festsetzen, bei welchen Werten Schnee möglich ist. Dazu verwendet man komplexe Events, die z.B. aussagen, dass der Niederschlag über 10l/m2 und die Temperatur unter 4 ˚ C sein muss. Um komplexe Events zu berechnen, werden Operatoren verwendet. Ein Operator nimmt einfache Events entgegen und überprüft, ob die Bedingungen für komplexe Events erfüllt sind. Sind diese Bedingungen erfüllt, so meldet der Operator das Eintreten des komplexen Events. Um Operatoren zu beschreiben, werden in der Praxis Event Processing Languages (EPLs) verwendet, die in der Regel ähnlich zu SQL sind. Operatoren wiederum werden in CEP-Engines ausgeführt. In dieser Arbeit wird als CEP-Engine Esper verwendet. Das ge- 2 † Benjamin Braun ‡ Karsten Schatz ∗ Vethiga Srikanthan 1 S YSTEMMODELL Das System, das uns vorliegt, ist ein CEP-System. Es ist ein Netzwerk von Operatoren, welche durch Eventströme verbunden sind. Über diese Eventströme werden Events verschickt. Sowohl der Sender, als auch Abbildung 2: Systemmodell der Empfänger sind also Operatoren, die in CEP-Engines ausgeführt werden. Der Operator, der als Sender fungiert, verschickt die gemessenen oder erzeugten Werte. Der Empfänger erhält die in Events enthaltenen Werte und verarbeitet diese zu neuen, komplexen Events. Leitet der zweite Operator das Event erneut weiter, funktioniert in diesem Fall der Operator sowohl als Empfänger, als auch als Sender. Somit haben wir eine Verarbeitungskette. Die Verbindung zwischen allen Sendern und Empfängern ist also unser Netzwerk (Abbildung 2). Operatoren im System implementieren somit eine Funktion, die den Eingang auf den Ausgang bildet. Seien e1 und e2 Events, die vom Sender verschickt werden. Somit führen die Operatoren folgendes aus: f (e1 , e2 ). Doch bei diesem System ist erkennbar, dass die Last auf den Eventströmen bei ständiger Übertragung sehr hoch ist. Unser Ziel ist es, eine Lösung zu finden, durch die bereits nahe dem Sender Events abgefangen werden und somit eine geringe Netzwerklast zu erreichen. Dazu wird für jeden Eventstrom überprüft, ob eine kontinuierliche Übertragung notwendig ist, oder ob die Netzwerklast durch zurückhalten des Stroms effektiv optimiert werden kann. Abbildung 3: Aufbau unseres Systems nach der ersten Esper-Instanz die Ansteuerung der Datenbank durchführt. Sobald ein niederfrequentes Event durch die erste CEP-Instanz, der Esper-Instanz, festgestellt wird, wird eine SQL-Abfrage für die Datenbank vom Trigger erstellt und durchgeführt. Diese erfragt von der Datenbank alle für die registrierten komplexen Eventbeschreibungen nötigen Events. Nach Erhalt der Events aus der Datenbank werden diese in den Eventstrom der zweiten Esper-Instanz eingespeist gefolgt vom verursachenden Event. Die zweite Esper-Instanz überprüft an den Events aus dem zweiten Eventstrom, ob die Bedingungen für ein komplexes Event erfüllt sind und teilt dem System, wie bereits erwähnt, deren Auftreten mit. Das Netzwerk ist beim verteilten CEP üblicherweise stark ausgelastet und soll mit Hilfe der Datenbank entlastet werden. Die Datenbank enthält einfache Events, die momentan nicht zur Weiterverarbeitung benötigt werden. Alle Events werden nach der Reihe, wie sie bei der Datenbank eintreffen, sortiert. Jedes Event bekommt eine ID und einen Zeitstempel, die zur Weiterverarbeitung benötigt werden. 3 S YSTEMANSATZ Um unseren Ansatz zu beschreiben, betrachten wir im Folgenden einen einzelnen Operator des CEP-Systems. Sei o3 aus Abbildung 2 der betrachtete Operator. Dieser besitzt zwei Eingangsströme, welche verarbeitet werden. Einer dieser Eingangsströme ist hochfrequent (angenommen o1 ), der andere niederfrequent (o2 ). Da immer Events beider Ströme gekoppelt und gemeinsam verarbeitet werden, werden nur wenige Events des hochfrequenten Stroms wirklich verwendet. Deshalb können wir alle Events des hochfrequenten Stroms in einer Datenbank abspeichern und bei Bedarf entnehmen. Niederfrequente Events werden, wie in Abbildung 3 skizziert, an einen Trigger übergeben, jedoch nicht in der Datenbank gespeichert. Zuvor werden diese Events von einer erste CEP-Engine (Engine Instanz 1) überprüft. An dieser Stelle wäre nicht zwangsläufig eine CEP-Instanz notwendig um das schlichte Eintreffen von Events zu detektieren, jedoch kann hier eine Vorfilterung durchgeführt werden, um später die Netzwerklast noch weiter einschränken zu können. Wird nun ein niederfrequentes Event festgestellt, werden sowohl das niederfrequente als auch das hochfrequente Event aus der Datenbank von einer zweiten CEP-Engine (Engine Instanz 2) überprüft, um festzustellen, ob die Bedingungen für ein komplexes Event erfüllt sind. Deren Auftreten wird dann dem System mitgeteilt. 4.1 Datenbank Die Datenbank ist in diesem Konzept einzig und allein zur Abspeicherung von schnell hintereinander eintreffenden Events ausgelegt. Esper bietet drei unterschiedliche Eventrepräsentationen an. Die am einfachsten umzusetzende dieser drei ist das Java-Objekt. Die Abspeicherung von XML-Events beispielsweise, würde eine XML-Datenbank erfordern, was nachweislich den Netzwerktraffic in die Höhe treiben würde, da zusätzlich zu den reinen Daten auch noch die XMLBeschreibung übertragen werden müsste. Es existiert eine ganze Reihe von Java-Bibliotheken, die die Abspeicherung von Objekten in Datenbanken anbieten. Unsere Wahl fiel auf EclipseLink. Die einzige Restriktion dieser Bibliothek ist die Einschränkung auf weitgehend primitive Datentypen. Events bestehen fast definitionsgemäß nur aus primitiven Werten bzw. Datentypen, somit ist dies nicht hinderlich. Außerdem muss es sich bei dem übergebenen Objekt um ein JavaBean handeln. Diese spezielle Form eines Java-Objekts stört Esper nicht in dessen Ausführung, bietet aber für die weitere Verarbeitung im Trigger noch weitere Vorteile, womit dies 4 S YSTEMIMPLEMETIERUNG Der in Kapitel 3 vorgestellte Ansatz wurde prototypisch implementiert. Dabei kamen die Esper Korellationsengine als CEP-Engine, und eine SQL Datenbank zum Einsatz. Dazu wurde ein Trigger erstellt, der 2 auch keine wirkliche Einschränkung darstellt. So wird für jede Art von schnellem Event eine eigene Tabelle in der Datenbank angelegt. Dies vereinfacht die spätere Abfrage der Events stark. Es ist jedoch notwendig, noch zwei weitere Restriktionen einzuführen. Da wir mit der Einspeicherung in der Datenbank quasi die Einspeisung des Events in Esper modellieren wollen und Esper sich die Ankunftszeit eines jeden Events merkt, muss jedes Event einen Zeitstempel besitzen, welcher bei Einspeicherung in die Datenbank gesetzt wird. So können später Anfragen, die sich auf die Ankunftszeit beziehen, leicht abgehandelt werden. Des weiteren fordern wir einen eindeutigen, nach der Ankunftszeit fortlaufenden Schlüssel, also einen Primary Key. Aufgrund der schnellen Verarbeitungszeiten ist dieser notwendig, da Events teils so schnell abgespeichert werden, dass sie denselben Zeitstempel besitzen und dieser somit nicht als Primary Key dienen kann. Im folgenden wird nun der Trigger beschrieben, dass Schlüsselelement des Systems. 4.2 Es wäre zwar möglich gewesen deren Funktionalität auf SQLViews abzubilden, jedoch ist das mit EclipseLink eine umständliche Aufgabe. Es erschien naheliegender, den Where-Clause der Anfrage zu erweitern bzw. die Anzahl der Ergebnisse einzuschränken, was jedoch zu ganz eigenen Problemen führt. So fordert z.B. die Verwendung von B.win : length(4) nicht die letzten 4 Events für die der Where-Clause gilt, sondern es schränkt den Sichtbereich prinzipiell im Vorhinein auf die Anzahl 4 ein. Die SQL-Anfrage hingegen, bei der mittels order by B.id desc limit 4 die letzten 4 Ergebnisse angezeigt werden, gibt als Ergebnis nicht die letzten 4 Events aus und überprüft dann, ob der Where-Clause gilt. Sie überprüft vielmehr zuerst den Where-Clause und schränkt dann die Anzahl der Ergebnisse auf die letzten 4 ein. Somit würden beide Varianten unterschiedliche Ergebnisse produzieren. Gelöst wird dieses Problem, indem zunächst die maximale Event-Id aus der spezifischen Datenbank abgefragt wird, um diese dann für den Where-Clause weiterzuverwenden. Da dieser zuerst überprüft wird, erhält man nun das gewollte Ergebnis. Das produziert zwar einen leichten Netzwerk-Overhead, jedoch ist dieser so gut wie vernachlässigbar, da nur die verhältnismäßig sehr kleine Id und die Anfrage danach übertragen wird. Die Handhabung von Views, die sich nicht auf die Anzahl der Events sondern auf die Zeit beziehen, in der sie ankamen, unterscheidet sich davon stark. Da wir fordern, dass jedes Event einen Zeitstempel mit sich führt, kann beispielsweise bei dem View B.win : time(5 min 3 sec) der Zeitausdruck geparst werden und ein neuer Zeitstempel berechnet werden. Dieser liegt dann die geforderten 5 Minuten und 3 Sekunden vor der Ankunftszeit des auslösenden langsamen Events und kann nun mit den Zeitstempeln der in der Datenbank befindlichen Events verglichen werden. Trigger Der Trigger ist der Hauptbestandteil unseres Konzepts. Er verwaltet eintreffende Events aus der ersten Esper-Instanz, führt die entsprechenden Datenbankanfragen durch und leitet dann die abgefragten Events and die zweite Esper-Instanz weiter. 4.2.1 Grundprinzip Der Listener, der aktiv wird, wenn in der ersten Esper-Instanz ein hereinkommendes Event detektiert wurde, leitet dieses Event komplett an den Trigger weiter, daraufhin wird dieser aktiv. Es wird überprüft, ob die zweite Instanz EPL-Statements hält, für welche das hereinkommende Event relevant wäre. Ist dies der Fall, startet das umschreiben der EPL-Statements. Hierbei machen wir uns die Ähnlichkeit der Esper-EPL zu SQL zunutze und manipulieren die Statements so, dass das Ergebnis eine äquivalente SQL-Anfrage darstellt. Soll z.b. bei Auftreten eines Events A das letzte Event B detektiert werden und B ausgegeben werden, so wäre der zugehörige EPL-Ausdruck: 4.2.3 Where-Clauses Nicht nur die Views sondern auch die Where-Clauses fordern hier eine Bearbeitung. So kann in einer EPL-Anweisung eine Referenz auf ein langsames Event enthalten sein, dessen Eventklasse nicht in der Datenbank abgespeichert wird. So würde die Datenbank versuchen, mit ihr unbekannten Daten zu arbeiten, was natürlich unmöglich ist. Es ist also erforderlich, die vom langsamen Event schon bekannten Werte in die Anfrage anstatt der zugehörigen Variablen einzusetzen. Das erfordert eine Erkennung der Aliase die im f rom-Teil des Ausdrucks beschrieben werden. Diese ist recht einfach zu implementieren. Wie schon in Abschnitt 4.2.1 präsentiert wird dann der Platzhalter (a.timestamp) durch den bekannten Wert ersetzt (’2009 − 09 − 21 14 : 45 : 23’). Die leicht abgeändert Anfrage von dort sei hier nochmal aufgeführt: select b from B . s t d : l a s t e v e n t ( ) a s b , A. s t d : l a s t e v e n t ( ) as a where b . b e f o r e ( a ) Die äquivalente MySQL-Anfrage wäre nun (wenn der Timestamp von A ’2009 − 09 − 21 14 : 45 : 23’ ist): select b from B b where b . timestamp < ’ 2009−09−21 1 4 : 4 5 : 2 3 ’ o r d e r by b . i d d e s c limit 1 select b from B . s t d : l a s t e v e n t ( ) a s b , A. s t d : l a s t e v e n t ( ) as a where b . timestamp < a . timestamp and a . n i e d e r s c h l a g > 5 and b . t e m p e r a t u r e < 4 Befehle der Esper-Intervallalgebra wie b.be f ore(a) sind in unserem Falle redundant, da wir fordern, dass jedes Event ein TimestampFeld besitzt. Kennt man die Eintrittszeit der Events können alle Befehle der Intervallalgebra leicht nachgebildet werden. So kann hier z.B. where b.be f ore(a) durch where b.timestamp < a.timestamp ersetzt werden. Im Folgenden soll darauf eingegangen werden, wie wir mit den einzelnen Komponenten des Ausdrucks umgehen, um ihn in eine äquivalenten SQL-Ausdruck umzuwandeln. Zum einen wird auf Window Views eingegangen. Dies sind bestimmte EPL-Ausdrücke, die die Anzahl der betrachteten Events einschränken können. Zum anderen wird berichtet, wie man den bereits vorhandenen Where-Clause der EsperEPL in eine SQL-Anfrage übernehmen kann. 4.2.2 Die Where-Clauses können auch, wie der eben gezeigte, nach dem Einsetzen der bekannten Werte überflüssige Abschnitte erhalten. Beispielsweise könnte unser Verfahren den Ausdruck and 3 > 5 produzieren. Dieser kann augenscheinlich von keinem Event erfüllt werden, obwohl die komplette Datenbankabfrage zweifelsfrei korrekt ist. Sie produziert nur zusätzlichen Netzwerktraffic, ohne ein relevantes Resultat zu liefern. Für solche schon im Vorhinein bei der Erstellung des Ausdrucks erkennbaren Fälle ist die erste Esper-Instanz als Problemlösung vorgesehen. Die Erkennung solcher Fälle muss jedoch anwenderseitig geschehen. Wird hier dieser Problemfall erkannt, kann and a.niederschlag > 5 aus dem Ausdruck gestrichen werden. Jedoch muss dann bei der ersten Instanz der ursprüngliche Erkennungsausdruck select ∗ f rom A zu Window Views Zu den Window Views zählen in der Esper-EPL Ausdrücke wie .std : lastevent(), .win : time() oder .win : length(). Diese lassen sich in zwei grundlegende Arten einteilen. Zum einen existieren Views, die sich auf die (Ankunfts-)Zeit von Events beziehen, zum anderen existieren Views die sich auf deren Anzahl beziehen. select a from A a where a . n i e d e r s c h l a g > 5 3 erweitert werden. Dies filtert zuverlässig irrelevante Events und spart sowohl Netzwerktraffic als auch Rechenzeit, da der Trigger mit den so herausgefilterten Events nicht mehr arbeiten muss. Im nächsten Abschnitt wollen wir nun die Effizienz der soeben beschriebenen Methoden durch Messungen belegen. Hieraus sieht man nun das mit größer werdender Differenz der Häufigkeit, Esper mit Datenbank eine geringere Netzwerklast hat. Der Schnittpunkt der Netzwerklasten von Esper mit Datenbank und Esper ohne Datenbank liegt in unserem Experiment bei einem Verhältnis von einem langsamen Event zu 3 schnellen Events. Das bedeutet, dass sich die Datenbank erst ab einem Verhältnis von ca. 1:3 lohnt, wie im nachfolgenden Abbildung 6 ersichtlich wird. 5 E VALUATION Nun werden wir in Esper unterschiedliche Bedingungen testen. Wir werden evaluieren, wie man im Durchschnitt die geringste Netzwerklast erreicht, aber auch wie die geringste Rechendauer erreicht werden kann. Zu den Tests wurde als Testmaschine, auf der Esper läuft, ein Intel Core i7-2600K bei 4,0 GHz mit 16Gb RAM verwendet. Als Datenbankserver wurde ein Intel Pentium IV Rechner bei 3,0 GHz mit 1GB RAM verwendet. 5.1 Netzwerklast Zuerst werden wir unser Konzept, also die Netzwerklast von Esper mit angeschlossener Datenbanken, betrachten. Hierbei gehen wir davon aus, dass immer nur ein Event aus der Datenbank abgefragt wird, deren Netzwerklast sinkt, wenn das langsamere Event, das nicht in die Datenbank gespeichert wird, um einiges langsamer ist als das schnelle Event, welches in der Datenbank gespeichert wird. Die Kurve nähert sich immer weiter der 0 an, wie in Abbildung 4 zu sehen ist. Die zusätzliche Netzwerklast, die durch Verwendung bestimmter Window Views entsteht ist hierbei schon berücksichtigt. Abbildung 6: Kombinierter Netzwerktraffic aus Abbildung 4 und 5 Betrachtet man nun die prozentuale Einsparung von Esper mit Datenbank gegenüber Esper ohne Datenbank sieht man, dass ab einem Verhältnis von 1:3 die prozentuale Einsparung logarithmisch ansteigt. Esper mit Datenbank spart bei einem Verhältnis von 1:5 die Hälfte der Netzwerklast und bei einem Verhältnis von 1:10 werden sogar 90% an Netzwerklast eingespart, wie in Abbildung 7 ersichtlich wird. Abbildung 4: Unser Ansatz: Netzwerktraffic Abbildung 7: Unser Ansatz: Einsparung von Netzwerktraffic Dabei erkennt man, dass Esper mit Datenbank bei der Netzwerklast, mit zunehmend größerem Verhältnis zwischen schnellen und langsamen Events, konstant besser wird, als Esper ohne Datenbank. 5.2 Berechnungsdauer Die Berechnungsdauer von Esper ist kürzer wenn keine Datenbank verwendet wird, da keine zusätzliche Zeit für Datenbankabfragen benötigt wird. Hierzu haben wir Tests durch geführt und die Berechnungsdauer für eine Anzahl von 1-50 Anfragen gemessen. Diese liegen bei Esper ohne Datenbank auf unserem System im Schnitt bei etwa 2, 3ms pro Anfrage, wie aus Abbildung 10 ersichtlich wird. Die hier zu sehenden Ausreißer können im Zuge der Messtoleranz und geringen Störungen vernachlässigt werden. Vergleicht man diese Messungen mit den Ergebnissen der Messung auf unserem System bei Esper mit Datenbank, sieht man sofort, dass die Variante mit Datenbank immer eine längere Berechnungszeit besitzt, was auf die zusätzliche Zeit für die Abfrage der Datenbank zurückzuführen ist. Aber im Abbildung 5: Esper: Netzwerktraffic Wenn mehr als ein Event aus der Datenbank abgefragt wird, verschiebt sich die Kurve pro Event um ca. 60 B/s nach oben. Die Netzwerklast bei Esper ohne Datenbank hingegen nimmt mit größer werdendem Unterschied der Häufigkeit der beiden Eventströme konstant zu. Was in Abbildung 5 illustriert wird. 4 Abbildung 8: Rechendauer von Esper Abbildung 10: Verhältnis von abgefragten Events zur Rechendauer bei einer lokalen Event-Datenbank Gegensatz zu Esper ohne Datenbank nimmt die Bearbeitungszeit bei Esper mit Datenbank, bei einer höheren Anzahl von Eventanfragen, konstant zu, wie in Abbildung 9 gut zu sehen ist. Abbildung 11: Verhältnis von abgefragten Events zur Rechendauer Sterne: Unser Ansatz, entfernte Datenbank Striche: Unser Ansatz, lokale Datenbank Rauten: Esper ohne Datenbankeinsatz Abbildung 9: Verhältnis von abgefragten Events zur Rechendauer bei einer entfernten Event-Datenbank dazu geeignet, Netzwerklast zu sparen, wenn das Verhältnis von langsamen zu schnellen Events über ca. 1 : 3 liegt. Obiges Diagramm zeigt nun die Ergebnisse eines Tests, in dem Esper die Events über ein Netzwerk auf einem externen Server abfragt. Da dies einiges länger dauert als ohne Datenbank, werden wir nun auch noch einen Testfall betrachten, in dem wir die Datenbank mit der Engine auf dem gleichen Rechner haben. Auch hier bekommen wir eine konstant ansteigende Kurve, genau wie beim vorigen Test mit der Datenbank, wie in Abbildung 10 deutlich zu sehen ist. Bei der lokalen Datenbank ist die Kurve flacher als bei der entfernten Datenbank, was daran liegt das die Events bei der lokalen Datenbank eine geringere Übertragungsdauer haben als die Events einer entfernten Datenbank. Eine lokale Datenbank ist die schlechteste der möglichen Lösungen, da hier natürlich keinerlei Netzwerklast durch die Datenbank gespart werden kann. Somit würde nur die Berechnungsdauer erhöht ohne weiteren Nutzen und eine Variante ohne Datenbank wäre effizienter. Deswegen sollte man die Datenbank natürlich direkt beim Sender installieren. Damit wird keine weitere Netzwerklast benötigt, um die Events in die Datenbank zu speichern. 5.3 6 R ELATED W ORK Die Wichtigkeit von Complex Event Processing Systemen nimmt ständig zu, somit sind diese auch ein wichtiger Forschungsgegenstand. Insbesondere nimmt hier die Bedeutung von verteilten Systemen zu, sei es zur Überwachung von Finanzmärkten oder zur schnellen Verarbeitung von Sensordaten. So wird in [5] auf CEP in Unternehmenssystemen eingegangen. Werden Events von vielen verschiedenen Quellen bezogen, kann es möglich sein, Erkennungspläne festzulegen, die die Performance des CEP-Systems erhöhen, auch bezüglich der Netzwerkauslastung. Diese können sich stark von naiven komplexen Events unterscheiden [1]. Um solche Erkennungspläne zu erstellen, können beispielsweise deterministische endliche Automaten als Hilfsmittel herangezogen werden. Ein ähnliches Ziel wird auch in [7] verfolgt, jedoch wird hier nicht die Verringerung der Netzwerklast als eines der Hauptziele angestrebt. Vielmehr wird darauf eingegangen, möglichst viele Beschreibungen komplexer Events gleichzeitig verarbeiten zu können. Bei beiden vorangegangen Ansätzen werden zwar, ebenso wie bei unserem, CEP-Queries umgeschrieben, nur wird keine Klassifikation der unterschiedlichen Events vorgenommen, wie es bei uns der Fall ist. Ein weiterer Unterschied ist, dass in dieser Arbeit der Prozess des Umschreibens einem anderen Zweck dient. Wir schreiben um, um eine SQL-Query zu erhalten, mit der man die Events aus der Datenbank auslesen kann. In den beiden Arbeiten werden die EPL-Queries Wertung Wenn man nun die drei Methoden vergleicht, erkennt man leicht, dass die Variante ohne Datenbank in Hinsicht auf die Rechenzeit natürlich am Effizientesten ist, wie in Abbildung 11 zu sehen ist. Ab einem bestimmten Verhältnis, in unserem Testfall ca. 1 : 3, verursacht dies mehr Netzwerklast, was es ja zu verhindern gilt. Natürlich ist Esper mit einer Datenbank langsamer, aber auch effizienter in Hinsicht auf die Netzwerklast. Deswegen ist Esper mit Datenbank bestens 5 in äquivalente EPL-Queries umgeschrieben, um eine bessere Performance zu erzielen. Die Wichtigkeit der Platzierung von Operatoren wie unserer Datenbank in Netzwerken wird in [6] untersucht. Es wird eine Erweiterung für eine Netzwerkschicht präsentiert, die die Platzierung der Operatoren eigenständig regeln kann. Wichtig für diese Arbeit ist jedoch nur die Methodik, nach der dies geschieht. Mit der Übertragung von Dateien im Allgemeinen (in unserem Fall sind dies natürlich Events) beschäftigt sich [3]. Hierbei wird nicht nur auf das titelgebende Publish/Subscribe eingegangen, welches einen wichtigen Mechanismus für CEP-Systeme darstellt, sondern auch auf Techniken wie Remote Procedure Calls oder Message Queuing. Nichtsdestotrotz waren bei unserem Ansatz andere Kommunikationswege vonnöten, um das angestrebte Ziel zu erreichen. Relevant für diese Arbeit waren natürlich auch die Dokumentationen der verwendeten Software bzw. Bibliotheken. In [2] wird eine komplette Beschreibung der Funktionsweise von Esper und der EsperEPL vorgenommen. Auch wird eine Einführung in Complex Event Processing präsentiert. Die Beschreibung von EclipseLink und der Technik der Abspeicherung von Objekten in Datenbanken wird in [4] getätigt. 7 tems. In Data Engineering, 2006. ICDE ’06. Proceedings of the 22nd International Conference on, page 49, april 2006. [7] N. P. Schultz-Møller, M. Migliavacca, and P. Pietzuch. Distributed complex event processing with query rewriting. In Proceedings of the Third ACM International Conference on Distributed Event-Based Systems, DEBS ’09, pages 4:1–4:12, New York, NY, USA, 2009. ACM. Z USAMMENFASSUNG Um die Netzwerklast zu reduzieren führen wie eine Datenbank ein. Darin werden häufig auftretende Events abgespeichert und bei auftreten noch niederfrequente Events abgerufen. Dieses System kann mit zwei Esper-Instanzen erstellt werden. Hierzu entnimmt die erste Esper-Instanz ein niederfrequentes Event und leitet diese an die zweite Instanz weiter, wenn die Bedingungen für ein komplexes Event erfüllt sind. Anschließend werden die letzten hochfrequenten Events ebenfalls aus der Datenbank an die zweite Esper-Instanz weitergeleitet. Diese Methode ist bei einem Verhältnis von niederfrequenten zu hochfrequenten Events von 1 : 3 in der Netzwerklast besser als bei Esper ohne Datenbank. Dabei hat Esper mit Datenbank zwar eine längere Rechenzeit, spart jedoch signifikant viel Netzwerklast ein. Man kann noch weitere wenige Verbesserungen einführen, um Esper mit Datenbank noch effizienter zu machen. Zum Beispiel könnte man einen Eventpuffer bzw. einen Eventcache hinzufügen, damit die Events, die bereits abgefragt wurden, nicht noch ein weiteres mal abgefragt werden. Man könnte auch die gesamten Informationen aus der Datenbank auf mehrere Datenbanken verteilen oder mehrere Datenbanken unterstützen, dass jeder Event-Sender eine eigene Datenbank besitzt. Damit würde sich sowohl die Zugriffszeit als auch der Netwerktraffic noch weiter verringern. ACKNOWLEDGMENTS Zuletzt möchten wir uns noch bei unseren Betreuern, Björn Schilling und Beate Ottenwälder für die stetige Beratung und ihre schier endlos erscheinende Geduld bedanken. L ITERATUR [1] M. Akdere, U. Çetintemel, and N. Tatbul. Plan-based complex event detection across distributed sources. Proc. VLDB Endow., 1(1):66–77, Aug. 2008. [2] EsperTech. Esper Reference Documentation Version 4.5.0. http://http://esper.codehaus.org/esper-4.5.0/doc/ reference/en/pdf/esper_reference.pdf, 2011. [Online; accessed 15-April-2012]. [3] P. T. Eugster, P. A. Felber, R. Guerraoui, and A.-M. Kermarrec. The many faces of publish/subscribe. ACM Comput. Surv., 35(2):114–131, June 2003. [4] E. Foundation. EclipseLink Documentation. http://wiki. eclipse.org/EclipseLink/Documentation_Center, 2012. [Online; accessed 15-April-2012]. [5] D. C. Luckham. The Power of Events: An Introduction to Complex Event Processing in Distributed Enterprise Systems. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2001. [6] P. Pietzuch, J. Ledlie, J. Shneidman, M. Roussopoulos, M. Welsh, and M. Seltzer. Network-aware operator placement for stream-processing sys- 6