Visão geral dos silos heterogêneos

Em um determinado cluster, os silos podem dar suporte a um conjunto diferente de tipos de granularidades:

Heterogeneous silos overview diagram.

Neste exemplo, o cluster dá suporte a granularidades do tipo A, B, C, D, E:

  • Tipos de granularidades A e B podem ser colocados no Silo 1 e 2.
  • O tipo de granularidade C pode ser colocado no Silo 1, 2 ou 3.
  • O tipo de granularidade D só pode ser colocado no Silo 3
  • O tipo de granularidade E só pode ser colocado no Silo 4.

Todos os silos devem referenciar interfaces de todos os tipos de granularidades do cluster, mas as classes de granularidade só devem ser referenciadas pelos silos que os hospedarão. O cliente não sabe qual silo dá suporte a um determinado Tipo de granularidade.

Importante

Uma determinada implementação de tipo de granularidade deve ser a mesma em cada silo que dá suporte a ela.

O cenário a seguir não é válido:

No Silo 1 e 2:

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

No Silo 3:

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

Configuração

Nenhuma configuração é necessária, você pode implantar binários diferentes em cada silo no seu cluster. No entanto, se necessário, você pode alterar o intervalo que silos e clientes verificam se há alterações nos tipos com suporte com a propriedade TypeManagementOptions.TypeMapRefreshInterval.

Para fins de teste, você pode usar a propriedade GrainClassOptions.ExcludedGrainTypes, que é uma lista de nomes dos tipos que você deseja excluir nos silos.

Limitações

  • Os clientes conectados não serão notificados se o conjunto de Tipos de granularidade com suporte for alterado. No exemplo anterior:
    • Se o Silo 4 sair do cluster, o cliente ainda tentará fazer chamadas para a granularidade do tipo E. Ele falhará no runtime com um OrleansException.
    • Se o cliente estiver conectado ao cluster antes do Silo 4 ingressá-lo, o cliente não poderá fazer chamadas para a granularidade do tipo E. Ele falhará com um ArgumentException.
  • Não há suporte para granularidade sem estado: todos os silos no cluster devem dar suporte ao mesmo conjunto de granularidades sem estado.
  • ImplicitStreamSubscriptionAttribute não têm suporte e, portanto, somente Assinaturas explícitas podem ser usadas em Streams do Orleans.