Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I metadati silo sono una funzionalità di Orleans che consente agli sviluppatori di assegnare metadati personalizzati a silo all'interno di un cluster. Questi metadati forniscono un meccanismo flessibile per l'annotazione di silo con informazioni descrittive o funzionalità specifiche.
Questa funzionalità è particolarmente utile negli scenari in cui diversi silo hanno ruoli distinti, configurazioni hardware o altre caratteristiche univoche. Ad esempio, i silo possono essere contrassegnati in base all'area, alla potenza di calcolo o alle responsabilità specializzate all'interno del sistema.
I metadati silo posizionano le basi per funzionalità aggiuntive Orleans , ad esempio il filtro di posizionamento granulare.
Concetti chiave
I metadati dei silo introducono un modo per associare coppie chiave-valore ai silo all'interno di un Orleans cluster. Questa funzionalità consente agli sviluppatori di configurare caratteristiche specifiche del silo che possono essere sfruttate dai Orleans componenti.
I metadati silo sono rappresentati come dizionario non modificabile di coppie chiave-valore:
-
Chiavi: stringhe che identificano i metadati , ad esempio
"cloud.region","compute.reservation.type". -
Valori: stringhe che descrivono la proprietà corrispondente , ad esempio
"us-east1","spot".
Configurazione
I metadati silo in Orleans vengono configurati usando due metodi, ovvero la configurazione .NET o direttamente nel codice.
Configurare i metadati Silo tramite la configurazione
I metadati silo possono essere definiti nella configurazione dell'app, ad esempio appsettings.json, variabili di ambiente o qualsiasi altra origine di configurazione disponibile.
Esempio: appsettings.json configurazione
{
"Orleans": {
"Metadata": {
"cloud.region": "us-east1",
"compute.reservation.type": "spot",
"role": "worker"
}
}
}
La configurazione precedente definisce i metadati per un Silo, contrassegnandolo con:
-
cloud.region:"us-east1" -
compute.reservation.type:"spot" -
role:"worker"
Per applicare questa configurazione, usare la configurazione seguente nel generatore di host silo:
Host.CreateApplicationBuilder(args).UseOrleans(siloBuilder =>
{
// Configuration section Orleans:Metadata is used by default
siloBuilder.UseSiloMetadata();
});
In alternativa, è possibile passare un oggetto esplicito IConfiguration o IConfigurationSection per controllare da dove vengono estratti i metadati nella configurazione.
Configurazione dei metadati silo nel codice
Per gli scenari che richiedono la configurazione dei metadati a livello di codice, gli sviluppatori possono aggiungere metadati direttamente nel generatore di host Silo.
Esempio: Configurazione di Direct Code
var builder = Host.CreateApplicationBuilder(args);
builder.UseOrleans(siloBuilder =>
{
siloBuilder.UseSiloMetadata(new Dictionary<string, string>
{
["cloud.region"] = "us-east1",
["compute.reservation.type"] = "spot",
["role"] = "worker"
});
});
L'esempio precedente ottiene lo stesso risultato della configurazione JSON, ma consente di calcolare o caricare dinamicamente i valori dei metadati durante l'inizializzazione del silo.
Configurazioni di fusione
Se vengono usate sia la configurazione di .NET che la configurazione diretta del codice, la configurazione diretta sostituisce eventuali valori di metadati in conflitto dalla configurazione .NET. In questo modo gli sviluppatori possono impostare le impostazioni predefinite con i file di configurazione e regolare in modo dinamico metadati specifici durante il runtime.
Usage
Gli sviluppatori possono recuperare i metadati tramite l'interfaccia ISiloMetadataCache . Questa interfaccia consente di eseguire query sui metadati per singoli silo nel cluster. I metadati verranno sempre restituiti da una cache locale di metadati che vengono aggiornati in background man mano che cambia l'appartenenza al cluster.
Accedere ai metadati per un silo specifico
ISiloMetadataCache fornisce un metodo per recuperare i metadati per un silo specifico in base al relativo identificatore univoco (SiloAddress). L'implementazione ISoloMetadataCache viene registrata nel UseSiloMetadata metodo e può essere inserita come dipendenza.
Esempio: Accedere ai metadati per un silo
var siloMetadata = siloMetadataCache.GetSiloMetadata(siloAddress);
if (siloMetadata.Metadata.TryGetValue("role", out var role))
{
Console.WriteLine($"Silo Role for {siloAddress}: {role}");
// Execute role-specific logic
}
Nell'esempio precedente:
-
GetSiloMetadata(siloAddress)recupera i metadati per il silo specificato. - Le chiavi di metadati come
"role"possono essere usate per influenzare la logica dell'applicazione.
Implementazione interna
Internamente, SiloMetadataCache monitora le modifiche dell'appartenenza al cluster su MembershipTableManager e mantiene una cache locale dei metadati sincronizzata con le modifiche dell'appartenenza. I metadati non sono modificabili per un determinato Silo, quindi vengono recuperati una volta e memorizzati nella cache fino a quando tale Silo non esce dal cluster. I metadati memorizzati nella cache per i cluster che sono Dead o hanno lasciato la tabella di appartenenza verranno cancellati dalla cache locale.
Ogni silo ospita un oggetto ISystemTarget che fornisce i metadati del silo. Le chiamate a SiloMetadataCache : ISiloMetadataCache restituiscono un risultato dalla cache locale.