SeaweedFS: paskirstyta failų sistema

Kas yra SeaweedFS ir kodėl turėtumėte apie jį žinoti

Failų saugojimo pasaulyje dominuoja keli dideli žaidėjai – Amazon S3, Google Cloud Storage, Azure Blob Storage. Bet kas, jei sakau, kad egzistuoja open-source alternatyva, kuri gali veikti jūsų serveriuose ir suteikti panašų funkcionalumą? Susipažinkite su SeaweedFS – distribuota failų sistema, kuri per pastaruosius kelerius metus tyliai, bet užtikrintai įsitvirtino tarp įrankių, kuriuos renkasi IT profesionalai, susiduriančius su didelių duomenų kiekių saugojimo iššūkiais.

SeaweedFS nėra eilinė failų sistema. Tai gerai apgalvota architektūra, sukurta saugoti milijardus failų efektyviai ir greitai. Jei kada nors kūrėte sistemą, kuri turėjo tvarkyti vartotojų įkeltas nuotraukas, video failus ar bet kokį kitą didelį kiekį objektų, žinote, kad tradicinės failų sistemos greitai pasiekia savo ribas. Būtent čia SeaweedFS atskleidžia savo tikrąją vertę.

Projektas pradėtas Chris Lu 2013 metais kaip atsakas į realias problemas, su kuriomis jis susidūrė dirbdamas su dideliais failų kiekiais. Nuo to laiko sistema išaugo į brandų produktą su aktyvią bendruomenę ir įspūdingą funkcionalumą. Kas svarbiausia – ji išlieka paprasta naudoti, nepaisant savo galimybių.

Architektūra, kuri veikia kitaip nei tikitės

Dauguma tradicinių failų sistemų naudoja hierarchinę struktūrą su direktorijomis ir failais. SeaweedFS pasirinko kitą kelią – ji naudoja objektų saugojimo modelį, panašų į S3, bet su savo unikaliais sprendimais. Sistemos šerdyje yra du pagrindiniai komponentai: Master serveris ir Volume serveriai.

Master serveris atlieka koordinatoriaus vaidmenį. Jis žino, kur yra kiekvienas failas, tvarko volume serverių registraciją ir paskirstymą, bet pats nesaugo jokių failų duomenų. Tai labai svarbus architektūrinis sprendimas – Master serveris gali būti lengvas ir greitas, nes jam nereikia tvarkyti sunkių I/O operacijų.

Volume serveriai yra tie, kurie faktiškai saugo jūsų duomenis. Kiekvienas volume serveris gali turėti kelis „volumes” – tai konteineriai, kuriuose saugomi failai. Vienas volume gali saugoti milijonus failų, o kiekvienas failas identifikuojamas unikaliu ID. Štai čia ir slypi genialumas – vietoj to, kad kiekvienam failui būtų kuriamas atskiras failas diske (kas sukeltų milžinišką metadata apkrovą), SeaweedFS surenka kelis failus į vieną didesnį failą volume viduje.

Kai įkeliate failą, Master serveris paskirsto jam ID ir nurodo, kuriame volume serveryje jis bus saugomas. Grąžinamas unikalus URL, kurį galite naudoti failui pasiekti. Pavyzdžiui: `http://localhost:8080/3,01637037d6`. Čia „3” yra volume ID, o „01637037d6” yra failo ID volume viduje. Paprasta, efektyvu, greita.

Diegimas ir pirmieji žingsniai

Vienas iš dalykų, kurie man labiausiai patinka SeaweedFS, yra jo paprastumas pradėti naudoti. Nereikia sudėtingų konfigūracijų ar ilgų setup procesų. Atsisiuntę vieną binarinį failą, galite paleisti visą sistemą viena komanda.

Paprasčiausias būdas išbandyti SeaweedFS yra paleisti jį „standalone” režimu. Tai puikiai tinka vystymo aplinkai ar mažesnėms sistemoms:

„`bash
./weed server -dir=./data
„`

Ši komanda paleidžia Master serverį, Volume serverį ir net Filer komponentą (apie jį vėliau) viename procese. Per kelias sekundes turite veikiančią distribuotą failų sistemą. Numatytai Master serveris klausosi 9333 porte, o Volume serveris – 8080.

Produkcinėje aplinkoje norėsite atskirti komponentus. Pirmiausia paleiskite Master serverį:

