Aracılığıyla paylaş


Silo meta verileri

Silo meta verileri, geliştiricilerin küme içindeki silolara özel meta veriler atamasına olanak tanıyan bir özelliktir Orleans . Bu meta veriler, açıklayıcı bilgiler veya belirli özelliklerle silolara açıklama eklemeye yönelik esnek bir mekanizma sağlar.

Bu özellik özellikle farklı siloların farklı rollere, donanım yapılandırmalarına veya diğer benzersiz özelliklere sahip olduğu senaryolarda kullanışlıdır. Örneğin silolar bölgelerine, işlem güçlerine veya sistem içindeki özel sorumluluklarına göre etiketlenebilir.

Silo meta verileri, Orleans gibi ek özelliklerin temelini oluşturur.

Temel kavramlar

Silo meta verileri, Orleans kümesi içerisindeki silolara anahtar-değer çiftleri eklemenin bir yolu olarak tanıtılır. Geliştiricilerin Orleans bileşenlerinin yararlanabileceği siloya özgü özellikleri yapılandırmasına olanak tanıyan bu özelliktir.

Silo meta verileri, anahtar-değer çiftlerinin sabit sözlüğü olarak temsil edilir:

  • Anahtarlar: Meta verileri tanımlayan dizeler (örneğin, , "cloud.region""compute.reservation.type").
  • Değerler: karşılık gelen özelliği açıklayan dizeler (örneğin, , "us-east1""spot").

Konfigürasyon

Orleans içindeki silo meta verileri, .NET yapılandırması veya doğrudan kodda iki yöntemle yapılandırılır.

Yapılandırma ile Silo meta verilerini yapılandırma

Silo meta verileri appsettings.json, ortam değişkenleri veya diğer kullanılabilir yapılandırma kaynakları gibi uygulamanın yapılandırmasında tanımlanabilir.

Örnek: appsettings.json yapılandırması

{
  "Orleans": {
    "Metadata": {
      "cloud.region": "us-east1",
      "compute.reservation.type": "spot",
      "role": "worker"
    }
  }
}

Yukarıdaki yapılandırma, silo için meta verileri tanımlar ve şununla etiketler:

  • cloud.region: "us-east1"
  • compute.reservation.type: "spot"
  • role: "worker"

Bu yapılandırmayı uygulamak için silo konak oluşturucunuzda aşağıdaki kurulumu kullanın:

Host.CreateApplicationBuilder(args).UseOrleans(siloBuilder =>
{
    // Configuration section Orleans:Metadata is used by default
    siloBuilder.UseSiloMetadata();
});

Alternatif olarak, meta verilerin yapılandırmada nereden çekildiğini denetlemek için açık IConfiguration veya IConfigurationSection geçirilebilir.

Silo meta verilerini kodda yapılandırma

Programlı meta veri yapılandırması gerektiren senaryolar için geliştiriciler meta verileri doğrudan Silo konak oluşturucusunda ekleyebilir.

Örnek: Doğrudan Kod Yapılandırması

var builder = Host.CreateApplicationBuilder(args);
builder.UseOrleans(siloBuilder =>
{
    siloBuilder.UseSiloMetadata(new Dictionary<string, string>
    {
        ["cloud.region"] = "us-east1",
        ["compute.reservation.type"] = "spot",
        ["role"] = "worker"
    });
});

Yukarıdaki örnek, JSON yapılandırmasıyla aynı sonucu elde eder, ancak meta veri değerlerinin silo başlatma sırasında dinamik olarak hesaplanması veya yüklenmesine izin verir.

Yapılandırmaları birleştirme

Hem .NET yapılandırması hem de doğrudan kod yapılandırması kullanılırsa, doğrudan yapılandırma .NET yapılandırmasından çakışan meta veri değerlerini geçersiz kılar. Bu, geliştiricilerin yapılandırma dosyalarıyla varsayılanları ayarlamasına ve çalışma zamanı sırasında belirli meta verileri dinamik olarak ayarlamasına olanak tanır.

Usage

Geliştiriciler arabirim aracılığıyla ISiloMetadataCache meta verileri alabilir. Bu arabirim, küme genelindeki tek tek siloların meta verilerini sorgulamaya olanak tanır. Meta veriler her zaman küme üyeliği değiştikçe arka planda güncelleştirilen yerel bir meta veri önbelleğinden döndürülür.

Belirli bir silo için meta verilere erişme

, ISiloMetadataCache belirli bir silonun meta verilerini benzersiz tanımlayıcısı (SiloAddress) ile almak için bir yöntem sağlar. ISoloMetadataCache uygulaması UseSiloMetadata yöntemine kaydedilir ve bağımlılık olarak enjekte edilebilir.

Örnek: Bir Silo için meta verilere erişim

var siloMetadata = siloMetadataCache.GetSiloMetadata(siloAddress);

if (siloMetadata.Metadata.TryGetValue("role", out var role))
{
    Console.WriteLine($"Silo Role for {siloAddress}: {role}");
    // Execute role-specific logic
}

Yukarıdaki örnekte:

  • GetSiloMetadata(siloAddress) belirtilen silo için meta verileri alır.
  • gibi "role" meta veri anahtarları, uygulama mantığını etkilemek için kullanılabilir.

İç uygulama

Dahili olarak, SiloMetadataCache küme üyeliğindeki MembershipTableManager değişiklikleri izler ve meta verilerin yerel önbelleğini üyelik değişiklikleriyle eşitlenmiş durumda tutar. Meta veriler belirli bir Silo için sabittir, bu nedenle bir kez alınır ve Silo kümeden ayrılana kadar önbelleğe alınır. Üyelik tablosundan Dead ayrılan veya kalan kümeler için önbelleğe alınmış meta veriler yerel önbellekten temizlenir.

Her silo, o silo'nun meta verilerini sağlayan bir ISystemTarget öğesini barındırıyor. SiloMetadataCache : ISiloMetadataCache çağrıları, yerel önbellekten bir sonuç döndürür.