Share via


Granskning av Azure Well-Architected Framework – Azure Cosmos DB for NoSQL

I den här artikeln beskrivs metodtipsen för Azure Cosmos DB för NoSQL. Dessa metodtips säkerställer att du kan distribuera lösningar på Azure Cosmos DB som är effektiva, tillförlitliga, säkra, optimerade för kostnader och driftsanpassade. Den här vägledningen fokuserar på de fem grundpelarna för arkitekturkvalitet i det välarkitekterade ramverket:

Den här granskningsguiden förutsätter att du har en fungerande kunskap om Azure Cosmos DB och är väl bevandrad med dess funktioner. Mer information finns i Azure Cosmos DB för NoSQL.

Förutsättningar

Genom att förstå grundpelarna för välarkitekterat ramverk kan du skapa en högkvalitativ, stabil och effektiv molnarkitektur. Vi rekommenderar att du börjar med att granska din arbetsbelastning med hjälp av utvärderingsutvärderingen av Azure Well-Architected Framework.

Mer kontext finns i olika referensarkitekturer som återspeglar övervägandena i den här guiden i deras design. Dessa arkitekturer omfattar, men är inte begränsade till:

Tillförlitlighet

Precis som med alla molntjänster kan fel inträffa både på tjänst- och arbetsbelastningssidan. Det är omöjligt att förhindra alla potentiella fel, men det är ett bättre mål att minimera de effekter som en enskild komponent med fel kan ha på hela arbetsbelastningen. Det här avsnittet innehåller överväganden och rekommendationer för att minimera konsekvenserna av ett engångsfel.

Checklista för design

  • Fundera på hur den valda konsekvensnivån och replikeringsläget påverkar målet för återställningspunkt (RPO) i ett regionomfattande avbrott.
  • Utforma distributionen av databaskontot så att den omfattar minst två regioner i Azure. Dessutom distribuerar du ditt konto över flera tillgänglighetszoner när det erbjuds i din Azure-region.
  • Utvärdera skrivstrategierna för flera regioner och en region för din arbetsbelastning. För skrivning i en region utformar du arbetsbelastningen så att den har minst en andra läsregion för redundans. Aktivera automatisk redundans för skriv- och lässcenarier för en region och flera regioner. För skrivning i flera regioner jämför du kompromisserna i komplexitet och konsekvens med fördelarna med att skriva till flera regioner. Granska förväntningarna under ett regionalt avbrott för skrivkonton för en region och flera regioner.
  • Aktivera tjänsthanterad redundans för ditt konto.
  • Utforma ett slutpunkt-till-slutpunkt-test av hög tillgänglighet för ditt program.
  • Gå igenom vanliga säkerhetskopieringsprocesser , inklusive, men inte begränsat till, återställning till tidpunkt, återställning från oavsiktliga destruktiva åtgärder, återställning av borttagna resurser och återställning till en annan region vid en tidpunkt. Konfigurera kontot med kontinuerlig säkerhetskopiering och välj lämplig kvarhållningsperiod baserat på dina affärskrav.
  • Utforska guiden för att utforma elastiska program, granska standardprincipenför återförsök för SDK:erna och planera för anpassad hantering för specifika tillfälliga fel. De här guiderna ger metodtips för att göra programkoden motståndskraftig mot tillfälliga fel.

Rekommendationer

