Det händer i bakgrunden när din app uppdateras mitt i natten

Du lägger ifrån dig telefonen på natten med tjugo appar installerade och vaknar med tjugo appar som är lite annorlunda än dagen innan. Inga varningar, inga avbrott, ingen åtgärd från din sida. Det känns självklart efter några år med smartphones – men processen bakom är allt annat än enkel. En appuppdatering som rullas ut till hundra miljoner enheter simultaneously är en av de mest komplexa logistiska och tekniska operationer som sker i den digitala vardagen, och den involverar servrar, kryptering, differentiell nedladdning och noggrann orkestrering som de flesta aldrig behöver tänka på.

Hur din enhet vet att en uppdatering finns – och beslutar sig för att hämta den

Det finns en fråga gömd i något vi aldrig tänker på: hur vet egentligen din telefon att en uppdatering finns tillgänglig? Ingen knackade på skärmen och berättade det. Ingen mänsklig hand pekade ut just din enhet ur hundra miljoner andra. Svaret ligger i ett system av regelbunden kommunikation mellan din enhet och appbutikens servrar – en tyst och kontinuerlig dialog som pågår i bakgrunden utan att du märker den.

Incheckning och polling – enhetens sätt att lyssna

Ungefär som en anställd som med jämna mellanrum tittar in på sin inkorg för att se om något nytt kommit in, checkar din telefon regelbundet in mot Apples eller Googles servrar för att fråga om något förändrats sedan sist. Den här tekniken kallas polling och är en av grundprinciperna bakom hur mobila enheter håller sig uppdaterade utan att hålla en konstant öppen förbindelse till internet, vilket skulle tära hårt på batteriet.

Intervallet för den här incheckningen styrs av operativsystemet och varierar beroende på hur länge sedan appen senast användes, hur mycket batteri som finns kvar och om enheten är ansluten till WiFi eller mobildata. En app du använder dagligen checkas av oftare än en du inte öppnat på månader – operativsystemet prioriterar aktivt använda appar för att hålla dem aktuella utan att slösa resurser på appar du kanske inte bryr dig om längre.

Mjukvara & Program

Versionsnumret som nyckel

När din enhet checkar in skickar den med information om vilken version av varje installerad app den för närvarande kör. Servern på andra sidan jämför detta med den senaste tillgängliga versionen och svarar antingen att allt är aktuellt eller att en nyare version finns att hämta. Det är ett remarkabelt enkelt system i sin grundform – en jämförelse av två versionsnummer – men det omges av ett betydligt mer komplext lager av logik som avgör om just din enhet ska erbjudas uppdateringen just nu.

Utrullning i vågor – varför alla inte uppdateras samtidigt

Ett av de mest intressanta och minst kända inslagen i modern appuppdatering är att apputvecklare sällan rullar ut en ny version till alla användare simultaneously. I stället används en teknik kallad gradvis utrullning eller staged rollout, där uppdateringen inledningsvis bara skickas till en liten andel av användarna – kanske en till fem procent – och sedan gradvis utökas om inga allvarliga problem upptäcks:

  • En bugg som kraschar appen för en viss typ av enhet upptäcks och stoppas innan den når majoriteten av användarna
  • Serverbelastningen fördelas över tid i stället för att alla hundra miljoner enheter försöker ladda ner samma fil simultaneously
  • Utvecklingsteamet får realtidsdata om hur den nya versionen presterar i verkliga förhållanden innan den når hela användarbasen
  • Uppdateringen kan dras tillbaka och ersättas med en korrigerad version om något oväntat uppstår, utan att majoriteten av användarna påverkats

Det är ett system som är designat för att skydda dig som användare från att vara försökskanin – men som paradoxalt nog innebär att du ibland är just det, om du råkar tillhöra den första vågen av mottagare.

Vad som faktiskt laddas ner – och varför det sällan är hela appen

