Hoe gegevensserialisatie van invloed is op een toepassingsupgrade

In een rolling toepassingsupgrade wordt de upgrade toegepast op een subset van knooppunten, één upgradedomein tegelijk. Tijdens dit proces bevinden sommige upgradedomeinen zich in de nieuwere versie van uw toepassing en sommige upgradedomeinen in de oudere versie van uw toepassing. Tijdens de implementatie moet de nieuwe versie van uw toepassing de oude versie van uw gegevens kunnen lezen en moet de oude versie van uw toepassing de nieuwe versie van uw gegevens kunnen lezen. Als de gegevensindeling niet compatibel is met vooruit en achteruit, kan de upgrade mislukken of, erger nog, gegevens verloren gaan of beschadigd raken. In dit artikel wordt besproken wat uw gegevensindeling inhoudt en worden aanbevolen procedures geboden om ervoor te zorgen dat uw gegevens compatibel zijn met vooruit en achteruit.

Waaruit bestaat uw gegevensindeling?

In Azure Service Fabric zijn de gegevens die worden bewaard en gerepliceerd afkomstig uit uw C#-klassen. Voor toepassingen die betrouwbare verzamelingen gebruiken, zijn die gegevens de objecten in de betrouwbare woordenlijsten en wachtrijen. Voor toepassingen die Reliable Actors gebruiken, is dat de backingstatus voor de actor. Deze C#-klassen moeten serialiseerbaar zijn om te kunnen worden bewaard en gerepliceerd. Daarom wordt de gegevensindeling gedefinieerd door de velden en eigenschappen die worden geserialiseerd, evenals hoe ze worden geserialiseerd. In een IReliableDictionary<int, MyClass> is de gegevens bijvoorbeeld een geserialiseerd int en een geserialiseerde MyClass.

Codewijzigingen die resulteren in een wijziging in de gegevensindeling

Omdat de gegevensindeling wordt bepaald door C#-klassen, kunnen wijzigingen in de klassen een wijziging in de gegevensindeling veroorzaken. Zorg ervoor dat een rolling upgrade de wijziging van de gegevensindeling kan verwerken. Voorbeelden die wijzigingen in de gegevensindeling kunnen veroorzaken:

  • Velden of eigenschappen toevoegen of verwijderen
  • De naam van velden of eigenschappen wijzigen
  • De typen velden of eigenschappen wijzigen
  • De klassenaam of -naamruimte wijzigen

Gegevenscontract als standaardserialisatiefunctie

De serialisatiefunctie is over het algemeen verantwoordelijk voor het lezen van de gegevens en het deserialiseren ervan in de huidige versie, zelfs als de gegevens een oudere of nieuwere versie hebben. De standaardserialisatiefunctie is de serialisatiefunctie voor gegevenscontracten, die goed gedefinieerde versiebeheerregels heeft. Met Betrouwbare verzamelingen kan de serializer worden overschreven, maar Reliable Actors momenteel niet. De gegevensserialisatiefunctie speelt een belangrijke rol bij het inschakelen van rolling upgrades. De serialisatiefunctie voor gegevenscontracten is de serialisatiefunctie die we aanbevelen voor Service Fabric-toepassingen.

Hoe de gegevensindeling van invloed is op een rolling upgrade

Tijdens een rolling upgrade zijn er twee hoofdscenario's waarin de serializer een oudere of nieuwere versie van uw gegevens kan tegenkomen:

  1. Nadat een knooppunt is bijgewerkt en een back-up is gestart, worden met de nieuwe serializer de gegevens geladen die door de oude versie op schijf zijn opgeslagen.
  2. Tijdens de rolling upgrade bevat het cluster een combinatie van de oude en nieuwe versie van uw code. Omdat replica's mogelijk in verschillende upgradedomeinen worden geplaatst en replica's gegevens naar elkaar verzenden, kan de nieuwe en/of oude versie van uw gegevens worden aangetroffen door de nieuwe en/of oude versie van uw serializer.

Notitie

De 'nieuwe versie' en 'oude versie' verwijzen hier naar de versie van uw code die wordt uitgevoerd. De 'nieuwe serializer' verwijst naar de serialisatiecode die wordt uitgevoerd in de nieuwe versie van uw toepassing. De 'nieuwe gegevens' verwijst naar de geserialiseerde C#-klasse van de nieuwe versie van uw toepassing.

De twee versies van code en gegevensindeling moeten zowel voorwaarts als achterwaarts compatibel zijn. Als ze niet compatibel zijn, kan de rolling upgrade mislukken of gegevens verloren gaan. De rolling upgrade kan mislukken omdat de code of serializer uitzonderingen of een fout veroorzaakt wanneer de andere versie wordt aangevallen. Gegevens kunnen verloren gaan als er bijvoorbeeld een nieuwe eigenschap is toegevoegd, maar de oude serializer deze tijdens deserialisatie verwijdert.

Data Contract is de aanbevolen oplossing om ervoor te zorgen dat uw gegevens compatibel zijn. Het bevat goed gedefinieerde versiebeheerregels voor het toevoegen, verwijderen en wijzigen van velden. Het biedt ook ondersteuning voor het omgaan met onbekende velden, het koppelen aan het serialisatie- en deserialisatieproces en het omgaan met klasse-overname. Zie Data Contract gebruiken voor meer informatie.

Volgende stappen

Uw toepassing upgraden met Visual Studio helpt u bij het uitvoeren van een toepassingsupgrade met behulp van Visual Studio.

Bij het upgraden van uw toepassing met behulp van PowerShell wordt u begeleid bij het uitvoeren van een toepassingsupgrade met behulp van PowerShell.

Bepaal hoe uw toepassing wordt bijgewerkt met behulp van upgradeparameters.

Raadpleeg Geavanceerde onderwerpen voor meer informatie over het gebruik van geavanceerde functionaliteit tijdens het upgraden van uw toepassing.

Los veelvoorkomende problemen bij toepassingsupgrades op door te verwijzen naar de stappen in Problemen met toepassingsupgrades oplossen.