3 research outputs found
Eine Algebra für Cache-Modelle zum methodenbasierten Caching im Applikationsserver-Bereich
Der vorliegende Bericht behandelt vornehmlich die formalen
Aspekte für ein Verfahren zur Spezifikation von
Schreib-Lese-Abhängigkeiten für Methoden aus objektorientierten
Dienstschnittstellen.
Die Spezifikation der Schreib-Lese-Abhängigkeiten wird mit Hilfe
sogenannter Cache-Modelle repräsentiert; sie bestimmen, in
welcher Weise ein Methodenaufruf von einem anderen
Methodenaufruf bei der Nutzung der Dienstschnittstelle abhängt.
Cache-Modelle spielen eine wichtige Rolle beim konsistenten
Cachen von Methodenresultaten auf der Klientenseite eines
Applikationsserver-Systems. Ein Applikationsserver ist im
Kontext dieses Berichts ein Server oder Dienstgeber, der für
entfernte Klienten eine objektorientierte Dienstschnittstelle
mit Methoden anbietet.
Genauer besteht die Dientschnittstelle dabei aus einer Menge
abstrakter Klassen mit stark typisierten Methodensignaturen.
Ein methodenbasierter Cache dient zur Verbesserung vor allem der
Antwortzeiten eines Applikationsserversystems und hält bereits
einmal berechnete Methodenresultate von lesenden Aufrufen
bezüglich der Dienstschnittstellen beim Klienten vor.
Bei einem wiederholten Methodenaufruf vom Klienten kann das
Resultat des Aufrufs aus dem methodenbasierten Cache geholt
werden. Sofern der Aufruf mit den gleichen Argumenten wie zuvor
stattfindet und sofern das vorgehaltene Resultat gültig ist,
muss der eigentlich entfernte Methodenaufruf dann nicht an den
Applikationsserver gesendet werden.
Eines der größten Probleme beim methodenbasierten Caching ist
die Gültigkeit der beim Klient vorgehaltenen Methodenresultate
zuzusichern:
Das Resultat aus dem Cache sollte identisch sein zu dem
Resultat, das der entsprechende lesende Methodenaufruf bei
Übergabe an den Applikationsserver liefern würde. "Lesend"
bedeutet hier hauptsächlich, dass der Aufruf den Zustand des
Applikationsserver garantiert nicht verändert.
Um lesende Methodenaufrufe bzw. Methoden zu bestimmen und um
ungültig gewordene Methodenresultate aus dem Cache entfernen zu
können, spezifiziert ein Anwendungsentwickler ein Cache-Modell
bezüglich der vorhandenen Dienstschnittstelle.
Das Cache-Modell identifiziert solche Methoden, die
ausschließlich lesen und gibt vor, wie die Abhängigkeiten
zwischen schreibenden und lesenden Methoden im Klienten
berechnet bzw. abgeschätzt werden können. Dies geschieht
auf der Basis eines Formalismus, der im Rahmen des Berichts
diskutiert wird.
Bei der Spezifikation von Cache-Modellen ist es wichtig, dass
diese korrekt sind, das heißt, das sie die tatsächlichen
Scheib-Lese-Eigenschaften der Implementierungen der
Dienstmethoden reflektierten. Ansonsten besteht die Gefahr, dass
ein methodenbasierter Cache ungültige Methodenresultate an den
Klienten zurückliefert oder nicht alle schreibenden
Methodenaufrufe für notwendige Zustandsveränderungen an den
Applikationsserver delegiert.
Um die Korrektheit von Cache-Modellen abzusichern, wird hier ein
einfaches, wenig aufwändiges Testverfahren vorgeschlagen.
Streng genommen, kann damit allerdings nur die Anwesenheit von
Fehlern in einem Cache-Modell nachgewiesen werden (also
Inkorrektheit) und nicht deren Abwesenheit.
Der Entwickler eines Cache-Modells hat zahlreiche Freiheitsgrade
bei der Entwicklung eines Cache-Modells, denn es gibt im
Allgemeinen viele korrekte Cache-Modelle zu einer
Dienstschnittstelle. Weniger "präzise" Cache-Modelle schätzen
die Schreib-Lese-Eigenschaften von Dienstmethoden sehr grob
(aber konservativ) ab und sind mit geringem Aufwand zu
erstellen. Der resultierende Nachteil sind eventuell häufige und
unnötige Invalidierungen im Cache und geringe Cache-Trefferraten.
Präzisere Cache-Modelle hingegen führen meist zu besseren
Trefferraten, sind aber aufwändiger zu spezifizieren.
Der Bericht formalisiert alle angesprochenen Aspekte von
Cache-Modellen also deren Struktur, den Korrektheitsbegriff
sowie die Präzision. Letztere wird dabei als eine
Ordnungsrelation auf der Menge der korrekten Cache-Modelle zu
einer gegebene Dienstschnittstelle eingeführt.
Neben der Wahl der Präzision gibt es auch die Möglichkeit, dass
mehrere Entwickler verschiedene, aber korrekte Cache-Modelle zur
gleichen Dienstschnittstelle definieren. Unter anderem kann
damit eine Art Arbeitsteilung für die Entwickler erreicht
werden, so dass diese sich relativ unabhängig voneinander auf
verschiedene Teile der Dienstschnittstelle konzentrieren. Die
korrekten Cache-Modelle können dann durch eine besondere
Vereinigungsoperation zu einem gemeinsamen und korrekten
Cache-Modell zusammengeführt werden, dass mindestens so präzise
ist wie jedes der Operandenmodelle. In diesem Zusammenhang
werden drei Vereinigungsoperationen unterschiedlicher Qualität
und Komplexität vorgestellt und verschiedene, zum Großteil
praxisrelevante algebraische Eigenschaften für diese nachgewiesen.
Darüber hinaus wird die Möglichkeit zur Normalisierung von
Cache-Modellen untersucht, die allerdings vornehmlich von
theoretischem Interesse ist. Abschließend handelt der Bericht
einige Detailprobleme ab, die beim praktischen Einsatz eines
Methoden-Caches entstehen können
Adaptive Caching of Distributed Components
Die Zugriffslokalität referenzierter Daten ist eine wichtige Eigenschaft verteilter Anwendungen. Lokales Zwischenspeichern abgefragter entfernter Daten (Caching) wird vielfach bei der Entwicklung solcher Anwendungen eingesetzt, um diese Eigenschaft auszunutzen. Anschliessende Zugriffe auf diese Daten können so beschleunigt werden, indem sie aus dem lokalen Zwischenspeicher bedient werden. Gegenwärtige Middleware-Architekturen bieten dem Anwendungsprogrammierer jedoch kaum Unterstützung für diesen nicht-funktionalen Aspekt. Die vorliegende Arbeit versucht deshalb, Caching als separaten, konfigurierbaren Middleware-Dienst auszulagern. Durch die Einbindung in den Softwareentwicklungsprozess wird die frühzeitige Modellierung und spätere Wiederverwendung caching-spezifischer Metadaten gewährleistet. Zur Laufzeit kann sich das entwickelte System außerdem bezüglich der Cachebarkeit von Daten adaptiv an geändertes Nutzungsverhalten anpassen.Locality of reference is an important property of distributed applications. Caching is typically employed during the development of such applications to exploit this property by locally storing queried data: Subsequent accesses can be accelerated by serving their results immediately form the local store. Current middleware architectures however hardly support this non-functional aspect. The thesis at hand thus tries outsource caching as a separate, configurable middleware service. Integration into the software development lifecycle provides for early capturing, modeling, and later reuse of cachingrelated metadata. At runtime, the implemented system can adapt to caching access characteristics with respect to data cacheability properties, thus healing misconfigurations and optimizing itself to an appropriate configuration. Speculative prefetching of data probably queried in the immediate future complements the presented approach