Hlavní příznaky

Tip

Tento obsah je výňatek z eBooku, Architekting Cloud Native .NET Applications for Azure, který je k dispozici na webu Docs pro .NET nebo jako soubor PDF zdarma ke stažení, který si můžete přečíst offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

V kapitole 1 jsme potvrdili, že nativní cloud je hodně o rychlosti a flexibilitě. Uživatelé očekávají rychlou odezvu, inovativní funkce a nulový výpadek. Feature flags jsou moderní technika nasazení, která pomáhá zvýšit flexibilitu pro aplikace nativní pro cloud. Umožňují nasadit nové funkce do produkčního prostředí, ale omezit jejich dostupnost. Při rychlém pohybu přepínače můžete aktivovat novou funkci pro konkrétní uživatele bez restartování aplikace nebo nasazení nového kódu. Oddělují vydání nových funkcí od nasazení kódu.

Příznaky funkcí jsou založené na podmíněné logice, která řídí viditelnost funkcí pro uživatele za běhu. V moderních cloudových nativních systémech je běžné nasazovat nové funkce do produkčního prostředí dříve, ale testovat je s omezenou cílovou skupinou. S nárůstem spolehlivosti je možné tuto funkci postupně zavádět širším cílovým skupinám.

Mezi další případy použití příznaků funkcí patří:

  • Omezit prémiové funkce na konkrétní skupiny zákazníků, které jsou ochotné platit vyšší poplatky za předplatné.
  • Stabilizovat systém rychlou deaktivací funkce problému, vyhnout se rizikům vrácení zpět nebo okamžité opravy hotfix.
  • Zakažte volitelnou funkci s vysokou spotřebou prostředků během období využití ve špičce.
  • Proveďte experimental feature releases malé uživatelské segmenty a ověřte proveditelnost a popularitu.

Příznaky funkcí také podporují trunk-based vývoj. Jedná se o model větvení správy zdrojového kódu, ve kterém vývojáři spolupracují na funkcích v jedné větvi. Přístup minimalizuje riziko a složitost sloučení velkého počtu dlouhotrvajících větví funkcí. Funkce nejsou dostupné, dokud nebudou aktivovány.

Implementace příznaků funkcí

V jádru je příznak funkce odkazem na jednoduchý decision object. Vrátí logický stav on nebo off. Příznak obvykle zabalí blok kódu, který zapouzdřuje funkci. Stav příznaku určuje, jestli se daný blok kódu pro daného uživatele spustí. Obrázek 10–11 znázorňuje implementaci.

if (featureFlag) {
    // Run this code block if the featureFlag value is true
} else {
    // Run this code block if the featureFlag value is false
}

Obrázek 10–11 – implementace příznaku jednoduché funkce

Všimněte si, jak tento přístup odděluje rozhodovací logiku od kódu funkce.

V kapitole 1 jsme probírali Twelve-Factor App. Doporučené pokyny pro externí nastavení konfigurace ze spustitelného kódu aplikace. V případě potřeby je možné nastavení číst z externího zdroje. Hodnoty konfigurace příznaku funkce by také měly být nezávislé na základu kódu. Externí konfigurací příznaku v samostatném úložišti můžete změnit stav příznaku beze změny a opětovného nasazení aplikace.

Aplikace Azure Configuration poskytuje centralizované úložiště pro příznaky funkcí. Díky tomu definujete různé druhy příznaků funkcí a rychle a s jistotou manipulujete s jejich stavy. Do aplikace přidáte klientské knihovny App Configuration, aby se povolily funkce příznaku funkce. Podporují se různé architektury programovacích jazyků.

Příznaky funkcí je možné snadno implementovat ve službě ASP.NET Core. Instalace knihoven pro správu funkcí .NET a poskytovatele konfigurace aplikací umožňuje deklarativní přidávání příznaků funkcí do kódu. FeatureGate Umožňují atributy, abyste nemuseli ručně zapisovat příkazy if v rámci základu kódu.

Po nakonfigurování ve třídě Startup můžete přidat funkci příznaku funkce na úrovni kontroleru, akce nebo middlewaru. Obrázek 10–12 představuje implementaci kontroleru a akce:

[FeatureGate(MyFeatureFlags.FeatureA)]
public class ProductController : Controller
{
    ...
}
[FeatureGate(MyFeatureFlags.FeatureA)]
public IActionResult UpdateProductStatus()
{
    return ObjectResult(ProductDto);
}

Obrázek 10–12 – Implementace příznaku funkce v kontroleru a akci

Pokud je příznak funkce zakázaný, uživatel obdrží stavový kód 404 (Nenalezena) bez textu odpovědi.

Příznaky funkcí lze také vložit přímo do tříd jazyka C#. Obrázek 10–13 ukazuje injektáž příznaků funkcí:

public class ProductController : Controller
{
    private readonly IFeatureManager _featureManager;

    public ProductController(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }
}

Obrázek 10-13 – injektáž příznaku funkce do třídy

Knihovny správy funkcí spravují životní cyklus příznaků funkcí na pozadí. Pokud například chcete minimalizovat vysoký počet volání do úložiště konfigurace, mají knihovny stav příznaku mezipaměti po zadanou dobu trvání. Během volání žádosti můžou zaručit neměnnost stavů příznaků. Nabízejí také Point-in-time snapshot. Historii libovolné hodnoty klíče můžete rekonstruovat a poskytnout její předchozí hodnotu v libovolném okamžiku během předchozích sedmi dnů.