fraud-engine — demo
$
// Sync response — 200 OK { "transaction_id": "tx_001", "score": 0.85, "decision": "block", "risk_level": "high", "reasons": [ "high transaction amount", "risky merchant category" ], "latency_ms": 4.2 }

Флоу обработки транзакции

Hover для тултипов Click для деталей
Client
POST /v1/score
Click for details
📥 Входящий запрос
Клиент отправляет JSON на /v1/score. Обязательные: transaction_id, amount, currency, user_id.
"transaction_id": "tx_001" "amount": 5000 "currency": "RUB"
Auth
X-API-Key
Click for details
🔐 Аутентификация
SHA-256 хеш API-ключа в БД. Определение tenant_id. Rate limit: 70K req/min.
"X-API-Key": "fd_live_xxx" → SHA-256 → tenant_id = "acme"
Idempotency
Redis cache
Click for details
🔄 Идемпотентность
Redis кэш по X-Idempotency-Key. HIT = мгновенный ответ + X-Idempotency-Replayed: true.
Redis: GET idempotency:{tenant}:{key} → HIT? Return cached response
Blacklist
user_id check
Click for details
🚫 Чёрный список
Мгновенный block без ML! Проверка blacklist:{type}:{id} в Redis.
GET blacklist:user:user_123 → BLOCK if exists
ML Scoring
Random Forest
Click for details
🧠 ML-скоринг
Random Forest на Go без зависимостей. 20 признаков, LRU кэш моделей, hot-reload. Fallback: tenant → default → heuristic.
FeatureExtractor → 20 features RandomForest.predict() → 0.85 PlattScaler → calibrated
Decision
allow/review/block
Click for details
⚖️ Принятие решения
Маппинг score → бизнес-решение. SHAP-like feature contributions для объяснения.
score < 0.5 → ALLOW 0.5 - 0.79 → REVIEW score >= 0.8 → BLOCK
Persist
PostgreSQL
Click for details
💾 Сохранение
Запись в fraud_scores для аудита. JSONB для reasons. Redis кэш для idempotency replay.
INSERT INTO fraud_scores (...) → Redis SET + EXPIRE 86400
Response
200 / 202
Click for details
📤 Ответ клиенту
Sync: HTTP 200 + результат. Async: HTTP 202 + pending. P95: 4.2ms
{"score": 0.85, "decision": "block"}
Ready

Производительность Fraud Detection Engine

0
RPS · Throughput
Рекордная пропускная способность при нагрузочном тестировании. Целевой показатель: 1000 RPS
0
ms · P95 Latency
95-й перцентиль задержки обработки. Целевой показатель: <30ms. Достигнут 7x лучше
0
% · Success Rate
Процент успешных запросов. Целевой показатель: >99.9%. Достигнуто: 100%
0
+ Tests Passing
Unit, ML, Domain, PII, Middleware, E2E тесты. Race detector: pass
0
Features · ML Scoring
Извлекаемых признаков для ML-модели. Feature extraction pipeline
0
req/min · Rate Limit
Максимальный лимит запросов в минуту (~1167 RPS). Настраивается через конфиг

Установка Fraud Detection Engine

Запуск через Go
go run cmd/server/main.go
Docker Production
docker compose -f docker-compose.prod.yml up -d --build

Возможности

01

Real-time Scoring

Скоринг транзакций в реальном времени. P95 latency 4.2ms — в 7 раз лучше целевого показателя.

< 5ms latency
02

Random Forest ML

ML-модель на Go без внешних зависимостей. Итеративный обход деревьев, LRU кэш, hot-reload через fsnotify.

20 features
03

Multi-tenancy

Изолированные ML-модели для разных tenant. Fallback chain: tenant model → default model → heuristic.

Tenant isolation
04

SHAP Explanations

Объяснение предсказаний через feature contributions. Клиент видит, почему транзакция заблокирована.

Explainability
05

Async Pipeline

Worker pool для асинхронной обработки. Queue + idempotency. Режим 202 Accepted для high-load сценариев.

Worker pool
06

Idempotency

Redis кэш для идемпотентных запросов. Tenant-scoped keys. Replayed response с заголовком X-Idempotency-Replayed.

Redis cache
07

152-ФЗ Compliance

PII masking в логах. TLS/HTTPS с Let's Encrypt. Аудит и трассируемость по transaction_id.

Data protection
08

Platt Scaling

Калибровка вероятностей для более точных score. Настройка через конфиг: platt_a, platt_b.

Probability calibration
09

Template Modes

Режимы для тестирования: fraud (всегда high), safe (всегда low), random. Без реальной модели.

Testing modes
10

Risk Rules (YAML)

Динамические правила риска в YAML. Email domains, merchant categories, countries. Hot-reload.

Configurable
11

Prometheus + Grafana

Метрики HTTP, ML cache, model reloads. 3 дашборда, 23 панели. Alert rules настроены.

Observability
12

Production Verified

32 PASS, 0 FAIL в аудите. Docker deployment. JSONB fix, deadlock fix. 100% success rate.

Audit passed

API Endpoints

Method Endpoint Description
GET /health Health check (postgres, redis, model)
POST /v1/score Скоринг транзакции (sync/async)
POST /v1/explain SHAP-like feature explanations
GET /v1/alerts Получить alerts
GET /metrics Prometheus метрики

