Sdílet prostřednictvím


Kurz: Spouštění experimentů s příznaky variant funkcí (Preview)

Spouštění experimentů v aplikaci vám může pomoct při informovaných rozhodnutích, která zlepší výkon a uživatelské prostředí vaší aplikace. V této příručce se dozvíte, jak nastavit a spouštět experimenty v obchodě App Configuration Store. Naučíte se shromažďovat a měřit data pomocí funkcí konfigurace aplikací, aplikačních Přehledy (Preview) a pracovního prostoru rozděleného experimentování (Preview).

Tímto způsobem můžete učinit rozhodnutí řízená daty, která zlepší vaši aplikaci.

Poznámka:

Rychlým způsobem, jak zahájit experimentování, je spustit ukázku AZD dne. Toto úložiště poskytuje komplexní příklad, který je kompletní se zřizováním prostředků Azure a prvním experimentem, jak integrovat konfiguraci Aplikace Azure s aplikacemi .NET pro spouštění experimentů.

V tomto kurzu se naučíte:

  • Vytvoření příznaku funkce varianty
  • Přidání prostředku Přehledy aplikace do úložiště
  • Přidání pracovního prostoru rozděleného experimentování do úložiště
  • Nastavení aplikace pro spuštění experimentu
  • Povolení telemetrie a vytvoření experimentu v příznaku funkce varianty
  • Vytvoření metrik pro experiment
  • Získání výsledků experimentování

Požadavky

Vytvoření příznaku funkce varianty (Preview)

Vytvořte příznak funkce varianty s názvem Greeting se dvěma variantami Vypnuto a Zapnuto, jak je popsáno v rychlém startu Příznak funkce.

Připojení prostředek Přehledy aplikace (Preview) do úložiště konfigurace

Pokud chcete spustit experiment, musíte nejprve připojit prostředek aplikace založené na pracovním prostoru Přehledy ke službě App Configuration Store. Připojení tento prostředek do úložiště App Configuration Store nastaví úložiště konfigurace se zdrojem telemetrie pro experimentování.

  1. V App Configuration Storu vyberte telemetrická > aplikace Přehledy (Preview).

    Snímek obrazovky webu Azure Portal s přidáním aplikace Přehledy do úložiště

  2. Vyberte prostředek Přehledy aplikace, který chcete použít jako zprostředkovatele telemetrie pro příznaky funkcí varianty a aplikaci, a vyberte Uložit. Pokud nemáte prostředek Přehledy aplikace, vytvořte ho výběrem možnosti Vytvořit nový. Další informace o postupu najdete v tématu Vytvoření prostředku založeného na worskpace. Pak znovu načtěte seznam dostupných prostředků Přehledy aplikací v části Application Přehledy (Preview) a vyberte nový prostředek Přehledy aplikace.

  3. Oznámení indikuje, že prostředek Přehledy aplikace se úspěšně aktualizoval pro App Configuration Store.

Připojení rozděleného pracovního prostoru experimentování (Preview) do úložiště

Pokud chcete spouštět experimenty v konfiguraci Aplikace Azure, použijete pracovní prostor rozděleného experimentování. Pomocí následujícího postupu připojte pracovní prostor rozděleného experimentování k vašemu úložišti.

  1. V obchodě App Configuration vyberte v nabídce vlevo pracovní prostor experimentování>s rozděleným experimentováním (Preview).

    Snímek obrazovky webu Azure Portal s přidáním pracovního prostoru rozděleného experimentování do obchodu App Configuration Store

  2. Vyberte pracovní prostor rozděleného experimentování a pak uložte. Pokud nemáte pracovní prostor rozděleného experimentování, vytvořte ho pomocí rychlého startu Pracovního prostoru rozděleného experimentování.

    Poznámka:

    Zdroj dat vybraný v pracovním prostoru rozdělit experimentování musí být stejný prostředek aplikace Přehledy jako v předchozím kroku.

  3. Oznámení indikuje, že operace byla úspěšná.

Nastavení aplikace pro spuštění experimentu

