Я работаю над проектом, который, как ожидается, будет обслуживать миллионы пользователей вскоре после запуска. База данных postgres, и на данный момент я предполагаю, что потребуется как минимум два сервера. Системный администратор (который хорошо разбирается в масштабируемых системах) предложил установить балансировщик нагрузки между веб-серверами и серверами баз данных.
Мой вопрос касается различий между балансировкой нагрузки и пулами соединений. Чтобы поддерживать производительность, я должен смотреть на один или другой, или оба?
postgresql
bogeymin
источник
источник
Ответы:
С PostgreSQL у вас есть две различные области, которые могут выполнять пул, либо на уровне приложения (т. Е. Jdbc, встроенный в пул и т. Д.), Либо на промежуточном уровне, который находится между приложением и базами данных, такими как pgbouncer или pgpool.
Если вы выполняете пул на промежуточном уровне, таком как pgbouncer или pgpool, тогда этот уровень также может выполнять балансировку нагрузки для отдельных запросов. Кроме того, при балансировке нагрузки вы можете выполнять запись одним из двух способов: у вас может быть один мастер записи, который реплицирует ваши ведомые устройства с помощью других средств, используя такой инструмент, как slony, или встроенную потоковую репликацию, показанную в pg 9.0. и выше, или вы можете сделать так, чтобы балансировщик нагрузки делал всю запись, так что входящие чтения бьют только по одному дБ, но записи бьют каждую базу данных, чтобы поддерживать их все обновленными.
Или, если вы любитель приключений, вы можете переместить слой балансировки нагрузки вниз на другой слой в сам postgresql, используя plproxy. Это язык pl для pgsql, предназначенный для того, чтобы вы могли поместить одну базу данных pg во внешний интерфейс, в которой нет фактических данных, и эта база данных может работать поверх нескольких, возможно, избыточных баз данных для невероятной пропускной способности. plpoxy довольно сложна в настройке и запуске, но она также достаточно масштабируема. Обратите внимание, что ваше приложение должно быть переписано для поддержки, чтобы его нельзя было бросить ни в какое старое приложение, а просто работать.
http://slony.info/ http://wiki.postgresql.org/wiki/PL/Proxy http://pgpool.projects.postgresql.org/
источник
Балансировка нагрузки и пул соединений - это две разные вещи.
Пул подключений (я из мира Microsoft, но, похоже, что-то похожее) позволяет приложению сохранять соединение с базой данных открытым, чтобы оно могло повторно использовать его для следующего запроса, вместо того, чтобы отключать и повторно подключать для каждого запроса, который нужно выполнить.
Балансировка нагрузки позволяет вам иметь несколько серверов баз данных за балансировщиком нагрузки, так что вы можете распределить нагрузку между несколькими серверами вместо того, чтобы один сервер обрабатывал всю работу.
Вы можете использовать пул соединений с балансировкой нагрузки, однако имейте в виду, что, поскольку соединения никогда не будут разорваны, вы можете получить несбалансированную нагрузку между двумя серверами баз данных.
Если один сервер базы данных не может справиться с нагрузкой приложения, верните туда 3 сервера. Таким образом, вы можете перезагрузить его по мере необходимости без сбоя приложения.
источник