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

Tamamlandı

Bir uygulamayı şirket içinden Azure'a geçen senaryoyu unutmayın. Bu mimari nasıl görünür? Kuruluşta, denemek için iyi bir aday olan kritik olmayan bir uygulama var. Bu, çok yaygın olan öğle yemeği için neleri seçeceğini seçme sorununu çö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 fark ettiy misiniz yoksa "Her şeyi seviyorum" de olduğunda herkesin gerçekten ne demek istediğini anlamaya çalışırken çok zaman mı zaman harcamaya karar verdiysiniz? Gelin bu sorunu çözmenize yardımcı olabilecek üç katmanlı mimari tabanlı bir uygulama dağıtalım. Öğle yemeği önerilerinizi vermenizi sağlayan bu uygulama, herkes tercih ettiği seçimi oylar.

Bu uygulama için her katmanı Azure kaynakları olarak dağıtan ve ardından kodun kendisini dağıtan bir şablon oluşturduk. Bu Linux sunucular üzerine dağıtılmış bir ASP.NET Core MVC uygulaması ancak bu mimari stilini kullanarak farklı işletim sistemi platformları veya SDK'lar ile de uygulama geliştirmek mümkündür.

Bu şablonla dağıtılan bileşenler aşağıdaki görselleştirmede genel hatlarıyla gösterilmiştir.

Bu ünitede dağıtılacak N katmanlı mimarinin görselleştirmesi.

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 etmek. Aşağıdaki komutu çalıştırdığınızda uygulamanın URL'si döndürülür.

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 eklendikten sonra, bu seçeneğin seçerek bir oy eklenir.

Örnek oylama uygulamasının ekran görüntüsü.

"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, SıC'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 az önce dağıttığınız kaynakların ayrıntılı görselleştirmesine yer verilmiştir.

Bu ünitede yeniden dağıtılacak N katmanlı mimarinin görselleştirmesi.

Sunum katmanı

Sunum katmanı kaynaklarını listeleyen aşağıdaki komutu çalıştırın.

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

Bu katman, başvurulan üç katmanlı mimarideki sunum katmanına karşılık gelmektedir. Web arabiriminden sorumlu kod bu katmana dağıtılmıştır, kullanıcı arabirimini sunar ve kullanıcı isteklerini doğrudan işler. Bu katman yalnızca web sitenin kullanıcıya gösterilmesi aşamasında görev yapmaktadı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. Sunucu, önceki adımlarda aldığımız demo-web-vm-nic-pip genel IP adresine sahip olan demo-web-vm-nic adlı bir ağ arabirimine sahip. Ayrıca yalnızca internetten 80 (HTTP) numaralı bağlantı noktasına gelen trafiğe izin veren demo-web-nsg adlı bir ağ güvenlik grubu da var. Bu, erişimi yalnızca web sitesiyle kısıtlar ve kötü amaçlı olarak kullanılan gereksiz bağlantı noktaları üzerinden erişimi önler. 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ı, iş mantığını çalıştıran demo-biz-vm adlı bir VM'ye dağıtılmıştır. 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 depolanan veri yoktur ve kullanıcıların bu sunucuya doğrudan erişmesi mümkün değildir. 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 eklenmiş basit bir iş mantığı örneği bulunur. Öğle yemeği önerileri sunucu tarafında doğrulanmakta ve kabul edilebilir değerlerle karşılaştırılmaktadır. Listede olmayan bir değer eklemeye çalıştığınızda değer kabul edilmez ve geçerli öğle yemeği seçeneklerinin bulunduğu 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 ilgilidir ve bu katmana erişmek için bir yöntem sağlar. Bu durumda, T-SQL aracılığıyla uygulama veritabanında yürütü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ğlamaya ve yalnızca bu alt ağ içindeki kaynakla bağlantı kısıtlamaya neden olan bir mekanizmadır.

Bu aynı zamanda uygulamanın bir katmanını çalıştırmak için hizmet olarak altyapı (IaaS) VM'leri yerine PaaS hizmetlerini kullanma örneğidir. N katmanlı uygulamalar genellikle sanal makine tabanlı uygulamalar olarak kabul edilir ancak öyle olması şart değildir. Sanal makineler yerine PaaS hizmetlerini kullanarak maliyetlerinizi düşürebilir, güvenlik düzeyini artırabilir ve yönetim gereksinimlerini azaltabilirsiniz.