[Backend-разработка · Базы данных · Архитектура ПО]

Архитектура бэкенда и хранение данных

Серверная архитектура, на которой держится платформа: аккаунты, сигналы, настройки, состояния, фоновые задачи, доступ, отчёты и мониторинг — развитие без переписывания.

Принадлежность
Подсистема экосистемы торговой и AI-автоматизации Astra Raven
Технический фокус
PythonAsync ProcessingSQL DesignBackground WorkersLogging
Что демонстрирует
Архитектура бэкенда · Python-сервисы · SQL · Асинхронная обработка · Интеграции · Сопровождаемость · Эксплуатационная надёжность

01Обзор проекта

От этого слоя зависят все остальные кейсы на сайте. Он хранит пользователей, сигналы, настройки и состояния, запускает фоновые процессы, общается с внешними API и доставляет информацию в Telegram и веб-интерфейсы.

Акцент — на контролируемом развитии: добавлять функции и исправлять ошибки в системе, где уже много движущихся частей, с проверкой каждого изменения до продакшена.

02Инженерная задача

Когда много подсистем используют одну базу и работают параллельно, сложными становятся согласованность, обработка сбоев и управление изменениями — а не отдельные функции.

  • A

    Сохранять согласованность состояния между действиями пользователей и фоновыми процессами.

  • B

    Обрабатывать некорректные или неполные данные от внешних сервисов.

  • C

    Планировать фоновые операции без наложений и потери работы.

  • D

    Делать каждое важное событие прослеживаемым по логам.

03Архитектура решения

Наведите или нажмите на этап.

01

Внешние API

Биржи, Telegram, AI-провайдеры и другие сервисы.

Мониторинг и журналы событий наблюдают за каждым этапом.

04Основные компоненты

  • 01

    Модель данных

    SQL-таблицы и связи для аккаунтов, сигналов, настроек, состояний и истории событий.

  • 02

    Сервисный слой

    Асинхронные Python-сервисы, инкапсулирующие бизнес-логику и внешние интеграции.

  • 03

    Воркеры

    Фоновые процессы для задач по расписанию и долгих операций.

  • 04

    Проверки целостности

    Валидация входных данных и инвариантов перед записью.

  • 05

    Логирование событий

    Структурированные логи, связывающие действия пользователей и фоновую работу.

  • 06

    Доставка

    Эндпоинты и сообщения, доставляющие результаты в Telegram и веб-интерфейсы.

05Технологический стек

Ядро

  • Python
  • async / await
  • aiohttp

Данные

  • SQL
  • SQLite
  • Data modeling

Эксплуатация

  • Linux VPS
  • Background processes
  • Structured logging

06Интерактивная демонстрация

Путь запроса через бэкенд

ИллюстрацияИллюстративное демо. Отправьте запрос через слои и добавьте сбой, чтобы увидеть, как ошибки обрабатываются и логируются.

backend · request pathожидание
01 Внешний API вебхук / биржа
02 Python-бэкенд async-сервис
03 Валидация / логика правила и схемы
04 SQL-база состояние + история
05 Воркеры фоновые задачи
06 Telegram / Web UI доставка

$ tail -f app.log

Мониторинг

обработано
0
дедуплицировано
0
повторов
0
отклонено (невалидно)
0
сбой → алерт
0

07Инженерные решения

  1. 01

    Развивать, а не переписывать

    Изменения вносятся постепенно за чёткими границами, проверяются и только потом расширяются.

  2. 02

    Проверять до сохранения

    Плохие данные останавливаются на слое логики, поэтому база остаётся надёжным источником истины.

  3. 03

    Идемпотентная фоновая работа

    Воркеры можно безопасно перезапустить после прерывания без дублирования эффектов.

  4. 04

    Логи как часть продукта

    Структурированные, связанные логи делают поведение в продакшене объяснимым.

08Надёжность и тестирование

  • Проверка изменений относительно текущего поведения до деплоя.
  • Дедупликация событий и идемпотентная обработка.
  • Обработка ошибок вокруг каждой внешней зависимости.
  • Проверка фактического поведения в продакшене после деплоя.

09Пример кода

process_event.py python
import sqlite3
from datetime import datetime, timezone

def process_event(db: sqlite3.Connection, event_id: str, source: str, kind: str) -> bool:
    """Returns True if processed now, False if it was already handled."""
    try:
        with db:  # one transaction: mark + apply, or neither
            db.execute(
                "INSERT INTO processed_events (event_id, source, event_type, processed_at) "
                "VALUES (?, ?, ?, ?)",
                (event_id, source, kind, datetime.now(timezone.utc).isoformat()),
            )
            apply_side_effects(db, event_id, kind)
        return True
    except sqlite3.IntegrityError:
        return False  # duplicate delivery — safe to ignore

def apply_side_effects(db: sqlite3.Connection, event_id: str, kind: str) -> None:
    ...

Иллюстрация Иллюстративный инженерный пример — идемпотентная обработка событий в SQLite.

Исходный код продукта закрыт. Примеры показывают инженерный подход, а не внутреннюю логику. Больше — в Engineering Lab.

10Возможное развитие

  • Переход на PostgreSQL при необходимости более высокой конкурентной записи.
  • Эндпоинт метрик для глубины очереди и длительности задач.
  • Контрактные тесты для эндпоинтов, которые используют интерфейсы.
Следующий кейс · 06 Astra Server Monitor Инфраструктура · Диагностика серверов · Мониторинг