Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.