Files
awg-dash/docs/adr/001-backend-python-fastapi.md
T

1.6 KiB
Raw Blame History

001. Backend — Python 3.12 + FastAPI

  • Статус: принято
  • Контекст/issue: #15, #31

Контекст

Нужен control plane: REST API, WebSocket, планировщик, парсинг конфигов, работа с SQLite. Низкоуровневая работа сети и шифрования выполняется не нашим кодом, а бинарями awg и amneziawg-go, трафик маршрутизирует ядро.

Решение

Control plane — Python 3.12 + FastAPI (async). Go остаётся только там, где он уже есть: amneziawg-go и amneziawg-tools собираются в multi-stage Dockerfile (ADR-002).

Альтернативы

  • Go целиком — быстрее на сетевом I/O, но маршрутизацией занимается ядро, а не процесс; выигрыш не оправдывает рост стоимости контракта с UI (схемы, генерация клиента, миграции, веб-фреймворк).
  • Node.js — преимуществ перед Python на нагрузке в единичного пользователя нет.

Последствия

  • OpenAPI-first: FastAPI отдаёт схему, что прямо соответствует задаче #19.
  • В образе появляется Python runtime (плюс 40–60 MB к размеру).
  • Дисциплина async: внешние команды — только asyncio.create_subprocess_exec, блокирующего кода в event loop нет.