Versionsverwaltung der Grain-Schnittstelle

In diesem Artikel erfahren Sie, wie Sie die Versionsverwaltung der Grain-Schnittstelle verwenden. Die Versionsverwaltung des Grain-Zustands sprengt den Rahmen des Artikels.

Überblick

In einem bestimmten Cluster können Silos verschiedene Versionen eines Graintyps unterstützen.

Cluster with different versions of a grain

In diesem Beispiel wurden der Client und das Silo{1,2,3} mit der Grain-Schnittstelle A, Version 1, kompiliert. Silo 4 wurde mit A, Version 2, kompiliert.

Einschränkungen

  • Keine Versionsverwaltung für zustandslose Worker
  • Bei Streamingschnittstellen erfolgt keine Versionsverwaltung

Aktivieren der Versionsverwaltung

Wenn das versions-Attribut nicht explizit zur Grain-Schnittstelle hinzugefügt wird, haben die Grains die Standardversion 0. Sie können die Versionsverwaltung von Grains mithilfe des „VersionAttribute“ in der Grain-Schnittstelle vornehmen:

[Version(X)]
public interface IVersionUpgradeTestGrain : IGrainWithIntegerKey
{
}

Dabei ist X die Versionsnummer der Grain-Schnittstelle, die in der Regel monoton steigend ist.

Kompatibilität und Platzierung der Grainversion

Wenn ein Aufruf eines Grains mit Versionsverwaltung in einem Cluster eingeht:

  • Wenn keine Aktivierung vorhanden ist, wird eine kompatible Aktivierung erstellt.
  • Wenn eine Aktivierung vorhanden ist:

Standardmäßig:

  • Alle Grains mit Versionsverwaltung sollen nur abwärtskompatibel sein (siehe Abwärtskompatibilitätsrichtlinien und kompatible Grains). Das bedeutet, dass ein v1-Grain Aufrufe an ein v2-Grain tätigen kann, ein v2-Grain kann jedoch kein v1-Grain aufrufen.
  • Wenn mehrere Versionen im Cluster vorhanden sind, wird die neue Aktivierung nach dem Zufallsprinzip in einem kompatiblen Silo platziert.

Dieses Standardverhalten können Sie über die GrainVersioningOptions ändern.

var silo = new HostBuilder()
    .UseOrleans(c =>
    {
        c.Configure<GrainVersioningOptions>(options =>
        {
            options.DefaultCompatibilityStrategy = nameof(BackwardCompatible);
            options.DefaultVersionSelectorStrategy = nameof(MinimumVersion);
        });
    });