Compartir a través de


Atributos de coordinación de granos

Los desarrolladores pueden indicar cuándo y cómo los clústeres deben coordinar sus directorios de granos en relación con una clase específica. GlobalSingleInstanceAttribute significa que queremos el mismo comportamiento que al ejecutar Orleans en un clúster global, es decir, enrutar todas las llamadas a una única activación del grano. Por el contrario, el atributo [OneInstancePerCluster] indica que cada clúster puede tener su activación independiente. Esto es adecuado si no interesa la comunicación entre clústeres.

Los atributos se colocan en implementaciones de grano. Por ejemplo:

using Orleans.MultiCluster;

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

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

Si una clase de grano no especifica uno de esos atributos, el valor predeterminado es OneInstancePerClusterAttribute, o GlobalSingleInstanceAttribute si el parámetro de configuración GlobalConfiguration.UseGlobalSingleInstanceByDefault está establecido en true.

Protocolo para granos de instancia única global

Cuando se accede a un grano de instancia única global (GSI) y se sabe que no existe ninguna activación, se ejecuta un protocolo de activación GSI especial antes de activar una nueva instancia. En concreto, se envía una solicitud a todos los demás clústeres de la configuración actual de varios clústeres para comprobar si ya tienen una activación para este grano. Si todas las respuestas son negativas, se crea una activación en este clúster. De lo contrario, se usa la activación remota (y se almacena en caché una referencia a ella en el directorio local).

Protocolo para granos de una instancia por clúster

No hay comunicación entre clústeres en el caso de los granos de una instancia por clúster. Simplemente usan el mecanismo estándar de Orleans de forma independiente dentro de cada clúster. Dentro del marco de Orleans, las siguientes clases de grano están marcados con OneInstancePerClusterAttribute:

  • ManagementGrain
  • SystemTargetBasedMembershipTable
  • GrainBasedReminderTable

Activaciones dudosas

Si el protocolo GSI no recibe respuestas concluyentes de todos los clústeres después de tres reintentos (o cualquier número especificado con el parámetro de configuración GlobalSingleInstanceNumberRetries), crea una activación local "dudosa" de forma optimista, lo que favorece la disponibilidad sobre la coherencia.

Las activaciones dudosas pueden ser duplicados (ya que algunos clústeres remotos que no respondieron durante la activación del protocolo GSI pueden tener a pesar de todo una activación de este grano). Por lo tanto, cada 30 segundos (o el intervalo especificado en el parámetro de configuración GlobalSingleInstanceRetryInterval), el protocolo GSI se vuelve a ejecutar para todas las activaciones dudosas. Esto garantiza que, una vez que se haya restaurado la comunicación entre los clústeres, se puedan detectar y quitar las activaciones duplicadas.