Külső konfigurációs tár mintája

Azure App Configuration
Azure Blob Storage

A konfigurációs adatokat áthelyezheti az alkalmazás üzembehelyezési csomagjából egy központi helyre. Ezzel lehetőség nyílik a konfigurációs adatok egyszerűbb kezelésére és felügyeletére, valamint a konfigurációs adatok alkalmazások és alkalmazáspéldányok közötti megosztására.

Kontextus és probléma

A legtöbb alkalmazásfuttató környezetben találhatók az alkalmazással együtt üzembe helyezett fájlokban tárolt konfigurációs adatok. Bizonyos esetekben ezek a fájlok szerkeszthetők, így az üzembe helyezés után is módosítható az alkalmazás viselkedése. Az ilyen konfigurációmódosítások után viszont újból üzembe kell helyezni az alkalmazást, ez pedig gyakran elfogadhatatlan állásidőt és egyéb adminisztrációs terhelést jelenthet.

A helyi konfigurációs fájlok ráadásul egy alkalmazásra korlátozzák a konfigurációt, pedig néha hasznos lenne megosztani több alkalmazás között is a konfigurációs beállításokat. Ilyenek például az adatbázis-kapcsolati sztringek, a felhasználói felület témájára vonatkozó információk vagy az alkalmazások kapcsolódó készlete által használt üzenetsorok és tárolók URL-címei.

A helyi konfigurációk változásainak az alkalmazás több futó példányán történő kezelése kihívást jelenthet, különösen egy felhőben üzembe helyezett forgatókönyv esetén. Ez különböző konfigurációs beállításokat használó példányokat eredményezhet a frissítés üzembe helyezése során.

Ezenfelül az alkalmazások és összetevők frissítéséhez szükség lehet a konfigurációs sémák módosítására. Számos konfigurációs rendszer nem támogatja a különböző konfigurációsadat-verziókat.

Megoldás

A konfigurációs adatokat tárolja egy külső tárban, és biztosítson egy felületet, amely segítségével gyorsan és hatékonyan olvashat és frissíthet konfigurációs beállításokat. A külső tároló típusa az alkalmazás üzemeltetési és futtatókörnyezetétől függ. A felhőalapú forgatókönyvekben ez általában felhőalapú tárolási szolgáltatás vagy dedikált konfigurációs szolgáltatás, de üzemeltetett adatbázis vagy más egyéni rendszer is lehet.

A konfigurációs adatokhoz választott háttértárhoz szükség van egy felületre, amely stabil és könnyen használható hozzáférést biztosít. Az információkat típussal helyesen ellátott és strukturált formátumban kell elérhetővé tennie. Előfordulhat, hogy az implementációnak engedélyeznie kell a felhasználók hozzáférését a konfigurációs adatok védelme érdekében, és elég rugalmasnak kell lennie ahhoz, hogy lehetővé tegye a konfiguráció több verziójának tárolását (például fejlesztés, előkészítés vagy éles környezet, beleértve az egyes verziók több kiadási verzióját is).

Számos beépített konfigurációs rendszer beolvassa az adatokat az alkalmazás indulásakor, majd gyorsítótárazza az adatokat a memóriában, hogy gyors hozzáférést biztosítson, és a lehető legkisebbre csökkentse az alkalmazás teljesítményére gyakorolt hatást. A használt háttértár típusától és a tár késésétől függően hasznos lehet implementálni egy gyorsítótárazási mechanizmust a külső konfigurációs táron belül. További információt a gyorsítótárazási útmutatóban találhat. Az ábra a külső konfigurációs tár mintájának és az opcionális helyi gyorsítótárnak az áttekintését teszi lehetővé.

A külső konfigurációs tár mintájának és az opcionális helyi gyorsítótárnak az áttekintése

Problémák és megfontolandó szempontok

A minta megvalósítása során az alábbi pontokat vegye figyelembe:

Válasszon olyan háttértárat, amely elfogadható teljesítményt, magas rendelkezésre állást és robusztus működést biztosít, valamint készíthető róla biztonsági másolat az alkalmazás karbantartási és adminisztrációs folyamatának részeként. A felhőalapú alkalmazásokban a felhőbeli tárolási mechanizmus vagy a dedikált konfigurációs platform szolgáltatás használata általában jó választás ezeknek a követelményeknek való megfeleléshez.

