Cvičení – Nasazení n-úrovňové architektury

Dokončeno

Vzpomeňte si na náš scénář migrace aplikace z místního prostředí do Azure. Jak může taková architektura vypadat? Vaše organizace má nekritické aplikace, která je dobrým kandidátem na vyzkoušejí. Jedná se o aplikaci, která je napsaná tak, aby řešila až příliš běžný problém výběru jídla.

Zkuste si vzpomenout, kdy jste naposledy šli na oběd se skupinou přátel nebo kolegů. Zjistili jste, že rozhodnutí je snadné, nebo jste strávili hodně času tím, že jste se snažili zjistit, co všichni ve skutečnosti měli na mysli, když řekli: "Mám rád všechno?" Pojďme nasadit aplikaci založenou na tříúrovňové architektuře, která by vám mohla s řešením tohoto problému pomoci. Tato aplikace vám umožňuje vytvářet návrhy na oběd a hlasovat pro preferovanou volbu může každý.

Pro účely této aplikace jsme vytvořili šablonu, která každou úroveň nasadí jako prostředky Azure a potom nasadí vlastní kód. I když se jedná o aplikaci ASP.NET Core MVC nasazenou na serverech s Linuxem, můžete tento styl architektury použít bez ohledu na podkladovou platformu operačního systému nebo sadu SDK.

Zde je vizualizace částí nasazených s touto šablonou.

Vizualizace n-úrovňové architektury, která se má v této jednotce nasadit

Nasazení n-úrovňové architektury

  1. Zahajte nasazení spuštěním následujícího příkazu. Příkaz az deployment group create spustí nasazení do naší skupiny prostředků sandboxu pomocí souboru šablony a námi určených parametrů. Jako parametr hesla také zadáváme náhodný řetězec o 32 znacích vygenerovaný z příkazu head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32.

    Nasazení trvá asi pět minut.

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

Zobrazení nasazených prostředků a testování aplikace

Po dokončení nasazení otestujte aplikaci. Spusťte následující příkaz, který vrátí adresu URL aplikace.

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

Otevřete webový prohlížeč a navštivte web. Zobrazí se pole, do něhož můžete přidávat možnosti jídel. Po přidání možnosti se výběrem možnosti přidá hlas.

Snímek obrazovky ukázkové hlasovací aplikace

Tři úrovně aplikace „Co bude k obědu?“

Pro tuto aplikaci jsme záměrně zvolili maximální jednoduchost. Je sice určená hlavně pro zábavu, ale stále na ní můžeme vidět tříúrovňovou architekturu. Šablona vytvoří dva virtuální počítače, databázi Azure SQL a prostředky potřebné k podpoře těchto prostředků, jako jsou disky, nic a virtuální sítě. Nasadí také kód, z něhož aplikace běží na každé z úrovní. Virtuální síť, kterou jsme nasadili, má dvě podsítě (jednu pro prezentační a druhou pro aplikační úroveň), které úrovním poskytují hranici zabezpečení.

Dále jsme v rámci nasazení označili prostředky značkami, které odpovídají podporované úrovni (tier:presentation, tier:application, tier:data). Značky jsou metoda použití metadat na prostředky Azure, a v tomto případě nám umožňují snadno filtrovat prostředky pro jednotlivé úrovně.

Pojďme si každou úroveň prohlédnout podrobněji. Na obrázku vidíte podrobnou vizualizaci prostředků, které jsme právě nasadili.

Vizualizace n-úrovňové architektury, která se má v této jednotce nasadit znovu

Prezentační úroveň

Spuštěním následujícího příkazu zobrazíte seznam prostředků prezentační vrstvy.

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

Ve tříúrovňové architektuře, s níž pracujeme, toto představuje prezentační úroveň. Kód zodpovědný za webové rozhraní byl nasazen na této úrovni, prezentuje uživatelské rozhraní a přímo zpracovává požadavky uživatelů. Tato úroveň se zabývá jen prezentací webu uživatelům. Nemá přímý přístup k datům, ani neobsahuje obchodní logiku.

Nasadili jsme webový server s názvem demo-web-vm, na kterém běží webová stránka, k níž přistupujeme. Tento server má síťové rozhraní demo-web-vm-nic s přidruženou veřejnou IP adresou demo-web-vm-nic-pip (tuto IP adresu jsme získali dříve). Kromě toho má i skupinu zabezpečení sítě demo-web-nsg, která povoluje jen příchozí provoz z internetu na portu 80 (HTTP). Tím se omezí přístup jenom na web a zabrání se přístupu přes nepotřebné porty, které by bylo možné použít škodlivě. Aby mohla tato úroveň plnit požadavky uživatelů, komunikuje jen s prezentační úrovní přes HTTP.

Aplikační úroveň

Vypište prostředky aplikační úrovně spuštěním následujícího příkazu.

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

Aplikační vrstva se nasadila na virtuální počítač s názvem demo-biz-vm, na který běží obchodní logika. Kromě toho má i síťové rozhraní demo-biz-vm-nic s privátní IP adresou, které neposkytuje žádný mechanismus pro přímé příchozí připojování k serveru. Další součástí je skupina zabezpečení sítě s názvem demo-biz-nsg, která povoluje jen přístup z podsítě prezentační úrovně.

Aplikační úroveň slouží jako kanál, kterým aplikace přistupuje k datům. Na tomto serveru je nasazen kód, který zveřejňuje rozhraní API volané prezentační úrovní. Nejsou zde uložená žádná data a uživatelé nemají k tomuto serveru přímý přístup. Za účelem přístupu k datům a plnění požadavků uživatelů komunikuje aplikační úroveň s datovou úrovní prostřednictvím příkazů T-SQL.

Na aplikační úrovni se nachází jednoduchý příklad obchodní logiky, která je součástí naší aplikace. Jedná se o serverové ověřování návrhů jídel a jejich porovnávání se seznamem přijatelných hodnot. Při pokusu o přidání hodnoty, která není v seznamu, nebude taková hodnota přijata, a navíc se uživateli vrátí zpráva s platnými možnostmi.

Datová vrstva

Vypište prostředky datové úrovně spuštěním následujícího příkazu.

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

Datová úroveň představuje server Azure SQL Database s názvem demo-dbserver-abc123 (kvůli globální jedinečnosti jsme k názvu přidali náhodný řetězec). Tento server ukládá data aplikace do databáze demo-sqldb. Tato úroveň aplikace se týká výhradně ukládání dat a poskytnutí metody pro přístup k nim, v tomto případě prostřednictvím T-SQL, aplikace se provádí proti databázi. Nezabýváme se zde žádnou obchodní logikou, ani prezentací dat zpět uživateli.

Tato vrstva umožňuje připojování přes port 1433 prostřednictvím koncového bodu služby virtuální sítě. Koncové body služeb virtuální sítě jsou mechanismus pro připojení služeb PaaS (například Azure SQL Database) k podsíti a omezení připojení pouze na prostředky v této podsíti.

Toto je také příklad použití služeb PaaS místo virtuálních počítače infrastruktury jako služby (IaaS) ke spuštění vrstvy aplikace. I když se n-úrovňové aplikace často označují za aplikace založené na virtuálních počítačích, není to podmínkou. Ve srovnání s virtuálními počítači přináší služby PaaS nižší náklady, lepší zabezpečení a menší administrativní požadavky.