Det är lättare att förhindra dubbla databasmigreringar när schemaändringar körs som ett uttryckligt distributionssteg i stället för vid starten av varje appcontainer.
Den förebyggande lösningen är att ge migreringarna en enda ansvarig, en uppsättning autentiseringsuppgifter och en klar signal om slutförande innan nya repliker börjar hantera trafik. Låt webb- och workercontainrar kunna starta om utan behörighet att ändra schemat, låt utrullningen vänta på ett lyckat migreringsjobb och utforma schemaändringarna så att gamla och nya appversioner kan samexistera en kort stund. Då elimineras kapplöpningen i stället för att man bara hoppas att varje replik upptäcker samma migreringshistorik först.
Ta bort migreringskommandon från den normala appstarten
Granska image-entrypointen, Compose-kommandot, workerkommandot, health-wrappern och distributionsskriptet efter automatiska migreringsanrop. Applikationen ska kunna starta om utan att ändra schemat, såvida omstarten inte är det avsiktligt valda migreringssteget.
En distributionsartikel från Octopus hävdar att migreringar behöver en separat livscykel i stället för att kopplas till starten av varje mikrotjänstprocess.
Ha migreringsbinären tillgänglig där den behövs, men anropa den inte både från webbinträdet och från ett separat jobb. En enda tydlig ansvarig är enklare att granska än flera startvägar som alla är beroende av låsning i ramverket.
Kör ett migreringsjobb före distributionen
Skapa ett engångsjobb som använder samma migreringsfiler som releasen och avslutas lyckat först när måldatabasen har nått det förväntade schematillståndet. Låt apputrullningen vara beroende av detta resultat.
En aktuell utrullningsguide visar hur ett jobb körs före utrullningen i stället för att varje replik ska tävla vid starten.
Skala inte migreringsuppgiften på samma sätt som appservicen. Jobbet bör ha en enda exekveringsansvarig per måldatabas, en begränsad tidsgräns, loggar och ett tydligt feltillstånd som blockerar den nya appversionen.
Villkora appstarten med lyckad migrering
Låt nya webb- och workercontainrar vänta tills migreringssteget rapporterar lyckat resultat, men låt inte varje väntande container köra migreringen igen. Beroendet gäller resultatet, inte att schemaändringen ska utföras på nytt.
Andrew Locks distributionsmönster använder appkapslar som väntar på migreringen, medan migreringslogiken förblir centraliserad.
För en mindre hemservermiljö kan samma princip implementeras med en dedikerad Compose-tjänst och ett kontrollerat distributionsskript. Håll mekanismen tillräckligt enkel för att en misslyckad migrering tydligt stoppar utrullningen.
Använd bakåtkompatibla schemaändringar under överlappningen
Rullande distributioner kan tillfälligt köra gamla och nya appversioner mot samma databas. Undvik migreringar som tar bort eller byter namn på ett fält innan den gamla versionen har slutat använda det.
En aktuell guide om migreringar utan driftstopp rekommenderar att bygga ut innan du drar ihop, så att tillägg i schemat införs före destruktiv städning.
Dela vid behov upp stora ändringar i faserna utbyggnad, återfyllnad, växling och sammandragning. Migreringsjobbet bör inte skapa ett schema som bara den nya containern förstår medan gamla repliker fortfarande hanterar förfrågningar.
Håll migreringsuppgifterna utanför appreplikerna
Använd när det är praktiskt möjligt ett konto med behörighet att ändra schemat endast för det tillfälliga migreringssteget. Normala appcontainrar bör ha de mer begränsade läs- och skrivbehörigheter som krävs för applikationsdata.
En Liquibase-artikel om distribution beskriver att databasändringar hör hemma i automatisering med kontrollerad och repeterbar tillämpning av ändringar.
Denna separation minskar risken för att migreringen körs av misstag även om en approcess startas om eller dupliceras. Lagra den upphöjda autentiseringsuppgiften i distributionshemligheternas sökväg i stället för i den vanliga miljön för långvariga tjänster.
Verifiera att utrullningen inte kan tillämpa batchen två gånger
Testa distributionen mot en tillfällig databas eller en återställd ögonblicksbild genom att starta flera apprepliker, starta om dem och köra distributionskommandot igen. Migreringssteget ska rapportera det befintliga schematillståndet utan att ändra det en andra gång.
JetBrains sammanfattar driftregeln som att köra migreringar som ett distributionssteg före den normala appstarten.
Den förebyggande policyn är komplett när omstarter av appen inte kan ändra schemat, när en misslyckad migrering blockerar releasen och när upprepad körning av utrullningen lämnar databasen oförändrad. Den relaterade ZimaSpace-artikeln om felsökning av dubbla migreringar är återställningsvägen om dubbel körning redan har inträffat.
Support och tips
Mer att läsa

Guide till lagring av live-tv-inspelningar för kapacitet, lagringstid och rensning
Mät verkliga inspelningar, reservera marginal, kombinera gränser för ålder och kapacitet och bevisa att det äldsta berättigade programmet tas bort innan lagringen blir full.

Arbetsflöde för återställning av metadata för hemmamedia efter en databasåterställning
Skydda det återställda tillståndet, verifiera medieidentitet och sökvägar och reparera sedan saknade omslagsbilder eller matchningar i ett pilotbibliotek innan omfattande metadataändringar görs.

Kompatibilitetschecklista för Jellyfin-klienter för ljud, video och undertexter
Testa representativa filer med en variabel i taget och notera Direct Play, remuxning, ljudkonvertering, videotranskodning eller fel för varje klient.

