Share via


Distribuera och utforska en SaaS-app med flera klienter som använder mönstret databas per klientorganisation med Azure SQL Database

Gäller för:Azure SQL Database

I den här självstudien distribuerar och utforskar du Wingtip Tickets SaaS-databasen per klientorganisation (Wingtip). Appen använder ett mönster för databas per klientorganisation för att lagra data för flera klientorganisationer. Appen är utformad för att visa funktioner i Azure SQL Database som förenklar hur du aktiverar SaaS-scenarier.

Fem minuter efter att du har valt Distribuera till Azure har du ett SaaS-program med flera klientorganisationer. Appen innehåller en databas som körs i Azure SQL Database. Appen distribueras med tre exempelklientorganisationer, var och en med en egen databas. Alla databaser distribueras till en elastisk SQL-pool. Appen distribueras till din Azure-prenumeration. Du har fullständig åtkomst till att utforska och arbeta med de enskilda komponenterna i appen. C#-källkoden för programmet och hanteringsskripten är tillgängliga i GitHub-lagringsplatsen WingtipTicketsSaaS-DbPerTenant.

I den här guiden lär du dig:

  • Så här distribuerar du Wingtip SaaS-programmet.
  • Var du kan hämta programmets källkod och hanteringsskript.
  • Om de servrar, pooler och databaser som utgör appen.
  • Hur klienter mappas till sina data med katalogen.
  • Så här etablerar du en ny klientorganisation.
  • Övervaka klientaktivitet i appen.

En serie relaterade självstudier erbjuder att utforska olika SaaS-design- och hanteringsmönster. Självstudierna bygger vidare på den här inledande distributionen. När du använder självstudierna kan du undersöka de angivna skripten för att se hur de olika SaaS-mönstren implementeras. Skripten visar hur funktioner i SQL Database förenklar utvecklingen av SaaS-program.

Förutsättningar

Om du vill slutföra den här självstudien kontrollerar du att Azure PowerShell är installerat. Mer information finns i Kom igång med Azure PowerShell.

Distribuera Wingtip Tickets SaaS-programmet

Planera namnen

I stegen i det här avsnittet anger du ett användarvärde som används för att se till att resursnamnen är globalt unika. Du anger också ett namn för resursgruppen som innehåller alla resurser som skapats av en distribution av appen. För en fiktiv person som heter Ann Finley föreslår vi:

  • Användare: af1 består av Ann Finleys initialer plus en siffra. Om du distribuerar appen en andra gång använder du ett annat värde. Ett exempel är af2.
  • Resursgrupp: wingtip-dpt-af1 anger att det här är appen database-per-tenant. Lägg till användarnamnet af1 för att korrelera resursgruppens namn med namnen på de resurser som den innehåller.

Välj dina namn nu och skriv ned dem.

Steg

  1. Om du vill öppna distributionsmallen Wingtip Tickets SaaS database-per-tenant i Azure-portalen väljer du Distribuera till Azure.

    Image showing a button labeled

  2. Ange värden i mallen för de obligatoriska parametrarna.

    Viktigt!

    Vissa autentiserings- och serverbrandväggar är avsiktligt oskyddade i demonstrationssyfte. Vi rekommenderar att du skapar en ny resursgrupp. Använd inte befintliga resursgrupper, servrar eller pooler. Använd inte det här programmet, skripten eller några distribuerade resurser för produktion. Ta bort den här resursgruppen när du är klar med programmet för att stoppa relaterad fakturering.

    • Resursgrupp: Välj Skapa ny och ange det unika namn som du valde tidigare för resursgruppen.
    • Plats: Välj en plats i listrutan.
    • Användare: Använd det användarnamnsvärde som du valde tidigare.
  3. Distribuera programmet.

    a. Välj för att godkänna villkoren.

    b. Välj Köp.

  4. Om du vill övervaka distributionsstatus väljer du Meddelanden (klockikonen till höger om sökrutan). Det tar ungefär fem minuter att distribuera SaaS-appen Wingtip Tickets.

    Deployment succeeded

Ladda ned och avblockera hanteringsskripten för Wingtip-biljetter

