Post mortem: Cachningsproblem störde TV4 Play

TV4 Play hade problem torsdag-fredag – det här var vad som hände:

Som vi tidigare berättat bygger alla kanalen som har TV4 Play på ett och samma API. Slutar API:t fungera slutar också de olika kanalerna (webb, mobil, tablet, OTT, Plex m.fl.) fungera. Torsdag kväll får vi larm som tyder på att API:t fungerar dåligt. Felsökning börjar direkt. Graferna visar att klockan 21.00 händer något som gör API:t långsamt:

Responstider från API:t (från webb-versionen av TV4Play).

Eftersom vi inte gjort någon förändring eller deploy vid tillfället är det sannolikt att innehållet i tjänsten på något sätt påverkat (eftersom det sker så tydligt klockan 21.00). Vi kollar vad som publicerats och ser att det finns några program som publicerats både före, vid och efter 21.00 men det ser inte ut att vara något konstigt med det och alla program fungerar att titta på.

När vi lägger oss torsdag kväll fungerar sajten ok men vi har stängt av mobil- och tabletversionerna: med de igång dyker API:t direkt. På morgonen fortsätter vi undersöka vad som hänt och försöker ringa in var, varför och hur problemet uppstått. Det mesta ser ut att fungera precis som det ska men trots det är API:t exremt långsamt och trögt. Bingo blir det när vi hittar en fil som är ocachad. Filen – som i XML beskriver hela innehållsstrukturen för TV4 Play – levereras ocachad. Eftersom den används frekvent sänker det nästan allt.

Efter ett tag går det också att klura ut vad som hänt: för att få API:t snabbt använder vi Memcached för caching av innehåll. Memcached har en default-gräns för hur stora saker som ska cachas satt till 1 MB. Under hela torsdagen satt redaktionen och fyllde på mer innehåll i TV4 Play. Fler moduler och kategorier gjorde att kategoriträdet – och därmed XML-filen – växte. Vad vi inte reflekterat över är att memcached har gränsvärdet för hur stora objekt som cachas och att vi hela tiden närmar oss den.

Klockan 21.00 sker så en tidsinställd publicering av en ny serie “Livet på flygplatsen” (ett program och en ny kategori publiceras). Det är den lilla information som får XML-filen att växa över memcacheds gränsvärde. Det i sin tur leder till att filen slutar cachas och hämtas dynamiskt vilket leder till att API:t och därmed alla kanaler med TV4 Play blir långsamma.

Fixen till det här problemet var inte ens en rad kod (=> komprimera xml-filen) vilket minskade filstorleken ungefär 80%. Inom kort kommer vi också förbättra hur XML-filen hanteras för att få en bestående lösning.

Vi beklagar det inträffade. Förutom de kodningsmässiga åtgärderna har vi även satt in några extra övervakningslarm för att undvika liknande problem igen.

Totalt var det 15 timmar med dålig tillgänglighet.

Till sist: här är programmet som publicerades (Premium). Hur många videos som finns i TV4Play? 108.703 and counting…

Läs om vår kommentarspolicy