Teď, když jste připojili prostředek application Přehledy (Preview) do App Configuration Storu, nastavte aplikaci pro spuštění experimentu (Preview).

V tomto příkladu vytvoříte webovou aplikaci ASP.NET s názvem Citace dne. Když se aplikace načte, zobrazí nabídku. Uživatelé můžou stisknout tlačítko srdce, aby se mu to líbilo. Pokud chcete zlepšit zapojení uživatelů, chcete zjistit, jestli přizpůsobená zpráva s pozdravem zvýší počet uživatelů, kteří mají uvozovku rádi. Příznak funkce Pozdrav vytvoříte v konfiguraci Aplikace Azure se dvěma variantami: Vypnuto a Zapnuto. Uživatelé, kteří dostanou variantu Off , uvidí standardní název. Uživatelům, kteří obdrží variantu On , se zobrazí zpráva s pozdravem. Shromáždíte a uložíte telemetrii interakcí uživatelů v Přehledy aplikace. S pracovním prostorem Rozdělení experimentování můžete analyzovat efektivitu experimentu.

Vytvoření aplikace a přidání tajných kódů uživatelů

  1. Otevřete příkazový řádek a spusťte následující kód. Tím se vytvoří nová aplikace Razor Pages v ASP.NET Core pomocí ověřování jednotlivých účtů a umístí ji do výstupní složky s názvem QuoteOfTheDay.

    dotnet new razor --auth Individual -o QuoteOfTheDay
    
  2. Na příkazovém řádku přejděte do složky QuoteOfTheDay a spuštěním následujícího příkazu vytvořte tajný kód uživatele pro aplikaci. Tento tajný klíč obsahuje připojovací řetězec pro konfiguraci aplikace.

    dotnet user-secrets set ConnectionStrings:AppConfiguration "<App Configuration Connection string>"
    
  3. Vytvořte další tajný klíč uživatele, který obsahuje připojovací řetězec pro Přehledy aplikace.

    dotnet user-secrets set ConnectionStrings:AppInsights "<Application Insights Connection string>"
    

