Требуется ли этому веб-приложению очередь задач?

Фон

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

Проблема

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

Вопрос

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

8
задан Manoj Govindan 26 August 2010 в 18:28
поделиться

3 ответа

Я пока откажусь.

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

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

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

6
ответ дан 5 December 2019 в 22:15
поделиться

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

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

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

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

0
ответ дан 5 December 2019 в 22:15
поделиться

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

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

0
ответ дан 5 December 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: