Distribuera och utforska ett fragmenterat program för flera klientorganisationer
Gäller för:Azure SQL Database
I den här självstudien distribuerar och utforskar du ett SaaS-exempelprogram för flera innehavare med namnet Wingtip Tickets. Wingtip Tickets-appen är utformad för att visa funktioner i Azure SQL Database som förenklar implementeringen av SaaS-scenarier.
Den här implementeringen av Wingtip Tickets-appen använder ett fragmenterat databasmönster för flera klientorganisationer. Horisontell partitionering sker efter klientidentifierare. Klientdata distribueras till en viss databas enligt klientidentifierarvärdena.
Med det här databasmönstret kan du lagra en eller flera klienter i varje shard eller databas. Du kan optimera för lägsta kostnad genom att låta varje databas delas av flera klienter. Eller så kan du optimera för isolering genom att låta varje databas endast lagra en klientorganisation. Ditt optimeringsval kan göras separat för varje specifik klientorganisation. Du kan välja när klientorganisationen först lagras, eller så kan du ändra dig senare. Programmet är utformat för att fungera bra hur som helst.
Appen distribueras snabbt
Appen körs i Azure-molnet och använder Azure SQL Database. Distributionsavsnittet som följer innehåller den blå knappen Distribuera till Azure . När knappen trycks ned distribueras appen helt till din Azure-prenumeration inom fem minuter. Du har fullständig åtkomst till att arbeta med de enskilda programkomponenterna.
Programmet distribueras med data för tre exempelklientorganisationer. Klientorganisationer lagras tillsammans i en databas med flera klientorganisationer.
Vem som helst kan ladda ned C# och PowerShell-källkoden för Wingtip-biljetter från github-lagringsplatsen.
Lär dig mer i den här självstudien
- Så här distribuerar du Wingtip Tickets SaaS-programmet.
- Var du kan hämta programmets källkod och hanteringsskript.
- Om de servrar 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.
Det finns en serie relaterade självstudier som bygger på den här inledande distributionen. Självstudierna utforskar en rad saaS-design- och hanteringsmönster. När du går igenom självstudierna uppmanas du att gå igenom de angivna skripten för att se hur de olika SaaS-mönstren implementeras.
Förutsättningar
Se till att följande förhandskrav är slutförda för att kunna slutföra den här guiden:
- Den senaste Azure PowerShell-versionen är installerad. Mer information finns i Komma igång med Azure PowerShell.
Distribuera Wingtip Tickets-appen
Planera namnen
I stegen i det här avsnittet anger du ett användarvärde som används för att säkerställa att resursnamnen är globalt unika och ett namn på resursgruppen som innehåller alla resurser som skapats av en distribution av appen. För en person som heter Ann Finley föreslår vi:
- User:af1(Deras initialer, plus en siffra. Använd ett annat värde (t.ex. af2) om du distribuerar appen en andra gång.)
- Resursgrupp:wingtip-mt-af1(wingtip-mt anger att det här är den fragmenterade appen för flera klientorganisationer. Om du lägger till användarnamnet af1 korreleras resursgruppens namn med namnen på de resurser som den innehåller.)
Välj dina namn nu och skriv ned dem.
Steg
Klicka på följande blå knappen Distribuera till Azure .
Ange de obligatoriska parametervärdena för distributionen.
Viktigt!
I den här demonstrationen ska du inte använda några befintliga resursgrupper, servrar eller pooler. Välj i stället Skapa en ny resursgrupp. Ta bort den här resursgruppen när du är klar med att programmet för att stoppa relaterad fakturering. Använd inte det här programmet, eller några resurser som det skapar, för produktion. Vissa aspekter av autentiseringen och inställningarna för serverns brandvägg är avsiktligt osäkra i appen för att underlätta demonstrationen.
- För Resursgrupp – Välj Skapa ny och ange sedan ett Namn för resursgruppen (skiftlägeskänslig).
- Välj en plats i listrutan.
- För Användare – Vi rekommenderar att du väljer ett kort användarvärde .
- För Resursgrupp – Välj Skapa ny och ange sedan ett Namn för resursgruppen (skiftlägeskänslig).
Distribuera programmet.
- Klicka för att godkänna villkoren.
- Klicka på Köp.
Övervaka distributionsstatus genom att klicka på Meddelanden, vilket är klockikonen till höger om sökrutan. Det tar ungefär fem minuter att distribuera Wingtip-appen.
Ladda ned och avblockera hanteringsskripten
När programmet distribueras laddar du ned programmets källkod och hanteringsskript.
Kommentar
Körbart innehåll (skript, DLL:er) kan blockeras av Windows när zip-filer laddas ned från en extern källa och extraheras. När du extraherar skripten från en zip-fil använder du följande steg för att avblockera ZIP-filen innan du extraherar. Genom att avblockera ZIP-filen ser du till att skripten tillåts köras.
- Bläddra till GitHub-lagringsplatsen WingtipTicketsSaaS-MultiTenantDb.
- Klicka på Klona eller ladda ned.
- Klicka på Ladda ned ZIP och spara filen.
- Högerklicka på filen WingtipTicketsSaaS-MultiTenantDb-master.zip och välj Egenskaper.
- På fliken Allmänt väljer du Avblockera och klickar på Använd.
- Klicka på OK.
- Extrahera filerna.
Skripten finns i .. \WingtipTicketsSaaS-MultiTenantDb-master\Learning Modules\ mapp.
Uppdatera konfigurationsfilen för den här distributionen
Innan du kör några skript anger du resursgruppen och användarvärdena i UserConfig.psm1. Ställ in dessa variabler på samma värden som du angav under distributionen.
- Öppna ...\Learning Modules\UserConfig.psm1 i PowerShell ISE.
- Uppdatera ResourceGroupName och Name med de specifika värdena för distributionen (endast på raderna 10 och 11).
- Spara ändringarna.
Värdena som anges i den här filen används av alla skript, så det är viktigt att de är korrekta. Om du distribuerar om appen måste du välja olika värden för Användare och Resursgrupp. Uppdatera sedan filen UserConfig.psm1 igen med de nya värdena.
Kör appen
I Wingtip-appen är klientorganisationer platser. En lokal kan vara konserthus, en idrottsklubb eller någon annan plats som är värd för evenemang. Lokalerna registreras i Wingtip som kunder och en klientidentifierare genereras för varje plats. Varje plats listar sina kommande evenemang i Wingtip, så att allmänheten kan köpa biljetter till evenemangen.
Varje plats får en anpassad webbapp för att lista sina evenemang och sälja biljetter. Varje webbapp är oberoende och isolerad från andra klienter. Internt i Azure SQL Database lagras varje data för varje klientorganisation som standard i en shardad databas med flera klientorganisationer. Alla data taggas med klientidentifieraren.
En central webbsida för Events Hub innehåller en lista över länkar till klienterna i din specifika distribution. Använd följande steg för att uppleva webbsidan eventshubben och en enskild webbapp:
Öppna Händelsehubben i webbläsaren:
http://events.wingtip-mt.<user.trafficmanager.net> (Ersätt <användaren> med distributionens användarvärde.)
Klicka på Fabrikam Jazzklubb i evenemangshubben.
Azure Traffic Manager
Wingtip-appen använder Azure Traffic Manager för att styra fördelningen av inkommande begäranden. Händelsesidan för varje klientorganisation innehåller klientnamnet i url:en. Varje URL innehåller även ditt specifika användarvärde. Varje URL följer det format som visas med hjälp av följande steg:
- http://events.wingtip-mt.<user.trafficmanager.net/> fabrikamjazzclub
- Händelseappen parsar klientorganisationens namn från URL:en. Klientorganisationens namn är fabrikamjazzclub i föregående exempel-URL.
- Appen hashar sedan klientnamnet för att skapa en nyckel för att komma åt en katalog med hjälp av hantering av fragmentkarta.
- Appen hittar nyckeln i katalogen och hämtar motsvarande plats för klientorganisationens databas.
- Appen använder platsinformationen för att hitta och komma åt den databas som innehåller alla data för klientorganisationen.
Händelsehubben
- Händelsehubben visar en lista över alla klienter som är registrerade i katalogen och deras platser.
- Händelsehubben använder utökade metadata i katalogen för att hämta klientorganisationens namn som är associerat med varje mappning för att konstruera URL:erna.
I en produktionsmiljö skapar du vanligtvis en CNAME DNS-post för att peka en företags internetdomän till Traffic Manager-profilen.
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 för varje klientorganisation. Den verkliga belastningen på många SaaS-appar är vanligtvis sporadisk och oförutsägbar. För att simulera den här typen av belastning skapar generatorn en belastning som distribueras över alla klienter. Belastningen inkluderar randomiserade bursts på varje klientorganisation som inträffar med slumpmässiga intervall. Det tar flera minuter innan belastningsmönstret dyker upp, så det är bäst att låta generatorn köras i minst tre eller fyra minuter innan belastningen övervakas.
- Öppna skriptet ...\Learning Modules\Utilities\Demo-LoadGenerator.ps1 i PowerShell ISE.
- Tryck F5 för att köra skriptet och starta belastningsgeneratorn (Lämna standardvärdet för parametern för tillfället).
Demo-LoadGenerator.ps1-skriptet öppnar en annan PowerShell-session där belastningsgeneratorn körs. Belastningsgeneratorn körs i den här sessionen som en förgrundsaktivitet som anropar bakgrundsbelastningsgenereringsjobb, ett för varje klientorganisation.
När förgrundsaktiviteten har startats förblir den i ett jobbanropstillstånd. Aktiviteten startar ytterligare bakgrundsjobb för alla nya klienter som senare etableras.
Om du stänger PowerShell-sessionen stoppas alla jobb.
Du kanske vill starta om belastningsgeneratorsessionen för att använda olika parametervärden. I så fall stänger du PowerShell-generationssessionen och kör sedan Demo-LoadGenerator.ps1 igen.
Etablera en ny klientorganisation i den fragmenterade databasen
Den första distributionen innehåller tre exempelklientorganisationer i klientdatabasen 1 . Nu ska vi skapa en annan klientorganisation och se dess effekter på det distribuerade programmet. I det här steget trycker du på en nyckel för att skapa en ny klientorganisation:
Öppna ...\Learning Modules\Provision and Catalog\Demo-ProvisionTenants.ps1 i PowerShell ISE.
Tryck på F5 (inte F8) för att köra skriptet (lämna standardvärdena för tillfället).
Kommentar
Du måste bara köra PowerShell-skripten genom att trycka på F5-tangenten, inte genom att trycka på F8 för att köra en vald del av skriptet. Problemet med F8 är att variabeln $PSScriptRoot inte utvärderas. Den här variabeln krävs av många skript för att navigera i mappar, anropa andra skript eller importera moduler.
Den nya Red Maple Racing-klientorganisationen läggs till i klientorganisationen1-databasen och registreras i katalogen. Den nya klientorganisationens webbplats för biljettförsäljningshändelser öppnas i webbläsaren:
Uppdatera händelsehubben och den nya klientorganisationen visas nu i listan.
Etablera en ny klientorganisation i en egen databas
Med den horisontella modellen för flera klientorganisationer kan du välja om du vill etablera en ny klientorganisation i en databas som innehåller andra klienter eller till en egen databas. En klientorganisation som är isolerad i en egen databas har följande fördelar:
- Prestanda för klientorganisationens databas kan hanteras utan att behöva kompromissa med behoven hos andra klienter.
- Om det behövs kan databasen återställas till en tidigare tidpunkt, eftersom inga andra klienter skulle påverkas.
Du kan välja att placera kunder med kostnadsfri utvärderingsversion eller ekonomikunder i databaser med flera klientorganisationer. Du kan placera varje Premium-klientorganisation i en egen dedikerad databas. Om du skapar många databaser som bara innehåller en klientorganisation kan du hantera dem alla tillsammans i en elastisk pool för att optimera resurskostnaderna.
Därefter etablerar vi en annan klientorganisation, den här gången i sin egen databas:
I ...\Learning Modules\Provision and Catalog\Demo-ProvisionTenants.ps1 ändrar du $TenantName till Salix Salsa, $VenueType till dans och $Scenario till 2.
Tryck på F5 för att köra skriptet igen.
- Den här F5-pressen etablerar den nya klientorganisationen i en separat databas. Databasen och klientorganisationen är registrerade i katalogen. Sedan öppnas webbläsaren på sidan Händelser i klientorganisationen.
- Rulla längst ned på sidan. I banderollen visas databasnamnet där klientdata lagras.
Uppdatera händelsehubben så visas de två nya klienterna i listan.
Utforska servrar och klientdatabaser
Nu tittar vi på några av de resurser som har distribuerats:
I Azure-portalen bläddrar du till listan över resursgrupper. Öppna den resursgrupp som du skapade när du distribuerade programmet.
Klicka på katalog-mt-användarserver><. Katalogservern innehåller två databaser med namnet tenantcatalog och basetenantdb. Basetenantdb-databasen är en tom malldatabas. Den kopieras för att skapa en ny klientdatabas, oavsett om den används för många klienter eller bara en klientorganisation.
Gå tillbaka till resursgruppen och välj den klientorganisation1 mt-server som innehåller klientdatabaserna.
- Klientdatabasen 1 är en databas med flera klientorganisationer där de ursprungliga tre klienterna, plus den första klientorganisationen som du lade till, lagras. Den är konfigurerad som en 50 DTU Standard-databas.
- Salixsalsa-databasen har Danslokalen Salix Salsa som enda klientorganisation. Den är konfigurerad som en Standard Edition-databas med 50 DTU:er som standard.
Övervaka databasens prestanda
Om belastningsgeneratorn har körts i flera minuter är tillräckligt med telemetri tillgänglig för att titta på databasövervakningsfunktionerna som är inbyggda i Azure-portalen.
Bläddra till klientorganisationen1-mt-användarservern<> och klicka på klientorganisationer1 för att visa resursanvändning för databasen som har fyra klienter i den. Varje klientorganisation utsätts för en sporadisk tung belastning från belastningsgeneratorn:
DTU-användningsdiagrammet illustrerar på ett bra sätt hur en databas med flera klientorganisationer kan stödja en oförutsägbar arbetsbelastning för många klienter. I det här fallet tillämpar belastningsgeneratorn en sporadisk belastning på ungefär 30 DTU:er för varje klientorganisation. Den här belastningen motsvarar 60 % användning av en 50 DTU-databas. Toppar som överskrider 60 % beror på att belastningen tillämpas på fler än en klientorganisation samtidigt.
Bläddra till klientorganisationen1-mt-användarservern<> och klicka på databasen salixsalsa. Du kan se resursanvändningen i den här databasen som bara innehåller en klientorganisation.
Belastningsgeneratorn tillämpar en liknande belastning på varje klientorganisation, oavsett vilken databas varje klient finns i. Med bara en klientorganisation i salixsalsa-databasen kan du se att databasen kan upprätthålla en mycket högre belastning än databasen med flera klienter.
Resursallokeringar varierar beroende på arbetsbelastning
Ibland kräver en databas med flera klientorganisationer fler resurser för bra prestanda än en databas med en klientorganisation, men inte alltid. Den optimala allokeringen av resurser beror på de specifika arbetsbelastningsegenskaperna för klientorganisationer i systemet.
De arbetsbelastningar som genereras av belastningsgeneratorskriptet är endast i illustrationssyfte.
Ytterligare resurser
Mer information om SaaS-program för flera klientorganisationer finns i Designmönster för SaaS-program för flera klientorganisationer.
Mer information om elastiska pooler finns i:
Nästa steg
I den här guiden har du lärt dig:
- Så här distribuerar du Wingtip Tickets SaaS Multi-tenant Database-programmet.
- Om de servrar och databaser som utgör appen.
- Klientorganisationer mappas till sina data med katalogen.
- Så här etablerar du nya klienter i en databas med flera klientorganisationer och en databas med en klientorganisation.
- 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.