När programmet distribueras laddar du ned källkoden och hanteringsskripten.

Viktigt!

Körbart innehåll (skript och DLL:er) kan blockeras av Windows när ZIP-filer laddas ned från en extern källa och extraheras. Följ stegen för att avblockera ZIP-filen innan du extraherar skripten. Avblockering ser till att skripten tillåts köras.

  1. Bläddra till GitHub-lagringsplatsen WingtipTicketsSaaS-DbPerTenant.
  2. Välj Klona eller ladda ned.
  3. Välj Ladda ned ZIP och spara sedan filen.
  4. Högerklicka på filen WingtipTicketsSaaS-DbPerTenant-master.zip och välj sedan Egenskaper.
  5. På fliken Allmänt väljer du Avblockera>Tillämpa.
  6. Välj OK och extrahera filerna

Skript finns i mappen ...\WingtipTicketsSaaS-DbPerTenant-master\Learning Modules.

Uppdatera användarkonfigurationsfilen för den här distributionen

Innan du kör några skript uppdaterar du resursgruppen och användarvärdena i användarkonfigurationsfilen. Ange dessa variabler till de värden som du använde under distributionen.

  1. Öppna ...\Learning Modules\UserConfig.psm1 i PowerShell ISE
  2. Uppdatera ResourceGroupName och Name med de specifika värdena för distributionen (endast på raderna 10 och 11).
  3. Spara ändringarna.

Dessa värden refereras till i nästan alla skript.

Kör appen

Appen visar platser som är värdar för evenemang. Här finns konsertsalar, jazzklubbar och idrottsklubbar. I Wingtip-biljetter registreras arenor som klientorganisationer. Att vara innehavare ger en lokal ett enkelt sätt att lista evenemang och sälja biljetter till sina kunder. Varje plats får en personlig webbplats för att lista sina evenemang och sälja biljetter.

Internt i appen får varje klientorganisation en databas som distribueras till en elastisk pool.

En central events hub-sida innehåller en lista över länkar till klienterna i distributionen.

  1. Använd URL:en för att öppna händelsehubben i webbläsaren: http://events.wingtip-dpt.<user.trafficmanager.net>. Ersätt <användaren> med distributionens användarvärde.

    Events Hub

  2. Välj Fabrikam Jazz Club i eventhubben.

    Events

Azure Traffic Manager

Wingtip-programmet använder Azure Traffic Manager för att styra distributionen av inkommande begäranden. URL:en för att komma åt händelsesidan för en specifik klient använder följande format:

  • http://events.wingtip-dpt.<user.trafficmanager.net/fabrikamjazzclub>

    Delarna i föregående format förklaras i följande tabell.

    URL-del Description
    events.wingtip-dpt Händelsedelarna i Wingtip-appen.

    -dpt särskiljer implementeringen av Wingtip-biljetter per klientorganisation från andra implementeringar. Exempel är implementeringar av enskilda appar per klientorganisation (-sa) eller multitenantdatabas (-mt).
    .<Användaren> af1 i exemplet.
    .trafficmanager.net/ Traffic Manager, bas-URL.
    fabrikamjazzclub Identifierar klientorganisationen Fabrikam Jazz Club.
  • Klientorganisationens namn parsas från URL:en av händelseappen.

  • Klientorganisationens namn används för att skapa en nyckel.

  • Nyckeln används för att komma åt katalogen för att hämta platsen för klientorganisationens databas.

    • Katalogen implementeras med hjälp av hantering av fragmentkartor.
  • Händelsehubben använder utökade metadata i katalogen för att konstruera url:erna för händelselistan för varje klientorganisation.

I en produktionsmiljö skapar du vanligtvis en CNAME DNS-post för att peka en företagsinternendomän till Traffic Manager DNS-namnet.

Kommentar

