Model Externí úložiště konfigurace

Azure App Configuration
Azure Blob Storage

Přesouvá informace o konfiguraci z balíčku pro nasazení aplikace do centralizovaného umístění. To může přinášet příležitosti ke snadnější správě a řízení konfiguračních dat a ke sdílení konfiguračních dat mezi aplikacemi a instancemi aplikací.

Kontext a problém

Většina běhových prostředí aplikací zahrnuje informace o konfiguraci, které se nacházejí v souborech nasazených s aplikací. V některých případech je možné tyto soubory upravit, aby se po nasazení aplikace změnilo její chování. Změny konfigurace ale vyžadují nové nasazení aplikace. To často vede k nepřijatelným výpadkům a jiným problémům se správou.

Místní konfigurační soubory také konfiguraci omezují na jednu aplikaci, ale někdy se hodí sdílet konfigurační nastavení mezi více aplikacemi. K příkladům patří databázové připojovací řetězce, informace o motivech uživatelského rozhraní nebo adresy URL front a úložiště používaných související sadou aplikací.

Spravovat změny místních konfigurací ve více spuštěných instancích aplikace není lehké, zejména v případě hostování v cloudu. Může to vést k tomu, že během nasazování aktualizace budou instance používat různá nastavení konfigurace.

Kromě toho můžou aktualizace aplikací a součástí vyžadovat změny konfiguračních schémat. Mnohé konfigurační systémy nepodporují různé verze informací o konfiguraci.

Řešení

Uložte informace o konfiguraci v externím úložišti a poskytněte rozhraní, které se dá použít k rychlému a efektivnímu čtení a aktualizaci nastavení konfigurace. Typ externího úložiště závisí na prostředí hostingu a běhovém prostředí aplikace. Ve scénáři hostovaného v cloudu je to obvykle cloudová služba úložiště nebo vyhrazená konfigurační služba, ale může to být hostovaná databáze nebo jiný vlastní systém.

Záložní úložiště, které pro informace o konfiguraci zvolíte, by mělo mít rozhraní nabízející konzistentní a snadno použitelný přístup. Mělo by informace zobrazovat ve správně zadaném a strukturovaném formátu. Implementace může také potřebovat autorizovat přístup uživatelů, aby chránila konfigurační data, a být dostatečně flexibilní, aby umožňovala ukládání více verzí konfigurace (například vývoj, příprava nebo produkce, včetně více verzí každé z nich).

Mnoho integrovaných konfiguračních systémů čte data při spuštění aplikace a ukládá je do mezipaměti, aby se zajistil rychlý přístup a minimalizoval dopad na výkon aplikace. V závislosti na používaném typu záložního úložiště a jeho latenci může být užitečné, když se do externího úložiště konfigurace implementuje mechanismus ukládání do mezipaměti. Další informace najdete v článku o ukládání do mezipaměti. Obrázek znázorňuje přehled modelu Externí úložiště konfigurace s volitelnou místní mezipamětí.

Přehled modelu Externí úložiště konfigurace s volitelnou místní mezipamětí

Problémy a důležité informace

Když se budete rozhodovat, jak tento model implementovat, měli byste vzít v úvahu následující skutečnosti:

Zvolte záložní úložiště, které poskytuje přijatelný výkon, vysokou dostupnost, odolnost a dá se zálohovat v rámci procesu údržby a správy aplikací. V aplikaci hostované v cloudu je použití mechanismu cloudového úložiště nebo vyhrazené služby konfigurační platformy obvykle dobrou volbou pro splnění těchto požadavků.

Navrhněte schéma záložního úložiště tak, aby bylo flexibilní z hlediska typů informací, které může ukládat. Ujistěte se, že splňuje všechny požadavky na konfiguraci, jako jsou zadaná data, kolekce nastavení, více verzí nastavení a další funkce vyžadované aplikacemi, které ho používají. Schéma by se mělo snadno rozšiřovat, aby podporovalo další nastavení s tím, jak se můžou požadavky měnit.

Vezměte v úvahu fyzické schopnosti záložního úložiště, souvislost se způsobem ukládání informací o konfiguraci a dopady na výkon. Třeba ukládání dokumentu XML obsahujícího informace o konfiguraci bude vyžadovat, aby rozhraní konfigurace nebo aplikace dokument analyzovala za účelem čtení jednotlivých nastavení. Aktualizace nastavení kvůli tomu bude složitější, i když uložení nastavení do mezipaměti může pomoct s vyvážením pomalejšího výkonu při čtení.

Zvažte, jak bude rozhraní konfigurace umožňovat řízení rozsahu a dědičnosti nastavení konfigurace. Může třeba existovat požadavek na rozsah nastavení konfigurace na úrovni organizace, aplikace a počítače. Může být nutné podporovat delegování řízení přístupu k různým rozsahům a jednotlivým aplikacím zakázat nebo povolit přepsání nastavení.

