Aggiornamento di un'applicazione di Service Fabric: argomenti avanzatiService Fabric application upgrade: advanced topics

Aggiunta o rimozione di tipi di servizio durante l'aggiornamento di un'applicazioneAdding or removing service types during an application upgrade

Se si aggiunge un nuovo tipo di servizio a un'applicazione pubblicata nel corso di un aggiornamento, il nuovo tipo di servizio viene aggiunto all'applicazione distribuita.If a new service type is added to a published application as part of an upgrade, then the new service type is added to the deployed application. Tale aggiornamento non influisce sulle istanze del servizio che facevano già parte dell'applicazione, ma è necessario creare un'istanza del tipo di servizio che è stato aggiunto per consentire l'attivazione del nuovo tipo di servizio (vedere New-ServiceFabricService).Such an upgrade does not affect any of the service instances that were already part of the application, but an instance of the service type that was added must be created for the new service type to be active (see New-ServiceFabricService).

Analogamente, i tipi di servizio possono essere rimossi da un'applicazione durante un aggiornamento.Similarly, service types can be removed from an application as part of an upgrade. Tuttavia, prima di procedere con l'aggiornamento è necessario rimuovere tutte le istanze del tipo di servizio da rimuovere (vedere Remove-ServiceFabricService).However, all service instances of the to-be-removed service type must be removed before proceeding with the upgrade (see Remove-ServiceFabricService).

Modalità di aggiornamento manualeManual upgrade mode

Nota

Per tutti gli aggiornamenti di Service Fabric è consigliabile usare la modalità di aggiornamento Monitored.The Monitored upgrade mode is recommended for all Service Fabric upgrades. La modalità di aggiornamentoUnmonitoredManual deve essere presa in considerazione solo per gli aggiornamenti non riusciti e sospesi.The UnmonitoredManual upgrade mode should only be considered for failed or suspended upgrades.

In modalità Monitored Service Fabric applica criteri specifici per assicurare l'integrità dell'applicazione durante l'avanzamento dell'aggiornamento.In Monitored mode, Service Fabric applies health policies to ensure that the application is healthy as the upgrade progresses. Se i criteri di integrità non vengono rispettati, l'aggiornamento viene sospeso oppure viene eseguito il rollback automatico dell'operazione, a seconda dell'opzione specificata in FailureAction.If health policies are violated, then the upgrade is either suspended or automatically rolled back depending on the specified FailureAction.

In modalità UnmonitoredManual l'amministratore dell'applicazione ha il controllo completo sull'avanzamento dell'aggiornamento.In UnmonitoredManual mode, the application administrator has total control over the progression of the upgrade. Questa modalità è utile quando si applicano criteri di valutazione dell'integrità personalizzati o quando si eseguono aggiornamenti non convenzionali per escludere completamente il monitoraggio dello stato (ad esempio, l'applicazione ha già perso dati).This mode is useful when applying custom health evaluation policies or performing non-conventional upgrades to bypass health monitoring completely (e.g. the application is already in data loss). Un aggiornamento in esecuzione in questa modalità viene sospeso automaticamente al termine di ogni UD e deve essere ripreso in modo esplicito usando Resume-ServiceFabricApplicationUpgrade.An upgrade running in this mode will suspend itself after completing each UD and must be explicitly resumed using Resume-ServiceFabricApplicationUpgrade. Quando un aggiornamento sospeso è pronto per essere ripreso dall'utente, lo stato corrispondente sarà RollforwardPending (vedere UpgradeState).When an upgrade is suspended and ready to be resumed by the user, its upgrade state will show RollforwardPending (see UpgradeState).

Infine, la modalità UnmonitoredAuto è utile per l'esecuzione di iterazioni di aggiornamento rapide durante lo sviluppo o il test del servizio, poiché non è richiesto alcun input da parte dell'utente e non viene valutato alcun criterio di integrità dell'applicazione.Finally, the UnmonitoredAuto mode is useful for performing fast upgrade iterations during service development or testing since no user input is required and no application health policies are evaluated.

Aggiornare con un pacchetto DiffUpgrade with a diff package

Anziché con il provisioning di un pacchetto dell'applicazione completo, gli aggiornamenti possono essere eseguiti anche con il provisioning di pacchetti diff che contengono solo i pacchetti di codice/configurazione/dati aggiornati insieme al manifesto completo dell'applicazione e ai manifesti completi del servizio.Instead of provisioning a complete application package, upgrades can also be performed by provisioning diff packages that contain only the updated code/config/data packages along with the complete application manifest and complete service manifests. I pacchetti dell'applicazione completi sono necessari solo per l'installazione iniziale di un'applicazione nel cluster.Complete application packages are only required for the initial installation of an application to the cluster. Gli aggiornamenti successivi possono essere eseguiti da pacchetti dell'applicazione completi o da pacchetti diff.Subsequent upgrades can either be from complete application packages or diff packages.

Qualsiasi riferimento nel manifesto dell'applicazione o nei manifesti del servizio di un pacchetto diff che non è presente nel pacchetto dell'applicazione viene automaticamente sostituito con la versione di cui è stato eseguito il provisioning.Any reference in the application manifest or service manifests of a diff package that can't be found in the application package is automatically replaced with the currently provisioned version.

