perf(backend): явный пул соединений БД и несколько воркеров uvicorn
Пул создавался с дефолтом SQLAlchemy (5 + 10) и под нагрузкой выгребался за секунды. Теперь параметры заданы явно и вынесены в настройки: DB_POOL_SIZE=10, DB_MAX_OVERFLOW=10, DB_POOL_TIMEOUT=10. Таймаут снижен с дефолтных 30 секунд намеренно — пусть запрос падает быстро и показывает проблему, а не висит полминуты. Backend запускался одним процессом uvicorn: любой блокирующий вызов останавливал и параллельные запросы, и WS-чат всех участников. Добавлен UVICORN_WORKERS с дефолтом 2 — не по числу ядер, потому что на четырёхъядерном сервере ядра делятся с LiveKit, а медиа важнее API. Бюджет соединений считается на весь инстанс: каждый воркер держит свой пул, поэтому UVICORN_WORKERS × (DB_POOL_SIZE + DB_MAX_OVERFLOW) должно оставаться заметно ниже max_connections у Postgres. Многопроцессность безопасна: бутстрап настроек в lifespan идемпотентен (INSERT ... ON CONFLICT DO NOTHING), а WS-чат разносит сообщения через Redis pub/sub и состояния в памяти процесса не держит.
This commit is contained in:
16
.env.example
16
.env.example
@@ -81,6 +81,20 @@ LIVEKIT_NODE_IP=127.0.0.1
|
||||
# с точкой монтирования тома в обоих сервисах.
|
||||
RECORDINGS_DIR=/recordings
|
||||
|
||||
# --- Производительность backend ---
|
||||
# Число процессов uvicorn. Один процесс означает, что любой блокирующий вызов
|
||||
# в обработчике останавливает весь event loop: параллельные входы в конференцию
|
||||
# и WS-чат всех участников встают в очередь. Дефолт 2 рассчитан на 4-ядерный
|
||||
# сервер, где ядра делятся с LiveKit (медиа важнее API).
|
||||
UVICORN_WORKERS=2
|
||||
# Пул соединений с БД НА КАЖДЫЙ воркер. Общий расход инстанса —
|
||||
# UVICORN_WORKERS × (DB_POOL_SIZE + DB_MAX_OVERFLOW), плюс соединения Celery
|
||||
# и alembic. Держите сумму заметно ниже max_connections у Postgres (по
|
||||
# умолчанию 100), иначе вместо понятной ошибки приложения получите отказ БД.
|
||||
DB_POOL_SIZE=10
|
||||
DB_MAX_OVERFLOW=10
|
||||
DB_POOL_TIMEOUT=10
|
||||
|
||||
# --- Email (рассылка саммари + .ics-приглашения) ---
|
||||
# `console` — дефолт для dev (письмо только логируется, ссылка подтверждения
|
||||
# email берётся из логов); `smtp` — реальная отправка через aiosmtplib.
|
||||
@@ -98,7 +112,7 @@ SMTP_TIMEOUT_S=30
|
||||
# --- Версия инстанса (релиз v0.0.1) ---
|
||||
# install.sh копирует значение из корневого файла VERSION при каждой
|
||||
# установке/обновлении — руками менять не нужно.
|
||||
VIDCONF_VERSION=0.0.11
|
||||
VIDCONF_VERSION=0.0.12
|
||||
|
||||
# --- Профили compose. Дефолт ниже (`media,monitoring`) — только для ручного
|
||||
# `docker compose up` БЕЗ install.sh: медиа (LiveKit+coturn) + мониторинг,
|
||||
|
||||
Reference in New Issue
Block a user