Abschlussarbeiten von Baqend und der DBIS Arbeitsgruppe von Prof. Ritter
A/B-Tests sind eine im Web weit verbreitete Methodik, um neue Designs zu evaluieren oder die Empfänglichkeit von Nutzern/Kunden für bestimmte Angebote zu bestimmen. Typischerweise wird hierzu die Population der Nutzer (oder ein Teil davon) in 2 Gruppen unterteilt (normalerweise 50% vs. 50%). So kann beispielsweise eine Änderungen am Design der Webseite zunächst nur für eine der beiden Testgruppen ausgespielt werden, wobei die gleichen Metriken in beiden Gruppen erhoben werden. Durch den Vergleich der Messergebnisse zwischen beiden Gruppen kann kann zuverlässig ermittelt werden, ob die betrachtete Designänderung auch mit einer Verbesserung in den betrachteten Metriken einhergeht (beispielsweise Conversion Rate).
Es gibt diverse Tools die diese Funktionalität anbieten (Adobe Target, Trbo, ABTasty, …), welche jedoch alle einem kritischen Problem unterlegen sind: Die Durchführung eines A/B-Tests bedeutet nämlich einen gewissen Overhead beim Laden der Webseite und kann somit zu Lasten der Nutzererfahrung (UX) gehen und so auch die Ergebnisse maßgeblich verfälschen. Um diesen Effekt weitgehend zu vermeiden, wird bei der Webseitenbeschleunigung durch Speed Kit ein eigens entwickelter A/B-Testing-Ansatz genutzt. Das Ziel dieser Arbeit ist die Konzeption und prototypische Implementierung eines performance-optimierten A/B-Testing-Tools, welches die bereits in Speed Kit vorhandene Funktionalität erweitern kann.
Zunächst soll dazu die Tool-Landschaft für A/B-Testing genau analysiert werden, um eine Übersicht über übliche Features zu erstellen und ihre jeweiligen Auswirkungen auf die UX bzw. Performance herauszuarbeiten. Mit diesem Wissen soll dann in einem zweiten Schritt das Konzept eines A/B-Tools entworfen werden, das die Priorität auf Seitenperformance & UX setzt – im Zweifel auf Kosten der Funktionalität. In einem dritten Schritt soll der Ansatz prototypisch implementiert und evaluiert werden.
Heutige E-Commerce-Webseiten sind hochkomplex und so können selbst durch gründliche Qualitätssicherung und automatisierte Tests nicht alle Probleme vor Release aufgedeckt werden. Zusätzlich können durch Caching Layer oder Tools die frontend-seitige Veränderungen durchführen weitere Probleme auftreten. Um Umsatzeinbußen zu vermeiden, müssen daher Fehler im Betrieb umgehend erkannt und behoben werden. A/B Tests bieten die Möglichkeit lediglich einem Teil der Nutzer die neue Version auszuspielen und somit den möglichen Schaden gering zu halten. Hier werden dann verschiedene Metriken der beiden Gruppen miteinander verglichen um Auffälligkeiten und potentielle Fehlerquellen zu entdecken. Wenn keine A/B Tests vorhanden sind, können Vergleichswerte aus historischen Daten erhoben werden deren Überschreitung als Indikator dient.
Der Fokus dieser Arbeit liegt in der Erkennung von Fehlerszenarien anhand von Daten, die durch Real-User-Monitoring (RUM) auf Webseiten erhoben werden - sowohl in aufgeteilten Populationen (A/B Test) als auch auf Basis von Vergleichswerten.
Mögliche Anhaltspunkte für Vorliegen eines Fehlers könnten sein:
Im Rahmen der Arbeit sollen sowohl Analyseverfahren zur Erkennung von Fehlerszenarien erarbeitet als auch durch Einsatz von SQL (Batch-Verarbeitung) und Apache Flink (Echtzeitverarbeitung) praktisch umgesetzt werden. Zum Testen der erarbeiteten Lösung werden anonymisierte Daten aus Zeiträumen zur Verfügung gestellt, in denen tatsächlich Fehler beobachtet wurden. Diese wurden sowohl in A/B Tests, als auch in Vorher-nachher-Vergleichen mithilfe von Speed Kit erhoben.
Orestes ist eine datenbankunabhängige Cloud-Middleware für (NoSQL-)Datenbanken, die durch Caching extrem geringe Latenz erzielt. Orestes ist so konzipiert, dass durch die Implementierung bestimmter Schnittstellen (z.B. CRUD, Queries, Schemaänderungen) beliebige Datenbanken angebunden und durch eine Unified REST API einheitlich angesprochen werden können. Die Datenbank wird dabei automatisch angereichert um Fähigkeiten, die ihr sonst fehlen: Beispiele für solche Fähigkeiten sind etwa global verteiltes Web-Caching, semi-strukturierte Schemata und Zugriffskontrolle durch ACLs. Ziel der Arbeit ist die Anbindung des Systems PostgreSQL mit einer Studie darüber, welche Eigenschaften sich erzielen lassen und welche aufgrund der Datenbankarchitektur und seiner Schnittstellen nicht erreichbar sind.
Ziel dieser Abschlussarbeit ist, es die False Positive Rate der Bloomfilter-basierten Cache Kohärenz in Orestes durch neuartige Strategien zu optimieren. Das Thema ist in zwei Bereiche aufgeteilt, die auch unabhängig voneinander untersucht werden können.
Die Idee für diese Abschlussarbeit ist, dass personalisierte Seiten in Speed Kit automatisch erkannt werden (über Dynamic Blocks hinaus). Um Inkonsistenzen zu vermeiden, sollen die entsprechen HTML Dateien dann in diesem nicht mehr aus dem Cache ausgeliefert werden und stattdessen nur noch statische Ressource beschleunigt werden.
Das Konzept zur Beschleunigung personalisierter Websites mit Speed Kit basiert auf folgenden 4 Bausteinen:
Außerdem wird davon ausgegangen, dass für vorhersehbare Personalisierung (bspw. Login und Warenkorb) bereits Dynamic Blocks eingesetzt werden.
Zur Erkennung von Personalisierung soll Speed Kit folgendermaßen vorgehen (siehe Abbildung 1 weiter unten):
Der Server löst daraufhin eine Revalidierung der Seite aus und entscheidet, ob die Seite geblacklistet wird. Für alle folgenden Nutzer, die eine geblacklistete Seite laden, wird das HTML vom Originalserver geladen und alle Assets weiterhin über Speed Kit beschleunigt.
Wenn eine Seite tatsächlich personalisiert ist, sollte sie geblacklistet und damit für andere Nutzer nicht mehr gecacht werden. Um diese Entscheidung zu treffen, muss der Baqend-Server zwischen einer personalisierten Seite und einer Seite, die noch nicht in der aktuellen Version vorliegt unterscheiden. Das passiert auf folgende Weise:
Hat sich die Seite bei der Revalidierung geändert, kann der Server nicht mit Sicherheit sagen, ob es sich um eine personalisierte Seite handelt. Er verlässt sich deshalb auf 2 einfache Mechanismen. Angenommen die Seite ist personalisiert, dann A) ändert sie sich aus Sicht des Baqend Servers nur sporadisch oder B) ändert sich für den Baqend Server bei jedem Aufruf.
In Fall A) wird sich bei einem der folgenden Nutzer-Reports die Seite beim Revalidieren nicht ändern und somit die Seite auf die Blacklist gesetzt.
In Fall B) greift der nächste Schritt (2). Es wird geprüft, wie viel Zeit zwischen den Revalidierungen der Seite liegt. Wird die Updaterate zu hoch, wird die Seite zur Blacklist hinzugefügt, da sie ohnehin nicht gut cachebar ist. Ändert sich die Seite, wie in Fall B) bei jedem Aufruf, wird sie demnach sehr schnell der Blacklist hinzugefügt.
Das Blacklisten einer Seite funktioniert wie folgt:
Der Service Worker fragt, wie gewohnt sowohl über Baqend’s Caching-Infrastruktur als auch über den Originalserver die HTML Datei an (1). Anhand von Metadaten an der gecachten Response, kann Speed Kit direkt feststellen, dass die Seite geblacklistet ist und daraufhin die Originalseite an den Browser übergeben (2). Dynamic Blocks müssen in diesem Fall natürlich nicht ausgetauscht werden.
Die gecachte Response wird nicht an den Browser gegeben. Trotzdem werden weiterhin asynchron per DOM-Diffing die beiden Seiten verglichen und ggf. eine Personalisierung an den Baqend Server gemeldet. Damit kann sichergestellt werden, dass die Seite nur so lange wie nötig auf der Blacklist bleibt (siehe nächsten Abschnitt).
Seiten, die nicht mehr personalisiert sind, sollten automatisch wieder von Speed Kit gecacht werden. Hier erweist sich der Mechanismus, der im Abschnitt 2 beschrieben wurde als besonders elegant:
Während eine Seite auf der Blacklist ist, reporten die Nutzer weiterhin asynchron, ob sie unterschiede zwischen der Originalversion und der gecachten Version sehen, die nicht innerhalb von Dynamic Blocks liegen. Die Nutzer tun dies, obwohl sie die gecachte HTML Version nicht im Browser anzeigen (diese ist ja geblacklistet).
Wann immer der Server in dieser Zeit entscheidet, dass die Seite personalisiert ist, wird die Zeit auf der Blacklist auf 1h erhöht. Bei der Entscheidung verwendet der Server die gleiche Kriterien, wie in Abschnitt 2 beschrieben. Dadurch bleiben personalisierte Seite dauerhaft auf der Blacklist; nicht mehr personalisierte Seiten, sind aber nach einer Stunde wieder cachbar.
In dieser Arbeit soll untersucht werden, welche Constraints auf Datenmodell-Ebene wichtig für ein Database/Backend-as-a-Service System sind und wie sie deklarativ umgesetzt werden können. Beispiele für derartige Constraints sind Wertebereiche (z.B. Datum zwischen x und y) oder Not-Null-Constraints. Diese Form der Datenmodell-gebundenen Verifizierung von Constraints hat den großen Vorteil, dass sie keiner zusätzlich zu wartenden Code-Basis bedarf und direkt im Frontend, z.B. bei der Formularvalidierung, genutzt werden kann.
Der Polyglot Persistence Mediator (PPM) ist die Vision einer automatisierten Verwendung verschiedener Datenbanksysteme (Polyglot Persistence) durch die deklarative Angabe von Anforderungen. Diese werden in Form von Service Level Agreements (z.B. Latenz < 30ms, Top-K-Queries) am Schema annotiert. Ein Scoring ermittelt anhand dieser Annotationen die ideale Datenbank für jedes Element des Schemas (Routing Model). Der PPM routet zur Laufzeit gemäß des Routing-Models die Anfragen und CRUD Operationen zur passenden Datenbank. Ziel dieser Arbeit ist das Anlegen eines Katalogs einiger umsetzbarer Annotationen/SLAs, die Implementierung des Scoring Algorithmus für diese SLAs (siehe Paper), sowie die Umsetzung des Routings für die Kombination aus Redis und MongoDB.
In dieser Arbeit soll untersucht werden, wie Content-Management Funktionen in Backend-as-a-Service (BaaS) Systemen implementiert werden können. Bisher treten beide Paradigmen getrennt auf: BaaS als wichtiger Ansatz für Serverless Architectures verspricht durch potente Standard-APIs für Daten und Anwendungslogik die Entwicklung von Webseiten und Apps zu vereinfachen, während Content Management Systeme (CMS) integraler Bestandteil vieler Webplattformen sind, um Autoren und Redakteruren eine möglichste einfache Gestaltung von Inhalten zu ermöglichen. Diese Arbeit soll untersuchen, wie sich Content Mangement in der BaaS-Plattform Orestes umsetzen lässt, um die Vorteile beider Ansätze zu vereinen.
In dieser Arbeit soll die Idee des “NoSQL Entscheidungsbaums” weiterentwickelt werden zu einem interaktiven Web-Tool. Ziel: Anwender geben ihre Anforderungen ein (z.B. geringe Latenz bei Reads, Joins, hohe Verfügbarkeit) und das Tool wählt darauf in Frage kommende NoSQL Systeme aus. Das existierende Klassifikationsschema kann dabei erweitert und um neue Dimensionen vertieft werden. Ferner ist eine “User-generated Recommendations” Funktion interessant, bei der Anwender ihre Erfahrungen mit den jeweiligen Systemen angeben, die daraufhin mit in den Bewertungsschlüssel einfließen.\ Die Arbeit basiert auf:
In dieser Arbeit soll eine Architektur konzipiert und entwickelt werden, die in der Lage ist, den gesamten Content großer Webseiten effizient und skalierbar zu aktualisieren und sowohl als Rohdaten (Files) und Metadaten (Attribute, z.B. Content Type) abzuspeichern.
In dieser Arbeit soll die Querysprache um Projektionen (vgl. MongoDB) erweitert und die Invalidierung mithilfe der Bloomfilter verfeinert werden.
Die Querysprache ermöglicht es bisher u.A. ganze Datenbankobjekte zu laden. Durch Projektionen wäre es jedoch auch möglich nur Teilmengen eines Objektes zu laden. Diese Erweiterung müsste im ersten Schritt implementiert werden. Die aktuelle Invalidierung mithilfe der Bloomfilter reagiert auf beliebige Änderungen innerhalb eines Datenbankobjektes. Würde nun mithilfe der zuvor implementierten Projetionen z. B. der Name einer Person abgefragt werden, würde das Queryergebnis auch dann invalidiert werden, wenn sich die Adresse ändert. Folglich müsste die Invalidierung im nächsten Schritt feiner gestaltet werden. Queries sollen nur dann invalidiert werden, wenn die Projektion eine Schnittmenge zu den Änderungen hat. Dabei soll insbesondere die Auswirkung auf den Bloomfilter untersucht werden. Dabei stehen Größe und False-Positive Rate im Vordergrund. Als Kompromiss könnte dann noch untersucht werden, inwieweit sich einzelne Attribute eines Datenbankobjektes in dem Bloomfillter zusammenfassen lassen können. So führt z. B. eine Änderung der Hausnummer einer Person auch sehr wahrscheinlich zu einer Änderung der Straße und PLZ. Diese könnten somit als ein Objekt im Bloomfilter gespeichert werden. Hier wäre auch interessant, inwieweit sich eine solche Erkennung automatisieren lassen könnte. Abschließend könnten dann die Auswirkungen auf die Perfomance von der bisherigen Implementierung, der einzelnen Attribute und der Gruppierung gegenüber gestellt werden.
Real-time databases (RTDBs) extend traditional databases through push-based access to data: Real-time queries produce not only the initial query result, but also a continuous stream of updates over time. While there is a wealth of benchmarking frameworks for traditional database functionality (e.g. TPC-*), there is currently no standardized approach for quantifying the characteristics of systems such as Firebase, Meteor, or Baqend. The goal of this thesis is to develop a benchmarking framework for real-time databases and to conduct a quantitative comparison of different real-time implementations.