Nadat je je site eventueel al geoptimaliseerd hebt met Google PageSpeed Insights (lees ook: "Hoe we Blabloom.com meer dan 40% sneller maakten met behulp van Google PageSpeed Insights"), kun je nog verder gaan en verder optimaliseren op applicatie niveau. Samen met Level27 hebben we New Relic in gebruik op enkele van onze grotere projecten om de websites te verbeteren.
Wat is New Relic?
New Relic is een dienst dat de performantie van jouw applicatie analyseert.
Een kleine greep uit de mogelijkheden van New Relic:
- slow query log
- error logs met stacktraces
- transactions waarmee je de loopbaan door je applicatie kunt volgen
- external services voor api requests
Apdex
Apdex is een soort score die je website krijgt in New Relic krijgt, die berekend wordt aan de hand van 2 factoren:
- De snelheid waarop je site door de server geserveerd wordt
- De snelheid waarop de site getoond wordt in de browser
New Relic noemt zijn Apdex zelf een 'satisfaction score'. Het is dus niet zomaar een getal, maar het duidt aan hoe tevreden of gefrustreerd de bezoekers van jouw website zijn.
Een apdex van 1.0 is het maximum.
Notifications instellen
Wanneer de Apdex onder een bepaalde score zakt of je een error rate hebt van X%. Dan kun je New Relic alerts laten uitsturen naar bepaalde personen. De alerts kunnen via mail en/of sms verstuurd worden zodat de nodige actie ondernomen kan worden. Want een trage website of webapplicatie is verre van ideaal.
Ook wanneer je website na verloop van tijd traag wordt door bvb een groeiende database en/of een groeiend aantal bezoekers zal New Relic je waarschuwen omdat de Apdex scoren zal dalen. Een performantie waakhond zeg maar, echt wel handig als je meerdere websites en applicaties moet beheren. Dan kan je nooit de sitesnelheid in de gaten houden door doorheen alle pagina's te klikken.
Verder kan er ook gecontroleerd worden op de downtime van je website. Ook hier zal New Relic dan een alert uitsturen.
Deployments
Een klein onderdeel binnen New Relic, maar kan wel handig zijn om de evolutie van de performantie te tracken tussen verschillende deploys.
Deployment tracking gebeurt door een api call te doen naar New Relic om aan te geven dat je een nieuwe deploy gedaan hebt. Je krijgt dan een handig overzicht van je deployments.
Op de responstijden grafiek kun je ook zien wanneer je een deploy deed. Dit zijn de verticale lijnen op de grafiek. Zo kun je snel en gemakkelijk zien welke deploy eventuele tragere responstijden veroorzaakte.
Voorbeeld Ancienne Belgique
Abconcerts.be, de website van de concertzaal te Brussel trekt dagelijks duizenden bezoekers en leek ons een perfect project om New Relic op te gebruiken. Na enkele dagen New Relic geactiveerd te hebben kregen we enkele alerts dat de Apdex soms extreem zakte.
Op onderstaande grafiek zie je duidelijk dat het probleem bij Web External ligt. We maken gebruik van Opensharecount om alle shares van een event te raadplegen en de Lastfm API om gerelateerde artiesten op te halen.
We hebben dat deel van de website aangepast en de laadtijd drastisch kunnen terugdringen dankzij de alert van New Relic.
Hieronder zie je een transactie uitgelicht naar een detailpagina van een artiest.
Wat dadelijk opvalt is dat de request naar opensharecount.com 10000ms (10s) duurde en ervoor zorgde dat New Relic niet meer tevreden was. Deze call gebeurt in de achtergrond via ajax, dus de eindgebruiker heeft hier niet veel last van. Dit geval kwam ook maar zelden voor, waarschijnlijk door een timeout bij opensharecount zelf.
Het limiteren van de CURLOPT_TIMEOUT tot 1 seconde was hier dan ook de beste oplossing.
Voorbeeld Blabloom extra processor
Op sommige momenten ging de Apdex van Blabloom.com naar beneden en gingen we via New Relic proberen te achterhalen wat de oorzaak hiervan was.
Er is duidelijk een relatie met de throughput, dus het aantal opgevraagde pagina’s. Van het moment dat Apdex in het rode bereik komt, is New Relic ontevreden en gaan ze alerts maken en uitsturen.
Hieronder de responstijden van de site op dat moment:
De responstijden willen we zo laag mogelijk houden. Op drukke momenten zaten er pieken tot 1000ms (1s). Niet echt een ramp, maar wel voor verbetering vatbaar.
Oorzaak
Laten we even de server zelf bekijken:
Ook dit is niet alarmerend, maar we kunnen er wel wat dingen uit afleiden:
- Er is 1 processor voorzien (rechts: 1 core)
- Deze processor zit zeker niet aan zijn maximum, maar springt af en toe wel omhoog tot aan 80%
- De load average (= het aantal processen dat zitten te wachten om uitgevoerd te worden) springt op het moment van de het probleem tot boven de 3. Voor een machine met 1 core is de load average bij voorkeur onder de 1 (omdat er steeds maar 1 proces uitgevoerd kan worden).
Op deze server worden de database en webserver gecombineerd. Er moet dus constant geswitcht worden tussen de verschillende taken.
Strikt genomen is de server krachtig genoeg, echter merk je dat tijdens deze drukke momenten een kleine wachtrij ontstaat.
Oplossing
Een 2de processor toevoegen! We lossen niet alle performance problemen op door servers te verzwaren. Maar dit probleem was direct van de baan door het toevoegen van een 2de processor.
De Apdex ligt duidelijk hoger na de upgrade.
De responstijden werden bijna met de helft verminderd.
De CPU en load werden ook meer dan gehalveerd.
Dit zijn 2 echte voorbeelden die tonen dat je toch wel belangrijke optimalisaties kan uitvoeren zodat bezoekers van je website kunnen genieten van een snelle website, iedere website of webapplicatie heeft wel zo zijn pijnpunten bij momenten en dan is New Relic van goudwaarde.
Wanneer een website veel bezoekers heeft en performantie is belangrijk (en dat zou altijd belangrijk moeten zijn) is New Relic echt een tool met een meerwaarde om mogelijke problemen en onvolmaaktheden op te sporen die zonder deze monitoring nooit aan het licht komen.
Dus zeker de moeite om eens te bekijken om de performance van je website of webapplicatie te bekijken.
Level27 gaf onze developers een snelcursus New Relic
Na zelf wat te experimenteren met New Relic kwam Peter Fastré van Level27 een korte talk geven over hoe je best New Relic kunt gebruiken en waar je zeker op moet letten. Zijn slides kun je terugvinden op http://www.slideshare.net/PeterFastr/new-relic-59929945
Is jouw website performant? Als je New Relic niet gebruikt weet je dat niet zeker, hoog tijd om daar wat aan te doen zou ik zeggen!
Schrijf je in op onze maandelijkse developers nieuwsbrief als je op de hoogte wil blijven van wat onze developers lezen over webdevelopment.