När krisen kommer

13 March 2020

Häromdagen såg jag Marcus Österbergs tweet om att Folkhälsomyndighetens webbplats har haft svajjig prestanda nu i Covid-19 virusets spår. Det intresserar mig för jag har arbetat med webbplatsers prestanda på olika sätt sedan jag började jobba för 20 år sen. Idag jobbar jag med prestanda på Wikipedia, en av världens 10 mest besökta webbplatser.

Prestanda består av två delar: dels serverprestanda (hur ditt bakomliggande system fungerar med ditt publiceringsverktyg, hur du konfigurerat och satt upp ditt system) och frontendprestanda (hur du byggt sidan med HTML/JavaScript/CSS). Normalt står serverprestandan för 10-20% av slutanvändandarens tid och hur du byggt sidan står för 80-90%.

Idag tänker jag fokusera mest på serverprestanda. Hur ska offentlig sektor förbereda sig för att många användare besöker deras webbplats? När kriser kommer? Jo så här ska du tänka.

Vilken typ av webbplats har du?

När du ska bygga en webbplats för att den ska klara av flera samtidiga användare så finns det två olika vägar att gå beroende på ett krav:

Ska du visa innehåll på din webbplats som är unikt för en användare eller visar du samma innehåll för alla användare?

Webbplatser som visar unikt innehåll är till exempel Skatteverket eller Försäkringskassan när du är inloggad. De som visar samma innehåll är Folkhälsomyndigheten och MSB.

En webbplats med unikt innehåll för användaren

Att visa unikt innehåll ställer höga tekniska krav. Det finns oftast inga färdiga lösningar som du kan använda utan du behöver bygga vissa delar själv. Du kan följa stora företags bästa praxis och du behöver utvecklare med erfarenhet av att byggt liknande webbplatser förut. Att bygga är ett hantverk, det är inget du lär dig i skolan utan du behöver praktiskt ha gjort det många gånger. Du behöver experter.

Här tycker jag vi har lyckats bra, det är sällan vi hör talas om att Skatteverkets webbplats går ner när alla ska deklarera. Bra jobbat!

En webbplats med samma innehåll för alla användarna

Att servera samma innehåll till alla användare är ett användarfall som är supervanligt och som det finns flera generella lösningar för. Om du ska bygga en sån webbplats kan du följa etablerade mönster och använda redan färdiga verktyg.

Det finns två olika vägar att få serverprestanda:

Dessa lösningar ser till att dina användare får konstant prestanda oavsett hur korta/långa texter de ska läsa eller hur många som försöker läsa dina texter samtidigt.

Djupdykning Folkhälsomyndigheten

Jag har mätt prestandan på Folkhälsomyndigheten senaste dagarna. Dels på startsidan och dels deras Covid-19-sida. Och för att ha nånting att jämföra med, har jag även gjort samma test på Myndigheten för samhällskydd och beredskap startsida och deras coronavirussida.

Jag har använt verktyget sitespeed.io som jag byggt men som även rekommenderas av engelska Government Digital Service och den amerikanska staten för att mäta prestanda.

Jag skulle kunna skriva en kortare bok om vad jag fått fram men jag tänker fokusera på två saker. Det kommer bli lite tekniknörderi men jag ska försöka förklara det så gott jag kan.

Serverprestanda

Det bästa sättet för att kolla hur bra ett system fungerar, är att kontinuerligt ta stickprov och mäta. Jag har mätt ungefär varannan timme för att inte tillfoga webbplaterna nån skada (webbplatsen ser mätningen som vilken vanlig användare som helst).

Ett väl fungerande serversystem ska ha konstant prestanda. Oavsett av hur mycket text som ska ut till användaren, ska tiden på serversidan ta lika lång tid att servera till användaren. Det är ett bra tecken på att allting är uppsatt bra. För oss prestandanördar mäter vi TTFB (Time To First Byte) som betyder hur lång tid servern behöver för att skapa innehållet.

Låt oss kolla på hur det ska se ut. Här har jag mätt polisen.se under sju dagar. Du kan se att det varierat ca 50 ms under sju dagar. Det är bra siffror och du kan också se tiden det tar att generera sidan är ca 200-250 ms. De personer som bygger och sköter om polisens webbsida har förstått prestanda.

Polisen.se TTFB

