Funkciójelzők

Jótanács

Ez a tartalom a „Az Azure-hoz készült natív felhőalapú .NET-alkalmazások tervezése” című eBookból egy részlet, amely elérhető a .NET Docs oldalán, vagy ingyenesen letölthető PDF fájlként, amely offline módban is olvasható.

Azure-szolgáltatásban futó Cloud Native .NET-alkalmazások ebook borítójának miniatűrje.

Az 1. fejezetben megerősítettük, hogy a natív felhő sokkal a sebességről és az agilitásról szól. A felhasználók gyors válaszkészséget, innovatív funkciókat és nulla állásidőt várnak. Feature flags egy modern üzembe helyezési technika, amely segít a natív felhőbeli alkalmazások rugalmasságának növelésében. Lehetővé teszik új funkciók éles környezetben való üzembe helyezését, de korlátozzák azok hozzáférhetőségét. Egy kapcsoló pöccintésével aktiválhat egy új funkciót adott felhasználók számára az alkalmazás újraindítása vagy új kód üzembe helyezése nélkül. Különválasztják az új funkciók kiadását a kód üzembe helyezésétől.

A funkciójelzők olyan feltételes logikára épülnek, amely szabályozza a felhasználók futásidejű funkcióinak láthatóságát. A modern, natív felhőrendszerekben gyakori, hogy az új funkciókat korán üzembe helyezik az éles környezetben, de korlátozott közönséggel tesztelik őket. A megbízhatóság növekedésével a funkció fokozatosan kiterjeszthető a szélesebb közönség számára.

A funkciójelzők egyéb használati esetei a következők:

  • A prémium funkciók korlátozása adott ügyfélcsoportokra, amelyek hajlandók magasabb előfizetési díjakat fizetni.
  • Stabilizálhatja a rendszert egy problémafunkció gyors inaktiválásával, elkerülve a visszaállítás vagy az azonnali gyorsjavítás kockázatát.
  • Tiltson le egy nem kötelező funkciót, amely magas erőforrás-használattal rendelkezik a csúcshasználati időszakokban.
  • A megvalósíthatóság és a népszerűség ellenőrzése érdekében végezzen vizsgálatot kis felhasználói szegmenseken.

A funkciójelzők a fejlesztést is elősegítik trunk-based . Ez egy forrásvezérlési elágaztatási modell, amelyben a fejlesztők egyetlen ág funkcióin működnek együtt. Ez a módszer minimalizálja a nagy számú hosszú ideig futó funkcióág egyesítésének kockázatát és összetettségét. A funkciók aktiválásig nem érhetők el.

Funkciójelzők implementálása

A funkciójelző alapvetően egy egyszerű decision object-re mutató hivatkozás. Logikai állapotot ad vissza on vagy off. A jelölő általában egy olyan kódblokkot burkol, amely egy funkcióképességet foglal magában. A zászló állapota határozza meg, hogy a kódblokk végrehajtódik-e egy adott felhasználó számára. A 10–11. ábra a megvalósítást mutatja be.

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

10–11. ábra – Egyszerű funkciójelző implementálása.

Figyelje meg, hogy ez a megközelítés hogyan választja el a döntési logikát a funkciókódtól.

Az 1. fejezetben megvitattuk a Twelve-Factor App témát. Az útmutató azt ajánlotta, hogy a konfigurációs beállítások ne legyenek külsőek az alkalmazás végrehajtható kódjától. Szükség esetén a beállítások beolvashatók a külső forrásból. A funkciójelölő konfigurációs értékeinek is függetlennek kell lenniük a kódbázisuktól. A jelölőkonfiguráció külön adattárban való külsősítésével az alkalmazás módosítása és ismételt üzembe helyezése nélkül módosíthatja a jelölő állapotát.

Az Azure App Configuration központosított adattárat biztosít a funkciójelzőkhöz. Ezzel különböző típusú funkciójelzőket definiálhat, és gyorsan és magabiztosan módosíthatja az állapotukat. Az App Configuration ügyfélkönyvtárakat hozzáadja az alkalmazáshoz a funkciójelölők engedélyezéséhez. A különböző programozási nyelvi keretrendszerek támogatottak.

A funkciójelzők egyszerűen implementálhatók egy ASP.NET Core szolgáltatásban. A .NET szolgáltatásfelügyeleti kódtárak és az alkalmazáskonfigurációs szolgáltató telepítése lehetővé teszi a funkciójelzők deklaratív hozzáadását a kódhoz. Engedélyezik a FeatureGate attribútumokat, így nem kell manuálisan "if" utasításokat írnia a kódbázisban.

Miután konfigurálta az indítási osztályt, a vezérlő, a művelet vagy a köztes szoftver szintjén is hozzáadhat funkciójelző funkciókat. A 10–12. ábra a vezérlő és a művelet implementálását mutatja be:

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

10–12. ábra – Funkciójelző implementációja egy vezérlőben és műveletben.

Ha egy funkciójelző le van tiltva, a felhasználó egy 404(Nem található) állapotkódot kap választörzs nélkül.

A funkciójelzők közvetlenül C#-osztályokba is injektálhatók. A 10–13. ábrán a funkciójelző injektálása látható:

public class ProductController : Controller
{
    private readonly IFeatureManager _featureManager;

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

10-13. ábra – Funkciójelző injektálása egy osztályba.

A funkciófelügyeleti kódtárak kezelik a funkciójelző életciklusát a színfalak mögött. A konfigurációs tárba irányuló hívások számának minimalizálása érdekében például a könyvtárak egy adott időtartamra gyorsítótárazzák a jelző állapotait. A kéréshívások során garantálhatják a jelzőállapotok nem módosíthatóságát. Ők is kínálnak .Point-in-time snapshot Bármely kulcsérték előzményeit rekonstruálhatja, és az előző hét napon belül bármikor megadhatja a korábbi értékét.