Flera innehavare och Azure Cosmos DB

På den här sidan beskriver vi några av de funktioner i Azure Cosmos DB som är användbara när du arbetar med system med flera olika funktioner, och vi länkar till vägledning och exempel på hur du använder Azure Cosmos DB i en lösning för flera olika datorer.

Funktioner i Azure Cosmos DB som stöder flera innehavare

Partitionering

Genom att använda partitioner med Cosmos DB-containrar kan du skapa containrar som delas mellan flera klienter. Vanligtvis använder du klient-ID:t som en partitionsnyckel, men du kan också överväga att använda flera partitionsnycklar för en enda klientorganisation. En välplanerad partitioneringsstrategi implementerar effektivt mönstret för horisontell partitionering. Med stora containrar Cosmos DB dina klienter över flera fysiska noder för att uppnå en hög grad av skala.

Mer information:

Hantera enheter för begärande

Cosmos DB baseras på antalet enheter för programbegäran per sekund som du etablerar eller använder. En enhet för begäran är en logisk abstraktion av kostnaden för en databasåtgärd eller fråga. Normalt etablerar du ett definierat antal enheter för programbegäran per sekund för din arbetsbelastning, vilket kallas för dataflöde. Cosmos DB finns flera alternativ för hur du etablerar dataflöde. I en miljö med flera olika miljöer påverkar valet du gör prestanda och priset för dina Cosmos DB resurser.

En innehavarmodell för Cosmos DB innebär att distribuera separata containrar för varje klientorganisation i en delad databas. Cosmos DB kan du etablera enheter för begäran för en databas och alla containrar delar enheter för begäran. Om dina klientarbetsbelastningar vanligtvis inte överlappar kan detta vara en bra metod för att minska dina driftskostnader. Observera dock att den här metoden är sårbar för problem med Noisy Neighbor eftersom en enskild klientorganisations container kan förbruka en oproportionerlig mängd av de delade etablerade enheterna för begäran. Om du vill åtgärda detta när du har identifierat högljudda klienter kan du välja att ange etablerat dataflöde för en specifik container. De andra containrarna i databasen fortsätter att dela sitt dataflöde, men den brusiga klientorganisationen förbrukar sitt eget dedikerade dataflöde.

Cosmos DB också en serverlös nivå som passar för arbetsbelastningar med tillfällig eller oförutsägbar trafik. Med autoskalning kan du också konfigurera principer för att ange skalning av etablerat dataflöde. I en lösning för flera klienter kan du kombinera alla dessa metoder för att stödja olika typer av klient.

Anteckning

När du planerar Cosmos DB konfiguration bör du se till att du överväger tjänstkvoterna och begränsningarna.

För att övervaka och hantera de kostnader som är associerade med varje klientorganisation inkluderar varje åtgärd med hjälp Cosmos DB API de förbrukade enheterna för begäran. Du kan använda den här informationen för att aggregera och jämföra de faktiska enheter för begäran som förbrukas av varje klientorganisation, och du kan sedan identifiera klienter med olika prestandaegenskaper.

Mer information:

Kundhanterade nycklar

Vissa klienter kan kräva användning av sina egna krypteringsnycklar. Cosmos DB har en nyckelfunktion som hanteras av kunden. Den här funktionen tillämpas på nivån för ett Cosmos DB-konto, så klienter som behöver sina egna krypteringsnycklar måste distribueras med dedikerade Cosmos DB-konton.

Mer information:

Isoleringsmodeller

När du arbetar med ett system med flera Azure Cosmos DB måste du fatta ett beslut om vilken isoleringsnivå du vill använda. Azure Cosmos DB har stöd för flera isoleringsmodeller:

Delade containrar med partitionsnycklar per klientorganisation Container med delat dataflöde per klientorganisation Container med dedikerat dataflöde per klientorganisation Databaskonto per klientorganisation
Isoleringsalternativ
  • Dela dataflöde mellan klienter grupperade efter container (bra för att sänka kostnaden för "toppar" klienter).
  • Möjliggör enkla frågor mellan klienter (containrar fungerar som gräns för frågor). Minimera en störande grannradie (gruppklienter efter container).
  • Dela dataflöde mellan klienter som är grupperade efter databas (vilket är bra för att sänka kostnaderna för "toppar" klienter).
  • Enkel hantering av klienter (ta bort containern när klientorganisationen lämnar).
  • Minimera störande grannradie (gruppklienter efter databas).
  • Oberoende dataflödesalternativ (det dedikerade dataflödet eliminerar störningar hos grannar).
  • Gruppera klienter i databaskonto(er), baserat på regionala behov.
  • Oberoende reglage för geo-replikering.
  • Flera dataflödesalternativ (det dedikerade dataflödet eliminerar störande grannar).
Krav för dataflöde >0 RU:er per klientorganisation >100 RU:er per klientorganisation >400 RU:er per klientorganisation >400 RU:er per klientorganisation
Exempel på användningsfall B2C-appar Standarderbjudande för B2B-appar Premium för B2B-appar Premium för B2B-appar

Delad container med partitionsnycklar per klientorganisation

När du använder en enda container för flera klienter kan du använda Cosmos DB för partitionering. Genom att använda separata partitionsnycklar för varje klient kan du enkelt fråga efter data för en enskild klientorganisation. Du kan också fråga över flera klienter, även om de finns i separata partitioner. Frågor mellan partitioner har dock en högre kostnad för enheter för programbegäran (RU) än frågor med en enskild partition.