Rekommendation Förmån
Distribuera ditt Azure Cosmos DB-konto mellan tillgänglighetszoner (när det är tillgängligt). Tillgänglighetszoner ger distinkta energi-, nätverks- och kylnings-isolerande maskinvarufel till en delmängd av dina repliker. Azure Cosmos DB har flera repliker som sträcker sig över en enda slumpmässig tillgänglighetszon när funktionen tillgänglighetszoner inte används. Om funktionen tillgänglighetszon används sträcker sig replikerna över flera tillgänglighetszoner.
Konfigurera ditt Azure Cosmos DB-konto så att det omfattar minst två regioner. Om du sträcker dig över flera regioner förhindras ditt konto från att vara helt otillgängligt om det uppstår ett avbrott i en isolerad region.
Aktivera tjänsthanterad redundans för ditt konto. Med tjänsthanterad redundans kan Azure Cosmos DB ändra skrivregionen för ett konto med flera regioner för att bevara tillgängligheten. Den här ändringen sker utan användarinteraktion. Förstå kompromisserna med tjänsthanterad redundans och planera för tvingad redundans vid behov. Mer information finns i skapa program med hög tillgänglighet.
Verifiera tillgängligheten genom att testa redundans manuellt med tjänsthanterad redundans tillfälligt inaktiverad. Om du tillfälligt inaktiverar tjänsthanterad redundans kan du verifiera programmets höga tillgänglighet från slutpunkt till slutpunkt med en manuell redundans som startats med hjälp av ett skript eller Azure-portalen. Därefter kan du återaktivera tjänsthanterad redundans.

Azure Policy-definitioner

Säkerhet

Säkerhet är en viktig del av alla arkitekturer som enkelt kan förbises för enkelhetens skull. Öka säkerheten för den slutliga arbetsbelastningen genom att överväga olika säkerhetsmetoder i förväg innan den första resursen eller konceptbeviset skapas. Det här avsnittet innehåller överväganden och rekommendationer för att minska antalet säkerhetsrisker för din slutliga arbetsbelastning.

Checklista för design

Rekommendationer

Rekommendation Förmån
Implementera åtminstone säkerhetsbaslinjerna för dataskydd och identitetshantering. Gå igenom säkerhetsbaslinjen, inklusive identitetshantering och dataskydd. Implementera rekommendationerna för att skydda ditt Azure Cosmos DB-konto.
Inaktivera offentliga slutpunkter och använd privata slutpunkter när det är möjligt. Undvik att lämna onödiga eller oanvända offentliga slutpunkter tillgängliga för ytangrepp på ditt konto.
Använd rollbaserad åtkomstkontroll för att begränsa åtkomsten på kontrollplan till specifika identiteter och grupper och inom omfånget för väldefinierade tilldelningar. Använd rollbaserad åtkomstkontroll för att förhindra oavsiktlig åtkomst till ditt konto. Tilldela lämpliga roller och behörigheter till användare eller program som har åtkomst till Azure Cosmos DB.
Skapa virtuella nätverksslutpunkter och regler för att begränsa åtkomsten till kontot. Implementera tjänstslutpunkter för virtuellt nätverk och brandväggsregler för att begränsa åtkomsten till ditt Azure Cosmos DB-konto. Använd nätverkssäkerhetsgrupper (NSG:er) för att styra inkommande och utgående trafik till och från Azure Cosmos DB-resurserna. Genom att begränsa åtkomsten till betrodda nätverk och tillämpa lämpliga nätverkssäkerhetsåtgärder kan du skydda dina data från obehörig åtkomst.
Följ de bästa metoderna för programvaruutveckling för säker åtkomst till data. Följ säkra kodningsmetoder och utför säkra kodgranskningar när du utvecklar program som interagerar med Azure Cosmos DB. Skydda mot vanliga säkerhetsrisker som inmatningsattacker, skript för flera platser (XSS) eller osäkra direktobjektreferenser (IDOR). Implementera indataverifiering, parametriserade frågor och lämplig felhantering för vanliga HTTP-statuskoder för att förhindra säkerhetsrisker.
Övervaka kontrollplansloggar för överträdelser. Övervakning hjälper dig att spåra åtkomstmönster och granskningsloggar, vilket säkerställer att databasen förblir säker och kompatibel med relevanta dataskyddsregler. Övervakning av dataplansmått kan också hjälpa dig att identifiera okända mönster som kan avslöja ett säkerhetsintrång. Mer information finns i säkerhetschecklistan för Azure-databaser.
Aktivera Microsoft Defender för Azure Cosmos DB Microsoft Defender identifierar försök att utnyttja databaser i ditt Azure Cosmos DB för NoSQL-konto. Defender identifierar potentiella SQL-inmatningar, misstänkta åtkomstmönster och annat potentiellt utnyttjande.

