deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (hnrss.org)

Jane Street, partition başına dizinler ve ağaç bölme ile message bus CPU kullanımını %30 düşürdü

Jane Street, günlük terabaytlarca veri işleyen Aria message bus'ındaki tip kurtarma sürecini partition başına dizinler ve ağaç bölme stratejisiyle yeniden inşa ederek üretim iş yüklerinde CPU kullanımını %30 azalttı.

Jane Street, partition başına dizinler ve ağaç bölme ile message bus CPU kullanımını %30 düşürdü

Günlük terabaytlarca veri taşıyan bir bus'ta %30 CPU azalması

Jane Street, günde birden fazla terabayt veri işleyen dahili mesajlaşma çerçevesi Aria üzerine ayrıntılı bir mühendislik yazısı yayınladı. Şirketin 2026 yaz stajyer projeleri serisinin bir parçası olan yazıya göre, stajyer Theodor Totev yaz boyunca naif doğrusal filtrelemeyi partition başına dizinlerle ve bir ağaç bölme depolama stratejisiyle değiştirdi. Sonuç, üretim iş yüklerinde kritik bir sistemden beklenen doğruluk standardından ödün verilmeksizin elde edilen %30'luk bir CPU kullanımı düşüşü oldu.

Tip kurtarma sunucuları zorluyordu

İstemciler, dosya sistemine benzer hiyerarşik bir ad alanı oluşturan konular halinde düzenlenmiş canlı mesaj akışını almak için Aria'ya abone olur. Bir abonelik tek bir konuyu veya bir konu alt ağacının tamamını hedefleyebilir. En güncel mesajlar stream tip adı verilen bellek içi bir ring buffer'da tutulur; bir istemci geriye düştüğünde, Jane Street'in tip recovery olarak adlandırdığı süreçle güncel mesajları bu buffer'dan yeniden okur.

Tarihsel olarak, akışı bir istemcinin abone olduğu konulara göre filtrelemek basit bir doğrusal taramayla yapılıyordu. Algoritmik olarak kaba ama cache dostu olduğundan performans kabul edilebilirdi — ta ki tip kurtarma yapan istemci sayısı artana kadar. Bazı sunucular %100 CPU kullanımına ulaştı ve istemciler canlı akışı yakalayamaz hale geldi. Jane Street, kurtarma yolunun yeniden düşünülmesi gerektiğini kabul ederek geçici bir çözüm olarak sunucular ekledi.

Konuları değil, konu partitionlarını dizinle

Çözüm, akışı taramak yerine dizinlemekti. Naif bir tasarım konu başına bir dizin oluştururdu, ancak tek bir Aria örneği neredeyse bir milyon konu barındırabiliyor. Totev bunun yerine her konu partition'ı için bir dizin oluşturdu: aynı iki parçalı öneki paylaşan konular kümesi; böylece app/codestore/commits ve app/codestore/features ikisi de app/codestore partition'ı altına düşer. Her partition dizini, mesajlarının genel akış içindeki yerini kaydeder; bir istemci veri istediğinde Aria, ilgili dizinleri bir min-heap ile n yönlü birleştirmeye tabi tutarak yalnızca önemli olan partition'lar için sıralı mesaj akışını yeniden oluşturur.

Ucuz deneyler: Bir gecede profillenen beş heap

Bunlara güvenmeden önce ekip, konu partition sayısını, iç içe geçme derecesini ve okuyucu sayısını değiştirerek kurtarma senaryolarını profilleleyen bir karşılaştırma aracı inşa etti. Profillemeye göre min-heap birleştirmesi en büyük darboğazdı. Jane Street, AI araçlarından önce mühendislerin muhtemelen tek bir umut vadeden alternatifi elle seçeceğini belirtiyor. Bunun yerine Totev, bir ajana beş farklı heap uygulaması üretmesini ve bunları bir gecede profillemesini istedi; bunlardan biri olan fast_heap_unboxed, dizinli kurtarma koduna 2 kat performans iyileştirmesi sağladı. Yeni mantık daha sonra expect testleriyle kapsandı, Antithesis'te çalıştırıldı ve yazının bir ajan sürüsü olarak nitelendirdiği incelemeyle denetlendi.

