Dela via


Etablera och katalogisera nya klienter i ett SaaS-program med hjälp av en shardad Azure SQL Database för flera klientorganisationer

Gäller för:Azure SQL Database

Den här artikeln beskriver etablering och katalogisering av nya klienter, i en shardad databasmodell eller mönster för flera klientorganisationer.

Den här artikeln innehåller två huvudsakliga delar:

  • Konceptuell diskussion om etablering och katalogisering av nya klienter.

  • Självstudie som visar PowerShell-skriptkoden som utför etablering och katalogisering.

    • Självstudien använder Wingtip Tickets SaaS-programmet, anpassat till mönstret för shardad databas med flera klientorganisationer.

Databasmönster

Det här avsnittet, plus några fler som följer, beskriver begreppen i mönstret för shardad databas med flera klientorganisationer.

I den här shardade modellen med flera klientorganisationer innehåller tabellscheman i varje databas en klientnyckel i den primära nyckeln för tabeller som lagrar klientdata. Klientnyckeln gör att varje enskild databas kan lagra 0, 1 eller många klienter. Användningen av shardade databaser gör det enkelt för programsystemet att stödja ett mycket stort antal klienter. Alla data för en klientorganisation lagras i en databas. Det stora antalet klienter distribueras över de många fragmenterade databaserna. En katalogdatabas lagrar mappningen av varje klientorganisation till databasen.

Isolering jämfört med lägre kostnad

En klientorganisation som har en databas för sig själv har fördelarna med isolering. Klientorganisationen kan få databasen återställd till ett tidigare datum utan att begränsas av påverkan på andra klienter. Databasprestanda kan justeras för att optimera för den ena klientorganisationen, utan att behöva kompromissa med andra klienter. Problemet är att isolering kostar mer än det kostar att dela en databas med andra klienter.

När en ny klientorganisation etableras kan den dela en databas med andra klienter eller placeras i en egen ny databas. Senare kan du ändra dig och flytta databasen till den andra situationen.

Databaser med flera klientorganisationer och enskilda klienter blandas i samma SaaS-program för att optimera kostnader eller isolering för varje klientorganisation.

Sharded multi-tenant database app with tenant catalog

Mönster för klientkatalog

När du har två eller flera databaser som var och en innehåller minst en klientorganisation måste programmet ha ett sätt att identifiera vilken databas som lagrar klientorganisationen av aktuellt intresse. En katalogdatabas lagrar den här mappningen.

Klientnyckel

För varje klientorganisation kan Wingtip-programmet härleda en unik nyckel, som är klientnyckeln. Appen extraherar klientorganisationens namn från webbsidans URL. Appen hashar namnet för att hämta nyckeln. Appen använder nyckeln för att komma åt katalogen. Katalogen korsreferenser för information om databasen där klientorganisationen lagras. Appen använder databasinformationen för att ansluta. Andra klientnyckelscheman kan också användas.

Med hjälp av en katalog kan namnet eller platsen för en klientdatabas ändras efter etableringen utan att programmet störs. I en databasmodell för flera innehavare kan katalogen flytta en klientorganisation mellan databaser.

Klientmetadata utanför platsen

Katalogen kan också ange om en klientorganisation är offline för underhåll eller andra åtgärder. Och katalogen kan utökas för att lagra ytterligare klient- eller databasmetadata, till exempel följande objekt:

  • Tjänstnivån eller utgåvan av en databas.
  • Versionen av databasschemat.
  • Klientorganisationens namn och dess SLA (servicenivåavtal).
  • Information för att aktivera programhantering, kundsupport eller devops-processer.

Katalogen kan också användas för att aktivera rapportering mellan klientorganisationer, schemahantering och dataextrakt i analyssyfte.

Klientbibliotek för Elastic Database

I Wingtip implementeras katalogen i databasen tenantcatalog . Tenantcatalog skapas med hjälp av Shard Management-funktionerna i Elastic Database Client Library (EDCL). Biblioteket gör det möjligt för ett program att skapa, hantera och använda en fragmentkarta som lagras i en databas. En fragmentkarta korsreferenser till klientnyckeln med dess shard, vilket innebär dess fragmenterade databas.

