deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Streamux: sıfırdan yazılmış Go HTTP/2 sunucusu, RFC 9218 önceliklendirmesiyle 146 h2spec testinden 145'ini geçiyor

Bir geliştirici, Go'da sıfırdan yazdığı HTTP/2 sunucusunun 146 h2spec uygunluk testinden 145'ini geçtiğini ve tarayıcıların RFC 9218 kapsamında gönderdiği urgency ipuçlarını kullanarak yanıt baytlarını planladığını duyurdu.

Streamux: sıfırdan yazılmış Go HTTP/2 sunucusu, RFC 9218 önceliklendirmesiyle 146 h2spec testinden 145'ini geçiyor

Silvern47 adıyla yayın yapan bir geliştirici, Go'da sıfırdan yazılmış bir HTTP/2 sunucusu olan Streamux'u dev.to'daki bir yazıyla duyurdu. Yazara göre uygulama, güncel HTTP/2 spesifikasyonunun tamamı olan RFC 9113'ü kapsıyor ve protokolün standart uygunluk test paketi h2spec'in 146 kontrolünden 145'ini geçiyor. Yazarın belirttiği ayırt edici özellik ise, tarayıcıların isteklere zaten eklediği öncelik ipuçlarını kullanan bir yazma (write) zamanlayıcısı — bugün yaygın olarak konuşlandırılmış sunucuların çoğunun görmezden geldiği sinyaller.

RFC 9113 kapsamına neredeyse tam anlamıyla ulaşma

Yazı, sıfırdan inşa edilen bileşenleri tek tek sayıyor: frame işleme, HPACK başlık sıkıştırma, stream durum makinesi, flow control ve TLS zorunluluğu. Bunlar birlikte, bugün standartlaşmış haliyle HTTP/2'nin neredeyse tüm yüzeyini kapsıyor; RFC 9113, 2015 tarihli orijinal spesifikasyonu geçersiz kıldı ve bir uygulamanın kabul edebileceği TLS sürümleri ve şifreleme paketleri (cipher suite) dahil olmak üzere çeşitli gereksinimleri sıkılaştırdı.

Geriye kalan tek h2spec başarısızlığı yazıda belirtilmediği için, sunucuyu gerçek kullanım için değerlendirmek isteyenlerin test paketini kendilerinin çalıştırması gerekiyor. Yine de, sıfırdan yazılmış bir yığın için tek kontrol kadar temiz bir sonuçtan uzakta olmak kayda değer: h2spec tam olarak frame'leme, hata işleme ve stream durum geçişlerindeki köşe durumlarını sınar — el yapımı uygulamaların en çok takıldığı yerler de burasıdır.

Urgency ipuçlarına göre hareket eden bir zamanlayıcı

Daha alışılmadık kısım ise önceliklendirme. HTTP/2 başlangıçta, tarayıcıların gönderdiği ağaçları sunucuların nadiren dikkate aldığı bir bağımlılık ağacı (dependency tree) tabanlı önceliklendirme şemasıyla geldi. RFC 9218 bunu, iki parametre etrafında kurulmuş daha basit ve genişletilebilir bir şemayla değiştirdi: en acil olan u=0'dan u=7'ye kadar urgency ve bir incremental bayrağı. Modern tarayıcılar bu ipuçlarını sıradan isteklerde gönderiyor.

Yazıya göre Streamux'un cevabı, urgency düzeyleri arasında deficit round-robin — klasik bir adil kuyruklama (fair-queuing) algoritması — uygulayan, takılabilir bir yazma zamanlayıcısı. HTTP/2 flow control her stream'e pencere boyutunda parçalar halinde kredi verir; böylece zamanlayıcı her pencere dolduğunda bir karar noktası elde eder: acil stream'lerin baytları önce kuyruğa alınırken, düşük öncelikli arka plan trafiği bekler.

Yazar tek bir benchmark rapor ediyor: 50 eşzamanlı stream ve 16 KiB'lik flow-control penceresiyle deficit round-robin zamanlayıcı, iş yükünü düz round-robin'den %40 daha hızlı tamamlamış; kullanıcıların önce gördüğü içerik, analitik beacon'ları gibi düşük değerli isteklerin önünde ulaşmış. Bu rakamlar yazarın kendi ölçümleri, tek bir mikro-benchmark'tan geliyor ve bağımsız olarak doğrulanmış değil — ancak sonucun yönü, önceliklendirmeli zamanlamanın sağlaması beklenen etkiyle örtüşüyor.

Go dışı kod için C ABI

Streamux ayrıca bir C ABI dışa aktaran paylaşımlı kütüphane olarak derlenebiliyor; böylece başka dillerde yazılmış servisler, HTTP/2 yığınını bağımsız bir süreç olarak çalıştırmak yerine doğrudan bağlayabilir. Yazı API yüzeyini ayrıntılandırmıyor, ancak belirtilen amaç Go ekosistemi dışında da yeniden kullanım.

Neden önemli

Üretimdeki HTTP/2 yığınlarının çoğu istemci öncelik sinyallerini yok sayar; yani RFC 9218'in sağlaması tasarlanan gecikme avantajları pratikte nadiren gerçekleşir. Urgency'yi bir zamanlama girdisi olarak ele alan — ve etkisini gösteren sayılar yayınlayan — bir uygulama, en azından kontrollü koşullar altında, standardın vaadini yerine getirebildiğinin çalışan bir kanıtıdır.

Ayrıca referans değeri de var. Kompakt, uygunluk sağlamış ve okunabilir bir HTTP/2 uygulaması nadirdir; protokolü öğrenmenin ya da büyük bir üretim yığınıyla boğuşmadan zamanlayıcı fikirleriyle denemeler yapmanın önündeki eşiği düşürür. C dışa aktarımı bu erişimi Go dışı kod tabanlarına kadar genişletiyor.

Tek kişilik bir proje için her zamanki uyarılar geçerli: kendi bildirdiği benchmark'lar, başarısız olan tek uygunluk kontrolü ve gerçek üretim yükü altındaki davranışa dair henüz hiçbir kanıt yok. Yine de, açık sistemler çalışması olarak, web altyapısı inşa eden veya işleten herkesin dikkatini hak eden bir sürüm.

  • #http2
  • #go
  • #open-source
  • #networking
  • #web-performance

İlgili yazılar