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.
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.
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:
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.
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.
- Dodane: 11.10.2009 przez riklaunim