Come la serializzazione dei dati influenzi l’aggiornamento di un’applicazioneHow data serialization affects an application upgrade

In un aggiornamento in sequenza di un'applicazionel'aggiornamento viene applicato a un subset di nodi, procedendo con un dominio di aggiornamento per volta.In a rolling application upgrade, the upgrade is applied to a subset of nodes, one upgrade domain at a time. Durante questo processo, alcuni domini di aggiornamento si trovano con la versione dell'applicazione più recente e altri con quella meno recente.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. Nella fase di distribuzione, la versione dell'applicazione più recente deve essere in grado di leggere la versione dei dati meno recente e viceversa.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. Se il formato dei dati non è compatibile con le versioni successive e precedenti, è possibile che l'aggiornamento abbia esito negativo o, peggio ancora, che i dati vengano persi o danneggiati.If the data format is not forward and backward compatible, the upgrade may fail, or worse, data may be lost or corrupted. Questo articolo illustra come è costituito il formato dei dati e riporta le procedure consigliate per garantire che i dati siano compatibili con le versioni successive e precedenti.This article discusses what constitutes your data format and offers best practices for ensuring that your data is forward and backward compatible.

Come è costituito il formato dei datiWhat makes up your data format?

In Service Fabric di Azure, i dati persistenti e replicati provengono dalle classi C#.In Azure Service Fabric, the data that is persisted and replicated comes from your C# classes. Questo vale per le applicazioni che usano Reliable Collections, i cui dati sono gli oggetti nei dizionari e nelle code affidabili,For applications that use Reliable Collections, that data is the objects in the reliable dictionaries and queues. e per le applicazioni che usano Reliable Actors, ovvero lo stato sottostante dell'attore.For applications that use Reliable Actors, that is the backing state for the actor. Queste classi C# devono essere serializzabili per essere persistenti e replicate.These C# classes must be serializable to be persisted and replicated. Il formato dei dati pertanto viene definito dai campi e dalle proprietà che vengono serializzati, nonché dal modo in cui vengono serializzati.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> ad esempio i dati sono costituiti da elementi int e MyClass serializzati.For example, in an IReliableDictionary<int, MyClass> the data is a serialized int and a serialized MyClass.

Il codice modifica quel risultato trasformandolo in una modifica del formato dei datiCode changes that result in a data format change

Poiché il formato dei dati è determinato da classi C#, le modifiche delle classi possono comportare una modifica del formato dei dati.Since the data format is determined by C# classes, changes to the classes may cause a data format change. Procedere con cautela per assicurarsi che un aggiornamento in sequenza possa gestire la modifica del formato dei dati.Care must be taken to ensure that a rolling upgrade can handle the data format change. Esempi di operazioni che possono comportare modifiche del formato dei dati:Examples that may cause data format changes:

  • Aggiunta o rimozione di campi o proprietàAdding or removing fields or properties
  • Ridenominazione di campi o proprietàRenaming fields or properties
  • Modifica dei tipi di campi o proprietàChanging the types of fields or properties
  • Modifica dello spazio dei nomi o del nome di una classeChanging the class name or namespace

Il Contratto dati è il serializzatore predefinitoData Contract as the default serializer

Il serializzatore in genere è responsabile della lettura dei dati e della deserializzazione dei dati nella versione corrente, anche se sono in una versione precedente o più recente .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. Il serializzatore predefinito è DataContractSerializer, che include regole ben definite di controllo delle versioni.The default serializer is the Data Contract serializer, which has well-defined versioning rules. Reliable Collections consente l'override del serializzatore, mentre Reliable Actors attualmente non consente questa operazione.Reliable Collections allow the serializer to be overridden, but Reliable Actors currently do not. Il serializzatore di dati svolge un ruolo importante per l'abilitazione degli aggiornamenti in sequenza.The data serializer plays an important role in enabling rolling upgrades. Data Contract Serializer è il serializzatore consigliato per le applicazioni Service Fabric.The Data Contract serializer is the serializer that we recommend for Service Fabric applications.

