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

28 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 нет.