Doğrusal mühendis Mufeez Amjad, yapay zeka kodlama aracılarının CI'yı en kötü darboğazına dönüştürmesinin ardından şirketin sürekli entegrasyon hattını nasıl yeniden çalıştırdığına ilişkin ayrıntılı bir açıklama yayınladı; çekme isteği bekleme süresi altı dakikadan beş dakikanın biraz üzerine çıkarken, test paketleri yıl başından bu yana neredeyse dört katına çıktı.

Linear'ın mühendislik blogunda 21 Eylül'de yayınlanan yazı, çoğu zaman olduğu gibi yukarıdan gelen kısa bir mesajla başladı. Bu yılın başlarında Amjad, Linear'ı açtığında şirketin CTO'su Tuomas'ın kendisine "CI maliyetleri yüksek" başlıklı bir sorun verdiğini ve bu sırada CI'yı daha hızlı hale getirmesini istediğini öğrendi. Bu hikayeyle ilgili daha fazla bağlam için devam eden AI sektörü haberimize bakın.

Aracılar Doğrulamayı Geride Bıraktığında

Sorun tesadüfi değil yapısaldır. Amjad, "Ajanlar kod göndermeyi katlanarak daha hızlı hale getirdiler" diye yazdı, "ancak bu değişikliklerin doğrulanması aynı hızda devam etmedi." Her çekme talebinin hâlâ CI'dan geçmesi gerekiyor; bu nedenle geliştirme hızlandıkça CI bir tıkanıklık noktası haline geliyor; altyapı maliyetlerini artırıyor ve geliştiricilerin ve aracılarının geri bildirim için daha uzun süre beklemesine neden oluyor.

İki ölçüm için optimize edilmiş doğrusal: PR'nin CI'da ne kadar süre beklediği ve ne kadar koşucu süresi tükettiği. Aylar süren çalışmanın ardından sonuçlar: Ocak ayından bu yana test paketlerinin neredeyse dört katına çıkmasına rağmen, çekme isteği bekleme süresi altı dakikadan beş dakikanın biraz üzerine düştü ve test başına çalıştırma süresi kabaca yarı yarıya azaldı.

Çalışma genel olarak dört kategoriye ayrıldı: yükseltilmiş altyapı ve araçlar, diğer işlere giden işleri optimize etmek, tekrarlanan kurulumları azaltmak ve test yürütmeyi daha verimli hale getirmek. Linear'ın kod tabanı temel olarak TypeScript'tir, ancak optimizasyonların çoğu diller ve araç zincirleri arasında geçerlidir.

Daha Hızlı Makineler ve Yerel Derleyici

İlk kazanımlardan bazıları CI'nın neredeyse hiç optimizasyonunu gerektirmedi. İş yüklerini GitHub Actions'dan daha hızlı CPU'lara, daha yüksek performanslı depolamaya ve daha iyi önbellek altyapısına sahip üçüncü taraf çalıştırıcılara taşımak hemen karşılığını aldı: anahtarın her iki tarafında geçen iki günlük benzer karşılaştırmada, işler ortalama %34 daha hızlı çalıştı ve "tsc" gibi bazı iş yükleri %52 düştü.

Alet zincirinin modernleştirilmesi zaferi artırdı. Yerel TypeScript derleyicisi "tsgo"ya geçiş, yazım denetiminin haftalık ortalamasını %73 oranında azalttı; bu, daktilo denetimindeki darboğazı tamamen ortadan kaldıracak kadar büyüktü.

Tür Grafiği Olmadan Linting

Linting başka bir erken hedefti. Linear'ın bir avuç özel ESLint kuralı TypeScript türü bilgisine dayanıyordu; bu da her lint çalıştırmasını değerlendirmeden önce tam tür grafiği oluşturmaya zorladı; bu da linting'i bellek açısından en yoğun CI işlerinden biri haline getirdi.

Ekip, soyut sözdizimi ağacı üzerinde statik analiz kullanmak için kuralları yeniden yazdı ve herhangi bir tür bilgisi olmadan işlev benzeri yapıları ve koruma kalıplarını belirledi. Bu, ESLint'in TypeScript'i tamamen bırakmasına, API tüy bırakma süresini %68 oranında ve tam depo tüy bırakma süresini %55 azaltmasına ve bellek kullanımının önemli ölçüde azalmasına olanak tanıdı. Ayrıca daha sonra Oxlint'e geçişi de kolaylaştırdı ve bu da CI koşucularının astarlama için harcadığı dakikaları daha da azalttı.

Kritik Yolu Daraltmak

