Как Phusion Passenger повторно использует потоки и процессы?

StackOverflow https://stackoverflow.com/questions/821820

Вопрос

Я настраиваю веб-сервер Apache2, на котором запущено несколько веб-приложений Ruby on Rails с помощью Phusion Passenger.Я знаю, что Passenger порождает Ruby-процессы для обработки запросов.У меня есть следующие вопросы:

  • Если одновременно должно быть обработано более одного запроса, вызовет ли Passenger несколько процессов или несколько потоков (Ruby)?Как мне настроить его так, чтобы он всегда порождал однопоточные процессы?
  • Если у меня есть два приложения Rails, представьте, что запрос на приложение A отправляется в процесс 1, затем поступает запрос на приложение B.Возможно ли, что процесс 1 также обработает этот запрос?Когда и как это возможно?Другими словами, разрешено ли одному процессу обрабатывать запросы для нескольких приложений Rails?
  • У меня есть одно и то же приложение Rails, экспортированное по нескольким URL-адресам и нескольким виртуальным хостам (таким как http:// и https://).Сможет ли один и тот же процесс обслуживать разные виртуальные хосты?(Ответ на это, похоже, положительный, я установил глобальную переменную при ответе на запрос к виртуальному хосту A, и я смог получить значение в виртуальном хосте B.)
Это было полезно?

Решение

Вообще говоря, Passenger запускает новые процессы, разветвляя ApplicationSpawner, у которого фреймворк и код приложения предварительно загружены в память, или FrameworkSpawner, у которого есть только код фреймворка.

Пассажир, насколько я знаю, не имеет дела с потоками.Вместо этого, по мере увеличения нагрузки на приложение, оно разветвляет ApplicationSpawner этого приложения и инициализирует другой экземпляр.Когда нагрузка уменьшается, один или несколько экземпляров приложения отключаются.

Если Passenger настроен определенным образом (я полагаю, выбрав "умный" метод spawn), он создаст FrameworkSpawner, который загружает код rails, но не код приложения, который затем может быть разветвлен для загрузки и приложения, использующего эту версию Rails.

Итак, чтобы ответить на ваши вопросы:

  • Он будет обслуживать их последовательно, затем запустит дополнительные процессы, если решит, что нагрузка достаточно высока.

  • Нет.Один процесс может принадлежать только одному приложению Rails.

  • Я немного схематичен в этом вопросе, но ваш эксперимент имеет смысл.Пассажир должен быть достаточно умен, чтобы понять, что, хотя он запускается из разных мест конфигурации сервера, вы говорите об одном и том же приложении.Вероятно, это основано на пути к файловой системе приложения.

Редактировать:Я пошел и немного почитал об этом.Оказывается, я был в основном прав, но технические детали были немного не в порядке.Смотрите на Документация пассажира

Другие советы

Да, Берк прав.В случае третьего вопроса Phusion Passenger распознает приложения по корневому пути к их приложению.Таким образом, даже если у вас есть два виртуальных хоста, если они оба указывают на один и тот же DocumentRoot, то Phusion Passenger подумает, что это одно и то же приложение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top