Úgy tervezze meg a háttértár sémáját, hogy rugalmasan tudja kezelni a tárolt adatok típusait. Győződjön meg arról, hogy minden konfigurációs követelménynek megfeleljen (például típussal ellátott adatok, beállításgyűjtemények, több beállításverzió és bármely más olyan funkció, amelyre a háttértárt használó alkalmazásoknak szükségük lehet). Fontos, hogy a séma könnyen bővíthető legyen, hogy további beállításokat is támogasson, ha megváltoznak a követelmények.

Vegye figyelembe a háttértár fizikai képességeit, illetve azt, hogyan viszonyul a konfigurációs adatok tárolási módjához, továbbá a teljesítményre gyakorolt hatását. Egy konfigurációs adatokat tartalmazó XML-dokumentum tárolásához például feltétel, hogy az egyes beállítások olvasásához a konfigurációs felület vagy az alkalmazás elemezze a dokumentumot. Ettől egy beállítás frissítése bonyolultabbá válik, bár a beállítások gyorsítótárazása segíthet ellensúlyozni a lassabb olvasási teljesítmény.

Gondolja át, hogyan fogja a konfigurációs felület lehetővé tenni a hatókör felügyeletét és a konfigurációs beállítások öröklését. Követelmény lehet például a konfigurációs beállítások hatókörének korlátozása a cég, az alkalmazás vagy a gépek szintjén. Előfordulhat, hogy támogatnia kell a különböző hatókörökhöz való hozzáférés fölötti felügyelet delegálását, valamint megakadályozni vagy engedélyezni az egyes alkalmazások számára a beállítások felülbírálását.

Győződjön meg arról, hogy a konfigurációs felület képes a szükséges formátumban elérhetővé tenni a konfigurációs adatokat, például típussal ellátott értékekként, gyűjteményekként, a kulcs/érték-párokként vagy tulajdonságcsomagok formájában.

Gondolja át, hogyan fog viselkedni a konfigurációs tár felülete, amikor a beállítások hibásak, vagy nem is léteznek a háttértárban. Érdemes lehet visszatérni az alapértelmezett beállításokhoz és naplózni a hibákat. Az olyan aspektusokat is gondolja végig, mint hogy a konfigurációs beállítások kulcsai vagy nevei megkülönböztetik-e a kis- és nagybetűket, hogyan fogja tárolni és kezelni a bináris adatokat, valamint milyen módon fogja kezelni a nullértékű vagy üres értékeket.

Gondolja át, hogyan védheti meg a konfigurációs adatokat, hogy csak a megfelelő felhasználók és alkalmazások kapjanak hozzáférést. A konfigurációs tár felülete valószínűleg nyújt ilyen szolgáltatást, de azt is biztosítani kell, hogy a háttértárban lévő adatokhoz ne lehessen közvetlenül hozzáférni a megfelelő engedély nélkül. Ügyeljen arra, hogy szigorúan elválassza a konfigurációs adatok olvasásához és írásához szükséges engedélyeket. Azt is vegye figyelembe, hogy titkosítania kell-e a konfigurációs beállítások egy részét vagy egészét, és hogy ez hogyan lesz implementálva a konfigurációs tár felületén.

A központilag tárolt, az alkalmazások viselkedését a futtatás közben módosító konfigurációk különösen fontosak, és ugyanazokkal a mechanizmusokkal kell üzembe helyezni, frissíteni és felügyelni, mint az alkalmazás kódját. Az egynél több alkalmazást érintő módosításokat például teljes teszteléssel és szakaszos üzembe helyezéses megközelítéssel kell végrehajtani. Így biztosítható, hogy a módosítás minden, a konfigurációt használó alkalmazás számára megfelelő legyen. Ha egy rendszergazda szerkeszt egy beállítást egy alkalmazás frissítéséhez, az negatív hatással lehet más, ugyanazt a beállítást használó alkalmazásokra.

