Orleans Каталог зерн

Зерна имеют стабильные логические удостоверения и могут быть активированы (экземпляры) и деактивированы много раз в течение жизни приложения, но по крайней мере одна активация зерна существует в любой момент времени. Каждый раз при активации зерна он может быть помещен в другой узел в кластере. При активации зерна в кластере он регистрируется в глобальном реестре, каталог зерна. Это гарантирует, что последующие вызовы этого зерна будут доставлены в эту активацию зерна и что никакие другие активации (экземпляры) этого зерна не будут созданы. Каталог зерна отвечает за сохранение сопоставления между удостоверением зерна и местом (который silo) находится в текущем состоянии активации.

По умолчанию Orleans используется встроенный распределенный каталог в памяти. Этот каталог в конечном итоге согласован и секционирован по всем оси в кластере в виде распределенной хэш-таблицы.

Начиная с версии 3.2.0, Orleans также поддерживает подключаемые реализации каталога зерна.

Два таких подключаемых модуля включены в выпуск 3.2.0:

Вы можете настроить реализацию каталога зерна для использования на основе каждого типа, и вы можете даже внедрить реализацию.

Какой каталог зерна следует использовать?

Мы рекомендуем всегда начинать с стандартного (встроенного распределенного каталога в памяти). Несмотря на то, что он в конечном итоге согласован и позволяет иногда повторять активацию при нестабильном кластере, встроенный каталог самодостаточен без внешних зависимостей, не требует какой-либо конфигурации и использовался в рабочей среде в течение всего времени.

Если у вас есть некоторый Orleans опыт работы с каталогом зерна с более сильной гарантией одноактивной активации и /или хотите свести к минимуму количество зерна, которое деактивируется при завершении работы в кластере, рассмотрите возможность использования реализации каталога на основе хранилища, например реализации Redis. Сначала попробуйте использовать его для одного или нескольких типов зерна, начиная с тех, которые являются длительными и имеют значительное количество состояния или дорогостоящий процесс инициализации.

Настройка

По умолчанию вам не нужно ничего делать; Каталог в памяти будет автоматически использоваться и секционироваться по всему кластеру. Если вы хотите использовать конфигурацию каталога, отличной от уровня по умолчанию, необходимо указать имя подключаемого модуля каталога для использования. Это можно сделать с помощью атрибута класса grain и внедрения зависимостей и подключаемого модуля каталога с таким именем во время конфигурации silo.

Конфигурация зерна

Указание имени подключаемого GrainDirectoryAttributeмодуля каталога grain с помощью :

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

Конфигурация Silo

Здесь мы настраиваем реализацию каталога Redis.

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

Каталог azure grain настроен следующим образом:

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

Можно настроить несколько каталогов с различными именами для различных классов зерна:

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