Auswirkungen der Datenserialisierung auf AnwendungsupgradesHow data serialization affects an application upgrade

Bei einem parallelen Anwendungsupgrade wird das Upgrade auf eine Teilmenge von Knoten angewendet. Dabei werden die einzelnen Upgradedomänen nacheinander abgearbeitet.In a rolling application upgrade, the upgrade is applied to a subset of nodes, one upgrade domain at a time. Während dieses Vorgangs weisen einige Upgradedomänen die neuere Version Ihrer Anwendung auf und andere Upgradedomänen die ältere Version Ihrer Anwendung.During this process, some upgrade domains are on the newer version of your application, and some upgrade domains are on the older version of your application. Während der Einführung muss die neue Version der Anwendung die alte Version Ihrer Daten sowie die alte Version der Anwendung die neue Version der Daten lesen können.During the rollout, the new version of your application must be able to read the old version of your data, and the old version of your application must be able to read the new version of your data. Wenn das Datenformat nicht aufwärts- und abwärtskompatibel ist, kann das Upgrade nicht erfolgreich durchgeführt werden, oder es gehen möglicherweise sogar Daten verloren oder werden beschädigt.If the data format is not forward and backward compatible, the upgrade may fail, or worse, data may be lost or corrupted. In diesem Artikel wird die Zusammensetzung des Datenformats erörtert und es werden bewährte Methoden zum Sicherstellen der Aufwärts- und Abwärtskompatibilität der Daten vorgestellt.This article discusses what constitutes your data format and offers best practices for ensuring that your data is forward and backward compatible.

Woraus besteht das Datenformat?What makes up your data format?

In Azure Service Fabric stammen die Daten, die persistent gespeichert und repliziert werden, aus den C#-Klassen.In Azure Service Fabric, the data that is persisted and replicated comes from your C# classes. Bei Anwendungen mit Reliable Collections(zuverlässige Auflistungen) sind diese Daten die Objekte in den zuverlässigen Wörterbüchern und Warteschlangen.For applications that use Reliable Collections, that data is the objects in the reliable dictionaries and queues. Bei Anwendungen mit Reliable Actors(zuverlässige Akteure) ist dies der unterstützende Zustand für den Akteur.For applications that use Reliable Actors, that is the backing state for the actor. Diese C#-Klassen müssen serialisierbar sein, um persistent gespeichert und repliziert zu werden.These C# classes must be serializable to be persisted and replicated. Aus diesem Grund wird das Datenformat durch die Felder und Eigenschaften definiert, die serialisiert werden, sowie dadurch, wie sie serialisiert werden.Therefore, the data format is defined by the fields and properties that are serialized, as well as how they are serialized. In IReliableDictionary<int, MyClass> sind die Daten beispielsweise ein serialisiertes int und eine serialisierte MyClass.For example, in an IReliableDictionary<int, MyClass> the data is a serialized int and a serialized MyClass.

Codeänderungen, die zu einer Änderung des Datenformats führenCode changes that result in a data format change

Da das Datenformat durch C#-Klassen bestimmt wird, ziehen Änderungen an den Klassen möglicherweise eine Änderung des Datenformats nach sich.Since the data format is determined by C# classes, changes to the classes may cause a data format change. Es muss sorgfältig sichergestellt werden, dass ein paralleles Upgrade die Änderung des Datenformats verarbeiten kann.Care must be taken to ensure that a rolling upgrade can handle the data format change. Beispiele, die Änderungen des Datenformats zur Folge haben können:Examples that may cause data format changes:

  • Hinzufügen oder Entfernen von Feldern oder EigenschaftenAdding or removing fields or properties
  • Umbenennen von Feldern oder EigenschaftenRenaming fields or properties
  • Ändern der Feld- oder EigenschaftentypenChanging the types of fields or properties
  • Ändern des Klassennamens oder NamespacesChanging the class name or namespace

„Datenvertrag“ als StandardserialisierungsprogrammData Contract as the default serializer

Das Serialisierungsprogramm liest im Allgemeinen die Daten und deserialisiert sie in die aktuelle Version, selbst wenn die Daten eine ältere oder neuere Version aufweisen.The serializer is generally responsible for reading the data and deserializing it into the current version, even if the data is in an older or newer version. Das Standardserialisierungsprogramm ist der Datenvertragsserialisierer, der klar definierte Versionsregeln aufweist.The default serializer is the Data Contract serializer, which has well-defined versioning rules. Mit Reliable Collections kann das Serialisierungsprogramm überschrieben werden, mit Reliable Actors derzeit jedoch nicht.Reliable Collections allow the serializer to be overridden, but Reliable Actors currently do not. Der Datenvertragsserialisierer spielt eine wichtige Rolle bei der Aktivierung von parallelen Upgrades.The data serializer plays an important role in enabling rolling upgrades. Der Datenvertragsserialisierer ist das für Service Fabric-Anwendungen empfohlene Serialisierungsprogramm.The Data Contract serializer is the serializer that we recommend for Service Fabric applications.

