Oefening: Een n-laag-architectuur implementeren

Voltooid

Onthoud ons scenario over het migreren van een toepassing van on-premises naar Azure. Hoe ziet deze architectuur eruit? Uw organisatie heeft een niet-kritieke toepassing die een goede kandidaat is om uit te proberen. Het is een toepassing die is geschreven om het al te vaak voorkomende probleem op te lossen van het kiezen van wat er voor de lunch is.

Denk aan de laatste keer dat u met een groep vrienden of collega's ging lunchen. Vond je het gemakkelijk om een beslissing te nemen, of heb je veel tijd besteed aan het uitzoeken wat iedereen echt bedoelde toen ze zeiden: "Ik vind alles leuk?" We gaan een toepassing implementeren op basis van een architectuur met drie lagen waarmee u dit probleem kunt oplossen. Met deze toepassing kunt u lunchsuggesties maken en iedereen op de gewenste keuze stemmen.

We hebben een sjabloon voor deze toepassing gemaakt die elke laag als Azure-resources implementeert en vervolgens de daadwerkelijke code implementeert. Deze toepassing is een ASP.NET Core MVC-toepassing die is geïmplementeerd op Linux-servers, maar u kunt deze architectuurstijl gebruiken, ongeacht de onderliggende besturingssysteemplatforms of SDK.

Hier volgt een visualisatie op hoog niveau van wat met deze sjabloon wordt geïmplementeerd.

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

Een n-laag-architectuur implementeren

  1. Gebruik de volgende opdracht om de implementatie te starten. Met de opdracht az deployment group create start u een implementatie in onze sandbox-resourcegroep met behulp van het sjabloonbestand en de parameters die we opgeven. We geven ook een willekeurige tekenreeks van 32 tekens op die is gegenereerd met de opdracht head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 als wachtwoordparameter.

    De implementatie duurt ongeveer 5 minuten.

    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)"
    

Bekijk de geïmplementeerde resources en test de toepassing

Nadat de implementatie is voltooid, test u de toepassing. Voer de volgende opdracht uit, waarmee de URL voor de app wordt geretourneerd.

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

Open een webbrowser en ga naar de site. U ziet een vak waarin u voedselkeuzes kunt toevoegen. Nadat u een optie hebt toegevoegd, wordt er een stem toegevoegd wanneer u deze selecteert.

Screenshot of the sample voting application.

Drie lagen van "Wat eten we als lunch?"