När din telefon bestämt sig för att hämta en uppdatering uppstår nästa fråga: vad är det egentligen som laddas ner? Den intuitiva föreställningen är att hela appen ersätts med en ny version – att din telefon raderar det gamla och hämtar hem något helt nytt. Den föreställningen är i de flesta fall felaktig, och förståelsen av varför avslöjar något elegant i hur modern uppdateringsteknik är konstruerad.

Differentiella uppdateringar – bara det som förändrats

Moderna appbutiker använder en teknik som kallas differentiell uppdatering eller delta-uppdatering. I stället för att skicka hela appen på nytt analyserar systemet skillnaden mellan den version du har installerad och den nya versionen, och skickar bara de delar som faktiskt förändrats. Om en app på hundra megabyte fått en buggfix som påverkar två procent av koden behöver din enhet i teorin bara ladda ner två megabyte, inte hundra.

Det här låter enkelt men är tekniskt sofistikerat i sin implementering. Servern måste i förväg beräkna och lagra differensen mellan varje relevant versionspar – inte bara mellan den senaste och näst senaste versionen, utan potentiellt mellan den senaste och flera äldre versioner, eftersom olika användare kan ha uppdaterat vid olika tillfällen och därmed köra olika gamla versioner. För en populär app med hundra miljoner användare spridda över ett dussintal versioner är det en beräkningsintensiv och lagringskrävande operation som sker på appbutikens servrar långt innan din telefon ens vet att uppdateringen finns.

Mjukvara & Program

Kryptering och verifiering som säkerhetsnät

Innan din enhet börjar installera det nedladdade paketet sker något som är lätt att ta för givet men som är avgörande för säkerheten: verifiering. Det nedladdade paketet kontrolleras mot en kryptografisk signatur som appens utvecklare skapade när de laddade upp den nya versionen. Signaturen fungerar som ett digitalt fingeravtryck – om en enda bit i paketet förändrats under nedladdningen, oavsett om det beror på ett nätverksfel eller ett medvetet manipulationsförsök, stämmer fingeravtrycket inte längre och installationen avbryts.

Det är ett system som skyddar mot en annars allvarlig sårbarhet: om vem som helst kunde manipulera ett appuppdateringspaket under överföringen skulle det vara ett effektivt sätt att installera skadlig kod på miljontals enheter simultaneously. Kryptografisk signaturverifiering gör det i praktiken omöjligt, eftersom angriparen skulle behöva tillgång till utvecklarens privata signeringsnyckel för att skapa ett paket som passerar kontrollen.

Villkoren som styr när nedladdningen sker

Din enhet hämtar sällan en uppdatering vid exakt det ögonblick den blir tillgänglig. Operativsystemet tillämpar ett antal villkor som måste vara uppfyllda innan nedladdningen påbörjas, och dessa villkor är utformade för att minimera påverkan på din upplevelse och dina resurser. WiFi-anslutning är det vanligaste kravet – mobildata sparas för din skull. Batterinivån spelar roll, och laddningsstatus likaså. Många enheter väntar medvetet tills de både är anslutna till laddaren och till WiFi, och sedan väljer ett tillfälle mitt i natten då du sannolikt inte använder telefonen aktivt. Det är ett litet men genomtänkt stycke schemaläggningslogik som ligger bakom den till synes magiska känslan av att alltid vakna med uppdaterade appar.

Installationen som sker medan du sover – och vad som händer om något går fel

Nedladdningen är klar, paketet är verifierat och din telefon ligger på nattduksbordet med skärmen släckt. Nu börjar den del av processen som är mest känslig och mest genomtänkt – själva installationen. Det är ett moment som måste lyckas utan din medverkan, utan möjlighet att fråga om råd och utan att lämna din telefon i ett trasigt tillstånd om något oväntat inträffar.

Atomisk installation – allt eller ingenting

