Mono-Repo ve Çoklu Repo: Kod Deposu Stratejilerini Aydınlatmak

Yayınlanan: 2021-12-22

Mono-repo ve Multi-repo, Git aracılığıyla kodu barındırmak ve yönetmek için iki ana stratejidir. Hem stratejileri hem de artılarını ve eksilerini ayrıntılı olarak tartışıyoruz.

giriiş

Modern projelerin çoğu Git'te yönetilir ve barındırılır. Git, dünyanın her yerinden dağıtılmış kaynak kodu yönetimi, sürüm kontrolü ve işbirliği için standart platform haline geldi. Git hızlı ve verimlidir. Git kodunuzu barındırmak ve yönetmek için iki ana yaklaşım vardır:

  • mono repo
  • çoklu repo

Bu yaklaşımlara girmeden önce, repo'nun nasıl çalıştığını anlayalım.

Repolar nedir?

Bir Depo (Repo), projenizin tüm klasörlerini ve dosyalarını içerir. Ayrıca kullanıcılar, kişiler ve bilgisayarlar hakkında bilgiler içerir.

Depo verileri sürüm kontrollüdür. Bir depo, bir bireye veya bir grup ekip üyesine ait olabilir.

Git bir depodur. Genel, özel veya dahili olabilir. GitHub, Git deposunun bir barındırma hizmetidir ve bir kullanıcı arayüzüne sahiptir.

Git, sürüm kontrolü ve kod paylaşma özellikleri sağlar, ancak Git'i farklı kılan şey, geliştiricilerin dosyalarında bazı değişiklikler yapmak istediklerinde tüm depoyu yerel sistemlerine kopyalayabilmeleridir. Bu nedenle, bir geliştirici belirli bir projeye yazma erişimine sahip olmasa bile, içeriği yerel olarak kopyalayabilir ve değiştirebilir (çatallama olarak adlandırılır).

Ayrıca, geliştirici yerel olarak yapılan değişiklikleri paylaşmak isterse, projenin sahibine bir "çekme isteği" gönderebilir.

Bir projenin tek bir servisi olabilir. Projenizin birden çok iş akışı varsa, her iş akışı için birden çok hizmet oluşturabilirsiniz. Çoğu geliştirici, daha büyük projeleri bir veya daha fazla işleve sahip daha küçük bağımsız hizmetlere bölmeyi tercih eder. Her hizmet çeşitli iş sorunlarını çözebilir. Sunucusuz çerçevelerin popülaritesi ile kullanıcılar, işlevlere hizmet olarak erişebilir.

Bu hizmet olarak işlevleri oluşturup dağıttıktan sonraki adım, bunları yapılandırmak ve sürüm kontrolü yapmaktır - tüm hizmetlerinizi tek bir havuzda (mono-repo) alabilir veya sahip olduğunuz her hizmet için ayrı bir havuza sahip olabilirsiniz ( çoklu repo)!

mono repo çoklu repo

Mono repo nedir?

Mono repo yaklaşımında, tüm hizmetlerinizi tek bir (mono) depoda tutabilirsiniz. Yine de her hizmeti bağımsız olarak dağıtabilir ve yönetebilirsiniz. Hizmetler ortak kitaplıkları ve kodu paylaşabilir.

Facebook, Google ve Dropbox gibi şirketler mono repo kullanıyor.

Mono-repo'nun Avantajları

Mono-repo yaklaşımının birçok avantajı vardır:

  • Tüm proje kodunun saklanabileceği ve ekipteki herkesin erişebileceği tek bir yer
  • Yeniden kullanımı ve kodu paylaşması kolay, ekiple işbirliği yapın
  • Değişikliğinizin tüm proje üzerindeki etkisini anlamak kolay
  • Kod yeniden düzenleme ve kodda büyük değişiklikler için en iyi seçenek
  • Ekip üyeleri, tüm projenin genel bir görünümünü elde edebilir
  • Bağımlılıkları yönetmek kolay

Mono-repo'nun Dezavantajları

Tabii ki, mono-repo'nun bazı dezavantajları vardır, bunlardan en önemlisi performanstır. Projeniz büyür ve her geçen gün daha fazla dosya eklenirse, teslim alma, çekme ve diğer işlemler yavaşlayabilir ve dosya aramaları daha uzun sürebilir.

Ayrıca, projeniz için çok sayıda bağımsız yüklenici tutarsanız, onlara tüm kod tabanına erişim izni vermek o kadar güvenli olmayabilir.

Ayrıca, Sürekli Dağıtımları (CD) uygulamak zordur, çünkü birçok kişi değişikliklerini denetleyebilir ve Sürekli Entegrasyon (CI) sisteminizin birden çok yeniden oluşturma yapması gerekebilir.

