Alıştırma - N katmanlı mimari dağıtma

Tamamlandı

Bir uygulamayı şirket içinden Azure'a geçirme senaryomuzu unutmayın. Bu mimari nasıl görünür? Kuruluşunuzun, denemek için iyi bir aday olan kritik olmayan bir uygulaması var. Bu, öğle yemeği için neleri seçme konusunda çok yaygın olan sorunu çözmek için yazılmış bir uygulamadır.

Arkadaşlarınızla veya iş arkadaşlarınızla birlikte en son gittiğiniz öğle yemeğini düşünün. Karar vermenin kolay olduğunu mu buldun yoksa herkesin "Her şeyi seviyorum" dediğinde ne demek istediğini anlamaya çalışmak için çok zaman harcadın mı? Şimdi bu sorunu çözmenize yardımcı olabilecek üç katmanlı bir mimariye dayalı bir uygulama dağıtalım. Öğle yemeği önerilerinde bulunmanıza ve herkesin tercih ettiği seçime oy vermesine olanak tanıyan bu uygulama.

Bu uygulama için her katmanı Azure kaynakları olarak dağıtan ve ardından kodun kendisini dağıtan bir şablon oluşturduk. Bu uygulama Linux sunucularında dağıtılan bir ASP.NET Core MVC uygulamasıdır, ancak temel işletim sistemi platformlarından veya SDK'larından bağımsız olarak bu mimari stili kullanabilirsiniz.

Bu şablonun dağıttığı öğelere yönelik üst düzey bir görselleştirme aşağıdadır.

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

N katmanlı mimariyi dağıtma

  1. Dağıtımı başlatmak için aşağıdaki komutu çalıştırın. az deployment group create komutu, belirtilen şablon dosyasını ve parametreleri kullanarak korumalı alan kaynak grubunda bir dağıtım başlatır. Ayrıca parola parametresi olarak head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 komutuyla oluşturulan rastgele bir 32 karakterli dize de belirtilmektedir.

    Dağıtımın tamamlanması yaklaşık 5 dakika sürer.

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

Dağıtılan kaynakları görüntüleme ve uygulamayı test etme

Dağıtım tamamlandıktan sonra uygulamayı test edin. Uygulamanın URL'sini döndüren aşağıdaki komutu çalıştırın.

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

Bir web tarayıcısı açın ve siteyi ziyaret edin. Yemek seçeneklerini ekleyebileceğiniz bir kutu göreceksiniz. Bir seçenek ekledikten sonra bu seçeneği belirlediğinizde oy eklenir.

Screenshot of the sample voting application.

"What's For Lunch?" uygulamasının üç katmanı

Bu uygulama özellikle karmaşık olmayan bir şekilde yazılmıştır. Eğlenceli bir uygulamadır ancak yine de üç katmanlı mimari özelliklerini göstermektedir. Şablon iki sanal makine (VM), bir Azure SQL veritabanı ve diskler, NIC'ler ve sanal ağlar gibi bu kaynakları desteklemek için gereken kaynakları oluşturur. Ayrıca her katmanda uygulamayı çalıştırmak için gerekli kodu dağıtır. Dağıttığınız sanal ağ biri sunum katmanı, biri de uygulama katmanı için olmak üzere iki alt ağ dağıtarak her katman için bir güvenlik sınırı oluşturur.

Kaynakların kullanıldığı katmanların belli olması için dağıtım sırasında kaynaklara etiketler de uygulanmıştır (tier:presentation, tier:application, tier:data). Etiketler, Azure kaynaklarına meta veri uygulama yöntemidir ve bu durumda her katman için kaynakları kolayca filtrelememizi sağlar.

Şimdi katmanlara daha yakından bakalım. Burada dağıtılan kaynakların ayrıntılı bir görselleştirmesi yer alır.

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

Sunum katmanı

Sunu katmanı kaynaklarını listelemek için aşağıdaki komutu çalıştırın.

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

Başvuracağımız üç katmanlı mimaride bu, sunu katmanıdır. Bu katmanda web arabiriminden sorumlu kodu dağıttık, kullanıcı arabirimini sunar ve kullanıcı isteklerini doğrudan işler. Bu katmanın tek endişesi, web sitesinin kullanıcıya sunulmasıdır. Verilere doğrudan erişimi yoktur ve iş mantığı içermez.