Det kanske inte är uppenbart direkt vad trafikhanteraren använder i den här självstudien. Målet med den här serien med självstudier är att visa upp mönster som kan hantera skalan för en komplex produktionsmiljö. I ett sådant fall skulle du till exempel ha flera webbappar distribuerade över hela världen, samlokalt med databaser och du skulle behöva trafikhanteraren för att dirigera mellan dessa instanser. En annan uppsättning självstudier som illustrerar användningen av Traffic Manager är dock självstudierna geo-restore och geo-replikering. I de här självstudierna används Traffic Manager för att växla över till en återställningsinstans av SaaS-appen i händelse av ett regionalt avbrott.

Börja generera belastningar på klient-databaserna

Nu när appen har distribuerats ska vi se till att den fungerar.

PowerShell-skriptet Demo-LoadGenerator startar en arbetsbelastning som körs mot alla klientdatabaser. Den verkliga belastningen på många SaaS-appar är sporadisk och oförutsägbar. För att simulera den här typen av belastning skapar generatorn en belastning med slumpmässiga toppar eller aktivitetstoppar på varje klientorganisation. Bursts sker med slumpmässiga intervall. Det tar flera minuter innan belastningsmönstret dyker upp. Låt generatorn köras i minst tre eller fyra minuter innan du övervakar belastningen.

  1. Öppna skriptet ...\Learning Modules\Utilities\Demo-LoadGenerator.ps1 i PowerShell ISE.
  2. Tryck på F5 för att köra skriptet och starta belastningsgeneratorn. Låt standardparametervärdena vara kvar tills vidare.
  3. Logga in på ditt Azure-konto och välj den prenumeration som du vill använda om det behövs.

Skriptet för inläsningsgeneratorn startar ett bakgrundsjobb för varje databas i katalogen och stoppar sedan. Om du kör belastningsgeneratorskriptet igen stoppas alla bakgrundsjobb som körs innan det startar nya.

Övervaka bakgrundsjobben

Om du vill styra och övervaka bakgrundsjobben använder du följande cmdletar:

  • Get-Job
  • Receive-Job
  • Stop-Job

Demo-LoadGenerator.ps1-åtgärder

Demo-LoadGenerator.ps1 efterliknar en aktiv arbetsbelastning med kundtransaktioner. Följande steg beskriver sekvensen med åtgärder som Demo-LoadGenerator.ps1 initierar:

  1. Demo-LoadGenerator.ps1 startar LoadGenerator.ps1 i förgrunden.

    • Båda .ps1-filerna lagras under mapparna Learning Modules\Utilities\.
  2. LoadGenerator.ps1 loopar genom alla klientdatabaser i katalogen.

  3. LoadGenerator.ps1 startar ett PowerShell-bakgrundsjobb för varje klientdatabas:

    • Som standard körs bakgrundsjobben i 120 minuter.
    • Varje jobb orsakar en CPU-baserad belastning på en klientdatabas genom att köra sp_CpuLoadGenerator. Belastningens intensitet och varaktighet varierar beroende på $DemoScenario.
    • sp_CpuLoadGenerator loopar runt en SQL SELECT-instruktion som orsakar hög CPU-belastning. Tidsintervallet mellan problem med SELECT varierar beroende på parametervärden för att skapa en kontrollbar CPU-belastning. Belastningsnivåer och intervall randomiseras för att simulera mer realistiska belastningar.
    • Den här .sql-filen lagras under WingtipTenantDB\dbo\StoredProcedures\.
  4. Om $OneTime = $falsestartar belastningsgeneratorn bakgrundsjobben och fortsätter sedan att köras. Var 10:e sekund övervakar den för alla nya klienter som etableras. Om du anger $OneTime = $truestartar LoadGenerator bakgrundsjobben och slutar sedan att köras i förgrunden. I den här självstudien lämnar du $OneTime = $false.

    Använd Ctrl-C eller Stoppa åtgärd Ctrl-Break om du vill stoppa eller starta om lastgeneratorn.

    Om du låter belastningsgeneratorn köras i förgrunden använder du en annan PowerShell ISE-instans för att köra andra PowerShell-skript.

 

Innan du fortsätter med nästa avsnitt låter du belastningsgeneratorn köras i jobbets anropande tillstånd.

Etablera en ny klient

