카드를 사용하여 마트에서 결제한다고 가정해 보겠습니다. 이제 당신은 집에 있고 한동안 외출하지 않았으며 은행으로부터 $20000를 인출했다는 메시지를 받았습니다. 어떻게? 구입한 비용은 단돈 $120입니다! 이를 위해서는 은행과의 긴 확인 절차가 수반되며 은행에서 사기 거래를 추적하고 해결하는 데 몇 달이 걸릴 수 있습니다.
사기 탐지 메커니즘이 시스템에 통합되어 잘못된 거래를 결정하고 실시간으로 실패하는 경우 훨씬 쉬울 것입니다. 그러나 이 결정은 즉각적이어야 하며 시스템은 사용자의 과거 행동을 기반으로 지속적으로 스스로 훈련해야 합니다. 따라서 사기 감지 시스템이 이상을 감지하는 데 시간이 걸리는 동안 고객이 카운터에서 기다릴 것이라고 기대할 수 없습니다. 효율적이고 빠른 시스템이 필요합니다. 다음과 같은 캐시를 사용하여 데이터를 메모리에 저장하면 가능합니다. NCache 밀리초 이내에 처리합니다.
일반적으로 사기 탐지 시스템에는 그림 1과 같이 세 가지 하위 시스템이 포함됩니다.
- 근실시간(NRT) 시스템: 이 시스템은 실제 계산을 수행하는 대신 미리 정의된 패턴과 규칙을 사용하여 입력을 처리하고 결과를 생성합니다. 또한 결과는 사용자에게 직접 응답하므로 밀리초 단위여야 합니다. 이 시스템의 주요 목적은 대기 시간이 짧은 높은 처리량입니다. 즉, 이 시스템은 이상적으로는 더 높은 성능을 달성하기 위해 로컬 메모리에 있어야 합니다.
- 입력 처리 시스템: 이 시스템은 입력을 처리하고 NRT 시스템의 매개변수를 조정하는 데 몇 분에서 몇 시간이 걸릴 수 있습니다. 이 업데이트된 정보는 기계 학습 알고리즘을 추가로 처리하는 오프라인 처리 시스템에 제공됩니다.
- 오프라인 처리 시스템 이 시스템은 응답하는 데 몇 시간에서 몇 달이 걸릴 수 있습니다. 이 시스템은 모델을 개선하고 데이터를 훈련하며 이 업그레이드된 데이터를 NRT 시스템에 다시 공급하여 더 나은 결과를 얻습니다.
NCache 메모리 내 캐시 및 Pub/Sub 메시징 버스로
NCache 강력한 Pub/Sub 메시징 및 분산 데이터 구조와 같은 기타 기능을 제공하는 메모리 내 분산 캐시입니다. 사기 탐지 시스템과 관련된 시스템을 살펴보고, NCache 매우 빠른 결과가 필요하므로 거의 실시간 시스템에 완벽하게 맞습니다. 이것은 다음과 같이 가능합니다. NCache 여러 요소 간의 통신에 사용할 수 있을 뿐만 아니라 애플리케이션에 가장 가까운 데이터를 저장하여 데이터를 가져오기 위한 네트워크 호출을 더욱 줄일 수 있습니다.
다음을 포함하는 .NET에서 샘플 사기 탐지 시스템을 만들었습니다. NCache 성능과 처리량을 개선합니다. 작업 샘플을 찾을 수 있습니다. 여기 GitHub에서.
상위 수준에서 애플리케이션은 다음과 같이 작동합니다.
- 클라이언트 애플리케이션은 해당 고객의 트랜잭션을 관리하는 트랜잭션 요청 관리자와 통신합니다.
- 트랜잭션 정보는 메시지로 게시됩니다. 게시/구독 주제.
- 사기 탐지 관리자는 이 항목을 구독하고 트랜잭션 메시지를 받습니다.
- 사기 탐지 논리는 항목에 대해 수행되며 결과는 클라이언트 애플리케이션으로 다시 전송되는 트랜잭션 관리자에게 전송됩니다.
- 그런 다음 고객 정보는 다음을 사용하여 캐시에 저장됩니다. 분산 데이터 구조 목록과 같은. 이것은 향후 거래에 대한 결정을 훨씬 쉽게 내리는 데 도움이 될 것입니다.
- 데이터는 다음을 사용하여 데이터베이스에 유지됩니다. 후기 쓰기.
Pub/Sub로 트랜잭션 관리
트랜잭션 요청 관리자는 캐시로 초기화됩니다. 트랜잭션 요청 관리자는 트랜잭션을 메시지로 생성하고 해당 주제에 게시합니다.
1 2 3 4 5 |
public void CreateRelevantSubscription() { MessageReceivedCallback transactionmessageReceivedCallback = new TransactionCompletedMessage(this).MessageReceivedCallback; transactionSubscription = base.CreateRelevantSubscriptions(Topics.REPLIESTOPICS, transactionmessageReceivedCallback); } |
Transaction Request Manager를 통해 트랜잭션이 발생할 때마다 먼저 고객 정보에서 메시지를 생성한 다음 이를 트랜잭션 주제에 메시지로 게시합니다. 이 항목은 메시지를 수신하고 들어오는 메시지에 대해 사기 탐지 논리를 수행하고 트랜잭션 요청 관리자에게 결과를 다시 보내는 사기 탐지 관리자가 구독합니다.
1 2 3 4 5 |
// Sending messages on the respective topic if (customer != null) { ncache.PublishMessageOnTopic(Topics.TRANSACTIONTOPICS, CreateTransactionFromCustomer(customer), null); } |
실시간 사기 탐지
Fraud Detector에는 거래가 유효한지 여부를 확인하기 위한 완전한 논리가 포함되어 있습니다. 모든 트랜잭션을 수행하고 캐시 저장소와의 연결을 설정하는 처리기처럼 동작합니다. Fraud Detection Manager는 다음에 항목을 생성하여 초기화됩니다. NCache 이 주제를 구독합니다. 사기 탐지 관리자 주제에 대한 콜백은 사기 탐지 논리의 결과를 거래 요청 관리자에게 다시 보낼 때 거래 요청 관리자 논리에 존재합니다.
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); } |
사기 탐지 논리에서는 먼저 고객 데이터를 메모리에서 가져오고, 메모리에 있는 경우 마지막 메모리 내 트랜잭션이 사기인지 확인하고 사기인 경우 이 트랜잭션도 실패로 선언합니다. 그러한 정보가 수신되지 않고 모든 메모리 내 트랜잭션이 유효한 경우 이 데이터에 대해 이미 학습된 논리를 수행합니다.
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; } |
이 학습된 논리에서는 트랜잭션의 유효성을 결정하기 위해 여러 요소를 사용합니다. 거래가 유효한 IPAddress와 적절한 도메인에 있는 유효한 이메일 주소에서 시작되었는지 확인합니다. 또한 해당 이메일은 의심스러운 이메일 범위에 포함되어서는 안 됩니다. 거래가 의심스러운 위치에서 시작되었는지도 확인합니다. 위의 기준 중 하나라도 실패하면 실패 가중치가 증가합니다. 실패 가중치가 결정 가중치보다 크면 트랜잭션이 유효하지 않습니다. 이에 대한 코드를 찾을 수 있습니다. GitHub의 논리.
결과 캐싱 및 데이터베이스에 유지
결과가 선언되면 캐시에 결과가 추가/업데이트됩니다.
1 2 |
FraudRequest fraudRequest = CreateFraudRequest(transactionMessage, result); ncache.UpdateCustomerInfoInCache(customerkey, fraudRequest); |
캐시는 데이터 원본에 대해 구성됩니다. 인메모리 클러스터에 고객 정보를 저장하기 위해 우리는 NCache의 분산 목록, 분산 데이터 구조 중 하나입니다. 고객의 정보는 또한 다음을 사용하여 데이터베이스에 유지됩니다. 뒤에 쓰기, 고객 정보를 비동기식으로 업데이트합니다.
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); } |
캐시되면 이 결과에서 새 메시지가 생성되고 트랜잭션 요청 관리자가 구독한 주제에 다시 게시됩니다. 메시지를 수신하고 클라이언트 애플리케이션에 결과를 다시 게시합니다.
결론
NCache Pub/Sub, 분산 데이터 구조, 데이터 소스 공급자 등과 같은 여러 기능과 함께 제공되는 분산 메모리 내 .NET 캐시입니다. 로컬 메모리에 데이터를 저장하고 처리하는 목적은 모든 처리가 캐시를 통해 수행되고 결과가 나중에 데이터베이스에서 업데이트되므로 네트워크 전송 비용을 제거하는 것입니다.
위의 기사를 즐겁게 읽고 모든 것을 자세히 설명하며 기사는 매우 흥미롭고 효과적입니다. 다가오는 기사에 감사하고 행운을 빕니다.