Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los metadatos de silo son una característica de Orleans que permite a los desarrolladores asignar metadatos personalizados a silos dentro de un clúster. Estos metadatos proporcionan un mecanismo flexible para anotar silos con información descriptiva o funcionalidades específicas.
Esta característica es especialmente útil en escenarios en los que diferentes silos tienen roles distintos, configuraciones de hardware u otras características únicas. Por ejemplo, los silos se pueden etiquetar en función de su región, potencia de proceso o responsabilidades especializadas dentro del sistema.
Los metadatos de silo sientan las bases para características adicionales Orleans, como el filtrado de selección de ubicación de granos.
Conceptos clave
Los metadatos de silo presentan una manera de adjuntar pares clave-valor a silos dentro de un Orleans clúster. Esta característica permite a los desarrolladores configurar características específicas del silo que los componentes de Orleans pueden aprovechar.
Los metadatos de silo se representan como un diccionario inmutable de pares clave-valor:
-
Claves: cadenas que identifican los metadatos (por ejemplo,
"cloud.region","compute.reservation.type"). -
Valores: cadenas que describen la propiedad correspondiente (por ejemplo,
"us-east1","spot").
Configuración
Los metadatos de silo de Orleans se configuran mediante dos métodos, ya sea la configuración de .NET o directamente en el código.
Configurar los metadatos del Silo mediante configuración
Los metadatos de silo se pueden definir en la configuración de la aplicación, como appsettings.json, variables de entorno o cualquier otro origen de configuración disponible.
Ejemplo: configuración deappsettings.json
{
"Orleans": {
"Metadata": {
"cloud.region": "us-east1",
"compute.reservation.type": "spot",
"role": "worker"
}
}
}
La configuración anterior define los metadatos de un silo y lo etiqueta con:
-
cloud.region:"us-east1" -
compute.reservation.type:"spot" -
role:"worker"
Para aplicar esta configuración, use la siguiente configuración en el generador de hosts de silo:
Host.CreateApplicationBuilder(args).UseOrleans(siloBuilder =>
{
// Configuration section Orleans:Metadata is used by default
siloBuilder.UseSiloMetadata();
});
Como alternativa, se puede pasar un elemento explícito IConfiguration o IConfigurationSection para controlar dónde se extraen los metadatos de la configuración.
Configuración de los metadatos de silo en código
En escenarios que requieren configuración de metadatos mediante programación, los desarrolladores pueden agregar metadatos directamente en el generador de hosts de Silo.
Ejemplo: Configuración de código directo
var builder = Host.CreateApplicationBuilder(args);
builder.UseOrleans(siloBuilder =>
{
siloBuilder.UseSiloMetadata(new Dictionary<string, string>
{
["cloud.region"] = "us-east1",
["compute.reservation.type"] = "spot",
["role"] = "worker"
});
});
En el ejemplo anterior se logra el mismo resultado que la configuración json, pero permite calcular o cargar valores de metadatos dinámicamente durante la inicialización del silo.
Combinación de configuraciones
Si se usan la configuración de .NET y la configuración de código directo, la configuración directa invalida los valores de metadatos en conflicto de la configuración de .NET. Esto permite a los desarrolladores establecer valores predeterminados con archivos de configuración y ajustar dinámicamente metadatos específicos durante el tiempo de ejecución.
Usage
Los desarrolladores pueden recuperar metadatos a través de la ISiloMetadataCache interfaz . Esta interfaz permite consultar metadatos para silos individuales en el clúster. Los metadatos siempre se devolverán de una caché local de metadatos que se actualizan en segundo plano a medida que cambia la pertenencia al clúster.
Acceso a los metadatos de un silo específico
ISiloMetadataCache proporciona un método para recuperar los metadatos de un silo específico mediante su identificador único (SiloAddress). La ISoloMetadataCache implementación se registra en el UseSiloMetadata método y se puede insertar como una dependencia.
Ejemplo: Acceso a los metadatos de 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
}
En el ejemplo anterior:
-
GetSiloMetadata(siloAddress)recupera los metadatos del silo especificado. - Las claves de metadatos como
"role"se pueden usar para influir en la lógica de la aplicación.
Implementación interna
Internamente, supervisa los cambios en la pertenencia al clúster en SiloMetadataCache y MembershipTableManager, y mantiene una caché local de metadatos sincronizada con los cambios de pertenencia. Los metadatos son inmutables para un silo determinado, por lo que se recupera una vez y se almacena en caché hasta que Silo sale del clúster. Los metadatos almacenados en caché para los clústeres que están Dead o que han dejado la tabla de pertenencia se borrarán de la caché local.
Cada silo hospeda un ISystemTarget que proporciona los metadatos del silo. Las llamadas a SiloMetadataCache : ISiloMetadataCache devuelven un resultado de la caché local.