Рекомендации (и различия) между различными веб-серверами Ruby on Rails

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

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

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

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

Ответы

Ответ 1

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

Перейти с Apache/Nginx + 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.

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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