.NET Aspire AppHost’ta DragonflyDB: Snappyup.Aspire.Hosting.Dragonfly

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.

Önemli
Bu paket community-maintained (topluluk tarafından sürdürülür). Üretimde imaj pinning, güvenlik güncellemeleri ve sürüm uyuşması gibi başlıklar ekip sorumluluğundadır.

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ğinde password=... ve TLS ile birlikte ssl=true.
  • Uygulamanın süreleri beklemeden önce sağlık kontrolünden geçmesi için AspNetCore.HealthChecks.Redis entegrasyonu.
  • İsterseniz: TLS, --snapshot_cron ile 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.

Dikkat
Paket Microsoft sürüm güvence hattının parçası değildir. Hatalar için GitHub süreçleri ve yayın kanallarına bakın; kurumsal destek beklentinizi buna göre ayarlayın.

Gereksinimler

  • .NET SDK: Paket çoklu hedefli olarak net8.0, net9.0 ve net10.0 seç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.props iç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 ilgili WithHostPort ile sabit yayın gerekebilir).
  • Redis Commander iç hedef portu 8081; geliştirici makinenizde sabit adres için WithHostPort uygun olduğundan uygulanabilir.
  • Dragonfly’a gelen uygulama trafiği asıl olarak AddDragonfly ile 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ğrulama

Emü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);
Ufak bir hatırlatma
Kaynak kod yorumlarında StackExchange.Redis için bağlantı dizelerinin virgül içeren parola taşıyamayacağı ifade edilir; üretilmiş parolayı kontrol etmeyi unutmayın.

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.

Redis® ticari markası
Redis®, Redis Ltd. tarafından tescilli bir markadır. Yazı, tel protokolü uyumluluğunu teknik anlamda kullanır; ticari veya hukuki gereklilikleri marka ilkeleriniz doğrultusunda ele alın.

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 run yeterliyse 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.

Kaynak ve ileri okuma

Bir Cevap Yazın

Bu site istenmeyenleri azaltmak için Akismet kullanır. Yorum verilerinizin nasıl işlendiğini öğrenin.