Hoe Apache Solr een large scale Drupal systeem kan redden

13 Sep 2011

Joris Snoek - Business Dev
+31 (0)20 - 261 14 99

Wij werkte onlangs aan een Drupal systeem, waarin het aantal nodes explosief toenam vanwege een groot succes. Meer dan 60.000 nodes zijn aanwezig op moment van migratie. Dit werd voornamelijk veroorzaakt doordat er user generated content werd geplaatst en dit bijna elke dag exponentieel toenam.

Op gegeven moment werd het systeem merkbaar trager, waarna we een performance optimalisatie analyse hebben ingezet.

Performance analyse & Benchmarking

Ons vermoeden dat het opslaan de data veel tijd zou kosten werd al vrij snel uitgesloten door benchmarks uit te voeren. Dit vermoeden hadden we omdat vele custom modules vrij hevig gebruik maakte van de node_save() functie. Grootte voordeel hierin is dat veel data logica en foutafhandeling middels deze Drupal API functie voor groot deel wordt afgevangen.

Nadeel hiervan is dat er overhead kan ontstaan doordat andere modules hierop ook 'inhooken' met onnodige functies voor dit specifieke systeem. Bijvoorbeeld CCK en Pathauto. Wat kan resulteren in een onnodige serverbelasting en dus vertraging van het systeem.

Tijdens deze specifieke benchmarks wordt de start en -stoptijd bij een uitgevoerde functie gelogd.
De benchmarks weze al vrij snel uit dat in deze node_save() functie relatief weinig query -en pagina executie tijd in beslag namen.

De bottleneck: Drupal core search

Na verder onderzoek bleek dat de core index functies relatief e-nôh-rúm veel tijd query-executietijd in beslag namen.
Deze functie was noodzakelijk aan te roepen bij elke content wijziging, omdat ingevoerd en gewijzigde content instant weer gevonden moest kunnen worden.

Dat deze functie veel tijd in beslag nam was ook niet vreemd, gezien er meer dan 1.000.000 records stonden in de Drupal core search index tabellen. Bij alle zoekschermen werd gebruik gemaakt van de core search index.

De oplossing: Apache Solr

De keuze voor inzetten van de Apache Solr machine was dan ook snel gemaakt.
Dit heeft letterlijk het Drupal systeem gered, omdat user experience anders dusdanig achteruit zou gaan dat bezoekers zouden afhaken.

Het resultaat: een wederom lightening fast Drupal systeem, voor zowel authenticated (ingelogde) als anonymous (uitgelogde) bezoekers.

Voornaamste redenen: Apache Solr is ontwikkeld op de zoektaal 'Lucene'; deze taal is (in tegenstelling tot PHP/mySQL) geheel ontwikkeld om gigantisch grote content onderdelen te doorzoeken. Doordat de Solr machine alle zoekopdrachten en updaten/deleten afhandelt, wordt het Drupal systeem enorm ontlast van veel te zware queries.
Het duurde bijvoorbeeld maar een kleine 10 minuten om álle nodes (60.000+) te laten indexeren door Solr. Waarbij deze nodes gemiddeld 7 CCK fields met content bevatten & gemiddeld 3 taxonomy velden. In tegenstelling tot de core search, die hier bijna 2 uur over deed (!).

Momenteel bevat het systeem in frontend en backend ruim 20 functionaliteiten die gebruik maken van de Solr index. Elke functionaliteit behoeft een specifieke zoekopdracht naar de Solr machine.

Tevens is het systeem goed voorbereid op de toekomst, gezien er een vernuftig 'faceted search' functionaliteit in gebouwd gaat worden. Denk hierbij aan zoeken zoals op www.martkplaats.nl of www.funda.nl

Obama on Solr

Meneer Obama, oftewel Het witte huis is een voorbeeld Drupal websysteem, die ook gebruik maakt van Solr. http://www.whitehouse.gov/

Resources

Feedback of vragen about Apache Solr implementatie in Drupal?

Neem contact op met me, of hit me on Twitter.

Comments

Nóg meer
kennis nodig?

Check ons ons blog archief >