Ujistěte se, že rozhraní konfigurace umí konfigurační data zobrazovat v požadovaných formátech, jako jsou zadané hodnoty, kolekce, páry klíč-hodnota nebo kontejnery objektů a dat.

Vezměte v úvahu, jak se bude rozhraní úložiště konfigurace chovat, když nastavení obsahují chyby nebo v záložním úložišti neexistují. Může být vhodné vrátit výchozí nastavení a protokoly chyb. Zvažte také aspekty jako rozlišování velkých a malých písmen v klíčích nebo názvech nastavení konfigurace, ukládání a zpracování binárních dat a způsob zpracování nulových nebo prázdných hodnot.

Vezměte v úvahu, jak konfigurační data chránit, aby byl přístup k nim povolený jenom příslušným uživatelům a aplikacím. To je pravděpodobně funkce rozhraní úložiště konfigurace, ale je také nutné zajistit, že se k datům v záložním úložišti nedá přistupovat přímo bez příslušných oprávnění. Zajistěte, aby se striktně oddělovala oprávnění požadovaná pro čtení a zapisování konfiguračních dat. Zvažte také, jestli potřebujete některá nebo všechna nastavení konfigurace šifrovat a jak se to bude implementovat do rozhraní úložiště konfigurace.

Centrálně uložené konfigurace, které mění chování aplikace za běhu, jsou kriticky důležité a musí se nasazovat, aktualizovat a spravovat pomocí stejných mechanismů, jakými se nasazuje kód aplikace. Třeba změny, které můžou ovlivnit více než jednu aplikaci, se musí provádět pomocí úplného testování a fázovaného nasazení, aby se zajistilo, že je změna vhodná pro všechny aplikace, které tuto konfiguraci používají. Pokud správce upraví nastavení k aktualizaci jedné aplikace, může to nepříznivě ovlivnit jiné aplikace, které používají stejné nastavení.

Pokud aplikace ukládá informace o konfiguraci do mezipaměti, musí aplikace v případě změny konfigurace dostat upozornění. Může být možné implementovat zásady vypršení platnosti dat konfigurace v mezipaměti, aby se tyto informace pravidelně automaticky aktualizovaly a případné změny se zjistily (a reagovalo se na ně).

Přestože ukládání konfiguračních dat do mezipaměti může pomoct vyřešit přechodné problémy s připojením k externímu úložišti konfigurace za běhu aplikace, obvykle se tím problém nevyřeší, pokud je externí úložiště při prvním spuštění aplikace mimo provoz. Ujistěte se, že kanál nasazení aplikace může poskytnout poslední známou sadu hodnot konfigurace v konfiguračním souboru jako záložní, pokud vaše aplikace nemůže při spuštění načíst živé hodnoty.

Kdy se má tento model použít

Tento model je vhodný pro:

  • Nastavení konfigurace, která jsou sdílená mezi více aplikacemi a instancemi aplikací, nebo tam, kde se musí vynutit standardní konfigurace mezi různými aplikacemi a instancemi aplikací

  • Standardní systém konfigurace, který nepodporuje všechna požadovaná nastavení konfigurace, jako je ukládání imagí nebo komplexních datových typů

  • Jako doplňkové úložiště pro některá z nastavení pro aplikace, potenciálně umožňující aplikacím přepsat některá nebo všechna centrálně uložená nastavení

  • Jako způsob, jak zjednodušit správu více aplikací a volitelně pro monitorování toho, jak se nastavení konfigurace používá, pomocí protokolování některých nebo všech typů přístupu k úložišti konfigurace

Návrh úloh

Architekt by měl vyhodnotit způsob použití modelu externího úložiště konfigurace v návrhu úlohy k řešení cílů a principů popsaných v pilířích architektury Azure Well-Architected Framework. Příklad:

Pilíř Jak tento model podporuje cíle pilíře
Efektivita provozu pomáhá poskytovat kvalitu úloh prostřednictvím standardizovaných procesů a týmové soudržnosti. Toto oddělení konfigurace aplikace od kódu aplikace podporuje konfiguraci specifickou pro prostředí a používá správu verzí na hodnoty konfigurace. Externí úložiště konfigurací jsou také běžným místem pro správu příznaků funkcí, které umožňují postupy bezpečného nasazení.

- Návrh OE:10 Automatizace
- Postupy nasazení OE:11 Sejf

Stejně jako u jakéhokoli rozhodnutí o návrhu zvažte jakékoli kompromisy proti cílům ostatních pilířů, které by mohly být s tímto vzorem zavedeny.

