ASP.NET Core web uygulamaları için Azure barındırma önerileri

İpucu

Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan ASP.NET Core ve Azure ile Modern Web Uygulamaları Mimarisi adlı e-Kitap'tan bir alıntıdır.

Architect Modern Web Applications with ASP.NET Core and Azure eBook cover thumbnail.

"Her yerdeki iş kolu liderleri, buluttan (SaaS olarak da bilinir) uygulama almak için BT departmanlarını atlıyor ve bunlara dergi aboneliği gibi ödeme yapıyor. Hizmet artık gerekli olmadığında, köşede kullanılmayan ekipman olmadan aboneliği iptal edebilir."
- Daryl Plummer, Gartner analisti

Uygulamanızın gereksinimleri ve mimarisi ne olursa olsun, Microsoft Azure bunu destekleyebilir. Barındırma gereksinimleriniz statik bir web sitesi veya onlarca hizmetten oluşan gelişmiş bir uygulama kadar basit olabilir. ASP.NET Core monolitik web uygulamaları ve destekleyici hizmetler için önerilen birçok iyi bilinen yapılandırma vardır. Bu makaledeki öneriler, tam uygulamalar, tek tek işlemler veya veriler olmak üzere barındırılacak kaynak türüne göre gruplandırılır.

Web uygulamaları

Web uygulamaları şu şekilde barındırılabilir:

  • App Service Web Apps

  • Kapsayıcılar (çeşitli seçenekler)

  • Sanal Makineler (VM)

Bunlardan, App Service Web Apps basit kapsayıcı tabanlı uygulamalar da dahil olmak üzere çoğu senaryo için önerilen yaklaşımdır. Mikro hizmet mimarileri için kapsayıcı tabanlı bir yaklaşım düşünün. Uygulamanızı çalıştıran makineler üzerinde daha fazla denetime ihtiyacınız varsa Azure Sanal Makineler'ı göz önünde bulundurun.

App Service Web Apps

App Service Web Apps, web uygulamalarını barındırmak için iyileştirilmiş tam olarak yönetilen bir platform sunar. Azure, uygulamayı çalıştırmak ve ölçeklendirmek için gereken altyapıyla ilgilenirken iş mantığınıza odaklanmanızı sağlayan bir hizmet olarak platform (PaaS) teklifidir. App Service Web Apps'in bazı önemli özellikleri:

  • DevOps iyileştirmesi (sürekli tümleştirme ve teslim, birden çok ortam, A/B testi, betik desteği).

  • Genel ölçek ve yüksek kullanılabilirlik.

  • SaaS platformlarına ve şirket içi verilerinize Bağlan.

  • Güvenlik ve uyumluluk.

  • Visual Studio tümleştirmesi.

Azure App Service, çoğu Web uygulaması için en iyi seçenektir. Dağıtım ve yönetim süreçleri platform ile tümleştirilmiştir, siteler hızla yüksek trafik yüklerinin altından kalkacak şekilde ölçeklendirilebilir ve yerleşik yük dengeleme ve trafik yöneticisi yüksek kullanılabilirlik sağlar. Çevrimiçi geçiş aracıyla mevcut siteleri kolayca Azure Uygulaması Hizmeti'ne taşıyabilirsiniz. Web Uygulaması Galerisi'nden açık kaynak bir uygulama kullanabilir veya istediğiniz çerçeveyi ve araçları kullanarak yeni bir site oluşturabilirsiniz. WebJobs özelliği, App Service Web uygulamanıza arka plan iş işlemleri eklemeyi kolaylaştırır. Yerel veritabanı kullanarak şirket içinde barındırılan mevcut bir ASP.NET uygulamanız varsa, geçiş için net bir yol vardır. App Service Web App'i bir Azure SQL Veritabanı (veya tercih edilirse şirket içi veritabanı sunucunuza güvenli erişim) ile kullanabilirsiniz.

Recommended migration strategy for on-premises .NET apps to Azure App Service

Çoğu durumda, yerel olarak barındırılan bir ASP.NET uygulamasından App Service Web App'e geçiş yapmak basit bir işlemdir. Uygulamanın kendisi için çok az değişiklik yapılması veya hiç gerekmemesi gerekir ve Service Web Apps'in sunduğu birçok özelliğin Azure Uygulaması hızlı bir şekilde yararlanmaya başlayabilir.

