Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Aspire Nedir, Ne Değildir? AppHost, App Model ve Docker Compose/Kubernetes ile Farkı
Aspire, çok service'li bir uygulamanın parçalarını ve bağlantılarını AppHost'ta kodla tarif edip tek komutla çalıştıran, telemetry'sini dashboard'da toplayan lokal bir orchestration ve observability katmanı; production orchestrator'ı ya da service mesh değil. Yazı Bookstore'a aspire init ile AppHost eklemeyi, DCP proxy'sini, Aspire'ın verdiği environment variable'ları ve ServiceDefaults olmadan neden trace görünmediğini gerçek çıktılarla gösteriyor.
AppHost ile Orchestration: Resource'lar, WithReference, WaitFor, Parameter'lar ve Kalıcı Container'lar
AppHost'ta her parça bir resource: project, container ya da executable; WithReference connection string'i ve connection property'lerini environment variable olarak veriyor, WaitFor sağlıklı olmayı, WaitForCompletion bir işin 0 koduyla bitmesini bekliyor. Yazı Bookstore'a SQL Server, Redis ve migration worker'ı ekliyor; exception fırlatan worker'ın 0 koduyla çıkıp API'yi başlattığı tuzağı, secret parameter'ları ve kalıcı container'ları gerçek çıktılarla gösteriyor.
Service Discovery ve ServiceDefaults: "https+http://catalog" Nasıl Çözülür, Varsayılanlar Ne Yapar?
"https+http://catalog" adresi, Aspire'ın verdiği services__catalog__http__0 değişkeninden okunan Services:catalog configuration'ıyla çözülür; kayıt yoksa ad olduğu gibi DNS'e bırakılır, bu yüzden aynı kod production'da da çalışır. Yazı çözümleme log'larını, template'teki AllowedSchemes yorumunun AllowAllSchemes kapatılmadan işe yaramadığını, ServiceDefaults'un içini, durmuş bir service için 30 saniyelik beklemeyi 5 saniyeye indirmeyi ve YARP gateway'i gerçek çıktılarla gösteriyor.
Aspire Dashboard: Log, Trace ve Metric'leri Okumak, Standalone Kullanım ve Telemetry'nin Kalıcılığı
Aspire dashboard, service'lerin OTLP ile gönderdiği log, trace ve metric'leri tek yerde gösteren bir geliştirme aracı; 13.6'dan beri her çalıştırmayı SQLite'ta saklıyor, Aspire olmadan da tek başına çalışıyor ama production observability aracı değil. Yazı yavaş bir siparişin waterfall'unda index'siz bir EF Core sorgusunu ve sıralı service çağrılarını bulup süreyi 69 ms'den 5 ms'ye indiriyor; aspire otel, export ve API key'li standalone dashboard'u gerçek çıktılarla gösteriyor.
Aspire Integration'ları: Hosting ve Client Integration'ları, SQL Server, Redis, RabbitMQ, Keycloak ve Kendi Resource'un
Hosting integration resource'u AppHost'ta modeller, client integration ise service'e client library'yi health check, telemetry ve retry ile birlikte kaydeder; bu varsayılanlar her bağımlılığa uymaz. Yazı Redis düşünce kataloğu 12 saniye bekleten ve unhealthy yapan ayarları düzeltiyor, RabbitMQ ile sipariş olayını consumer span'ıyla aynı trace'te gösteriyor, Keycloak ile back office endpoint'ini koruyor ve dashboard'a kendi komutunu ekliyor; hepsi gerçek çıktılarla.
Aspire ile Test: Aspire.Hosting.Testing ile Tüm Sistemi Ayağa Kaldıran Uçtan Uca Testler
Aspire.Hosting.Testing, AppHost'u bir test fixture'ında gerçekten başlatıp resource'lara HttpClient veriyor; birkaç kritik uçtan uca senaryo için uygun, service içi testlerin yerini almıyor. Yazı testin geliştirici veritabanına dokunmamasını, her senaryonun yalnız ihtiyacı olan container'ları başlatmasını, template'teki retry'ın POST'u tekrarlayıp 409 ürettiği hatayı ve asenkron onayı Task.Delay yerine polling ile beklemeyi gerçek çıktılarla gösteriyor.
Aspire ile Deploy: publish, deploy ve do; Docker Compose, Kubernetes ve Azure Hedefleri
aspire publish AppHost'tan yer tutuculu artifact (Compose dosyası, Helm chart'ı) üretir, aspire deploy değerleri çözüp image'ları build ederek hedefe uygular, aspire do tek bir pipeline adımını çalıştırır. Yazı Bookstore'u Docker Compose'a deploy ederken dışarı açılmayan gateway'i, production'a sızan seed verisini, https olmayan Keycloak Authority'sini ve Angular çıktı klasörünü düzeltiyor; Helm chart'ını, registry ihtiyacını ve Azure hedeflerini anlatıyor.
.NET Aspire 8'den Aspire 13.6'ya: Sürüm Geçmişi, Breaking Change'ler ve Eski Projeyi Taşımak
Aspire 8.0'daki workload ve manifest modelinden 9.x'in SDK'sına ve 13.0'daki ad değişikliği, .NET 10 şartı ve pipeline'a geçti; 13.x'in her minor sürümü kendi kırıcı değişiklikleriyle geliyor. Yazı sürüm çizgisini özetliyor ve Aspire 9.5 ile yazılmış bir projeyi aspire update ile 13.6'ya taşıyıp komutun yapmadıklarını (net10.0, AddNpmApp, lifecycle hook, launch profile) gerçek çıktılarla gösteriyor.