Freigeben über


Heterogene Silos – Übersicht

Auf einem bestimmten Cluster können Silos verschiedene Getreidearten unterstützen:

Übersichtsdiagramm für heterogene Silos.

In diesem Beispiel unterstützt der Cluster Körner vom Typ A, B, , C, Dund E:

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

Alle Silos sollten auf die Schnittstellen aller Getreidetypen im Cluster verweisen, aber getreideklassen sollten nur von den Silos referenziert werden, die sie hosten. Der Kunde weiß nicht, welches Silo einen bestimmten Getreidetyp unterstützt.

Von Bedeutung

Eine bestimmte Getreidetypimplementierung 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 unterstützten Typen mithilfe der TypeManagementOptions.TypeMapRefreshInterval Eigenschaft suchen.

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

Einschränkungen

  • Verbundene Clients werden nicht benachrichtigt, wenn sich die Gruppe der unterstützten Getreidetypen ändert. Im vorherigen Beispiel:
    • Wenn Silo 4 den Cluster verlässt, versucht der Client immer noch, Aufrufe an Getreide vom Typ Ezu tätigen. Es tritt zur Laufzeit mit einem OrleansException auf.
    • Wenn der Client mit dem Cluster verbunden ist, bevor Silo 4 verbunden ist, kann der Client keine Aufrufe an Korn vom Typ Evornehmen. Es schlägt mit einem ArgumentException fehl.
  • Zustandslose Getreide werden in heterogenen Bereitstellungen nicht unterstützt: Alle Silos im Cluster müssen den gleichen Satz zustandsloser Getreidearten unterstützen.
  • ImplicitStreamSubscriptionAttribute wird nicht unterstützt; So können Sie explizite Abonnements nur in Orleans Streams mit heterogenen Silos verwenden.