Соединения Heroku Postgres на Рельсах 3 - PullRequest
0 голосов
/ 29 августа 2018

Читал об этом, но не уверен, что полностью понимаю, как работают соединения с Postgres в Rails. У меня до 5 веб-динамов, каждый из которых выполняет 5 процессов (Unicorn), так что будет до 25 подключений, а затем до 50 рабочих динамов через delayed_job, так что будет 75.

Но когда рабочая очередь растет и я запускаю все 50 рабочих динамов, кажется, что я достигаю предела соединения Postgres, равного 128, и я думаю, что это не может быть хорошо.

Может ли веб-динос открывать несколько соединений на процесс? Могут ли рабочие сделать то же самое?

Если это связано с настройкой базы данных пула, то для Unicorn это пул соединений на рабочий процесс или на dyno? Это не ясно для меня (согласно комментариям с Кори), хотя это похоже на рабочий процесс Unicorn.

Есть ли способ установить настройку пула рабочих dynos delayed_job? Я предполагаю, что по умолчанию это тоже 5.

Любые хорошие ресурсы или решения были бы действительно полезны. Похоже, что PGbouncer - это одна из опций, или установка пула из значения по умолчанию 5 на что-то меньшее, например 1 или 2.

РЕДАКТИРОВАТЬ: я по ошибке прочитал журналы NewRelic как мс на транзакцию, но это общая мс для этой категории, так что это не замедляет Postgres, но достижение лимита подключения все еще не идеально.

1 Ответ

0 голосов
/ 29 августа 2018

Один экземпляр Rails может обрабатывать несколько входящих запросов с использованием потоков, несмотря на GIL, поэтому по умолчанию конфигурация заключается в открытии нескольких подключений к базе данных (по одному на поток) и управлении доступом к ним с помощью пула подключений. По умолчанию Rails настроен для поддержки до 5 подключений в этом пуле, но вы можете настроить размер в соответствии с вашими потребностями.

Обычно я предоставляю эту информацию в ответе, но есть много факторов, которые необходимо учитывать, поэтому вместо этого я собираюсь предоставить ссылки на два документа, которые вы должны рассмотреть:

  1. Параллелизм и соединения с базой данных в Ruby с ActiveRecord
  2. Развертывание приложений на Rails с Unicorn

Наконец, я оставлю вам несколько с трудом завоеванных советов: Дитч Единорог и DelayedJob в пользу Puma и Sidekiq . Puma + Sidekiq являются многопоточными и разработаны с учетом производительности. Puma является сервером приложений по умолчанию в Rails 5, и Heroku также рекомендует его. Sidekiq является фактической библиотекой фоновой обработки заданий в сообществе Ruby и пользуется широкой поддержкой и коммерческой поддержкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...