Ölçekte Gerçek Zamanlı Dolandırıcılık Skorlaması
tracio.ai, akış işleme, önceden hesaplanmış sinyal vektörleri ve edge önbelleğiyle saniyede 50 bin olayı 50 ms altı skorlamayla nasıl işliyor.
Ölçekte dolandırıcılık skorlaması, toplu işlemeden (batch processing) temelde farklı bir mimari gerektirir. Bir ödeme yetkilendirilirken veya bir hesap oluşturulurken, bir risk skoru sunmak için dakikalarınız değil, milisaniyeleriniz vardır. tracio.ai’de saniyede 50.000’den fazla olayı 22 ms medyan skorlama gecikmesiyle işliyoruz. Bu makale, bunu mümkün kılan mimariyi açıklar.
Skorlama Pipeline’ı
Gelen her olay üç aşamalı bir pipeline’a girer: sinyal zenginleştirme, vektör hesaplama ve risk skorlaması. Sinyal zenginleştirme, ham olaya cihaz istihbaratı verilerini — ziyaretçinin parmak izini, bot algılama sonuçlarını, IP istihbaratını ve geçmiş davranışını — ekler. Vektör hesaplama, bu zenginleştirilmiş sinyalleri skorlama modelimiz için optimize edilmiş, sabit uzunlukta bir özellik vektörüne dönüştürür. Risk skorlaması, vektörü eğitilmiş modelimizden geçirir ve 0.0 ile 1.0 arasında bir skor döndürür.
Anahtar tasarım kararı, zenginleştirme ve vektör hesaplamanın skorlamadan ayrılmasıdır. Zenginleştirme verileri önceden hesaplanır ve önbelleğe alınır. Bir ziyaretçi bir sayfa yüklediğinde, cihaz profilini hesaplar ve 60 dakikalık bir TTL ile Redis’te saklarız. Bir skorlama isteği geldiğinde — genellikle bir ödeme veya oturum açma tarafından tetiklenir — profili yeniden hesaplamak yerine önceden hesaplanmış profili getiririz. Bu, skorlama gecikmesini 200 ms üzerinden 30 ms altına indirir.
Go ile Akış İşleme
Ingestion katmanımız Go ile yazılmıştır ve bir fan-out mimarisi kullanır. Gelen olaylar HTTP POST aracılığıyla ulaşır ve hemen bir dahili kanala (channel) yerleştirilir. Bir worker goroutine havuzu bu kanaldan okur, zenginleştirme yapar ve zenginleştirilmiş olayları analitik için ClickHouse’a ve gerçek zamanlı işleme için bir skorlama kuyruğuna yazar. Fan-out havuzu, kuyruk derinliğine göre dinamik olarak ölçeklenir.
Ingestion katmanı için Go’yu, mükemmel eşzamanlılık ilkelleri (concurrency primitives) ve öngörülebilir bellek tahsisi nedeniyle seçtik. Her worker goroutine yaklaşık 4KB yığın (stack) alanı tüketir; bu da tek bir düğümde binlerce eşzamanlı worker çalıştırmamıza olanak tanır. Çöp toplayıcının (garbage collector) alt milisaniyelik duraklamaları, yüksek verimde tutarlı gecikmeyi korumak için kritiktir.
Edge Önbelleği ve Sinyal Vektörleri
En yüksek hacimli müşterilerimiz için, önceden hesaplanmış bir sinyal vektörü önbelleği kullanarak skorlama modellerini edge’de dağıtıyoruz. Bir cihaz ilk kez görüldüğünde, tam sinyal vektörünü hesaplar ve edge önbelleğimizde (Cloudflare Workers KV üzerinde dağıtılmış) saklarız. Aynı cihaz için sonraki skorlama istekleri önbelleğe alınmış vektörü getirir ve skorlamayı edge’de yerel olarak çalıştırarak 10 ms altı gecikme elde eder.
Edge skorlama modeli, tam modelimizin damıtılmış bir sürümüdür — daha küçük ve daha hızlı, ancak aynı doğruluk hedefleri için optimize edilmiştir. Edge modelini haftalık olarak yeniden eğitir ve önbellek geçersizleştirme fırtınalarını önlemek için güncellemeleri rolling deployment aracılığıyla dağıtırız. Tam model, edge modelinin güveni yapılandırılabilir bir eşiğin altında olduğu durumlar için sunucu tarafında çalışır.
Analitik için ClickHouse
Tüm zenginleştirilmiş olaylar, sütunlu analitik veritabanımız ClickHouse’ta saklanır. ClickHouse’un sıkıştırma ve sorgu performansı, gerçek zamanlı analitik sorguları desteklerken milyarlarca olayı saklamamıza olanak tanır. Müşterilerimiz bu analitiği dolandırıcılık örüntülerini anlamak, skorlama eşiklerini ayarlamak ve bireysel olayları incelemek için kullanır.
Önceden toplanmış metrikleri korumak için ClickHouse’ta materialized view’lar kullanırız: ülkeye göre dolandırıcılık oranı, cihaz türüne göre skorlama dağılımı ve eşiğe göre yanlış pozitif oranları. Bu materialized view’lar, olaylar ulaştıkça gerçek zamanlı olarak güncellenir ve pahalı toplama sorguları olmadan panoya hazır metrikler sağlar.
Öğrenilen Dersler
Gerçek zamanlı bir skorlama sistemi kurmak bize birkaç ders öğretti. Birincisi, önceden hesaplama en önemli optimizasyondur — skorlama isteği gelmeden önce yapabildiğiniz her iş, gecikme bütçenizden düşülmeyen bir iştir. İkincisi, Go’nun eşzamanlılık modeli yüksek verimli olay işlemeye çok uygundur, ancak GC baskısını önlemek için bellek tahsisi konusunda disiplinli olmalısınız. Üçüncüsü, edge dağıtımı gecikme açısından dönüştürücüdür, ancak eski tahminleri önlemek için dikkatli model yönetimi gerektirir.