Dizin belleği için paylaşımlı bir block havuzu

Bellek temsili de önemliydi. Dizin başına ayrı bir ring buffer, en kötü durum boyutlandırması gerektirirdi ve dizin boyutu mesaj boyutu küçüldükçe büyür: Aria'nın en küçük 32 baytlık mesajlarıyla tamamen dolu bir tip deposu partition başına 2GB'lık bir dizin gerektirebilirdi. Bunun yerine dizinler, her biri 1024 kayıt tutan paylaşımlı bir block havuzundan beslenir. Bir bloğun referans verdiği tüm mesajlar ring buffer'dan eskiyip çıktığında, blok dizinden çıkartılır ve geri dönüştürülür; böylece her dizin gerçek mesaj hacmiyle birlikte büyüyüp küçülür.

İlk kurtarma: 2,5 saniyeden 13 dakikaya

Yazı ayrıca ikinci, disk tarafındaki bir arızayı ele alıyor. Yeniden başlatılan istemciler çoğunlukla haftanın başından beri tüm mesajları ister — bu milyarlarca mesaj olabilir — ve yeniden başlatmalar zaman içinde kümelenebilir. Bir olayta, normalde 2,5 saniyenin altında tamamlanan bir kurtarma 13 dakikadan uzun sürdü. Teşhis, tip deposundakiyle aynı hastalığı buldu: Aria, göndermesi gereken verinin yaklaşık 10 katını okuyup filtreliyordu.

Diskte mesajlar önce konu partition'ı başına kronolojik segmentler olarak yazılır, ardından ayrı bir süreç onları, filtreleme verimliliği ile dosyaları bir akışta yeniden birleştirme maliyetini dengeleyen subtree store'lara böler. Eski bölme sezgisi bir konu adının ilk üç segmentine bakıyordu — segment, eğik çizgiyle ayrılmış bir parça — bu da fiilen bir konu partition'ının her doğrudan alt öğesine kendi subtree store'unu veriyordu. Bu, bir store içindeki bir konut diğerlerinden çok daha fazla trafik taşıdığında başarısız oluyordu: sakin konuya abone olan biri yine de kardeşinin mesajlarının içinden geçmek zorunda kalıyordu. Yazı çözümü ağaç bölme olarak çerçeveliyor; bu, genel CPU azalmasının ikinci yarısı olarak anılan projenin parçasıdır.

Neden önemli

Yazı, aktarılabilir sistem derslerinin kompakt bir kataloğu. Okuma zamanında filtreleme sessizce okuma amplifikasyonuna dönüşüyor ve buradaki hem bellek içi hem de diskteki arızalar aynı israf kalıbından kaynaklandı. Daha kaba bir tanecikte — konular yerine partition'lar — dizinleme, dizin sayısını yönetilebilir tutarken verinin çoğunu atlamayı da sağlıyor. Kıyas odaklı geliştirme sezgilere aykırı bir darboğazı yakaladı ve AI araçları deney ekonomisini değiştirdi: bir gecede beş uygulama üretip profilleme, ardından doğruluğu expect testleri, Antithesis ve ajan incelemesiyle yeniden doğrulama. Havuzlanmış blok tasarımı, bellek düzeninin birinci sınıf bir tasarım kısıtı olarak ele alındığını gösteriyor. Seçici birçok okuyucusu olan bir message bus veya log-yapılı depo işleten herkes için örüntü — ölç, dizinle, yeniden doğrula — çıkarılacak ders.

  • #message-bus
  • #performance
  • #systems-engineering
  • #benchmarking
  • #distributed-systems

İlgili yazılar