Compliance & Security

152-ФЗ PII masking в логах, защита персональных данных
152-ФЗ — Защита персональных данных
Полное соответствие российскому законодательству о защите персональных данных.
  • PII masking — email, телефон, номер карты маскируются в логах
  • Data minimization — собираются только необходимые данные
  • Consent tracking — аудит обработки ПДн
  • Breach notification — уведомление при утечке данных
email: u***@g****.com phone: +7 (9***) ***-**-**
TLS/HTTPS Auto Let's Encrypt,强制 HTTPS
TLS/HTTPS — Шифрование транспорта
Автоматическое шифрование всех HTTP-соединений.
  • Let's Encrypt — автоматические SSL-сертификаты
  • HSTS — HTTP Strict Transport Security
  • HTTP → HTTPS — принудительный редирект
  • TLS 1.3 — поддержка актуальной версии протокола
tls: enabled: true cert_file: "" key_file: "" # Auto Let's Encrypt if empty
API Authentication X-API-Key header, tenant resolution
API Authentication — Аутентификация
SHA-256 хеширование API-ключей с определением tenant.
  • SHA-256 hashing — ключи не хранятся в открытом виде
  • Tenant resolution — автоматическое определение tenant_id
  • Key rotation — поддержка ротации ключей
  • Per-tenant limits — индивидуальные лимиты
X-API-Key: fd_live_abc123 → SHA-256 hash → SELECT tenant_id FROM api_keys WHERE api_key_hash = ?
Rate Limiting 70,000 req/min (~1167 RPS)
Rate Limiting — Ограничение запросов
Token bucket алгоритм для защиты от DDoS и brute-force.
  • Token bucket — плавное ограничение без скачков
  • Per-tenant — индивидуальные лимиты для каждого tenant
  • Redis-backed — распределённый счётчик
  • 429 Too Many Requests — стандартный HTTP-код
rate_limit: enabled: true requests_per_minute: 70000 burst: 1000
Idempotency Redis cache, tenant-scoped keys
Idempotency — Идемпотентность
Защита от повторной обработки дубликатов запросов.
  • Redis cache — кэш ответов по X-Idempotency-Key
  • Tenant-scoped — ключи изолированы между tenant
  • TTL 24h — автоматическое истечение кэша
  • Replay header — X-Idempotency-Replayed: true
GET idempotency:{tenant}:{key} → HIT? Return cached response → MISS? Continue to scoring
Audit Trail PostgreSQL persistence, transaction_id tracking
Audit Trail — Аудит операций
Полная трассируемость каждого решения о скоринге.
  • PostgreSQL — JSONB для reasons и contributions
  • transaction_id — уникальный трекинг каждой транзакции
  • Indeces — по tenant_id, created_at для аналитики
  • Export — CSV/JSON выгрузка для отчётов
INSERT INTO fraud_scores (tenant_id, transaction_id, score, decision, reasons, created_at) VALUES (...)

Архитектура

Наведите на компонент для описания

entry point
cmd/server/main.go
HTTP сервер, signal handling
🚀 Entry Point
Точка входа приложения. Инициализирует зависимости, настраивает HTTP сервер, обрабатывает OS сигналы (SIGINT, SIGTERM) для graceful shutdown.
go run cmd/server/main.go
domain
internal/domain/
Transaction, FraudScore, Tenant
📦 Domain Layer
Доменные сущности и бизнес-правила. Чистый Go без зависимостей от инфраструктуры.
  • Transaction — входящая транзакция
  • FraudScore — результат скоринга
  • Tenant — мульти-тенант
application
internal/application/
ScoreService, AuthService
⚡ Application Layer
Бизнес-логика и оркестрация. Связывает domain с adapters.
  • ScoreService — оркестрация скоринга
  • AuthService — аутентификация
http
internal/adapters/http/
Handlers + Middleware
🌐 HTTP Adapter
REST API handlers и middleware цепочка.
  • ScoreHandler — POST /v1/score
  • Middleware — Auth, RateLimit, Logging
ml
internal/adapters/ml/
RandomForest, FeatureExtractor
🧠 ML Adapter
Машинное обучение без внешних зависимостей.
  • RandomForest — ML-модель
  • FeatureExtractor — 20 признаков
  • ModelCache — LRU кэш
  • PlattScaler — калибровка
persistence
internal/adapters/persistence/
PostgreSQL, Redis
💾 Persistence Adapter
Хранение данных и кэширование.
  • PostgreSQL — fraud_scores, tenants, api_keys
  • Redis — idempotency, blacklist, session
async
internal/adapters/async/
Worker pool
🔄 Async Adapter
Асинхронная обработка для high-load.
  • WorkerPool — goroutine pool
  • Queue — in-memory очередь
  • Режим 202 Accepted
config
config/config.yaml
YAML + ENV variables
⚙️ Configuration
Конфигурация через YAML +ENV override.
  • server — port, TLS
  • database — PostgreSQL
  • redis — подключение
  • ml — model_path, platt
  • async — worker_count

Об авторе

Юсупов Роберт Рахимович
Senior Backend Engineer
18+ лет в разработке · Go/PHP · AI · High-load backend
Production-проекты: SQL-Top LogT MT Geo-mapping Stable ID