カードを使用してマートで支払うとしましょう。 今、あなたは家にいて、しばらく外出していません、そしてあなたはあなたが$20000を借方に記入したというあなたの銀行からのメッセージを受け取ります。 どのように? あなたが購入したものはあなたにたった120ドルの費用がかかりました! これには、銀行での確認に長いプロセスが必要であり、銀行は不正取引の追跡と解決に数か月かかる場合があります。
不正検出メカニズムがシステムに組み込まれていると、無効なトランザクションを判別してリアルタイムで失敗するため、はるかに簡単になります。 ただし、この決定は即座に行われる必要があり、システムはユーザーの過去の行動に基づいて継続的にトレーニングを行う必要があります。 したがって、不正検出システムが異常を検出するのに時間がかかる間、顧客がカウンターで待つことを期待することはできません。 効率的で高速なシステムが必要です。 これは、次のようなキャッシュを使用してデータをメモリに保存する場合に可能です。 NCache ミリ秒以内に処理します。
一般に、不正検出システムには、図1に示すように、XNUMXつのサブシステムが含まれています。
- ニアリアルタイム(NRT)システム: このシステムは入力を処理し、実際の計算を実行する代わりに、事前定義されたパターンとルールを使用して結果が生成されます。 さらに、ユーザーに直接応答するため、結果はミリ秒単位である必要があります。 このシステムの主な目的は、低レイテンシで高スループットです。つまり、このシステムは、より高いパフォーマンスを実現するために、理想的にはローカルメモリに配置する必要があります。
- 入力処理システム: このシステムは、入力の処理とNRTシステムのパラメーターの調整に最大で数分から数時間かかる場合があります。 この更新された情報はオフライン処理システムに送られ、オフライン処理システムで機械学習アルゴリズムがさらに処理されます。
- オフライン処理システム このシステムは、応答するまでに数時間から数か月かかる場合があります。 このシステムは、モデルを改善し、データをトレーニングし、このアップグレードされたデータをNRTシステムにフィードバックしてより良い結果をもたらします。
NCache インメモリキャッシュおよびPub/Subメッセージングバスとして
NCache は、強力なPub/Subメッセージングおよび分散データ構造などの他の機能を提供するメモリ内分散キャッシュです。 不正検出システムに関連するシステムを視野に入れて、 NCache 非常に高速な結果が必要なため、ほぼリアルタイムシステムにシームレスに適合します。 これは次のように可能です NCache 複数の要素間の通信に使用できるだけでなく、アプリケーションに最も近いデータを保存して、データをフェッチするためのネットワーク呼び出しをさらに減らすことができます。
.NETでサンプルの不正検出システムを作成しました。 NCache パフォーマンスとスループットを向上させるため。 作業サンプルを見つけることができます ここGitHubで.
上位レベルでは、アプリケーションは次のように機能します。
- クライアントアプリケーションは、特定の顧客のトランザクションを管理するTransactionRequestManagerと通信します。
- 取引情報は、メッセージとして公開されます。 Pub/Subトピック.
- 不正検出マネージャーはこのトピックをサブスクライブし、トランザクションメッセージを受信します。
- 不正検出ロジックがアイテムに対して実行され、結果がトランザクションマネージャーに送信され、トランザクションマネージャーがクライアントアプリケーションに返送されます。
- その後、顧客情報はを使用してキャッシュに保存されます 分散データ構造 リストなど。 これは、将来のトランザクションに関する意思決定をはるかに簡単にするのに役立ちます。
- データは、を使用してデータベースに保持されます 後書き.
Pub/Subを使用したトランザクションの管理
TransactionRequestManagerはキャッシュで初期化されます。 Transaction Request Managerは、トランザクションをメッセージとして作成し、そのトピックに公開します。
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); } |
リアルタイムでの不正の検出
不正検出器には、トランザクションが有効かどうかを確認するための完全なロジックが含まれています。 これは、すべてのトランザクションを実行し、キャッシュストレージとの接続を確立するためのハンドラーのように動作します。 不正検出マネージャーは、でトピックを作成することによって初期化されます 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; } |
この学習したロジックでは、トランザクションの有効性を判断するために複数の要素を使用します。 トランザクションが有効なIPアドレスと適切なドメインにある有効な電子メールアドレスから発信されているかどうかを確認します。 さらに、その電子メールは、さまざまな疑わしい電子メールに存在してはなりません。 また、トランザクションが疑わしい場所から発生したかどうかもチェックされます。 上記の基準のいずれかが失敗した場合、失敗の重みが増加します。 失敗の重みが決定の重みよりも大きい場合、トランザクションは無効です。 あなたはこれのためのコードを見つけることができます GitHubのロジック.
結果をキャッシュしてデータベースに永続化する
結果が宣言されると、結果はキャッシュに追加/更新されます。
1 2 |
FraudRequest fraudRequest = CreateFraudRequest(transactionMessage, result); ncache.UpdateCustomerInfoInCache(customerkey, fraudRequest); |
キャッシュはデータソース用に構成されています。 顧客情報をメモリ内クラスタに保存するために、 NCacheさん 分散リスト、分散データ構造のXNUMXつです。 顧客の情報は、を使用してデータベースにも保持されます 後書き、顧客情報を非同期的に更新します。
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); } |
キャッシュされると、この結果から新しいメッセージが作成され、TransactionRequestManagerによってサブスクライブされたトピックに公開されます。 メッセージを受信し、結果をクライアントアプリケーションに公開します。
まとめ
NCache は、Pub / Sub、分散データ構造、データソースプロバイダーなどの複数の機能を備えた分散インメモリ.NETキャッシュです。 ローカルメモリにデータを保存して処理する目的は、すべての処理がキャッシュを介して行われ、結果が後でデータベースで更新されるため、ネットワーク転送のコストを削減することです。
上記の記事を読んで楽しんだ、本当にすべてを詳細に説明している、記事は非常に興味深くそして効果的です。 今後の記事に感謝し、幸運を祈ります。