Facebook avalikustab uue allika juhtimissüsteemi Sapling

Facebook (Vene Föderatsioonis keelatud) avaldas Saplingi allikakontrolli süsteemi, mida kasutati ettevõttesiseste projektide väljatöötamisel. Süsteemi eesmärk on pakkuda tuttavat versioonihaldusliidest, mida saab skaleerida väga suurte hoidlate jaoks, mis hõlmavad kümneid miljoneid faile, kohustusi ja harusid. Kliendikood on kirjutatud Pythonis ja Rustis ning on avatud GPLv2 litsentsi all.

Eraldi on välja töötatud serveriosa tõhusaks kaugtööks hoidlatega ja virtuaalne failisüsteem hoidla osa lokaalse lõiguga töötamiseks tervikliku hoidlana (arendaja näeb kogu hoidlat, kuid ainult vajalikke andmeid, millele juurde pääseb kopeeritakse kohalikku süsteemi). Nende Facebooki infrastruktuuris kasutatavate komponentide kood pole veel avatud, kuid ettevõte on lubanud selle edaspidi avaldada. Kuid praegu leiate Saplingi hoidlast juba Mononoke serveri (Rustis) ja VFS EdenFS (C++ keeles) prototüübid. Need komponendid on valikulised ja tööks piisab Saplingi kliendist, mis toetab Git-hoidlate kloonimist, Git LFS-il põhinevate serveritega suhtlemist ja tööd Git-hostimissaitidega, nagu GitHub.

Süsteemi põhiidee seisneb selles, et kui suhelda spetsiaalse serveriosaga, mis pakub hoidla salvestusruumi, skaleeritakse kõiki toiminguid sõltuvalt arendaja töötatavas koodis tegelikult kasutatud failide arvust ja need ei sõltu kogu hoidla kogumaht. Näiteks võib arendaja kasutada ainult väikest osa väga suure hoidla koodist ja ainult see väike osa migreeritakse tema süsteemi, mitte kogu hoidla. Töökataloog täitub dünaamiliselt hoidla failidele juurdepääsu ajal, mis ühest küljest võimaldab teil oluliselt kiirendada tööd oma koodiosaga, kuid teisest küljest põhjustab uutele failidele juurdepääsu aeglustumine. esimest korda ja nõuab pidevat juurdepääsu võrgule (eraldi pakutav ja võrguühenduseta režiim kohustuste ettevalmistamiseks).

Lisaks adaptiivsele andmete laadimisele rakendab Sapling ka optimeerimisi, mille eesmärk on vähendada info laadimist koos muudatuste ajalooga (näiteks Linuxi tuumaga hoidlas on 3/4 andmetest muudatuste ajalugu). Muudatuste ajalooga tõhusaks töötamiseks salvestatakse sellega seotud andmed segmenteeritud esituses, mis võimaldab teil serverist alla laadida täitmisgraafiku üksikuid osi. Klient saab küsida serverilt infot mitme commit vahelise seose kohta ja laadida alla vaid vajaliku osa graafikust.

Projekti on arendatud viimase 10 aasta jooksul ja see loodi probleemide lahendamiseks väga suurtele monoliitsetele hoidlatele juurdepääsu korraldamisel ühe põhiharuga, mis kasutas ühendamise asemel "rebase" operatsiooni. Sel ajal ei olnud avatud lahendusi selliste hoidlatega töötamiseks ja Facebooki insenerid otsustasid luua uue, ettevõtte vajadustele vastava versioonihaldussüsteemi, selle asemel, et jagada projekte väikesteks hoidlateks, mis tooks kaasa selle keerukuse. sõltuvushaldus (omal ajal lõi Microsoft sarnase probleemi lahendamiseks GVFS-i kihi). Algselt kasutas Facebook Mercuriali süsteemi ja esimeses etapis Mercuriali täiendusena välja töötatud projekti Sapling. Aja jooksul muutus süsteem iseseisvaks projektiks, millel oli oma protokoll, salvestusvorming ja algoritmid, mida laiendati ka võimalusega suhelda Git-hoidlatega.

Tööks pakutakse käsurea utiliiti “sl”, mis rakendab tüüpilisi kontseptsioone, töövooge ja Giti ja Mercuriali tundvatele arendajatele tuttavat liidest. Saplingi terminoloogia ja käsud erinevad pisut Gitist ja on Mercurialile lähedasemad. Näiteks harude asemel kasutatakse “järjehoidjaid” (nimega harusid ei toetata), vaikimisi ei laadita klooni/tõmbe käivitamisel mitte tervet hoidlat, vaid ainult põhiharu, kohustuste eelmärkimist ei toimu ( lavastusala), "git fetch" asemel kasutatakse käsku "sl" pull", "git pull" asemel - "sl pull -rebase", "git checkout COMMIT" asemel - "sl goto COMMIT", mitte "git reflog" - "sl journal", muudatuse tühistamiseks "git checkout - FILE" asemel on määratud "sl revert FILE" ja "." kasutatakse haru "HEAD" tuvastamiseks. Aga üldiselt on säilinud harude ja klooni/tõmba/tõuke/commit/rebase operatsioonide üldised mõisted.

Saplingi tööriistakomplekti lisafunktsioonide hulgast torkab silma “smartlogi” tugi, mis võimaldab visuaalselt hinnata oma hoidla olekut, tõsta esile kõige olulisemat teavet ja filtreerida välja ebaolulised detailid. Näiteks kui käivitate utiliidi sl ilma argumentideta, kuvatakse ekraanil ainult teie enda kohalikud muudatused (muud on minimeeritud), näidatakse väliste harude olekut, muudetud faile ja sisseviidude uusi versioone. Lisaks pakutakse interaktiivset veebiliidest, mis võimaldab kiiresti nutikas logis navigeerida, puud muuta ja kohustusi teha.

Facebook avalikustab uue allika juhtimissüsteemi Sapling

Veel üks Saplingi märkimisväärne edasiminek on see, et see muudab vigade parandamise ja lahendamise ning endisele olekule naasmise lihtsamaks. Näiteks pakutakse paljude toimingute tagasipööramiseks käske "sl undo", "sl redo", "sl uncommit" ja "sl unamend", käske "sl hide" ja "sl unhide" kasutatakse kohustuste ajutiseks peitmiseks; ja interaktiivseks navigeerimiseks läbi vanade olekute ja naasmiseks määratud punkti käsuga “sl undo -i käsk”. Sapling toetab ka kinnistamisvirna kontseptsiooni, mis võimaldab teil korraldada samm-sammult ülevaatusi, jagades keerukad funktsionaalsused väiksemateks, arusaadavamateks järkjärgulisteks muudatusteks (alates põhiraamistikust kuni lõpetatud funktsioonini).

Saplingi jaoks on ette valmistatud mitmeid täiendusi, sealhulgas ReviewStacki liides muudatuste ülevaatamiseks (kood GPLv2 all), mis võimaldab töödelda tõmbetaotlusi GitHubis ja kasutada muudatuste virnavaadet. Lisaks on avaldatud täiendusi integreerimiseks VSCode ja TextMate redaktoritega ning ISL (Interactive SmartLog) liidese ja serveri juurutamiseks.

Allikas: opennet.ru

Lisa kommentaar