13. 5. 2008

Je libo replikovaný filesystem?

Rozhodli jsme se zvednout další pokličku v naší vývojářské kuchyni. Otestujte SeznamFS.

První myšlenky na něco takového jsme vedli asi před půl rokem v hospodě U Žíznivého jelena v Praze na Smíchově. Nutno podotknout, že to byly velice filozofické debaty :), jak to tak už u piva bývá. Konkrétní podobu tomu dal až čas, konzultace a příspěvky na vnitrofiremním diskusním fóru.

Jako Open Source existuje sice celá řada systémů (Coda, GlusterFS), které by se určitě taky daly použít, ale z nějakého důvodu se nám jakékoliv jiné řešení zdálo buď zbytečně složité, nevýkonné, nebo síťově moc ukecané.

A tak se stalo, že se jeden krásný víkend Eda (jeden z členů mého týmu) tak nudil, že se do toho prostě pustil a v pondělí přinesl do práce první funkční prototyp. Nakonec to dotáhl až do konce, ještě to chtělo hodně ladění, ale výsledek je asi přesně to, co jsme čekali.

Co to vlastně je a jak to funguje? Jedná se o replikovaný filesystem postavený na Filesystem in Userspace, zkráceně FUSE. Stačí tedy na jakémkoliv Unixovém počítači s modulem fuse připojit nový filesystem a SeznamFS se bude starat o to, aby všechny operace v tomto bodě zapisovaly do binárního logu. Základní filozofie je v podstatě okopírovaná z MySQL master master replikace databází.

Binární log obsahuje všechno, co je důležité pro repliku filesystemu do jakéhokoliv jiného umístění. Všechny operace (touch, mv, rm, ln, chmod, chown …) v něm lze nalézt a samozřejmě i všechna zapsaná data. Systém je postaven na master-slave komunikaci. Každá instance systému může sloužit jako master a zároveň si může stahovat data z jednoho master systému. Hlavní síla celého řešení je v tom, že lze zapisovat do několika míst najednou, typicky na dva různé počítače, mezi kterými existuje TCP spojení a SeznamFS se postará o zreplikování souboru na druhou stranu. Další velkou výhodou je to, že se při změně nepřenáší celý soubor, ale jenom změněný blok na filesystemu a pak samozřejmě jednoduchá instalace a konfigurace.

Data, která se zapisují do mount pointu, se přesunují na klasický filesystem (EXT3, nebo cokoliv jiného do jakéhosi Storage adresáře), který máte nainstalovaný na počítači a jsou dostupná v nezměněné podobě. Zápisové i čtecí operace se tedy provádějí v mount pointu a pokud je potřeba číst ze systému opravdu hodně, dá se pro tento účel storage adresář bez problémů použít.

Pro administraci celého systému slouží jednak konfigurace, a druhak se da použít konzole v příkazovém řádku, ve které je možno i měnit část konfigurace a hlavně zadávat přikazy nutné pro správu systému.

Projekt má svou vlastní webovku s perfektní dokumentací na http://seznamfs.sourceforge.net/.

První projekt na kterém jsme SeznamFS vyzkoušeli je www.sport.cz pro replikaci obrázků a videí. Plánujeme nasazení na www.novinky.cz a taky na www.seznam.cz pro distribuci uživatelských favicon a dalších věcí.

A nakonec něco pro fajnšmekry. SeznamFS je napsaný v C++, síťově a v binlogu je Big Endian, to znamená, že replikace je možná i mezi souborovými systémy na různých platformách.

'Zdeněk
Zdeněk