Eriştiğimiz web sitesini çalıştıran demo-web-vm adlı bir web sunucusu dağıttık. Sunucuda, kendisiyle ilişkilendirilmiş genel IP adresi demo-web-vm-nic-pip olan bir ağ arabirimi demo-web-vm-nic vardır. Bu genel IP adresi, daha önce aldığımız URL'dir. Ayrıca yalnızca İnternet'ten gelen 80 numaralı bağlantı noktası (HTTP) trafiğine izin veren demo-web-nsg ağ güvenlik grubuna sahiptir. Bu ağ güvenlik grubu yalnızca web sitesine erişimi kısıtlar ve kötü amaçlı olarak kullanılabilecek gereksiz bağlantı noktaları üzerinden erişimi engeller. Bu katman, kullanıcı isteklerini yerine getirme amacıyla HTTP üzerinden sunum katmanıyla iletişim kuruyor.

Uygulama katmanı

Uygulama katmanı kaynaklarını listelemek için aşağıdaki komutu çalıştırın.

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

Uygulama katmanını, iş mantığını çalıştıran demo-biz-vm adlı bir VM'ye dağıttık. Bu sanal makinede de demo-biz-vm-nic adlı bir ağ arabirimi var ancak bu ağ arabirimi yalnızca özel IP adresine sahip ve sunucuya dışarıdan doğrudan iletişim kurulması mümkün değil. Sunucudaki demo-biz-nsg adlı ağ güvenlik grubu yalnızca sunum katmanı alt ağından gelen erişim isteklerine izin veriyor.

Bu katman, uygulamanın verilere erişmek için kullandığı ara katmandır. Sunum katmanının çağırdığı API'yi kullanıma sunan kod, bu sunucuya dağıtılmıştır. Burada hiçbir veri depolanmaz ve kullanıcılar bu sunucuya doğrudan erişemez. Bu katman, verilere erişmek ve kullanıcı isteklerini yerine getirmek için T-SQL komutlarını kullanarak veri katmanıyla iletişim kurar.

Bu katmanda uygulamaya dahil edilen basit bir iş mantığı örneği vardır. Öğle yemeği önerilerinin sunucu tarafı doğrulaması vardır ve bunları kabul edilebilir değerler listesiyle karşılaştırabilirsiniz. Bu listede olmayan bir öğe eklemeye çalışırsanız, kabul edilmez. Geçerli öğle yemeği seçenekleriyle birlikte bir ileti döndürülür.

Veri katmanı

Veri katmanı kaynaklarını listelemek için aşağıdaki komutu çalıştırın.

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

Veri katmanı demo-dbserver-abc123 adlı bir Azure SQL Veritabanı sunucusundan oluştur (adın global ölçekte benzersiz olması rastgele dize eklenmiştir). Bu sunucu, uygulama verilerini demo-sqldb adlı veritabanında tutmaktadır. Uygulamanın bu katmanı yalnızca verilerin depolanmasıyla ilgilenir ve bunlara erişmek için bir yöntem sağlar. Bu durumda erişim, uygulamanın veritabanında yürüttüğü T-SQL üzerinden yapılır. Bu katmanda iş mantığı çalıştırma ve kullanıcıya veri sunma işlemleri gerçekleştirilmemektedir.

Bu katmanla sanal ağ hizmet uç noktası aracılığıyla 1433 numaralı bağlantı noktası üzerinden bağlantı kurulmaktadır. Sanal ağ hizmet uç noktaları, PaaS hizmetlerini (Azure SQL Veritabanı gibi) bir alt ağa bağlamak ve yalnızca bu alt ağ içindeki kaynaklarla bağlantıyı kısıtlamak için bir mekanizmadır.

Bu, bir uygulamanın katmanını çalıştırmak için hizmet olarak altyapı (IaaS) VM'leri yerine PaaS hizmetlerinin kullanılmasına da bir örnektir. N katmanlı uygulamaları genellikle VM tabanlı uygulamalar olarak düşünsek de bu bir gereksinim değildir. VM'ler yerine PaaS hizmetlerini kullanarak maliyetlerinizi düşürebilir, güvenliği artırabilir ve yönetim gereksinimlerini azaltabilirsiniz.