Aktualizace kódu aplikace

  1. V uvozovkáchOfTheDay.csproj přidejte nejnovější verze Preview sad SDK pro správu funkcí a konfiguraci aplikací jako požadované balíčky.

    <PackageReference Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="8.0.0-preview.2" />
    <PackageReference Include="Microsoft.FeatureManagement.Telemetry.ApplicationInsights" Version="4.0.0-preview3" />
    <PackageReference Include="Microsoft.FeatureManagement.Telemetry.ApplicationInsights.AspNetCore" Version="4.0.0-preview3" />
    <PackageReference Include="Microsoft.FeatureManagement.AspNetCore" Version="4.0.0-preview3" />
    
  2. V Program.cs přidejte pod řádek var builder = WebApplication.CreateBuilder(args);zprostředkovatele konfigurace aplikace, který stáhne konfiguraci z Azure při spuštění aplikace. Metoda UseFeatureFlags ve výchozím nastavení obsahuje všechny příznaky funkcí bez popisku a nastaví dobu vypršení platnosti mezipaměti 30 sekund.

    builder.Configuration
        .AddAzureAppConfiguration(o =>
        {
            o.Connect(builder.Configuration.GetConnectionString("AppConfiguration"));
    
            o.UseFeatureFlags();
        });
    
  3. V Program.cs přidejte následující příkazy using:

    using Microsoft.ApplicationInsights.AspNetCore.Extensions;
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.FeatureManagement.Telemetry.ApplicationInsights.AspNetCore;
    
  4. Do místa, kde builder.Configuration.AddAzureAppConfiguration je volána, přidejte:

    // Add Application Insights telemetry.
    builder.Services.AddApplicationInsightsTelemetry(
        new ApplicationInsightsServiceOptions
        {
            ConnectionString = builder.Configuration.GetConnectionString("AppInsights"),
            EnableAdaptiveSampling = false
        })
        .AddSingleton<ITelemetryInitializer, TargetingTelemetryInitializer>();
    

    Tento fragment kódu provádí následující akce.

    • Přidá do aplikace klienta telemetrie Přehledy aplikace.
    • Přidá inicializátor telemetrie, který připojí informace cílené na odchozí telemetrii.
    • Zakáže adaptivní vzorkování. Další informace o zakázání adaptivního vzorkování najdete v tématu Řešení potíží.
  5. V kořenové složce QuoteOfTheDay vytvořte nový soubor s názvem ExampleTargetingContextAccessor.cs. Tím se vytvoří nová třída s názvem ExampleTargetingContextAccessor. Vložte do souboru níže uvedený obsah.

    using Microsoft.FeatureManagement.FeatureFilters;
    
    namespace QuoteOfTheDay
    {
        public class ExampleTargetingContextAccessor : ITargetingContextAccessor
        {
            private const string TargetingContextLookup = "ExampleTargetingContextAccessor.TargetingContext";
            private readonly IHttpContextAccessor _httpContextAccessor;
    
            public ExampleTargetingContextAccessor(IHttpContextAccessor httpContextAccessor)
            {
                _httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor));
            }
    
            public ValueTask<TargetingContext> GetContextAsync()
            {
                HttpContext httpContext = _httpContextAccessor.HttpContext;
                if (httpContext.Items.TryGetValue(TargetingContextLookup, out object value))
                {
                    return new ValueTask<TargetingContext>((TargetingContext)value);
                }
                List<string> groups = new List<string>();
                if (httpContext.User.Identity.Name != null)
                {
                    groups.Add(httpContext.User.Identity.Name.Split("@", StringSplitOptions.None)[1]);
                }
                TargetingContext targetingContext = new TargetingContext
                {
                    UserId = httpContext.User.Identity.Name ?? "guest",
                    Groups = groups
                };
                httpContext.Items[TargetingContextLookup] = targetingContext;
                return new ValueTask<TargetingContext>(targetingContext);
            }
        }
    }
    

    Tato třída deklaruje, jak cílení FeatureManagement získá kontext pro uživatele. V tomto případě přečte httpContext.User.Identity.Name a UserId považuje doménu e-mailové adresy za Group.

  6. Vraťte se do Program.cs a přidejte následující příkazy using.

    using Microsoft.FeatureManagement.Telemetry;
    using Microsoft.FeatureManagement;
    using QuoteOfTheDay;
    
  7. V části, kde AddApplicationInsightsTelemetry bylo volána, přidejte služby pro zpracování aktualizace konfigurace aplikace, nastavte správu funkcí, nakonfigurujte cílení na správu funkcí a povolte správu funkcí pro publikování telemetrických událostí.

    builder.Services.AddHttpContextAccessor();
    
    // Add Azure App Configuration and feature management services to the container.
    builder.Services.AddAzureAppConfiguration()
        .AddFeatureManagement()
        .WithTargeting<ExampleTargetingContextAccessor>()
        .AddTelemetryPublisher<ApplicationInsightsTelemetryPublisher>();
    
  8. Pod řádek var app = builder.Build();přidejte middleware, který v případě potřeby aktivuje aktualizaci konfigurace aplikace.

    // Use Azure App Configuration middleware for dynamic configuration refresh.
    app.UseAzureAppConfiguration();
    
  9. Pod tím přidejte následující kód, který umožní TargetingTelemetryInitializer mít přístup k informacím o cílení tím, že je uloží do httpContext.

    // Add TargetingId to HttpContext for telemetry
    app.UseMiddleware<TargetingHttpContextMiddleware>();
    
  10. V QuoteOfTheDay>Pages>Shared>_Layout.cshtml, pod kde QuoteOfTheDay.styles.css je přidán, přidejte následující řádek pro přidání css pro verzi 5.15.3 z .font-awesome

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
    
  11. Otevřete QuoteOfTheDay>Pages>Index.cshtml.cs a přepište obsah do aplikace nabídky.

    using Microsoft.ApplicationInsights;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement;
    
    namespace QuoteOfTheDay.Pages;
    
    public class Quote
    {
        public string Message { get; set; }
    
        public string Author { get; set; }
    }
    
    public class IndexModel(IVariantFeatureManagerSnapshot featureManager, TelemetryClient telemetryClient) : PageModel
    {
        private readonly IVariantFeatureManagerSnapshot _featureManager = featureManager;
        private readonly TelemetryClient _telemetryClient = telemetryClient;
    
        private Quote[] _quotes = [
            new Quote()
            {
                Message = "You cannot change what you are, only what you do.",
                Author = "Philip Pullman"
            }];
    
        public Quote? Quote { get; set; }
    
        public bool ShowGreeting { get; set; }
    
        public async void OnGet()
        {
            Quote = _quotes[new Random().Next(_quotes.Length)];
    
            Variant variant = await _featureManager.GetVariantAsync("Greeting", HttpContext.RequestAborted);
    
            ShowGreeting = variant.Configuration.Get<bool>();
        }
    
        public IActionResult OnPostHeartQuoteAsync()
        {
            string? userId = User.Identity?.Name;
    
            if (!string.IsNullOrEmpty(userId))
            {
                // Send telemetry to Application Insights
                _telemetryClient.TrackEvent("Like");
    
                return new JsonResult(new { success = true });
            }
            else
            {
                return new JsonResult(new { success = false, error = "User not authenticated" });
            }
        }
    }
    

    Tím PageModel vyberete náhodnou uvozovku, použije GetVariantAsync se k získání varianty pro aktuálního uživatele a nastaví proměnnou s názvem ShowGreeting na hodnotu varianty. Zpracovává PageModel také požadavky Post, volání _telemetryClient.TrackEvent("Like");, které odešle událost do aplikace Přehledy s názvem Like. Tato událost je automaticky svázaná s uživatelem a variantou a může být sledována metrikami.

  12. Otevřete soubor index.cshtml a přepište obsah aplikace nabídky.

    @page
    @model IndexModel
    @{
        ViewData["Title"] = "Home page";
        ViewData["Username"] = User.Identity.Name;
    }
    
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            color: #333;
        }
    
        .quote-container {
            background-color: #fff;
            margin: 2em auto;
            padding: 2em;
            border-radius: 8px;
            max-width: 750px;
            box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
            display: flex;
            justify-content: space-between;
            align-items: start;
            position: relative;
        }
    
        .vote-container {
            position: absolute;
            top: 10px;
            right: 10px;
            display: flex;
            gap: 0em;
        }
    
        .vote-container .btn {
            background-color: #ffffff; /* White background */
            border-color: #ffffff; /* Light blue border */
            color: #333
        }
    
        .vote-container .btn:focus {
            outline: none;
            box-shadow: none;
        }
    
        .vote-container .btn:hover {
            background-color: #F0F0F0; /* Light gray background */
        }
    
        .greeting-content {
            font-family: 'Georgia', serif; /* More artistic font */
        }
    
        .quote-content p.quote {
            font-size: 2em; /* Bigger font size */
            font-family: 'Georgia', serif; /* More artistic font */
            font-style: italic; /* Italic font */
            color: #4EC2F7; /* Medium-light blue color */
        }
    </style>
    
    <div class="quote-container">
        <div class="quote-content">
            @if (Model.ShowGreeting)
            {
                <h3 class="greeting-content">Hi <b>@User.Identity.Name</b>, hope this makes your day!</h3>
            }
            else
            {
                <h3 class="greeting-content">Quote of the day</h3>
            }
            <br />
            <p class="quote">“@Model.Quote.Message”</p>
            <p>- <b>@Model.Quote.Author</b></p>
        </div>
    
        <div class="vote-container">
            <button class="btn btn-primary" onclick="heartClicked(this)">
                <i class="far fa-heart"></i> <!-- Heart icon -->
            </button>
        </div>
    
        <form action="/" method="post">
            @Html.AntiForgeryToken()
        </form>
    </div>
    
    <script>
        function heartClicked(button) {
            var icon = button.querySelector('i');
            icon.classList.toggle('far');
            icon.classList.toggle('fas');
    
            // If the quote is hearted
            if (icon.classList.contains('fas')) {
                // Send a request to the server to save the vote
                fetch('/Index?handler=HeartQuote', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
                    }
                });
            }
        }
    </script>
    

    Tento kód odpovídá uživatelskému rozhraní, které zobrazuje QuoteOfTheDay a zpracovává pomocí srdeční akce uvozovky. Používá dříve uvedenou Model.ShowGreeting hodnotu k zobrazení různých věcí různým uživatelům v závislosti na jejich variantě.

