Зачем пулер, если в приложении уже есть пул
Вопрос
У сервиса 40 подов, в каждом пул на 20 соединений к PostgreSQL. Почему при росте числа подов советуют поставить PgBouncer или другой внешний пулер?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- PostgreSQL принимает не больше 100 соединений, и это нельзя изменить
- Каждое соединение это процесс с памятью: 800 простаивающих вредятправильный ответ
- Пулер кеширует результаты частых запросов и разгружает базу
- Без пулера PostgreSQL не умеет держать TLS-соединения с подами
Разбор
Модель PostgreSQL процесс на соединение: каждое стоит памяти (несколько мегабайт и больше, плюс кеши каталога), а при тысячах соединений растут накладные расходы на снимки и блокировки. Прикладной пул в каждом поде ограничивает соединения одного пода, но не общее число: 40 × 20 = 800. Внешний пулер мультиплексирует их и отдаёт в базу, например, 50 реальных соединений в режиме transaction. max_connections (по умолчанию 100) поменять можно, но проблему это не решает. Результатов запросов пулер не кеширует, а TLS PostgreSQL умеет сам.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.