Tailsweep
Svenska UK

Meny

  • Hem
  • Tailsweep
  • Tailsweep Blog Search
  • Tailsweeps Blogg
  • Google group
  • AddThis Social Bookmark Button

Projekt

  • Mammatus
  • Parhely
  • Haloe
  • AbstractCache
  • Utils

Arkiv

  • juni 2008
  • maj 2008
  • mars 2008
  • februari 2008
  • januari 2008
  • december 2007

Sidor

  • Kontakt

Kategorier

    AJAX
    Backup
    BigTable
    Browser
    cache
    Geo
    haloe
    Hibernate
    Javascript
    Job
    Lucene
    Mail
    Monitor
    Monitoring
    MySQL
    optimization
    regex
    release
    SCM
    Server
    sharding
    Spatial
    Tools
    Allmänt

Prenumerera

RSS Senaste nytt som RSS

Inlägg taggade ‘distributed’

Asymmetrisk Cache

måndag, januari 14th, 2008
Den tidigare implementationen som jag skrivit om (SymmetricCache) garanterar att alla noder i ett kluster har samma data. Problemet med en sån lösning är att om datamängden blir stor så blir det mycket dyrt och svårt att skala ut. I det långa loppet så är det i princip omöjligt att alla noder i ett kluster ska ha samma tillstånd. Antingen tar minnet eller diskkapaciteten slut (detta gäller naturligtvis stora webapplikationer). För att kunna skala ut rejält så behövs en asymmetrisk modell. Detta är precis vad jag tagit fram och jag kallar den lite lamt “AsymmetricCache”.Nyckel/värdeparen sprids jämnt över klustret med lastbalansering och replikeras till X servrar. X bör vara 1 för minnescachar och 2 eller högre för diskcachar om en cachemiss är att betrakta som dataförlust. Detta är en klient/server lösning som fungerar ungefär som memcached.MemCached klienterna använder sig av en asymmetrisk modell när de väljer vilken server som ska få lagra vilket data. Den modellen baserar sig på en algoritm som kallas Consistent hash och är vanlig bland webcachar i allmänhet. Problemet med memcached är att det inte finns en mekanism som håller koll på vilken server vad är lagrat. Pga detta så kan man inte använda memcached för annat än transient data där en cachemiss trots att datat finns lagrat nånstans inte betraktas som dataförlust. Memcached största styrka är att den är så enkel att hantera både på klient och serversidan och är mycket testad och robust.En annan svaghet är att om man lägger till servrar så måste alla klienters konfiguration uppdateras och hela klustret omhashas, vilket betyder att klienterna tappar information om vart de lagrat tidigare data, vilket i sin tur kan ge en cachemiss trots att datat finns nånstans i klustret. Eftersom consistent hash används så måste dock inte hela klustrets info kastas.Features hos AsymetricCache:

  • JGroups för notifiering om medlemskap och datatransport i gruppen
  • Man kan lägga till en ny server utan att uppdatera klienterna
  • En för klienterna gemensam KeyAddressMap som håller koll på vilken server som vilket nyckel/värdepar finns.
  • Distribuerar varje nyckel/värdepar till “NumReplicas” servrar, vilket är lämpligt om denna cache är tänkt som lagringsyta.

Du hittar implementationen i Subversion där den heter AsymmetricJgroupsCacheEngine. Som vanligt hittar du exempel på hur den konfas i PlainCacheTest och i metoden testAsymmetricClient1()

asymmetricdisk.jpg

Tags: asymmetric, cache, consistent hash, distributed, memcached
Postad i cache | No Comments »

DistributedDisk

torsdag, januari 10th, 2008


Äntligen har jag lyckats få till en distribuerad lösning som garanterar(gulp) att alla noder i klustret har samma data under varje ögonblick. En server får agera master och måste således vara uppe hela tiden för att det ska fungera och det är den största svagheten i denna design både skalbarhetsmässigt och HA mässigt. Detta kommer jag att bygga bort med tiden men man måste inskränka komplexiteten till en hanterbar mängd initialt. Den lösning som jag siktar på att implementera är denna:

  • Notifiera den äldsta mastern att jag finns och vill ha state
  • Hämta state tills varje ny state batch tar X tid att hämta dvs lagtiden är X
  • Säg till mastern att låsa klustret
  • Hämta den sista batchen och säg till mastern att jag är klar
  • Meddela alla slavar att jag nu också finns med som master.
  • Säg åt mastern att låsa upp klustret

Själva låset på klustret måste vara otroligt kort < 30 sek, annars tror jag att det kommer hända konstiga saker för användarna, applikationsservrar etc.

Cachen finns i subversion och heter SymmetricJgroupsCacheStrategy. Enklaste sättet att se hur man använder den är att titta i Testcaset PlainCacheTest och kolla hur metoden “testDistributedDisk” är uppbyggd.

symmetricdisk1.jpg

Tags: cache, distributed, symmetric
Postad i cache | No Comments »

Copyright © 2007 Tailsweep AB

Tailsweep development Blog is proudly powered by WordPress
Entries (RSS) and Comments (RSS).