Azure Policy-definitioner

Kostnadsoptimering

Arbetsbelastningens egenskaper och implementeringen av din lösning kan påverka den slutliga kostnaden för att köra i Azure. Överväg huvuddrivrutiner som din partitioneringsstrategi, konsekvensnivå, replikering och skrivtyp när du utformar arbetsbelastningen. När du ändrar storlek på arbetsbelastningen bör du tänka på datas läs-/skrivkaraktär, storleken på genomsnittliga objekt, normalisering och TTL. Det här avsnittet innehåller överväganden och rekommendationer för att effektivisera kostnaderna för din arbetsbelastning.

  • Utforma en indexeringsprincip som tar hänsyn till de åtgärder och frågor som du vanligtvis gör i din arbetsbelastning.
  • Fastställ en partitionsnyckel eller uppsättning partitionsnycklar som har ett värde som har hög kardinalitet och som inte ändras. Använd den befintliga vägledningen och metodtipsen för att välja en lämplig partitionsnyckel. Tänk också på indexeringsprincipen när du fastställer en partitionsnyckel.
  • Välj ett dataflödesallokeringsschema som är lämpligt för din arbetsbelastning. Granska fördelarna med standard- och autoskalningsdataflöde som distribueras på databas- eller containernivå. Överväg också att vara serverlös när det är lämpligt. Granska arbetsbelastningens trafikmönster i samband med att du väljer ett allokeringsschema för dataflöde.
  • Överväg konsekvensnivåer som de relaterar till din arbetsbelastning. Tänk också på om klientsessioner ska ändra standardkonsekvensnivån.
  • Beräkna den förväntade totala datalagringen för din arbetsbelastning. Storleken på objekt och index påverkar alla dina kostnader för datalagring. Beräkna effekten av replikering och säkerhetskopiering på lagringskostnader.
  • Skapa en strategi för att automatiskt ta bort äldre objekt som inte längre används eller behövs. Om det behövs exporterar du dessa objekt till en lagringslösning med lägre kostnad innan de tas bort.
  • Utvärdera de vanligaste frågorna som minimerar sökningar mellan partitioner. Använd den här informationen för att informera processen att välja en partitionsnyckel eller anpassa en indexeringsprincip.

Rekommendationer

