Compartir a través de


Introducción a los silos heterogéneos

En un clúster determinado, los silos pueden admitir diferentes conjuntos de tipos de grano:

Diagrama de información general de silos heterogéneos.

En este ejemplo, el clúster admite granos de tipo A, , BC, Dy E:

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

Todos los silos deben hacer referencia a las interfaces de todos los tipos de grano del clúster, pero las clases de grano solo deben ser referenciadas por los silos que los hospedan. El cliente no sabe qué silo admite un tipo de grano determinado.

Importante

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

El escenario siguiente no es válido:

Sobre 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 usando la propiedad TypeManagementOptions.TypeMapRefreshInterval.

Para fines de prueba, puede usar la GrainClassOptions.ExcludedGrainTypes propiedad, que es una lista de nombres de los tipos que desea excluir en silos específicos.

Limitaciones

  • Los clientes conectados no se notifican si cambia el conjunto de tipos de grano admitidos. En el ejemplo anterior:
    • Si Silo 4 deja el clúster, el cliente sigue intentando realizar llamadas a granos de tipo E. Se produce un error en tiempo de ejecución con un OrleansException.
    • Si el cliente se conecta al clúster antes de unirse a Silo 4, el cliente no puede realizar llamadas a granos de tipo E. Se produce un error con .ArgumentException
  • Los granos sin estado no se admiten en implementaciones heterogéneas: todos los silos del clúster deben admitir el mismo conjunto de granos sin estado.
  • ImplicitStreamSubscriptionAttribute no se admite; por lo tanto, solo puede usar suscripciones explícitas en Orleans Streams con silos heterogéneos.