Di seguito sono indicati gli scenari adatti per l'uso di un pacchetto diff:Scenarios for using a diff package are:

  • Quando si ha un pacchetto dell'applicazione di grandi dimensioni che fa riferimento a più file manifesto del servizio e/o a più pacchetti di codice, configurazione o dati.When you have a large application package that references several service manifest files and/or several code packages, config packages, or data packages.
  • Quando si ha un sistema di distribuzione che genera il layout della build direttamente dal processo di compilazione dell'applicazione.When you have a deployment system that generates the build layout directly from your application build process. In questo caso, anche se il codice è rimasto invariato, i nuovi assembly compilati avranno un checksum diverso.In this case, even though the code hasn't changed, newly built assemblies get a different checksum. L'uso del pacchetto applicazione completo richiederebbe l'aggiornamento della versione in tutti i pacchetti di codice.Using a full application package would require you to update the version on all code packages. Usando un pacchetto Diff invece è necessario fornire soltanto i file che sono stati modificati e i file manifesto in cui è cambiata la versione.Using a diff package, you only provide the files that changed and the manifest files where the version has changed.

Quando si aggiorna un'applicazione tramite Visual Studio, viene pubblicato un pacchetto diff automaticamente.When an application is upgraded using Visual Studio, a diff package is published automatically. Per creare un pacchetto diff manualmente, è necessario aggiornare il manifesto dell'applicazione e i manifesti del servizio, ma solo i pacchetti modificati devono essere inclusi nel pacchetto finale dell'applicazione.To create a diff package manually, the application manifest and the service manifests must be updated, but only the changed packages should be included in the final application package.

Si supponga, ad esempio, di iniziare con la seguente applicazione (vengono specificati i numeri di versione per facilitare la comprensione):For example, let's start with the following application (version numbers provided for ease of understanding):

app1           1.0.0
  service1     1.0.0
    code       1.0.0
    config     1.0.0
  service2     1.0.0
    code       1.0.0
    config     1.0.0

A questo punto, si supponga di voler aggiornare solo il pacchetto di codice di service1 usando un pacchetto diff.Let's assume you wanted to update only the code package of service1 using a diff package. L'applicazione aggiornata presenta le modifiche di versione seguenti:Your updated application has the following version changes:

app1           2.0.0      <-- new version
  service1     2.0.0      <-- new version
    code       2.0.0      <-- new version
    config     1.0.0
  service2     1.0.0
    code       1.0.0
    config     1.0.0

In questo caso, il manifesto dell'applicazione viene aggiornato alla versione 2.0.0 e il manifesto del servizio per service1 viene aggiornato in modo da riflettere l'aggiornamento del pacchetto di codice.In this case, you update the application manifest to 2.0.0 and the service manifest for service1 to reflect the code package update. La cartella per il pacchetto dell'applicazione sarebbe simile alla seguente:The folder for your application package would have the following structure:

app1/
  service1/
    code/

In altre parole, si crea un pacchetto completo dell'applicazione nel modo consueto e quindi si rimuovono le cartelle dei pacchetti di codice/configurazione/dati delle quali non è stata modificata la versione.In other words, create a complete application package normally, then remove any code/config/data package folders for which the version has not changed.

Rollback degli aggiornamenti dell'applicazioneRolling back application upgrades

Mentre il roll forward degli aggiornamenti può essere eseguito in tre modalità (Monitored, UnmonitoredAuto o UnmonitoredManual), il rollback può essere eseguito solo in modalità UnmonitoredAuto o UnmonitoredManual.While upgrades can be rolled forward in one of three modes (Monitored, UnmonitoredAuto, or UnmonitoredManual), they can only be rolled back in either UnmonitoredAuto or UnmonitoredManual mode. Il rollback in modalità UnmonitoredAuto funziona esattamente come il roll forward, tranne per il fatto che il valore predefinito di UpgradeReplicaSetCheckTimeout è diverso. Vedere Parametri di aggiornamento di un'applicazione.Rolling back in UnmonitoredAuto mode works the same way as rolling forward with the exception that the default value of UpgradeReplicaSetCheckTimeout is different - see Application Upgrade Parameters. Il rollback in modalità UnmonitoredManual funziona esattamente come il roll forward. Il rollback viene sospeso automaticamente al termine di ogni UD e, per continuare, deve essere ripreso in modo esplicito usando Resume-ServiceFabricApplicationUpgrade.Rolling back in UnmonitoredManual mode works the same way as rolling forward - the rollback will suspend itself after completing each UD and must be explicitly resumed using Resume-ServiceFabricApplicationUpgrade to continue with the rollback.

Le operazioni di rollback possono essere attivate automaticamente quando non vengono rispettati i criteri di integrità di un aggiornamento in modalità Monitored con FailureAction impostato su Rollback (vedere Parametri di aggiornamento di un'applicazione) oppure in modo esplicito usando Start-ServiceFabricApplicationRollback.Rollbacks can be triggered automatically when the health policies of an upgrade in Monitored mode with a FailureAction of Rollback are violated (see Application Upgrade Parameters) or explicitly using Start-ServiceFabricApplicationRollback.

Durante il rollback, il valore di UpgradeReplicaSetCheckTimeout e la modalità possono essere comunque modificati in qualsiasi momento usando Update-ServiceFabricApplicationUpgrade.During rollback, the value of UpgradeReplicaSetCheckTimeout and the mode can still be changed at any time using Update-ServiceFabricApplicationUpgrade.

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.

Rendere compatibili gli aggiornamenti dell'applicazione imparando a usare Serializzazione dei dati.Make your application upgrades compatible by learning how to use Data Serialization.

Per informazioni su come risolvere problemi comuni negli aggiornamenti dell'applicazione, vedere i passaggi indicati in Risoluzione dei problemi relativi agli aggiornamenti dell'applicazione.Fix common problems in application upgrades by referring to the steps in Troubleshooting Application Upgrades.