Atributos de coordenação de granularidade
Os desenvolvedores podem indicar quando e como os clusters devem coordenar seus diretórios de granularidade em relação a uma determinada classe de granularidade. O GlobalSingleInstanceAttribute significa que queremos o mesmo comportamento que ao executar o Orleans em um só cluster global: ou seja, rotear todas as chamadas para uma única ativação do grão. Por outro lado, o atributo [OneInstancePerCluster]
indica que cada cluster pode ter sua ativação independente. Isso será apropriado se a comunicação entre clusters não for desejada.
Os atributos são colocados em implementações de granularidade. Por exemplo:
using Orleans.MultiCluster;
[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
// ...
}
[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
// ...
}
Se uma classe de granularidade não especificar um desses atributos, ela será o padrão para OneInstancePerClusterAttribute ou GlobalSingleInstanceAttribute se o parâmetro de configuração GlobalConfiguration.UseGlobalSingleInstanceByDefault estiver definido como true
.
Protocolo para granularidade global de instância única
Quando um grão global de instância única (GSI) é 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 atual de vários clusters 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 granularidade de cluster
Não há comunicação entre clusters para granularidade de uma instância por cluster. Eles simplesmente usam o mecanismo padrão do Orleans independentemente em cada cluster. Dentro da própria estrutura do Orleans, as seguintes classes de granularidade são marcadas com OneInstancePerClusterAttribute:
ManagementGrain
SystemTargetBasedMembershipTable
GrainBasedReminderTable
Ativações duvidosas
Se o protocolo GSI não receber respostas conclusivas de todos os clusters após três tentativas (ou qualquer número especificado pelo parâmetro de configuração GlobalSingleInstanceNumberRetries), ele criará uma nova ativação local "duvidosa", favorecendo a disponibilidade em vez 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 dessa granularidade). Portanto, periodicamente a cada 30 segundos (ou qualquer intervalo especificado pelo parâmetro de configuração GlobalSingleInstanceRetryInterval), o protocolo GSI é executado novamente para todas as ativações duvidosas. Isso garante que, depois que a comunicação entre clusters for restaurada, as ativações duplicadas poderão ser detectadas e removidas.