2010-08-26 4 views
8

Фон

У меня есть веб-приложение, которое создаст изображение с пользовательского ввода. Создание изображения может занять пару секунд.Требуется ли для этого веб-приложения очередь задач?

Проблема

Если я позволяю нить сервер, который обрабатывает запрос/ответ также формирования изображения, который собирается связать нить в течение нескольких секунд, и, возможно, увязнуть мой сервер, влияют на производительность , убивают щенков и т.д.

Вопрос

Должен ли я использовать очереди задач, таких как Celery, так что сервер может передавать создание изображения, и вернуться к обработке запросов/ответов? У меня нет проблем с тем, чтобы пользователь, создающий изображение, подождал, но я не хочу, чтобы он влиял на доступ других людей к сайту.

ответ

6

Я собираюсь сказать Нет - пока.

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

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

Реализация этой очереди задач, когда/если вам нужно масштабировать.

+1

+1: И ... если вы используете Apache, он будет обрабатывать большое количество буферизации и параллелизма для вас. В самом деле, с mod_wsgi, у вас может быть много и много бэкэнд-процессов одновременно. Пока вы не станете бенчмарком, вы не можете быть уверены, но рабочая нагрузка, с которой он может справиться, часто огромна. –

+0

Хорошо. Спасибо, что сэкономили мне работу на N часов. Основная забота обо мне заключалась в том, что через пару секунд это было так долго. Одна из моих личных целей состояла в том, чтобы обеспечить хороший пользовательский интерфейс, и я подумал, что пользователь смотрит на пустой экран в течение пары секунд, пока изображение генерируется и отправляется, будет подпункт. Если бы была очередь, я мог бы, по крайней мере, опросить и держать их занятыми сообщением или чем-то посмотреть. –

+0

@ random_person: «глядя на пустой экран»? Как HTML-страница может содержать «пустой экран»? Как ты это делаешь? В основном, когда я отправляю форму, я некоторое время смотрю на предыдущую страницу. Затем страница внезапно заменяется. Кроме того, многие люди любят бездельников в Javascript, чтобы показать некоторые действия. Но я не знаю, как сделать «пустой экран» в браузере. Вы можете это объяснить? –

0

У меня также есть создающий изображение сайт (Names4Frames) и делал такие вещи через AJAX (и PHP). У меня не было заметных замедлений (или мертвых щенков), но этот сайт не генерирует огромные объемы трафика. Я не специалист по темам, и, честно говоря, я не уверен на 100%, какова ваша точная проблема и какие технологии вы используете ...

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

0

правило большого пальца: используйте очередь, если задачи могут накапливаться.

В вашем случае задача может принимать до 2 секунды, при условии, что 8 часов в день вы можете сделать до 8 * 60 * 60/2 = 14400 изображений в день без параллелизма. Если вы получаете более 7200 запросов в день, у вас есть 50% вероятность того, что любой из них будет перекрываться. Есть более сложный анализ, чтобы показать ожидаемый уровень перекрытия, который вы, скорее всего, получите; но, кажется, можно с уверенностью сказать, что вы могли сделать более тысячи изображений за день до перегрузки.

Теперь вопрос кажется более простым: думаете ли вы, что в ближайшее время вы получите более тысячи или двух изображений в день? Если да, то установите очередь; если нет, оставьте его на потом.

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