Visão geral de silos heterogêneos
Em um determinado aglomerado, os silos podem suportar um conjunto diferente de tipos de grãos:
Neste exemplo, o cluster suporta grãos do tipo A
, B
, , C
D
, E
:
- Tipos
A
de grãos eB
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.
- Se o Silo 4 sair do cluster, o cliente ainda tentará fazer chamadas para o grão do tipo
- 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.