Bulut için en iyi duruma getirilmemiş uygulamalara ek olarak Azure Uygulaması Service Web Apps, birçok ASP.NET Core uygulaması gibi birçok basit monolitik (dağıtılmış olmayan) uygulama için mükemmel bir çözüm sunar. Bu yaklaşımda, mimarinin anlaşılması ve yönetilmesi basit bir yaklaşımdır:

Basic Azure architecture

Tek bir kaynak grubundaki az sayıda kaynak genellikle bu tür bir uygulamayı yönetmek için yeterlidir. Birçok ayrı işlemden oluşan uygulamalar yerine genellikle tek bir birim olarak dağıtılan uygulamalar, bu temel mimari yaklaşım için iyi adaylardır. Mimari açıdan basit olsa da bu yaklaşım, barındırılan uygulamanın talep artışlarını karşılamak için hem ölçeği artırmasına (düğüm başına daha fazla kaynak) hem de dışarı (daha fazla barındırılan düğüm) yapmasına olanak tanır. Otomatik ölçeklendirme ile uygulama, uygulamayı barındıran düğüm sayısını isteğe ve düğümler arasındaki ortalama yüke göre otomatik olarak ayarlayacak şekilde yapılandırılabilir.

Kapsayıcılar için App Service Web Apps

Web uygulamalarını doğrudan barındırma desteğine ek olarak, Kapsayıcılar için App Service Web Apps, Kapsayıcılı uygulamaları Windows ve Linux üzerinde çalıştırmak için kullanılabilir. Bu hizmeti kullanarak, işletmenizle ölçeklendirilebilen kapsayıcılı uygulamaları kolayca dağıtabilir ve çalıştırabilirsiniz. Uygulamalar, yukarıda listelenen App Service Web Apps'in tüm özelliklerine sahiptir. Ayrıca Kapsayıcılar için Web Apps Docker Hub, Azure Container Registry ve GitHub ile kolaylaştırılmış CI/CD'yi destekler. Değişiklikleri kayıt defterinde yayımlayan derleme ve dağıtım işlem hatlarını tanımlamak için Azure DevOps kullanabilirsiniz. Bu değişiklikler daha sonra bir hazırlama ortamında test edilebilir ve dağıtım yuvaları kullanılarak üretime otomatik olarak dağıtılarak sıfır kapalı kalma süresi yükseltmelerine olanak tanır. Önceki sürümlere geri dönmek de aynı şekilde kolay bir şekilde yapılabilir.

Kapsayıcılar için Web Apps'in en mantıklı olduğu birkaç senaryo vardır. İster Windows ister Linux kapsayıcılarında kapsayıcıya alınabilen mevcut uygulamalarınız varsa, bu araç takımını kullanarak bunları kolayca barındırabilirsiniz. Kapsayıcınızı yayımlamanız ve ardından Kapsayıcılar için Web Apps'i bu görüntünün en son sürümünü seçtiğiniz kayıt defterinden çekecek şekilde yapılandırmanız gerekir. Bu, klasik uygulama barındırma modellerinden bulut için iyileştirilmiş bir modele geçiş için "lift and shift" yaklaşımıdır.

Migrate containerized on-premises .NET application to Azure Web Apps for Containers

Geliştirme ekibiniz kapsayıcı tabanlı bir geliştirme sürecine geçebiliyorsa bu yaklaşım da iyi çalışır. Kapsayıcılarla uygulama geliştirmenin "iç döngüsü", uygulamayı kapsayıcılarla derlemeyi içerir. Kodda ve kapsayıcı yapılandırmasında yapılan değişiklikler kaynak denetimine gönderilir ve docker Hub veya Azure Container Registry gibi bir kayıt defterine yeni kapsayıcı görüntüleri yayımlamak otomatik bir derlemeden sorumludur. Bu görüntüler daha sonra, aşağıdaki diyagramda gösterildiği gibi ek geliştirme ve üretim dağıtımları için temel olarak kullanılır:

End to End Docker DevOps Lifecycle Workflow

