Caut o soluție de sistem de fișiere distribuit/sistem de fișiere de rețea care poate fi utilizată în următorul scenariu:
- Am un Docker Swarm cu multe gazde, dar fiecare gazdă este în esență autonomă și nu arată deloc diferit de orice altă gazdă. Le folosim doar pentru scalare. Aceasta înseamnă că fiecare gazdă rulează toți lucrătorii necesari pentru ca sistemul să funcționeze și, în mod ideal, o sarcină care intră în sistem rulează complet pe gazda care a pornit-o prima dată.
- Există mai mulți pași pentru procesarea unei sarcini. Fiecare pas generează un fișier mare în intervalul 1-10 GB. În primul rând, lucrătorii de pe fiecare gazdă vor lucra numai pe fișiere care sunt deja stocate local.
- Cu toate acestea, uneori, o gazdă poate fi suprasolicitată și vreau ca lucrătorii din altă gazdă să preia etapele de procesare rămase. Pentru a realiza acest lucru, am nevoie ca fișierele să fie stocate într-un volum partajat pe care lucrătorii din alte gazde să îl poată utiliza în mod transparent pentru a accesa fișierele stocate pe o altă gazdă.
Cu alte cuvinte: Fiecare gazdă va avea același „volum de rețea” montat într-un loc și conține câteva fișiere care sunt de fapt stocate pe gazda curentă (aceste fișiere sunt în primul rând relevante) și unele fișiere care sunt stocate pe o altă gazdă. Cu toate acestea, lucrătorii vor accesa în mare parte (90-95% din ori) fișiere care sunt locale pentru gazda lor.
Nu am nevoie de replicare (fișierele sunt relevante doar pentru 30-60 de minute și după aceea oricum nu mai sunt necesare) și în mod specific nu doresc un depozit central.
Debitul în sistem este măsurat mai degrabă în minute pe sarcină și nu în sarcini pe secundă. Există puține fișiere mari, mai degrabă decât multe fișiere mici. De asemenea, fișierele sunt scrise o dată și citite doar o dată sau de două ori.
Există o soluție bună pentru asta? M-am uitat la GlusterFS
, EdgeFS
, Sistemul de fișiere interplanetare
, Ceph
și altele, dar niciuna nu părea a fi alegerea potrivită.