Framework-opgradering, mandag 23/9

Bubbles, FC Sunnyvale Udvikler 23. september 2019, 10:05

Opdatering 17:30

I løbet af dagen har vi af flere omgange sat en server med den nye version ind i rotationen, ventet et par minutter på at der blev indsamlet data fra diverse crashes, og så pillet den ud igen imens vi rettede fejlene. Det har fungeret ret godt, og har forhåbentlig betydet at de fleste af jer ikke har oplevet nogen fejl.

Når vi om lidt holder fyraften, lader vi sitet køre med den gamle version, så vi ikke skal bekymre os om at det hele vælter i løbet af natten. I morgen fortsætter vi hvor vi slap.

Som jeg tidligere har fortalt, så har vi i de seneste mange måneder haft gang i en række store opgaver, som det desværre har været nødvendigt at arbejde på sideløbende.

Serverflytningen i sidste måned var en af disse opgaver, og i løbet af de næste par dage falder endnu en af dem på plads, når vi opgraderer det framework, som spillet er bygget op i. Vi opgraderer fra Ruby 2.3.8 til Ruby 2.4.7, og fra Ruby on Rails 3.2 til Ruby on Rails 4.2. Ruby er programmeringssproget, og Rails er frameworket.

Opgraderingen er vigtig at få gjort færdig af flere årsager.

For det første, så er vores version af frameworket så gammelt at det nu ikke længere får sikkerhedsopdateringer. Det er selvfølgelig ret kritisk at få gjort noget ved.

For det andet, så har vi især i forbindelse med udviklingen af ungdomshold oplevet at det gamle framework har været med til at bremse os, og gjort flere ting mere besværlige at udvikle, end hvis vi havde haft den nyere version.

Og, når vi f.eks skal udrulle en ændring på sitet, så tager det med den gamle version over 20 minutter at pre-compile alle vores stylesheets og andre assets, hvor vi med den nye version kan se at det tager under 1 minut.

Den nye version af frameworket har dog en lang række "breaking changes". Det betyder at vi har skullet lave meget omfattende ændringer i vores egen kode, for at kunne køre på den nye version af frameworket, og opdateringen i dag er resultatet af flere måneders arbejde.

Vi forventer ikke nogen nævneværdig nedetid, men da det er en kæmpestor opdatering, som berører stort set alle dele af spillet, kan det ikke undgås at der vil opstå fejl i de kommende dage.

Hvad gør vi for at mindske fejl?

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 1590 automatiske tests, som tjekker 5060 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 5060 ting, som ikke gør ;)

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. For et par uger siden, satte vi 3 nye web-servere op, som vi har testet den nye version på. Når vi starter udrulningen vil det ske ved at vi først tilføjer 1 af de nye servere 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 kun 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å sætte flere af de nye servere ind i rotationen og pille de gamle ud.

Samme procedure vil vi følge med kampsimulator-serverne, som er 6 separate servere, der deles om opgaverne.