Panoramica dei silo eterogenei

In un determinato cluster i silo possono supportare un set diverso di tipi di granularità:

Heterogeneous silos overview diagram.

In questo esempio il cluster supporta grani di tipo A, B, C, D, E:

  • I tipi di granularità A e B possono essere posizionati su Silo 1 e 2.
  • Il tipo di granularità C può essere posizionato su Silo 1, 2 o 3.
  • Il tipo di granularità D può essere posizionato solo su Silo 3
  • Il tipo di granularità E può essere posizionato solo su Silo 4.

Tutti i silo devono fare riferimento a interfacce di tutti i tipi di granularità del cluster, ma le classi di granularità devono essere referenziate solo dai silo che li ospiteranno. Il client non conosce il silo che supporta un tipo di granularità specificato.

Importante

Un'implementazione del tipo di granularità specifica deve essere la stessa in ogni silo che lo supporta.

Lo scenario seguente non è valido:

In Silo 1 e 2:

public class C: Grain, IMyGrainInterface
{
   public Task SomeMethod() { /* ... */ }
}

In Silo 3:

public class C: Grain, IMyGrainInterface, IMyOtherGrainInterface
{
   public Task SomeMethod() { /* ... */ }
   public Task SomeOtherMethod() { /* ... */ }
}

Impostazione

Non è necessaria alcuna configurazione, è possibile distribuire file binari diversi in ogni silo del cluster. Tuttavia, se necessario, è possibile modificare l'intervallo con cui i silo e i client controllano le modifiche apportate ai tipi supportati con la proprietà TypeManagementOptions.TypeMapRefreshInterval.

A scopo di test, è possibile usare la proprietà GrainClassOptions.ExcludedGrainTypes, ovvero un elenco di nomi dei tipi da escludere nei silo.

Limiti

  • I client connessi non riceveranno una notifica se il set di tipi di granularità supportati è stato modificato. Nell'esempio precedente:
    • Se Silo 4 lascia il cluster, il client tenterà comunque di effettuare chiamate al tipo di granularità E. Il runtime avrà esito negativo con un OrleansException.
    • Se il client è stato connesso al cluster prima dell'aggiunta a Silo 4, il client non sarà in grado di effettuare chiamate alla granularità di tipo E. L'errore avrà esito negativo con un oggetto ArgumentException.
  • I grani senza stato non sono supportati: tutti i silo nel cluster devono supportare lo stesso set di grani senza stato.
  • ImplicitStreamSubscriptionAttribute non sono supportate e pertanto solo le sottoscrizioni esplicite possono essere usate in Flussi Orleans.