Auswirkungen des Datenformats auf parallele UpgradesHow the data format affects a rolling upgrade

Während eines parallelen Upgrades gibt es zwei Hauptszenarios, bei denen das Serialisierungsprogramm auf eine ältere oder neuere Version Ihrer Daten treffen kann:During a rolling upgrade, there are two main scenarios where the serializer may encounter an older or newer version of your data:

  1. Nachdem ein Knoten aktualisiert wurde und wieder gestartet wird, lädt das neue Serialisierungsprogramm die Daten, die persistent auf Festplatte gespeichert waren, mit der neuen Version.After a node is upgraded and starts back up, the new serializer will load the data that was persisted to disk by the old version.
  2. Während des parallelen Upgrades enthält der Cluster eine Mischung aus der alten und neuen Version des Codes.During the rolling upgrade, the cluster will contain a mix of the old and new versions of your code. Da Replikate in verschiedenen Upgradedomänen platziert werden können und Replikate sich untereinander Daten senden, kann die neue und/oder alte Version Ihres Serialisierungsprogramms auf die neue und/oder alte Version Ihrer Daten treffen.Since replicas may be placed in different upgrade domains, and replicas send data to each other, the new and/or old version of your data may be encountered by the new and/or old version of your serializer.

Hinweis

Die "neue Version" und die "alte Version" beziehen sich hier auf die Version des ausgeführten Codes.The "new version" and "old version" here refer to the version of your code that is running. Das "neue Serialisierungsprogramm" bezieht sich auf den Serialisierercode, der in der neuen Version der Anwendung ausgeführt wird.The "new serializer" refers to the serializer code that is executing in the new version of your application. Die "neuen Daten" beziehen sich auf die serialisierte C#-Klasse aus der neuen Version der Anwendung.The "new data" refers to the serialized C# class from the new version of your application.

Die beiden Versionen des Codes und Datenformats müssen aufwärts- und abwärtskompatibel sein.The two versions of code and data format must be both forward and backward compatible. Wenn sie nicht kompatibel sind, kann das parallele Upgrade fehlschlagen, oder es gehen möglicherweise Daten verloren.If they are not compatible, the rolling upgrade may fail or data may be lost. Das parallele Upgrade kann fehlschlagen, weil der Code oder das Serialisierungsprogramm Ausnahmen oder Fehler ausgibt, wenn er oder es auf die andere Version stößt.The rolling upgrade may fail because the code or serializer may throw exceptions or a fault when it encounters the other version. Daten können verloren gehen, wenn beispielsweise eine neue Eigenschaft hinzugefügt wurde, das alte Serialisierungsprogramm sie jedoch während der Deserialisierung verwirft.Data may be lost if, for example, a new property was added but the old serializer discards it during deserialization.

Datenverträge sind die empfohlene Lösung zum Sicherstellen der Kompatibilität Ihrer Daten.Data Contract is the recommended solution for ensuring that your data is compatible. Sie verfügen über klar definierte Versionsregeln zum Hinzufügen, Entfernen und Ändern von Feldern.It has well-defined versioning rules for adding, removing, and changing fields. Sie unterstützen außerdem die Behandlung von unbekannten Feldern, die Hookfunktion für den Serialisierungs- und Deserialisierungsvorgang und den Umgang mit der Klassenvererbung.It also has support for dealing with unknown fields, hooking into the serialization and deserialization process, and dealing with class inheritance. Weitere Informationen finden Sie unter Verwenden von Datenverträgen.For more information, see Using Data Contract.

Nächste SchritteNext steps

Ihre Anwendung mit Visual Studio upgraden beschreibt das Upgraden von Anwendungen mit Visual Studio.Upgrading your Application Using Visual Studio walks you through an application upgrade using Visual Studio.

Ihre Anwendung mit PowerShell upgraden beschreibt das Upgraden von Anwendungen mit PowerShell.Upgrading your Application Using Powershell walks you through an application upgrade using PowerShell.

Steuern Sie die Upgrades von Anwendungen mithilfe von Upgradeparametern.Control how your application upgrades by using Upgrade Parameters.

Erfahren Sie, wie Sie erweiterte Funktionen beim Upgrade Ihrer Anwendung nutzen, indem Sie sich mit den weiterführenden Themenbeschäftigen.Learn how to use advanced functionality while upgrading your application by referring to Advanced Topics.

Informationen zum Beheben gängiger Probleme bei Anwendungsupgrades finden Sie in den Anweisungen unter Problembehandlung bei Anwendungsupgrades.Fix common problems in application upgrades by referring to the steps in Troubleshooting Application Upgrades.