A/B-Tests einrichten
Diese Anleitung beschreibt, wie ein Test auf Anwendungsebene durchgeführt wird, indem zwei unterschiedliche Versionen der Anwendung gleichzeitig ausgeführt werden. Der Load Balancer von Codesphere übernimmt die Verteilung des Traffics nativ und stellt sicher, dass Nutzer einer Version zugewiesen werden und dieser treu bleiben.
Umgebungsisolation
Um einen Test durchzuführen, muss die „Control“ (aktuelle Produktion) von der „Variante“ (dem Experiment) isoliert werden.
- Control (v1) bereitstellen:
- Den aktuellen stabilen, produktionsreifen Code in einer Landscape in Codesphere bereitstellen.
- Diese Landscape
production-controlnennen.
- Variante (v2) bereitstellen:
- Eine Kopie der Landscape erstellen (oder die erste klonen).
- Diese Landscape
production-variantnennen. - Den experimentellen Code (neue Funktionen, architektonische Änderungen usw.) in diese spezifische Landscape pushen.
Da es sich um separate Container handelt, können auch Backend-Änderungen getestet werden (z. B. eine neue API-Struktur oder Datenbankabfrage).
Analytics-Instrumentierung (Beispiel PostHog)
Da beide Landscapes letztlich unter derselben öffentlichen URL erreichbar sind, weiß das Analytics-Tool nicht von selbst, welche Version ein Nutzer gerade sieht. Die Nutzersession muss explizit mit „Super Properties“ (oder „User Traits“) gekennzeichnet werden.
Im Code der Control-Landscape
Das Analytics-Initialisierungsskript suchen (meist im Header oder in einer Konfigurationsdatei) und unmittelbar nach der Initialisierung Folgendes hinzufügen:
// App v1 (Control)
posthog.register({
experiment_group: "Control"
});
Im Code der Variant-Landscape
Im experimentellen Codebase das Snippet aktualisieren, um die neue Version widerzuspiegeln:
// App v2 (Variant)
posthog.register({
experiment_group: "Variant-A"
});
Die Funktion posthog.register hängt die Eigenschaft experiment_group an jedes nachfolgende Ereignis (Seitenaufruf, Klick, Kauf) an, das von diesem Nutzer gesendet wird. Eine manuelle Kennzeichnung einzelner Ereignisse im gesamten Codebase ist nicht nötig.
Traffic-Routing
Nachdem nun zwei laufende Anwendungen und die Analytics-Einrichtung vorhanden sind, muss echter Traffic zu ihnen geleitet werden. Codesphere übernimmt dies nativ, ohne dass externe Tools wie Nginx oder HAProxy erforderlich sind.
Domain konfigurieren
- Zum Tab Domains in Codesphere navigieren.
- Die öffentliche eigene Domain auswählen (z. B.
app.example.com). - Beide Landscapes verknüpfen:
production-controlproduction-variant
Traffic-Aufteilung
Codesphere verteilt eingehende Anfragen automatisch 50/50 zwischen den beiden Landscapes.
Session-Bindung (Stickiness)
Der Load Balancer setzt beim ersten Besuch des Nutzers ein Sticky-Session-Cookie.
Wird ein Nutzer zur Variante geleitet, bleibt er für die gesamte Session an diese Landscape gebunden, sodass er beim Neuladen nicht die Version wechselt.
Überprüfung
Bevor das Update angekündigt wird, sollte überprüft werden, ob die Aufteilung und Kennzeichnung korrekt funktionieren.
1. Ein Inkognito-Fenster öffnen
Die öffentliche Domain aufrufen.
2. Die Konsole prüfen
Die Entwicklertools des Browsers öffnen (F12) und Folgendes ausführen:
posthog.get_property('experiment_group')
Der Befehl sollte entweder "Control" oder "Variant-A" zurückgeben.
3. Live-Ereignisse prüfen
Dorthin navigieren:
PostHog → Live Events
Sicherstellen, dass die eingehenden Ereignisse aus der Session die Eigenschaft experiment_group enthalten.
4. Routing testen
- Das Inkognito-Fenster schließen.
- Ein neues öffnen.
- Mehrfach wiederholen.
Irgendwann sollte der Load Balancer zur jeweils anderen Version leiten, was bestätigt, dass beide Umgebungen erreichbar sind.
Analyse & Entscheidung
Sobald Traffic fließt, die Daten anhand von Segmentierung statt komplexer Mathematik analysieren.
Die Analyse
- Das Dashboard öffnen (z. B. PostHog Insights).
- Eine Trendgrafik oder einen Funnel erstellen (z. B. „User Signups“).
- Eine Aufschlüsselung (Breakdown) nach der Eigenschaft anwenden:
experiment_group
- Die Ergebnisse vergleichen.
Es werden zwei unterschiedliche Linien sichtbar:
- Control
- Variant-A
Der Rollout
Basierend auf den Ergebnissen eines der folgenden Szenarien umsetzen:
Szenario A: Die Variante gewinnt
(Höhere Conversion oder bessere Performance)
- Zum Tab Codesphere Domains navigieren.
production-controlvon der Domain entfernen.
→ 100 % des Traffics fließen nun zuproduction-variant.- Die alte Control-Landscape stilllegen.
Szenario B: Die Variante scheitert
(Fehler oder geringere Conversion)
- Zum Tab Codesphere Domains navigieren.
production-variantvon der Domain entfernen.
→ 100 % des Traffics kehren zur stabilenproduction-controlzurück.- Die Variant-Landscape stilllegen und den Code offline untersuchen.