Storskala søk med Solr

Solr er en søkemotor basert på fri programvare som har blitt et populært alternativ til kommersielle aktører. Det er enkelt og effektivt å sette opp en søkeløsning med èn Solr server, noe som passer godt for bedrifter som ikke sitter på mer enn noen titalls millioner dokumenter. Men hva hvis du har virkelig store datamenger? Denne bloggposten vil gå nærmere inn på hvordan Solr klarer seg hvis søkeløsningen er så krevende at man trenger mange servere for å håndtere lasten og datamengden.

De mest populære tjenestene på nettet som er basert på bruker-generert innhold må gjøre enorme mengder data søkbare i et miljø der man har hundrevis av oppdateringer og spørringer per sekund. Som et eksempel har Flickr mer enn tre milliarder søkbare bilder, og det blir lastet opp over fire tusen nye bilder hvert minutt. Flickr støtter seg på Yahoo! for å håndtere søket sitt, og andre tjenester som for eksempel YouTube bruker Google. For bedrifter som skal implementere et forretningskritisk søk basert på store mengder data, faller valget ofte på Autonomy eller Microsoft Enterprise Search.

Dagens situasjon i Solr

For kunne håndtere høy last og store datamengder, må man kunne skalere i to dimensjoner. Solr har løst dette ved å tilby indeksreplikering og sharding. Hvis antall spørringer per sekund vokser, kan man duplisere indeksen ved å kopiere den over til en ny server. Innebygget støtte for dette kom i Solr 1.4, som nettopp har blitt sluppet. Hvis indeksen er så stor at den må spres over flere servere, håndterer hver Solr server sin bit av indeksen. Dette kalles for en shard.

Distribuert Solr

For å benytte sharding må listen over shards defineres i solrconfig.xml, eventuelt kan spørringer mot søkemotoren inneholde et parameter som angir listen over shards direkte:

curl 'http://localhost:8983/solr/select?shards=localhost:8983/solr, \
localhost:7574/solr&indent=true&q=ipod+solr'

Det er opp til brukeren å distribuere dokumentene til forskjellige shards, vanligvis løses dette ved at man benytter en enkel hashing funksjon som for eksempel uniqueId.hashCode() % numServers.

Ulempen med dagens løsningen er at det ikke finnes noen form for automatisk feilhåndtering hvis en server feiler under indeksering. Brukeren er også nødt til å distribuere Solr konfigurasjonen til de forskjellige nodene selv, og sørge for at konfigurasjonen holdes synkronisert på alle serverne ved oppdateringer.

Fremtiden

Det har startet opp to friprog prosjekter som begge har som mål å integrere eksisterende teknologier med Solr for å få bedre funksjonalitet ved distribuert søk: Katta og ZooKeeper.

Katta er et Lucene prosjekt som tar sikte på å håndtere store indekser og høy last ved å bygge på eksisterende teknologier som Hadoop RPC og Hadoop DFS. Siden Solr bygger på Lucene, er integrasjon mellom Katta og Solr et naturlig steg å ta. Ideen bak Katta er at en master server kontrollerer flere noder, og at hver node eier en eller flere shards. En klient kan da søke i en indeks ved å koble til alle nodene, for deretter å merge resultene fra alle nodene til en ferdig liste med treff.

For å bygge en indeks med Katta, brukes map reduce funksjonaliteten i Hadoop. Dette gjør at man slipper å lage masse kode selv for distribuering av dokumenter til nodene, siden dette kan bli en komplisert affære når man må ta hensyn til at noder kan gå ned eller bli midlertidig overbelastet. Distribuert konfigurasjon og synkronisering mellom nodene styres av ZooKeeper, som er et underprosjekt av Hadoop spesielt beregnet for å håndtere konfigurasjon, navnetjenester og distribuert synkronisering. Med ZooKeeper kan man lese og skrive til et virtuelt delt filsystem, der endringer blir synlige for alle medlemmene i clusteret. I tillegg brukes ZooKeeper for å holde rede på hvilke noder som er oppe og nede; hver node annonserer seg selv ved å skrive en statusfil i det viruelle filsystemet, og hvis noden feiler blir denne statusfilen fjernet av ZooKeeper.

Kort oppsummert vil Katta og ZooKeeper bidra med følgende til Solr:

  • Automatisk failover
  • Sentral konfigurasjon av Solr noder som blir distribuert til hver enkelt node
  • Distribuert bygging av store indekser
  • Bedre støtte for utskifting av noder i søkeclusteret

Mer informasjon:
Katta integrasjon
ZooKeeper integrasjon

One Comment

  1. emil
    Posted 29/11/2009 at 13:25 | Permalink

    Topp artikkel! Kom gjerne med flere poster om Solr i fremtiden.

Post a Comment

Your email is never shared. Required fields are marked *

*
*

Spam Protection by WP-SpamFree