Bytet från Heroku till Elastx

"Den vertikala autoskalning är fantastisk!" - Oskar Holmkratz, grundare MetaGamerScore

Siten MetaGamerScore.com lanserades 2010 med målet att erbjuda en samlingsplats för spelare att jämföra sina poäng. Siten samlar in spelarens achievements från mängder med speltitlar, bland annat från plattformarna PlayStation Network, Xbox Live, Steam, World of Warcraft och theHunter. Detta skapar en samlad poäng och spelare runt om i världen kan jämföra sig med varandra.

Oskar Holmkratz är en av grundarna till siten som han driver vid sidan om sitt heltidsjobb på Avalanche Studios. Elastx träffade nyligen Oskar och fick höra honom berätta varför valet föll på Elastx för att drifta MetaGamerScore och hur han upplever vår jelastic:PaaS.

 

Hur startade MetaGamerScore?

Jag har jobbat som spelutvecklare sedan 10 år tillbaka, och har varit en gamer ännu längre. Jag gillar achievements i spel, men tyckte det saknades ett segment inom spelarupplevelsen i dem, nämligen att de inte var satta i en större multi-platforms-kontext. Min vän Martin Berglund gillade idén när jag pitchade den, och eftersom han hade bra koll på vad som är hett valde vi Ruby (on rails) som programmeringsspråk. Eftersom vi inte ville köpa in och underhålla egna servrar så föll valet då på Heroku som var den enda RoR leverantören i molnet då, berättar Oskar.

 

Utmaningen!

Siten har växt stadigt sedan 2010 och det fungerade i början väldigt bra på Heroku. Dock började problemen att komma i början av 2014 med märkbart sämre svarstider. Vid hög trafik gick siten ofta ned helt. MetaGamerScore hade då närmare 3000 användare, varav cirka 100 var dagligen återkommande. Antalet aktiva användare stagnerade och gick till och med bakåt som en följd av problemen.

Oskar la ned mycket tid på kontakt med Herokus kundsupport med varierande framgång. Det visade sig vara ett par olika anledningar, men främst databasen. Första tanken är förstås "Men det är ju i molnet, så det är bara att lägga till mer kraft", men det var inte riktigt så enkelt. 

Databasen samlar in väldigt mycket information som behöver bearbetas och för att få till prestandan, trots massvis med optimeringar, så behövde vi öka kapaciteten på databasen markant. För att undvika prestandaproblem så skulle vi behövt kunna cacha det mesta av tabellerna, Oskar fortsätter. Så fort man får en cache-miss på AWS (som Heroku använder för infrastruktur) får man stora prestanda-problem - speciellt om postgresql väljer att inte använda indexet. Heroku erbjuder inte dynamisk skalning och hoppen i val av databaskraft är stora. Även om vi skulle valt den databas som kostar $750/månaden (kallad “Ika”) så skulle det troligtvis inte räckt. När kostnaderna skalar mycket fortare än inkomsterna måste man börja fundera på om det är verkligen är värt att spendera mer pengar. I detta skede så började vi titta på andra alternativ, berättar Oskar.

 

Lösningen

-  Martin hade sett Elastx hålla en demo på SHRUG (Stockholm Ruby User Group, Elastx anm.). Att Elastx använder SSD som lagringsdiskar var en av de mycket lockande punkterna, eftersom det kändes som att även ocachade databasanrop då skulle kunna hålla en acceptabel hastighet. Jag signade upp för ett gratis testkonto via Elastx hemsida. Efter det porterade jag min git-repo till BitBucket, eftersom den låg på Herokus interna repo innan. När väl det var gjort var det väldigt lätt att få Elastx att synca med git-repon. När det var dags att sätta upp mitt bakgrundsjobb fick jag väldigt kunnig och snabb (någon minut!) teknisk hjälp via Elastx support.

"Jag fick väldigt kunnig och snabb teknisk hjälp via deras support"

 

Resultatet!

MetaGamerScore körs nu hos hos Elastx och stabiliteten samt prestandan är oklanderlig. Oskar är väldigt nöjd.

Jag gillar att det inte behövs några specialanpassningar utan att det är standardkomponenter rakt igenom. Vi har också kunnat uppgradera till Ruby 2.0. , Oskar fortsätter

Några siffror som vi kunnat mäta med New Relic:

 

  • Ett av mina värsta databasanrop tog tidigare 127 sekunder, vilket ju är sanslöst lång tid. Hos Elastx så tar samma databasanrop nu 2,5 sekunder!
  • Mediantiden för databasanrop under normal last: Från 400ms till 150ms
  • Antal avbrytna requests p.g.a. databas time-outs: Från +5% (0% under låg trafik och 100% under de mest intensiva perioderna) till 0%!
  • Genomsnittlig laddtid av sidan: Från 2 sekunder (exkl. time-outs) till 255ms!

 

Den vertikala autoskalningen är fantastisk. Det känns som ett perfekt verktyg för att hantera växande användareantal. Snabb skalning är otroligt viktigt - trafikskillnaden från timme till timme kan skilja sig extremt mycket. Med Elastx modell slipper jag betala för trafiktopparna hela dygnet eftersom noden skalar sig själv upp och ner när besökarantalet ändras över dygnet, berättar en nöjd Oskar.

Nedan är lite siffror tagna efter bytet till Elastx. Tyvärr så har jag inga grafer hur det såg ut innan:

 

Transaktioner:

Metagamerscore_pic2

 

New Relic responstider:

Metagamerscore_pic3

 

PostgreSQL CPU användning:

Metagamerscore_pic4

 

Laddtider webbsida:

Metagamerscore_pic5

 

Prisskillnaden

Dessa siffror är baserade på nuvarande antal användare och är ungefärliga då allting är dynamiskt. Det är lite svårt att jämföra rakt av eftersom prismodellen ser annorlunda ut.

- Pris databas: Har gått upp ca 30%, MEN, det hade gått upp mellan 400% - 1500% för att hålla siten uppe på Heroku!

- Pris webbnoderna och bakgrundsprocesserna: Ungefär samma, men Elastx stiger inte alls lika brant i kostnad vid ökad användning (erbjuder även automatisk volymrabatt, Elastx anm.). Heroku har 1 dyno gratis och när förbrukningen går över 3 dynos så blir Elastx mer kostnadseffektivt.

Total prisskillnad: Ungefär 25% billigare i kombination med en extrem prestandaförbättring!

 

Summering

  • SSD för databaslagring - Möjliggör ocachade anrop extremt mycket snabbare. Hastigheten för cachade anrop är mer beroende av storleken på din vertikala skalning
  • Vertikal autoskalning - Du betalar endast för den faktiska förbrukningen och att kraften finns där när du behöver den, utan någon fördröjning (när det är stor trafik på siten)
  • Elastx support - Extremt nöjd med supporten. Väldigt kunnig teknisk support och snabbt svar. 
  • Inga special plugin - Här är det inga plugin som injektar saker i din kod. Det är mycket mer "straight forward" standard Ruby Server.
  • Ruby 2.0 support - Mest för att prestandan blir bättre 

 

Tack för att du delade med dig till våra läsare Oscar!

Läs mer: metagamerscore.com | info@metagamerscore.com

Share