Ha egy alkalmazás gyorsítótárazza a konfigurációs adatokat, az alkalmazást riasztani kell, ha módosul a konfiguráció. Meg lehet esetleg valósítani egy, a gyorsítótárazott konfigurációs adatokra vonatkozó elévülési szabályzatot, hogy ez az információ rendszeres időközönként automatikusan frissüljön, és érvénybe lépjenek az esetleges változások.

Bár a konfigurációs adatok gyorsítótárazása segíthet a külső konfigurációs tár átmeneti csatlakozási problémáinak megoldásában az alkalmazás futtatókörnyezetében, ez általában nem oldja meg a problémát, ha a külső tároló leáll az alkalmazás első indításakor. Győződjön meg arról, hogy az alkalmazás üzembe helyezési folyamata tartalékként tudja megadni a konfigurációs fájl utolsó ismert konfigurációs értékeit, ha az alkalmazás nem tudja lekérni az élő értékeket az indításkor.

Mikor érdemes ezt a mintát használni?

Ez a minta az alábbi esetekben hasznos:

  • Több alkalmazás és alkalmazáspéldány között megosztott konfigurációs beállításoknál, vagy ahol a szabványos konfigurációt kell kényszeríteni több alkalmazásra és alkalmazáspéldányra.

  • Olyan szabványos konfigurációs rendszer esetében, amely nem támogatja az összes szükséges konfigurációs beállítást, például a képek tárolását vagy az összetett adattípusokat.

  • Kiegészítő tárolóként az alkalmazások bizonyos beállításaihoz, amely esetleg lehetővé teszi az alkalmazások számára néhány vagy az összes központilag tárolt beállítás felülbírálását.

  • Több alkalmazás adminisztrációjának egyszerűsítésére, valamint opcionálisan a konfigurációs beállítások használatának monitorozására a konfigurációs tár néhány vagy összes hozzáféréstípusának naplózása révén.

Számítási feladatok tervezése

Az tervezőknek értékelniük kell, hogyan használható a külső konfigurációs tároló minta a számítási feladat kialakításában az Azure Well-Architected Framework pilléreiben foglalt célok és alapelvek kezelésére. Példa:

Pillér Hogyan támogatja ez a minta a pillércélokat?
Az operatív kiválóság szabványosított folyamatok és a csapat kohéziója révén segít a számítási feladatok minőségének biztosításában. Az alkalmazáskonfigurációnak az alkalmazáskódtól való elkülönítése támogatja a környezetspecifikus konfigurációt, és verziószámozást alkalmaz a konfigurációs értékekre. A külső konfigurációs tárolók a szolgáltatásjelzők kezelésére is gyakran használhatók a biztonságos üzembehelyezési eljárások engedélyezéséhez.

- OE:10 Automation-tervezés
- OE:11 Széf üzembehelyezési eljárások

Mint minden tervezési döntésnél, fontolja meg az ezzel a mintával bevezethető többi pillér céljaival szembeni kompromisszumokat.

Példa egyéni háttértárra

A Microsoft Azure által üzemeltetett alkalmazásokban a konfigurációs információk külső tárolásának lehetősége az Azure Storage használata. Rugalmas, és nagy teljesítményt tesz elérhetővé, ráadásul a magas rendelkezésre állás érdekében háromszor van replikálva, automatikus feladatátvétellel. Az Azure Table Storage egy kulcs/érték-tárt biztosít, amely képes rugalmas sémát használni az értékekhez. Az Azure Blob Storage hierarchikus, tárolóalapú tárt biztosít, amely egyénileg elnevezett blobokban bármilyen típusú adatot képes tárolni.

A minta megvalósításakor Ön lesz a felelős az Azure Blob Storage eltávolításáért és a beállítások alkalmazáson belüli felfedéséért, beleértve a frissítések futásidőben való keresését és az ezekre való válaszadás módját.

Az alábbi példa bemutatja, hogyan képzelhető el egy egyszerű konfigurációs tároló a Blob Storage-ban a konfigurációs információk tárolásához és felfedéséhez. Egy BlobSettingsStore osztály absztrakciós Blob Storage-tárolót hozhat létre a konfigurációs információk tárolásához, és egy egyszerű ISettingsStore felületet valósít meg.

