Compartir a través de


Directorio de granos de Orleans

Los granos tienen identidades lógicas estables. Pueden activarse (instanciarse) y desactivarse repetidamente durante la vida útil de la aplicación, pero como mucho existe una activación de una tarea en un momento dado. Cada vez que se activa un grano, puede colocarse en un silo diferente en el clúster. Cuando se activa un grano en el clúster, se registra en el directorio de granos. Esto garantiza las invocaciones posteriores de ese grano que se entregan a esa activación y evita la creación de otras activaciones (instancias) de ese grano. El directorio de granos es responsable de mantener un mapeo entre una identidad de grano y la ubicación (qué silo) de su activación actual.

De manera predeterminada, Orleans usa un directorio distribuido en memoria integrado. Este directorio es finalmente coherente y particionado en todos los silos del clúster en forma de una tabla hash distribuida.

A partir de la versión 3.2.0, Orleans también admite implementaciones de directorios de grano conectables.

En la versión 3.2.0 se incluyen dos complementos de este tipo:

Puede configurar qué implementación de directorio de granos se va a usar por tipo de grano, e incluso puede insertar su implementación.

Directorio de granos que se debe usar

Se recomienda comenzar siempre con el directorio predeterminado (el directorio distribuido integrado en memoria). Aunque es coherente con el tiempo y permite activaciones duplicadas ocasionales cuando el clúster es inestable, el directorio integrado es autoadministrable, no tiene dependencias externas, no requiere ninguna configuración y se ha usado correctamente en producción desde el principio.

Si tiene alguna experiencia con Orleans y tiene un caso de uso que requiere una garantía de activación única más fuerte, o si desea minimizar el número de granos desactivados cuando se cierra un silo, considere la posibilidad de usar una implementación de directorio de granos basada en almacenamiento, como la implementación de Redis. Pruebe a usarlo primero para uno o algunos tipos de granos, empezando por aquellos que son de larga duración, tengan un estado significativo o tengan un proceso de inicialización costoso.

Configuración

De forma predeterminada, no es necesario hacer nada; Orleans usa automáticamente el directorio de granos en memoria y lo particiona en todo el clúster. Si desea usar una configuración de directorio específico no predeterminada, debe especificar el nombre del complemento de directorio que se va a usar. Puede hacerlo a través de un atributo en la clase de grano y configurando el complemento de directorio con ese nombre mediante la inserción de dependencias durante la configuración del silo.

Configuración del grano

Especifique el nombre del plugin de directorio de grano usando GrainDirectoryAttribute:

[GrainDirectory(GrainDirectoryName = "my-grain-directory")]
public class MyGrain : Grain, IMyGrain
{
    // ...
}

Configuración del silo

Aquí se muestra cómo configurar la implementación del directorio de granos de Redis:

siloBuilder.AddRedisGrainDirectory(
    "my-grain-directory",
    options => options.ConfigurationOptions = redisConfiguration);

Configura el directorio de granos de Azure así:

siloBuilder.AddAzureTableGrainDirectory(
    "my-grain-directory",
    options => options.ConnectionString = azureConnectionString);

Puede configurar varios directorios con nombres diferentes para su uso con diferentes clases de grano:

siloBuilder
    .AddRedisGrainDirectory(
        "redis-directory-1",
        options => options.ConfigurationOptions = redisConfiguration1)
    .AddRedisGrainDirectory(
        "redis-directory-2",
        options => options.ConfigurationOptions = redisConfiguration2)
    .AddAzureTableGrainDirectory(
        "azure-directory",
        options => options.ConnectionString = azureConnectionString);