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…

TV4 Play ett år!

Idag är det ett år sedan “nya” TV4Play lanserades. På ytan var det en del nytt men mer förbättringar och uppfräschning än en “extreme makeover”. Under ytan däremot var det mesta nytt: vi bestämde oss tidigt för att ta ett större grepp i uppdateringen och byggde ett API, istället för att bygga sajten i Polopoly (som första versionen var byggd på) så byggde vi presentationen (som använder API:t) som en Ruby on Rails-app och vi driftade den nya sajten på Heroku. Dessutom använde vi HTML5.

Tidigare och senare version av TV4 Play.

Internt minns de flesta lanseringen och utrullningen som en ganska mysig händelse där all dramatik uteblev. Inget knas, inga överraskningar och arbetet med nya funktioner fortsatte utan oplanerade felssökningar. Samma kväll testades sajten också riktigt skarpt då vi Sverige spelade landskamp i fotboll mot Holland och vi hade en livesänd Zlatan-kamera som bara fanns i Play på nätet. Intresset var stort och trafiken hög men nya Play fungerade som vi hoppades. Heroku mailade dagen efter: “It looks like you guys went live today!  We saw the traffic spike, you were getting some great traffic around 5pm UTC.”.

Men, men, det var då. Under året som gått har bland annat TV4 Play Premium tillkommit och nu arbetar vi vidare med nya funktioner.

Grattis TV4 Play på ettårsdagen!

Fler visningar i bruset på Play

Idag släpptes första numret av DN:s iPad-anpassade version, kallad DN+. Den bygger på plattformen News+ från Bonnier som har ett uttalat mål att liksom  papperstidningen ha en början och ett slut (50 sekunder in i presentationsfilmen). I TV-världen vill vi istället locka till fortsatt tittande och det finns inte någon självklar början och absolut inte något slut.

Därför har funktionen för att titta vidare i TV4 Play varit central. När man tittat färdigt på ett klipp eller program så vill vi tipsa om andra program som tittaren kan vara intresserad av.

Det finns två viktiga beståndsdelar i en sådan funktion:

  1. Få ut relevanta klipp
  2. Presentera på ett förståeligt sätt

Det första görs idag genom att visa fler program/klipp i samma kategori som det klipp man för tillfället tittar på. I första hand de som är från samma program men i annat fall sådana från samma kategori eller genre.

Det senare handlar mycket om att göra det lätt att förstå i vilken ordning klippen visas. Klickar jag för att titta på ett annat klipp bör inte förslagen på liknande klipp ändras alltför mycket eftersom chansen är påtaglig att man vill titta på ytterligare klipp som visades i listan första gången.

Det finns en del corner cases som varit lite luriga att lösa. Om vi visar sex klipp åt gången i vyn och det finns åtta klipp, ska vi då visa de sista klippen ensamt? Vi vill ju att användaren ska ha flera alternativ men samtidigt att funktionen ska bete sig förutsägbart.

När vi pratade om det i somras blev det snabbt tydligt att det blir alltför abstrakt att bara prata om utan att använda sig av visualiseringshjälpmedel. Då kommer kontorsprylarna snabbt till hjälp. Inplastade papper får bli avgränsare och våtservetter bli till klipp.

utveckling

Fortsätter sedan diskussionen på annat ställe i kontorslandskapet så är det istället postit-lappar som får tjäna som avgränsare och whiteboard-pennor blir klipp.

Utveckling del 2

Ute på webbplatsen kan nu funktionen se ut såhär (när det finns fem klipp in alles):
Titta-vidare-modul i TV4 Play