Partilhar via


Visão geral de silos heterogêneos

Em um determinado cluster, os silos podem suportar diferentes conjuntos de tipos de grãos:

Diagrama de visão geral de silos heterogêneos.

Neste exemplo, o cluster suporta grãos do tipo A, B, C, De E:

  • Tipos A de grãos e B podem ser colocados nos Silos 1 e 2.
  • O tipo C de grão pode ser colocado no Silo 1, 2 ou 3.
  • O tipo D de grão só pode ser colocado no Silo 3.
  • O tipo E de grão só pode ser colocado no Silo 4.

Todos os silos devem fazer referência às interfaces de todos os tipos de grãos no cluster, mas as classes de grãos só devem ser referenciadas pelos silos que os hospedam. O cliente não sabe qual silo suporta um determinado tipo de grão.

Importante

Uma determinada implementação de tipo de grão deve ser a mesma em cada silo que a suporta.

O seguinte cenário não é válido:

Nos silos 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 do cluster. No entanto, se necessário, você pode alterar o intervalo no qual silos e clientes verificam se há alterações nos tipos suportados usando a TypeManagementOptions.TypeMapRefreshInterval propriedade.

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

Limitações

  • Os clientes conectados não são notificados se o conjunto de tipos de grãos suportados mudar. No exemplo anterior:
    • Se o Silo 4 sair do cluster, o cliente ainda tentará fazer chamadas para grãos do tipo E. Ele falha em tempo de execução com um OrleansException.
    • Se o cliente se conectou ao cluster antes da entrada do Silo 4, o cliente não poderá fazer chamadas para grãos do tipo E. Falha com um ArgumentException.
  • Os grãos sem estado não são suportados em implantações heterogéneas: todos os silos do cluster devem suportar o mesmo conjunto de grãos sem estado.
  • ImplicitStreamSubscriptionAttribute não é suportado; assim, apenas é possível utilizar assinaturas explícitas em Orleans Streams com silos heterogéneos.