Kapsayıcılarla geliştirme, özellikle üretimde kullanılan kapsayıcılar için birçok avantaj sunar. Aynı kapsayıcı yapılandırması, uygulamayı yerel geliştirme makinesinden derleme ve test sistemlerinden üretime kadar çalıştığı her ortamda barındırmak için kullanılır. Bu yaklaşım, makine yapılandırması veya yazılım sürümleri arasındaki farklardan kaynaklanan hata olasılığını büyük ölçüde azaltır. Geliştiriciler, kapsayıcılar herhangi bir işletim sisteminde çalışabildiğinden, işletim sistemi de dahil olmak üzere en üretken oldukları araçları da kullanabilir. Bazı durumlarda, çok sayıda kapsayıcı içeren dağıtılmış uygulamalar tek bir geliştirme makinesinde çalıştırmak için çok yoğun kaynak gerektirebilir. Bu senaryoda, sonraki bölümde ele alınan Kubernetes ve Azure Dev Spaces'i kullanmaya yükseltmek mantıklı olabilir.

Büyük uygulamaların bölümleri kendi daha küçük, bağımsız mikro hizmetlere ayrıldığından, uygulama davranışını geliştirmek için ek tasarım desenleri kullanılabilir. API ağ geçidi, tek tek hizmetlerle doğrudan çalışmak yerine istemciye erişimi basitleştirebilir ve istemciyi arka ucundan ayrıştırabilir. Farklı ön uçlar için ayrı hizmet arka uçlarına sahip olmak, hizmetlerin tüketicileriyle uyumlu bir şekilde gelişmesine de olanak tanır. Ortak hizmetlere, büyükelçi desenini kullanan ortak istemci bağlantı kitaplıklarını içerebilen ayrı bir sepet kapsayıcısı üzerinden erişilebilir.

Microservices sample architecture with several common design patterns noted.

Mikro hizmet tabanlı sistemler oluştururken göz önünde bulundurmanız gereken tasarım desenleri hakkında daha fazla bilgi edinin.

Azure Kubernetes Service

Azure Kubernetes Service (AKS), barındırılan Kubernetes ortamınızı yöneterek kapsayıcılı uygulamaları, kapsayıcı yönetimi uzmanlığı gerekmeden hızla ve kolayca dağıtma olanağı sunar. Ayrıca uygulamalarınızı çevrimdışına almadan kaynakları isteğe bağlı olarak sağlayarak, yükselterek ve ölçeklendirerek devam eden işlemlerin ve bakımın yükünü ortadan kaldırır.

AKS, sorumluluğun çoğunu Azure’a devrederek bir Kubernetes kümesi yönetmenin karmaşıklığı ve işlemsel yükünü azaltır. Barındırılan bir Kubernetes hizmeti olarak, Azure sistem durumu izleme ve bakım gibi kritik görevleri sizin için gerçekleştirir. Ayrıca, ana düğümler için değil yalnızca kümelerinizdeki aracı düğümleri için ödeme gerçekleştirirsiniz. Yönetilen bir Kubernetes hizmeti olarak AKS aşağıdakileri sağlar:

  • Otomatik Kubernetes sürüm yükseltmeleri ve düzeltme eki uygulama.
  • Kolay küme ölçeklendirme.
  • Kendi kendini iyileştiren barındırılan kontrol düzlemi (masters).
  • Maliyet tasarrufu - yalnızca çalışan aracı havuzu düğümleri için ödeme yapın.

AKS kümenizde düğümleri Azure yönetirken, küme yükseltme gibi görevleri el ile gerçekleştirmeniz gerekmez. Azure bu kritik bakım görevlerini sizin için işlediğinden AKS, kümeye doğrudan erişim (SSH gibi) sağlamaz.

AKS'yi kullanan ekipler, Azure Dev Spaces'in avantajlarından da yararlanabilir. Azure Dev Spaces, ekiplerin AKS'de çalışan tüm mikro hizmet mimarileri veya uygulamalarıyla doğrudan çalışmasına olanak tanıyarak mikro hizmet uygulamalarının geliştirilmesine ve hızlı bir şekilde yinelenmesine odaklanmalarına yardımcı olur. Azure Dev Spaces ayrıca AKS kümesinin veya diğer geliştiricilerin geri kalanını etkilemeden mikro hizmet mimarinizin bölümlerini yalıtarak bağımsız olarak güncelleştirmenin bir yolunu sağlar.

Azure Dev Spaces workflow example

