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:
- Implementace tabulky Azure: Microsoft.Orleans. GrainDirectory.AzureStorage
- Implementace úložiště Redis: Microsoft.Orleans. GrainDirectory.Redis
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 nějaké zkušenosti s Orleans adresářem a máte případ použití pro adresář s silnější jednou aktivací a/nebo chcete minimalizovat počet 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);