MogileFS - rozproszony system plików dla aplikacji webowych
11 October 2009
Comments
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:- Tutorial na MogileFS Wiki
- MogileFS HOWTO
- Setting Up MogileFS for RHEL 5.2 x86_64
- Setting up high availability storage with MogileFS
Obsługa Trakerów w PHP
Dla PHP istnieje binarne rozszerzenie na pecl.php.net, które kompilujemy standardowo:phpize ./configure make make install
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');
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
Comment article