Facebook булактарды башкаруунун жаңы системасын Sapling сунуштады

Facebook (Россия Федерациясында тыюу салынган) компаниянын ички долбоорлорун иштеп чыгууда колдонулган Sapling булагы башкаруу системасын жарыялады. Система он миллиондогон файлдарды, милдеттенмелерди жана филиалдарды камтыган абдан чоң репозиторийлерди масштабдай ала турган тааныш версияны башкаруу интерфейсин камсыз кылууга багытталган. Кардардын коду Python жана Rust тилдеринде жазылган жана GPLv2 лицензиясы астында ачык.

Репозиторийлер менен натыйжалуу алыстан иштөө үчүн өзүнчө сервер компоненти жана репозиторийдин жергиликтүү бөлүгү менен толук репозиторий сыяктуу иштөө үчүн виртуалдык файл системасы иштелип чыккан (иштеп чыгуучу бүтүндөй репозиторду көрөт, бирок суралган маалыматтар гана жергиликтүү системага көчүрүлөт). Facebookтун инфраструктурасында колдонулган бул компоненттердин коду азырынча ачык булак эмес, бирок компания аны келечекте жарыялоону убада кылган. Бирок, прототиптерди Sapling репозиторийинен тапса болот. сервер Mononoke (Rust тилинде жазылган) жана VFS EdenFS (C++ тилинде жазылган). Бул компоненттер милдеттүү эмес жана Git репозиторийлерин клондоштурууну жана алар менен өз ара аракеттенүүнү колдогон Sapling кардары. серверлер Git LFSке негизделген жана GitHub сыяктуу git хостинг кызматтары менен иштейт.

Системанын негизги идеясы - репозиторийдин сакталышын камсыз кылган атайын сервер бөлүгү менен иштешкенде, бардык операциялар иштеп чыгуучу иштеп жаткан коддо иш жүзүндө колдонулган файлдардын санына жараша масштабдалат жана алардан көз каранды эмес. бүт репозиторийдин жалпы көлөмү. Мисалы, иштеп чыгуучу абдан чоң репозиторийдеги коддун кичинекей бөлүгүн гана колдоно алат жана анын тутумуна бүт репозиторий эмес, ошол кичинекей бөлүгү гана көчүрүлөт. Репозиторийден файлдарга кирүүдө жумушчу каталогу динамикалык түрдө толтурулат, бул бир жагынан коддун өз бөлүгү менен иштөөнү кыйла тездетүүгө мүмкүндүк берет, бирок экинчи жагынан, жаңы файлдарга жетүү процессинин жайлоосуна алып келет. биринчи жолу жана тармакка туруктуу кирүүнү талап кылат (милдеттенмелерди даярдоо үчүн өзүнчө берилген жана оффлайн режими).

Ыңгайлаштырылган маалыматтарды жүктөөдөн тышкары, Sapling ошондой эле өзгөрүүлөрдүн тарыхы менен маалыматты жүктөөнү кыскартууга багытталган оптималдаштырууну ишке ашырат (мисалы, Linux ядросу бар репозиторийдеги маалыматтардын 3/4 бөлүгү өзгөрүүлөрдүн тарыхы). Өзгөртүүлөрдүн тарыхы менен эффективдүү иштөө үчүн, аны менен байланышкан маалыматтар серверден тапшырма графигинин айрым бөлүктөрүн жүктөп алууга мүмкүндүк берүүчү сегменттелген өкүлчүлүктө сакталат. Кардар серверден бир нече милдеттенмелердин ортосундагы байланыш жөнүндө маалыматты сурап, графиктин керектүү бөлүгүн гана жүктөй алат.

Долбоор акыркы 10 жылдын ичинде өнүгүп келе жатат жана "бириктирүү" ордуна "кайра база" операциясын колдонгон бир башкы бутак менен өтө чоң монолиттүү репозиторийлерге кирүүнү уюштурууда көйгөйлөрдү чечүү үчүн түзүлгөн. Ал убакта мындай репозиторийлер менен иштөө үчүн ачык чечимдер болгон эмес жана Facebook инженерлери долбоорлорду чакан репозиторийлерге бөлүүнүн ордуна, компаниянын керектөөлөрүнө жооп бере турган жаңы версияны башкаруу системасын түзүүнү чечишкен, бул болсо иштин татаалдыгына алып келет. көз карандылыкты башкаруу (бир убакта ушул сыяктуу маселени чечүү үчүн Microsoft GVFS катмарын түзгөн). Башында Facebook Mercurial системасын жана биринчи этапта Mercurial кошумча катары иштелип чыккан Sapling долбоорун колдонгон. Убакыттын өтүшү менен система өзүнүн протоколу, сактоо форматы жана алгоритмдери бар көз карандысыз долбоорго айланган, ал Git репозиторийлери менен өз ара аракеттенүү мүмкүнчүлүгү менен кеңейтилген.

