Giriş
Dağıtılmış uygulamalarda düşük gecikmeli önbellek veya Redis® kablosuna (wire-protocol) uyumlu bir veri deposu ihtiyacı sık görülür. .NET Aspire ile bu bileşenleri AppHost içinde gerçek bir kaynak olarak modelleyebilir; servis keşfi, WaitFor akışları ve bağlantı ifadelerini tek yerde tutabilirsiniz.
Bu yazı, DragonflyDB sürecini Aspire AppHost’ta düzenlemeyi kolaylaştıran topluluk bakımındaki Snappyup.Aspire.Hosting.Dragonfly paketinin ne olduğunu, Microsoft’un Redis hosting uzantılarıyla paralellik ve farkları neler olduğunu ve somut C# kullanımlarını adım adım özetliyor.
Snappyup.Aspire.Hosting.Dragonfly nedir?
Snappyup.Aspire.Hosting.Dragonfly, Aspire AppHost’ta DragonflyDB için resmi konteyner imajını (dragonflydb/dragonfly) modelleyen ve kaynağı oluşturmak için uzantı metotları sunan bir NuGet paketidir. Dragonfly Redis tel protokolüyle uyumlu çalışan bellek içi bir depodur; birçok .NET bileşeni yine Redis istemcileri ile konuşmaya devam eder.
Paket, Microsoft’un Aspire.Hosting.Redis yaklaşımından esinlendiği kalıplarla oluşturulmuştur; yine de çalışma zamanı olarak Dragonfly seçilir ve Microsoft tarafından yayınlanan veya garanti altına alınan bir ürün değildir.
Hangi problemi çözer?
Tek bir AppHost projesinden şunları kurgulamanızı kolaylaştırır:
- Konteyner imajı, uç nokta ve içeride Dragonfly’nin dinlediği 6379 hedef portu.
- StackExchange.Redis tarzı Aspire bağlantı ifadesi:
host:port, gerektiğindepassword=...ve TLS ile birliktessl=true. - Uygulamanın süreleri beklemeden önce sağlık kontrolünden geçmesi için
AspNetCore.HealthChecks.Redisentegrasyonu. - İsterseniz: TLS,
--snapshot_cronile anlık görüntü (kalıcılık), cluster emülasyonu; geliştirme için yan konteynerlerde Redis Insight (5540 hedef port) ve Redis Commander (8081).
Microsoft’un Redis hosting’i ile ilişkisi
Amaç, AppHost kodunun Microsoft’un Redis hosting örneklerine yakın ergonomiyle okunmasıdır; yine de arka planda Dragonfly olduğu sürece aynı resmi garanti ve destek süreclerini beklemek doğru değildir.
Gereksinimler
- .NET SDK: Paket çoklu hedefli olarak
net8.0,net9.0venet10.0seçenekleriyle uyumludur. - Docker (veya uyumlu konteyner çalışma zamanı)—AppHost’u çalıştırırken Dragonfly kaynağı da yükseltilecekse gereklidir.
- Çözüm genelinde Aspire.Hosting sürüm sabitlemesini depo içi
Directory.Packages.propsiçinden doğrulayın. Bu yazının hazırlandığı sürüm hattına göre sabit örnek: 13.2.4 (paket dokümantasyonlarında tarihî “9.x” ifadesi kalsa bile, doğru pin bu dosya üzerinden okunmalıdır).
Kurulum
dotnet add package Snappyup.Aspire.Hosting.Dragonfly
using Snappyup.Aspire.Hosting;
Minimal başlangıç: veri birimi ve proje referansı
Yazılabilir bir kalıcı birim eklediğinizde, varsayılan anlık görüntü planıyla birlikte /data altında dosya çıktısı alınabilir.
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddDragonfly("cache")
.WithDataVolume();
builder.AddProject<Projects.Api>("api")
.WithReference(cache);Redis Insight ve Redis Commander
var cache = builder.AddDragonfly("cache")
.WithRedisInsight()
.WithRedisCommander();- Redis Insight bileşeni HTTP olarak 5540 hedefine bağlanır (uç nokta adı
http; AppHost’un ilgiliWithHostPortile sabit yayın gerekebilir). - Redis Commander iç hedef portu 8081; geliştirici makinenizde sabit adres için
WithHostPortuygun olduğundan uygulanabilir. - Dragonfly’a gelen uygulama trafiği asıl olarak
AddDragonflyile tanımlı Ana bağlantı (6379) üzerinden servis bulunabilir adreslere bağlanır.
Anlık görüntü ve kalıcılık özelleştirme
Dragonfly, klasik Redis’te sık sık kullanılan SAVE aralıkları yerine --snapshot_cron ile anlık görüntü alır.WithDataVolume veya yazılabilirWithDataBindMount seçildiğinde (isReadOnly: false), zincir WithPersistence() ile uygun cron ve dosya gövdesi seçilir (varsayılan cron */1 * * * *, dosya köküdump). Cron ve dosya adını özelleştirmek için aşağıdaki örneği kullanabilirsiniz:
builder.AddDragonfly("cache")
.WithDataVolume()
.WithPersistence(snapshotCron: "*/5 * * * *", dbFilename: "mydb");TLS ile sunucu tarafında şifreleme
PEM dosyalarını ana makineden bağlayarak Dragonfly’da sunucu tarafını sertifikalandırır; bağlantı dizesinin sonuna Aspire tarafında ,ssl=true ilişkisinin eklenmesi beklenir.
builder.AddDragonfly("cache")
.WithTlsCertificate(
certPath: "/path/to/server.crt",
keyPath: "/path/to/server.key",
caCertPath: "/path/to/ca.crt"); // İsteğe bağlı kök doğrulamaEmülasyon küme modu
builder.AddDragonfly("cache")
.WithClusterMode();Bu seçenek Dragonfly’a --cluster_mode=emulated argümanını ekler.
Şifre davranışı
Varsayılan ayarlarda güvenlik odaklı Aspire parametre parolası oluşturma modeli izlenebilir; bağlantı dizesinde password=... görmek olağandır.WithPassword(null) doğrudan host:port ifadesini hedefler. Özel olarak tanımlanmış IResourceBuilder<ParameterResource> bileşeni de parametre olarak verilebilir.
// Şifresiz yerel bağlantı senaryosu
builder.AddDragonfly("cache").WithPassword(null);Ana makinede sabit port
builder.AddDragonfly("cache")
.WithHostPort(56379);Tüketici tarafında (API / worker) kullanım
Tüketici projelerde genellikle Microsoft’un Redis odaklı bileşenlerinden biri kullanılır (AddRedisDistributedCache,AddRedisOutputCache,AddRedisClient vb.). Bağlantı metadata’sını .WithReference(cache) ile dağıtın; API adları sürüme göre değişebileceğinden ilgili Microsoft dökümanlarından şekli doğrulayın. Temel yönergeler için Aspire bağlantı ve iletişim dökümanına dönmek iyi bir ilk adımdır.
Hangi senaryolarda mantıklıdır?
- Yerelde ve takım içinde Aspire ile Dragonfly kombinasyonunu kısa sürede doğrulamak.
- Uygulamanız zaten doğrulanmış bir Redis istemci yığını ile çalışıyorsa Dragonfly denemesinin maliyeti göreli olarak daha düşüktür.
- TLS, zamanlı görüntü zamanlaması ve araç yan konteynerlerini tek bir AppHost bildiriminde toplamak karmaşıklığı azaltır.
Hangi durumlarda gereksiz olabilir?
- Tek küçük uygulamada Aspire AppHost’a ihtiyaç yoksa ve doğrudan
docker runyeterliyse fazladan karmaşılık çıkarır. - Satıcı desteği kritik bir gereksinimse ve topluluk tarafından sürdürülen bir paket kurum ilkelerinize uymuyorsa tedarik ve risk kararını önceden netleştirin.
- Redis protokolü dışına çıkan özelliklere sık sık bağlanılan bir üründe doğrudan satıcı kılavuzlarına yakın daha net bir yaklaşım seçilebilir.
Sonuç
Snappyup.Aspire.Hosting.Dragonfly, Dragonfly kaynağını AppHost düzlemine taşırken imaj seçiminden sağlık kontrollerine, isteğe bağlı TLS ve zamanlı görüntülere ve geliştirme araçlarına kadar yapılandırmayı okunur biçimde bir arada tutmanıza yardım eder. Redis tel protokolü uyumluluğu senaryonuza uyuyorsa dağıtımlarınızı denemek için uygundur.
