Neden Bu Kadar Zor?
Bir Formula 1 aracı, yarış sırasında 300'den fazla sensörden saniyede yaklaşık 1.500 veri noktası üretir. Bu; hız, fren basıncı, direksiyon açısı, DRS durumu, lastik sıcaklıkları, yakıt akışı ve daha onlarca değişkeni kapsar.
Eğer bu veriyi ham haliyle bir veritabanına dökmeye çalışırsanız, ilk dönüşü bitirmeden sisteminiz çöker. Mesele teknik değil, mimari.
Doğru Araçları Seçmek
Trace Apex için mimari kararlarımız şöyle şekillendi:
Veri toplama katmanı: FastF1 kütüphanesi üzerinden Ergast API entegrasyonu. Bu katman yalnızca ham veriyi çeker; hiçbir iş mantığı içermez.
İşleme katmanı: Python tabanlı bir pipeline. Pandas ile ham veri temizlenir, numpy ile türev hesaplamaları (ivme, fren noktaları) yapılır. Bu katman senkron çalışır — WebSocket yerine burada klasik HTTP tercih ettik.
Sunum katmanı: FastAPI + WebSocket. Gerçek zamanlı lap karşılaştırması için WebSocket şarttı. Ancak WebSocket'in maliyeti var: bağlantı yönetimi, reconnect mantığı, client-side state.
Frontend: Next.js ile server-side rendering. Telemetri grafikleri için Recharts tercih ettik — D3 kadar güçlü değil ama Next.js ile entegrasyon maliyeti çok daha düşük.
En Büyük Tuzak: Senkronizasyon
İki pilotun verilerini gerçek zamanlı karşılaştırdığınızda, veriler hiçbir zaman tam olarak eş zamanlı gelmiyor. Birinin lap verisi 50ms geride olabilir. Bu, grafikte çirkin bir kayma yaratır.
Çözümümüz basitti ama bulmak zaman aldı: mesafe bazlı senkronizasyon. Zaman yerine aracın pistteki mesafesini referans alarak her iki pilotun verisini hizaladık. Bu sayede zaman farklılıkları görsel karşılaştırmayı bozmadı.
Öğrendiklerimiz
Performans odaklı bir platform inşa ederken en değerli ders şu oldu: erken optimize etmeyin. İlk versiyonumuzda gerçek zamanlı her şeyi WebSocket üzerinden geçirmeye çalıştık — gereksiz karmaşıklık, gereksiz hata. Mimariyi sadeleştirdikten sonra hem performans arttı hem bakım kolaylaştı.
İkincisi: kullanıcının neye ihtiyacı olduğunu anlayın. F1 analistlerinin istediği "her veriye erişim" değildi. İstediği: "Pilot A, Viraj 9'da Pilot B'den neden 0.3 saniye kazandı?" sorusunun cevabıydı. Bu cevabı vermek için gereken veri seti, ham verinin %5'iydi.