Amplificarea recentă a fenomenului jocurilor de noroc online arată că vor exista întotdeauna oameni care vor încerca să ocolească sau să evite complet comportamentul corespunzător de business și vor încerca să obțină avantaje din acest fapt. Vorbesc în primul rând de impersonificare, de obținerea unor avantaje necinstite de pe urma promoțiilor, a sindicatelor sau simpla încercare de a găsi o scăpare în fluxul de business al sistemului.
Munca la Betfair m-a învățat că, atunci când dezvolți aplicații cu spectru larg, trebuie să depui 10% (sau mai mult) efort suplimentar pentru a-ți proteja aplicația. Totuși, acest lucru se dovedește adesea a fi insuficient și trebuie să iei măsuri pentru a diminua numărul celor care fraudează. Un astfel de exemplu este încercarea de a concilia conturile noi și de a detecta conturile duplicat. În această fază începe magia. La Betfair folosim diferite mecanisme pentru a realiza acest lucru. Voi vorbi în special despre un instrument pe care noi l-am dezvoltat recent. Se numește Spider, iar slujba sa este să detecteze conturile care au legătură, pe baza datelor utilizate în momentul înregistrării. Acesta folosește un set de reguli de potrivire care combină factori precum neclaritatea (distanța Levenshtein), operațiuni în lanț (egalitate, incluziune, începe/ se sfârșește cu) și alte combinații.
Din punct de vedere tehnic, problema pe care încercăm să o rezolvăm este crearea unui grafic al tuturor conturilor create vreodată (reprezentate de noduri) și trasarea unor hotare între conturile care au legătură. Acesta se reduce la o reprezentare grafică și un mecanism pentru a căuta rapid prin toate nodurile. Candidații au fost Neo4J, OrientDB, Dex și Titan.
Toate au punctele lor forte și slăbiciuni, dar în final, noi am ales Titan. Este un graphDB nou; proiectul a fost început în 2012 de către Aurelius și a fost conceput cu gândul la scalabilitate și performanță. Este bazat pe Java și câteva dintre caracteristicile sale includ:
Pentru a completa imaginea, trebuie de asemenea să menționăm și slăbiciunile lui Titan. Câteva dintre acestea sunt:
Bine, poate că am trișat puțin, deoarece noi deja lucram cu Elastic Search și am vrut să încercăm și Cassandra, dar, per total, Titan este o alegere redutabilă pentru reprezentări grafice și ne satisface nevoile foarte bine.
Pe la mijlocul proiectului am descoperit că PayPal a dezvălui într-un comunicat de presă că și ei utilizează Titan pentru a descoperi frauda, deci, din păcate, nu ne putem lăuda că suntem primii care folosesc Titan pentru acest scenariu anume. Totuși, în industria jocurilor, putem afirma cu mândrie că suntem prima companie care își scanează clienții după o multitudine de reguli pentru a preveni și detecta frauda.
Singura problemă pe care am întâlnit-o în mijlocul procesului de implementare a fost când am realizat că avem nevoie de o versiune specifică a Elastic Search și am fost obligați să ramificăm codul bază al Titan pentru a reconcilia versiunile.
Am decis să utilizăm Titan împreună cu Cassandra (pentru persistență) și Elastic Search (pentru indexare/ căutare rapidă). Modul în care am fasonat problema noastră a fost să reprezentăm conturile drept noduri (stocând datele de înregistrare drept atribute ale vârfurilor), dar pentru că se cerea o căutare logică cu specificator ambiguu, am trebuit să stocăm atributele în text clar. Acest lucru nu ne-a făcut prieteni cu departamentul de securitate, deoarece ei aveau reguli stricte în legătură cu stocarea datelor personale de identificare în NoSQL, dar a fost un compromis pe care am fost nevoiți să îl facem.
Am folosit fire multiple pentru a popula inițial graficul utilizând date preluate de la Oracle DB, iar apoi ne-am bazat pe Titan pentru a căuta în paralel în Elastic Search pe baza regulilor noastre de potrivire impuse de către echipa de fraudă și a crea liniile corespunzătoare. Un exemplu simplu de reprezentare grafică ar putea fi următoarea imagine (observați lanțurile frumoase când sunt potrivite mai multe conturi):
Una dintre îmbunătățirile performanței pe care le-am făcut și care merită menționată este o opțiune de căutare leneșă, care se bazează pe crearea liniilor în timpul de rulare când se caută noi legături. Dacă ne-am fi decis să creăm un grafic complet în timpul creșterii activității, am fi vorbit de săptămâni de indexare a datelor, ceea ce ar fi fost inacceptabil din punctul de vedere al utilității.
Căutarea legăturilor înseamnă în principiu începerea cu numai un nod sursă și adunarea tuturor nodurilor adiacente (ca și un păianjen) până când se atinge un număr maxim predefinit al rezultatelor, stocarea rezultatelor în Cassandra și trimiterea către solicitant a unui mail cu un fișier zip conținând toate fișierele csv cu rezultatele.
În general, Titan este un instrument pe care l-aș recomanda dacă scenariul dumneavoastră de afacere solicită o reprezentare grafică bazată pe java a datelor voastre model și aveți nevoie de traversare rapidă și scalabilitate progresivă. Este un framework amuzant cu care să lucrezi, iar proiectul de patru luni a dovedit că este o soluție fezabilă. Deci concluzia mea este: Betfair + Titan = love!
de Ovidiu Mățan
de Dan Suciu
de Ovidiu Mățan
de Sorina Mone
de Ovidiu Mățan