Gerçek Zamanlı Bir Dolandırıcılık Analitiği Ardışık Düzeni İnşa Etmek
Mimari incelemesi: saniyede 50 bin olayı alma, akıllı sinyallerle zenginleştirme ve akış motorumuzu kullanarak 10 ms'nin altında risk skorlama.
Saniyede 50.000 parmak izi olayını işlemek, her birini akıllı sinyallerle zenginleştirmek ve 10 milisaniyenin altında bir risk skoru döndürmek, dikkatle tasarlanmış bir akış mimarisi gerektirir. Bu makale, ardışık düzenimizi alımdan karara kadar adım adım anlatıyor.
Alım Katmanı
Olaylar, ziyaretçilerin tarayıcılarında çalışan JavaScript ajanımızdan HTTPS POST istekleri olarak gelir. Her olay, şifrelenmiş sinyal yükünü içerir — tipik olarak 130+ tarayıcı sinyalini kapsayan 8-12 KB sıkıştırılmış veri. Uç (edge) sunucularımız TLS'i sonlandırır, istek imzasını doğrular ve yükü işleme ardışık düzenine iletir.
Uç sunucuların müşterilerimizin CDN düğümleriyle aynı yerde konumlandırıldığı çok bölgeli bir dağıtım kullanıyoruz. Bu, küresel olarak isteklerin %95'i için ağ gidiş-dönüş süresini 20 ms'nin altında tutar. Uç sunucular, bir yük dengeleyicinin arkasında çalışan ve istek hacmine göre yatay olarak ölçeklenen durumsuz (stateless) Go hizmetleridir.
Sinyal Çıkarımı
İlk işleme aşaması, sinyal yükünü şifresini çözer ve ayrıştırır. Her sinyal çıkarılır, doğrulanır ve türlendirilir. Canvas karma değerleri, bilinen imkânsız değerlere (canvas engellemesini veya sahteciliğini gösteren) karşı doğrulanır. WebGL parametreleri tutarlılık açısından çapraz doğrulanır. Navigator özellikleri, bilinen geçerli kombinasyonlara karşı kontrol edilir.
Bu aşama ayrıca sinyal normalizasyonu gerçekleştirir. User agent dizeleri yapılandırılmış bileşenlere (tarayıcı, sürüm, işletim sistemi, cihaz) ayrıştırılır. Ekran boyutları, DPI ölçeklemesini hesaba katacak şekilde normalleştirilir. Saat dilimi farkları, IP coğrafi konum verilerine karşı doğrulanır.
Smart Signals Zenginleştirmesi
Çıkarılan sinyaller daha sonra Smart Signals analiziyle — sunucu tarafındaki istihbarat katmanımızla — zenginleştirilir. Buna gizli mod tespiti (sinyal desenlerini bilinen özel gezinme imzalarıyla karşılaştırma), VPN tespiti (IP verilerini saat dilimi ve yerel ayar sinyalleriyle çapraz referanslama), tarayıcı kurcalama tespiti (sinyal sahteciliğini gösteren tutarsızlıkları belirleme) ve sanal makine tespiti (VMware, VirtualBox ve bulut sanal makineleriyle ilişkili donanım profillerini tanıma) dahildir.
Her akıllı sinyal bağımsız olarak hesaplanır ve hem bir boolean sonuç hem de bir güven skoru üretir. Zenginleştirme aşaması her olaya 24 ek sinyal ekleyerek, yalnızca istemci tarafı toplamanın başaramayacağı kapsamlı bir tehdit değerlendirmesi sağlar.
Risk Skorlama Motoru
Zenginleştirilmiş olay, risk skorlama motorumuza — milyonlarca etiketli olay üzerinde eğitilmiş, gradyan artırmalı bir karar ağacı modeline — aktarılır. Model, 130+ ham sinyalin tamamını, 24 akıllı sinyali ve birkaç türetilmiş özelliği dikkate alır: hız metrikleri (son 5 dakika, 1 saat ve 24 saatte bu cihazdan kaç olay geldiği), geçmiş davranış desenleri ve ağ itibar skorları.
Model, 0 ile 100 arasında bir risk skoru ve en çok katkıda bulunan faktörleri çıktı olarak verir. Örneğin 85'lik bir skora "VPN tespit edildi", "gizli mod" ve "yüksek hız — 5 dakikada 47 olay" gibi faktörler eşlik edebilir. Bu açıklanabilirlik, belirli bir olayın neden işaretlendiğini anlaması gereken dolandırıcılık analistleri için kritik öneme sahiptir.
Depolama ve Sorgu Katmanı
Tüm olaylar ClickHouse üzerinde kalıcı hale getirilir — büyük veri kümeleri üzerinde analitik sorgular için optimize edilmiş bir sütunlu (columnar) veritabanı. ClickHouse, yazma hacmimizi (saniyede 50 bin olay) hiç zorlanmadan yönetir ve sütunlu depolaması, milyarlarca satır üzerinde saniyenin altında analitik sorgulara olanak tanır.
Çok katmanlı bir saklama stratejisi kullanıyoruz. Sıcak veriler (son 7 gün), 100 ms'nin altında sorgu yanıtı için NVMe SSD'lerde depolanır. Ilık veriler (7-90 gün) standart SSD'lerdedir. Soğuk veriler (90+ gün) sıkıştırılır ve nesne depolamaya taşınır; sorgulanabilir, ancak daha yüksek gecikmeyle.
Omurga Olarak Kafka
Apache Kafka, ardışık düzeni bir arada tutar. Her aşama Kafka konularına (topic) yazar ve onlardan okur. Alım katmanı ham olayları yazar. Sinyal çıkarım aşaması ham olayları okur ve çıkarılmış olayları yazar. Smart Signals zenginleştirme aşaması çıkarılmış olayları okur ve zenginleştirilmiş olayları yazar. Risk skorlama motoru zenginleştirilmiş olayları okur ve skorlanmış olayları yazar.
Bu mimari birkaç avantaj sağlar: aşamalar bağımsız olarak ölçeklenebilir, bir aşamadaki hatalar diğerlerini etkilemez ve hata ayıklama veya yeniden işleme için olayları herhangi bir aşamadan yeniden oynatabiliriz. Kafka'nın tüketici grupları (consumer groups), her aşama içinde paralel işlemeye olanak tanır ve tam-bir-kez (exactly-once) semantiği, hiçbir olayın iki kez işlenmemesini veya kaybolmamasını sağlar.
Gecikme Bütçesi
Uçtan uca gecikme hedefimiz, zenginleştirilmiş sinyal yükünün işleme ardışık düzenine ulaştığı andan risk skorunun döndürüldüğü ana kadar 10 ms'dir. Bütçe şu şekilde dağılır: sinyal çıkarımı 1-2 ms, Smart Signals zenginleştirmesi 3-4 ms, risk skorlama 2-3 ms ve serileştirme ile yanıt 1-2 ms sürer. Aşamalar arasındaki Kafka atlaması, aynı yerde konumlandırılmış dağıtımımızda 1 ms'den az ekler.
Bu bütçeyi saniyede 50 bin olayda tutarlı bir şekilde karşılamak, her aşamada dikkatli optimizasyon gerektirir. Önceden ayrılmış bellek havuzları, sıfır kopyalı (zero-copy) serileştirme ve toplu ClickHouse yazmaları kullanıyoruz. Risk skorlama modeli, Python yorumlayıcı yükünü ortadan kaldırarak ONNX Runtime kullanılarak yerel koda derlenir.
Mark, dağıtılmış arama katmanımızdaki darboğazı bulmadan önce ardışık düzeni iki hafta boyunca profilledi — tek bir mutex, tüm goroutine'ler arasındaki aramaları serileştiriyordu. Parçalanmış (sharded) bir kilit tasarımına geçtikten sonra p99, 48 ms'den 9 ms'ye düştü. Bazen bir kez bulduğunuzda çözüm utanç verecek kadar basit olur.