İçeriğe atla
Mühendislik2 dk okuma

120 milisaniyenin anatomisi: canlı veri boru hattımız

YazarEmre SarpYayın tarihi
120 milisaniyenin anatomisi: canlı veri boru hattımız

Canlı skor uygulamalarının çoğu 3–10 saniye gecikmeyle çalışır. Skoranix’te hedefimiz insan algı eşiğinin altı: ortalama 120 milisaniye. Bu yazı, o bütçenin milisaniye milisaniye nasıl harcandığının teknik dökümü.

Bütçe: 120 ms nereye gidiyor?

Kaba döküm şöyle: veri kaynağından alım ~35 ms, doğrulama ve birleştirme ~25 ms, model güncellemesi ~20 ms, yayın katmanı ~15 ms, istemciye ağ ~25 ms. Her katmanın kendi bütçesi ve kendi alarmı var; bütçeyi aşan katman dağıtımı bloklar.

En pahalı ders şuydu: ortalama değil kuyruk gecikmesi yönetilir. p50’si 80 ms olan ama p99’u 2 saniyeye savrulan bir boru hattı, kullanıcı için “bazen bozuk” demektir. Tüm alarmlarımız p99 üzerine kurulu.

Çift kaynak, tek gerçek

Her lig için en az iki bağımsız veri kaynağı dinleriz. Birleştirici katman, kaynaklar arasında çelişki gördüğünde milisaniyeler içinde güven skoruna göre hakemlik yapar: hangi kaynak o ligde, o olay tipinde tarihsel olarak daha isabetliyse onun olayı yayınlanır.

Çelişki çözülemiyorsa olay “beklemede” işaretlenir ve yayın 300 ms’ye kadar ertelenir. Yanlış golü basıp geri almak, 300 ms geç kalmaktan çok daha pahalı — hem teknik hem güven olarak.

Modeli canlıda güncellemek

Canlı kazanma olasılığı her olayda yeniden hesaplanır — ama sıfırdan değil. Ön-hesaplanmış maç durum uzayında artımlı güncelleme yaparız: gol, kart, oyuncu değişikliği gibi olaylar, durum vektörünü kaydırır ve olasılık eğrisi 20 ms içinde yeni konumunu bulur.

Bu mimarinin yan ürünü, kullanıcıların en sevdiği özellik oldu: olasılık eğrisinin maç içindeki akışı. Momentumun matematiksel karşılığını izlemek, skoru izlemekten bazen daha heyecanlı.

Yayın katmanı: son 25 milisaniye

İstemciye ulaşan son ayak WebSocket üzerinden delta yayınıdır: tam durum değil, yalnızca değişen alanlar gider. Ortalama mesaj boyutumuz 180 bayt — mobil ağlarda bile gecikme bütçesini korumanın tek yolu cimrilik.

Bağlantı koptuğunda istemci son olay numarasıyla döner; sunucu aradaki deltaları sıkıştırılmış tek pakette gönderir. Kullanıcı asansörden çıktığında skor “sıçramaz”, yumuşakça yetişir.

Hazır mısın?

Bir sonraki maçı önceden gör

Skoranix’i ücretsiz dene — kurulum 2 dakika, kredi kartı yok.