Facebook predstavuje nový systém riadenia zdrojov Sapling

Facebook (zakázaný v Ruskej federácii) zverejnil systém kontroly zdroja Sapling, používaný pri vývoji vnútropodnikových projektov. Cieľom systému je poskytnúť známe rozhranie na správu verzií, ktoré je možné škálovať pre veľmi veľké úložiská zahŕňajúce desiatky miliónov súborov, potvrdení a vetiev. Klientsky kód je napísaný v jazykoch Python a Rust a je otvorený pod licenciou GPLv2.

Samostatne bola vyvinutá serverová časť pre efektívnu vzdialenú prácu s repozitármi a virtuálny súborový systém pre prácu s lokálnym rezom časti repozitára ako kompletné repozitár (vývojár vidí celý repozitár, ale len požadované dáta, ku ktorým má prístup sa skopíruje do lokálneho systému). Kód pre tieto komponenty používané v infraštruktúre Facebooku ešte nie je otvorený, no spoločnosť prisľúbila, že ho v budúcnosti zverejní. V súčasnosti však v repozitári Sapling už nájdete prototypy servera Mononoke (v Ruste) a VFS EdenFS (v C++). Tieto komponenty sú voliteľné a na fungovanie stačí klient Sapling, ktorý podporuje klonovanie repozitárov Git, interakciu so servermi založenými na Git LFS a prácu s hostiteľskými webmi git, ako je GitHub.

Hlavnou myšlienkou systému je, že pri interakcii so špeciálnou časťou servera, ktorá poskytuje úložisko úložiska, sú všetky operácie škálované v závislosti od počtu súborov skutočne použitých v kóde, na ktorom vývojár pracuje, a nezávisia od celková veľkosť celého úložiska. Vývojár môže napríklad použiť iba malú časť kódu z veľmi veľkého úložiska a do jeho systému bude migrovaná iba táto malá časť, nie celé úložisko. Pracovný adresár sa napĺňa dynamicky pri prístupe k súborom z úložiska, čo vám na jednej strane umožňuje výrazne urýchliť prácu s vašou časťou kódu, no na druhej strane vedie k spomaleniu prístupu k novým súborom pre prvýkrát a vyžaduje neustály prístup k sieti (samostatne poskytovaný a offline režim na prípravu odovzdania).

Sapling okrem adaptívneho načítania dát implementuje aj optimalizácie zamerané na zníženie zaťaženia informácií históriou zmien (napr. 3/4 dát v úložisku s linuxovým jadrom tvorí história zmien). Pre efektívnu prácu s históriou zmien sú s ňou spojené údaje uložené v segmentovanej reprezentácii, ktorá vám umožňuje stiahnuť jednotlivé časti komitačného grafu zo servera. Klient si môže vyžiadať informácie zo servera o vzťahu medzi viacerými commitmi a stiahnuť si len potrebnú časť grafu.

Projekt sa vyvíjal posledných 10 rokov a bol vytvorený s cieľom vyriešiť problémy pri organizovaní prístupu k veľmi veľkým monolitickým úložiskám s jednou hlavnou vetvou, ktorá namiesto „zlúčenia“ používala operáciu „rebase“. V tom čase neexistovali žiadne otvorené riešenia pre prácu s takýmito úložiskami a inžinieri Facebooku sa rozhodli vytvoriť nový systém správy verzií, ktorý by vyhovoval potrebám spoločnosti, namiesto delenia projektov na malé úložiská, čo by viedlo k zložitosti správa závislostí (na vyriešenie podobného problému spoločnosť Microsoft naraz vytvorila vrstvu GVFS). Facebook spočiatku používal systém Mercurial a projekt Sapling, ktorý sa v prvej fáze vyvinul ako doplnok k Mercurial. Postupom času sa systém pretransformoval na nezávislý projekt s vlastným protokolom, formátom úložiska a algoritmami, ktorý bol rozšírený aj o možnosť interakcie s repozitármi Git.

Na prácu sa ponúka nástroj príkazového riadka „sl“, ktorý implementuje typické koncepty, pracovné postupy a rozhranie známe vývojárom, ktorí poznajú Git a Mercurial. Terminológia a príkazy v Sapling sa mierne líšia od Gitu a sú bližšie k Mercurialu. Napríklad namiesto vetiev sa používajú „záložky“ (pomenované vetvy nie sú podporované), štandardne sa pri vykonávaní clone/pull nenačítava celé úložisko, ale iba hlavná vetva, nedochádza k predbežnému označovaniu odovzdaní ( staging area), namiesto „git fetch“ sa používa príkaz „sl“ pull, namiesto „git pull“ - „sl pull -rebase“, namiesto „git checkout COMMIT“ - „sl goto COMMIT“, namiesto "git reflog" - "sl journal", na zrušenie zmeny namiesto "git checkout - FILE" je zadaný "sl revert FILE" a "." sa používa na identifikáciu vetvy "HEAD". Vo všeobecnosti sú však všeobecné koncepty vetiev a operácií klonovania/ťahania/tlačenia/potvrdenia/rebase zachované.

Medzi ďalšie funkcie sady nástrojov Sapling vyniká podpora pre „smartlog“, ktorý vám umožňuje vizuálne posúdiť stav vášho úložiska, zvýrazniť najdôležitejšie informácie a odfiltrovať nedôležité detaily. Napríklad, keď spustíte utilitu sl bez argumentov, na obrazovke sa zobrazia iba vaše vlastné lokálne zmeny (ostatné sú minimalizované), zobrazí sa stav externých vetiev, zmenené súbory a nové verzie potvrdení. Okrem toho je ponúkané interaktívne webové rozhranie, ktoré umožňuje rýchlu navigáciu cez inteligentný protokol, strom zmien a potvrdenia.

Facebook predstavuje nový systém riadenia zdrojov Sapling

Ďalším významným vylepšením v Sapling je to, že uľahčuje opravu a riešenie chýb a návrat do predchádzajúceho stavu. Napríklad príkazy „sl undo“, „sl redo“, „sl uncommit“ a „sl unamend“ sa ponúkajú na vrátenie mnohých operácií, príkazy „sl hide“ a „sl unhide“ sa používajú na dočasné skrytie odovzdania; a pre interaktívnu navigáciu starými stavmi a návrat do určeného bodu pomocou príkazu „sl undo -i command“. Sapling tiež podporuje koncept zásobníka odovzdania, ktorý vám umožňuje organizovať prehľady krok za krokom rozdelením zložitých funkcií na súbor menších, zrozumiteľnejších prírastkových zmien (od základného rámca po hotovú funkciu).

Pre Sapling bolo pripravených niekoľko doplnkov, vrátane rozhrania ReviewStack na kontrolu zmien (kód pod GPLv2), ktoré umožňuje spracovávať požiadavky na stiahnutie na GitHub a používať zásobníkové zobrazenie zmien. Okrem toho boli zverejnené doplnky pre integráciu s editormi VSCode a TextMate, ako aj implementáciu rozhrania a servera ISL (Interactive SmartLog).

Zdroj: opennet.ru

Pridať komentár