Сервер Rails (3) - что использовать сегодня? - PullRequest
6 голосов
/ 31 марта 2011

Я уже некоторое время использую Ruby Enterprise Edition и Passenger (для Apache, так как я в любом случае запускаю Apache для других целей), но мне интересно, есть ли новая тенденция о том, что использовать на серверах в настоящее время.Например, я слышал о Thin, Unicorn ... Я также знаю, что 1.9.2 быстрее, чем REE, но меня интересует потребление оперативной памяти.Я бы предпочел, чтобы он потреблял меньше оперативной памяти даже за счет некоторой скорости.

Спасибо за все советы.

Ответы [ 4 ]

7 голосов
/ 19 сентября 2012

Если вам нужно минимальное количество памяти, вы должны попробовать Thin.У него нет главного работника, как Единорога или Пассажира, поэтому он использует меньше памяти.Предположим, у вас есть очень маленькое приложение, которое должно работать на маленькой виртуальной машине, тогда вы можете использовать 1 thin worker + nginx.Я запустил несколько приложений rails 3.2, используя Thin + nginx + postgres на виртуальных машинах 256 МБ без замены.

Unicorn работает быстрее, но ему нужен мастер.Хорошо, если вы хотите работать на Heroku, вы можете установить 2 или 3 рабочих и быть в пределах 512 МБ.

Если ваше приложение очень большое и у вас слишком много длинных запросов, я бы проверил jRuby и Thinidad / Torquebox.

Я конвертировал несколько приложений из MRI + Sidekiq в jruby + Тринидад + Тринидад_Шедулер.Я получаю около 100-200 запросов в секунду, используя пул из 50 потоков на сервере Тринидад!

Что мне нравится в jRuby, так это то, что вы можете комбинировать все на одном Rails Server.Вы можете собрать в одной и той же JavaVM cache_store с EHcache, Scheduling, фоновой обработкой и реальной многопоточностью.

Вам не нужно запускать redis, memcached, resque или sidekiq по отдельности.

Я не говорю, что они не хороши, я люблю sidekiq и resque, но вы можете уменьшить свою сложность, комбинируя все в одном процессе и имея высокий параллелизм.

Более продвинутое и корпоративное решениеTorquebox, он поддерживает кластеризацию и является супер масштабируемым.Но у меня были проблемы с тем, что мое приложение зависало на Torquebox, поэтому я сейчас придерживаюсь Тринидада.

Недостатки jRuby?Объем памяти!Сервер Тринидад будет использовать минимум 512 МБ, до 2-3 ГБ оперативной памяти.Кроме того, для сервера с одним потоком один запрос от приложения rails, работающего на Ruby-1.9.3, примерно в два раза быстрее, чем тот же запрос на jRuby.

Другой вариант - это Puma, вы можете получить полную многопоточность на МРТ с помощью Puma.Я сам не смог добиться достаточной стабильности в своих приложениях.

Итак, все зависит от ваших требований, использования памяти, полной многопоточности и параллелизма.

Помимо пассажиров, взгляните на Единорога, Тринидада, Пуму и Torquebox.Похоже, сейчас это лучшие серверы рельсов.

Существует замечательная книга с введением преобразования вашего Rails-приложения в jRuby и развертывания вашего приложения с использованием нескольких методов, таких как trinidad.http://pragprog.com/book/jkdepj/deploying-with-jruby

Документация Torquebox удивительно хороша.Это очень подробно и очень хорошо объясняет, как использовать все функции Torquebox.http://torquebox.org/documentation/

Надеюсь, что обмен опытом помог.

6 голосов
/ 31 марта 2011

Пассажир по-прежнему чрезвычайно силен, особенно если учесть, что REE, естественно, поддержит 1.9 в ближайшем будущем. Тот факт, что ваше приложение может привести к сбою, однако это никак не повлияет на вашу машину, - это удивительная возможность. Развертывание кода чрезвычайно просто, потому что сервер будет продолжать принимать соединения, что означает меньше разочарования / стресса для вас.

Однако, с точки зрения сравнений:

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

Сравнивает Тонких, Единорогов, Пассажиров, TorqueBox, Glassfish и Тринидад:

http://torquebox.org/news/2011/03/14/benchmarking-torquebox-round2/

4 голосов
/ 31 марта 2011

Ссылка Майка Льюиса отлично справляется со сравнением этих разных серверов ruby.Мой личный опыт был с nginx / REE / Passenger, и это было хорошо.Остальные я не пробовал, поэтому не могу это прокомментировать.

Однако я могу говорить об использовании ОЗУ.Наибольшая экономия оперативной памяти будет достигнута благодаря использованию 32-битных серверов.По моему опыту (3x 3 ГБ серверов приложений), 64-битные процессы REE / passenger занимали в 2 раза больше оперативной памяти, чем их 32-битные аналоги.Мы увидели значительное увеличение производительности с 64 до 32-битных серверов, а все остальное осталось прежним.Если для вашего приложения не требуется 64-разрядная версия, я бы предложил использовать серверы приложений (не базы данных) в 32-разрядной версии.

1 голос
/ 31 марта 2011

Пассажир по-прежнему очень хороший выбор, чтобы вы не отставали от времени или чего-то еще. Он также активно поддерживается и имеет очень хорошую команду разработчиков, которая вносит большой вклад в сообщество. Мы использовали Unicorn, и это было очень хорошо. Наша любимая функциональность - возможность обновлять apps / ruby ​​/ nginx без разрыва соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...