Bygga en pipeline för realtidsanalys av bedrägerier
Arkitekturgenomgång: att ta emot 50 000 händelser/sekund, berika med smarta signaler och riskbedöma på under 10 ms med vår streaming-motor.
Att bearbeta 50 000 fingerprint-händelser per sekund, berika var och en med smarta signaler och returnera en riskpoäng på under 10 millisekunder kräver en noggrant utformad streaming-arkitektur. Den här artikeln går igenom vår pipeline från mottagning till beslut.
Mottagningslager
Händelser anländer som HTTPS POST-förfrågningar från vår JavaScript-agent som körs i besökarnas webbläsare. Varje händelse innehåller den krypterade signalpayloaden — vanligtvis 8–12 KB komprimerad data som täcker 130+ webbläsarsignaler. Våra edge-servrar terminerar TLS, validerar förfrågans signatur och vidarebefordrar payloaden till bearbetningspipelinen.
Vi använder en driftsättning över flera regioner där edge-servrarna är samlokaliserade med våra kunders CDN-noder. Detta håller nätverkets tur och retur under 20 ms för 95 % av förfrågningarna globalt. Edge-servrarna är tillståndslösa Go-tjänster som körs bakom en lastbalanserare och skalar horisontellt utifrån förfrågningsvolymen.
Signalextraktion
Det första bearbetningssteget dekrypterar och tolkar signalpayloaden. Varje signal extraheras, valideras och typsätts. Canvas-hashar verifieras mot kända omöjliga värden (som indikerar canvas-blockering eller spoofing). WebGL-parametrar korsvalideras för konsekvens. Navigator-egenskaper kontrolleras mot kända giltiga kombinationer.
Det här steget utför även signalnormalisering. User agent-strängar tolkas till strukturerade komponenter (webbläsare, version, OS, enhet). Skärmdimensioner normaliseras för att ta hänsyn till DPI-skalning. Tidszonsförskjutningar valideras mot IP-geolokaliseringsdata.
Berikning med Smart Signals
De extraherade signalerna berikas sedan med Smart Signals-analys — vårt intelligenslager på serversidan. Detta inkluderar inkognitodetektering (jämförelse av signalmönster mot kända signaturer för privat surfning), VPN-detektering (korsreferens av IP-data med tidszons- och lokalsignaler), detektering av webbläsarmanipulation (identifiering av inkonsekvenser som tyder på signalspoofing) och detektering av virtuella maskiner (igenkänning av hårdvaruprofiler kopplade till VMware, VirtualBox och moln-VM:er).
Varje smart signal beräknas självständigt och ger både ett booleskt resultat och en konfidenspoäng. Berikningssteget lägger till 24 ytterligare signaler till varje händelse, vilket ger en heltäckande hotbedömning som går utöver vad enbart insamling på klientsidan kan uppnå.
Motor för riskpoängsättning
Den berikade händelsen skickas till vår motor för riskpoängsättning — en modell med gradient-boostat beslutsträd som tränats på miljontals märkta händelser. Modellen tar hänsyn till alla 130+ råsignaler, 24 smarta signaler och flera härledda funktioner: hastighetsmått (hur många händelser från denna enhet under de senaste 5 minuterna, 1 timmen och 24 timmarna), historiska beteendemönster och nätverkets ryktespoäng.
Modellen ger en riskpoäng mellan 0 och 100, tillsammans med de faktorer som bidrar mest. En poäng på 85 kan till exempel åtföljas av faktorer som ”VPN upptäckt”, ”inkognitoläge” och ”hög hastighet — 47 händelser på 5 minuter”. Denna förklarbarhet är avgörande för bedrägerianalytiker som behöver förstå varför en viss händelse flaggades.
Lagrings- och frågelager
Alla händelser sparas i ClickHouse — en kolumnbaserad databas optimerad för analytiska frågor över stora datamängder. ClickHouse hanterar vår skrivvolym (50 000 händelser/sekund) utan problem, och dess kolumnbaserade lagring möjliggör analytiska frågor på under en sekund över miljarder rader.
Vi använder en lagringsstrategi i flera nivåer. Het data (senaste 7 dagarna) lagras på NVMe-SSD:er för frågesvar under 100 ms. Varm data (7–90 dagar) ligger på vanliga SSD:er. Kall data (90+ dagar) komprimeras och flyttas till objektlagring, sökbar men med högre latens.
Kafka som ryggrad
Apache Kafka binder samman pipelinen. Varje steg läser från och skriver till Kafka-topics. Mottagningslagret skriver råa händelser. Signalextraktionssteget läser råa händelser och skriver extraherade händelser. Smart Signals-berikningssteget läser extraherade händelser och skriver berikade händelser. Motorn för riskpoängsättning läser berikade händelser och skriver poängsatta händelser.
Denna arkitektur ger flera fördelar: steg kan skalas självständigt, fel i ett steg påverkar inte andra, och vi kan spela upp händelser igen genom vilket steg som helst för felsökning eller ombearbetning. Kafkas konsumentgrupper möjliggör parallell bearbetning inom varje steg, och dess exactly-once-semantik säkerställer att ingen händelse bearbetas två gånger eller går förlorad.
Latensbudget
Vårt mål för latens från början till slut är 10 ms från det ögonblick den berikade signalpayloaden anländer till bearbetningspipelinen till det ögonblick riskpoängen returneras. Så här fördelas budgeten: signalextraktion tar 1–2 ms, Smart Signals-berikning tar 3–4 ms, riskpoängsättning tar 2–3 ms, och serialisering och svar tar 1–2 ms. Kafka-hoppet mellan stegen lägger till mindre än 1 ms i vår samlokaliserade driftsättning.
Att konsekvent hålla denna budget vid 50 000 händelser/sekund kräver noggrann optimering i varje steg. Vi använder förallokerade minnespooler, zero-copy-serialisering och batchade ClickHouse-skrivningar. Modellen för riskpoängsättning kompileras till maskinkod med ONNX Runtime, vilket eliminerar overhead från Python-tolken.
Mark ägnade två veckor åt att profilera pipelinen innan han hittade flaskhalsen i vårt distribuerade uppslagslager — en enda mutex serialiserade uppslag över alla goroutiner. Efter bytet till en shardad låsdesign sjönk p99 från 48 ms till 9 ms. Ibland är lösningen pinsamt enkel när man väl hittar den.