docs(#16): ADR-001, ADR-002, индекс и шаблон ADR
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# 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 нет.
|
||||
Reference in New Issue
Block a user