Orleans adresář agregačního intervalu

Zrna mají stabilní logické identity a mohou se aktivovat (vytvořit instanci) a deaktivovat mnohokrát v průběhu životnosti aplikace, ale v každém okamžiku existuje nejvýše jedna aktivace zrnitosti. Pokaždé, když se aktivuje agregační interval, může být umístěn na jiném silu v clusteru. Když se v clusteru aktivuje agregační interval, zaregistruje se v globálním registru a adresáři agregačního intervalu. Tím se zajistí, že další vyvolání tohoto agregace se do této aktivace doručí a že se nevytvořily žádné další aktivace (instance) daného agregace. Adresář odstupňovaného intervalu zodpovídá za udržování mapování mezi odstupňovanou identitou a umístěním (na které sil) je aktuální aktivace.

Ve výchozím nastavení Orleans používá integrovaný distribuovaný adresář v paměti. Tento adresář je nakonec konzistentní a rozdělený mezi všechna sila v clusteru ve formě distribuované hashovací tabulky.

Počínaje verzí 3.2.0 Orleans podporuje také připojitelné implementace adresáře agregace.

Do verze 3.2.0 jsou zahrnuty dva takové moduly plug-in:

Můžete nakonfigurovat, kterou implementaci adresáře agregačních intervalů použít na základě jednotlivých typů, a dokonce můžete vložit implementaci.

Jaký adresář byste měli použít?

Doporučujeme vždy začít s výchozím adresářem (integrovaným distribuovaným adresářem v paměti). I když je nakonec konzistentní a umožňuje občasnou duplicitní aktivaci, když je cluster nestabilní, integrovaný adresář je samoobslužný bez externích závislostí, nevyžaduje žádnou konfiguraci a byl použit v produkčním prostředí po celou dobu.

Pokud máte zkušenosti s Orleans adresářem a máte případ použití se silnější zárukou jedné aktivace a/nebo chcete minimalizovat počet agregačních intervalů, které se deaktivují, když se silo v clusteru vypne, zvažte použití implementace adresáře založeného na úložišti, jako je implementace Redis. Nejprve ho zkuste použít pro jeden nebo několik typů zrn, počínaje těmi, které jsou dlouhodobé a mají značné množství stavu nebo nákladný inicializační proces.

Konfigurace

Ve výchozím nastavení nemusíte nic dělat; adresář v paměti se automaticky použije a rozdělí do clusteru. Pokud chcete použít konfiguraci jiného než výchozího adresáře, musíte zadat název modulu plug-in adresáře, který se má použít. To lze provést prostřednictvím atributu třídy agregační třídy a pomocí injektáže závislostí a modulu plug-in adresáře s tímto názvem během konfigurace sila.

Konfigurace agregačního intervalu

Zadáním názvu modulu plug-in modulu plug-in agregace s následujícími informacemi GrainDirectoryAttribute:

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

Konfigurace sila

Tady nakonfigurujeme implementaci adresáře Redis grain:

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

Adresář Azure grain je nakonfigurovaný takto:

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

Můžete nakonfigurovat více adresářů s různými názvy tak, aby se používaly pro různé třídy zrnitosti:

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