public interface ISettingsStore
{
    Task<ETag> GetVersionAsync();
    Task<Dictionary<string, string>> FindAllAsync();
}

Ez a felület a konfigurációs tárban tárolt konfigurációs beállítások lekérésének módszereit határozza meg, és tartalmaz egy verziószámot, amely alapján megállapíthatja, hogy a konfigurációs beállítások a közelmúltban módosultak-e. Egy BlobSettingsStore osztály a ETag blob tulajdonságával implementálhatja a verziószámozást. A ETag tulajdonság minden alkalommal automatikusan frissül, amikor egy blob meg van írva.

Ez az egyszerű ábra a beírt értékek helyett sztringértékként teszi elérhetővé az összes konfigurációs beállítást.

Az ExternalConfigurationManager osztály ezután burkolót biztosíthat egy BlobSettingsStore példány körül. Az alkalmazások ezzel az osztálysal lekérhetik a konfigurációs információkat. Ez az osztály a Microsoft Reactive Extensionshez hasonló módon tehet közzé minden módosítást a konfigurációban, miközben a rendszer fut. Emellett a gyorsítótár-feltöltési minta implementálásáért is felelős lenne a beállításokhoz, hogy rugalmasságot és teljesítményt biztosítson.

A használat az alábbihoz hasonló lehet.

static void Main(string[] args)
{
    // Start monitoring configuration changes.
    ExternalConfiguration.Instance.StartMonitor();

    // Get a setting.
    var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
    …
}

Azure-alkalmazás-konfiguráció használata

Egyes helyzetekben szükség lehet egyéni konfigurációs tár létrehozására, de számos alkalmazás használhatja Azure-alkalmazás Konfigurációt. Azure-alkalmazás Konfiguráció támogatja a névtérbe állítható kulcs-érték párokat. A kulcsok be vannak gépelve, és egyedileg vannak verziószámba állítva. Azure-alkalmazás Konfiguráció a konfiguráció időponthoz kötött pillanatképeit is támogatja, így könnyen megvizsgálhatja vagy visszaállíthatja a korábbi konfigurációs értékeket. A konfigurációs értékek exportálhatók úgy, hogy a konfiguráció egy példánya elküldhető az alkalmazással, ha a szolgáltatás nem érhető el az alkalmazás indításakor.

Ügyfélkódtárak

Ezen funkciók közül sok ügyfélkódtárakon keresztül érhető el, amelyek integrálhatók az alkalmazás futtatókörnyezetével az értékek beolvasásának és gyorsítótárazásának megkönnyítése, az értékek frissítése a változáskor, és akár az App Configuration Service átmeneti leállásainak kezelése.

Futtatókörnyezet Ügyfélkódtár Jegyzetek Gyorsútmutató
.NET Microsoft.Extensions.Configuration.AzureAppConfiguration Szolgáltató: Microsoft.Extensions.Configuration Gyors útmutató
ASP.NET Microsoft.Azure.AppConfiguration.AspNetCore Szolgáltató: Microsoft.Extensions.Configuration Gyors útmutató
Azure Functions a .NET-ben Microsoft.Extensions.Configuration.AzureAppConfiguration Azure-függvénybővítményekkel használható a Startup.cs konfigurációjának támogatásához Gyors útmutató
.NET-keretrendszer Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration Konfigurációszerkesztő a következőhöz: System.Configuration Gyors útmutató
Java Spring com.azure.spring > azure-spring-cloud-appconfiguration-config Támogatja a Spring Framework elérését a ConfigurationProperties Gyors útmutató
Python azure.appconfiguration Egy AzureAppConfigurationClient Gyors útmutató
JavaScript/Node.js @azure/alkalmazáskonfiguráció Egy AppConfigurationClient Gyors útmutató

Az ügyfélkódtárak mellett létezik egy Azure-alkalmazás Configuration Sync GitHub Action és Azure-alkalmazás Configuration Pull &Azure-alkalmazás Configuration Push Azure DevOps-feladatok is, amelyek a konfigurációs lépéseket integrálják a buildelési folyamatba.

Következő lépések