Tests und A/B Testing mit Feature-Flags konfigurieren

Mit der Zuweisung von Funktions-Flags in App Lifecycle Manager können Sie Ihre Anwendung testen, indem Sie den Traffic in Prozent aufteilen. So können einige Ihrer Nutzer eine Variante Ihrer Anwendung sehen, während andere Nutzer eine andere Variante sehen. So können Sie ermitteln, welche Varianten oder Funktionen erfolgreicher sind. Dieser Prozess wird oft als A/B-Test bezeichnet. Mit Funktions-Flag-Zuweisungen können Sie festlegen, wie Sie Ihren Traffic aufteilen und zugewiesene Varianten in Ihre Anwendung einbinden.

In diesem Leitfaden erfahren Sie, wie Sie Varianten definieren, die Traffic-Aufteilung konfigurieren und Varianten in Ihre Anwendung einbinden.

Um das Tracking und die Analyse zu vereinfachen, sollten Sie Ihren Varianten beschreibende String-IDs zuweisen (z.B. „experimental“ und „baseline“) und diese Namen direkt in Ihrem Code und Ihren Analyse-Pipelines verwenden.

Vorbereitung

Prüfen Sie zuerst, ob Sie Folgendes haben:

  1. Sie haben die Kurzanleitung zum Bereitstellen von Feature-Flags oder die Kurzanleitung zur Verwendung von Feature-Flags (Standalone) durchgearbeitet.
  2. Eine Google Cloud CLI-Umgebung, die für die Verwaltung von App Lifecycle Manager-Ressourcen konfiguriert ist.

Zuweisung für Funktions-Flag konfigurieren

So konfigurieren Sie ein experimentelles Funktions-Flag:

  1. Definieren Sie das randomisierte Attribut (z.B. userID), das für das Sticky Bucketing verwendet wird, um eine einheitliche Nutzererfahrung zu gewährleisten.

      gcloud beta app-lifecycle-manager flags attributes create "user-id-attr" \
          --key="userID" \
          --attribute-value-type="STRING" \
          --location=global
    
  2. Verwenden Sie eine Zuweisung, um die Aufteilung zu definieren (z. B. 50/50). Verweisen Sie dabei auf Ihre beschreibenden Varianten-IDs.

    # Create a flag with explicitly named variants for the experiment and a 50/50 allocation referencing the custom IDs
    gcloud beta app-lifecycle-manager flags create "search-algo-test" \
      --key="search-algo-test" \
      --flag-value-type=BOOL \
      --location="global" \
      --unit-kind="demo-test-unitkind" \
      --variants='[
          {
          "id": "experimental",
          "booleanValue": true
          },
          {
          "id": "baseline",
          "booleanValue": false
          }
      ]'\
      --evaluation-spec='{
          "allocations": [{
              "id": "search-split-50-50",
              "randomizedOn": "userID",
              "slots": [
              {"variant": "baseline", "weight": 50},
              {"variant": "experimental", "weight": 50}
              ]
          }],
          "defaultTarget": "search-split-50-50",
          "attributes": ["projects/PROJECT_ID/locations/global/flagAttributes/user-id-attr"]
      }'
    
  3. Initialisieren Sie in Ihrem Backend-Dienst das OpenFeature SDK und fügen Sie die userID in den Bewertungskontext ein. Verwenden Sie die Methode BooleanValueDetails (oder eine entsprechende Methode in Ihrer Sprache), um den variantID (String) in Ihrer Anwendung abzurufen. So können Sie Ihre Backend-Logik basierend auf dem beschreibenden Namen und nicht nur auf einem booleschen Wert umschalten.

    // 1. Prepare evaluation context
    evalCtx := map[string]any{"userID": currentUser.ID}
    
    // 2. Fetch evaluation details to get the variant name
    details, err := client.BooleanValueDetails(ctx, "search-algo-test", false, evalCtx)
    
    // 3. Execute logic based on the Variant ID (string name)
    if details.Variant == "experimental" {
        results = search.ExperimentalV2(query)
    } else {
        results = search.BaselineV1(query)
    }
    
  4. Verwenden Sie aussagekräftige Variantennamen, damit bei der Prüfung und Analyse automatisch Dokumentation generiert wird. Um Auswertungen zu prüfen, protokollieren Sie den String details.Variant zusammen mit Ihren Leistungsmesswerten:

     startTime := time.Now()
     // ... perform search ...
     duration := time.Since(startTime)
    
     // Audit: Log the descriptive variant name ("experimental" or "baseline")
     logger.Info("Search performed",
        "variant", details.Variant,
        "latency_ms", duration.Milliseconds(),
     )
    

    Wenn Sie die Messwerte für die Testgruppe mit denen der Baseline-Gruppe vergleichen, können Sie manuell analysieren, ob der neue Algorithmus die Backend-Effizienz oder die Suchrelevanz verbessert, bevor Sie mit der vollständigen Einführung fortfahren.

Nächste Schritte