Sestavte a spusťte aplikaci.

  1. Na příkazovém řádku ve složce QuoteOfTheDay spusťte: dotnet build.

  2. Spustit: dotnet run --launch-profile https.

  3. Ve výstupu aplikace vyhledejte zprávu ve formátu Now listening on: https://localhost:{port} . Přejděte do zahrnutého odkazu v prohlížeči.

  4. Po zobrazení spuštěné aplikace vyberte Zaregistrovat v pravém horním rohu a zaregistrujte nového uživatele.

    Snímek obrazovky s nabídkou denní aplikace zobrazující možnost Zaregistrovat

  5. Zaregistrujte nového uživatele s názvem user@contoso.com. Heslo musí obsahovat alespoň šest znaků a obsahovat číslo a speciální znak.

  6. Po zadání informací o uživateli kliknutím sem ověříte e-mail.

  7. Zaregistrujte druhého uživatele s názvem userb@contoso.com, zadejte další heslo a ověřte tento druhý e-mail.

    Poznámka:

    Pro účely tohoto kurzu je důležité používat tyto názvy přesně. Pokud je funkce nakonfigurovaná podle očekávání, měli by dva uživatelé vidět různé varianty.

  8. Výběrem možnosti Přihlásit se v pravém horním rohu se přihlaste jako uživatel (userb).userb@contoso.com

    Snímek obrazovky s nabídkou denní aplikace zobrazující **Přihlášení**.

  9. Po přihlášení by se při prohlížení aplikace měla zobrazit userb@contoso.com zvláštní zpráva.

    Snímek obrazovky s nabídkou denní aplikace zobrazující zvláštní zprávu pro uživatele

    userb@contoso.com je jediný uživatel, který uvidí zvláštní zprávu.

