Побудова API загроз для глобального масштабу
Від українського антискам-бота до платформи аналізу загроз для всього світу — рішення архітектури, виклики масштабування та уроки.
Команда NSAI
Побудова API загроз для глобального масштабу
NSAI розпочав як Telegram-бот для допомоги українцям у виявленні шахрайських повідомлень. Сьогодні це платформа аналізу загроз, яка обслуговує бізнеси в різних країнах. Ось як ми будували архітектуру для масштабування.
Початок
На початку 2025 ми помітили тенденцію: українці потопали в шахрайських SMS під виглядом Нової Пошти, ПриватБанку, Monobankу, Дії. Ми створили простого Telegram-бота з матчингом паттернів.
За тижні — тисячі користувачів. Бот — один Python-процес на VPS. Час думати масштабніше.
Еволюція архітектури
Фаза 1: Монолітний бот
Користувач → Telegram → Python Bot → Regex → Відповідь
Просто, швидко в розробці. Але: без API, без збереження, без масштабування.
Фаза 2: API + База даних
Telegram Bot ─→ FastAPI ─→ PostgreSQL
Веб-клієнти ──↗ ↘ Redis cache
Класифікацію винесли у FastAPI-сервіс з PostgreSQL та Redis. Бот став просто одним клієнтом API.
Фаза 3: Модульна платформа
┌─────────────────────────────────────────┐
│ Load Balancer │
└────────────┬───────────┬────────────────┘
│ │
┌────▼───┐ ┌────▼───┐
│ API #1 │ │ API #N │ (stateless)
└────┬───┘ └────┬───┘
│ │
┌────────▼───────────▼────────┐
│ Redis Cluster │
└────────────┬────────────────┘
│
┌────────────▼────────────────┐
│ PostgreSQL (primary + read) │
└────────────┬────────────────┘
│
┌────────────▼────────────────┐
│ Qdrant (векторний пошук) │
└──────────────────────────────┘
Ключові рішення:
- Stateless API — горизонтальне масштабування
- Redis для кешу + Celery брокер
- Qdrant для векторної подібності (RAG)
- Celery workers для фонових задач
Виклики масштабування
Виклик 1: Паттерн-матчинг
5 000+ regex не можна перевіряти послідовно. Ми організували їх у дерева категорій з раннім завершенням — 10x менше перевірок.
Виклик 2: Контроль витрат LLM
Хмарні LLM дорогі. Наш підхід:
- Кеш → безкоштовно
- БД → мінімальна вартість
- Regex → нульова вартість, обробляє ~55%
- LLM → тільки для решти ~10%
Результат: 90% запитів ніколи не торкаються LLM.
Виклик 3: Затримка для різних регіонів
- Edge-кешування для поширених хешів
- Регіональні API-ноди (EU-West, EU-East)
- Anycast DNS
Уроки
- Починайте з паттернів, не з ML — regex обробляє більшість відомих загроз миттєво
- Кешуйте все — 35% cache hit зберіг тисячі на LLM-витратах
- API-first — бот, веб, SDK — клієнти одного API
- Інвестуйте в спостережуваність — структуровані логи з correlation ID рятували під час збоїв
Що далі
- Self-hosted варіант для підприємств
- Екосистема плагінів — сторонні модулі виявлення
- Федеративне навчання — обмін паттернами загроз без обміну даними
Хочете перевірити підозріле повідомлення?