Příklad vlastního záložního úložiště

V aplikaci hostované v Microsoft Azure je možnou volbou pro externí ukládání informací o konfiguraci použít Azure Storage. Toto úložiště je odolné, nabízí vysoký výkon a třikrát se replikuje s automatickým převzetím služeb při selhání, aby se zajistila vysoká dostupnost. Úložiště Azure Table poskytuje úložiště dvojic klíč-hodnota se schopností používat flexibilní schéma pro hodnoty. Úložiště Azure Blob poskytuje hierarchické úložiště na základě kontejneru, které může obsahovat libovolný typ dat v jednotlivě pojmenovaných objektech blob.

Při implementaci tohoto modelu byste byli zodpovědní za abstrakci služby Azure Blob Storage a zveřejnění nastavení v rámci vašich aplikací, včetně kontroly aktualizací za běhu a řešení toho, jak na ně reagovat.

Následující příklad ukazuje, jak by bylo možné v úložišti objektů blob vytvořit zjednodušené úložiště konfigurace pro ukládání a zveřejnění informací o konfiguraci. Třída BlobSettingsStore může abstraktní úložiště objektů blob pro uchovávání informací o konfiguraci a implementuje jednoduché ISettingsStore rozhraní.

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

Toto rozhraní definuje metody pro načítání nastavení konfigurace uložených v úložišti konfigurace a obsahuje číslo verze, které lze použít ke zjištění, zda byla některá nastavení konfigurace nedávno změněna. Třída BlobSettingsStore může k implementaci správy verzí použít ETag vlastnost objektu blob. Vlastnost ETag se aktualizuje automaticky při každém zápisu objektu blob.

Tento jednoduchý obrázek záměrně zpřístupňuje všechna nastavení konfigurace jako řetězcové hodnoty místo zadaných hodnot.

Třída ExternalConfigurationManager pak může poskytnout obálku BlobSettingsStore kolem instance. Aplikace může tuto třídu použít k načtení informací o konfiguraci. Tato třída může použít něco jako Microsoft Reactive Extensions k publikování jakýchkoli změn provedených v konfiguraci, když je systém spuštěný. Také by byla zodpovědná za implementaci modelu doplňování mezipaměti za účelem zajištění vyšší odolnosti a výkonu.

Použití může vypadat přibližně takto.

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

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

Použití konfigurace Aplikace Azure

Při vytváření vlastního úložiště konfigurace může být v některých situacích potřeba, ale mnoho aplikací může místo toho použít Aplikace Azure Configuration. Aplikace Azure Konfigurace podporuje páry klíč-hodnota, které mohou být oborem názvů. Klíče jsou zadány a jsou individuálně verze. Aplikace Azure Konfigurace také podporuje snímky konfigurace k určitému bodu v čase, abyste mohli snadno zkontrolovat nebo vrátit zpět předchozí hodnoty konfigurace. Hodnoty konfigurace je možné exportovat tak, aby kopie konfigurace byla dodávána s vaší aplikací v případě nedostupnosti služby při spuštění aplikace.

Klientské knihovny

Mnohé z těchto funkcí jsou zpřístupněny prostřednictvím klientských knihoven, které se integrují s modulem runtime aplikace, což usnadňuje načítání a ukládání hodnot do mezipaměti, aktualizaci hodnot při změně a dokonce zpracování přechodných výpadků služby App Configuration Service.

Šablona běhového prostředí Klientská knihovna Notes Rychlé zprovoznění
.NET Microsoft.Extensions.Configuration.AzureAppConfiguration Zprostředkovatel pro Microsoft.Extensions.Configuration Rychlý start
ASP.NET Microsoft.Azure.AppConfiguration.AspNetCore Zprostředkovatel pro Microsoft.Extensions.Configuration Rychlý start
Azure Functions v .NET Microsoft.Extensions.Configuration.AzureAppConfiguration Používá se s rozšířeními azure Functions pro podporu konfigurace v Startup.cs Rychlý start
.NET Framework Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration Tvůrce konfigurací pro System.Configuration Rychlý start
Java Spring com.azure.spring > azure-spring-cloud-appconfiguration-config Podporuje přístup k rozhraní Spring Framework prostřednictvím ConfigurationProperties Rychlý start
Python azure.appconfiguration Poskytuje AzureAppConfigurationClient Rychlý start
JavaScript/Node.js @azure/ konfigurace aplikace Poskytuje AppConfigurationClient Rychlý start

Kromě klientských knihoven existuje také akce GitHubu v Aplikace Azure Synchronizace konfigurace a Aplikace Azure vyžádání konfigurace a Aplikace Azure úlohy Nabízené konfigurace Azure DevOps, které integrují kroky konfigurace do procesu sestavení.

Další kroky