İçeriğe atla

GitHub, saniyede 7.200 push işleyen yeni Git depolama mimarisini anlattı

GitHub, Universe etkinliğinde duyurduğu ve Rubicon adını verdiği yeni Git depolama mimarisinin ayrıntılarını paylaştı. Şirketin iç testlerinde tek bir depo üzerinde 5.000 eş zamanlı ajan çalıştı ve saniyede 7.200 push işlendi. Bu sırada okuma gecikmesi düşük kaldı.

Mert A.ohafalan editörüYayın · 1 dk okuma
XFacebookWhatsAppLinkedIn

Mimarinin çıkış noktası, bir yazma işleminin çok küçük bir kısmının sıraya konması gerektiği gözlemi. Git nesneleri değiştirilemez ve içerikleriyle adlandırılır, bu yüzden iki yazıcı onları uzlaşmadan aynı anda saklayabilir. Uzlaşma yalnızca referans güncellemesinde gerekiyor.

GitHub, geliştirici tarafında Git kullanımının değişmediğini söylüyor. Push, fetch ve branch işlemleri aynı korumalarla eskisi gibi çalışıyor.

Tek depo için 100 kat ölçek hedefi

Şirket, GitHub.com’daki en yoğun depoların bugün saniyede en fazla birkaç düzine yazma aldığını, bunun da genellikle kısa patlamalar hâlinde geldiğini söyledi. GitHub, paralel ve kesintisiz çalışan ajanlarla bu patlamaların gelecek yıl içinde sürekli bir hıza dönüşmesini bekliyor. Her push ise CI çalıştırmaları, dağıtım sistemleri ve bağlam için fetch yapan diğer ajanlar yüzünden ek okuma trafiği doğuruyor.

GitHub, mart ile mayıs arasında trafiği yaklaşık 4 kat artan bir depoyu örnek gösterdi ve büyümenin üstel biçimde sürdüğünü söyledi. Ekip tek bir depo için en az iki büyüklük mertebesi, yani en az 100 kat daha fazla ölçeği tasarım hedefi olarak belirledi. Gereksinimler arasında birden fazla yazıcı düğüm, düşük commit gecikmesi, her referans için sıralı kayıt ve değişiklik yokken ucuz kalan okumalar yer aldı.

Uzlaşma yalnızca referans güncellemesinde gerekiyor.

Spokes kaldı, altındaki katman yenilendi

Git istemcilerinden, API’den ve web arayüzünden gelen istekler yine yönlendirme ve yük dengelemeyi üstlenen Spokes’a ulaşıyor. Spokes her isteği depoya atanmış küçük bir sanal kopya grubuna gönderiyor, bu kopyaların yerel diski her an yeniden kurulabilen bir önbellek olarak çalışıyor. Bir kopya devre dışı kalırsa diğerleri hizmeti sürdürüyor, yoğunlaşan depolara ise yeni kopya ekleniyor.

Paketler ve okuma hızlandırıcı veriler Azure Blob Storage’da, referanslar ve paket manifestosu ise Ref-CAS (Reference Compare-and-Swap) adlı ayrı bir çoğaltılmış günlük hizmetinde tutuluyor. Yazmada sanal kopya gelen paketi indeksleyip Blob Storage’a yüklüyor, ardından manifestoyu ve referansları tek bir Ref-CAS işlemiyle güncelliyor. Paket birleştirme ve erişilemeyen nesneleri temizleme işi ise kopyalardan ayrılarak ayrı sıkıştırma düğümlerine verildi.

Bu yazı hakkında ifade bırakın

OHA!falan’ı takip edinGünün haberleri, kısa videolar ve özetler her gün sosyal medyada.

İlginizi çekebilir