Жумуш үчүн типтүү концепцияларды, иштөө процесстерин жана Git жана Mercurial менен тааныш иштеп чыгуучуларга тааныш болгон интерфейсти ишке ашырган “sl” командалык сап утилитасы сунушталат. Saplingдеги терминология жана буйруктар Гиттен бир аз айырмаланып, Mercurialга жакыныраак. Мисалы, бутактардын ордуна, "кыстармалар" колдонулат (атталган бутактар ​​колдоого алынбайт), демейки боюнча, клонду/тартууну аткарганда, бүт репозиторий жүктөлбөйт, бирок негизги бутак гана, милдеттенмелердин алдын ала белгилениши жок ( staging area), "git fetch" ордуна "sl" командасы pull колдонулат, "git pull" ордуна - "sl pull -rebase", "git checkout COMMIT" ордуна - "sl goto COMMIT", ордуна "git reflog" - "sl journal", өзгөртүүнү жокко чыгаруу үчүн "git checkout - FILE" ордуна "sl revert FILE" көрсөтүлөт, ал эми "HEAD" бутагын аныктоо үчүн "." Бирок жалпысынан бутактардын жалпы түшүнүктөрү жана клон/тартуу/түртүү/милдеттүү/ребаза операциялары сакталган.

Sapling инструменттеринин кошумча мүмкүнчүлүктөрүнүн арасында репозиторийиңиздин абалын визуалдык баалоого, эң маанилүү маалыматты бөлүп көрсөтүүгө жана маанилүү эмес деталдарды чыпкалоого мүмкүндүк берген “smartlog” колдоосу өзгөчөлөнөт. Мисалы, сиз sl утилитасын аргументсиз иштеткенде, экранда өзүңүздүн жергиликтүү өзгөртүүлөрүңүз гана көрсөтүлөт (башкалары кичирейтилген), тышкы бутактардын абалы, өзгөртүлгөн файлдар жана жаңы версиялар көрсөтүлөт. Кошумчалай кетсек, интерактивдүү веб-интерфейс сунушталат, ал акылдуу журналды тез аралоого, даракты өзгөртүүгө жана милдеттенмелерди аткарууга мүмкүндүк берет.

 Facebook булактарды башкаруунун жаңы системасын Sapling сунуштады

Саплингдеги дагы бир көрүнүктүү жакшыруу - бул каталарды оңдоону жана чечүүнү жана мурунку абалына кайтарууну жеңилдетет. Мисалы, “sl undo”, “sl redo”, “sl uncommit” жана “sl unamend” көптөгөн операцияларды артка кайтаруу үчүн сунушталат, “sl hide” жана “sl unhide” буйруктары убактылуу жашыруу үчүн колдонулат; жана эски штаттар аркылуу интерактивдүү навигация үчүн жана "sl undo -i командасы" буйругу менен көрсөтүлгөн чекитке кайтыңыз. Саплинг ошондой эле татаал функцияларды кичине, түшүнүктүү кошумча өзгөрүүлөрдүн (негизги алкактан бүткөн функцияга чейин) топтомуна бөлүү аркылуу этап-этабы менен карап чыгууларды уюштурууга мүмкүндүк берүүчү commit стекти концепциясын колдойт.

Sapling үчүн бир нече толуктоолор даярдалган, анын ичинде өзгөрүүлөрдү карап чыгуу үчүн ReviewStack интерфейси (GPLv2 астындагы код), бул сизге GitHub'да тартуу сурамдарын иштеп чыгууга жана өзгөрүүлөрдүн стек көрүнүшүн колдонууга мүмкүндүк берет. Мындан тышкары, VSCode жана TextMate редакторлору менен интеграциялоо, ошондой эле ISL (Interactive SmartLog) интерфейсин жана серверин ишке ашыруу үчүн кошумчалар жарыяланды.

Source: opennet.ru