Información general sobre los silos heterogéneos

En un clúster determinado, los silos admiten un conjunto diferente de tipos de granos:

Heterogeneous silos overview diagram.

En este ejemplo, el clúster admite granos de tipo A, B, C, D, E:

  • Los tipos de granos A y B se pueden colocar en Silo 1 y 2.
  • El tipo de grano C se puede colocar en Silo 1, 2 o 3.
  • El tipo de grano D se puede colocar en Silo 3
  • El tipo de grano E se puede colocar en Silo 4.

Todos los silos deben hacer referencia a interfaces de todos los tipos de grano del clúster, pero solo los silos que las hospedarán deben hacer referencia a las clases de grano. El cliente no sabe el silo que admite un tipo de grano determinado.

Importante

Una implementación de tipo de grano determinada debe ser la misma en cada silo que la admita.

El escenario siguiente no es válido:

En Silo 1 y 2:

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

En Silo 3:

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

Configuración

No se necesita ninguna configuración, puede implementar archivos binarios diferentes en cada silo del clúster. Sin embargo, si es necesario, puede cambiar el intervalo en el que los silos y los clientes comprueban si hay cambios en los tipos admitidos con la propiedad TypeManagementOptions.TypeMapRefreshInterval.

Con fines de prueba, puede usar la propiedad GrainClassOptions.ExcludedGrainTypes, que es una lista de nombres de los tipos que quiere excluir en los silos.

Limitaciones

  • No se notificará a los clientes conectados si ha cambiado el conjunto de tipos de granos admitidos. En el ejemplo anterior:
    • Si Silo 4 sale del clúster, el cliente seguirá intentando realizar llamadas al grano de tipo E. Se producirá un error en tiempo de ejecución con un OrleansException.
    • Si el cliente se conectó al clúster antes de unirlo a Silo 4, no podrá realizar llamadas al grano de tipo E. Se producirá un error con un ArgumentException.
  • No se admiten granos sin estado: todos los silos del clúster deben admitir el mismo conjunto de granos sin estado.
  • ImplicitStreamSubscriptionAttribute no se admiten y, por tanto, solo se pueden usar suscripciones explícitas en secuencias de Orleans.