Importanza del formato dei dati nell'aggiornamento in sequenzaHow the data format affects a rolling upgrade

Durante un aggiornamento in sequenza esistono due scenari principali in cui è possibile che il serializzatore rilevi una versione dei dati precedente o più recente :During a rolling upgrade, there are two main scenarios where the serializer may encounter an older or newer version of your data:

  1. Dopo l'aggiornamento e il riavvio di un nodo, il nuovo serializzatore caricherà sul disco i dati persistenti della versione precedente.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. Durante l'aggiornamento in sequenza, il cluster conterrà una combinazione di versioni del codice precedenti e più recenti.During the rolling upgrade, the cluster will contain a mix of the old and new versions of your code. Poiché le repliche possono essere posizionate in domini di aggiornamento diversi, e poiché le repliche si inviano dati tra loro, è possibile che sia la versione nuova che quella precedente del serializzatore rilevi sia la nuova versione dei dati che quella precedente.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.

Nota

Con "nuova versione" e "versione precedente" si intende la versione del codice in esecuzione.The "new version" and "old version" here refer to the version of your code that is running. Con "nuovo serializzatore" si intende il codice del serializzatore in esecuzione nella nuova versione dell'applicazione.The "new serializer" refers to the serializer code that is executing in the new version of your application. Con "nuovi dati" si intende la classe C# serializzata della nuova versione dell'applicazione.The "new data" refers to the serialized C# class from the new version of your application.

Le due versioni di codice e formato dei dati devono essere entrambe compatibili con le versioni successive e precedenti.The two versions of code and data format must be both forward and backward compatible. In caso contrario, è possibile che l'aggiornamento in sequenza abbia esito negativo o che si verifichi una perdita di dati.If they are not compatible, the rolling upgrade may fail or data may be lost. L'aggiornamento in sequenza può avere esito negativo perché è possibile che il codice o il serializzatore generi eccezioni o errori quando rileva l'altra versione.The rolling upgrade may fail because the code or serializer may throw exceptions or a fault when it encounters the other version. È possibile che si verifichi una perdita di dati se ad esempio è stata aggiunta una nuova proprietà ma il serializzatore precedente la ignora durante la deserializzazione.Data may be lost if, for example, a new property was added but the old serializer discards it during deserialization.

Il contratto dati è la soluzione consigliata per garantire la compatibilità dei dati.Data Contract is the recommended solution for ensuring that your data is compatible. Include regole ben definite di controllo delle versioni per l'aggiunta, la rimozione e la modifica di campi.It has well-defined versioning rules for adding, removing, and changing fields. Supporta inoltre l'eredità delle classi, la gestione dei campi sconosciuti e l'uso di hook nel processo di serializzazione e deserializzazione.It also has support for dealing with unknown fields, hooking into the serialization and deserialization process, and dealing with class inheritance. Per altre informazioni, vedere Utilizzo di contratti dati.For more information, see Using Data Contract.

Passaggi successiviNext steps

Esercitazione sull'aggiornamento di un'applicazione di Service Fabric tramite Visual Studio descrive la procedura di aggiornamento di un'applicazione con Visual Studio.Upgrading your Application Using Visual Studio walks you through an application upgrade using Visual Studio.

Aggiornamento di un'applicazione di Service Fabric mediante PowerShell descrive la procedura di aggiornamento di un'applicazione tramite PowerShell.Upgrading your Application Using Powershell walks you through an application upgrade using PowerShell.

Controllare l’aggiornamento dell'applicazione tramite Parametri di aggiornamento.Control how your application upgrades by using Upgrade Parameters.

Informazioni su come usare funzionalità avanzate durante l'aggiornamento dell'applicazione facendo riferimento ad Argomenti avanzati.Learn how to use advanced functionality while upgrading your application by referring to Advanced Topics.

Risolvere problemi comuni negli aggiornamenti dell'applicazione facendo riferimento ai passaggi elencati in Risoluzione dei problemi relativi agli aggiornamenti dell'applicazione .Fix common problems in application upgrades by referring to the steps in Troubleshooting Application Upgrades .