„`bash
./weed master -port=9333
„`

Tada paleiskite kelis Volume serverius skirtinguose serveriuose:

„`bash
./weed volume -port=8080 -dir=./data -max=100 -mserver=”master-server:9333″
„`

Parametras `-max=100` nurodo maksimalų volume’ų skaičių, kurį šis serveris gali turėti. Galite koreguoti šį skaičių priklausomai nuo turimos vietos ir poreikių.

Replikacija ir duomenų saugumas

Duomenų praradimas yra košmaras bet kuriam sistemų administratoriui ar developeriui. SeaweedFS siūlo kelias replikacijos strategijas, kurios leidžia jums pasirinkti tinkamą balansą tarp saugumo ir saugojimo kaštų.

Replikacijos strategija nurodoma kuriant volume. Pavyzdžiui, `001` reiškia vieną repliką – jūsų duomenys saugomi dviejose vietose (originalas + viena kopija). `010` reiškia replikavimą skirtinguose serveriuose tame pačiame duomenų centre. `100` reiškia replikavimą skirtinguose duomenų centruose.

Galite kombinuoti šias strategijas. Pavyzdžiui, `200` sukurtų dvi kopijas skirtinguose duomenų centruose, o kiekvienas duomenų centras turėtų po vieną kopiją. Tai suteikia aukštą atsparumą gedimams, bet ir padidina saugojimo kaštus.

Praktiškai, daugelis sistemų naudoja `001` strategiją kaip minimalų saugumo lygį. Tai reiškia, kad net jei vienas serveris sugenda, jūsų duomenys išlieka prieinami iš kito serverio. SeaweedFS automatiškai nukreipia užklausas į veikiančią repliką, jei viena tampa nepasiekiama.

Svarbu suprasti, kad replikacija vyksta sinchroniškai rašymo metu. Kai įkeliate failą su replikacijos strategija `001`, sistema įrašo duomenis į abu serverius prieš grąžindama sėkmingą atsakymą. Tai garantuoja duomenų vientisumą, bet gali šiek tiek sulėtinti rašymo operacijas.

Filer: failų sistemos abstrakcija

Nors pagrindinis SeaweedFS API yra objektų orientuotas (panašus į S3), kartais norite turėti tradicinę failų sistemos struktūrą su direktorijomis ir keliais. Čia į sceną įžengia Filer komponentas.

Filer suteikia POSIX-panašią sąsają virš SeaweedFS objektų saugyklos. Galite kurti direktorijas, perkelti failus, naudoti simbolines nuorodas – visa tai, ko tikitės iš normalios failų sistemos. Bet po gaubtu viskas vis tiek saugoma kaip objektai Volume serveriuose.

Filer naudoja metadata saugyklą, kad sektų direktorijų struktūrą ir failų atributus. Galite pasirinkti iš kelių metadata backend’ų: LevelDB, MySQL, PostgreSQL, Redis, Cassandra ir kiti. Mažesnėms sistemoms LevelDB puikiai veikia, bet didesnėms produkcinėms aplinkoms rekomenduočiau naudoti MySQL ar PostgreSQL dėl geresnio patikimumo ir backup galimybių.

Filer taip pat suteikia WebDAV ir S3 API sąsajas. Tai reiškia, kad galite prijungti SeaweedFS kaip tinklo diską Windows ar macOS sistemose naudodami WebDAV, arba naudoti jį kaip S3 alternatyvą su jau esamomis aplikacijomis, kurios palaiko S3 protokolą.

Praktinis pavyzdys – jei kuriate foto dalijimosi aplikaciją, galite naudoti Filer API, kad organizuotumėte nuotraukas pagal vartotojus ir albumus:

„`
/users/john/photos/vacation/beach.jpg
/users/jane/photos/family/birthday.jpg
„`

Bet faktiškai šios nuotraukos saugomos kaip objektai su efektyviu ID sistemoje, o Filer tik palaiko šią hierarchinę iliuziją.

Performance optimizacijos ir best practices

SeaweedFS iš karto veikia gerai, bet yra keletas dalykų, kuriuos turėtumėte žinoti, kad išspaudžius maksimalų našumą.