Bireysel kontrollerin daha hızlı olması sayesinde Linear uzaklaştırıldı ve CI'yı bir sistem olarak ele aldı. Bu, diğer her şeyin önünde duran küçük işlere dikkat çekti; yol değişikliği tespiti ve test sonucu önbellek kontrolleri, bu geçidi iş seviyesinde kontrol ediyor; bu, sekiz API test parçasından hiçbirinin bitene kadar başlayamayacağı anlamına geliyor.

Düzeltmeler ayrıntılı ancak ilave nitelikteydi. Getirme derinliğinin sınırlanması, en yavaş kapıyı 94 saniyeden 20 saniyeye çıkardı. Hiçbir zaman çalışan bir ağaca ihtiyaç duymayan işlerden ödemeyi tamamen kaldırmak, bu süreyi 27 saniyeden 7'ye düşürdü. Sınırlı geçmişe sahip seyrek, kabarcıksız bir ödeme, itme ve birleştirme kuyruğu olayları için 11 küsur saniye daha kazandırdı. Toplamda, değişiklik tespit işinin ortalama süresi 26 saniyeden 8'e, p90'ı 31'den 12'ye ve en yavaş koşusu 138 saniyeden 37'ye düştü.

Ödeme güvenilirliğinin de üzerinde çalışılması gerekiyordu: Üçüncü taraf çalıştırıcılar GitHub ağının dışında oturduğundan ve doğrudan bir IP bağlantısına güvendiğinden, aralıklı bağlantı bozulması bazen alımları durduruyordu. Doğrusal, "eylemler/ödeme"yi, geri çekilmeyle yeniden deneyen kendi bileşik eylemiyle değiştirdi, "GIT_HTTP_LOW_SPEED_LIMIT" ve "GIT_HTTP_LOW_SPEED_TIME" değerlerini ayarlayarak, durmuş bir bağlantının takılmak yerine yaklaşık 30 saniye sonra iptal edilmesini sağladı ve kalıcı bir git aynasını yapışkan bir diskte tutan bir ödeme önbelleği kullandı.

İnce bir düzeltme, boşa harcanan birleştirme kuyruğu süresini ortadan kaldırdı: önbellek işaretleri, birleştirme öncesindeki son kontrolün bir parçası olarak yazılıyordu, böylece bir PR, testleri geçtikten sonra bile kuyruğa girebiliyordu. Bu yazma işleminin geçitsiz bir işe taşınması, her API çekme isteği ve birleştirme kuyruğu girişi için birleştirme yolundan 42 saniye kısalttı. Birlikte, bu değişiklikler, önbellek eksikliklerinde API PR'leri için gerekli kontrollerin yaklaşık bir dakika kadar azalmasını sağlarken, koşucu başlangıçlarını da azalttı.

İş Başına Daha Az Boşa Geçen Saniye

Son kategori, her işte tekrarlanan kurulum maliyetine saldırdı. Her API testi parçası, her çalıştırmada aynı Postgres istemcisini apt ile yüklemek için 7 ila 8 saniye harcadı; onu Node'un yanında küçük bir CI temel görüntüsüne taşımak, parçaların çalışmaya hazır hale gelebileceği anlamına geliyordu. Ekip daha sonra kurulum sırasında bunları indirmenin zaman zaman askıda kalabileceğini keşfettikten sonra görüntüye yerel yapı başlıklarını ekledi.

Neden yankı buldu?

Gönderi geliştiricilerin sinirlerini bozdu: Hacker News'in ön sayfasına ulaştı ve bir gün içinde yaklaşık 250 puan ve 280 civarında yorum aldı. Tepkiyi açıklamak kolaydır - Linear'ın deneyimi, çoğu mühendislik kuruluşunun ancak şu anda karşı karşıya kaldığı, yapay zeka destekli geliştirmenin bir maliyetini belirtmektedir. Dakikalar içinde çekme istekleri oluşturan aracılar hâlâ insan temposuna göre tasarlanmış doğrulama hatlarında bekler ve bu beklemenin her dakikası, paralel çalışan her aracıyla çarpılır.

Linear'ın yeniden çalışmasından alınan ders, darboğazın hareket ettirilebilir olduğu, ancak tek bir sihirli değnek yerine yalnızca birçok küçük düzeltmenin (daha hızlı koşucular, daha ucuz yazı kontrolleri, sözdizimi düzeyinde tüy bırakmayan kurallar, sınırlı getirmeler, esnek ödemeler, önceden oluşturulmuş görüntüler) gösterişsiz birikimi yoluyla hareket edebildiğidir.

---

Yapay Zekanın Önünde Olun

En son yapay zeka haberlerini, analizlerini ve buluşlarını tek bir yerden alın.

Daha fazla AI haberini okuyun →