Under klientetablering kan EDCL-funktioner användas från program eller PowerShell-skript för att skapa posterna i fragmentkartan. Senare kan EDCL-funktionerna användas för att ansluta till rätt databas. EDCL cachelagrar anslutningsinformation för att minimera trafiken i katalogdatabasen och påskynda anslutningsprocessen.

Viktigt!

Redigera inte data i katalogdatabasen via direkt åtkomst! Direkta uppdateringar stöds inte på grund av den höga risken för att data skadas. Redigera i stället mappningsdata med endast EDCL-API:er.

Etableringsmönster för klientorganisation

Checklista

När du vill etablera en ny klientorganisation i en befintlig delad databas måste du ställa följande frågor för den delade databasen:

  • Har den tillräckligt med utrymme kvar för den nya klientorganisationen?
  • Har den tabeller med nödvändiga referensdata för den nya klientorganisationen eller kan data läggas till?
  • Har den lämplig variant av basschemat för den nya klientorganisationen?
  • Finns den på lämplig geografisk plats nära den nya klientorganisationen?
  • Är den på rätt tjänstnivå för den nya klientorganisationen?

När du vill att den nya klientorganisationen ska isoleras i en egen databas kan du skapa den för att uppfylla specifikationerna för klientorganisationen.

När etableringen är klar måste du registrera klientorganisationen i katalogen. Slutligen kan klientmappningen läggas till för att referera till rätt shard.

Malldatabas

Etablera databasen genom att köra SQL-skript, distribuera en bacpac eller kopiera en malldatabas. Wingtip-apparna kopierar en malldatabas för att skapa nya klientdatabaser.

Precis som alla program utvecklas Wingtip med tiden. Ibland kräver Wingtip ändringar i databasen. Ändringarna kan innehålla följande objekt:

  • Nytt eller ändrat schema.
  • Nya eller ändrade referensdata.
  • Rutinuppgifter för databasunderhåll för att säkerställa optimal appprestanda.

Med ett SaaS-program, behöver de här ändringarna distribueras på ett samordnat sätt över en potentiellt massiv mängd klientdatabaser. För att dessa ändringar ska finnas i framtida klientdatabaser måste de införlivas i etableringsprocessen. Den här utmaningen utforskas ytterligare i självstudien för schemahantering.

Skript

Klientetableringsskripten i den här självstudien stöder båda följande scenarier:

  • Etablera en klientorganisation till en befintlig databas som delas med andra klienter.
  • Etablera en klientorganisation i en egen databas.

Klientdata initieras och registreras sedan i katalogshardkartan. I exempelappen får databaser som innehåller flera klienter ett allmänt namn, till exempel klientorganisationer1 eller klientorganisationer2. Databaser som innehåller en enda klientorganisation får klientorganisationens namn. De specifika namngivningskonventioner som används i exemplet är inte en viktig del av mönstret, eftersom användningen av en katalog gör att alla namn kan tilldelas till databasen.

Självstudien börjar

I den här självstudien lär du dig att:

  • Etablera en klientorganisation i en databas med flera klientorganisationer
  • Etablera en klientorganisation i en databas med en enda klientorganisation
  • Etablera en batch med klientorganisationer i både databaser med flera klientorganisationer och databaser med en enda klientorganisation
  • Registrera en databas- och klientmappning i en katalog

Förutsättningar

Se till att följande förhandskrav är slutförda för att kunna slutföra den här guiden:

Etablera en klientorganisation i en databas som delas med andra klienter

I det här avsnittet visas en lista över de viktigaste åtgärderna för etablering som utförs av PowerShell-skripten. Sedan använder du PowerShell ISE-felsökningsprogrammet för att gå igenom skripten för att se åtgärderna i koden.

Viktiga åtgärder för etablering

Följande är viktiga element i det etableringsarbetsflöde som du går igenom:

  • Beräkna den nya klientnyckeln: En hash-funktion används för att skapa klientnyckeln från klientnamnet.

  • Kontrollera om klientnyckeln redan finns: Katalogen är markerad för att säkerställa att nyckeln inte redan har registrerats.

  • Initiera klientorganisationen i standardklientdatabasen: Klientdatabasen uppdateras för att lägga till den nya klientinformationen.

  • Registrera klientorganisation i katalogen: Mappningen mellan den nya klientnyckeln och den befintliga klientdatabasen1 läggs till i katalogen.

  • Lägg till klientorganisationens namn i en katalogtilläggstabell: Platsnamnet läggs till i tabellen Klientorganisationer i katalogen. Det här tillägget visar hur katalogdatabasen kan utökas för att stödja ytterligare programspecifika data.

  • Sidan Öppna händelser för den nya klientorganisationen: Sidan Bushwillow Blues-händelser öppnas i webbläsaren.

    Screenshot that shows the Events page for a new tenant.

