A Facebook bemutatta az új forrásvezérlő rendszert, a Sapling

A Facebook (az Orosz Föderációban betiltva) közzétette a Sapling forrásellenőrző rendszert, amelyet belső vállalati projektek fejlesztéséhez használnak. A rendszer célja, hogy egy ismerős verziókezelő felületet biztosítson, amely nagyon nagy, több tízmillió fájlt, véglegesítést és elágazást felölelő adattárak számára skálázható. Az ügyfélkód Python és Rust nyelven íródott, és a GPLv2 licenc alatt van nyitva.

Külön kifejlesztettek egy szerver részt a lerakatokkal való hatékony távoli munkavégzéshez és egy virtuális fájlrendszert a lerakat egy részének helyi szeletével való munkavégzéshez, mint komplett lerakat (a fejlesztő látja a teljes tárolót, de csak a szükséges adatokat átmásolódik a helyi rendszerbe). Ezeknek a Facebook infrastruktúrájában használt komponenseknek a kódja még nem nyitott, de a cég azt ígérte, hogy a jövőben közzéteszi. Jelenleg azonban a Sapling repositoryban már megtalálhatók a Mononoke szerver (Rust nyelven) és VFS EdenFS (C++ nyelven) prototípusai. Ezek az összetevők opcionálisak, és elegendő a Sapling kliens a működéshez, amely támogatja a Git-tárolók klónozását, a Git LFS-en alapuló szerverekkel való interakciót és a Git-tárhelyekkel, például a GitHub-bal való együttműködést.

A rendszer fő gondolata az, hogy amikor egy speciális szerverrésszel működik együtt, amely a tárhely tárolását biztosítja, az összes műveletet a fejlesztő által használt kódban ténylegesen használt fájlok számától függően méretezik, és nem függenek a teljes adattár teljes mérete. Például előfordulhat, hogy egy fejlesztő a kódnak csak egy kis részét használja egy nagyon nagy tárolóból, és csak ez a kis része kerül áttelepítésre a rendszerébe, nem pedig a teljes tárhely. A munkakönyvtár dinamikusan töltődik fel, ahogy a tárolóból hozzáférnek a fájlok, ami egyrészt lehetővé teszi, hogy jelentősen felgyorsítsa a kóddal végzett munkát, másrészt viszont lelassul az új fájlokhoz való hozzáféréskor. először, és folyamatos hozzáférést igényel a hálózathoz (külön biztosított és offline mód a véglegesítések előkészítéséhez).

Az adaptív adatbetöltés mellett a Sapling olyan optimalizálásokat is megvalósít, amelyek célja az információk betöltésének csökkentése a változástörténettel (például a Linux kernellel rendelkező repositoryban az adatok 3/4-e a változástörténet). A változtatások előzményeinek hatékony kezelése érdekében a hozzá tartozó adatokat szegmentált ábrázolásban tároljuk, amely lehetővé teszi a véglegesítési gráf egyes részeinek letöltését a szerverről. A kliens információkat kérhet a szervertől több commit közötti kapcsolatról, és a grafikonnak csak a szükséges részét töltheti le.

A projektet az elmúlt 10 évben fejlesztették, és azért hozták létre, hogy megoldja a problémákat a nagyon nagy monolitikus adattárak hozzáférésének megszervezése során egy főággal, amely az „egyesítés” helyett az „újrabázis” műveletet használta. Akkoriban még nem voltak nyitott megoldások az ilyen tárolókkal való munkavégzéshez, és a Facebook mérnökei úgy döntöttek, hogy a projektek kis tárolókra bontása helyett egy új verziókezelő rendszert hoznak létre, amely megfelel a vállalat igényeinek, ami a projektek bonyolultságához vezetne. függőségkezelés (egy időben egy hasonló probléma megoldására a Microsoft létrehozta a GVFS réteget). Kezdetben a Facebook a Mercurial rendszert és a Sapling projektet használta az első szakaszban, amelyet a Mercurial kiegészítéseként fejlesztettek ki. Idővel a rendszer önálló projektté alakult, saját protokollal, tárolási formátummal és algoritmusokkal, amely a Git tárolókkal való interakció lehetőségével is bővült.

A munkához egy „sl” parancssori segédprogramot kínálnak, amely tipikus koncepciókat, munkafolyamatokat és egy olyan felületet valósít meg, amelyet a Git és a Mercurial fejlesztői ismernek. A Sapling terminológiája és parancsai kissé eltérnek a Gittől, és közelebb állnak a Mercurialhoz. Például ágak helyett „könyvjelzők” használatosak (a megnevezett ágak nem támogatottak), alapértelmezés szerint a klón/lehúzás végrehajtásakor nem a teljes tároló töltődik be, hanem csak a fő ág, nincs előzetes commit-jelölés ( staging area), a „git fetch” helyett az „sl” parancsot használjuk pull”, „git pull” helyett – „sl pull -rebase”, „git checkout COMMIT” helyett – „sl goto COMMIT” helyett "git reflog" - "sl napló", a módosítás visszavonásához a "git checkout - FILE" helyett "sl revert FILE" van megadva, a "." pedig a "HEAD" ág azonosítására szolgál. De általában az elágazások és a klón/pull/push/commit/rebase műveletek általános fogalmai megmaradnak.

A Sapling eszköztár további funkciói közül kiemelkedik a „smartlog” támogatása, amely lehetővé teszi a tárhely állapotának vizuális felmérését, a legfontosabb információk kiemelését és a lényegtelen részletek kiszűrését. Ha például az sl segédprogramot argumentumok nélkül futtatja, csak a saját helyi módosításai jelennek meg a képernyőn (a többi minimálisra csökkentve), a külső ágak állapota, a megváltozott fájlok és a véglegesítések új verziói. Ezenkívül egy interaktív webes felület is elérhető, amely lehetővé teszi az intelligens naplóban való gyors navigálást, a fa megváltoztatását és a véglegesítéseket.

A Facebook bemutatta az új forrásvezérlő rendszert, a Sapling

A Sapling másik figyelemreméltó fejlesztése, hogy megkönnyíti a hibák kijavítását és megoldását, valamint a korábbi állapothoz való visszatérést. Például az „sl undo”, „sl redo”, „sl uncommit” és „sl unamend” parancsok számos művelet visszaállítására szolgálnak, az „sl hide” és „sl unhide” parancsok pedig a véglegesítések ideiglenes elrejtésére szolgálnak; valamint a régi állapotok közötti interaktív navigációhoz és a megadott ponthoz való visszatéréshez az „sl undo -i parancs” paranccsal. A Sapling támogatja a véglegesítési verem koncepcióját is, amely lehetővé teszi a lépésről lépésre történő áttekintések megszervezését azáltal, hogy az összetett funkciókat kisebb, érthetőbb növekményes változtatások sorozatára bontja (az alap keretrendszertől a kész funkcióig).

A Saplinghez több kiegészítést is készítettek, beleértve a ReviewStack felületet a változtatások áttekintésére (kód GPLv2 alatt), amely lehetővé teszi a lehívási kérelmek feldolgozását a GitHubon, és a módosítások veremnézetének használatát. Emellett megjelentek kiegészítések a VSCode és TextMate szerkesztőkkel való integrációhoz, valamint az ISL (Interactive SmartLog) felület és szerver megvalósításához.

Forrás: opennet.ru

Hozzászólás