Вопрос:

Как мне обрабатывать длинные запросы на Rails App, чтобы другие пользователи не задерживались слишком долго?

ruby-on-rails ruby-on-rails-3 heroku concurrency delayed-job

595 просмотра

3 ответа

1495 Репутация автора

У меня есть приложение Rails на бесплатном уровне на Heroku, и недавно оно стало получать несколько пользователей. Одно из событий в моем приложении включает запрос другого API и может занять до 10 секунд. Как сделать так, чтобы другим пользователям, которые одновременно посещают простую страницу (как событие API другого пользователя), не нужно было ждать 10 секунд для загрузки своей страницы?

Нужно ли платить за большее количество Dynos? Это что-то, что может быть решено с гемом delayed_job? Может ли другой хост (например, AppFog или OpenShift) быстрее обрабатывать одновременные запросы?

Обновление: этот вопрос предполагает ручную обработку потоков вместо использования delayed_job.

Автор: Ari Источник Размещён: 06.08.2013 02:42

Ответы (3)


1 плюс

2148 Репутация автора

Это похоже на ситуацию с отложенной работой. Если первый запрос просто ожидает, наиболее эффективным способом является назначение процесса, ожидающего его завершения, и освобождение процесса Rails для обработки другого запроса.

Автор: bgates Размещён: 06.08.2013 03:13

1 плюс

3798 Репутация автора

Да, вам нужно больше dynos, специальные рабочие dynos, те, которые работают в фоновом режиме, вы можете проверить этот Railscast на отложенных заданиях, которые также могут помочь:

http://railscasts.com/episodes/366-sidekiq

Также вот краткое руководство по добавлению единорога и нескольких потоков в ваш бесплатный экземпляр heroku:

https://devcenter.heroku.com/articles/rails-unicorn

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

Автор: Rodrigo Zurek Размещён: 06.08.2013 03:14

0 плюса

25364 Репутация автора

Какой тип сервера приложений вы используете? Если вы используете пассажир или единорога, вы можете иметь несколько рабочих процессов, которые могут обрабатывать одновременные запросы

http://www.modrails.com/documentation/Users%20guide%20Apache.html#_passengermaxinstancesperapp_lt_integer_gt

Автор: usha Размещён: 06.08.2013 03:15
Вопросы из категории :
32x32