Felsökningssteg

Om du vill förstå hur Wingtip-appen implementerar ny klientetablering i en delad databas lägger du till en brytpunkt och går igenom arbetsflödet:

  1. I PowerShell ISE öppnar du ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 och anger följande parametrar:

    • = $TenantName Bushwillow Blues, namnet på en ny lokal.
    • = $VenueType blues, en av de fördefinierade lokaltyperna: blues, klassiskmusisk, dans, jazz, judo, motorracing, multipurpose, opera, rockmusic, fotboll (gemener, inga utrymmen).
    • = $DemoScenario 1 för att etablera en klientorganisation i en delad databas med andra klienter.
  2. Lägg till en brytpunkt genom att placera markören var som helst på rad 38, raden som säger: Ny klientorganisation och tryck sedan på F9.

    Screenshot that highlights the line that includes New Tenant.

  3. Kör skriptet genom att trycka på F5.

  4. När skriptkörningen stoppas vid brytpunkten trycker du på F11 för att gå in i koden.

    Screenshot shows the Windows PowerShell ISE with the Debug menu open and Step Into selected.

  5. Spåra skriptets körning med hjälp av menyalternativen Felsöka , F10 och F11, för att gå över eller till anropade funktioner.

Mer information om felsökning av PowerShell-skript finns i Tips om hur du arbetar med och felsöker PowerShell-skript.

Etablera en klientorganisation i en egen databas

Viktiga åtgärder för etablering

Följande är viktiga element i arbetsflödet som du går igenom när du spårar skriptet:

  • Beräkna den nya klientnyckeln: En hash-funktion används för att skapa klientnyckeln från klientnamnet.

  • Kontrollera om klientnyckeln redan finns: Katalogen är markerad för att säkerställa att nyckeln inte redan har registrerats.

  • Skapa en ny klientdatabas: Databasen skapas genom att basetenantdb-databasen kopieras med hjälp av en Resource Manager-mall. Det nya databasnamnet baseras på klientorganisationens namn.

  • Lägg till databas i katalogen: Den nya klientdatabasen registreras som en shard i katalogen.

  • Initiera klientorganisationen i standardklientdatabasen: Klientdatabasen uppdateras för att lägga till den nya klientinformationen.

  • Registrera klientorganisation i katalogen: Mappningen mellan den nya klientnyckeln och sequoiasoccer-databasen läggs till i katalogen.

  • Klientorganisationens namn läggs till i katalogen: Platsnamnet läggs till i tabellen Klienttillägg i katalogen.

  • Sidan Öppna händelser för den nya klientorganisationen: Sidan Sequoia Soccer Events öppnas i webbläsaren.

    events

Felsökningssteg

Gå nu igenom skriptprocessen när du skapar en klientorganisation i en egen databas:

  1. Ange följande parametrar i ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 :

    • = $TenantName Sequoia Soccer, namnet på en ny lokal.
    • = $VenueType fotboll, en av de fördefinierade arenatyperna: blues, klassiskmusisk, dans, jazz, judo, motorracing, multipurpose, opera, rockmusic, fotboll (gemener, inga utrymmen).
    • = $DemoScenario 2 för att etablera en klientorganisation i en egen databas.
  2. Lägg till en ny brytpunkt genom att placera markören var som helst på rad 57, raden som säger: &$PSScriptRoot\New-TenantAndDatabase och tryck på F9.

    break point

  3. Kör skriptet genom att trycka på F5.

  4. När skriptkörningen stoppas vid brytpunkten trycker du på F11 för att gå in i koden. Använd F10 och F11 för att gå över och gå in i funktioner för att spåra körningen.

Etablera en batch med klienter

