Model Externí úložiště konfigurace
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ém v cloudu se obvykle jedná o cloudovou službu úložiště nebo vyhrazenou službu konfigurace, 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žnila ukládání více verzí konfigurace (například vývojové, pracovní nebo produkční, 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í.

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 pro splnění těchto požadavků obvykle vhodné použít mechanismus cloudového úložiště nebo vyhrazenou službu konfigurační platformy.
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ě).
I když konfigurační data ukládání do mezipaměti můžou pomoct vyřešit přechodné problémy s externím úložištěm konfigurace za běhu aplikace, obvykle se tím problém nevyřeší, pokud při prvním spuštění aplikace nefunguje externí úložiště. Pokud vaše aplikace nemůže při spuštění načíst živé hodnoty, ujistěte se, že váš kanál nasazení aplikace může poskytnout poslední známou sadu konfiguračních hodnot v konfiguračním souboru jako záložní.
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
Příklad vlastního úložiště zálohování
V Microsoft Azure hostované aplikaci je možné k externímu 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 zodpovědní za abstrakci úložiště objektů blob v Azure a vystavení nastavení v rámci vašich aplikací, včetně kontroly aktualizací za běhu a řešení, jak na ně reagovat.
Následující příklad ukazuje, jak lze v úložišti objektů blob představit zjednodušené úložiště konfigurace pro ukládání a vystavování informací o konfiguraci. Třída může abstrahovat úložiště objektů blob pro uchovávání informací o konfiguraci BlobSettingsStore a implementuje jednoduché ISettingsStore rozhraní.
public interface ISettingsStore
{
Task<ETag> GetVersionAsync();
Task<Dictionary<string, string>> FindAllAsync();
}
Toto rozhraní definuje metody pro načtení nastavení konfigurace uchovávaného v konfiguračním úložiště a obsahuje číslo verze, které lze použít ke zjištění, jestli se v nedávné době nějaká nastavení konfigurace upravila. Třída může k implementaci verzí použít vlastnost BlobSettingsStore ETag objektu blob. Vlastnost ETag se automaticky aktualizuje při každém zápisu objektu blob.
Tento jednoduchý obrázek zpřístupňuje všechna nastavení konfigurace jako řetězcové hodnoty místo zadaných hodnot.
Třída ExternalConfigurationManager pak může poskytovat obálku kolem BlobSettingsStore instance. Aplikace může tuto třídu použít k načtení informací o konfiguraci. Tato třída může používat něco jako Microsoft Reactive Extensions k publikování jakýchkoli změn konfigurace, když je systém spuštěný. Zodpovídá také za implementaci modelu s dosa ovým modelem s cílem zajistit vyšší odolnost a výkon.
Použití může vypadat nějak takto.
static void Main(string[] args)
{
// Start monitoring configuration changes.
ExternalConfiguration.Instance.StartMonitor();
// Get a setting.
var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
…
}
Pomocí Azure App Configuration
Zatímco vytváření vlastního úložiště konfigurace může být v některých situacích nezbytné, mnoho aplikací může místo toho Azure App Configuration. Azure App Configuration podporuje páry klíč-hodnota, které mohou být obory názvů. Klíče se zadá a mají jednotlivé verze. Azure App Configuration také snímky konfigurace k bodu v čase, abyste mohli snadno zkontrolovat předchozí hodnoty konfigurace nebo se k jejich vrácení vrátit. Konfigurační hodnoty je možné exportovat tak, aby se kopie konfigurace doplácela s vaší aplikací v případě, že je služba při spuštění aplikace nedostupná.
Klientské knihovny
Mnohé z těchto funkcí jsou zpřístupněny prostřednictvím klientských knihoven, které se integrují s prostředím runtime aplikace za účelem usnadnění načítání a ukládání hodnot do mezipaměti, aktualizace hodnot při změně a dokonce zpracování přechodných výpadků služby App Configuration Service.
| Runtime (Modul runtime) | Klientská knihovna | Poznámky | Rychlé zprovoznění |
|---|---|---|---|
| .NET | Microsoft.Extensions.Configuration.AzureAppConfiguration | Poskytovatel pro Microsoft.Extensions.Configuration |
Rychlý start |
| ASP.NET | Microsoft.Azure.AppConfiguration.AspNetCore | Poskytovatel pro Microsoft.Extensions.Configuration |
Rychlý start |
| Azure Functions v .NET | Microsoft.Extensions.Configuration.AzureAppConfiguration | Používá se s rozšířeními azure function pro podporu konfigurace v souboru Startup.cs. | Rychlý start |
| .NET Framework | Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration | Tvůrce konfigurace pro System.Configuration |
Rychlý start |
| Java Spring | com.azure.spring > azure-spring-cloud-appconfiguration-config | Podporuje přístup přes Spring Framework. ConfigurationProperties |
Rychlý start |
| Python | azure.appconfiguration | Poskytuje AzureAppConfigurationClient |
Rychlý start |
| JavaScript/Node.js | @azure/app-configuration | Poskytuje AppConfigurationClient |
Rychlý start |
Kromě klientských knihoven existují také úlohy Azure App Configuration Sync GitHub a Azure App Configuration Pull Azure App Configuration PushAzure DevOps pro integraci kroků konfigurace do procesu & sestavení.
Další kroky
- Podívejte se na další App Configuration ukázky.
- Zjistěte, jak integrovat Azure App Configuration s nasazeními Kubernetes.
- Zjistěte, Azure App Configuration vám také pomůžou se spravovat příznaky funkcí.