Det grundläggande designkravet på en mobilappinstallation är att den måste vara atomisk, ett begrepp lånat från databasteknik som betyder att operationen antingen genomförs fullständigt eller inte alls. Det får aldrig uppstå ett mellanläge där halva appen är den gamla versionen och halva den nya, eftersom ett sådant tillstånd med stor sannolikhet skulle göra appen oanvändbar och i värsta fall hela telefonen instabil.

För att uppnå detta arbetar operativsystemet med ett system av tillfälliga kataloger och atomiska namnbyten. Den nya versionen installeras i sin helhet på en separat plats i filsystemet medan den gamla versionen fortfarande är intakt och körbar. Först när den nya versionen är fullständigt installerad och verifierad genomförs ett enda snabbt namnbyte som gör den nya versionen till den aktiva – en operation som tar mikrosekunder och som är i praktiken omöjlig att avbryta halvvägs. Den gamla versionen finns kvar en stund till som säkerhetskopia innan den raderas.

Mjukvara & Program

Datamigrering och vad som händer med dina inställningar

En dimension av appuppdateringar som sällan diskuteras är vad som händer med den data appen redan lagrat på din enhet – dina inställningar, inloggningsuppgifter, lokalt cachad information och eventuellt lokalt sparade filer. Den nya versionen av appen måste kunna läsa och använda denna data, även om datastrukturen förändrats mellan versionerna.

Det är utvecklarens ansvar att hantera denna migration, och det görs vanligtvis genom att appen vid sin första uppstart efter en uppdatering kontrollerar vilket versionsschema den lagrade datan följer och vid behov konverterar den till det nya formatet. En välskriven app gör detta omärkligt och snabbt. En sämre skriven app kan i värsta fall förlora lokal data om migrationslogiken är bristfällig – vilket är en av de vanligaste orsakerna till att användare ibland märker att inställningar återställts efter en uppdatering.

När något går fel och telefonen skyddar sig själv

Moderna mobiloperativsystem har flera lager av felhantering inbyggda för att hantera en misslyckad uppdatering. Om installationen avbryts mitt i processen – på grund av att batteriet tar slut, att telefonen startar om oväntat eller att en filskrivning misslyckas – återgår systemet automatiskt till den gamla versionen som fortfarande finns bevarad. Du märker ingenting, och nästa gång systemet försöker installera uppdateringen börjar det om från ett känt fungerande tillstånd.

Det mest sofistikerade skyddet finns på operativsystemnivå snarare än appnivå. Android använder sedan flera år en teknik kallad A/B-partitionering, där telefonen har två kompletta kopior av operativsystemet på separata partitioner. Uppdateringar installeras på den inaktiva partitionen medan du använder telefonen normalt, och vid nästa omstart byter systemet till den uppdaterade partitionen. Om den nya versionen inte startar korrekt återgår telefonen automatiskt till den partition som fungerade. Det är ett elegant system som eliminerar den klassiska risken med telefonuppdateringar – att fastna i en bootloop med en telefon som varken startar eller kan återställas utan teknisk hjälp.

FAQ

Kan en appuppdatering installeras även om jag inte har WiFi?

Vanligtvis inte – operativsystemet kräver som standard WiFi-anslutning innan en uppdatering laddas ner, just för att skydda din mobildata, men inställningen går att ändra manuellt om du föredrar att uppdateringar även sker via mobilnätet.

Vad händer om min telefon stängs av mitt under en appuppdatering?

Ingenting allvarligt – moderna operativsystem behåller den gamla versionen intakt under hela installationsprocessen och återgår automatiskt till den om något avbryts, vilket innebär att du alltid vaknar med en fungerande app oavsett vad som hänt under natten.

Varför har en app ibland förlorat mina inställningar efter en uppdatering?

Det beror nästan alltid på bristfällig migrationslogik i appen – när datastrukturen förändrats mellan versioner är det utvecklarens ansvar att konvertera den gamla datan till det nya formatet, och om den koden är felskriven kan lokalt sparad data i värsta fall gå förlorad.

Fler nyheter