Страницы

Сохранить статью у себя в соцсети:

среда, 17 июня 2015 г.

3 reasons to use PgBouncer.

3 причины использовать PgBouncer.

Для тех кто не знает, PgBouncer это легковесный пулер соединений для PostgreSQL. И ниже 3 причины почему его стоит использовать.
- Экономия ресурсов сервера и уменьшение latency на запросах.
- Поддержка online перезапуска без потери клиентских соединений.
- Приостановка клиентских соединения для тихого перезапуска PostgreSQL.
Экономия ресурсов сервера и уменьшение latency на запросах.
Первая причина по которой следует использовать PgBouncer это экономия ресурсов сервера. Все дело в том что PostgreSQL создает отдельный процесс для каждого клиентского соединения. С другой стороны приложения не всегда используют подключение к базе данных, зачастую оно простаивает. Таким образом PgBouncer создает пул соединений к базе данных и выдает эти соединения клиентам по мере необходимости. Таким образом, если у вас много клиентских подключений к базе данных, использование PgBouncer позволяет уменьшить число бэкендов PostgreSQL. Кроме того уменьшается время ответа от базы данных клинту, так как ненужно тратить время на форк бэкенд процесса.
Если вам интересны более-менее конкретные цифры вы можете посмотреть слайды 18, 19, 20 этой презентации. Также стоит отметить что PgBouncer это легковесная программа и не использует значительных ресурсов сервера.

Поддержка online перезапуска без потери клиентских соединений.
Учитывая что PgBouncer становится фронтэндом для соединений к базе данных, важна его постоянная доступность. Поэтому если вы захотите обновить конфигурацию PgBouncer или выполнить обновление пакета, PgBouncer поддерживает online restart/upgrade. Эта функция позволяет выполнить перезапуск PgBouncer без потери клиентских соединений. Таким образом можно выполнить обслуживание прозрачно для приложения и клиентов. Стоит отметить, что для успешной работы этой функции требуется включение unix_socket_dir в файле конфигурации pgbouncer.ini.

Приостановка клиентских соединения для тихого перезапуска PostgreSQL.
Но самое интересное, это то что используя PgBouncer можно временно приостанавливать и возобновлять клиентские соединения. Это очень полезная функция когда нужно выполнить перезапуск PostgreSQL. Также в случае обновления конфигураци или минорного обновления. Для этого нужно использовать административный интерфейс и в нужный момент использовать команды PAUSE. В таком случае все соединения будут приостановлены до тех пор пока вы не сделает команду RESUME. Для приложения это будет выглядеть как задержка при выполнении запросов. Однако это лучше чем сброс соединений с ошибкой.
И напоследок короткое видео с перезапуском PostgreSQL за PgBouncer.

Спасибо за внимание!

5 комментариев:

  1. А в связке с Pgpool2 использовать можно?

    ОтветитьУдалить
    Ответы
    1. Алексей, я правильно понимаю, что связка будет выглядеть: pgBouncer > pgPool > Postgresql ? Есть ли возможность использования 2+ нод pgBouncer с виртуальным IP-адресом и watchdog'ом, по аналогии с pgPool?

      Удалить
    2. Наоборот я думаю что более удачным вариантом будет поставить pgbouncer'ы после pgpool перед postgres'ом; можно будет минимизировать кол-во соединений от пгпула. По поводу вирутального адреса, использовать можно но уже нужно стороннее решение типа keepalived. Вобще вариантов конфигураций очень много поэтому стоит эскпериментировать и искать. А еще например есть haproxy :)

      Удалить
    3. Спасибо за совет насчет haproxy, а pgbounce на входе хотел использовать из-за того, что он якобы не рвет соединения от клиентов. к примеру, при переходе slave в режим master. Есть задача, требующая постоянного коннекта (запись телеметрии), а клиентский софт убог.

      Удалить

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика