Оптимизация и масштабирование VPN-сервиса

Задача
Клиент — иностранный провайдер VPN-услуг на основе Telegram-бота — обратился с проблемой производительности и масштабирования: существующий сервис работал на базе простого синхронного кода с использованием SQLite как базы данных, что приводило к частым сбоям при росте пользовательской базы.

Цели проекта:
  • Провести аудит и рефакторинг для повышения производительности.
  • Внедрить масштабируемую архитектуру с поддержкой 10k+ пользователей.
  • Демонстрировать масштабирование на 5 стран (Россия, Германия, Нидерланды, Финляндия, США) с балансировщиками нагрузки.
  • Интеграция с современными инструментами.
Аудит системы
Аудит показал, что исходная система имела ряд узких мест:
  • База данных: SQLite — файловая БД, не предназначенная для конкурентного доступа. При одновременных запросах от пользователей возникали locks, приводящие к таймаутам.
  • Архитектура бота: Синхронный код (без async/await) блокировался на I/O-операциях (запросы к API, платежам), что снижало throughput до 10-20 запросов/сек.
  • Управление VPN: Прямое взаимодействие бота с серверами (создание ключей, конфигов) без централизованного backend, что усложняло мониторинг и масштабирование.
  • Безопасность: Нет строгого контроля IP, уязвимости в API, отсутствие rate-limiting.
  • Масштабируемость: Система не поддерживала репликацию БД или горизонтальное масштабирование нод VPN.
  • Ожидаемые проблемы при росте: простои, потеря платежей, блокировка аккаунтов из-за IP-смен.
Предложенное решение
Мы предложили полную переработку с разделением на микросервисы:
  • Backend:
    FastAPI (асинхронный Python-фреймворк) для обработки бизнес-логики, API и интеграций.
  • Бот:
    Aiogram (async Telegram Bot API) для пользовательского интерфейса, с FSM (Finite State Machine) на Redis для состояний.
  • Протокол связи (MCP):
    REST API между ботом и backend с API-ключами, TLS. Структура запросов — JSON с method/params/request_id.
  • База данных:
    PostgreSQL с primary/replica репликацией для высокой доступности.
  • VPN-менеджмент:
    Marzban для создания пользователей/конфигов, V2IpLimit для детекции смены IP.
  • Фоновые задачи:
    Celery + Beat для автоматизации (проверки подписок, рассылок, продлений).
  • Платежи:
    Интеграция с платежной системой и Telegram Stars.
  • Мониторинг:
    Prometheus + Grafana для метрик, алерты через отдельный бот.
Преимущества: асинхронность повышает производительность в 5-10 раз, PostgreSQL обеспечивает ACID-свойства, MCP упрощает поддержку и последующее использование AI-агентов в разработке и поддержке пользователей.
Это позволяет легко добавлять ноды: новая страна подключается через Marzban API, LB настраивается автоматически.
  • Backend (FastAPI)
    • Модели и CRUD: SQLAlchemy.
    • Admin-панель: На Bootstrap/Jinja2 для управления пользователями/рассылками.
    • Сервисы: Для создания в Marzban, обработки платежей.
    • Безопасность: JWT-аутентификация, rate-limiting, HMAC-подпись MCP-запросов.
    01
  • Telegram-бот (Aiogram)
    • Handlers: Для базовых команд, подписок, платежей, настроек (рассылки).
    • Keyboards: Inline для меню (получить конфиг, продлить, отписаться).
    • MCP-интеграция: POST-запросы к backend с API-ключом.
    • Рассылки: Получение батчей user_id от backend, отправка с кнопками “Поддержка” / “Отписаться”.
    • FSM: RedisStorage для состояний.
    • Локализация: Поддержка нескольких языков.
    02
  • Деплой
    Docker Compose для backend/DB, Docker, Nginx для прокси/SSL.
    03
Масштабирование

Для демонстрации масштабирования добавлены 5 стран с балансировщиками нагрузки (Nginx Round Robin). Каждая страна имеет 2-3 ноды для распределения трафика. Backend (Marzban) централизованно управляет нодами, распределяя пользователей по гео.

  • Распределение:
    Автоматическое назначение ноды при создании подписки (на основе предпочтений пользователя).
  • Load Balancing:
    Nginx на LB проксирует трафик к нодам, мониторит здоровье (Prometheus).
  • Репликация:
    PostgreSQL replica для read-запросов (статистика, рассылки).
Результаты и преимущества

После реализации:
  • Производительность: Время ответа API снизилось с 500ms до <100ms (асинхронность + PostgreSQL). Throughput бота — 200+ запросов/сек.
  • Масштабируемость: Поддержка 10k+ активных пользователей, нулевые простои благодаря репликации и Celery (автопродление подписок, рассылки до 5k сообщений/мин).
  • Безопасность: Строгий IP-контроль (блокировка при смене), 99.9% uptime, защита от DDoS (rate-limiting).
  • Бизнес-метрики: Рост retention на 40% (уведомления о продлении), новые платежи через Telegram Stars (+20% конверсии), миграция 100% данных без потерь.
  • Мониторинг: Grafana дашборды для трафика по странам, алерты на IP-смены/ошибки.
Проект реализован за 4 этапа (инфраструктура, backend, бот, миграция/запуск). Проект успешно работает.
Найдём решение для вашего бизнеса
Телефон - +7 905 715-55-55

Email - agat55555@mail.ru

ООО «СЕКЬЮРИТИ ХАУС