Övning – Distribuera en N-nivåarkitektur

Slutförd

Kom ihåg vårt scenario om att migrera ett program från en lokal plats till Azure. Hur kan den arkitekturen se ut? Din organisation har ett icke-kritiskt program som är en bra kandidat att prova. Det är ett program skrivet för att lösa det alltför vanliga problemet med att välja vad som är till lunch.

Tänk på när du gick ut och åt lunch med vänner eller kollegor senast. Tyckte du att det var lätt att fatta ett beslut, eller ägnade du mycket tid åt att försöka ta reda på vad alla verkligen menade när de sa "Jag gillar allt?" Nu ska vi distribuera ett program baserat på en arkitektur på tre nivåer som kan hjälpa dig att lösa det här problemet. Med det här programmet kan du lägga fram lunchförslag, och alla kan rösta på sitt föredragna val.

Vi har skapat en mall för programmet som distribuerar varje nivå som Azure-resurser och därefter distribuerar den faktiska koden. Det här programmet är ett ASP.NET Core MVC-program som distribueras på Linux-servrar, men du kan använda den här arkitekturstilen oavsett de underliggande OS-plattformarna eller SDK:t.

Här är en övergripande visualisering av vad den här mallen distribuerar.

Visualization of the N-tier architecture to be deployed in this unit.

Använda en N-nivåarkitektur

  1. Kör följande kommando för att starta distributionen. Kommandot az deployment group create startar en distribution i din resursgrupp i begränsat läge med hjälp av den mallfil och de parametrar som vi anger. Vi anger också en slumpmässig, 32 tecken lång sträng som genereras från kommandot head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 som lösenordsparameter.

    Distributionen tar cirka 5 minuter att slutföra.

    az deployment group create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --template-uri  https://raw.githubusercontent.com/MicrosoftDocs/mslearn-n-tier-architecture/master/Deployment/azuredeploy.json \
      --parameters password="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
    

Visa distribuerade resurser och testa programmet

När distributionen har slutförts testar du programmet. Kör följande kommando, som returnerar URL:en för appen.

az deployment group show \
  --output table \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name azuredeploy \
  --query properties.outputs.webSiteUrl

Öppna en webbläsare och besök webbplatsen. Du ser en ruta där du kan lägga till matalternativ. När du har lagt till ett alternativ lägger du till en röst genom att välja det.

Screenshot of the sample voting application.

Tre nivåer av ”Vad blir det till lunch?”

Det här programmet har en avsiktligt minimalistisk komplexitet. Det är ett roligt program men det visar ändå upp en arkitektur med tre nivåer. Mallen skapar två virtuella datorer (VM), en Azure SQL-databas och de resurser som behövs för att stödja dessa resurser, till exempel diskar, nätverkskort och virtuella nätverk. Den distribuerar också koden för att köra programmet på de olika nivåerna. Det virtuella nätverket som vi har distribuerat har två undernät, ett för presentationsnivån och ett för programnivån, vilket ger en säkerhetsgräns för varje nivå.

Vi har också tillämpat taggar i resurserna som en del av distributionen för att reflektera den nivå som resursen stöder (tier:presentation, tier:application, tier:data). Taggar är en metod för att tillämpa metadata på Azure-resurser, och i det här fallet gör de det möjligt för oss att enkelt filtrera resurserna för varje nivå.

Vi ska titta närmare på de olika nivåerna. Här är en detaljerad visualisering av de distribuerade resurserna.

Visualization of the N-tier architecture to be deployed in this unit again.

Presentationsnivå

Kör följande kommando för att visa en lista över resurserna på presentationsnivån.

az resource list --tag tier=presentation --output table

I den arkitektur på tre nivåer som vi har refererat till är det här presentationsnivån. Vi har distribuerat koden som ansvarar för webbgränssnittet på den här nivån, det visar användargränssnittet och hanterar användarbegäranden direkt. Det enda som gäller den här nivån är presentationen av webbplatsen för användaren. Den har ingen direkt åtkomst till data och omfattar ingen affärslogik.

Vi har distribuerat en webbserver med namnet demo-web-vm som kör den webbplats vi vill få tillgång till. Servern har ett nätverksgränssnitt demo-web-vm-nic som har en offentlig IP-adress demo-web-vm-nic-pip associerad med den. Den här offentliga IP-adressen är den URL som vi hämtade tidigare. Den har också en nätverkssäkerhetsgrupp demo-web-nsg som endast tillåter port 80-trafik (HTTP) inkommande från Internet. Den här nätverkssäkerhetsgruppen begränsar åtkomsten till endast webbplatsen och förhindrar åtkomst via onödiga portar som kan användas skadligt. Den här nivån kommunicerar med presentationsnivån via HTTP för att slutföra användarens begäran.

Programnivå

Kör följande kommando för att få en lista med resurser på programnivån.

az resource list --tag tier=application --output table

Vi har distribuerat programnivån på en virtuell dator med namnet demo-biz-vm som kör affärslogik. Den har även ett nätverksgränssnitt, demo-biz-vm-nic, men detta nätverksgränssnitt har bara en privat IP-adress, vilket inte ger någon mekanism för direkt inkommande anslutning till servern. Den har även en nätverkssäkerhetsgrupp, demo-biz-nsg, som endast tillåter åtkomst från presentationsnivåns undernät.

Den här nivån fungerar som överföringskanal för programmets dataåtkomst. Koden som exponerar API:et som anropas av presentationsnivån distribueras på den här servern. Inga data lagras här och användarna kan inte komma åt den här servern direkt. Den här nivån kommunicerar med datanivån via T-SQL-kommandon för att få åtkomst till data och slutföra användarnas förfrågningar.

Det finns ett enkelt exempel på affärslogik som ingår i programmet på den här nivån. Det finns validering på serversidan av lunchförslagen och jämför dem med en lista med acceptabla värden. Om du försöker lägga till något som inte finns med i den här listan godkänns det inte. Ett meddelande returneras med giltiga lunchalternativ.

Datanivå

Kör följande kommando för att få en lista med resurser på datanivån.

az resource list --tag tier=data --output table

Datanivån är en Azure SQL Database-server, demo-dbserver-abc123 (vi lägger till en slumpmässig sträng till servernamnet för att det ska bli globalt unikt). På den här servern lagras data för programmet i en databas med namnet demo-sqldb. Den här nivån av programmet handlar enbart om lagring av data och att tillhandahålla en metod för att komma åt dem. I det här fallet sker åtkomsten via T-SQL, som programmet kör mot databasen. Vi hanterar ingen affärslogik på den här nivån och presenterar inte heller data för användaren.

På den här nivån exponeras anslutningar på port 1433 via en VNet-tjänstslutpunkt. VNet-tjänstslutpunkter är en mekanism för att ansluta PaaS-tjänster (till exempel Azure SQL Database) till ett undernät och begränsa anslutningen till endast resurserna i det undernätet.

Det här är också ett exempel på hur du använder PaaS-tjänster i stället för virtuella IaaS-datorer (infrastruktur som en tjänst) för att köra en nivå av ett program. Vi tänker ofta på N-nivåprogram som VM-baserade program, men det är inte ett krav. Genom att använda PaaS-tjänster i stället för virtuella datorer kan du sänka dina kostnader, öka säkerheten och minska administrationskraven.