CASE: De Architectuur voor de De Snelste Quiz ter Wereld

Alexander Maertens
Door Alexander Maertens Innoveren
CASE: De Architectuur voor de De Snelste Quiz ter Wereld

Bij de lancering van het vernieuwde VIER, en het nieuwe seizoen van De Slimste Mens, is de applicatie die toelaat om "De Snelste Quiz" te spelen niet onopgemerkt voorbij gegaan. Deze applicatie laat toe dat kijkers zelf meespelen met een quiz, die tijdens de uitzending loopt.

In The Pocket

Het Gentse 'In The Pocket', specialisten op het vlak van mobiele applicaties, stond in voor het maken van de applicatie. Openminds werd door In The Pocket gecontacteerd voor het mee uitwerken en uitdenken van de architectuur en de opbouw van de backend voor de applicatie, die de scores ontvangt en verwerkt, en uiteindelijk ervoor zorgt dat er een winnaar is.

Deze vraag was niet alledaags, door de werking van de applicatie. Na het beantwoorden van de laatste vraag op de quiz-applicatie wordt de totale score doorgestuurd naar de server. Dit zorgt voor een flinke piek in aantal "hits" op enkele seconden, aangezien iedereen natuurlijk quasi op hetzelfde moment de laatste vraag beantwoordt.

We (Openminds) zaten eerst samen rond de opbouw van de backend. Er werd een eenvoudige maar solide structuur uitgewerkt, waar zowel wij ons in konden vinden, als diegenen die de backend moesten ontwikkelen.

Backend

De backend werd in PHP ontwikkeld. Aangezien we flink wat hits moeten aankunnen, kozen we voor Nginx in combinatie met PHP-FPM. De scores worden door de backend aangenomen, en worden opgeslagen. Nginx werd getuned om flink wat connecties aan te kunnen, en de PHP-FPM configuratie werd zo ingesteld dat er voldoende php-threads aan het wachten zijn, zelfs wanneer het systeem weinig doet.

Twee stappen

Het opslaan en verwerken van de scores gebeurt in twee stappen. De mogelijke denkpiste om alles onmiddellijk in bvb MySQL op te slaan werd aan de kant gezet, en er werd geopteerd voor een tussenstap via een berichten-wachtrij gebaseerd op RabbitMQ.

(Een berichten-wachtrij als RabbitMQ is ongelooflijk wanneer het aan komt op het verwerken van zeer hoge hoeveelheden berichten op korte termijnen.)

De opgeslagen messages worden in de achtergrond verwerkt door een combinatie van enkele stukken eenvoudige php-code, en een gearman daemon om de juiste processen op het juiste moment te starten.

MySQL

De verwerkte data wordt in een MySQL installatie gepompt, die dan uiteindelijk gebruikt wordt om de scoretabellen te bereken en op te slaan in statische files, die finaal door de applicatie afgehaald wordt om de scoretabellen weer te geven aan de gebruiker. Dit alles gebeurt op enkele seconden.

Redundant

Dit alles werd redundant uitgevoerd, waardoor er een load-balancing oplossing nodig was (hier vertrouwen we op haproxy). Doordat alles stateless werkt, kan de balancing op eender welke node terecht voor eender welke call. De messaging-queues en de mysql-setup werd in een dual-master setup opgebouwd, zodat de data op beide systemen voor handen is.

Door deze specifieke opzet kunnen we met enkele standaard-servers, zonder al te gekke specificaties of noden, de extreme piek snel en eenvoudig opvangen.

De opvolging van de systemen tijdens de piekmomenten gebeurt met behulp van Graphite en Collectd, aangevuld met een aantal eigen scripts. Dit geeft ons een beeld die quasi real-time de toestand van het platform weergeeft.

Ter bevestiging werd de volledige oplossing grondig getest met behulp van onder andere JMeter, in combinatie met enkele standaard scripts. Er werden verschillende scenario's getest, tot we overtuigd waren van de goede samenwerking van code, systemen en instellingen.

Deze uitwerking kunnen we zeker geslaagd noemen. Beide partijen (Openminds en In The Pocket) hadden vertrouwen in de opstelling, en waren overtuigd van de goede uitwerking en de capaciteit dat het platform had.

-- --

Heb je zelf nieuws over je bedrijf? Mail naar redactie@bloovi.be en we nemen het op in ons Sectornieuws.

Je kan je nieuws ook tweeten met #bloovi