Rekommendation Förmån
Övervaka RU/s-användning och mönster. Använd mått för att övervaka RU-förbrukning från början av din lösning. Använd frågor och andra dataforskningstekniker för att hitta antimönster i programkoden.
Anpassa indexeringsprincipen för att mappa till din arbetsbelastning. Standardindexeringsprincipen indexerar alla sökvägar i ett objekt, och den här principen kan ha betydande inverkan på RU-förbrukning och kostnader. Använd en indexeringsprincip som endast baseras på de sökvägar som du behöver indexera för dina vanliga frågor. För skrivintensiva arbetsbelastningar inaktiverar du automatisk indexering av kolumner som inte används i frågor.
Välj partitionsnycklar som är idealiska för din arbetsbelastning. Partitionsnyckeln ska fördela dataflödesförbrukningen och datalagringen jämnt mellan logiska partitioner. Markeringen bör också minimera antalet obundna frågor mellan partitioner. Undvik frekventa partitioner som tar emot en oproportionerlig mängd trafik eftersom obalanspartitioner kan öka kostnaderna för dataflöde och tillfälliga fel. Använd de vanligaste sökfrågorna för att fastställa potentiella partitionsnycklar som sannolikt bara kör frågor mellan partitioner eller avgränsade partitioner.
Använd serverlöst eller etablerat dataflöde, manuell etablering eller autoskalning på databas- eller containernivå när det är lämpligt för din arbetsbelastning. Jämför de etablerade dataflödestyperna och välj lämpligt alternativ för din arbetsbelastning. I allmänhet kan mindre arbetsbelastningar och dev/test-arbetsbelastningar dra nytta av serverlöst dataflöde eller manuellt delat dataflöde på databasnivå. Större, verksamhetskritiska arbetsbelastningar kan dra nytta av etablerat dataflöde som tilldelats på containernivå.
Konfigurera standardkonsekvensnivån för ditt program. När det är lämpligt nedgraderar du standardkonsekvensnivån i klientsessioner. Du kanske inte alltid behöver ändra standardkonsekvensnivån eller åsidosätta den i klientsessioner. Överväg de högre kostnaderna som är associerade med läsningar på starkare konsekvensnivåer.
För dev/test-arbetsbelastningar använder du Azure Cosmos DB-emulatorn. Azure Cosmos DB-emulatorn är ett alternativ för utveckling/testning och kontinuerlig integrering som kan spara på kostnaderna för dessa vanliga arbetsbelastningar för utvecklingsteamet. Emulatorn är också tillgänglig som en Docker-containeravbildning.
Använda transaktionella batchåtgärder Utforma partitioner för att dra nytta av transaktionella batchåtgärder i en logisk partitionsnyckel för infogning. Använd batchåtgärder i SDKS på klientsidan för att infoga, uppdatera eller ta bort flera dokument i en enda transaktionsbegäran. Det här steget kan minska antalet enskilda begäranden och kan så småningom leda till bättre genomflödeseffektivitet.
Använd projektion för att minska dataflödeskostnaderna för stora frågeresultatuppsättningar. Skapa frågor för att endast projicera det minsta antalet fält som krävs från en resultatuppsättning. Om beräkningar på fält är nödvändiga utvärderar du dataflödeskostnaden för att utföra dessa beräkningar på serversidan jämfört med klientsidan.
Undvik att använda obundna frågor mellan partitioner. Utvärdera och redigera frågor för att säkerställa att de söker i en enda logisk partition när det är möjligt. Använd frågefilter för att styra vilka logiska partitioner frågemålen ska ha. Om en fråga måste söka mellan logiska partitioner, begränsar du frågan till att endast söka i en delmängd av logiska partitioner i stället för en fullständig genomsökning.
Implementera time-to-live (TTL) för att ta bort oanvända objekt. Använd TTL för att automatiskt ta bort data som inte längre behövs. Hantera lagringskostnader genom att ta bort utgångna eller föråldrade data. Om det behövs exporterar du utgångna data till en lagringslösning med lägre kostnad.
Överväg ett analysarkiv för tunga aggregeringar. Azure Cosmos DB-analysarkivet synkroniserar automatiskt dina data till ett separat kolumnlager för att optimera för stora aggregeringar, rapporterings- och analysfrågor.

Azure Policy-definitioner

Driftsäkerhet

Arbetsbelastningar måste övervakas när de har distribuerats för att se till att de fungerar som avsett. Dessutom kan övervakning av arbetsbelastningar bidra till att frigöra nya effektivitetsvinster som inte är omedelbart uppenbara under planeringsfasen. I katastrofala scenarier är diagnostikdata nyckeln till att upptäcka varför en incident med hög allvarlighetsgrad kan ha inträffat. Det här avsnittet innehåller överväganden och rekommendationer för att övervaka händelser och egenskaper för dina arbetsbelastningar.

Checklista för design

  • Utarbeta en strategi för logg- och måttövervakning för att skilja mellan olika arbetsbelastningar, flagga exceptionella scenarier, spåra mönster i undantag/fel och spåra prestanda för värddatorer.
  • Utforma stora arbetsbelastningar för att använda massåtgärder när det är möjligt.
  • Definiera flera aviseringar för att övervaka begränsning, analysera dataflödesallokering och spåra storleken på dina data.
  • Utforma en övervakningsstrategi för tillgänglighet för din lösning i olika regioner.
  • Skapa och tillämpa metodtips för att automatisera distributionen av ditt Azure Cosmos DB för NoSQL-konto och -resurser.
  • Planera förväntade måtttrösklar baserat på partitions- och indexdesign. Se till att det finns en plan för att övervaka dessa mått för att avgöra hur nära de planerade tröskelvärdena är.

Rekommendationer

