.NET Aspire ile Cloud Native Uygulamalar: Bulutta Uygulama Geliştirme
Yazılım geliştirme süreçleri teknolojinin değişimine paralel olarak hızla gelişiyor, bu dönemde bulut tabanlı uygulamaların önemi giderek artmaktadır. Yine günümüzde birçok uygulama cloud native uyumlu şekilde geliştirilmektedir ve geliştirilen uygulamaların farklı bulut platformlarına kolayca adapte olabilmesi giderek önem kazanmaktadır. Microsoft bu değişime yönelik yeni geliştirdiği .Net Aspire’ı geçtiğimiz günlerde tam sürüm olarak yayınladı. .NET Aspire, kolayca gözlemlenebilir ve güvenilir buluta özel uygulamalar oluşturmak ve geliştirme amacıyla tasarlanmıştır. Biz de bu makalede .NET Aspire’ın temel özelliklerini ve nasıl kullanılabileceğini ele alacağız.
.NET Aspire Nedir?
Bulut tabanlı uygulamaların geliştirilmesini ve yönetilmesini kolaylaştıran bir framework’tür. Beş ana bileşen etrafında yapılandırılmıştır: Dev Dashboard, Orchestration, Components, Service Discovery ve Deployment. Bu bileşenler, geliştiricilere uygulamalarını yönetme, izleme ve dağıtma konusunda kapsamlı bir çözüm sunuyor.
.NET Aspire’ı kullanarak projelerinizi sıfırdan başlatabilir ve baştan sona modern, bulut tabanlı bir mimari ile inşa edebilirsiniz. Ayrıca, mevcut projelerinizi .NET Aspire altyapısına taşıyarak mevcut uygulamalarınızı daha ölçeklenebilir ve yönetilebilir hale getirebilirsiniz. Böylece, yazılım geliştirme süreçlerinizi hızlandırabilir ve operasyonel verimliliğinizi artırabilirsiniz. Şimdi bu kavramlar tam olarak bizlere neler ifade ediyor başlıklar halinde inceleyelim.
Dev Dashboard: Uygulama İzleme Merkezi
Geliştiricilere uygulamanın tüm parçalarını tek bir ekranda görme imkanı sunar. Bu ekran, dört ana başlık altında bilgi sağlar: Yapılandırılmış Loglar (Structured Logs), Metrikler (Metrics), Dağıtık İzlemeler (Distributed Traces) ve Bağımlılıklar (Dependencies). Böylece, uygulamanızın performansını ve sağlığını sürekli olarak izleyebilir, potansiyel sorunları hızla tespit edebilirsiniz.
Orchestration: Sistem Yönetiminin Kalbi
Sistemde kullanılan veritabanı ve harici hizmetlerin tek bir çatı altında toplanmasını ve yönetilmesini kolaylaştırır. Bu özellik, projeye yeni katılan geliştiricilerin adaptasyonunu hızlandırır ve yönetimi daha etkin hale getirir. Örneğin, yeni bir geliştirici projeye katıldığında, sistemdeki tüm bileşenlere kolayca erişebilir ve hemen çalışmaya başlayabilir.
Components: Geniş SDK Desteği
Çok sayıda popüler veritabanı ve bulut hizmeti, projelere kolayca entegre edilebilir durumdadır. Örneğin, Redis, MongoDB, PostgreSQL, Dapr, MSSQL, Kafka gibi yaygın kullanılan servisleri NuGet üzerinden projemize dahil edebiliyoruz. Bu hizmetlerin zaman içinde daha da artması muhtemeldir. Bu sayede, uygulamalarımız harici hizmetlerle tutarlı ve sorunsuz bir şekilde entegre olabilir. Bu entegrasyonlar, geliştiricilerin daha az kod yazarak daha fazla iş yapmalarına olanak tanır.
Service Discovery: Bağlantı Stringlerine Veda
En havalı bileşen bu olabilir, sistem içerisindeki bağlantı dizelerini ortadan kaldırmayı hedefler. Harici servislerinize isim vererek onları kullanmanızı sağlar. Bu özellik, projeniz ile bağımlılıklar arasındaki hata toleransını düşürür ve yönetimi daha kolay hale getirir. Örneğin, bir veritabanı bağlantı stringi yerine “database” gibi anlamlı bir isim kullanarak, bağlantıları daha anlaşılır ve yönetilebilir hale getirebilirsiniz.
Deployment: Dağıtım Kolaylığı
Uygulamanın üretim ortamına çıkarılmasını kolaylaştırır. .NET Aspire da bir .NET uygulaması olduğu için, .NET uygulamasını nerelerde production’a çıkarabiliyorsak aynı ortamlar Aspire için de geçerlidir. Uygulamalar ve hizmetler, Azure Container Registry içinden Azure Container Apps olarak kullanılabilir. Bu sayede, uygulamanızı güvenli ve ölçeklenebilir bir şekilde dağıtabilirsiniz.
Teorik olarak özetledikten sonra kod tarafını incelemeye geçebiliriz. .NET Aspire’ı kullanmaya başlamadan önce, sisteminizde .NET 8 SDK’nın kurulu olması gerekmektedir. Ayrıca, Visual Studio 2022 17.10’a güncellenmiş olmalı ve ASP.NET ve web geliştirme kurulu olmalıdır. .NET Aspire ile birlikte iki temel şablon gelmektedir. İlk şablon “Starter Application” örnek bir backend-frontend ortamı içerirken, diğer şablon “Application” ise doğrudan projemize Aspire’ı entegre edebileceğimiz bir taslaktır. Biz, daha iyi anlaşılması açısından “Starter Application” ile devam edeceğiz. Bu taslakta dört proje karşımıza çıkmaktadır: ApiService, Web, AppHost, ServiceDefaults. Burada aspire ile yeni gelen AppHost, orkestrasyon görevini üstlenirken, ServiceDefaults, bulut tabanlı uygulamaları kolayca projeye dahil etmemizi sağlayan extension metotları içeren bir projedir.
Projeyi oluşturduktan sonra, ilk dikkatimizi çeken kısım AppHost projesinin başlangıç projesi olarak seçili olmasıdır. Program.cs içine geldiğimizde Api service projemizi “.AddProject” komutuyla ekliyoruz ve ardından “webfrontend” etiketiyle bu etiketi docker daki container name olarak düşünebiliriz, web projesini de ekleyip, api servisini referans olarak ekliyoruz. Bu sayede iki projenin haberleşmesini kurmasını Aspire ile sağlamış oluyoruz. Burada Apphost projesi beklendiği üzere, orchestration görevini üstlendiğinden, diğer projelerin de ayağa kalkmasından sorumludur.
ApiService ve Web projelerimizin Program.cs sınıflarını incelediğimizde:
builder.AddServiceDefaults();
Bu kodun her iki projede bulunduğunu gözlemleyebiliriz. Bu metot, ServiceDefaults projemizden gelen bir extension metodudur. Bu kod aracılığıyla projeleri service discovery ile Aspire’a dahil ediyoruz ve bu sayede projelerimizin başlatılmasını Aspire’a devretmiş oluyoruz. Bu extension metoduyla birlikte OpenTelemetry ile izleme ve metrik toplama, sağlık kontrolleri ve servis keşfi bulunmaktadır. ServiceDefaults sayesinde, projelerimize bu hizmetleri hızla ekleyebiliyoruz.
Artık projeyi çalıştırıp inceleyebiliriz. İlk olarak, bizi Dev Dashboard karşılıyor. Sol tarafta yer alan konsol günlükleri kısmından uygulamalara özel logları görüntüleyebiliriz. Yapılandırılmış günlükler sayesinde, loglar arasında daha yapısal ve hızlı bir şekilde arama yapabileceğimiz bir ekran mevcut. Ölçümler tabından ise hareketlerin zamana paralel olarak ne kadar sürede gerçekleştiğini gözlemleyebiliriz.
Şimdi, konunun daha net anlaşılması için bu projeye ekstra bir veritabanı ekleyelim ve bu veritabanının dashboardunu yine Aspire bileşenlerinden ayarlayalım. Böylece, bağlantı stringleriyle uğraşmamıza gerek kalmayacak ve Aspire, Azure Container Registry üzerinden kurulumları arka planda hızlıca gerçekleştirerek bize sunacak. Mevcut projemize PostgreSQL veritabanını ekleyelim ve yanında pgAdmin dashboard’un da otomatik olarak gelmesini sağlayalım. Yapmamız gereken tek şey, apphost projesine sağ tıklayıp NuGet üzerinden ilgili paketleri indirmek ve Apphost projemizde Program.cs dosyasına referansları eklemek. Geri kalan tüm işleri Aspire halledecek. Burada harici componentler bir container mantığı ile çalışacağı için bilgisayarımızda docker’ın kurulu olması gerekmektedir. İlgili image’ların ilk defa indirilmesi biraz zaman alabilir, bu nedenle biraz sabırlı olmanız gerekebilir.
Eğer projeyi kapatırken verilerinizin güvenliği konusunda endişeleriniz varsa, merak etmeyin, Aspire, Docker ile aynı mantıkla çalışarak veritabanınız için özel bir volume oluşturmanıza ve bu volümü Apphost üzerinden kolayca bağlamanıza olanak tanır. Bu sayede, verileriniz her zaman güvende kalır ve siz de geliştirmeye odaklanabilirsiniz. Aspire’ın geliştirici dostu yapısıyla, karmaşık altyapı detaylarıyla uğraşmadan web uygulamalarınızı hızlı ve kolay bir şekilde oluşturabilir ve dağıtabilirsiniz. Örnek projenin GitHub linkine giderek kodları daha detaylı inceleyebilirsiniz.
Sonuç olarak, .NET Aspire, bulut tabanlı uygulama geliştirme süreçlerini kolaylaştıran ve hızlandıran kapsamlı bir framework sunmaktadır. Bu framework, geliştiricilere uygulamalarını izleme, yönetme ve dağıtma konusunda büyük kolaylıklar sağlar. Eğer siz de bulut tabanlı uygulamalar geliştirmek istiyorsanız, .NET Aspire’ı mutlaka denemelisiniz.