Den första distributionen skapar tre exempelklientorganisationer. Nu skapar du en annan klientorganisation för att se hur det distribuerade programmet påverkas. I Wingtip-appen förklaras arbetsflödet för att etablera nya klienter i självstudien Etablera och katalog. I den här fasen skapar du en ny klientorganisation som tar mindre än en minut.

  1. Öppna en ny PowerShell ISE.

  2. Öppna ...\Learning Modules\Provision and Catalog\Demo-ProvisionAndCatalog.ps1.

  3. Tryck på F5 för att köra skriptet. Låt standardvärdena vara kvar för tillfället.

    Kommentar

    Många Wingtip SaaS-skript använder $PSScriptRoot för att bläddra i mappar för att anropa funktioner i andra skript. Den här variabeln utvärderas endast när det fullständiga skriptet körs genom att trycka på F5. Om du markerar och kör en markering med F8 kan det leda till fel. Tryck på F5 för att köra skripten.

Den nya klientdatabasen är:

  • Skapad i en elastisk SQL-pool.
  • Initierats.
  • Registrerad i katalogen.

Efter lyckad etablering visas platsen Händelser för den nya klientorganisationen i webbläsaren.

New tenant

Uppdatera händelsehubben så att den nya klientorganisationen visas i listan.

Utforska servrar, pooler, och klientdatabaser

Nu när du har börjat köra en belastning mot samlingen med klienter ska vi titta på några av de resurser som har distribuerats.

  1. I Azure-portalen bläddrar du till din lista över SQL-servrar. Öppna sedan servern catalog-dpt-USER><.

    • Katalogservern innehåller två databaser, tenantcatalog och basetenantdb (en malldatabas som kopieras för att skapa nya klienter).

    Screenshot that shows a catalog server Overview page with the two databases.

  2. Gå tillbaka till din lista över SQL-servrar.

  3. Öppna klientorganisationen1-dpt-USER-servern <> som innehåller klientdatabaserna.

  4. Se följande objekt:

    • Varje klientdatabas är en Elastic Standard-databas i en 50-eDTU-standardpool.
    • Red Maple Racing-databasen är klientdatabasen som du etablerade tidigare.

    Screenshot that shows the four databases in the server with red maple racing database highlighted.

Övervaka poolen

När LoadGenerator.ps1 har körts i flera minuter bör tillräckligt med data vara tillgängliga för att börja titta på vissa övervakningsfunktioner. De här funktionerna är inbyggda i pooler och databaser.

Bläddra till serverklientorganisationen1-dpt-user>< och välj Pool1 för att visa resursanvändning för poolen. I följande diagram kördes belastningsgeneratorn i en timme.

Monitor pool

  • Det första diagrammet, med etiketten Resursanvändning, visar eDTU-användning i poolen.
  • Det andra diagrammet visar eDTU-användningen av de fem mest aktiva databaserna i poolen.

De två diagrammen visar att elastiska pooler och SQL Database passar bra för oförutsägbara SaaS-programarbetsbelastningar. Diagrammen visar att fyra databaser varje spricker till så mycket som 40 eDTU:er, och ändå stöds alla databaser bekvämt av en 50-eDTU-pool. 50-eDTU-poolen kan stödja ännu tyngre arbetsbelastningar. Om databaserna etableras som enskilda databaser måste var och en vara en S2 (50 DTU) för att stödja bursts. Kostnaden för fyra enkla S2-databaser är nästan tre gånger priset för poolen. I verkliga situationer kör SQL Database-kunder upp till 500 databaser i 200 eDTU-pooler. Mer information finns i självstudien Prestandaövervakning.

Ytterligare resurser

Nästa steg

I den här guiden har du lärt dig:

  • Så här distribuerar du Wingtip Tickets SaaS-programmet.
  • Om de servrar, pooler och databaser som utgör appen.
  • Hur klienter mappas till sina data med katalogen.
  • Så här etablerar du nya klienter.
  • Så här visar du poolanvändning för att övervaka klientaktivitet.
  • Så här tar du bort exempelresurser för att stoppa relaterad fakturering.

Prova sedan självstudien Etablera och katalog.