Delen via


Functievlaggen

Tip

Deze inhoud is een fragment uit het eBook, Cloud Native .NET Applications for Azure ontwerpen, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.

Cloud Native .NET apps for Azure eBook cover thumbnail.

In hoofdstuk 1 hebben we bevestigd dat cloudeigen veel betrekking heeft op snelheid en flexibiliteit. Gebruikers verwachten snelle reactiesnelheid, innovatieve functies en geen downtime. Feature flags zijn een moderne implementatietechniek die helpt de flexibiliteit voor cloudeigen toepassingen te vergroten. Hiermee kunt u nieuwe functies implementeren in een productieomgeving, maar hun beschikbaarheid beperken. Met de veeg van een switch kunt u een nieuwe functie activeren voor specifieke gebruikers zonder de app opnieuw te starten of nieuwe code te implementeren. Ze scheiden de release van nieuwe functies van hun code-implementatie.

Functievlagmen zijn gebaseerd op voorwaardelijke logica waarmee de zichtbaarheid van de functionaliteit voor gebruikers tijdens runtime wordt beheerd. In moderne cloudeigen systemen is het gebruikelijk om nieuwe functies vroeg in productie te implementeren, maar deze te testen met een beperkt publiek. Naarmate het vertrouwen toeneemt, kan de functie stapsgewijs worden geïmplementeerd voor bredere doelgroepen.

Andere gebruiksvoorbeelden voor functievlagmen zijn:

  • Beperk premium-functionaliteit tot specifieke klantengroepen die bereid zijn hogere abonnementskosten te betalen.
  • Stabiliseer een systeem door snel een probleemfunctie te deactiveren, waardoor de risico's van een terugdraaiactie of onmiddellijke hotfix worden vermeden.
  • Schakel een optionele functie uit met een hoog resourceverbruik tijdens piekperioden.
  • Gedrag experimental feature releases voor kleine gebruikerssegmenten om haalbaarheid en populariteit te valideren.

Functievlagmen bevorderen trunk-based ook de ontwikkeling. Het is een vertakkingsmodel voor broncodebeheer waarbij ontwikkelaars samenwerken aan functies in één vertakking. De aanpak minimaliseert het risico en de complexiteit van het samenvoegen van grote aantallen langlopende functievertakkingen. Functies zijn niet beschikbaar totdat ze zijn geactiveerd.

Functievlagmen implementeren

In de kern is een functievlag een verwijzing naar een eenvoudige decision object. Het retourneert een Booleaanse status van on of off. De vlag verpakt doorgaans een codeblok dat een functiefunctie inkapselt. De status van de vlag bepaalt of dat codeblok wordt uitgevoerd voor een bepaalde gebruiker. Afbeelding 10-11 toont de implementatie.

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

Afbeelding 10-11 - Implementatie van eenvoudige functievlagken.

Houd er rekening mee dat deze benadering de beslissingslogica scheidt van de functiecode.

In hoofdstuk 1 hebben we het Twelve-Factor Appbesproken . De richtlijnen raden aan om configuratie-instellingen extern te houden vanuit uitvoerbare code van de toepassing. Indien nodig kunnen instellingen worden gelezen vanuit de externe bron. Configuratiewaarden voor functievlagken moeten ook onafhankelijk zijn van hun codebasis. Door de vlagconfiguratie in een afzonderlijke opslagplaats te externaliseren, kunt u de vlagstatus wijzigen zonder de toepassing te wijzigen en opnieuw te implementeren.

Azure-app Configuration biedt een gecentraliseerde opslagplaats voor functievlagmen. Hiermee definieert u verschillende soorten functievlagmen en bewerkt u hun statussen snel en zeker. U voegt de App Configuration-clientbibliotheken toe aan uw toepassing om functievlagfunctionaliteit in te schakelen. Verschillende frameworks voor programmeertalen worden ondersteund.

Functievlagmen kunnen eenvoudig worden geïmplementeerd in een ASP.NET Core-service. Door de .NET-functiebeheerbibliotheken en App Configuration-provider te installeren, kunt u declaratief functievlagmen toevoegen aan uw code. Ze maken kenmerken mogelijk FeatureGate , zodat u niet handmatig hoeft te schrijven als instructies in uw codebasis.

Zodra deze is geconfigureerd in uw opstartklasse, kunt u functievlagfunctionaliteit toevoegen op het niveau van de controller, actie of middleware. Afbeelding 10-12 geeft controller- en actie-implementatie weer:

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

Afbeelding 10-12 - Implementatie van functievlagken in een controller en actie.

Als een functievlag is uitgeschakeld, ontvangt de gebruiker de statuscode 404 (Niet gevonden) zonder antwoordtekst.

Functievlagmen kunnen ook rechtstreeks in C#-klassen worden geïnjecteerd. In afbeelding 10-13 ziet u functievlaginjectie:

public class ProductController : Controller
{
    private readonly IFeatureManager _featureManager;

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

Afbeelding 10-13 - Functievlaginjectie in een klasse.

De functiebeheerbibliotheken beheren de levenscyclus van de functievlag achter de schermen. Als u bijvoorbeeld een groot aantal aanroepen naar het configuratiearchief wilt minimaliseren, worden de cachevlagstatussen van de bibliotheken gedurende een opgegeven duur geminimaliseerd. Ze kunnen de onveranderbaarheid van vlagstatussen garanderen tijdens een aanroep van een aanvraag. Ze bieden ook een Point-in-time snapshot. U kunt de geschiedenis van elke sleutelwaarde reconstrueren en de eerdere waarde op elk gewenst moment binnen de afgelopen zeven dagen opgeven.