Медленное подключение к клиенту блокирует Mongrel

У меня есть установка Apache + Haproxy + Mongrel для моего приложения rails. Когда я нажимаю на определенную страницу сервера, mongrel обрабатывает запрос около 100 мс, а я получаю страницу примерно через 5 секунд из-за времени передачи данных по моему медленному домашнему соединению.

Теперь я вижу, что за эти 5 секунд передачи данных дворняга не обслуживает ни одного другого запроса. Я удивлен, так как это означает, что дворняга отправляет ответный HTML-код клиенту и блокируется до тех пор, пока клиент его не получит. Разве обслуживание ответа не должно быть работой Apache?

Это серьезно ограничивает количество запросов, которые Mongrel может обслуживать, поскольку это будет зависеть от скорости клиентского соединения. Есть ли способ, которым html, сгенерированный mongrel, обслуживается apache/haproxy или любым другим веб-сервером, таким как nginx?
Интересно, как другие сайты с высоким трафиком справляются с этим?


person Sanjay    schedule 11.05.2009    source источник


Ответы (2)


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

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

person srboisvert    schedule 11.05.2009

mongrel сам по себе является многопоточным, но rails по умолчанию может обрабатывать только один процесс за раз, хотя это можно изменить в config. В случае дворняги используйте дворнягу-кластер.

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

person deepak    schedule 14.06.2010
comment
Я не уверен, понял ли я, что рельсы могут обрабатывать только один процесс за раз. Я знаю, что 1 экземпляр mongrel будет обслуживать только 1 запрос rails. Таким образом, для одновременной обработки 5 запросов мне нужно запустить 5 экземпляров mongrel. То же самое для пассажира, увеличьте количество потоков. - person Sanjay; 27.07.2010
comment
извините, хотел сказать, что рельсы могут обрабатывать только один запрос за раз, а не только один процесс - person deepak; 29.07.2010