Mono repo kullanan büyük şirketler, ölçek büyütme sorunlarını ele almak için özelleştirilmiş araçlara sahiptir. Örneğin, Facebook özel bir dosya sistemi ve kaynak denetimi kullanır.

Çoklu repo nedir?

Çoklu depo yaklaşımında, bir projenin çeşitli kitaplıklarını ve hizmetlerini barındıran birden çok havuz vardır. Bir hizmet değişirse, geliştiricilerin tüm projeyi değil, yalnızca o hizmeti yeniden oluşturması gerekir. Kişiler ve ekipler kendi özel hizmetleri üzerinde çalışabilir ve yalnızca gerekli hizmetlere erişebilir.

Netflix ve Amazon gibi şirketler çoklu repo kullanır.

Çoklu repo'nun Avantajları

Aşağıdaki sebeplerden dolayı çoklu repoyu benimseyen şirket sayısı mono repoyu benimseyenlerden çok daha fazladır:

  • Her hizmet ve kitaplığın kendi sürümü vardır
  • Kod kontrolleri ve çekme işlemleri küçük ve ayrıdır, bu nedenle proje boyutu büyüse bile performans sorunu olmaz
  • Ekipler bağımsız olarak çalışabilir ve tüm kod tabanına erişmeleri gerekmez
  • Daha hızlı geliştirme ve esneklik
  • Her hizmet ayrı olarak yayınlanabilir ve kendi dağıtım döngüsüne sahip olabilir, böylece CI ve CD'nin uygulanmasını kolaylaştırır
  • Daha iyi erişim kontrolü – tüm ekiplerin tüm kitaplıklara tam erişime sahip olması gerekmez – ancak ihtiyaç duymaları halinde okuma erişimi alabilir

Çoklu Repo'nun Dezavantajları

  • Hizmetler ve projeler arasında kullanılan bağımlılıklar ve kitaplıklar, en son sürümü almak için düzenli olarak senkronize edilmelidir.
  • Bir noktada bir silo kültürü teşvik ederek yinelenen kodlara ve bireysel ekiplerin aynı sorunu çözmeye çalışmasına yol açar
  • Her ekip, ortak en iyi uygulamaları takip etmede zorluklara neden olan kodları için farklı bir dizi en iyi uygulamayı izleyebilir.

Mono ve Çoklu Repo Arasındaki Farklar

Mono-repo ve multi-repo arasındaki farkları özetleyelim:

mono repo çoklu repo
Bir organizasyonun tüm projelerinin tüm kodları merkezi bir depoda bulunur. Her hizmet ve projenin ayrı bir havuzu vardır
Ekipler işbirliği yapabilir ve birlikte çalışabilir; birbirlerinin değişikliklerini görebilirler Ekipler bağımsız olarak çalışabilir; bireysel değişiklikler diğer ekipler veya projeler tarafından yapılan değişiklikleri etkilemez
Her kişi tüm proje yapısına erişim sağlar Yöneticiler, erişim kontrolünü geliştiricinin erişmesi gereken proje veya hizmetle sınırlayabilir
Proje boyutu büyümeye devam ederse ölçek büyütme sorunları ortaya çıkabilir Sınırlı kod ve daha küçük hizmet birimleri nedeniyle iyi performans
Sürekli Dağıtım (CD) ve Sürekli Entegrasyon (CI) uygulamak zor Geliştiriciler, hizmetleri bağımsız olarak oluşturabildikleri için kolayca CD ve CI elde edebilirler.
Geliştiriciler, merkezi depoda güncellendikçe kitaplıkları, API'leri ve diğer ortak kodları kolayca paylaşabilir Kitaplıklarda ve diğer ortak kodlarda yapılan herhangi bir değişiklik, daha sonra sorun yaşamamak için periyodik olarak senkronize edilmelidir.

Çözüm

Hem mono repo hem de çoklu repo eşit derecede popülerdir ve hangisinin daha iyi olduğu proje boyutunuza, proje gereksinimlerinize ve ihtiyaç duyduğunuz sürüm oluşturma ve erişim denetimi düzeyine bağlıdır.

Mono-repo tutarlılığı desteklerken, çoklu repo ayrıştırmaya odaklanır. Bir mono-repoda, tüm ekip bir kişi tarafından yapılan değişiklikleri görebilirken, çoklu repo, yalnızca gerekli hizmetlere erişimi olan her ekip için ayrı bir repo oluşturur. Projeleriniz için bir mono-repo ve çoklu-repo kombinasyonu kullanmak istiyorsanız, birden fazla proje ve kitaplığı yönetmek için bir araç olan meta'ya gidebilirsiniz.

Git Öğrenmek için Ücretsiz Kaynaklar da ilginizi çekebilir.