Является ли мое понимание размера Единорога, Sidekiq и DB Pool правильным?

У меня есть настройки Unicorn, Sidekiq и Postgres.

Я пытаюсь понять правильную конфигурацию, чтобы настроить, чтобы я не попадал в максимальный лимит подключения db. В Opsworks экземпляр m1.small Postgres RDS может иметь максимум 121 соединение.

У меня размер пула db 5.

Рассмотрим это. Sidekiq и Unicorn - это собственный процесс. Таким образом, размер пула db для каждого составляет 5. Исправьте меня, если мое понимание здесь неверно.

Если у меня 5 процессов единорога, это означает, что 5 * 5 = 25 соединений с базой данных

Теперь это та часть, где я немного запутался, так как Sidekiq многопоточен. Если Sidekiq имеет concurrency of 5. и размер пула db также установлен равным 5. Имеет ли это значение 25 потенциальных соединений db в данный момент времени?

Это означает, что для одного экземпляра я мог бы иметь 50 дБ соединений?

Ответы

Ответ 1

В Unicorn каждый процесс устанавливает свой собственный пул соединений, поэтому вы, если ваш параметр пула db равен 5, и у вас есть 5 работников Unicorn, вы можете иметь до 25 подключений. Однако, поскольку каждый рабочий-единорог может обрабатывать только одно соединение за раз, тогда, если ваше приложение не использует потоки внутри, каждый рабочий фактически использует только одно соединение db.

В Sidekiq соединения в пуле разделяются между потоками, поэтому вам нужно иметь хотя бы одно соединение для каждого рабочего. Если у вас есть concurrency из 5, то ваш пул должен быть не менее 5.

Имея размер пула, превышающий 1, каждый рабочий Unicorn имеет доступ к соединениям, которые он не может использовать, но фактически не будет открывать соединения, поэтому это не имеет значения.

Общее количество фактических подключений, которые требуется вашему приложению, если вы не используете потоки в коде приложения (и они не используют соединение db), - это один на одного работника Sidekiq плюс один на одного сотрудника Unicorn.