Я использую Nginx с Phusion Passenger с однопоточным приложением Rails. Вот в чем загвоздка. В этом приложении я использую многопоточный sidekiq для выполнения некоторых фоновых заданий. Обычно в моем файле database.yml мне нужно установить только значение пула 1. Вот пример:
default: &default
adapter: mysql2
encoding: utf8
collation: utf8_unicode_ci
pool: 1
username: username
password: password
host: localhost
Причина в том, что для каждого открытого соединения сокета tcp, когда HTTP-запрос приходит через этот сокет, nginx принимает запрос и передает информацию пассажиру. Passenger обнаруживает свое приложение Rails и порождает экземпляр Rails, который преобразует ответ в html, который отправляется обратно в nginx, который затем передается обратно клиенту (браузеру) .Таким образом, для каждого экземпляра пассажира мне понадобится только один подключение к базе данных с помощью однопоточного приложения Rails.
Но в моем sidekiq.yml я установил для параллелизма значение 5:
:concurrency: 5
Это означает, что для каждого экземпляра пассажирской стойки у меня будет 5 параллельных потоков, обрабатываемых sidekiq, плюс одно соединение для основного приложения, то есть всего 6 подключений к базе данных для одного экземпляра пассажира.
Когда я смотрю на статус пассажира, я замечаю, что max_pool_size установлен на 6:
----------- General information -----------
Max pool size : 6
Значит ли это, что пассажир никогда не будет порождать более 6 экземпляров Rails одновременно? И если это так, означает ли это, что моя математика верна: 6 (экземпляров) * 6 (подключений к базе данных: 5 для sidekiq и 1 для основного приложения) = 36 (общее количество подключений к базе данных, возможных для моего приложения rails для одновременной обработки ).
Сейчас моя база данных mysql настроена на обработку 151 максимального количества одновременных подключений.
SHOW VARIABLES LIKE "max_connections";
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
Я просто хочу убедиться, что мои расчеты верны в отношении пассажира, рельсов и sidekiq.