Pirma, suprantate volume dydžio svarbą. Numatytai vienas volume gali būti iki 30GB dydžio. Kai volume užsipildo, jis tampa „read-only” ir sistema sukuria naują volume naujiems failams. Jei saugote daug mažų failų, galite sumažinti volume dydį, kad geriau paskirstytumėte apkrovą. Jei saugote didelius failus, galite padidinti volume dydį.

Antra, naudokite CDN ar caching sluoksnį prieš SeaweedFS. Nors sistema greita, tiesioginis prieigos prie Volume serverių iš interneto nėra idealus sprendimas. Nginx ar Varnish priekyje gali drastiškai sumažinti apkrovą ir pagerinti atsakymo laikus galutiniams vartotojams.

Trečia, jei saugote daug labai mažų failų (kelių kilobaitų), apsvarstykite jų grupavimą. SeaweedFS turi „collection” koncepciją, kuri leidžia logiškai grupuoti susijusius failus. Tai padeda geriau organizuoti duomenis ir optimizuoti saugojimą.

Ketvirta, monitoringas yra kritinis. SeaweedFS teikia metrikas Prometheus formatu, kurias galite lengvai integruoti į savo monitoring stack’ą. Stebėkite volume užpildymą, disk I/O, tinklo pralaidumą ir atsakymo laikus. Tai padės jums numatyti problemas prieš joms tampant kritinėmis.

Penkta, planuokite savo replikacijos strategiją atsižvelgdami į jūsų poreikius. Daugiau replikų reiškia didesnį saugumą, bet ir didesnius kaštus. Jei saugote laikinus failus ar duomenis, kuriuos galite lengvai atkurti, galbūt pakaks ir be replikacijos. Jei tai kritiniai verslo duomenys, investuokite į tinkamą replikaciją.

Integracijos galimybės ir ekosistema

Vienas iš SeaweedFS privalumų yra jo suderinamumas su esamomis technologijomis ir įrankiais. S3 API palaikymas reiškia, kad daugelis bibliotekų ir įrankių, sukurtų darbui su Amazon S3, veiks ir su SeaweedFS be jokių modifikacijų.

Pavyzdžiui, galite naudoti AWS CLI su SeaweedFS:

„`bash
aws –endpoint-url http://localhost:8333 s3 ls s3://mybucket/
„`

Arba populiarias programavimo kalbų bibliotekas kaip boto3 Python’e ar AWS SDK Java’je. Tiesiog nurodykite custom endpoint’ą, ir viskas veiks.

Kubernetes integracija taip pat yra puiki. Yra oficialus Helm chart, kuris leidžia lengvai deploy’inti SeaweedFS klasterį Kubernetes aplinkoje. Galite naudoti SeaweedFS kaip persistent storage backend’ą savo aplikacijoms, veikiančioms konteineriuose.

Docker vartotojams yra oficialūs image’ai Docker Hub’e. Galite paleisti visą sistemą naudodami docker-compose per kelias minutes. Tai puikus būdas išbandyti sistemą ar net naudoti ją mažesnėse produkcinėse aplinkose.

SeaweedFS taip pat palaiko FUSE mount’ą, leidžiantį prijungti distribuotą failų sistemą kaip lokalų katalogą Linux sistemose. Tai naudinga, kai turite legacy aplikacijas, kurios tikisi tradicinės failų sistemos, bet norite pasinaudoti SeaweedFS privalumais.

Realūs panaudojimo atvejai ir patirtis

Teorija yra puiku, bet kaip SeaweedFS veikia realiame gyvenime? Per pastaruosius metus mačiau įvairių įmonių ir projektų, sėkmingai naudojančių šią sistemą.

Vienas įdomus atvejis yra video streaming platforma, kuri naudoja SeaweedFS saugoti milijonus video failų ir thumbnail’ų. Jie pradėjo su S3, bet kaštai augo eksponenciškai. Perjungus į SeaweedFS savo serveriuose, jie sumažino saugojimo kaštus 70%, išlaikydami panašų ar net geresnį našumą dėl geografinio artumo.

Kitas pavyzdys – IoT įmonė, kuri renka duomenis iš tūkstančių sensorių. Jie naudoja SeaweedFS kaip time-series duomenų saugyklą, kur kiekvienas sensorių duomenų paketas saugomas kaip atskiras objektas. Sistema lengvai tvarko milijonus rašymo operacijų per dieną, o Filer komponentas leidžia jiems organizuoti duomenis pagal laiką ir sensorių tipus.

