Google File System
Google File System (GFS) je distribuovaný souborový systém navržený pro spolehlivé ukládání velkých zřídka přepisovaných souborů na velké množství nespolehlivých jednotek. Je používán pro ukládání dat v počítačových systémech společnosti Google.
Vývojář | |
---|---|
První vydání | 2003 |
Operační systém | Linux |
Některá data mohou pocházet z datové položky. |
Mezi klíčové odlišnosti od požadavků na běžné souborové systémy (mezi něž lze v tomto ohledu zařadit i „tradiční“ distribuované souborové systémy, jako je AFS nebo CODA) patří:
- Nutnost průběžně monitorovat stav jednotlivých uzlů a zotavovat se z jejich selhání
- Schopnost uložit miliony souborů, velikostí typicky přesahující 100 MB. Několikagigabajtové soubory jsou časté, a proto musí být zpracovávány efektivně. Malé soubory je též nutno ukládat, ale není třeba pro ně systém optimalizovat.
- Obvyklé operace se soubory zahrnují sekvenční čtení několika stovek kB dat, nebo náhodný přístup na pár kB na určitém místě. Zápisy se převážně skládají z přidávání na konec souboru. Soubory jsou málokdy přepisovány; malé zápisy dovnitř souboru jsou podporovány, ale nemusí být efektivní.
- Naproti tomu atomické zápisy na konec souboru jsou klíčové, protože soubory mohou být často využívány jako fronty mezi producentem a konzumentem nebo pro slučování dat z více zdrojů.
GFS poskytuje obvyklé rozhraní pro přístup k souborům, přestože neimplementuje žádné obvyklé API (jako je např. POSIX pro připojení jako svazek na unixové systémy). Soubory jsou hierarchicky organizovány v adresářích a identifikovány cestami. GFS podporuje obvyklé operace create, delete, open, close, read a write, ale navíc i snapshot (pro rychlé vytvoření kopie souboru nebo stromu podadresářů – řešeno pomocí copy on write) a record append (pro současný zápis více klientů na konec souboru, garantující atomicitu).
Architektura
GFS cluster se skládá z jednoho tzv. master serveru a většího počtu chunkserverů, na nichž jsou uložena vlastní data. Soubory jsou rozděleny do tzv. chunků (kusů) pevné délky 64 MB. Každý chunk je identifikován 64bitovým číslem, které je mu přiřazeno master serverem v okamžiku vytvoření. Chunkservery chunky lokálně skladují jako běžné linuxové soubory, a čtou a zapisují data na základě požadavků specifikovaných číslem chunku a rozsahem. Kvůli spolehlivosti je každý chunk uložen na několika (standardně třech) místech zároveň.
Master server spravuje veškerá metadata (jmenný prostor, údaje o přístupových právech, mapování souborů na chunky a aktuální umístění chunků), „půjčuje” chunky klientům a zajišťuje mazání osiřelých chunků a migraci chunků mezi servery. Také pravidelně kontroluje každý chunkserver, zda je online a reaguje na zprávy.
Z důvodu jednoduššího návrhu architektury je master server pouze jeden. Aby se nestal úzkým místem, nejsou žádné operace s daty prováděny skrz něj – klientu pouze sděluje, jaké chunkservery mají žádaná data. Klient si tyto informace cachuje, takže po nějakou dobu může fungovat zcela bez interakce s master serverem. Spolehlivost systému je posílena záložním master serverem.
Při selhání zápisů GFS negarantuje konzistenci (různí klienti mohou vidět různá data), při současném zápisu více klientů sice výsledek bude konzistentní, ale nedefinovaný (všichni klienti uvidí stejná data, ta ale nemusí být shodná s žádnou ze zapisovaných kopií).
Po sérii úspěšných zápisů GFS garantuje integritu dat, tzn. že změněná oblast bude konzistentní a bude obsahovat data z posledního zápisu. To je zajištěno aplikováním změn ve stejném pořadí na všechny repliky. GFS také používá verzování k detekci zastaralých kopií chunků, které nemohly být aktualizovány, protože jejich server byl v klíčových okamžicích mimo provoz. Takové repliky nikdy nejsou nabízeny klientům a jsou při nejbližší příležitosti mazány. (Klient ovšem může mít informaci o takové replice ve vlastní mezipaměti – takové informace se vymažou při nejbližším otevření souboru.)
Data mohou být také poškozena selháním hardwaru. Nefunkční chunkservery jsou odhalovány při pravidelných kontrolách master serverem, poškození dat se ověřuje pomocí kontrolních součtů. Když je objeven problém, data jsou obnovena z nepoškozených replik. Chunk je nevratně ztracen pouze pokud jsou všechny jeho repliky poškozeny dřív, než GoogleFS stihne zareagovat.
Při aktualizaci souborů master server „zapůjčí” chunk jedné z replik, která se pak označuje jako primární. Primární replika zachycuje pořadí všech změn chunku, které jsou pak ve stejném pořadí opakovány i na ostatních replikách.