Drupal Boost module

Een jaartje geleden heb ik de Drupal Boost module geprobeerd om de performance van MO6.nl te vergroten. Destijds werkte de site nog onder Drupal 5 en gaf Boost weinig voordelen. Inmiddels werken we met Drupal 6 en is de situatie veranderd en verbeterd. Hieronder mijn bevindingen.

Update 28-09-2009: benchmarking toegevoegd en tekst uitgebreid.
Update 20-10-2009: grafiek met Google crawl snelheid toegevoegd.

MO6.nl configuratie

Deze website draait op oude hardware achter een ADSL verbinding. De CPU capaciteit (Pentium 3 met 256 MB) is beperkt en de (upload-)snelheid van de verbinding is ook (zeer) beperkt (1Mbit, ca. 100KB/sec). Drupal werkt prima in deze situatie, onder Linux, maar het aantal pagina's dat per seconde verwerkt kan worden is vrij mager.

Boost en Drupal 5

Een jaar geleden heb ik de Drupal Boost module onderzocht met Drupal 5. Boost maakt een cache van html bestanden aan die door de Apache webserver met een minimum aan moeite aan de (anonieme) bezoekers aangeboden worden. De potentiƫle snelheidswinst ligt in de orde van een factor 100 (!). De reden dat de snelheidswinst hier zo groot is komt door een combinatie van factoren:

De trage hardware van deze site is prima in staat om de 1Mbit verbinding te vullen met statische (html) data, dus in theorie is hier op een site waar niet teveel updates zijn veel te winnen.

Tot zo ver de positieve punten. Het probleem met de Boost versie van destijds was dat de cache opgebouwd werd op het moment dat een pagina voor de eerste keer werd opgevraagd. Dit betekent dat er, in combinatie met een cache timeout van b.v. een dag, voor veel weinig opgevraagde pagina's geen voordeel was van de cache. Immers, voordat een pagina een tweede keer werd opgevraagd was deze door de cache timeout alweer invalidated en verwijderd. In tegendeel het opbouwen van de cache geeft extra werk die een extra belasting opleverde voor de magere hardware.

Een ander probleem was dat er een gecache pagina werd aangemaakt voor pagina's die niet bestonden en normaliter een Page not found (404) fout gaven. Dit zorgde ervoor dat pagina's die er in eerste instantie niet (meer) waren, bij de tweede opvraging wel waren! Een vervelende situatie, zeker in het kader van SEO.

