Upravljanje izvornim kodom putem Gita često se svodi na izbor između dve dominantne strategije: mono-repo i multi-repo. U ovom tekstu, detaljno istražujemo ove pristupe, ističući njihove prednosti i mane.
Uvod
Danas, većina savremenih projekata koristi Git kao osnovnu platformu za upravljanje kodom. Git je postao standard za distribuirano upravljanje izvornim kodom, kontrolu verzija i omogućava timovima da sarađuju bez obzira na geografsku lokaciju. Git se odlikuje brzinom i efikasnošću. Kada je reč o hostovanju i upravljanju Git kodom, postoje dva osnovna pristupa:
Pre nego što detaljnije proučimo ove pristupe, hajde da se upoznamo sa načinom na koji funkcioniše repozitorijum.
Šta su Repozitorijumi?
Repozitorijum (Repo) je mesto gde se čuvaju sve fascikle i datoteke koje čine vaš projekat. Takođe sadrži informacije o korisnicima, članovima tima i računarima.
Podaci u repozitorijumu su pod kontrolom verzija, što znači da se svaka izmena prati i beleži. Repozitorijum može pripadati pojedincu ili grupi ljudi.
Git je vrsta repozitorijuma. Može biti javan, privatan ili interni. GitHub je servis koji pruža hostovanje za Git repozitorijume i nudi korisnički interfejs za lakšu upotrebu.
Git nudi kontrolu verzija i mogućnost deljenja koda. Jedna od ključnih karakteristika je da programeri mogu kopirati ceo repozitorijum na svoj lokalni računar ako žele da unesu izmene. To znači da čak i ako nemaju direktan pristup za upisivanje u projekat, mogu lokalno modifikovati kod (proces poznat kao „forking“).
Kada programer želi da podeli lokalne izmene, može poslati „pull request“ vlasniku projekta.
Projekat može sadržati jednu uslugu. Međutim, ako projekat ima više tokova posla, moguće je kreirati više usluga za svaki tok. Mnogi programeri preferiraju da razdvoje veće projekte na manje, nezavisne usluge, koje obavljaju jednu ili više funkcija. Svaka usluga može rešavati različite poslovne probleme. Sa porastom popularnosti serverless okvira, funkcije postaju dostupne kao usluge.
Kada kreirate takve funkcije-kao-usluge i implementirate ih, sledeći korak je njihova organizacija i kontrola verzija. Možete smestiti sve usluge u jedan repozitorijum (mono-repo) ili imati zaseban repozitorijum za svaku uslugu (multi-repo)!
Šta je Mono-repo?
U mono-repo pristupu, sve vaše usluge se nalaze u jednom (mono) repozitorijumu. Iako su smeštene na istom mestu, svaka usluga se može nezavisno implementirati i upravljati. Usluge mogu deliti zajedničke biblioteke i kod.
Poznate kompanije kao što su Facebook, Google i Dropbox koriste mono-repo pristup.
Prednosti Mono-repo
Mono-repo pristup donosi brojne prednosti:
- Sveobuhvatan kod projekta je na jednom mestu, lako dostupan svim članovima tima.
- Olakšava ponovnu upotrebu i deljenje koda, podstičući saradnju unutar tima.
- Jednostavnije je razumeti kako promene utiču na celokupan projekat.
- Najbolja opcija za refaktorisanje i velike promene u kodu.
- Članovi tima stiču celovit uvid u projekat.
- Lakše upravljanje zavisnostima.
Nedostaci Mono-repo
Naravno, mono-repo ima i svoje nedostatke, a glavni se odnosi na performanse. Kako projekat raste i dodaje se sve više datoteka, operacije poput preuzimanja, izvlačenja i pretraživanja datoteka mogu postati sporije.
Takođe, ako angažujete veliki broj nezavisnih izvođača, davanje pristupa celoj bazi koda možda nije najsigurnije rešenje.
Dalje, implementacija kontinuirane isporuke (CD) može biti otežana, jer veliki broj ljudi može slati promene, što zahteva višestruke ponovne izgradnje u sistemu kontinuirane integracije (CI).
Velike kompanije koje koriste mono-repo pristup često imaju prilagođene alate za rešavanje problema skaliranja. Na primer, Facebook koristi prilagođeni sistem datoteka i kontrolu izvora.
Šta je Multi-repo?
U multi-repo pristupu, projekat se sastoji od više repozitorijuma, pri čemu svaki sadrži određene biblioteke i usluge. Ako dođe do izmene u jednoj usluzi, programeri moraju ponovo izgraditi samo tu uslugu, a ne ceo projekat. Pojedinci i timovi mogu raditi na svojim specifičnim uslugama i imaju pristup samo onim delovima projekta koji su im potrebni.
Kompanije kao što su Netflix i Amazon koriste multi-repo pristup.
Prednosti Multi-repo
Mnoge kompanije biraju multi-repo pristup, a neki od razloga su:
- Svaka usluga i biblioteka imaju svoje verzije.
- Promene i preuzimanja koda su mali i odvojeni, što sprečava probleme sa performansama čak i kada projekat raste.
- Timovi mogu raditi nezavisno, bez potrebe za pristupom celoj bazi koda.
- Brži razvoj i veća fleksibilnost.
- Svaka usluga se može zasebno objaviti i imati sopstveni ciklus implementacije, čime se olakšava primena CI i CD.
- Bolja kontrola pristupa – nisu svim timovima potrebna puna prava na sve biblioteke, već samo pristup za čitanje kada je to potrebno.
Nedostaci Multi-repo
- Zavisnosti i biblioteke korišćene u uslugama i projektima moraju se redovno sinhronizovati kako bi se obezbedila upotreba najnovije verzije.
- Može dovesti do izolovane kulture, dupliranja koda i situacija u kojima više timova pokušava da reši isti problem.
- Svaki tim može slediti drugačiji skup najboljih praksi, što otežava praćenje opštih standarda.
Razlike između Mono i Multi Repo
Da sumiramo ključne razlike između mono-repo i multi-repo pristupa:
Mono-repo | Multi-repo |
Sav kod svih projekata organizacije nalazi se u centralnom repozitorijumu. | Svaka usluga i projekat imaju zaseban repozitorijum. |
Timovi mogu sarađivati i videti promene koje su drugi uneli. | Timovi mogu raditi nezavisno, a promene jednog tima ne utiču na druge timove ili projekte. |
Svaki član tima ima pristup celoj strukturi projekta. | Administratori mogu ograničiti pristup projektu ili usluzi na one delove koji su programeru potrebni. |
Problemi sa skaliranjem se mogu javiti kada projekat nastavi da raste. | Dobre performanse zbog ograničene količine koda i manjih jedinica usluge. |
Implementacija kontinuirane isporuke (CD) i kontinuirane integracije (CI) može biti otežana. | Programeri mogu lakše postići CD i CI jer mogu samostalno graditi usluge. |
Programeri lako mogu deliti biblioteke, API-je i drugi uobičajen kod koji se ažuriraju u centralnom repozitorijumu. | Sve promene biblioteka i drugog zajedničkog koda moraju se periodično sinhronizovati kako bi se izbegli problemi. |
Zaključak
Mono-repo i multi-repo su podjednako popularni, a koji pristup je bolji zavisi od veličine projekta, njegovih zahteva i nivoa upravljanja verzijama i kontrole pristupa koji vam je potreban.
Mono-repo naglašava doslednost, dok se multi-repo fokusira na razdvajanje. U mono-repo-u ceo tim može videti promene koje je uneo jedan član, dok multi-repo kreira zaseban repozitorijum za svaki tim, pri čemu imaju pristup samo potrebnim uslugama. Ako želite da kombinujete prednosti mono-repo i multi-repo pristupa, možete koristiti meta alat za upravljanje više projekata i biblioteka.
Možda će vas zanimati i besplatni resursi za učenje Gita.