Azure Dev Spaces:

  • Yerel makine kurulum süresini ve kaynak gereksinimlerini en aza indirme
  • Ekiplerin daha hızlı yinelemesine izin verme
  • Ekibin gerektirdiği tümleştirme ortamlarının sayısını azaltma
  • Geliştirirken/test ederken dağıtılmış bir sistemde belirli hizmetlerle alay etme gereksinimini ortadan kaldırın

Azure Dev Spaces hakkında daha fazla bilgi edinin

Azure Sanal Makineler

App Service'te çalıştırılması için önemli değişiklikler gerektiren mevcut bir uygulamanız varsa buluta geçişi kolaylaştırmak için Sanal Makineler seçebilirsiniz. Ancak VM'lerin doğru şekilde yapılandırılması, güvenliğinin sağlanması ve bakımının yapılması, Azure Uygulaması Hizmeti ile karşılaştırıldığında çok daha fazla zaman ve BT uzmanlığı gerektirir. Azure Sanal Makineler kullanmayı düşünüyorsanız, VM ortamınıza düzeltme eki uygulamak, güncelleştirmek ve yönetmek için gereken sürekli bakım çalışmalarını hesaba katdığınızdan emin olun. Azure Sanal Makineler hizmet olarak altyapı (IaaS), App Service ise PaaS'tır. Ayrıca uygulamanızı Kapsayıcılar için Web App'e Windows Kapsayıcısı olarak dağıtmanın senaryonuz için uygun bir seçenek olup olmadığını da göz önünde bulundurmalısınız.

Mantıksal işlemler

Uygulamanın geri kalanından ayrıştırılabilir tek tek mantıksal işlemler bağımsız olarak "sunucusuz" bir şekilde Azure İşlevleri dağıtılabilir. Azure İşlevleri, belirli bir sorun için ihtiyacınız olan kodu uygulama veya altyapı konusunda endişelenmeden yazmanıza olanak tanır. C#, F#, Node.js, Python ve PHP gibi çeşitli programlama dilleri arasından seçim yaparak elinizdeki görev için en üretken dili seçebilirsiniz. Çoğu bulut tabanlı çözümde olduğu gibi, yalnızca kullanımınız için gereken süreyi ödersiniz ve Azure İşlevleri gerektiğinde ölçeği artırmasına güvenebilirsiniz.

Veri

Azure, uygulamanızın söz konusu veriler için uygun veri sağlayıcısını kullanabilmesi için çok çeşitli veri depolama seçenekleri sunar.

İşlemsel, ilişkisel veriler için Azure SQL Veritabanı en iyi seçenektir. Yüksek performanslı çoğunlukla okuma verileri için, Azure SQL Veritabanı tarafından yedeklenen bir Redis önbelleği iyi bir çözümdür.

Yapılandırılmamış JSON verileri, SQL Veritabanı sütunlardan Azure Depolama'daki Bloblara veya Tablolara ve Azure Cosmos DB'ye kadar çeşitli yollarla depolanabilir. Azure Cosmos DB bunlardan en iyi sorgulama işlevini sunar ve sorgulamayı desteklemesi gereken çok sayıda JSON tabanlı belge için önerilen seçenektir.

Uygulama davranışını düzenlerken kullanılan geçici komut veya olay tabanlı veriler Azure Service Bus veya Azure Depolama Kuyruklarını kullanabilir. Azure Service Bus daha fazla esneklik sunar ve uygulamalar içinde ve uygulamalar arasında önemsiz olmayan mesajlaşmalar için önerilen hizmettir.

Mimari önerileri

Uygulamanızın gereksinimleri mimarisini dikte etmelidir. Birçok farklı Azure hizmeti mevcuttur. Doğru olanı seçmek önemli bir karardır. Microsoft, yaygın senaryolar için en iyi duruma getirilmiş tipik mimarileri tanımlamaya yardımcı olmak için bir başvuru mimarileri galerisi sunar. Uygulamanızın gereksinimlerine yakın bir şekilde eşleşen veya en azından bir başlangıç noktası sunan bir başvuru mimarisi bulabilirsiniz.

Şekil 11-1 örnek başvuru mimarisini gösterir. Bu diyagramda, pazarlama için iyileştirilmiş bir Sitecore içerik yönetimi sistemi web sitesi için önerilen mimari yaklaşımı açıklanmaktadır.

Figure 11-1

Şekil 11-1. Sitecore pazarlama web sitesi başvuru mimarisi.

Başvurular – Azure barındırma önerileri