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 bevinden zich 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, gegevens verloren gaan of beschadigd zijn. In dit artikel wordt besproken wat uw gegevensindeling is en biedt aanbevolen procedures om ervoor te zorgen dat uw gegevens compatibel zijn met vooruit en achteruit.
Wat is de indeling van uw gegevens?
In Azure Service Fabric zijn de gegevens die behouden en gerepliceerd zijn afkomstig van 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 back-upstatus voor de actor. Deze C#-klassen moeten serialiseerbaar zijn om te worden bewaard en gerepliceerd. Daarom wordt de gegevensindeling gedefinieerd door de velden en eigenschappen die worden geserialiseerd en hoe ze worden geserialiseerd. In een IReliableDictionary<int, MyClass>
gegevens zijn bijvoorbeeld een geserialiseerde int
en 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 afhandelen. Voorbeelden die kunnen leiden tot wijzigingen in de gegevensindeling:
- Velden of eigenschappen toevoegen of verwijderen
- Naam van velden of eigenschappen wijzigen
- De typen velden of eigenschappen wijzigen
- De klassenaam of naamruimte wijzigen
Gegevenscontract als standaardserialisatie
De serializer is over het algemeen verantwoordelijk voor het lezen van de gegevens en het deserialiseren ervan in de huidige versie, zelfs als de gegevens zich in een oudere of nieuwere versie bevindt. De standaardserialisatiefunctie is de Serializer van het Data Contract, met goed gedefinieerde versiebeheerregels. Met betrouwbare verzamelingen kan de serialisatiefunctie worden overschreven, maar Reliable Actors zijn dat momenteel niet mogelijk. De gegevensserialisatie speelt een belangrijke rol bij het inschakelen van rolling upgrades. De Data Contract Serializer 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 waarbij de serializer een oudere of nieuwere versie van uw gegevens kan tegenkomen:
- Nadat een knooppunt is bijgewerkt en er een back-up van wordt gemaakt, worden met de nieuwe serializer de gegevens geladen die door de oude versie op de schijf zijn opgeslagen.
- Tijdens de rolling upgrade bevat het cluster een combinatie van de oude en nieuwe versies van uw code. Omdat replica's in verschillende upgradedomeinen kunnen worden geplaatst en replica's gegevens naar elkaar verzenden, kunnen 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 uit de nieuwe versie van uw toepassing.
De twee versies van code en gegevensindeling moeten zowel vooruit als achterwaarts compatibel zijn. Als ze niet compatibel zijn, kan de rolling upgrade mislukken of gaan gegevens verloren. De rolling upgrade kan mislukken omdat de code of serializer uitzonderingen of een fout kan genereren wanneer deze de andere versie tegenkomt. Gegevens kunnen verloren gaan als er bijvoorbeeld een nieuwe eigenschap is toegevoegd, maar de oude serializer deze tijdens deserialisatie verwijdert.
Gegevenscontract 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 de overname van klassen. Zie Gegevenscontract gebruiken voor meer informatie.
Volgende stappen
Als u uw toepassing bijwerken met Visual Studio , wordt u begeleid bij het uitvoeren van een toepassingsupgrade met behulp van Visual Studio.
Als u uw toepassing bijwerkt met Behulp van PowerShell , wordt u begeleid bij het uitvoeren van een toepassingsupgrade met behulp van PowerShell.
Bepalen hoe uw toepassing wordt bijgewerkt met behulp van upgradeparameters.
Meer informatie over het gebruik van geavanceerde functionaliteit tijdens het upgraden van uw toepassing door te verwijzen naar Geavanceerde onderwerpen.
Los veelvoorkomende problemen in toepassingsupgrades op door te verwijzen naar de stappen in Het oplossen van problemen met toepassingsupgrades.