Нужно ли ставить Unicorn за Nginx (или Apache) - PullRequest
10 голосов
/ 01 февраля 2012

Я немного запутался в этой архитектуре. В одном из проектов, над которым я работаю, Unicorn был выбран в качестве сервера Rails. И это ставится за веб-сервером Nginx. Как я понимаю, Unicorn является полнофункциональным веб-сервером, и мы не планируем размещать какие-либо другие приложения Rails на одном экземпляре сервера.

Так что мой вопрос будет таким: каковы преимущества наличия дополнительного слоя в цепочке:

client -> nginx -> unicorn -> unicorn worker

1 Ответ

17 голосов
/ 01 февраля 2012

Unicorn не был предназначен для работы с "медленными клиентами".Вы можете прочитать больше об этом в файле справки PHILOSOPHY :

Большинство тестов, которые мы видели, не говорят вам об этом, и единорог не заботится о медленных клиентах ...но вы должны.

«Медленным клиентом» может быть любой клиент за пределами вашего центра обработки данных.Сетевой трафик внутри локальной сети всегда быстрее, чем трафик, пересекающий ее.Законы физики не допускают иного.

Постоянные соединения были введены в HTTP / 1.1, чтобы уменьшить задержку от установления соединения и медленного запуска TCP.Они также тратят ресурсы сервера, когда клиенты простаивают.

Постоянные соединения означают, что один из рабочих процессов единорога (в зависимости от вашего приложения может быть очень требовательным к памяти) будет тратить значительную часть своего времени простоя, поддерживая соединениежив и ничего не делая.Будучи однопоточным и используя блокирующий ввод / вывод, работник не может обслуживать других клиентов, сохраняя соединение активным.Таким образом, Unicorn не реализует постоянные соединения.

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

...