Я собираюсь начать использовать PGBouncer, но не уверен, следует ли его использовать на моем сервере базы данных или на серверах приложений. Если он находится на серверах приложений, обязательно будет несколько пулов подключений, а не один центральный пул подключений для общих серверов приложений, но тогда TCP-подключения должны быть воссозданы для каждого нового запроса, а не также, предположительно, в пул. Каков «правильный» способ использования средства просмотра соединения, такого как PGBouncer, и верны ли мои замечания по каждому из них?
Для тех, кто сталкивается с этим вопросом, см. PgBouncer FAQ (последний вопрос).
Лично я бы поставил его на сервер приложений. Вот почему.
PGBouncer в основном реализует пул соединений, который является полезной (хотя иногда неприятно неприятной) вещью, которая уменьшает общую задержку приложения, устраняя затраты на установку нового соединения с базой данных. Во многих случаях это делается самим драйвером подключения к базе данных - см. Драйвер ADO.NET MSSQL в Windows, PDO в PHP и т. Д. И т. Д. в базу данных », а затем получить возможность фактически запускать команды SQL.
Упомянутые выше драйверы реализуют пул соединений, поэтому код должен сделать очень мало, прежде чем он дойдет до того момента, когда база данных сможет получать команды SQL.
PGBouncer - это странный случай, потому что вам все равно нужно открыть соединение с демоном PGBouncer, где бы оно ни было. Поскольку вы пытаетесь свести к минимуму время соединения, имеет смысл разместить демон как можно ближе к коду приложения. В идеале вы должны подключаться через сокет на том же самом устройстве, так как тогда вам не придется проходить через тупик TCP только для того, чтобы добраться до пула подключений.
Как и все остальное, YMMV. Тестируйте, тестируйте, а затем еще раз проверьте.