Rekommendation Förmån
Se till att programutvecklare använder den senaste versionen av utvecklar-SDK:et. Varje Azure Cosmos DB för NoSQL SDK har en lägsta rekommenderad version. Mer information finns i .NET SDK och Java SDK.
Skapa identifierare i klientprogrammet för att särskilja arbetsbelastningar. Överväg flaggor, till exempel suffixet user-agent, för att identifiera vilken arbetsbelastning varje loggpost eller mått ska associeras med.
Samla in kompletterande diagnostik med hjälp av utvecklar-SDK:et. Använd diagnostikinmatningsteknikerna för varje SDK för att lägga till kompletterande information om arbetsbelastningen tillsammans med standardmått och loggar. Mer information finns i .NET SDK och Java SDK.
Skapa aviseringar som är associerade med värddatorresurser. Anslut och tillgänglighetsproblem kan uppstå på grund av problem med värddatorn på klientsidan. Övervaka resurser som CPU, minne och lagring på värddatorer med klientprogram med hjälp av Azure Cosmos DB för NoSQL SDK:er.
Använd massfunktionerna i klient-SDK:er för stora åtgärder. Scenarier som kräver en hög grad av dataflöde drar nytta av att använda massfunktionen i SDK: et. Massfunktionen hanterar och batchar automatiskt åtgärder för att maximera dataflödet.
Skapa aviseringar för dataflödesbegränsning. Använd aviseringar för att spåra dataflödesbegränsning över förväntade tröskelvärden. Med tiden kan du granska och justera aviseringar när du lär dig mer om din arbetsbelastning i förhållande till Azure Cosmos DB. Måttet Normaliserad RU-förbrukning är ett mått som mäter den procentuella användningen av etablerat dataflöde i en databas eller container. Om det här måttet är konsekvent på 100 %, returnerar begäranden sannolikt ett tillfälligt fel.
Spåra frågeprestanda med hjälp av mått. Använd mått för att spåra prestanda för dina viktigaste frågor över tid. Utvärdera om det finns effektivitetsvinster att hitta genom att uppdatera den här indexeringsprincipen eller ändra frågor. Om frågeprestandan är dålig kan du felsöka prestanda och tillämpa bästa praxis för frågor. Mer information finns i frågeprestandatips.
Använd mallar för att automatiskt distribuera kontoresurser. Överväg Azure Resource Manager-, Bicep- eller Terraform-mallar för att automatisera distributionen av ditt konto och efterföljande resurser. Se till att ditt team använder samma mallar för att distribuera till andra icke-produktionsmiljöer.
Spåra viktiga mått för att identifiera vanliga problem i din arbetsbelastning. Använd specifika mått för att hitta vanliga problem i din arbetsbelastning, inklusive, men inte begränsat till; RU-användning, RU-användning efter partition, begränsning och begärandevolymer efter typ. Mer information finns i övervaka datareferens.

Azure Policy-definitioner

Prestandaeffektivitet

  • Definiera en prestandabaslinje för ditt program. Mät hur många samtidiga användare och transaktioner du kan behöva hantera. Överväg arbetsbelastningsegenskaper som ditt genomsnittliga användarflöde, vanliga åtgärder och toppar i användningen.
  • Utforska dina vanligaste och mest komplexa frågor. Identifiera frågor som använder flera sökningar, kopplingar eller aggregeringar. Överväg dessa frågor i designöverväganden för partitionsnyckeln eller indexeringsprincipen.
  • För de vanligaste frågorna avgör du hur många resultat du förväntar dig per sida. Det här talet hjälper till att formalisera antalet buffrade objekt för förinställda resultat.
  • Undersöka dina målanvändare. Ta reda på vilka Azure-regioner som ligger närmast dem.
  • Identifiera frågor som använder ett eller flera beställningsfält. Identifiera även åtgärder som påverkar flera fält. Inkludera dessa fält explicit i indexeringsprincipdesignen.
  • Utforma objekt så att deras motsvarande JSON-dokument är så små som möjligt. Överväg att dela upp data mellan flera objekt om det behövs.
  • Identifiera frågor på underordnade matriser och avgöra om de är kandidater för effektivare underfrågor.
  • Kontrollera om din arbetsbelastning kräver ett analysarkiv. Överväg analysarkiv och tjänster som Azure Synapse Link för extremt komplexa frågor.
