Site icon Muzaffer AKYIL (Victorious)

.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:

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

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();

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?

Hangi durumlarda gereksiz olabilir?

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

Exit mobile version