Het derde probleem was dat vervolgpagina's, zoals b.v. de tweede en volgende pagina van categorieƫn, niet gecached werden. Dit kwam omdat er geen implementatie voor pagina's met parameters (zoals de ?p=x van vervolgpagina's) was.

Deze drie problemen zorgde ervoor dat ik de module weer gedeactiveerd had, hoewel de potentie erg groot was in de specifieke situatie van deze site.

Boost en Drupal 6

Na de upgrade naar Drupal 6 is het tijd om opnieuw naar Boost te kijken. De module is flink geevolueerd in 2009 en de problemen van de D5 versie zijn aangepakt.

Allereerst worden pagina's met foutmeldingen (403, 404) niet meer gecached. Dat is een grote verbetering. Ook worden vervolgpagina's nu gecached.

Verder is het probleem van de initiele opbouw van de cache aangepakt door de introductie van de Boost Crawler. Dit systeem leest bij elke cron run een aantal pagina's uit de website en bouwt dus zelfstandig de cache op, zonder dat hier bezoekers voor nodig zijn. Dit betekent dat de eerste bezoeker van een pagina direct een versie uit de cache voorgeschoteld krijgt. De snelheid waarmee dit gebeurt is (op diverse punten) instelbaar aan de specifieke configuratie.

Benchmarking Boost

Ik heb benchmarking tests uitgevoerd met de ab2 tool van de Apache distributie. De instellingen zijn:

Het testresultaat voor de homepage (7KB groot) is:

De site is dankzij Boost dus bijna 15 maal sneller geworden. De beperkende factor hier is de bandbreedte, dit zal duidelijker zijn bij een test met een kleinere pagina.

Het testresultaat voor de privacy pagina (mo6.nl/privacy) (4KB groot) is:

De site is hier bijna 22 maal sneller geworden. Zou de pagina gecomprimeerd worden, dan wordt deze 2 maal zo klein en wordt de snelheidswinst dus 2 maal zo groot.

De snelheidswinst is dus ca. 10 tot 40 maal, afhankelijk van de grootte van de pagina en het feit of compressie gebruikt wordt (de meeste moderne browsers ondersteunen dit). De beschikbare bandbreedte is duidelijk de beperkende factor. Met een 100Mbit verbinding en dezelfde hardware zal de site de test met de privacy pagina zonder Boost in ca. 101 seconden en met Boost in minder dan 0,05 seconde afgerond hebben. Dan zou de snelheidswinst meer dan een factor 2000 zijn..

Boost en SEO

In het kader van Drupal zoekmachineoptimalisatie (SEO) is het zaak een zo snel mogelijke userexperience te leveren. Een snelle hosting van de website en een snelle presentatie van pagina's leveren dus een positieve bijdrage aan SEO.

In onderstaande grafiek is te zien hoe te gemiddelde tijd die Google nodig heeft om een pagina te laden sinds eind september, na activatie van Boost, flink is teruggelopen.

MO6.nl Google download time chart

Boost voordelen

MO6.nl draait al een tijdje met Boost en werkt uitstekend, zonder de problemen uit het verleden. De meeste pagina's zijn opgenomen in de cache en worden direct als HTML bestand door de webserver aan de bezoeker bezorgd, op hoge snelheid, zonder PHP en database overhead. De snelheidswinst is enorm en wordt verhoogd doordat de pagina's gecomprimeerd opgeslagen en doorgegeven worden zodat de beperkte verbinding beter benut wordt. De compressie van pagina's is ook standaard in Drupal 6 aanwezig, waardoor de standaard Drupal 6 hier ook een betere performance geeft dan Drupal 5, maar met Boost werkt het uiteraard nog sneller.

Boost nadelen

Wat zijn dan de nadelen van Boost? Zoals met elke cache is de effectiviteit afhankelijk van de mate waarin de gegevens aangepast worden. Het is dus het meest effectief op een site met een beperkt aantal wijzigingen waardoor de cache tijd zo lang mogelijk kan zijn. Verder werkt Boost alleen voor anonieme (niet-aangemelde) bezoekers. Via Drupal aangemelde (ingelogde) gebruikers ontvangen altijd de recente gegevens.

Verder werkt de statistics module natuurlijk niet wanneer er pagina's vanuit de cache worden opgevraagd. Sites die hiervan afhankelijk zijn, voor b.v. een overzicht van populaire pagina's, zullen hierdoor anders functioneren.

Een ander nadeel is dat de configuratie van de module meer werk vraagt dan een andere Drupal module. Er moeten aanpassingen worden gedaan aan het .htaccess en deze wijzigingen moeten dus bij elke Drupal core update in stand blijven.

Verder vraagt de cache natuurlijk wat schijfruimte binnen de hosting. Maar dat is tegenwoordig niet zo'n groot probleem.

Conclusie

Als een website voornamelijk anonieme bezoekers heeft en een beperkt aantal updates, dan kan Boost een aanmerkelijke snelheidswinst geven, afhankelijk van de serverhardware en de bandbreedte in orde van een factor 10 tot een factor 1000. Dat geeft een betere gebruikerservaring, maar tevens kan bestaande serverhardware beter benut worden. En dat is natuurlijk beter voor het milieu.. :)

BijlageGrootte
mo6-google-download-time-chart.png10.97 KB

.htaccess

Hoi, dank je wel voor dit artikel. Dan ga ik boost ook maar weer gebruiken.
Welke aanpassingen zijn nodig in .htaccess?

Ik maak gebruik van een multisite installatie. Alle core bestanden staan dan in een aparte map zonder website. Op die manier kun je rustig je core updaten zonder bang te zijn dat je je .htaccess overschrijft want die staat ergens anders. Werkt met d6. Check het maar eens: http://justinhileman.info/articles/a-more-secure-drupal-multisite-install

Aanpassingen .htaccess voor Boost

Na installatie vind je in de README.TXT precies welke aanpassingen er aan .htaccess gedaan moeten worden:

5. IMPORTANT: after backing up the original .htaccess file in your Drupal installation directory, add the rules found in boosted1.txt right below

# RewriteBase /

and above

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.

boosted1.txt is found in the sites/all/modules/boost/htaccess/ directory.

aanpassingen in .htaccess

In de laatste versie van Boost zit het stukje dat je moet knippen en plakken in .htaccess gewoon in een extra tab op de admin > Prestatie pagina. Is echt niet moeilijk, een stukje code knippen en op de juiste plaats plakken.

Voor de rest heel leuk artikel.

Over MO6.nl

Dit is een persoonlijk blog van George Moses. George is een webdeveloper gespecialiseerd in Drupal en vennoot van Dynamic Presentations, een Internet Solutions Provider gevestigd in Nederland.
Meer over MO6.nl.

MO6 in English: MO6.me

MO6 op het web

MO6