Povolení telemetrie a vytvoření experimentu v příznaku funkce varianty

Pomocí následujícího postupu povolte telemetrii a vytvořte experiment ve příznaku funkce varianty:

  1. V obchodě App Configuration přejděte do Operations>Feature Manageru.

  2. Vyberte místní nabídku ... úplně napravo od příznaku funkce Varianta "Greeting" (Pozdrav) a vyberte Upravit.

    Snímek obrazovky webu Azure Portal s úpravou příznaku funkce varianty

  3. Přejděte na kartu Telemetry a zaškrtněte políčko Povolit telemetrii.

  4. Přejděte na kartu Experiment , zaškrtněte políčko Vytvořit experiment a pojmenujte experiment.

  5. Vyberte Zkontrolovat a aktualizovat a pak Aktualizovat.

  6. Oznámení indikuje, že operace byla úspěšná. Ve Správci funkcí by měl příznak varianty obsahovat slovo Aktivní v části Experiment.

Vytvoření metrik pro experiment

Metrika v pracovním prostoru rozděleného experimentování je kvantitativní míra události odesílané do aplikace Přehledy. Tato metrika pomáhá vyhodnotit dopad příznaku funkce na chování uživatele a výsledky.

Při dřívější aktualizaci aplikace jste přidali _telemetryClient.TrackEvent("Like") do kódu aplikace. Like je telemetrická událost, která představuje akci uživatele, v tomto případě výběr tlačítka Srdce. Tato událost se odešle do prostředku Přehledy aplikace, který se připojíte k metrikě, kterou chcete vytvořit. Aplikace, kterou jsme vytvořili, určuje pouze jednu událost, ale můžete mít více událostí a následně více metrik. Více metrik může být také založeno na jedné události Application Insight.

  1. Přejděte k prostředku pracovního prostoru rozděleného experimentování. V části Metriky experimentování konfigurace>vyberte Vytvořit.

  2. V části Vytvořit metriku experimentování vyberte nebo zadejte následující informace a uložte ji pomocí možnosti Vytvořit.

    Snímek obrazovky webu Azure Portal a vytvoření nové metriky experimentování

    Nastavení Příklad hodnoty Popis
    Jméno Hlas srdce Název metriky experimentování
    Popis Spočítejte počet lidí, kteří tlačítko srdce vyberou, když uvidí zvláštní zprávu, nebo když ne. Volitelný popis metriky
    Název události Přehledy aplikace Jako Název události Přehledy aplikace. V tomto názvu se rozlišují malá a velká písmena a jedná se o název zadaný v kódu pomocí _telemetryClient.TrackEvent("<Event-Name>").
    Míra jako Počet K dispozici jsou následující možnosti:
    • Počet: spočítá, kolikrát se událost aktivuje vašimi uživateli.
    • Průměr: zprůměruje hodnotu události pro uživatele.
    • Součet: sečte hodnoty události pro uživatele. Zobrazuje průměrnou souhrnnou hodnotu.
    • Procento: Vypočítá procento uživatelů, kteří událost aktivovali.
    Požadovaný dopad Zvýšit Toto nastavení představuje konečný cíl nebo účel měření vytvořené metriky.

    V tomto kurzu naše hypotéza spočívá v tom, že více uživatelů klikne na tlačítko typu srdce, když se vedle uvozovky dne zobrazí zvláštní zpráva. Kód aplikace sleduje toto kliknutí jako událost s názvem Like. Aplikace odešle událost Like jako telemetrii do aplikace Přehledy a požadovaný dopad pro tento experiment je vidět zvýšení počtu kliknutí uživatele (měřeno jako počet) na heart Vote, aby bylo možné ověřit danou hypotézu. Pokud dojde ke snížení počtu kliknutí na tlačítko bez ohledu na zvláštní zprávu, která se zobrazuje přiděleným cílovým skupinám, je hypotéza pro tento experiment neplatná.

  3. Po vytvoření se nová metrika zobrazí na portálu. Můžete ho upravit nebo odstranit výběrem místní nabídky (...) na pravé straně obrazovky.

    Snímek obrazovky webu Azure Portal znázorňující metriku experimentování

