Monorepo vs Multi-Repo: Kod deposu stratejisinin artıları ve eksileri
GIT aracılığıyla kodu barındırmak ve yönetmek için iki ana strateji vardır: Monorepo vs Multi-Repo. Her iki yaklaşımın da artıları ve eksileri vardır.
Ücretsiz demoyu deneyin
Herhangi bir dilde herhangi bir kod tabanı için yaklaşımlardan birini kullanabiliriz. Bu stratejilerden birini binlerce kişiye kadar birkaç kütüphane içeren projeler için kullanabilirsiniz. Birkaç ekip üyesi veya yüzlerce veya açık veya özel bir kaynak kodu barındırmak istiyorsanız bile, yine de çeşitli faktörlere göre monorepo veya multi-repo kullanabilirsiniz. Her yaklaşımın avantajları ve dezavantajları nelerdir? Ne zaman bir tane kullanmalıyız? Hadi bulalım!
Repo nedir? Repo (depo için kısa), bir projenin tüm değişiklikleri ve dosyaları için depolama alanıdır ve geliştiricilerin geliştirme aşamasında proje varlık sürümünü “kontrol etmesini” sağlar. Genellikle git deposuna atıfta bulunuruz (Github, GitLab veya Bitbucket tarafından sağlandığı gibi), ancak bu kavram diğer sürüm kontrol sistemleri (Mercurial gibi) için de geçerlidir. GIT: Monorepo yaklaşımı ve çoklu repo yaklaşımı yoluyla kod tabanımızı yayınlamak ve yönetmek için iki ana strateji vardır. Her birini bu kılavuzda keşfedin yan Tweet için tıklayın
Monorepo nedir? Monorepo yaklaşımı, şirket projelerini derleyen çeşitli kütüphaneler veya hizmetler için tüm kodları karşılamak için tek bir depo kullanır. En uç, bir şirketin kod tabanı çeşitli projeleri kapsar ve bir depoda barındırılan farklı dillerde kodlanmıştır. Monorepo’nun tüm kod tabanlarını bir depoda barındıran avantajları aşağıdaki avantajları sağlar. Engelleri azaltma Yeni personel bir şirket için çalışmaya başladığında, kodu indirmeleri ve ödevlerini yapmaya başlamak için gereken araçları yüklemeleri gerekir. Örneğin, proje her biri kurulum talimatları ve ekipmanları olan birçok depoda yayılmıştır. Bu durumda, başlangıç ayarları karmaşık olacak ve daha sık belgeler tamamlanmayacak, bu yeni ekip üyesinin yardım almak için meslektaşlarıyla iletişime geçmesini gerektiriyor. Monorepo sorunu basitleştiriyor. Tüm kodları ve belgeleri içeren bir yer olduğundan, ilk hazırlığı basitleştirebilirsiniz. Kod Yönetimi Kodu, tüm kodların tüm geliştiricilere görünürlüğünü sağlayan merkezi bir depoya sahiptir. Bu, kod yönetimini basitleştirir, çünkü uygulamanın yaşam döngüsü boyunca tüm sorunları görmek için tek bir sorun izleyici kullanabiliriz. Örneğin, sorunlar bağımlı kütüphanede hatalı iki (veya daha fazla) çocuk kütüphanesini içerdiğinde bu özellikler değerlidir. Bazı depolarla, sorunun meydana geldiği bir kod bulmak zor olabilir.
Buna ek olarak, sorunlar yaratmak için hangi depoların kullanılacağını bulmamız ve daha sonra sorunların çözülmesine yardımcı olmak için diğer ekip üyelerine çapraz etiketler davet etmemiz ve vermemiz gerekir. Bununla birlikte, Monorepo ile kod sorunları bulmak ve sorunları çözmek için işbirliği yapmak daha kolay hale gelir. Tüm uygulamaların ağrı olmadan yeniden düzenlenmesi Uygulama boyunca bir kod yeniden aktarırken bazı kütüphaneler etkilenecektir. Bazı depolar aracılığıyla gönderirseniz, birbirleriyle eşzamanlı kalması için tüm farklı gerilme isteklerini yönetmek zor olabilir. Monorepo, tüm kütüphaneler için tüm kodlarda tüm değişiklikleri yapmayı ve bunları tek bir gerilme isteği altında göndermeyi kolaylaştırır. Monorepo’ya yakın işlevselliği yok etmek daha zordur, her değiştirilmiş kütüphane olduğunda tüm kütüphanelerin çalışması için tüm testleri ayarlayabiliriz. Sonuç olarak, çeşitli kütüphanelerde değişiklik yapma olasılığı diğer kütüphaneler üzerindeki kötü etkileri en aza indirmiştir. Geliştirme kültürünü paylaşan ekip, Monorepo yaklaşımı ile imkansız olmasa da, farklı takımlar arasında benzersiz alt kültürlere ilham vermek için bir zorluktur. Aynı depoyu paylaşacakları için, büyük olasılıkla aynı yönetim programlamasını ve metodolojisini paylaşacak ve aynı geliştirme araçlarını kullanacaklardır.
Tüm kodlarımız için bir depo kullanan Monorepo yaklaşımıyla ilgili sorunların birkaç zayıflığı vardır. Geliştirme döngüsü, kütüphanelerin kodu ihlal değişiklikleri içerdiğinde, bağımlı kütüphanelerin başarısız olmasını sağladığında, değişiklikleri birleştirmeden önce kod geliştirilmelidir. Bu kütüphane, diğer görevleri yapmakla meşgul olan ve testi ihlal eden ve geçen değişiklikleri önlemek için kodlarını uyarlamamayı (veya isteyen) diğer ekiplere bağlısa, yeni özelliklerin geliştirilmesi durdurulabilir. Dahası, proje sadece şirketin en sonundaki ekibin hızı ile ilerlemeye başlayabilir. Bu sonuçlar en hızlı ekip üyelerini hayal kırıklığına uğratabilir ve şirketten ayrılmak istedikleri koşullar yaratabilir. Ayrıca, kütüphanenin diğer tüm kütüphaneler için testler yapması da gerekir. Ne kadar çok test gerçekleştirilirse, çalıştırmak için daha fazla zaman gereklidir, kodumuzu ne kadar hızlı tekrarlayabileceğimizi yavaşlatır. Monorepo bir şirket için tüm kodları içerdiğinde, tüm kod tabanının indirilmesini gerektirir, gigabayt verileri içeren çok büyük olabilir. İçinde yayınlanan herhangi bir kütüphaneye katkıda bulunmak için, herkesin tüm deponun indirilmesi gerekir. Büyük bir kod tabanıyla uğraşmak, sabit diskimizde kötü alan kullanımı ve onunla daha yavaş etkileşimler anlamına gelir. Örneğin, Regex ile Durum Git’i çalıştırma veya kod tabanında arama gibi günlük işlemler, birkaç repodan birkaç saniye hatta dakika daha uzun sürebilir.
Monorepo’yu işaretlediğimizde, düzensiz kütüphane yeni olabilir, içindeki tüm kodlara yeni bir etiket verilir. Bu eylem yeni bir sürümü tetiklerse, depoda yayınlanan tüm kütüphaneler, etiketin sayı sürümü ile yeni yayınlanacaktır, ancak bu kütüphanelerin çoğunda herhangi bir değişiklik olmayabilir. Forking, açık kaynaklı projelerin katkıda bulunanların dahil olmasını kolaylaştırması daha zordur. Bazı depolarla, katkıda bulunanlar katkıda bulunmak istedikleri proje için doğrudan özel depoya gidebilirler. Bununla birlikte, çeşitli projeleri barındıran Monorepo ile, katkıda bulunanlar önce doğru projeye giden yollarını gezdirmeli ve katkılarının diğer tüm projeleri nasıl etkileyebileceğini anlamalıdır. Çok repo nedir? Multi-repo yaklaşımı, şirket tarafından geliştirilen projelerden çeşitli kütüphanelere veya hizmetlere ev sahipliği yapmak için birkaç depo kullanır. En uç, deposunun altında yeniden kullanılabilen veya bağımsız işlevselliği (mikro hizmet gibi) her minimum ayar kodu barındıracaktır. Her kütüphaneyi diğerlerinden bağımsız olarak barındıran Multi-repo’nun faydaları birçok fayda sağlar. Bağımsız Kütüphane sürümü Depoyu işaretlerken, kodun tüm tabanına “yeni” bir etiket verilir. Yalnızca depodaki belirli kütüphanelerin kodu olduğu için, kütüphaneler başka bir yerde yayınlanan diğer tüm kütüphanelerden etiketlenebilir ve bağımsız olarak saptırılabilir.
Her kütüphane için bağımsız bir sürüme sahip olmak, uygulamalar için bağımlılık ağacının belirlenmesine yardımcı olur, kullanılacak her kütüphanenin sürümünü yapılandırmamızı sağlar. Depo, yalnızca bir dizi hizmet için kodlar içerdiğinden ve başka bir şey olmadığı için, bağımsız hizmetlerin yayınlanması, ona erişen uygulamada yapılan ilerlemeye bakılmaksızın, kendi uygulamasının bir döngüsüne sahip olabilir. Hizmetler, sürdürülebilir nakliye (tüm testleri geçtikten sonra yeni kodların uygulandığı yerlerde) gibi hızlı sürüm döngülerini kullanabilir. Erişim hizmetlerine sahip bazı kütüphaneler, haftada bir kez yeni sürümler ürettiği için daha yavaş bir sürüm döngüsü kullanabilir. Kuruluş genelinde erişim kontrolünü belirlemeye yardımcı olur Yalnızca, ilgili depolara eklenmesi ve kodlarını indirmesi gereken kütüphanelerin geliştirilmesiyle ilgili ekip üyeleri. Sonuç olarak, uygulamadaki her katman için örtük bir erişim kontrol stratejisi vardır. Kütüphane ile ilgilenenlere düzenleme hakları verilecek ve herkes depoya erişemeyebilir. Veya okuma hakkı verilebilir, ancak düzenleme hakkı verilmez. Ekibin otonom olarak çalışmasına izin verir, ekip üyeleri kütüphane mimarisi tasarlayabilir ve kodlarını diğer tüm takımlardan ayrı olarak uygulayabilir. Birkaç ekibin veya harici uygulamanın özel gereksinimlerinden etkilenmeden kütüphanenin genel bağlamda ne yaptığına bağlı olarak kararlar alabilirler. Bültenlere kaydolabilirler.
Trafiğimizi%1000’den fazla nasıl artırdığımızı bilmek ister misiniz?Haftalık bültenimizi içerideki WordPress insanlar hakkında ipuçlarıyla alan 20.000’den fazla insana katılın!
Birkaç depo kullanan çok repo yaklaşımıyla ilgili sorunlar çeşitli sorunlara neden olabilir. Kütüphane, yayınlanan değişiklikler içeren kütüphanenin yeni sürümü, bu kütüphaneye bağlı kütüphanelerin en son sürümü kullanmaya başlamak için uyarlanması gerektiğinde senkronize edilmeye devam etmelidir. Kütüphane serbest bırakma döngüsü bağımlı kütüphaneden daha hızlıysa, hızla birbirleriyle senkronize olabilirler. Ekip, diğer takımlardan en son sürümü kullanmaya devam etmelidir. Farklı takımların farklı öncelikleri olduğu göz önüne alındığında, bunun bazen elde edilmesinin zor olduğu kanıtlanmıştır. Sonuç olarak, yetişemeyen bir ekip hala modası geçmiş bağımlı kütüphane versiyonunu kullanabilir. Bu sonuçların uygulamalar (güvenlik, hız ve diğer hususlar açısından) için etkileri olacaktır ve kütüphane boyunca geliştirmedeki boşluklar sadece daha geniş olabilir. Mayıs Fragment Ekibi Farklı takımların etkileşime girmesi gerekmediğinde, kendi silolarında çalışabilirler. Uzun vadede bu, ekibin farklı programlama metodolojileri veya yönetim kullanma veya farklı geliştirme cihazları kullanma gibi şirket içinde alt kültürlerini üretmesine neden olabilir. Bazı ekip üyelerinin nihayet farklı bir takımda çalışması gerekiyorsa, biraz kültürel bir sürpriz yaşayabilir ve işlerini yapmanın yeni yollarını öğrenebilirler. Monorepo vs Multi-Repo: İki yaklaşım arasındaki temel fark nihayetinde aynı hedefi ele alır:
Kod tabanını yönetme. Bu nedenle, her ikisi de serbest bırakma yönetimi, ekip üyeleri arasında işbirliğini teşvik etmek, sorunlarla başa çıkmak, testler ve diğerleri gibi aynı zorlukları tamamlamalıdır. Ekip üyeleriyle birlikte karar vermek için zamanlarıyla ilgili temel farkları: hem Monorepo için önceden hem de Multi-Reca için telefonda. Bu fikri daha ayrıntılı olarak analiz edelim. Tüm kütüphaneler multi-repo’daki sapmadan bağımsız olduğundan, kütüphaneleri ihlal eden değişikliklerle serbest bırakan ekip, yeni ana sürüm numarasını en son sürüme ayarlayarak güvenli bir şekilde yapabilir. Diğer gruplar bağımlı kütüphanelerinin hala eski sürümü kullanmasını ve kodları uyarlandıktan sonra yenilerini kullanmasını sağlayabilir. Bu yaklaşım, diğer tüm kütüphaneleri ne zaman sorumlu, herhangi bir zamanda yapabilecek her takıma uyarlanacağına karar vermektedir. Geç yaparlarsa ve yeni kütüphane sürümü yayınlanırsa, kütüphane arasındaki boşluğu kapatma zorlaşacaktır. Sonuç olarak, bir takım kodlarında hızlı ve sıklıkla tekrarlanabilirken, diğer takımlar sonunda farklı bir kütüphane üretmek için yetişemeyebilir. Öte yandan, Monorepo ortamında, bir kütüphanenin diğer birkaç kütüphaneye zarar veren yeni bir versiyonunu yayınlayamayız çünkü test başarısız olacaktır. Bu durumda, ilk takım değişime girmek için ikinci takımla iletişim kurmalıdır. Bu yaklaşım, ekibi bir kütüphane için bir değişiklik yapılması gerektiğinde tüm kütüphaneleri uyarlamaya zorlar. Tüm takımlar birbirleriyle konuşmak ve ortak bir çözüme ulaşmaya zorlanır.
Cevaplar olmadan Standard’ın altında WordPress Seviye 1 barındırma desteği ile sıkıldı mı? Birinci sınıf destek ekibimizi deneyin! Planımıza bakın, ilk ekip istedikleri kadar hızlı tekrarlayamayacak, ancak tüm farklı kütüphanelerdeki kod sapmaya başlamayacak. Kısacası, çok repo yaklaşımı, çevik olan bağımsız ekibin hızlarıyla çıktı üretebileceği ekipler arasında “hızlı hareket eden bir kültür yaratmaya ve birçok şeyi çözmeye” yardımcı olabilir. Tersine, Monorepo yaklaşımı, takımın sadece sorunlarla başa çıkmak için geride bırakılmaması gereken farkındalık ve bakım kültürünü desteklemektedir. Çok repo veya monorepo yaklaşımı kullanmaya karar veremediğimizde, hibrit olmayan yaklaşım, ayrıca bazı depoları kullanmak ve senkronize tutmak için bazı araçları kullanmak, Monorepo’ya benzetmesini ancak daha fazlası ile bir yaklaşım vardır. esneklik. Meta bu araçlardan biridir. Bu, alt dizin altındaki birkaç depo düzenler ve aynı komutları aynı anda çalıştıran komut satırının bir satırını sağlar. Meta-Remote, hangi deponun bir proje oluşturduğu hakkında bilgi içerir. Bu depoyu Meta aracılığıyla klonlamak, daha sonra gerekli tüm depoları yineleyecek şekilde klonlayacak ve yeni ekip üyelerinin projeleri üzerinde çalışmaya başlamasını kolaylaştıracak. Meta-Remote ve bazı belirtilen repoları klonlamak için aşağıdakileri çalıştırmalıyız: Meta Git klonu [Meta Repo URL] Meta, her depo için git klonunu yürütecek ve alt klasöre yerleştirecektir:
Bir meta projeyi klonlama. (Görüntü kaynağı: github.com/mateodelnorte/meta) O zamandan beri, Meta Exec komutunu çalıştırmak her alt klasördeki komutu çalıştıracaktır. Örneğin, her depoda Git Checkut Master’ı çalıştırmak şu şekilde yapılır: Meta Exec “Git Checkout Master” Mono-Pol AS YAKLAŞIM Başka bir yaklaşım, geliştirme için Monorepo aracılığıyla kodu yönetmektir, ancak her kütüphane kodunu bağımsız deposuna kopyalamaktır. yayma. Bu strateji PHP ekosisteminde yaygındır, çünkü paketçi (ana besteci deposu) bir genel depo URL’sini bir paket yayınlamak için gerektirir ve paketin deponun alt yapısında bulunduğunu göstermek mümkün değildir. Paketçinin sınırlamaları göz önüne alındığında, PHP projesi hala geliştirme için Monorepo’yu kullanabilir, ancak dağıtım için çok repo yaklaşımı kullanmalıdır. Bu dönüşümü elde etmek için, komut dosyasını Git Subtree Split ile çalıştırabilir veya aynı mantığı çalıştıran mevcut araçlardan birini kullanabiliriz:
Git alt bölüm ayırıcı
Git alt
Monorepo Split için Github Eylem
Monorepo vs Multi-Repo kullanan Monorepo yaklaşımı gibi çeşitli büyük teknoloji şirketlerini kullanırken, diğerleri çok repo yöntemini kullanmaya karar verdiler. Google, Facebook, Twitter ve Uber, Monorepo yaklaşımını açıkça garanti ediyor. Microsoft, Windows işletim sistemi kaynak kodunu barındırmak için gezegendeki en büyük Monorepo Git’i çalıştırır. Karşı tarafta, Netflix, Amazon ve Lyft çok repo yaklaşımı kullanan ünlü şirketlerdir. Hibrit poli-nono tarafında Android, Monorepo gibi yönetilen birkaç depoları güncelledi. Mono-Poly’nin hibrit tarafında Symfony, Monorepo’daki tüm bileşenlerinin kodu saklar. Github Monorepo ve Multi-Repo yaklaşımlarının asılı örnekleri olan WordPress hesaplarında Monorepo ve Multi-repo örnekleri (Symfony/Bağımlılık Enjeksiyonu ve Symfony/Olay-Dispatcher gibi) için bağımsız depolara ayırdılar. WordPress blok editörü Gutenberg, birkaç düzine JavaScript paketinden oluşuyor. Bu paketlerin tümü Monorepo WordPress/Gutenberg’de barındırılır ve NPM deposunda yayınlamaya yardımcı olmak için Lerna aracılığıyla yönetilir. OpenVerse, açık lisanslı medya için bir arama motoru, bağımsız depoya ana kısmı barındıran: ön uç, katalog ve yangın. Monorepo vs Multi-repo: Nasıl seçilir? Birçok geliştirme sorunu gibi, hangi yaklaşımı kullanmanız gerektiğine dair önceden belirlenmiş bir cevap yoktur. Farklı şirketler ve projeler, benzersiz koşullarına dayanarak bir stratejiden veya diğerinden yararlanacaktır, örneğin: Kodun tabanı ne kadar büyük? Gigabayt verileri içeriyor mu?
Kod tabanında kaç kişi çalışacak? 10, 100 veya 1.000 civarında mı? Kaç paket olacak? 10, 100 veya 1.000 civarında mı?
Ekibin belirli bir zamanda kaç paket yapması gerekiyor?
Farklı programlama dilleri dahil mi? Çalışmak için belirli bir yazılım yüklü veya özel donanıma ihtiyaçları var mı?
Kaç uygulama aracı gereklidir ve hazırlık ne kadar karmaşıktır?
Şirkette kültür nedir? Takım işbirliği yapmaya teşvik ediliyor mu?
Ekip hangi araçları ve teknolojiyi nasıl kullanacağını biliyordu?
Kod tabanınız için hangi yaklaşımı almalısınız? Daha fazla bilgi için burada bir özet için tıklayın Tweet Kodu barındırmak ve yönetmek için iki ana strateji vardır: Monorepo vs multi-repo. Monorepo’nun yaklaşımı, farklı kütüphaneler veya projeler ve hatta şirketten gelen tüm kodlar için bir depoda kod depolama gerektirir. Ve çok repo sistemi kodu kütüphaneler veya hizmetler gibi birimlere ayırır ve kodlarını bağımsız depolarda barındırır. Kullanılan hangi yaklaşım birçok koşula bağlıdır. Her iki stratejinin de çeşitli avantajları ve dezavantajları vardır ve bu makalede her şeyi ayrıntılı olarak tartıştık. Monorepos veya Multi-Repo hakkında sorularınız var mı? Bize yorum kısmında anlatın!