Facebook představuje nový systém řízení zdrojů Sapling

Facebook (zakázaný v Ruské federaci) zveřejnil systém řízení zdrojů Sapling, používaný při vývoji vnitropodnikových projektů. Cílem systému je poskytnout známé rozhraní pro správu verzí, které lze škálovat pro velmi velká úložiště zahrnující desítky milionů souborů, potvrzení a větví. Klientský kód je napsán v Pythonu a Rustu a je otevřen pod licencí GPLv2.

Samostatně byla vyvinuta serverová část pro efektivní vzdálenou práci s repozitáři a virtuální souborový systém pro práci s lokální částí části repozitáře jako kompletní repozitář (vývojář vidí celý repozitář, ale pouze požadovaná data, ke kterým se přistupuje se zkopíruje do místního systému). Kód pro tyto komponenty používané v infrastruktuře Facebooku ještě není otevřený, ale společnost slíbila, že jej v budoucnu zveřejní. V současné době však v úložišti Sapling již najdete prototypy serveru Mononoke (v Rustu) a VFS EdenFS (v C++). Tyto komponenty jsou volitelné a pro práci stačí klient Sapling, který podporuje klonování repozitářů Git, interakci se servery založenými na Git LFS a práci s weby git hosting, jako je GitHub.

Hlavní myšlenkou systému je, že při interakci se speciální serverovou částí, která poskytuje úložiště úložiště, jsou všechny operace škálovány v závislosti na počtu souborů skutečně použitých v kódu, na kterém vývojář pracuje, a nejsou závislé na celková velikost celého úložiště. Vývojář může například použít pouze malou část kódu z velmi velkého úložiště a do jeho systému bude migrována pouze tato malá část, nikoli celé úložiště. Pracovní adresář se plní dynamicky při přístupu k souborům z úložiště, což na jednu stranu umožňuje výrazně urychlit práci s vaší částí kódu, na druhou stranu však vede ke zpomalení přístupu k novým souborům pro poprvé a vyžaduje neustálý přístup k síti (samostatně poskytovaný a offline režim pro přípravu odevzdání).

Kromě adaptivního načítání dat implementuje Sapling také optimalizace zaměřené na snížení zatěžování informací historií změn (např. 3/4 dat v úložišti s linuxovým jádrem tvoří historie změn). Pro efektivní práci s historií změn jsou data s ní spojená ukládána v segmentované reprezentaci, která umožňuje stahovat jednotlivé části commit grafu ze serveru. Klient si může ze serveru vyžádat informace o vztahu mezi několika commity a stáhnout si pouze nezbytnou část grafu.

Projekt se vyvíjel posledních 10 let a byl vytvořen za účelem řešení problémů při organizování přístupu k velmi velkým monolitickým úložištím s jednou hlavní větví, která používala operaci „rebase“ namísto „sloučení“. V té době neexistovala žádná otevřená řešení pro práci s takovými repozitáři a inženýři Facebooku se rozhodli vytvořit nový systém správy verzí, který by vyhovoval potřebám společnosti, namísto rozdělování projektů do malých úložišť, což by vedlo ke složitosti správa závislostí (najednou společnost Microsoft pro vyřešení podobného problému vytvořila vrstvu GVFS). Zpočátku Facebook používal systém Mercurial a projekt Sapling v první fázi vyvinutý jako doplněk k Mercurial. Postupem času se systém proměnil v nezávislý projekt s vlastním protokolem, formátem úložiště a algoritmy, který byl také rozšířen o možnost interakce s repozitáři Git.

Pro práci se nabízí nástroj příkazového řádku „sl“, který implementuje typické koncepty, pracovní postupy a rozhraní známé vývojářům obeznámeným s Git a Mercurial. Terminologie a příkazy v Sapling se mírně liší od Gitu a jsou bližší Mercurialu. Například místo větví se používají „záložky“ (pojmenované větve nejsou podporovány), ve výchozím nastavení se při provádění clone/pull nenačítá celé úložiště, ale pouze hlavní větev, nedochází k předběžnému označování commitů ( staging area), místo „git fetch“ je použit příkaz „sl“ pull“, místo „git pull“ - „sl pull -rebase“, místo „git checkout COMMIT“ - „sl goto COMMIT“, namísto "git reflog" - "sl journal", pro zrušení změny místo "git checkout - FILE" je zadáno "sl revert FILE" a "." se používá k identifikaci větve "HEAD". Ale obecně platí, že obecné koncepty větví a operací klonování/pull/push/commit/rebase jsou zachovány.

Mezi dalšími funkcemi sady nástrojů Sapling vyniká podpora pro „smartlog“, který vám umožňuje vizuálně posoudit stav vašeho úložiště, zvýraznit nejdůležitější informace a odfiltrovat nedůležité detaily. Když například spustíte obslužný program sl bez argumentů, na obrazovce se zobrazí pouze vaše vlastní lokální změny (ostatní jsou minimalizovány), zobrazí se stav externích větví, změněné soubory a nové verze odevzdání. Navíc je nabízeno interaktivní webové rozhraní, které umožňuje rychlou navigaci v inteligentním protokolu, strom změn a potvrzení.

Facebook představuje nový systém řízení zdrojů Sapling

Dalším významným vylepšením Sapling je to, že usnadňuje opravu a řešení chyb a návrat do předchozího stavu. Například příkazy „sl undo“, „sl redo“, „sl uncommit“ a „sl unamend“ jsou nabízeny pro vrácení mnoha operací, příkazy „sl hide“ a „sl unhide“ se používají k dočasnému skrytí odevzdání; a pro interaktivní navigaci starými stavy a návrat do určeného bodu příkazem „sl undo -i command“. Sapling také podporuje koncept zásobníku odevzdání, který vám umožňuje organizovat recenze krok za krokem rozdělením komplexní funkčnosti na sadu menších, srozumitelnějších postupných změn (od základního rámce po hotovou funkci).

Pro Sapling bylo připraveno několik doplňků, včetně rozhraní ReviewStack pro kontrolu změn (kód pod GPLv2), které umožňuje zpracovávat žádosti o stažení na GitHubu a používat zásobníkové zobrazení změn. Kromě toho byly publikovány doplňky pro integraci s editory VSCode a TextMate a také implementaci rozhraní a serveru ISL (Interactive SmartLog).

Zdroj: opennet.ru

Přidat komentář