lördag, mars 05, 2011

Memcached

Att läsa ifrån disk är långsamt, så varför göra det mer än en gång? I en webbapplikation ser mönstret något förenklat ut som såhär:

  1. Klientens webbläsare skickar en förfrågan mot en webbserver
  2. Webbservern tolkar förfrågan och kör igång kodsnutten som ska hantera den här specifika förfrågan
  3. Kodsnutten hämtar data ifrån en datakälla, ofta en databas där innehållet lagras på ett fysiskt medium (som inte töms när strömmen bryts)
  4. Svaret skickas till klienten

Det som är en flaskhalls här om du har många besökare och lagrar informationen på disk är oftast disken i sig. Även om databaser idag är duktiga på att hålla resultat i primärminnet för att slippa läsa ifrån disk varje gång så finns informationen ändå bara på en plats, databasservern. För att komma runt det här kan man förstås sprida informationen över flera databasservrar men det är en relativt komplicerad process att lastbalancera på den nivån. Istället kan man med exempelvis Memcached lagra resultatet i sina webbservrar eller andra maskiner som finns tillgänglig, desto fler desto bättre! Memcached är enkelt på gränsen till simpelt och fullkomligt genialt, du installerar en minimal serverapplikation som sparar ett värde ihop med en hashnyckel. Den maskin som servar en förfrågan frågar först Memcached servrarna om de har resultatet som efterfrågas och då hämtas det därifrån, annars hämtas det upp ur databasen och returneras förutom att det nu sparas till en Memcached server. Om en av Memcached servrarna går ner spelar det inte så stor roll, de värden som fanns där kommer snart att finnas på någon av de andra servrarna.

Inga kommentarer: