14
Проблема и решения
Один сеанс — один обслуживающий процесс
повышенный расход ресурсов
увеличение конкуренции
прогрев локальных кешей
Пул соединений в сервере приложений или драйвере
J2EE, JDBC, ODBC, node-postgres, Psycopg2
Пул соединений как сторонний продукт
PgBouncer, Odyssey
Встроенный пул Postgres Pro Enterprise сохраняет
контекст сеанса
Простейшая архитектура, при которой для каждого клиентского
соединения запускается отдельный обслуживающий процесс, имеет
ряд недостатков, которые при большом количестве клиентов
становятся критичными. Увеличивается конкуренция при обращении
к ресурсам, растут накладные расходы на запуск процессов
(в частности, на наполнение кешей) и освобождение ресурсов при их
завершении. Кроме того, размер многих структур в общей памяти
сервера пропорционален числу клиентских соединений.
По этим причинам в нагруженные многопользовательские системы
добавляют пул соединений, позволяющий нескольким клиентам
использовать одно соединение с сервером. Как правило, для этого либо
применяют отдельное решение, такое как PgBouncer или Odyssey, либо
задействуют возможности сервера приложений или драйвера
PostgreSQL.
При таком подходе администратору приходится обслуживать
дополнительную компоненту архитектуры, а разработчику — учитывать
особенности работы приложения с пулом соединений.
Встроенный пул соединений Postgres Pro Enterprise позволяет
воспользоваться преимуществами пула, сохранив при этом
большинство возможностей, связанных с контекстом сеанса.