Обзор разнородных силосов

В данном кластере силосы могут поддерживать другой набор типов зерна:

Heterogeneous silos overview diagram.

В этом примере кластер поддерживает зерны типа A, B, C, : DE

  • Типы A зерна и B их можно разместить на Silo 1 и 2.
  • Тип C зерна можно поместить на Silo 1, 2 или 3.
  • Тип D зерна можно разместить только на Silo 3
  • Тип E зерна можно разместить только на Silo 4.

Все силосы должны ссылаться на интерфейсы всех типов зерна кластера, но классы зерна должны ссылаться только на силосы, которые будут размещать их. Клиент не знает, какой silo поддерживает заданный тип зерна.

Внимание

Реализация заданного типа зерна должна быть одинаковой для каждого сило, поддерживающего его.

Следующий сценарий недопустим :

На Silo 1 и 2:

public class C: Grain, IMyGrainInterface
{
   public Task SomeMethod() { /* ... */ }
}

На Silo 3:

public class C: Grain, IMyGrainInterface, IMyOtherGrainInterface
{
   public Task SomeMethod() { /* ... */ }
   public Task SomeOtherMethod() { /* ... */ }
}

Настройка

Конфигурация не требуется, вы можете развертывать различные двоичные файлы в каждом хранилище в кластере. Однако при необходимости можно изменить интервал, который силосы и клиенты проверка для изменений типов, поддерживаемых свойствомTypeManagementOptions.TypeMapRefreshInterval.

В целях тестирования можно использовать свойство GrainClassOptions.ExcludedGrainTypes, которое представляет собой список имен типов, которые необходимо исключить из силосов.

Ограничения

  • Подключение клиенты не будут получать уведомления, если изменен набор поддерживаемых типов зерна. В предыдущем примере:
    • Если Silo 4 покидает кластер, клиент по-прежнему пытается выполнить вызовы к зерню типа E. Она завершится ошибкой OrleansExceptionво время выполнения с помощью .
    • Если клиент был подключен к кластеру до его присоединения к Silo 4, клиент не сможет выполнять вызовы к зерню типа E. Это приведет к сбою ArgumentException.
  • Зерна без отслеживания состояния не поддерживаются: все силосы в кластере должны поддерживать тот же набор зерна без отслеживания состояния.
  • ImplicitStreamSubscriptionAttributeне поддерживается, поэтому в Потоки можно использовать Orleans только явные подписки.