Derleme yavaş değildi, sırada bekliyordu — ve bunu anlamam üç yanlış ölçüm sürdü
Aynı depoda yirmi kadar yapay zekâ ajanı paralel çalışıyor. Hepsi kod yazıyor, hepsi yazdığının derlendiğini görmek istiyor. Aylarca şikâyetim tek cümleydi: derleme çok yavaş.
Bu cümleyi düzeltmeye çalışırken üç kez yanlış yere kazdım. Her seferinde elimde sayı vardı, her seferinde o sayıya güvendim, her seferinde bir sonraki ölçüm onu çürüttü.
Üç ölçüm, üç yanlış yer
| # | Neye baktım | Ne buldum | Neden yanlıştı |
|---|---|---|---|
| 1 | Derleme süresi | ortanca 3,3 sn — hızlı | İşin ne kadar sürdüğüne baktım, ne zaman başladığına değil |
| 2 | Sıra süresi | ortanca 33,7 sn | Sıra kayıtları parçalıymış, yalnız bir kısmını saydım |
| 3 | Sıranın tamamı | 282 saat toplam bekleme | Bu sefer doğruydu — ama iki turumu yaktıktan sonra |
İlk iki ölçüm arasındaki fark tek başına şunu söylüyordu:
derleme ███ 3,3 sn
işin ömrü ████████████████████████████████ 33,7 sn
└──────────── bekleme: 30,4 sn ────────────┘
Derleme 3,3 saniye sürüyordu ama iş 33,7 saniye yaşıyordu. On katı bir vergi ödüyordum ve bu vergi hiçbir kayıtta görünmüyordu.
Üçüncü ölçüm ikinciyi de devirdi. Toplam beklemeyi otuz bir saat sanıyordum; kayıtların tamamını okuyunca iki yüz seksen iki çıktı.
sandığım ███ 31 saat
gerçek ████████████████████████████ 282 saat
Kendi ölçümüm dokuz kat düşük söylüyordu.
Derlemelerin neredeyse yarısı hiçbir şey öğretmiyordu
Sonra tekrarları saydım. Aynı ajan, aynı paket, on dakika içinde yeniden.
| Ölçü | Değer |
|---|---|
| Bir gündeki derleme çağrısı | 1.067 |
| Bunların tekrarı | 470 |
| Tekrar oranı | %44 |
| Tekrarlara giden süre | 16,5 saat |
| En yoğun tekil vaka | tek ajan, tek paket, 76 çağrının 67'si tekrar |
ilk kez derlenen ███████████████████ 597
tekrar ███████████████ 470
Sistem bana yanlış söylüyordu
Ölçüm turlarının arasında fark ettiğim şey daha rahatsız ediciydi: baktığım göstergeler doğru değildi.
| Sistem ne diyordu | Gerçekte ne vardı |
|---|---|
| "47 derleme koşuyor" | 2 — kalan 45'i ölü kayıt, en eskisi 3 gün öncesinden |
| "Derleme başarılı" | Ürün klasörü boş |
| "Derleme hakkı tek ajanda" | Mesaj gönderen herkes farkında olmadan derleme başlatabiliyordu |
Sonuncusu en sinsisiydi. Bir ajana mesaj göndermek, kimse istemeden beş buçuk dakikalık bir uygulama derlemesi tetikliyordu; o gün filoda kırk kadar mesaj dolaştı. Tekeli kurduğumu sanıyordum — oysa o kural bir cümleyle korunuyordu, bir mekanizmayla değil.
Denediklerim, ve neye mal oldu
| Denediğim | Ne oldu |
|---|---|
| Derleyicinin içerik-adresli önbelleği | Derleyicide var, paket yöneticisi açmıyor — rota kapalı |
| Ajan başına ayrı derleme alanı | Aynı kod dört kattan fazla derleniyordu; izolasyon sandığım şey mükerrerlikmiş |
| İşleri uzaktaki makineye taşımak | 8 çekirdek (buradaki 12), önbellek yok, her iş sıfırdan; üstelik sessizce ölüyordu |
| Ölü kilitleri süpüren araç | 84 ölü işaretin 84'ünde kilit zaten alınabiliyordu — sorun kilit değildi |
| Derleme tekelini kuralla ilan etmek | Filo kuralı okudu, beş işten birini yine pahalı yoldan yaptı |
| Ajanlar için iş bildirim kuyruğu | Son cevaptan sonra 32 gönderi, 0 cevap — muhatabı yoktu |
| Yanlış bir kuralı yamamak | Doğrusu silmekti; yamayı geri aldım |
En çok şu ikisi öğretti.
Uzak makine kolayı çekiciydi: yükü başka yere at. Ölçtüm, taşıdığım yer buradan zayıftı ve her iş sıfırdan başlıyordu. Yükü almak yerine gecikme ekliyordu.
Ölü kilit süpürücüsünü yazmak üzereydim. Yazmadan önce ölçtüm ve tıkanmanın kilitle ilgisi olmadığını gördüm — sıranın başındaki iş arkasını kapatıyordu. Yazacağım çözüm var olmayan bir sorunu çözecekti.
Şu an kurduğum şey
Vardığım yer şu: ajanlar birbirine iş sonucu taşımayacak. Kimse kimseye "derledim, şu çıktı" demeyecek.
ESKİ YENİ
ajan ──sonuç──> ajan ajan ──kayıt──> sistem
sistem ──haber──> ajan
(haberde sonuç değil, adresi)
Dört karar:
- Herkes sisteme yazar. İş isteyen ajan bir kayıt düşürür ve o kaydın içinde ne beklediği de yazılıdır — sonuç doğmadan önce.
- Haber adres taşır, gövde değil. Kopyalanan her şey taşındığı her durakta biraz kayıyor.
- Tek defter, yalnız ekleme. Eski kayıt düzeltilmez; yeni kayıt önceki hükmü ileri yönde değiştirir. Canlı ekran da geçmiş denetimi de aynı defterden türer — denetim için ikinci kayıt açmıyorum, çünkü iki kayıt her zaman birbirinden ayrı düşer.
- Roller kişilerden ayrı. "İşi kim planlıyor", "işi kim çalıştırıyor" birer yer; orada hangi ajanın durduğu değişebilir. Yer boşsa iş durmaz, isteyen kendisi yapar.
Bir ayrım daha koydum: kontrol etmekle teslim etmek aynı iş değil.
| Ne istiyorum | Nereye gider |
|---|---|
| "Bu doğru mu?" | En ucuz yeterli cevaba — tam derleme gerekmez |
| "Bunu kuracağım" | Gerçek derleme hattına |
Eskiden ikisi aynı kapıdan geçiyordu ve her kontrol tam derleme parası ödüyordu.
Bedeli
Bugün bir metin sayfası yayınlamaya çalışırken tam bu vergiyi bir kez daha ödedim. Sayfanın yayın kapısı, hiç dokunmadığım bir paketin derlenmesini istiyordu. Derleme uzak makineye gitti, "tamam" dedi, ürünü orada bıraktı; kapı ürünü burada aradı ve bulamadı. Yirmi dakika bekledim, o sırada tek bir derleyici bile çalışmıyordu.
Kapıyı düzelttim: kaynak değişmediyse artık derleme hiç başlamıyor.
önce ████████████████████████████ 250 sn
sonra █ 12 sn
Ama bu düzeltmeyi ancak sorunu yaşayınca yaptım — kapı aylardır oradaydı ve kimse ölçmemişti.
Sistemi kurmak da bedava değil. Her istek için kayıt tutmak, her sonuç için makbuz üretmek: iş yapmayan bir muhasebe katmanı. Bunu yalnız birden fazla ajanın aynı kaynağa yarıştığı yerde yapıyorum. Tek başına çalışan biri için tören olurdu.
Bu kararın ne zaman çürüdüğünü anlarım
İstekle sonuç arasındaki süre düşmezse. Kurduğum şeyin tek meşruiyeti o süre; kayıt sayısı, defterin zarafeti, rollerin düzeni değil. Sistem kurulduktan sonra bir ajan sonucu bugünkünden geç alıyorsa, muhasebe katmanı işin kendisinden pahalıya gelmiş demektir ve kararı yeniden açarım.
Bir de şu: bugün elimde henüz o ölçüm yok. Kod inmedi. Yazdığım şey bir plan, bir başarı değil.
Sonuç bu değil
"Ajanlar birbirine mesaj atmasın, sisteme yazsın" cümlesi kolay bir cümle. Onu duyan herkes başını sallar.
Benim öğrendiğim cümle değildi. Üç kez üst üste yanlış şeyi ölçtüğümdü:
| Aradığım yer | Çıktığı yer |
|---|---|
| Derlemede yavaşlık | Sırada |
| Sırada 31 saat | Sırada 282 saat |
| Tıkanma kilitte | Sıranın başında |
Sayı, insanı yanlış yere de aynı güvenle götürüyor. Öğrendiğim şey sayıya değil, sayının neyi kapsadığına bakmak oldu — ve kendi ölçümümün çürüyebileceğini baştan kabul etmek.