Рекомендации (и различия) между различными производственными веб-серверами Ruby on Rails - PullRequest
16 голосов
/ 13 ноября 2009

Очень скоро я планирую развернуть свое первое приложение Ruby on Rails в производственной среде, и я даже выбрал веб-хост со всеми управляемыми серверами и совершенством Capistrano, которого вы ожидаете от поставщика RoR.

Поставщик допускает веб-серверы Mongrel, Thin, Passenger и FastCGI, которые кажутся очень гибкими, но я, честно говоря, не знаю различий между ними. Я немного изучил их, но все становится немного сложнее, когда они начинают говорить о функциях и максимальных одновременных запросах - и что эти данные, похоже, различаются в зависимости от того, кто их публикует.

Я смотрел на Passenger (на первый взгляд) - который мне кажется очень привлекательным - но у меня сложилось впечатление, что Passenger не был настоящим веб-сервером, а вместо этого был больше похож на слой поверх Apache или nginx и управлял порожденными экземплярами приложения (например, кластером Mongrel).

Может ли кто-нибудь объяснить мне различия в терминах непрофессионала, чтобы я мог выбирать мудро (потому что любой, кто видел Индиану Джонс и Последний крестовый поход , знает, что произойдет, если вы выберете плохо).

Ответы [ 4 ]

35 голосов
/ 13 ноября 2009

Краткий ответ

Перейти с Apache / Nginx + Passenger. Passenger - это быстрый , надежный, простой в настройке и развертывании. Passenger был принят многими приложениями Rails, включая Shopify .

alt text
(источник: modrails.com )

Длинный ответ

Забудьте о CGI и FastCGI. В начале не было никаких других альтернатив, поэтому единственным способом запустить Rails было использование CGI или более быстрого браузера FastCGI. В настоящее время почти никто не запускает Rails под CGI. Последние версии Rails больше не предоставляют бегунов .cgi и .fcgi.

Mongrel был широко принятым решением, лучшей заменой CGI и FCGI. Многие сайты по-прежнему используют кластеры Mongrel и Mongrel, однако проект Mongrel практически мертв, и многие проекты уже перенесены в другие решения (в основном это Passenger). Кроме того, архитектуру на основе Mongrel довольно сложно настроить, поскольку для нее требуется внешний прокси-сервер (thin, ngnix) и внутренняя архитектура, состоящая из нескольких экземпляров Mongrel.

Пассажир привлекает всеобщее внимание с момента его освобождения. Многие проекты перешли с Mongrel на Passenger по многим причинам, включая (но не ограничиваясь) простоту развертывания, ремонтопригодность и производительность. Кроме того, Passenger теперь доступен как для Apache, так и для Ngnix.

Самым простым способом использования Passenger является конфигурация Apache + Passenger. Одна установка Apache и несколько процессов Passenger.

Если вам нужна более высокая производительность и масштабируемость, вы можете использовать Ngnix в качестве внешнего прокси-сервера и перенаправлять все запросы Rails на несколько внутренних серверов, каждый из которых состоит из Apache + Passenger. Здесь я не буду вдаваться в технические детали, это решение предназначено для использования в проектах Rails с высоким уровнем трафика.

Еще более сложные решения включают в себя комбинацию разных уровней, включая http прокси и серверы. Вы можете иметь представление о том, о чем я говорю, прочитав некоторые внутренние детали из GitHub и Heroku .

Прямо сейчас, Passenger - лучший ответ для большинства проектов Rails.

9 голосов
/ 13 ноября 2009

Mongrel и Thin - это серверы с одним процессом ruby, которые вы могли бы использовать в качестве кластера за прокси-сервером определенного типа (например, Apache или Nginx). Прокси-сервер будет управлять тем, какой экземпляр Mongrel или Thin обслуживает запросы.

Пассажир создает интерфейс между Apache или Nginx, который создает процесс порождения приложения, а затем передает процессы на сервер для обработки входящих запросов по мере их поступления. Существует множество параметров конфигурации для определения продолжительности этих процессов и их количества. быть, и сколько запросов они будут обслуживать, прежде чем они умрут. Это, безусловно, самый распространенный способ масштабирования и обработки приложений с высоким трафиком, но он не лишен недостатков. Это можно сделать только в операционной системе * nix (linux, mac os x и т. Д.). Кроме того, эти процессы ускоряются по требованию, поэтому, если никто не обращается к вашему сайту в течение некоторого времени, они умирают, и следующий запрос задерживается, чтобы он снова запустился. С Mongrel и Thin, процесс всегда запущен. Однако иногда ваши процессы, будучи новыми и свежими, могут быть полезны для использования памяти и т. Д.

Если это будет сайт с относительно низким трафиком, Mongrel или Thin предоставляют простой и удобный способ развертывания приложения. Для сайтов с большим трафиком, где вам нужны интеллектуальные очереди и управление процессами, например, Passenger, это очень хорошее решение.

Что касается fastcgi, вы, вероятно, хотите использовать это как последний вариант.

1 голос
/ 13 ноября 2009

Чтобы получить мгновенную производительность с пассажиром, я рекомендую использовать ruby ​​Enterprise Edition.

1 голос
/ 13 ноября 2009

Я использую Passenger + nginx. Это работает очень, очень хорошо.

...