Nehmen wir an, Sie bezahlen in einem Supermarkt mit Ihrer Karte. Jetzt sind Sie zu Hause, sind längere Zeit nicht ausgegangen und erhalten eine Nachricht von Ihrer Bank, dass Sie 20000 $ abgebucht haben. Wie? Was Sie gekauft haben, hat Sie nur 120 $ gekostet! Dies erfordert einen langen Überprüfungsprozess bei Ihrer Bank und es kann Monate dauern, bis die Bank die betrügerische Transaktion aufspürt und aufklärt.
Es wäre viel einfacher, wenn ein Betrugserkennungsmechanismus in das System integriert wäre, der ungültige Transaktionen erkennt und sie in Echtzeit fehlschlägt. Diese Entscheidung muss jedoch sofort getroffen werden und das System sollte sich kontinuierlich auf der Grundlage des früheren Verhaltens des Benutzers trainieren. Daher können Sie nicht erwarten, dass Kunden am Schalter warten, während Ihr Betrugserkennungssystem Zeit braucht, um Anomalien zu erkennen. Sie benötigen ein effizientes und schnelleres System. Dies ist möglich, wenn Sie die Daten mithilfe eines Caches im Arbeitsspeicher speichern, z NCache und verarbeiten Sie es innerhalb von Millisekunden.
Im Allgemeinen enthält ein Betrugserkennungssystem drei Subsysteme, wie in Abbildung 1 dargestellt:
- Nahezu-Echtzeit-System (NRT): Dieses System verarbeitet die Eingabe und die Ergebnisse werden anhand vordefinierter Muster und Regeln generiert, anstatt die eigentliche Berechnung durchzuführen. Darüber hinaus müssen die Ergebnisse in Millisekunden vorliegen, da direkt auf den Benutzer reagiert wird. Der Hauptzweck dieses Systems ist ein hoher Durchsatz bei geringer Latenz, was bedeutet, dass sich dieses System idealerweise im lokalen Speicher befinden sollte, um eine höhere Leistung zu erzielen.
- Eingabeverarbeitungssystem: Die Verarbeitung der Eingaben und die Anpassung der Parameter des NRT-Systems kann Minuten bis Stunden dauern. Diese aktualisierten Informationen werden dem Offline-Verarbeitungssystem zugeführt, das darauf maschinelle Lernalgorithmen weiterverarbeitet.
- Offline-Verarbeitungssystem Es kann Stunden bis Monate dauern, bis dieses System reagiert. Dieses System verbessert das Modell, trainiert die Daten und gibt diese aktualisierten Daten für bessere Ergebnisse an das NRT-System zurück.
NCache als In-Memory-Cache und Pub/Sub-Messaging-Bus
NCache ist ein verteilter In-Memory-Cache, der leistungsstarkes Pub/Sub-Messaging und andere Funktionen wie verteilte Datenstrukturen bietet. Die an einem Betrugserkennungssystem beteiligten Systeme im Auge behalten, NCache fügt sich nahtlos in das Near-Real-Time-System ein, da es blitzschnelle Ergebnisse erfordert. Dies ist möglich als NCache kann für die Kommunikation zwischen mehreren Elementen sowie zum Speichern von Daten in der Nähe Ihrer Anwendung verwendet werden, wodurch Netzwerkaufrufe zum Abrufen von Daten weiter reduziert werden.
Wir haben ein Beispielsystem zur Betrugserkennung in .NET erstellt, das Folgendes umfasst: NCache um Leistung und Durchsatz zu verbessern. Das Arbeitsbeispiel finden Sie hier hier bei GitHub.
Auf einer höheren Ebene funktioniert die Anwendung wie folgt:
- Die Clientanwendung kommuniziert mit dem Transaction Request Manager, der die Transaktion des jeweiligen Kunden verwaltet.
- Die Transaktionsinformationen werden als Nachricht an den veröffentlicht Pub/Sub-Thema.
- Der Fraud Detection Manager abonniert dieses Thema und empfängt die Transaktionsnachricht.
- Die Betrugserkennungslogik wird für das Element ausgeführt und das Ergebnis wird an den Transaktionsmanager gesendet, der wiederum an die Clientanwendung zurückgesendet wird.
- Die Kundeninformationen werden dann im Cache gespeichert Verteilte Datenstrukturen wie z. B. Listen. Dies wird dazu beitragen, Entscheidungen über zukünftige Transaktionen viel einfacher zu treffen.
- Die Daten werden mithilfe von in der Datenbank gespeichert Hinterschreiben.
Transaktionen mit Pub/Sub verwalten
Der Transaction Request Manager wird mit dem Cache initialisiert. Der Transaktionsanforderungsmanager erstellt die Transaktion als Nachricht und veröffentlicht sie in ihrem Thema.
1 2 3 4 5 |
public void CreateRelevantSubscription() { MessageReceivedCallback transactionmessageReceivedCallback = new TransactionCompletedMessage(this).MessageReceivedCallback; transactionSubscription = base.CreateRelevantSubscriptions(Topics.REPLIESTOPICS, transactionmessageReceivedCallback); } |
Wenn eine Transaktion über den Transaction Request Manager durchgeführt wird, erstellt dieser zunächst eine Nachricht aus den Kundeninformationen und veröffentlicht diese dann als Nachricht zum Transaktionsthema. Dieses Thema wird vom Fraud Detection Manager abonniert, der die Nachricht empfängt, eine Betrugserkennungslogik für die eingehende Nachricht ausführt und die Ergebnisse an den Transaction Request Manager zurücksendet.
1 2 3 4 5 |
// Sending messages on the respective topic if (customer != null) { ncache.PublishMessageOnTopic(Topics.TRANSACTIONTOPICS, CreateTransactionFromCustomer(customer), null); } |
Betrug in Echtzeit erkennen
Der Fraud Detector enthält eine vollständige Logik zur Überprüfung, ob eine Transaktion gültig ist oder nicht. Es verhält sich wie ein Handler, der alle Transaktionen durchführt und eine Verbindung mit dem Cache-Speicher herstellt. Der Fraud Detection Manager wird durch Erstellen eines Themas in initialisiert NCache und dieses Thema abonnieren. Der Rückruf für das Fraud Detection Manager-Thema ist in der Transaction Request Manager-Logik vorhanden, da er die Ergebnisse der Fraud Detection Manager-Logik zurück an den Transaction Request Manager sendet.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public void InitiliazeFraudManager() { base.CreateRelaventTopics(Topics.REPLIESTOPICS); base.CreateRelaventTopics(Topics.TRANSACTIONTOPICS); CreateRelevantSubscription(); } public void CreateRelevantSubscription() { // Initializes the relevant subscribers with their callbacks MessageReceivedCallback transacionManagermessageReceivedCallback = new StartTransactionMessage(this).MessageReceivedCallback; transactionSubscription = base.CreateRelevantSubscriptions(Topics.TRANSACTIONTOPICS, transacionManagermessageReceivedCallback); } |
In der Betrugserkennungslogik werden zunächst Kundendaten aus dem Speicher abgerufen. Wenn sie dort vorhanden sind, überprüfen wir, ob eine der letzten Transaktionen im Speicher betrügerisch war. Wenn ja, erklären wir auch diese Transaktion als fehlgeschlagen. Wenn keine derartigen Informationen empfangen werden und alle In-Memory-Transaktionen gültig sind, führen wir die bereits erlernte Logik auf diese Daten aus.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (customerInfo != null) { if (learntLogic.FraudFoundInLastTransactions(transactionMessage, customerInfo)) { result = Result.Faliure; } } if (result != Result.Faliure) { bool isValid = learntLogic.IsTransactionValid(transactionMessage); if (!isValid) result = Result.Suspicious; } |
In dieser erlernten Logik verwenden wir mehrere Faktoren, um die Gültigkeit der Transaktion zu bestimmen. Wir prüfen, ob eine Transaktion von einer gültigen IP-Adresse und einer gültigen E-Mail-Adresse stammt, die in einer richtigen Domain liegt. Darüber hinaus sollte die E-Mail nicht in einer Reihe verdächtiger E-Mails vorkommen. Es wird auch überprüft, ob die Transaktion von einem verdächtigen Ort ausging. Wenn eines der oben genannten Kriterien fehlschlägt, wird die Fehlergewichtung erhöht. Wenn die Fehlergewichtung größer als die Entscheidungsgewichtung ist, gilt die Transaktion als ungültig. Den Code dafür finden Sie hier Logik bei GitHub.
Ergebnisse zwischenspeichern und in der Datenbank speichern
Sobald das Ergebnis deklariert wurde, wird das Ergebnis im Cache hinzugefügt/aktualisiert.
1 2 |
FraudRequest fraudRequest = CreateFraudRequest(transactionMessage, result); ncache.UpdateCustomerInfoInCache(customerkey, fraudRequest); |
Der Cache ist für die Datenquelle konfiguriert. Für die Speicherung von Kundeninformationen im In-Memory-Cluster haben wir verwendet NCache verteilte Listen, die zu den verteilten Datenstrukturen gehören. Die Informationen der Kunden werden ebenfalls in der Datenbank gespeichert Write-Behind, wodurch die Kundeninformationen asynchron aktualisiert werden.
1 2 3 4 5 6 7 8 9 10 11 |
IDistributedList list = cache.DataTypeManager.GetList(key); if (list == null) AddCustomerInCache(key, null, cutomerInfo); else { // Update info of a customer against its id list.WriteThruOptions = new WriteThruOptions(WriteMode.WriteBehind); list.Add(cutomerInfo); } |
Nach der Zwischenspeicherung wird aus diesem Ergebnis eine neue Nachricht erstellt und wieder in dem vom Transaction Request Manager abonnierten Thema veröffentlicht. Es empfängt die Nachricht und veröffentlicht das Ergebnis zurück an die Clientanwendung.
Zusammenfassung
NCache ist ein verteilter In-Memory-.NET-Cache, der über mehrere Funktionen wie Pub/Sub, verteilte Datenstrukturen, Datenquellenanbieter und mehr verfügt. Der Zweck der Speicherung und Verarbeitung von Daten im lokalen Speicher besteht darin, die Kosten für die Netzwerkübertragung zu eliminieren, da die gesamte Verarbeitung über den Cache erfolgt und die Ergebnisse später in der Datenbank aktualisiert werden.
Es hat mir Spaß gemacht, den Artikel oben zu lesen, er erklärt wirklich alles im Detail, der Artikel ist sehr interessant und effektiv. Vielen Dank und viel Glück mit den kommenden Artikeln.