Partilhar via


Atributos de coordenação de grãos

Os desenvolvedores podem indicar quando e como os clusters devem coordenar seus diretórios de grãos em relação a uma classe de grãos específica. Os GlobalSingleInstanceAttribute meios que queremos o mesmo comportamento que quando executamos Orleans em um único cluster global: ou seja, rotear todas as chamadas para uma única ativação do grão. Por outro lado, o [OneInstancePerCluster] atributo indica que cada cluster pode ter sua ativação independente. Isso é apropriado se a comunicação entre clusters for indesejada.

Os atributos são colocados em implementações de grãos. Por exemplo:

using Orleans.MultiCluster;

[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
   // ...
}

[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
   // ...
}

Se uma classe de grão não especificar nenhum desses atributos, o padrão será OneInstancePerClusterAttribute, ou GlobalSingleInstanceAttribute se o parâmetro GlobalConfiguration.UseGlobalSingleInstanceByDefault de configuração estiver definido como true.

Protocolo para grãos globais de instância única

Quando um grão GSI (instância única global) é acessado e nenhuma ativação é conhecida, um protocolo de ativação GSI especial é executado antes de ativar uma nova instância. Especificamente, uma solicitação é enviada a todos os outros clusters na configuração multicluster atual para verificar se eles já têm ativação para esse grão. Se todas as respostas forem negativas, uma nova ativação será criada neste cluster. Caso contrário, a ativação remota é usada (e uma referência a ela é armazenada em cache no diretório local).

Protocolo para uma instância por grãos de cluster

Não há comunicação entre clusters para grãos de uma instância por cluster. Eles simplesmente usam o mecanismo padrão Orleans de forma independente dentro de cada cluster. Dentro da Orleans própria estrutura, as seguintes classes de grãos são marcadas com o OneInstancePerClusterAttribute:

  • ManagementGrain
  • SystemTargetBasedMembershipTable
  • GrainBasedReminderTable

Ativações duvidosas

Se o protocolo GSI não receber respostas conclusivas de todos os clusters após 3 novas tentativas (ou qualquer número especificado pelo parâmetro GlobalSingleInstanceNumberRetriesde configuração), ele criará uma nova ativação local "duvidosa" de forma otimista, favorecendo a disponibilidade em detrimento da consistência.

Ativações duvidosas podem ser duplicadas (porque alguns clusters remotos que não responderam durante a ativação do protocolo GSI podem, no entanto, ter ativação desse grão). Portanto, periodicamente a cada 30 segundos (ou qualquer intervalo especificado pelo parâmetro GlobalSingleInstanceRetryIntervalde configuração), o protocolo GSI é executado novamente para todas as ativações duvidosas. Isso garante que, uma vez restaurada a comunicação entre clusters, ativações duplicadas possam ser detetadas e removidas.