Выбор сервера приложений для бэкэнда API

При таком большом выборе серверов приложений (Passenger, Thin, Unicorn, Mongrel, Puma и Rainbows!) Мне интересно, что подойдет для следующего сценария:

Rails используется исключительно для API-интерфейса (все ресурсы обслуживаются Nginx). Некоторые вызовы API полагаются на другие службы API, поэтому иногда они требуют времени для завершения.

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

Какой сервер приложений вы считаете подходящим в этом случае? Что следует учитывать при выборе?


person randomguy    schedule 14.02.2013    source источник
comment
Будет ли это на Saas-сервере или автономном сервере?   -  person TheIrishGuy    schedule 14.02.2013
comment
@TheIrishGuy: Автономный.   -  person randomguy    schedule 14.02.2013


Ответы (3)


Если ваше приложение обращается к другим службам через API, Unicorn - плохой выбор. Unicorn - это однопоточный многопроцессорный сервер приложений, специально разработанный для быстрых и непродолжительных рабочих нагрузок, связанных с процессором. Выполнение вызовов HTTP API считается длительными блокирующими запросами ввода-вывода. Это не ограничение, а явный выбор дизайна Unicorn. Это подтверждается веб-сайтом Unicorn, раздел «В некоторых случаях только хуже».

Теоретически Thin может обрабатывать такие рабочие нагрузки с высоким уровнем параллелизма, потому что он использует четный ввод-вывод. Однако для этого требуется явная структура и поддержка приложений в виде согласованного кода. Немногие фреймворки и приложения делают это. Rails и Sinatra этого не делают.

Таким образом, остаются только серверы приложений с поддержкой многопоточности. Тремя претендентами являются Puma, Rainbows и Phusion Passenger 4 Enterprise.

  • Пума относительно нова. Rainbows немного старше, но автор не дает никаких гарантий относительно того, насколько хорошо она работает. Phusion Passenger является зрелым, существует уже много лет и в настоящее время используется более чем 150000 веб-сайтов, включая такие крупные, как Pixar, New York Times, AirBnB и т. Д.
  • Модели использования Puma и Rainbows похожи на Unicorn и Thin в том, что вы запускаете кучу процессов и подключаете их к Nginx через конфигурацию обратного прокси. Phusion Passenger, с другой стороны, предназначен для прямой интеграции с Nginx, поэтому он требует гораздо меньше затрат на настройку, управление процессами и другие административные расходы.
  • Phusion Passenger 4 Enterprise - это не строго многопоточный сервер, а гибридный многопроцессорный / многопоточный. Это означает, что он может запускать несколько процессов (для повышения стабильности и возможности использования нескольких ядер ЦП), каждый из которых имеет несколько потоков (для высокой степени параллелизма ввода-вывода).
  • Phusion Passenger 4 Enterprise дает множество преимуществ над имеющимся больше функций, чем у Puma и Rainbows: например, он имеет внешнюю сборку мусора, может динамически регулировать количество процессов в зависимости от трафика, полностью автоматизирует циклический перезапуск, поэтому вам не нужны сценарии и т. д.

Вас также может заинтересовать эта запись для больше информации.

person Hongli    schedule 15.03.2013

Единственный верный способ узнать - это проверить и измерить производительность в реальных условиях. Все остальное будет предположениями и догадками.

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

person ksol    schedule 14.02.2013
comment
+1 единорог. Единорог над пассажиром. Дополнительные вопросы возникнут, если он будет использовать рабочих. Я бы пошел с тонким, чтобы начать, если бы использовал Heroku. Puma или Unicorn за обратным прокси-сервером nginx. - person TheIrishGuy; 15.02.2013

Основываясь на вашем автономном запросе, я бы порекомендовал сервер Puma или Unicorn за обратным прокси-сервером nginx. Используйте sidekiq для рабочих очередей. Предполагается, что приложение Rails, если вы используете Sinatra, thin может быть достаточно для вас. Как сказал другой человек, пишите в первую очередь для стабильности, а не для проверки производительности.

person TheIrishGuy    schedule 14.02.2013