Dela via


Hur data serialisering påverkar en programuppgradering

I en löpande programuppgradering tillämpas uppgraderingen på en delmängd noder, en uppgraderingsdomän i taget. Under den här processen finns vissa uppgraderingsdomäner på den nyare versionen av ditt program och vissa uppgraderingsdomäner finns på den äldre versionen av ditt program. Under distributionen måste den nya versionen av programmet kunna läsa den gamla versionen av dina data, och den gamla versionen av programmet måste kunna läsa den nya versionen av dina data. Om dataformatet inte är framåt- och bakåtkompatibelt kan uppgraderingen misslyckas, eller ännu värre, data kan gå förlorade eller skadas. Den här artikeln beskriver vad som utgör ditt dataformat och erbjuder metodtips för att säkerställa att dina data är framåt och bakåtkompatibla.

Vad utgör ditt dataformat?

I Azure Service Fabric kommer data som sparas och replikeras från dina C#-klasser. För program som använder Reliable Collections är dessa data objekten i tillförlitliga ordlistor och köer. För program som använder Reliable Actors är det stödtillståndet för aktören. Dessa C#-klasser måste vara serialiserbara för att bevaras och replikeras. Därför definieras dataformatet av fälten och egenskaperna som serialiseras, samt hur de serialiseras. I en IReliableDictionary<int, MyClass> data är till exempel en serialiserad int och serialiserad MyClass.

Kodändringar som resulterar i en ändring i dataformat

Eftersom dataformatet bestäms av C#-klasser kan ändringar i klasserna orsaka en ändring av dataformatet. Se till att en löpande uppgradering kan hantera ändringen av dataformatet. Exempel som kan orsaka ändringar i dataformat:

  • Lägga till eller ta bort fält eller egenskaper
  • Byta namn på fält eller egenskaper
  • Ändra typer av fält eller egenskaper
  • Ändra klassnamn eller namnområde

Datakontrakt som standard serialiserare

Serialiseraren ansvarar vanligtvis för att läsa data och deserialisera dem till den aktuella versionen, även om data är i en äldre eller nyare version. Standard serialiseraren är Serialiseraren för datakontrakt, som har väldefinierade versionsregler. Tillförlitliga samlingar tillåter att serialiseraren åsidosättas, men Reliable Actors gör det för närvarande inte. Dataserialiseraren spelar en viktig roll när det gäller att aktivera löpande uppgraderingar. Serialiseraren för datakontrakt är serialiseraren som vi rekommenderar för Service Fabric-program.

Hur dataformatet påverkar en löpande uppgradering

Under en löpande uppgradering finns det två huvudsakliga scenarier där serialiseraren kan stöta på en äldre eller nyare version av dina data:

  1. När en nod har uppgraderats och startar säkerhetskopieringen läser den nya serialiseraren in de data som har sparats på disken av den gamla versionen.
  2. Under den löpande uppgraderingen innehåller klustret en blandning av de gamla och nya versionerna av koden. Eftersom repliker kan placeras i olika uppgraderingsdomäner och repliker skickar data till varandra, kan den nya och/eller gamla versionen av dina data påträffas av den nya och/eller gamla versionen av serialiseraren.

Kommentar

Den "nya versionen" och "gamla versionen" här refererar till den version av koden som körs. Den "nya serialiseraren" refererar till serialiserarkoden som körs i den nya versionen av ditt program. "Nya data" refererar till den serialiserade C#-klassen från den nya versionen av ditt program.

De två versionerna av kod och dataformat måste vara både framåt- och bakåtkompatibla. Om de inte är kompatibla kan den löpande uppgraderingen misslyckas eller så kan data gå förlorade. Den löpande uppgraderingen kan misslyckas eftersom koden eller serialiseraren kan utlösa undantag eller ett fel när den påträffar den andra versionen. Data kan gå förlorade om till exempel en ny egenskap har lagts till, men den gamla serialiseraren tar bort dem under deserialiseringen.

Data Contract är den rekommenderade lösningen för att säkerställa att dina data är kompatibla. Den har väldefinierade versionsregler för att lägga till, ta bort och ändra fält. Det har också stöd för att hantera okända fält, ansluta till serialiserings- och deserialiseringsprocessen och hantera klassarv. Mer information finns i Använda datakontrakt.

Nästa steg

När du uppgraderar ditt program med Visual Studio får du hjälp med en programuppgradering med Hjälp av Visual Studio.

När du uppgraderar ditt program med PowerShell får du hjälp med en programuppgradering med hjälp av PowerShell.

Kontrollera hur programmet uppgraderas med hjälp av uppgraderingsparametrar.

Lär dig hur du använder avancerade funktioner när du uppgraderar ditt program genom att referera till Avancerade ämnen.

Åtgärda vanliga problem i programuppgraderingar genom att referera till stegen i Felsöka programuppgraderingar.