Heterogene Silos – Übersicht

Auf einem bestimmten Cluster können Silos eine andere Gruppe von Graintypen unterstützen:

Heterogeneous silos overview diagram.

In diesem Beispiel unterstützt der Cluster Grains vom Typ A, B, C, D, E:

  • Graintypen A und B können auf Silo 1 und 2 platziert werden.
  • Graintyp C kann auf Silo 1, 2 oder 3 platziert werden.
  • Graintyp D kann nur auf Silo 3 platziert werden.
  • Graintyp E kann nur auf Silo 4 platziert werden.

Alle Silos sollten auf Schnittstellen aller Graintypen des Clusters verweisen, aber Grainklassen sollten nur von den Silos referenziert werden, die sie hosten. Der Kunde weiß nicht, welches Silo einen bestimmten Graintyp unterstützt.

Wichtig

Eine bestimmte Graintypimplementierung muss auf jedem Silo identisch sein, das sie unterstützt.

Das folgende Szenario ist ungültig:

Auf Silo 1 und 2:

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

Auf Silo 3:

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

Konfiguration

Es ist keine Konfiguration erforderlich, Sie können unterschiedliche Binärdateien auf jedem Silo in Ihrem Cluster bereitstellen. Bei Bedarf können Sie jedoch das Intervall ändern, in dem Silos und Clients nach Änderungen in Typen suchen, die mit der TypeManagementOptions.TypeMapRefreshInterval-Eigenschaft unterstützt werden.

Zu Testzwecken können Sie die Eigenschaft GrainClassOptions.ExcludedGrainTypes verwenden, bei der es sich um eine Liste mit Namen der Typen handelt, die Sie für die Silos ausschließen möchten.

Einschränkungen

  • Verbundene Clients werden nicht benachrichtigt, wenn sich die Gruppe der unterstützten Graintypen geändert hat. Im vorherigen Beispiel:
    • Wenn Silo 4 den Cluster verlässt, versucht der Client weiterhin, Aufrufe an das Grain des Typs E zu tätigen. Es schlägt zur Runtime mit einer OrleansException fehl.
    • Wenn der Client vor dem Verknüpfen mit Silo 4 mit dem Cluster verbunden war, kann der Client keine Aufrufe an das Grain des Typs E tätigen. Er schlägt mit einer ArgumentException fehl.
  • Zustandslose Grains werden nicht unterstützt: Alle Silos im Cluster müssen die gleiche Gruppe zustandsloser Grains unterstützen.
  • ImplicitStreamSubscriptionAttribute werden nicht unterstützt und daher können nur explizite Abonnements in Orleans-Streams verwendet werden.