1.6 KiB
1.6 KiB
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 нет.