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.
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:
- Wenn das aktuelle nicht kompatibel ist, wird es deaktiviert, und es wird ein neues kompatibles erstellt (siehe Strategie für die Versionsauswahl).
- Wenn das aktuelle kompatibel ist (siehe kompatible Grains), wird der Aufruf normal behandelt.
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);
});
});
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für