advanced
Connection pooling
Переиспользуйте соединения с БД или сервисами через ограниченные pool, timeouts, лимиты очереди и расчёт ёмкости на инстанс.
Connection pooling переиспользует соединения с БД (или HTTP) вместо нового TCP+auth на каждый запрос. Pool **ограничен** — при исчерпании callers ждут или падают.
const pool = new Pool({ max: 20, idleTimeoutMillis: 30000, connectionTimeoutMillis: 5000 });
| Параметр | Риск при ошибке | |----------|-----------------| | `max` слишком высокий | Перегруз `max_connections` БД | | `max` слишком низкий | Queueing и timeouts под нагрузкой | | Pool на инстанс | `instances × max` должен влезать в бюджет БД | | Нет timeout | Зависшие запросы копятся |
Считайте размер: если Postgres даёт 200 connections и 10 app instances, `max` на инстанс ~15–18 с запасом под admin и миграции.
На интервью: формула sizing; PgBouncer vs app pool; connection storms при deploy; serverless + БД.
Типовые ошибки: max 100 на каждом pod; нет timeout на acquire; длинные транзакции держат connection.
Компромисс — concurrency против безопасности БД и overhead соединений.
Чеклист:
- Суммарные connections по fleet.
- Acquire timeouts и метрики.
- Короткие транзакции.
- Внешний pooler при необходимости (PgBouncer).