Rekommendation Förmån
Konfigurera dataflödet baserat på din prestandabaslinje. Använd verktyg som kapacitetskalkylatorn för att fastställa hur mycket dataflöde som krävs för din prestandabaslinje. Använd funktioner som autoskalning för att skala ditt faktiska dataflöde för att bättre matcha din faktiska arbetsbelastning. Övervaka din faktiska dataflödesförbrukning efteråt och gör justeringar.
Använd optimeringstekniker på klient- och serversidan när det är lämpligt. Dra nytta av den inbyggda integrerade cachen. Konfigurera SDK för att hantera hur många objekt som är förinställda (buffrade) och returneras för varje sida.
Distribuera Azure Cosmos DB för NoSQL till regioner som är närmast dina slutanvändare. Minska svarstiden genom att distribuera Azure Cosmos DB för NoSQL till de regioner som är närmast slutanvändarna så mycket som möjligt. Dra nytta av läsreplikering för att tillhandahålla prestanda för läsning oavsett hur du konfigurerar skrivning (en eller flera regioner). Konfigurera (.NET/Java) SDK för att föredra regioner närmare slutanvändaren.
Konfigurera SDK för direktläge. Direktläge är det bästa alternativet för bästa prestanda. Med det här läget kan klienten öppna TCP-anslutningar direkt till partitioner i tjänsten och skicka begäranden direkt utan någon mellanliggande gateway. Det här läget ger bättre prestanda eftersom det finns färre nätverkshopp.
Inaktivera indexering för massåtgärder. Om det finns många åtgärder för insert/replace/upsert inaktiverar du indexering för att förbättra hastigheten för åtgärden samtidigt som du använder massstöd för motsvarande SDK. Indexering kan omedelbart återanvändas senare.
Skapa sammansatta index för fält som används i komplexa åtgärder. Sammansatta index kan öka effektiviteten för åtgärder på flera fält efter storleksordning. I många fall använder du sammansatta index för ORDER BY instruktioner med flera fält.
Optimera värdklientdatorerna för SDK:erna. För de vanligaste fallen använder du minst 4 kärnor och 8 GB minne på 64-bitars värddatorer med hjälp av SDK:erna (.NET/Java). Aktivera även accelererat nätverk på värddatorer.
Använd singleton-mönstret för CosmosClient klassen i de flesta SDK:er. Använd klientklassen i de flesta SDK:er som singleton. Klientklassen hanterar sin egen livscykel och är utformad för att inte tas bort. Att ständigt skapa och ta bort instanser kan leda till sämre prestanda.
Håll objektstorlekarna mindre än 100 kB i storlek. Större objekt förbrukar mer dataflöde för vanliga läs- och skrivåtgärder. Frågor om större objekt som projicerar alla fält kan också ha en betydande dataflödeskostnad.
Använd underfrågor strategiskt för att optimera frågor som ansluter till stora datamängder. Frågor som ansluter till underordnade matriser kan öka komplexiteten om flera matriser är inblandade och inte filtreras. Till exempel kan en fråga som ansluter fler än två matriser med minst 10 objekt vardera expandera till över 1 000 tupplar. Optimera självkopplingsuttryck med hjälp av underfrågor för att filtrera matriserna innan du ansluter matriser i objektet. För frågor mellan partitioner optimerar du frågan så att den innehåller ett filter på partitionsnyckeln för att optimera routningen av frågan till minsta möjliga mängd partitioner.
Använd analytiska arbetsbelastningar för de mest komplexa frågorna. Om du kör frekventa aggregeringar eller kopplar frågor över stora containrar kan du överväga att aktivera analysarkivet och köra frågor i Azure Synapse Analytics.

Azure Policy-definitioner

Extra resurser

Överväg fler resurser som är relaterade till Azure Cosmos DB för NoSQL.

Vägledning för Azure Architecture Center

Vägledning för Cloud Adoption Framework

Nästa steg