Я пытаюсь понять влияние на производительность нескольких экземпляров (мастеров) nginx, работающих на одном компьютере, вместо того, чтобы загружать их все в один экземпляр с использованием разных серверных блоков. Как использование нескольких экземпляров nginx влияет на такие вещи, как оптимизация worker_process и worker_connections?
Я вижу множество советов, указывающих, что worker_process должен отражать количество ядер, и самое большее количество ядер должно быть в два раза больше. Я также должен понимать, что worker_connections должен соответствовать ulimit или быть немного ниже ulimit. Создание слишком большого количества доступных подключений или слишком большого количества рабочих на ядро должно отрицательно сказаться на производительности.
У меня два ядра и ulimit 1024, но у меня есть 4 экземпляра nginx, каждый из которых имеет следующие настройки:
worker_processes 4;
worker_connections: 1024;
Разве это не так, как если бы я worker_processes 16;
и worker_connections 4069;
?
Примечание. Позвольте мне прояснить, когда я говорю «экземпляры nginx», я имею в виду, что существует 4 независимых главных процесса nginx, каждый из которых загружает другой файл конфигурации с аналогичными настройками, и каждый со своими рабочими.
Примечание 2: этот сценарий я унаследовал и уже реализовал. Я пытаюсь понять, следует ли мне изменить способ настройки nginx и иметь для этого обоснованную причину.
С точки зрения системы, нет никаких существенных различий в работе 4 мастеров с 4 секциями серверов или одного мастера с 16 секциями серверов. Он реализует ту же архитектуру: параллельные процессы на основе событий.
Соотношение рабочих / основных необходимо учитывать по отношению к общему количеству рабочих по всем вашим мастерам, если у вас их несколько. Это происходит из-за нескольких ограничений:
Это должно быть немного более эффективным с одним мастером, поскольку несколько ресурсов, таких как карты MIME и т. Д., Будут загружены только один раз. Но это мелочь.
Это должно быть более эффективным с одним мастером, потому что есть один большой пул рабочих, совместно используемых всеми серверами. Если одному серверу на мгновение требуется большинство рабочих (скажем, 16), он может их получить. В конфигурации с несколькими мастерами (скажем, 4 мастера с 4 рабочими) они могут использовать только то, что у них есть: 4 рабочих. С другой стороны, это может быть желаемый эффект: строго разделить на 4 экземпляра, чтобы каждый из них всегда привлекал хотя бы четверть внимания вашего хозяина. Но больше никогда.
С одним мастером должно быть проще настраивать и поддерживать (подумайте: обновления безопасности).
Он должен быть более устойчивым с четырьмя мастерами: вы можете вывести из строя или полностью испортить одну главную конфигурацию, не касаясь трех других.
Если ваши 4 мастера не используют разные версии Nginx, вы не получите преимуществ от сверхоптимизации, такой как наличие точного набора модулей, скомпилированных для каждого мастера.