Den här metoden brukar fungera bra när mängden data som lagras för varje klientorganisation är liten. Det kan vara ett bra alternativ för att skapa en prismodell som innehåller en kostnadsfri nivå och för B2C-lösningar (företag till konsument). Genom att använda delade containrar uppnår du i allmänhet den högsta densiteten av klienter och därmed det lägsta priset per klientorganisation.

Det är viktigt att tänka på containerns dataflöde. Alla klienter delar containerns dataflöde, så problemet Noisy Neighbor kan orsaka prestandautmaningar om dina klienter har höga eller överlappande arbetsbelastningar. Det här problemet kan ibland undvikas genom att gruppera delmängder av klienter i olika containrar och genom att se till att varje klientgrupp har kompatibla användningsmönster. Du kan också överväga en hybridmodell med flera och en klientorganisation, där mindre klienter grupperas i delade partitionerade containrar och stora kunder har dedikerade containrar.

Det är också viktigt att tänka på mängden data som du lagrar i varje logisk partition. Azure Cosmos DB gör att varje logisk partition kan växa till upp till 20 GB. Om du har en enda klient som behöver lagra mer än 20 GB data kan du överväga att sprida data över flera logiska partitioner. I stället för att till exempel ha en enda partitionsnyckel med kan du salta partitionsnycklarna genom att skapa flera partitionsnycklar för en klient, till exempel Contoso , och så ContosoContoso1Contoso2 vidare. När du frågar efter data för en klientorganisation kan du använda WHERE IN -satsen för att matcha alla partitionsnycklar. Hierarkiska partitionsnycklar kan också användas för att stödja stora klienter.

Ta hänsyn till driftaspekterna i din lösning och de olika faserna i klientlivscykeln. När en klient exempelvis flyttar till en dedikerad prisnivå behöver du förmodligen flytta data till en annan container. När en klient avetablerar måste du köra en borttagningsfråga på containern för att ta bort data, och för stora klienter kan den här frågan förbruka en betydande mängd dataflöde medan den körs.

Container per klient

Du kan etablera dedikerade containrar för varje klientorganisation. Detta kan fungera bra när de data som du lagrar för din klientorganisation kan kombineras till en enda container.

När du använder en container för varje klientorganisation kan du överväga att dela dataflödet med andra klienter genom att etablera dataflöde på databasnivå. Överväg begränsningarna och begränsningarna för det minsta antalet enheter för begäran för din databas och det maximala antalet containrar i databasen. Överväg också om dina klienter kräver en garanterad prestandanivå och om de är sårbara för problemet Noisy Neighbor. Om det behövs kan du planera att gruppera klienter i olika databaser som baseras på arbetsbelastningsmönster.

Du kan också etablera dedikerat dataflöde för varje container. Detta fungerar bra för större klienter och för klienter som är utsatta för risk för problemet Noisy Neighbor. Baslinjegenomflödet för varje klientorganisation är dock högre, så tänk på minimikraven och kostnadskonsekvenserna för den här modellen.

Livscykelhantering är vanligtvis enklare när containrar är dedikerade till klienter. Du kan enkelt flytta klienter mellan delade och dedikerade dataflödesmodeller,och när du avetablerar en klientorganisation kan du snabbt ta bort containern.

Databaskonto per klientorganisation

Cosmos DB kan du etablera separata databaskonton för varje klientorganisation, vilket ger den högsta isoleringsnivån men den lägsta densiteten. Ett enda databaskonto är dedikerat till en klientorganisation, vilket innebär att de inte omfattas av problemet med den störande grannen. Du kan också konfigurera platsen för databaskontot enligt klientens krav och du kan finjustera konfigurationen av Cosmos DB-funktioner, till exempel geo-replikering och kund-hanterade krypteringsnycklar, så att de passar varje klientorganisations krav. När du använder ett dedikerat Cosmos DB per klient bör du överväga det maximala antalet Cosmos DB per Azure-prenumeration.

Om du tillåter att klienter migrerar från ett delat konto till ett dedikerat Cosmos DB-konto bör du överväga den migreringsmetod som du använder för att flytta en klients data mellan de gamla och nya kontona.

Hybrid-metoder

Du kan överväga en kombination av ovanstående metoder för att passa olika klienters krav och din prismodell. Till exempel:

  • Etablera alla kunder med kostnadsfri utvärderingsversion i en delad container och använd klientorganisations-ID:t eller en partitionsnyckel för syntetisk nyckel.
  • Erbjuder en betald bronsnivå som distribuerar en dedikerad container per klientorganisation, men med delat dataflöde på en databas.
  • Erbjuder en högre Silver-nivå som tillhandahåller dedikerat dataflöde för klientorganisationens container.
  • Erbjuder den högsta guldnivån och tillhandahåller ett dedikerat databaskonto för klientorganisationen, vilket även gör att klienter kan välja geografisk plats för distributionen.

Nästa steg

Granska lagrings- och datastrategier för flera innehavare.

  • Azure Cosmos DB system ochsystem med flera entenant: Ett blogginlägg som beskriver hur du skapar ett system med flera datorer som använder Azure Cosmos DB.
  • Program med flera Azure Cosmos DB (video)
  • Skapa en SaaS för flera kunder med Azure Cosmos DB och Azure (video): En verklig fallstudie om hur Whally, en SaaS-startup med flera kunder, skapade en modern plattform från grunden på Azure Cosmos DB och Azure. Där visas design- och implementeringsbeslut som rör partitionering, datamodellering, säker multitenancy, prestanda, realtidsströmning från ändringsflöde till SignalR med mera, allt med hjälp av ASP.NET Core på Azure App Services.