Mažesnės įmonės naudoja SeaweedFS kaip backup sprendimą. Vietoj mokėjimo už cloud storage, jie stato savo SeaweedFS klasterį su keliais pigiais serveriais ir pasiekia puikų patikimumą už daug mažesnę kainą.

Žinoma, ne viskas visada būna rožėmis. Viena kompanija susidūrė su problemomis, kai jų Master serveris tapo bottleneck’u dėl per didelio užklausų skaičiaus. Sprendimas buvo paprastas – įdiegti Master serverio replikaciją ir load balancer’į priekyje. Po to sistema veikė sklandžiai net piko apkrovos metu.

Ką reikia žinoti prieš pradedant naudoti

SeaweedFS nėra stebuklingas sprendimas visoms problemoms. Yra situacijų, kur jis puikiai tinka, ir situacijų, kur galbūt turėtumėte apsvarstyti alternatyvas.

Jei jūsų sistema generuoja labai didelį kiekį mažų failų (pavyzdžiui, log failai ar metrika duomenys), SeaweedFS gali būti per didelis hammer’is mažam vinukui. Specializuotos time-series duomenų bazės kaip InfluxDB ar TimescaleDB gali būti tinkamesnis pasirinkimas.

Jei jums reikia sudėtingų užklausų galimybių ar transakcijų, tradicinė duomenų bazė bus geresnis pasirinkimas. SeaweedFS yra skirtas saugoti ir grąžinti failus, ne atlikti sudėtingą duomenų analizę.

Taip pat turėkite omenyje, kad nors SeaweedFS yra brandus projektas, jo komanda yra mažesnė nei didžiųjų cloud provider’ių. Jei kažkas negerai, neturėsite 24/7 enterprise support’o (nebent mokate už komercinį palaikymą). Bet bendruomenė yra aktyvi ir paslaugi, o dokumentacija nuolat tobulėja.

Saugumas yra dar viena sritis, kurią turite apgalvoti. SeaweedFS palaiko TLS šifravimą ir JWT autentifikaciją, bet jums reikės tai teisingai sukonfigūruoti. Nepalikite savo SeaweedFS klasterio atviro internete be tinkamos apsaugos – tai kvietimas problemoms.

Backup strategija taip pat svarbi. Nors replikacija apsaugo nuo serverio gedimų, ji neapsaugo nuo klaidų ar tyčinių duomenų ištrynimų. Turėkite reguliarius backup’us į atskirą sistemą. SeaweedFS palaiko snapshot’us, kurie gali palengvinti šį procesą.

Žvilgsnis į ateitį ir galutinės mintys

Distribuotų failų sistemų pasaulis nuolat keičiasi, ir SeaweedFS nekliūva vietoje. Projekto roadmap’e matome įdomių dalykų: geresnė Kubernetes integracija, erasure coding palaikymas (kuris leis efektyviau saugoti duomenis su mažesniu redundancy overhead’u), ir dar geresnė S3 API suderinamumas.

Bet kas mane labiausiai džiugina, tai bendruomenės augimas. Vis daugiau įmonių renkasi SeaweedFS kaip alternatyvą brangiems cloud storage sprendimams. Tai reiškia daugiau contributions, daugiau testing’o, ir galiausiai – stabilesnį ir funkcionalesnį produktą.

Ar turėtumėte naudoti SeaweedFS? Jei kuriate sistemą, kuri turi tvarkyti didelius kiekius failų, ir norite kontroliuoti savo infrastruktūrą bei kaštus, tai tikrai vertas apsvarstymo variantas. Pradėkite su mažu proof-of-concept projektu, išbandykite su savo workload’u, ir pažiūrėkite, kaip jis veikia.

Technologijų pasaulyje nėra vieno teisingų atsakymo. SeaweedFS nėra tobulas, bet tai solidus, gerai suprojektuotas įrankis, kuris sprendžia realias problemas. Jei jūsų poreikiai atitinka jo stipriąsias puses, galite sutaupyti daug pinigų ir galvos skausmo, palyginti su kitais sprendimais. O jei ne – bent jau išmokote kažką naujo apie distribuotų sistemų dizainą ir architektūrą. Tai jau yra vertinga pati savaime.

Daugiau

DNS per HTTPS konfigūravimas