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