Den här övningen etablerar en batch med 17 klienter. Vi rekommenderar att du etablerar den här batchen med klienter innan du startar andra Wingtip Tickets-självstudier så att det finns fler databaser att arbeta med.

  1. I PowerShell ISE öppnar du ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 och ändrar parametern $DemoScenario till 4:

    • = $DemoScenario 4 för att etablera en batch med klienter i en delad databas.
  2. Tryck på F5 och kör skriptet.

Verifiera den distribuerade uppsättningen klienter

I det här skedet har du en blandning av klienter som distribuerats till en delad databas och klienter som distribuerats till sina egna databaser. Azure-portalen kan användas för att inspektera de databaser som skapats. Öppna servern tenants1-mt-USER> i Azure-portalen genom att bläddra till listan över SQL-servrar<. Listan med SQL-databaser bör innehålla den delade klientdatabasen1 och databaserna för de klienter som finns i deras egen databas:

Screenshot of the tenants1-mt-USER server Overview page that highlights the databases.

Azure-portalen visar klientdatabaserna, men du kan inte se klientorganisationer i den delade databasen. Den fullständiga listan över klienter kan visas på webbsidan för Events Hub i Wingtip och genom att bläddra i katalogen.

Sidan Med Wingtip Tickets-evenemangshubben

Öppna sidan Händelsehubb i webbläsaren (http:events.wingtip-mt.<USER.trafficmanager.net>)

Använda katalogdatabas

Den fullständiga listan över klienter och motsvarande databas för var och en är tillgänglig i katalogen. En SQL-vy tillhandahålls som kopplar klientnamnet till databasnamnet. Vyn visar fint värdet för att utöka de metadata som lagras i katalogen.

  • SQL-vyn är tillgänglig i databasen tenantcatalog.
  • Klientorganisationens namn lagras i tabellen Klientorganisationer.
  • Databasnamnet lagras i Shard Management-tabellerna.
  1. I SQL Server Management Studio (SSMS) ansluter du till klientservern på catalog-mt.<USER.database.windows.net>, med Login = developer och Password = P@ssword1

    SSMS connection dialog

  2. I SSMS Object Explorer bläddrar du till vyerna i databasen tenantcatalog .

  3. Högerklicka på vyn KlientorganisationerNästa och välj Välj de 1 000 översta raderna. Observera mappningen mellan klientnamn och databas för de olika klientorganisationer.

    ExtendedTenants view in SSMS

Andra etableringsmönster

I det här avsnittet beskrivs andra intressanta etableringsmönster.

Företablering av databaser i elastiska pooler

Företableringsmönstret utnyttjar det faktum att när du använder elastiska pooler är faktureringen för poolen, inte databaserna. Därför kan databaser läggas till i en elastisk pool innan de behövs utan extra kostnad. Den här förvisionen minskar avsevärt den tid det tar att etablera en klientorganisation i en databas. Antalet företablerade databaser kan justeras efter behov för att behålla en buffert som är lämplig för den förväntade etableringstakten.

Automatisk etablering

I mönstret för automatisk etablering används en dedikerad etableringstjänst för att etablera servrar, pooler och databaser automatiskt efter behov. Den här automatiseringen omfattar förhandsetablering av databaser i elastiska pooler. Och om databaser inaktiveras och tas bort kan de luckor som skapas i elastiska pooler fyllas av etableringstjänsten efter behov.

Den här typen av automatiserad tjänst kan vara enkel eller komplex. Automatiseringen kan till exempel hantera etablering över flera geografiska områden och konfigurera geo-replikering för haveriberedskap. Med mönstret för automatisk etablering skickar ett klientprogram eller skript en etableringsbegäran till en kö som ska bearbetas av en etableringstjänst. Skriptet skulle sedan avsöka för att identifiera slutförande. Om förhandsetablering används hanteras begäranden snabbt, medan en bakgrundstjänst hanterar etableringen av en ersättningsdatabas.

Ytterligare resurser

Nästa steg

I den här guiden lärde du dig hur man:

  • Etablera en enskild ny klientorganisation i en delad databas med flera klientorganisationer och en egen databas
  • Etablera en batch med ytterligare klienter
  • Stega igenom information om etablering av klienter och registrera dem i katalogen

Prova självstudien Prestandaövervakning.