Deze toepassing is bewust zo eenvoudig mogelijk gehouden. Het is een leuke toepassing, maar nog steeds ziet u een architectuur met drie lagen. De sjabloon maakt twee virtuele machines (VM's), een Azure SQL-database en de resources die nodig zijn om deze resources te ondersteunen, zoals schijven, NIC's en virtuele netwerken. U implementeert hiermee ook de code om de toepassing op elke laag uit te voeren. Het virtuele netwerk dat we hebben geïmplementeerd, heeft twee subnetten, één voor de presentatielaag en één voor de toepassingslaag, met een beveiligingsgrens voor elke laag.

We hebben ook tags toegepast op de resources als onderdeel van de implementatie om de laag weer te geven die door de resource wordt ondersteund (tier:presentation, tier:application, tier:data). Tags zijn een methode voor het toepassen van metagegevens op Azure-resources. In dit geval kunnen we de resources voor elke laag eenvoudig filteren.

Laten we elke laag nader bekijken. Hier volgt een gedetailleerde visualisatie van de geïmplementeerde resources.

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

Presentatielaag

Voer de volgende opdracht uit om de resources van de presentatielaag weer te geven.

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

In de architectuur met drie lagen waarnaar wordt verwezen, is dit de presentatielaag. We hebben de code geïmplementeerd die verantwoordelijk is voor de webinterface in deze laag, de gebruikersinterface wordt weergegeven en verwerkt gebruikersaanvragen rechtstreeks. Het enige probleem van deze laag is de presentatie van de website aan de gebruiker. Deze heeft geen directe toegang tot de gegevens en omvat geen bedrijfslogica.

We hebben een webserver geïmplementeerd met de naam demo-web-vm waarop de website draait die we willen openen. De server heeft een netwerkinterface demo-web-vm-nic waaraan een openbaar IP-adres demo-web-vm-nic-pip is gekoppeld. Dit openbare IP-adres is de URL die we eerder hebben opgehaald. Het heeft ook een netwerkbeveiligingsgroep demo-web-nsg waarmee alleen poort 80 (HTTP)-verkeer binnenkomend vanaf internet is toegestaan. Deze netwerkbeveiligingsgroep beperkt de toegang tot alleen de website en voorkomt toegang via onnodige poorten die schadelijk kunnen worden gebruikt. Deze laag communiceert met de presentatielaag via HTTP om aan de aanvraag voor de gebruiker te voldoen.

Toepassingslaag

Voer de volgende opdracht uit om de resources van de toepassingslaag weer te geven.

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

We hebben de toepassingslaag geïmplementeerd op een virtuele machine met de naam demo-biz-vm waarop de bedrijfslogica wordt uitgevoerd. Het bevat ook een netwerkinterface demo-biz-vm-nic, maar deze netwerkinterface heeft alleen een privé IP-adres en biedt geen mechanisme voor directe binnenkomende verbindingen naar de server. Het bevat ook een netwerkbeveiligingsgroep demo-biz-nsg, waarmee alleen toegang vanaf het subnet van de presentatielaag mogelijk is.

Deze laag is het kanaal voor de toepassing om toegang te krijgen tot de gegevens. De code die de API beschikbaar stelt waarmee de presentatielaag wordt aangeroepen, wordt op deze server geïmplementeerd. Er worden hier geen gegevens opgeslagen en gebruikers hebben geen rechtstreeks toegang tot deze server. Deze laag communiceert met de gegevenslaag via T-SQL-opdrachten om toegang te krijgen tot gegevens en om aan gebruikersaanvragen te voldoen.

Er is een eenvoudig voorbeeld van bedrijfslogica die is opgenomen in de toepassing in deze laag. Er is validatie aan de serverzijde van de lunchsuggesties, waardoor deze worden vergeleken met een lijst met acceptabele waarden. Als u iets probeert toe te voegen dat niet in deze lijst staat, wordt deze niet geaccepteerd. Er wordt een bericht geretourneerd met de geldige lunchopties.

Gegevenslaag

Voer de volgende opdracht uit om de resources van de gegevenslaag weer te geven.

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

De gegevenslaag is een Azure SQL Database-server, demo-dbserver-abc123 (we voegen een willekeurige tekenreeks toe aan de servernaam voor algemene uniciteit). Deze server slaat de gegevens voor de toepassing op in een database met de naam demo sqldb. Deze laag van de toepassing houdt zich uitsluitend bezig met de opslag van gegevens en biedt een methode voor toegang tot de toepassing. In dit geval is de toegang via T-SQL, die door de toepassing wordt uitgevoerd op de database. We verwerken geen bedrijfslogica op dit niveau en we voeren geen enkele presentatie van gegevens terug naar de gebruiker.

Deze laag stelt de connectiviteit via poort 1433 beschikbaar via een eindpunt van een VNet-service. VNet-service-eindpunten zijn een mechanisme om PaaS-services (zoals Azure SQL Database) te verbinden met een subnet en om de connectiviteit met alleen de resources binnen dat subnet te beperken.

Dit is ook een voorbeeld van het gebruik van PaaS-services in plaats van IaaS-VM's (Infrastructure as a Service) om een laag van een toepassing uit te voeren. We denken vaak aan N-tier-toepassingen als op VM's gebaseerde toepassingen, maar dat is geen vereiste. Door PaaS-services te gebruiken in plaats van VM's, kunt u uw kosten verlagen, de beveiliging verhogen en de beheervereisten verminderen.