Framework-opgradering

Bubbles, FC Sunnyvale Udvikler 25. januar 2022, 11:11

Som jeg tidligere har fortalt om, er det på tide at vi opgraderer til den nyeste version af vores framework, Ruby on Rails. Det er knap 2 år siden vi sidst opdaterede. Det var i starten af 2020, hvor vi lavede 3 opgraderinger i rap uden at jeg fortalte om det.

Dengang opgraderede vi fra 4.2 til 5.0 - derefter fra 5.0 til 5.1 - og til sidst fra 5.1 til 5.2.

De sidste 2 uger har vi arbejdet på at klargøre opgraderingerne fra 5.2 til 6.0 og fra 6.0 til 6.1.

Når vi opgraderer frameworket er der altid ting, som går i stykker, men vi gør alt vi kan for at fange og rette så mange fejl som muligt før vi lægger det op.

Første sikring mod fejl er vores suite af automatiske tests. Automatiske tests er små stykker kode, som vi selv har skrevet i årenes løb til at teste mange forskellige dele af spillets funktionalitet. Hver test sætter et scenarie op, kører en afgrænset del af koden med disse data, og tjekker så om resultatet er som vi forventer. Med en enkelt kommando, kan vi bede systemet om at køre samtlige tests igennem, og give os en oversigt over hvilke tests, der fejler.

Det er umuligt at teste alt, men vi har indtil videre en samling af 1747 automatiske tests, som tjekker 5402 forskellige ting i koden. Men, selvom alle disse tests lyser grønt, så betyder det ikke at koden er fejlfri - det betyder blot at ud af alle de ting der kan gå galt, så er der i det mindste 5402 ting, som ikke gør ;)

I dag går vi i gang med med at rulle opdateringen fra 5.2 til 6.0 ud.

I vores server-setup har vi 3 mindre web-servere, der ligger bagved en loadbalancer, som fordeler opgaverne. Hver gang du klikker på et link eller udfører en handling, bliver opgaven udført af den webserver, der er mindst belastet.

Dette vil vi udnytte i forbindelse med opdateringen i dag. Vi har sat en enkelt ny server op, som bruger den nye version.

Når vi starter udrulningen vil det ske ved at vi først tilføjer den nye server til loadbalanceren, således at den råder over 3 servere med den gamle version og 1 med den nye. På den måde vil 25% af alle requests, der kommer ind, blive håndteret af serveren med den nye version. Vi kan således indføre den nye version på en mere skånsom måde, og hvis du oplever en fejl, er det muligt at den vil forsvinde hvis du prøver igen og din request bliver håndteret af en af de gamle servere i stedet.

Efterhånden som det ser ud til at der ikke kommer flere fejl, kan vi så rulle den nye version ud på alle servere, inklusiv vores server, der håndterer jobs i baggrunden, og de 5 servere, der håndterer kampsimulering.

Derefter går vi straks i gang med at udrulle opdateringen til 6.1 efter samme procedure. Når det er ovre starter vi arbejdet med at forberede til den endelige opgradering til version 7.0, som udkom her i december.