Büyük bir kod tabanınız olduğunda bağımlılık zincirleri çok derin hale gelebilir. Basit ikili programlar bile çoğu zaman on binlerce derleme hedefine bağlı olabilir. Kuyruklu a işareti bu ölçekte bir yapıyı makul bir miktarda tamamlamak imkansız hiçbir derleme sistemi temel ilkeyi atlatamaz. makine donanımına uygulanan fizik yasaları. Bunu yapmanın tek yolu Dağıtılmış derlemeleri destekleyen bir derleme sistemidir; sistem tarafından yapılan işler rastgele ve ölçeklenebilir sayısı. Sistemin çalışmasını yeterince küçük parçalara ayırdığımızı (daha sonra buna daha fazla değineceğiz), bu sayede herhangi bir binanın hızlı bir şekilde ayarlayabiliyoruz. Bu ölçeklenebilirlik en büyük hedef ve bir proje başlatma belgesi oluşturmak için çalışıyoruz.
Uzaktan önbelleğe alma
En basit dağıtılmış derleme türü, yalnızca Remote önbelleğe alma, Şekil 1'de gösterilmiştir.
Şekil 1. Uzaktan önbelleğe almayı gösteren dağıtılmış derleme
Geliştirici iş istasyonları ve derlemeler dahil, derleme yapan her sistem ortak bir uzak önbellek referansı paylaşır. geliştirmenizi sağlar. Bu hizmet hızlı ve yerel bir kısa süreli depolama sistemi olabilir. Redis veya Google Cloud Storage gibi bir bulut hizmeti. Kullanıcı olarak, doğrudan veya bağımlılık olarak bir yapı oluşturduğunda, sistem öncelikle uzak önbellek ile kontrol edin. Varsa ve yapıyı derlemek yerine indirebilir. Aksi halde, sistem oluşturur ve sonucu tekrar önbelleğe yükler. Bunun anlamı, Çok sık değişmeyen düşük seviyeli bağımlılıklar bir kez oluşturulabilir ve paylaşılabilir. ve her kullanıcı tarafından yeniden oluşturulması gerekmez. Google'da birçok yapılar sıfırdan derlemek yerine önbellekten sunulur. çalıştırmanın maliyetini de azalttık.
Uzaktan önbelleğe alma sisteminin çalışması için derleme sisteminin, tekrarlanabilir olması gerekir. Yani, her derleme hedefi için aynı girdi kümesinin bu hedefe yönelik olacak şekilde tüm makinelerde tam olarak aynı çıktıyı üretir. Bu şekilde projenin ilerlemesini bir yapı indirmenin sonuçlarının aynı olduğundan emin olmak çok önemli bir parçası. Bunun için önbellekteki her bir yapının hem hedefine hem de girişlerinin bir karmasına bağlı olmalıdır. Bu şekilde, mühendisler, tek bir yerden aynı hedefte farklı olarak çalışır ve uzak önbellek, ortaya çıkan tüm yapıları depolar ve uygun şekilde ele alacağız.
Uzak bir önbelleğin herhangi bir faydası için, daha hızlı olması gerekir. Bu her zaman olmasa da Özellikle önbellek sunucusu, derlemeyi yapan makineden uzaktaysa. Google'ın ağ ve derleme sistemi, derlemeyi hızlı bir şekilde paylaşabilmek için sonuç.
Uzaktan yürütme
Uzaktan önbelleğe alma, gerçek bir şekilde dağıtılmış bir derleme değildir. Önbellek kaybolursa veya her şeyin yeniden oluşturulmasını gerektiren alt düzeyde bir değişiklik yaptığınızda, yerel olarak makinenizde çalıştırmasını sağlayın. Asıl hedef, uzaktan yürütmeye alışkındır. Böylece, derlemenin asıl işi nasıl çalıştırabileceğinizi göstereceğim. Şekil 2'de bir uzaktan yürütme sistemi gösterilmektedir.
2. Şekil. Uzaktan yürütme sistemi
Her kullanıcının makinesinde çalışan derleme aracı (kullanıcıların makinede mühendis veya otomatik derleme sistemleri) istekleri merkezi bir derleme ana yöneticisine gönderir. Derleme ana kopyası, istekleri bileşen işlemlerine ve programlarına ayırır ölçeklenebilir bir çalışan havuzundan yürütülmesini sağlar. Her çalışan istenen işlemleri kullanıcının belirttiği girişlerle gerçekleştirir ve ve ortaya çıkan eserleri yazar. Bu yapılar diğer bunları gerektiren işlemler yürüten makinelerdir. üretilir ve kullanıcıya gönderilir.
Böyle bir sistemi uygulamanın en zor yanı iletişim sürecini ana makine ve kullanıcının yerel makinesi arasında geçiş yapabilir. Çalışanlar diğer çalışanlar tarafından üretilen ara yapılara ve nihai çıktıya kullanıcının yerel makinesine geri gönderilmesi gerekir. Bunu başarabilmek için daha önce açıklanan dağıtılmış önbelleğin en üstüne eklenerek bağımlılarını önbelleğe alabilir ve bu verileri önbellekten okuyabilir. Ana yapı taşları devam ettikten sonra, bağlı oldukları her şey bitene kadar Böylece, girişlerini önbellekten okuyabilirler. Nihai ürün ise yerel makinenin de dosyayı indirmesine olanak tanıyarak önbellekte bulunmasını sağlar. Ayrıca şunu da göz önünde bulundurun: kullanıcının kaynak ağacındaki yerel değişiklikleri dışa aktarmak için ayrı uygulayabilmesidir.
Bunun işe yaraması için, yapı tabanlı derleme sistemlerinin açıklanan tüm bileşenleri erkenden bir araya gelmesi gerekir. Derleme ortamları tamamen ve böylece işçileri insan müdahalesi olmadan başlatmamızı sağlar. Derleme süreçlerin kendi başına olması gerekir çünkü her adım birlikte çalıştırılması gerekir. Çıkışlar tamamen deterministik olmalıdır. aldığı sonuçlara güvenebilir. Böyle göreve dayalı bir sistemin güvence sağlaması son derece zordur. uzaktan yürütmeye dayalı güvenilir bir uzaktan yürütme sistemi oluşturmayı bir.
Google'da dağıtılmış derlemeler
Google, 2008'den beri bu ikisinin de kullanıldığı dağıtılmış bir derleme sistemi uzaktan önbelleğe almayı ve uzaktan yürütmeyi içerir. Bunlar Şekil 3'te gösterilmiştir.
3. Şekil. Google'ın dağıtılmış derleme sistemi
Google'ın uzak önbelleğine ObjFS adı verilir. Her bir arka uçtan oluşur. üretim filomuza dağıtılmış Bigtable'larda çıkışlar derleme ve her geliştiricinin kullandığı objfsd adlı ön uç FUSE arka plan programı üretiliyor. FUSE arka plan programı, mühendislerin derleme çıkışlarına sanki gerçekten iş istasyonunda depolanan, ancak normal dosya içeriği olan isteğe bağlı olarak indirilen, yalnızca az sayıda dosya için kullanılabilir. belirtir. İsteğe bağlı dosya içeriği sunmak hem ağı hem de diski büyük ölçüde azaltır ve sistem, kullandığımız malzemeyi depoladığımız zamana kıyasla iki kat tüm derleme çıktılarını geliştiricinin yerel diskinde saklar.
Google'ın uzaktan yürütme sisteminin adı Forge. Blaze'de bir Forge müşterisi (Bazel'in dahili eşdeğeri) Distribütör, adında bir veri merkezi bulunuyor. Scheduler bir işlem önbelleği tutar Bu şekilde, işlem daha önce girilmişse hemen bir yanıt döndürmesi veya sistemdeki herhangi bir kullanıcı tarafından oluşturulmuş Aksi takdirde, işlemi sıraya sokacağım. Yürütücü işlerinden oluşan büyük bir havuz, bu sıradaki işlemleri sürekli olarak okur. bunları yürütmeli ve sonuçları doğrudan ObjFS Bigtable'da depolamalıdır. Bu sonuçlar, yürütücülere daha sonraki işlemler için hazır bulunabilir veya son kullanıcı tarafından objfsd aracılığıyla gönderilir.
Sonuç olarak, tüm derlemeleri verimli bir şekilde desteklemek için ölçeklendirme yapan bir sistem elde edilir. bazı sonuçlar gösterilir. Google'ın binalarının ölçeği de gerçekten çok büyük: Google milyonlarca test durumu yürüten ve petabaytlarca veri üreten milyonlarca derleme çalıştırır her gün milyarlarca satır kaynak koddan derleme çıktıları elde ediyor. Yalnızca mühendislerimizin hızlı bir şekilde karmaşık kod tabanları oluşturmasına olanak tanırken, aynı zamanda yapay zekaya dayalı birçok otomatik araç ve sistem seçeceğiz.