MogileFS - rozproszony system plików dla aplikacji webowych

MogileFS to rozproszony system plików od Danga Interactive stworzony na potrzeby składowania plików statycznych w aplikacjach webowych. Używany jest m.in. na Digg, LiveJournal, czy Picknik.com.
  • Działa na poziomie aplikacji (bez modułu kernela)
  • Rozproszona architektura (składowiska, trakery i bazy trakerów mogą działać na różnych serwerach)
  • Automatyczna replikacja plików - pliki, bazując na ich "klasie" są automatycznie replikowane pomiędzy węzłami składowisk by uzyskać minimalną ilość replika przypisaną danej klasie. Przykładowo oryginalne zdjęcia mogą być replikowane na 3 węzłach, a miniatury na 1 czy 2, dzięki czemu oszczędza się miejsce, a utrata miniatury spowoduje tylko konieczność ponownego jej wygenerowania.
  • "Lepsze niż RAID" - dzięki replikacji plików pomiędzy urządzeniami na różnych serwerach MogileFS zapewnia ich dostępność w przypadku awarii jednego z serwerów.
  • Płaskie przestrzenie nazw - pliki są identyfikowane przez nazwane klucze w płaskiej, globalnej przestrzeni nazw. Możesz tworzyć dowolną ilość przestrzeni nazw umożliwiając aplikacjom o potencjalnie konfliktujących nazwach kluczy działać na jednej instancji MogileFS.
  • Niezależne od lokalnego systemu plików - węzły składowisk mogą wykorzystywać dowolne systemy plików jak ext3, czy XFS. MogileFS samo zadba o odpowiednią obsługę struktury katalogów, tak by nie przekroczyć limitów plików i katalogów na katalog.

Jak to działa

Całym systemem zarządzają trakery (jeden lub więcej) przetrzymujące swoje dane w bazie MySQL. Odpowiedzialne są one także za replikowanie, dodawanie nowych plików do węzłów składowania, czy zwracanie wszystkich URLi dla danego pliku.

Konfiguracja MogileFS

Skonfigurowanie MogileFS wymaga skonfigurowania i odpalenia trakera jak i węzłów składowania, którymi będzie zarządzał. Wymaga to trochę prac administratorskich na (najlepiej) kilku serwerach. Poniżej zbiór przepisów konfiguracji znalezionych w sieci:

Obsługa Trakerów w PHP

Dla PHP istnieje binarne rozszerzenie na pecl.php.net, które kompilujemy standardowo:
phpize
./configure
make
make install
Nastepnie do php.ini dodajemy:
extension=mogilefs.so;
Poniżej przykładowe wykorzystanie API trakera MogileFS (z prezentacji "all the little pieces - distributed systems with PHP")
<?php
$hosts = array('172.10.1.1', '172.10.1.2');
$m = new File_Mogile($hosts, 'profiles');
$m->storeFile('user1234', 'image',
              '/tmp/image1234.jpg');
...
$paths = $m->getPaths('user1234');
W sieci dostępna jest dokumentacja tego rozszerzenia.

Obsługa Trakerów w Pythonie

W przypadku Pythona dostępna jest jest biblioteka mogilefs.py zapewniająca obsługę trakerów, jak i biblioteka MogileLocal posiadająca zgodne API z mogilefs.py, lecz nie wykorzystująca MogileFS (zamiast tego lokalny system plików), którą można wykorzystać do testów, lub w mniejszych projektach (nie wymaga konfiguracji całej infrastruktury MogileFS). W sieci dostępny jest także opis jak wykorzystać ten system plików w Django - mogileFS for Django.
RkBlog

Aplikacje i dystrybucje, 11 October 2009

Comment article
Comment article RkBlog main page Search RSS Contact