Partilhar via


Visão geral de silos heterogêneos

Em um determinado aglomerado, os silos podem suportar um conjunto diferente de tipos de grãos:

Heterogeneous silos overview diagram.

Neste exemplo, o cluster suporta grãos do tipo A, B, , CD, 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 a interfaces de todos os tipos de grãos do cluster, mas as classes de grãos só devem ser referenciadas pelos silos que os hospedarão. 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 que os silos e clientes verificam se há alterações nos tipos suportados com a TypeManagementOptions.TypeMapRefreshInterval propriedade.

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 grãos suportados for alterado. No exemplo anterior:
    • Se o Silo 4 sair do cluster, o cliente ainda tentará fazer chamadas para o grão do tipo E. Ele falhará em tempo de execução com um OrleansExceptionarquivo .
    • Se o cliente estava conectado ao cluster antes do Silo 4 se juntar a ele, o cliente não poderá fazer chamadas para o grão do tipo E. Vai falhar com um ArgumentException.
  • Grãos apátridas não são suportados: todos os silos no cluster devem suportar o mesmo conjunto de grãos apátridas.
  • ImplicitStreamSubscriptionAttribute não são suportados e, portanto, apenas assinaturas explícitas podem ser usadas em Orleans streams.