Partilhar via


Orleans diretório de grãos

Os grãos têm identidades lógicas estáveis. Eles podem ativar (instanciar) e desativar muitas vezes ao longo da vida útil do aplicativo, mas no máximo uma ativação de um grão existe a qualquer momento. Cada vez que um grão é ativado, ele pode ser colocado em um silo diferente no cluster. Quando um grão é ativado no cluster, ele se registra no diretório de grãos. Isso garante que as invocações subsequentes desse grão sejam entregues a essa ativação e impede a criação de outras ativações (instâncias) desse grão. O diretório de grain é responsável por manter um mapeamento entre a identidade de um grain e a localização do silo onde está ativado atualmente.

Por padrão, Orleans usa um diretório interno distribuído na memória. Esse diretório é eventualmente consistente e particionado em todos os silos no cluster na forma de uma tabela de hash distribuída.

A partir da versão 3.2.0, Orleans também suporta implementações de diretório grain conectáveis.

Dois desses plugins estão incluídos na versão 3.2.0:

Você pode configurar qual implementação de diretório de grain usar para cada tipo de grain, e pode até injetar a sua implementação.

Qual diretório de grãos você deve usar?

Recomendamos sempre começar com o diretório padrão (o diretório distribuído interno na memória). Embora seja eventualmente consistente e permita ativações duplicadas ocasionais quando o cluster é instável, o diretório interno é autossuficiente, não tem dependências externas, não requer configuração e tem sido usado com sucesso na produção desde o início.

Quando tiver alguma experiência com Orleans e tiver um caso de uso que exija uma garantia de ativação única mais robusta, ou se quiser minimizar o número de grãos desativados quando um silo for desligado, considere usar um diretório de grãos baseado em armazenamento, como a implementação Redis. Tente usá-lo para um ou alguns tipos de grãos primeiro, começando com aqueles que são de longa duração, têm estado significativo ou têm um processo de inicialização caro.

Configuração

Por padrão, você não precisa fazer nada; Orleans usa automaticamente o diretório grain na memória e particiona-o em todo o cluster. Se quiser usar uma configuração não padrão do diretório grain, precisa especificar o nome do plugin de diretório a ser usado. Você pode fazer isso por meio de um atributo na classe grain e configurando o plug-in de diretório com esse nome usando a injeção de dependência durante a configuração do silo.

Configuração de grãos

Especifique o nome do plug-in do diretório grain usando o GrainDirectoryAttribute:

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

Configuração do silo

Veja como configurar a implementação do diretório Redis grain:

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

Configure o diretório grain do Azure da seguinte forma:

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

Você pode configurar vários diretórios com nomes diferentes para uso com diferentes classes de grãos:

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