Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Flytta konfigurationsinformationen från programdistributionspaketet till en central plats. Den här metoden ger enklare hantering och kontroll av konfigurationsdata och för att dela konfigurationsdata mellan program och programinstanser.
Kontext och problem
De flesta programkörningsmiljöer innehåller konfigurationsinformation i filer som du distribuerar med programmet. I vissa fall kan du redigera dessa filer för att ändra programmets beteende när du har distribuerat programmet. Konfigurationsändringar kräver dock att du distribuerar om programmet. Omdistribution leder ofta till oacceptabel stilleståndstid och andra administrativa kostnader.
Lokala konfigurationsfiler begränsar också konfigurationen till ett enda program. I vissa scenarier kanske du vill dela konfigurationsinställningar i flera program. Exempel är databasanslutningssträngar, temainformation för användargränssnittet och URL:er för köer och lagring som en relaterad uppsättning program använder.
Det är svårt att hantera ändringar i lokala konfigurationer i flera instanser som körs av programmet. Den här utmaningen kan resultera i instanser som använder olika konfigurationsinställningar när du distribuerar uppdateringen.
Uppdateringar av program och komponenter kan också kräva ändringar i konfigurationsscheman. Många konfigurationssystem stöder inte olika versioner av konfigurationsinformation.
Lösning
Lagra konfigurationsinformationen i extern lagring och ange ett gränssnitt som du kan använda för att snabbt och effektivt läsa och uppdatera konfigurationsinställningar. Typen av externt arkiv beror på programmets värd- och körningsmiljö. I ett molnbaserat scenario är extern lagring vanligtvis en molnbaserad lagringstjänst eller dedikerad konfigurationstjänst. Det kan också vara en värdbaserad databas eller ett annat anpassat system.
Det backningslager som du väljer för konfigurationsinformation bör ha ett gränssnitt som ger konsekvent och enkel åtkomst. Den bör exponera informationen i ett korrekt skrivet och strukturerat format. Implementeringen kan också behöva auktorisera användarnas åtkomst för att skydda konfigurationsdata. Det kan behöva vara tillräckligt flexibelt för att lagra flera versioner av konfigurationen, till exempel utveckling, test och produktion, inklusive flera versioner av varje konfiguration.
Många inbyggda konfigurationssystem läser data när programmet startar och cachelagrade sedan data i minnet för att ge snabb åtkomst och minimera påverkan på programmets prestanda. Beroende på vilken typ av lagringsplats som du använder och svarstiden för det här arkivet kanske du vill implementera en cachelagringsmekanism i det externa konfigurationsarkivet. Mer information finns i Vägledning för cachelagring. Följande diagram visar en översikt över mönstret för externt konfigurationsarkiv med en valfri lokal cache.
Problem och överväganden
Tänk på följande när du bestämmer hur du ska implementera det här mönstret:
Välj ett lagringslager som ger acceptabel prestanda, hög tillgänglighet och robusthet. Se till att du kan säkerhetskopiera det i processen för programunderhåll och administration. I ett molnbaserat program använder du en molnlagringsmekanism eller en dedikerad konfigurationsplattformstjänst för att uppfylla dessa krav.
Utforma schemat för lagringsplatsen för att tillåta flexibilitet i de typer av information som det kan innehålla. Se till att den innehåller funktioner för alla konfigurationskrav, till exempel inskrivna data, samlingar av inställningar, flera versioner av inställningar och andra funktioner som programmen kräver. Schemat bör vara enkelt att utöka för att stödja fler inställningar när kraven ändras.
Tänk på de fysiska funktionerna i lagringsplatsen, hur de relaterar till hur konfigurationsinformation lagras och hur prestanda påverkas. Om du till exempel lagrar ett XML-dokument som innehåller konfigurationsinformation måste antingen konfigurationsgränssnittet eller programmet parsa dokumentet för att läsa enskilda inställningar. Parsning komplicerar hur du uppdaterar inställningarna, men cachelagring av inställningarna kan hjälpa till att förskjuta långsammare läsprestanda.
Överväg hur konfigurationsgränssnittet tillåter kontroll över omfånget och arv av konfigurationsinställningar. Du kan till exempel behöva begränsa konfigurationsinställningarna på organisations-, program- och datornivå. Konfigurationsgränssnittet kan behöva delegera kontroll över åtkomsten till olika omfång och förhindra eller tillåta att enskilda program åsidosätter inställningar.
Kontrollera att konfigurationsgränssnittet kan exponera konfigurationsdata i de format som krävs, till exempel inskrivna värden, samlingar, nyckel/värde-par och egenskapspåsar.
Fundera på hur konfigurationsarkivets gränssnitt fungerar när inställningarna innehåller fel eller inte finns i lagringsplatsen. Du kan behöva återställa standardinställningar och loggfel. Tänk också på skiftlägeskänsligheten för nycklar eller namn i konfigurationsinställningar, hur du lagrar och hanterar binära data samt hur du hanterar null- eller tomma värden.
Överväg att skydda konfigurationsdata och endast ge åtkomst till lämpliga användare och program. Konfigurationsarkivets gränssnitt tillhandahåller vanligtvis den här funktionen, men du måste också se till att användare och program inte kan komma åt data direkt i lagringsplatsen utan rätt behörigheter. Se till att de behörigheter som krävs för att läsa och skriva konfigurationsdata är strikt åtskilda. Fundera även på om du behöver kryptera vissa eller alla konfigurationsinställningar och hur du implementerar den här krypteringen i konfigurationsarkivets gränssnitt.
Du bör också aktivera granskningsloggning för att registrera vem som läser eller ändrar konfigurationsvärden och när dessa åtgärder inträffar. Tillämpa samma granskningskrav på eventuella lokala reservkopior av konfigurationsdata.
Separera meningslösa konfigurationsvärden från hemligheter. Behåll rutininställningar, till exempel funktionsflaggor och slutpunkter, i konfigurationsinställningarna. Lagra hemligheter, till exempel anslutningssträngar, API-nycklar, certifikat och lösenord, i ett dedikerat hemlighetshanteringssystem som tillhandahåller kryptering och kontrollerad åtkomst.
Centralt lagrade konfigurationer, som ändrar programmets beteende under körningen, är avgörande. Distribuera, uppdatera och hantera dem med hjälp av samma mekanismer som du använder för att distribuera programkod. Du måste till exempel utföra ändringar som kan påverka fler än ett program genom att använda en fullständigt testad och stegvis distributionsmetod för att säkerställa att ändringen passar alla program som använder den här konfigurationen. Om en administratör redigerar en inställning för att uppdatera ett program kan det påverka andra program som använder samma inställning negativt. Produkter som Azure App Configuration bidra till att minska den här risken genom inbyggda funktioner, till exempel revisionshistorik, återställning till tidpunkt (PITR), oföränderliga ögonblicksbilder och progressiva distributionsmönster.
Om ett program cachelagrar konfigurationsinformation måste du avisera programmet när konfigurationen ändras. Du kan implementera en förfalloprincip för cachelagrade konfigurationsdata så att den här informationen uppdateras automatiskt med jämna mellanrum. Programmet ser ändringarna och implementerar dem.
Cachelagrade konfigurationsdata kan hjälpa dig att lösa tillfälliga anslutningsproblem som det externa konfigurationsarkivet upplever vid programkörning, men den här metoden löser vanligtvis inte problemet om det externa arkivet är nere när programmet startar. Se till att din pipeline för programdistribution kan tillhandahålla den senaste kända uppsättningen konfigurationsvärden i en konfigurationsfil som ska användas när programmet inte kan hämta livevärden vid start.
När du ska använda det här mönstret
Använd det här mönstret i sådana här scenarier:
Du måste dela konfigurationsinställningar i flera program eller instanser eller framtvinga en standardkonfiguration i dem.
Standardkonfigurationssystemet stöder inte alla obligatoriska inställningstyper, till exempel bilder eller komplexa datastrukturer.
Du behöver ett kompletterande lager för vissa inställningar, samtidigt som program kan åsidosätta vissa eller alla centralt lagrade värden.
Du måste förenkla administrationen för flera program och eventuellt övervaka konfigurationsanvändningen genom att registrera åtkomst till konfigurationsarkivet.
Det här mönstret kanske inte är lämpligt när:
- Konfigurationen är enkel, lokal för ett program och ändras endast under normala versionscykler. I det här fallet kan ett externt konfigurationslager lägga till onödig driftskomplexitet.
Design av arbetsbelastning
Utvärdera hur du använder mönster för externt konfigurationsarkiv i en arbetsbelastningsdesign för att uppfylla de mål och principer som beskrivs i principerna i Azure Well-Architected Framework. Följande tabell innehåller vägledning om hur det här mönstret stöder målen för varje pelare.
| Grundpelare | Så här stöder det här mönstret pelarmål |
|---|---|
| Operational Excellence hjälper till att leverera arbetsbelastningskvalitet genom standardiserade processer och teamsammanhållning. | Den här separationen av programkonfigurationen från programkoden stöder miljöspecifik konfiguration och tillämpar versionshantering på konfigurationsvärden. Externa konfigurationslager är också en vanlig plats för att hantera funktionsflaggor för att implementera säkra distributionsmetoder. - OE:10 Automationsdesign - OE:11 Säkra distributionsmetoder |
Om detta mönster inför kompromisser inom en pelare bör du överväga dem mot målen för de andra pelarna.
Example
I följande exempel visas hur du implementerar mönstret för externt konfigurationsarkiv i Azure. I det första exemplet används appkonfiguration och klientbibliotek. Det andra exemplet använder ett anpassat stödarkiv för scenarier som kräver specialiserad implementering.
App Configuration
De flesta program kan använda App Configuration i stället för ett anpassat konfigurationsarkiv. Appkonfiguration stöder nyckel-/värdepar som du kan tillämpa namnrymder på. App Configuration stöder också oföränderliga ögonblicksbilder av konfigurationen så att du kan inspektera, återställa eller gradvis distribuera konfigurationsändringar utan risk för instanser som körs.
Använd referenserna för ögonblicksbilder för att låta program växla mellan ögonblicksbilder vid körning utan kodändringar eller omdistribution. Du kan exportera konfigurationsvärden så att en kopia levereras med ditt program som en säkerhetskopia som ska användas om tjänsten inte kan nås när programmet startar.
I AppKonfiguration är nycklar och värden Unicode-strängar och varje nyckel/värde-par har valfria metadata, till exempel etikettbaserade varianter och innehållstyp. Använd innehållstyp för att beskriva hur ditt program ska tolka ett värde, till exempel i JSON eller i en inbyggd appkonfigurationstyp. App Configuration har också en revisionshistorik med PITR, som hjälper dig att granska och återställa tidigare nyckel/värde-par.
För återhämtning etablerar du ditt lager i en region som stöder tillgänglighetszoner och aktiverar geo-replikering så att du kan konfigurera dina program att läsa från närmaste replik och växla mellan replikslutpunkter under regionala avbrott. Använd Azure Key Vault referenser för att lagra hemligheter i Key Vault och referera till dem från App Configuration, i stället för att lagra autentiseringsuppgifter direkt i konfigurationsarkivet. Använd hanterad identitet och Azure rollbaserad åtkomstkontroll (Azure RBAC) i stället för anslutningssträngar för att autentisera program till App Configuration.
För arbetsbelastningar som körs i Azure Kubernetes Service (AKS) kan App Configuration Kubernetes Provider generera ConfigMaps och Hemligheter direkt från ditt lager utan att kräva kodändringar i dina arbetsbelastningscontainrar. Du kan också använda App Configuration för att hantera funktionsflaggor, inklusive riktad distribution och variantbaserad experimentering, i dina säkra distributionsmetoder.
För nätverksisolering använder du private-slutpunkter för appkonfiguration så att klienttrafiken förblir på privata IP-adresser via Azure Private Link. När du har konfigurerat privat åtkomst kan du inaktivera offentlig åtkomst för att minska exponeringen för offentliga slutpunkter. I geo-replikerade distributioner kan en enskild privat slutpunkt nå alla repliker, men för högre regional motståndskraft kan du etablera privata slutpunkter för varje replikregion och konfigurera DNS (Domain Name System) i enlighet med detta.
Klientbibliotek
Klientbibliotek innehåller många av ovanstående funktioner. Klientbibliotek integreras med programkörningen för att hämta och cachelagrar värden, uppdatera värden när de ändras och hantera tillfälliga avbrott i App Configuration.
| Runtime | Klientbibliotek | Noteringar | Quickstart |
|---|---|---|---|
| .NET | Microsoft.Extensions.Configuration.AzureAppConfiguration | Provider för Microsoft.Extensions.Configuration |
Snabbstart för .NET |
| ASP.NET Core | Microsoft.Azure.AppConfiguration.AspNetCore | Lägger till mellanprogram för begärandedriven uppdatering för ASP.NET Core | Quickstart för ASP.NET Core |
| Azure Functions i .NET | Microsoft.Azure.AppConfiguration.Functions.Worker | Leverantör för den isolerade arbetsmodellen som använder Program.cs |
Quickstart för Azure Functions |
| .NET Framework | Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration | Konfigurationsbyggare för System.Configuration |
Quickstart för .NET Framework |
| Java Spring | com.azure.spring > azure-spring-cloud-appconfiguration-config | Stöder Spring Framework-åtkomst via ConfigurationProperties |
Quickstart för Java Spring |
| Python | azure-appconfiguration-provider | Providerbibliotek som stödjer dynamisk uppdatering och referenser till Key Vault. | Snabbstart för Python |
| JavaScript och Node.js | @azure/app-configuration-provider - En leverantör för appkonfiguration | Providerbibliotek som erbjuder stöd för dynamisk uppdatering och referens till Key Vault | Snabbstart för JavaScript |
Följande App Configuration sync GitHub Action och inbyggda Azure-pipelines uppgifter är också tillgängliga:
Exempel på egen lagringsplats
I ett program som Azure värdar kan du använda Azure Storage för att lagra konfigurationsinformation externt. Den här metoden ger återhämtning och höga prestanda. Som standard replikerar Storage data tre gånger inom ett enda datacenter. För geo-redundans mellan regioner kan du konfigurera geo-replikering med manuella redundansfunktioner. Azure Table Storage tillhandahåller ett nyckelvärdesarkiv som kan använda ett flexibelt schema för värdena. Azure Blob Storage tillhandahåller ett hierarkiskt, containerbaserat arkiv som kan innehålla alla typer av data i individuellt namngivna blobar.
När du implementerar det här mönstret måste du abstrahera Blob Storage och exponera inställningarna i dina program. Du måste också söka efter uppdateringar vid körning och bestämma hur du ska svara på dessa uppdateringar.
I följande exempel visas hur du kan använda ett enkelt konfigurationslager och Blob Storage för att lagra och exponera konfigurationsinformation. En BlobSettingsStore-klass abstraherar Blob Storage för att lagra konfigurationsinformation. Det implementerar ett enkelt ISettingsStore gränssnitt.
public interface ISettingsStore
{
Task<ETag> GetVersionAsync();
Task<Dictionary<string, string>> FindAllAsync();
}
Det här gränssnittet definierar metoder för att hämta konfigurationsinställningar som konfigurationsarkivet innehåller och innehåller ett versionsnummer som du kan använda för att identifiera de senaste konfigurationsinställningsändringarna. En BlobSettingsStore klass kan använda ETag blobens egenskap för att implementera versionshantering. Egenskapen ETag uppdateras automatiskt varje gång en blob skrivs.
Note
Den här enkla illustrationen visar alla konfigurationsinställningar som strängvärden i stället för inskrivna värden.
En ExternalConfigurationManager klass innehåller en omslutning runt en BlobSettingsStore instans. Ett program kan använda den här klassen för att hämta konfigurationsinformation. Den här klassen kan använda en mekanism för ändringsmeddelanden, till exempel Microsoft Reactive Extensions, för att publicera konfigurationsuppdateringar medan systemet körs. Det implementerar också Cache-Aside mönster för inställningar för att ge bättre återhämtning och prestanda.
I följande exempel visas hur du kan implementera en ExternalConfigurationManager klass.
static void Main(string[] args)
{
// Start monitoring configuration changes.
ExternalConfiguration.Instance.StartMonitor();
// Get a setting.
var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
…
}
Nästa steg
- AppKonfigurationsexempel
- Integrera appkonfiguration med Kubernetes-distributioner med hjälp av Helm
- Hantera funktionsflaggor i App Configuration
- Vägledning för cachelagring
- Metodtips för appkonfiguration