No history yet

Architektura a Haystack

Problém miliard malých souborů

Tradiční souborové systémy fungují skvěle, dokud je nepostavíte před specifický úkol: uložit a spravovat miliardy malých souborů, jako jsou fotky, profilové obrázky nebo miniatury. Každý soubor, bez ohledu na jeho velikost, s sebou nese metadata – informace o tom, kdo je vlastníkem, kdy byl vytvořen a kde přesně na disku leží. Když máte miliardy souborů, tato metadata se stávají obrovskou zátěží. Vyhledání jediného malého souboru může vyžadovat několik operací čtení z disku jen pro získání jeho metadat, což drasticky zpomaluje systém.

Představte si to jako knihovnu, kde každé jednotlivé slovo v každé knize má svůj vlastní katalogový lístek. Najít jedinou větu by bylo noční můrou. Přesně tento problém řešil Facebook na konci první dekády 21. století, když potřeboval efektivně ukládat desítky miliard fotografií. Jejich řešení, popsané v dokumentu nazvaném Haystack, se stalo základem pro SeaweedFS.

Svazky místo souborů

Základní myšlenka Haystacku, a tedy i SeaweedFS, je geniálně jednoduchá: přestaňte spravovat malé soubory jednotlivě. Místo toho je spojte do velkých, předem alokovaných souborů zvaných svazky (volumes). Svazek je v podstatě velký kontejner, typicky několik gigabajtů, do kterého se malé soubory (v terminologii SeaweedFS nazývané objekty nebo jehly, z anglického needles) jednoduše připojují jeden za druhým. Tím se drasticky snižuje počet souborů, které musí spravovat operační systém, a s tím i množství metadat.

Lesson image

Tento přístup mění pravidla hry. Místo milionů malých souborů má souborový systém na disku jen několik tisíc velkých svazků. Veškerá komplexnost správy jednotlivých objektů se přesouvá z operačního systému přímo do logiky SeaweedFS.

Magie přístupu O(1)

Hlavní výhodou tohoto designu je extrémně rychlý přístup k datům. SeaweedFS dosahuje přístupové doby, která je matematicky označována jako O(1)O(1). To znamená, že doba potřebná k načtení souboru nezávisí na celkovém počtu souborů v systému. Ať už máte tisíc souborů nebo deset miliard, načtení konkrétního souboru trvá v podstatě stejně dlouho. Jak je to možné?

Tajemství spočívá v rozdělení rolí a chytré identifikaci souborů. Když nahrajete soubor, SeaweedFS vám vrátí unikátní identifikátor, který se skládá ze tří částí: ID svazku, klíče souboru a náhodného „cookie“ pro bezpečnost.

Role v systému jsou jasně rozděleny:

  • Master Server: Tento server je mozkem operace, ale s minimální zátěží. Drží v paměti pouze metadata o svazcích – který server spravuje který svazek. Nedrží žádné informace o miliardách jednotlivých souborů. Díky tomu mu stačí velmi málo paměti a nikdy se nestane úzkým hrdlem.

  • Volume Server: Toto jsou pracovní koně. Na jejich discích jsou uloženy samotné soubory svazků. Když přijde požadavek na čtení souboru, Volume server použije klíč souboru (který je v podstatě offsetem) k provedení jediné operace vyhledávání na disku (disk seek) a okamžitě začne číst data.

Proces načtení souboru je tedy dvoufázový: klient se nejprve zeptá Master serveru: „Kde najdu svazek 3?“. Master odpoví: „Na Volume serveru B na adrese X“. Klient se poté připojí přímo na Volume server B a řekne: „Dej mi data ze svazku 3 na pozici Y“. A je to. Dva síťové dotazy a jedno čtení z disku.

Blob storage vs. Filer

Základní vrstva, kterou jsme právě popsali – tedy Master a Volume servery – tvoří to, co se nazývá Blob Storage (neboli objektové úložiště). Ukládá „bloby“ (Binary Large Objects) dat bez jakékoliv hierarchie. Každý objekt má svůj unikátní identifikátor, ale neexistuje zde koncept adresářů nebo složek. Je to jako skladiště plné očíslovaných krabic bez jakýchkoliv regálů.

Blob storage je optimalizována na rychlost a škálovatelnost. Adresářová struktura je nadbytečná zátěž, kterou v této vrstvě nechceme.

Pro mnoho aplikací je to dostačující. Často si ID souboru uložíte do vlastní databáze vedle dalších informací o uživateli nebo produktu. Ale co když potřebujete procházet soubory jako v běžném souborovém systému, s adresáři a podsložkami? K tomu slouží další, volitelná komponenta: Filer.

Filer je služba, která běží nad Master a Volume servery a poskytuje hierarchickou adresářovou strukturu. Ukládá metadata o souborech a adresářích (např. cesta/k/souboru.jpg) a mapuje je na identifikátory v blob storage vrstvě. Filer vám dává to nejlepší z obou světů: pohodlí tradičního souborového systému s neuvěřitelnou rychlostí a škálovatelností objektového úložiště pod kapotou.

Quiz Questions 1/6

Jaký je hlavní problém tradičních souborových systémů při správě miliard malých souborů?

Quiz Questions 2/6

Jaký je základní princip, kterým SeaweedFS řeší problém s malými soubory?

Pochopení této základní architektury je klíčem k efektivnímu nasazení a používání SeaweedFS. Oddělení správy metadat svazků a souborů umožňuje systému škálovat na prakticky neomezený počet souborů s konstantním výkonem.