Získání výsledků experimentování

Pokud chcete nový experiment nastavit do testu a vygenerovat výsledky pro analýzu, simulujte nějaký provoz do vaší aplikace a počkejte 10 až 15 minut.

Pokud chcete zobrazit výsledky experimentu, přejděte do Správce funkcí a v seznamu příznaků variant funkce klikněte na ...>Experiment nebo vyberte aktivní odkaz ve sloupci Experiment. Tento sloupec se ve výchozím nastavení nezobrazuje. Pokud ho chcete zobrazit, vyberte ve Správci funkcí možnost Spravovat zobrazení>Upravit sloupce>Přidat sloupec>Experiment a Použít.

Na stránce výsledků je ve výchozím nastavení vybraná verze experimentu, směrný plán pro porovnání výsledků a varianta porovnání . V případě potřeby změňte výchozí hodnoty podle svých představ a pak vyberte Použít , abyste zobrazili výsledek experimentu.

Snímek obrazovky webu Azure Portal zobrazující výsledek experimentování

Snímek obrazovky výše ukazuje, že experiment měl požadovaný výsledek, přičemž varianta On pro heart Vote vede k 560,62% více hlasů srdce než varianta Off .

Všechny úpravy příznaku funkce varianty generují novou verzi experimentování, kterou můžete vybrat a zobrazit její výsledky.

Poznámka:

Pokud chcete získat výsledky experimentování, potřebujete alespoň 30 událostí na variantu, ale doporučujeme, abyste měli větší minimální velikost vzorkování, abyste měli jistotu, že experimentování vytváří spolehlivé výsledky.

Poznámka:

Vzorkování Přehledy aplikace je ve výchozím nastavení povolené a může mít vliv na výsledky experimentování. Pro účely tohoto kurzu doporučujeme vypnout vzorkování v Přehledy aplikace. Přečtěte si další informace o vzorkování v Přehledy aplikace.

Další krok

Experimentování