Hur ser det ut för Folkhälsomyndigheten? Jag har bara mätt dom senaste dagen så jag har inte samma mängd data som polisen.se. Men kolla in vänsteraxeln! Från 432 ms (dubbla tiden mot polisen) upp till 12 sekunder! Tolv sekunder TTFB betyder att det minst tar tolv sekunder för en användare innan de ser någon som helst text på sidan.

Folkhälsomyndighetens startsida TTFB

Kolla vi sen in Covid-19-sida ser vi ännu fler intressanta saker.

Folkhälsomyndighetens covid-19 TTFB

Dels kan vi se att topparna är på olika ställen och olika höga. Det tyder på att dom här tolv sekunderna vi såg inte är en tillfällighet. Folkhälsomyndighetens webbplats har kontinuerliga prestandaproblem. Den nogranna kan också se att startsidan tar i bästa fall 400 ms att börja servera till användaren. Men corona-sidan tar i bästa fall 800 ms (dubbel så lång tid). Alltså är deras system beroende på vilken typ av innehåll som ska serveras. Det är ytterligare ett dåligt tecken.

Sista kollen: Vi vet att serverprestanda (backend) är 10-20% av den totala prestandan för de flesta webbplatser i världen. Hur ser det ut för Folkhälsomyndigheten? Jo dom pendlar melln 19-65%, det är ytterligare ett tecken på att allt inte står rätt till.

Backend(server)prestanda vs frontendprestanda Folkhälsomyndigheten

Innan vi slutar snacka serverprestanda kollar vi snabbt in MSB. Dom har inte samma stora toppar som Folkhälsomyndigheten (kanske beror det på färre användare) men ett dåligt tecken är TTFB på deras corona-sida:

MSB corona TTFB

Den går upp och ner. Det är ett tecken på att allt inte står rätt till. Det verkar som flera än Folkhälsomyndigheten har jobb att göra och borde följa min guide i början av den här texten.

Frontendprestanda

Frontendprestanda är mitt specialistområde: där finns normalt den största vinsten eftersom användaren normalt spenderar 80-90% av tiden här. Men jag ska prata om bara en sak. När du bygger din webbsida måste du minimera dina risker för att dina användare inte ska kunna se ditt innehåll. Det betyder att du ska se till att bara ladda innehåll från dina egna servrar. Du ska aldrig ladda innehåll från andras servrar innan användaren kan se din sida.

I mina prestandakretsar kallas det här SPOF (Single Point Of Failure) och det betyder att du aldrig (jag repeterar ALDRIG) ska utsätta dina användare för SPOF. Det här har varit känt sedan i alla fall 2011. Laddar du innehåll från någon annan än dig själv blir deras problem dina problem. Det vill säga har dom problem, deras servrar problem, den delen av internet deras servrar står på problem så kommer det påverka din sida och dina användare.

Både Folkhälsomyndigheten och MSB har inkluderar innehåll från andra som kan påverka deras egna innehåll. Folkhälsomyndigheten laddar CSS från Google (det är inte OK!) och MSB från readspeaker.com (nej det är inte heller OK!) som kan göra att deras användare inte kan läsa deras innehåll.

Nu är det nog med negativa saker, låt oss snacka om hur vi fixar det här!

Hur löser vi det här?

Glädjande är det att flera personer gått ut och sagt att dom gärna hjälper till att fixa problemen för Folkhälsomyndigheten. Men det alla behöver förstå är att problemen är djupare än så, det är inte en myndighet som inte förberett sig för krisen som är problemet. Eller att MSB inte heller har full koll. Det är ett systemfel. Och det härliga med det är att det redan finns en lösning!

Inom det offentliga Sverige behöver vi lära oss av andra länder som jag berättade om i mitt öppna brev till Anders Ygeman och som jag, Carl Bergquist, PA Rangsjö och Henrik Tengelin berättade personligen för honom.

Jag säger det igen: Vi i Sverige behöver en snabbrörlig teknisk enhet (det kanske inte är en myndighet, de kanske sitter direkt under Infrastruktur­departementet!). Den ska ha förutsättningar och mandat att ta tekniska beslut för alla myndigheter. Ha en chef med hög teknisk kompetens och anställda som har gjort liknande saker förut och som kan modernisera Sveriges digitalisering.


Skrivet av: Peter Hedenskog