У меня возникли проблемы, выяснить, как именно параллелизм работает на Heroku, и как идти о создании оптимального :concurrency
значение для SidekiqНастройка Sidekiq: параллелизм на Heroku
Вот настройки -
Puma Web Server
2 workers
5 threads
Heroku Dynos
8 web dynos
2 "worker" dynos (These will run Sidekiq, not to be confused with Puma Workers)
DB Connections
120 Max Connections Allowed by Postgres
5 Active Record Pool Size (default)
?? Sidekiq :concurrency value
Каждому работнику Puma разрешено использовать по умолчанию 5 соединений ActiveRecord DB (что хорошо соответствует каждому из 5 потоков). Поскольку в Web Dyno есть два из этих сотрудников Puma, каждый Web Dyno потребляет до 10 подключений. Во всех 8 веб-играх они занимают 80 соединений
Это оставляет 120 - 80 = 40 соединений, которые будут использоваться 2-мя динозаводами, которые будут запускать Sidekiq. Если предположить, что есть один процесс Sidekiq работает на каждом динамометре (это правда?), Каждый процесс Sidekiq свободно использовать до 20 соединений (т.е. набор :concurrency 20
)
Является ли эта логика верна, или я неправильно как эти процессы работают на динамиках?
Ограничен ли процесс Sidekiq каким-либо ограничением пула соединений ActiveRecord 5? Если это так, звучит как установка его на 20 бесполезно, так как на самом деле она может использовать только максимум 5 подключений за раз.
Спасибо за помощь!
Спасибо за ответ ! Quick follow-up - сервер Sidekiq подключается как к «ActiveRecord», так и к «redis». Когда мы говорим «соединения» и «пул соединений», он поддерживает отдельные пулы для обоих из них, или они извлекаются из одного и того же количества пулов, даже если они представляют собой два разных типа соединений? Более конкретно, в приведенном выше примере '' {size: 20} 'относится к соединениям с DB или ActiveX? – user2490003
Sidekiq не имеет ничего общего с ActiveRecord или вашей БД. Rails управляет этими соединениями. –