У меня есть веб-приложение, которое будет создавать изображение из пользовательского ввода. Создание изображения могло бы займет до пары секунд.
Если я позволю потоку сервера, который обрабатывает запрос / ответ, также сгенерировать изображение, оно будет связывать поток на пару секунд и, возможно, вывести из строя мой сервер, повлиять на производительность, убить щенки и т. д.
Следует ли использовать очередь задач, например Celery , чтобы сервер мог передать создание образа и вернуться к обработке запросов / ответов? У меня нет проблем с тем, чтобы пользователь, создающий изображение, ждал, но я не хочу, чтобы это повлияло на доступ других людей к сайту.
Я пока откажусь.
Итак, поначалу делайте это просто и заставьте его работать, но имейте в виду, что позже вы можете добавить очередь задач.
Внедрите эту очередь задач, когда/если вам нужно масштабироваться.
эмпирическое правило: используйте очередь, если задачи могут накапливаться.
В вашем случае задача может занять от до 2 секунд, при 8 часах работы в день вы можете делать до 8*60*60/2 = 14400 изображений в день без параллелизма. Если вы получаете более 7200 запросов в день, у вас есть 50% вероятность того, что любой из них перекроется. Есть более сложный анализ, чтобы показать ожидаемый уровень перекрытия, который вы, вероятно, получите; но можно с уверенностью сказать, что вы можете делать более тысячи изображений в день, прежде чем перегрузитесь.
Теперь вопрос кажется проще: как вы думаете, вы будете получать более тысячи или двух изображений в день в ближайшее время? Если да, то установите очередь; если нет, оставьте это на потом.
В любом случае ведите хорошие журналы; убедитесь, что вы можете сказать, когда есть какое-либо перекрытие обработки. Помните, что как только вы получаете две задачи, которые обрабатываются одновременно, они будут выполняться дольше, увеличивая вероятность того, что третья может появиться до завершения двух других, а четвертая... когда вы достигнете невидимого порога, производительность резко упадет. Не теряйте сон из-за этого, просто не позволяйте этому случиться, прежде чем вы заметите.
У меня также есть сайт, генерирующий изображения (Names4Frames), и я делал такие вещи через AJAX (и PHP). У меня не было заметных замедлений (или мертвых щенков), но сайт, о котором идет речь, также не генерирует огромное количество трафика. Я не эксперт по темам, и, честно говоря, я не уверен на 100%, что вас беспокоит и какие технологии вы используете...
В основном одна страница запрашивает изображение с другой страницы (возможно, даже находится на другом сервере), и когда это сделано, вторая страница передает первой любую соответствующую информацию об изображении для целей обработки / отображения. Если мы говорим только о нескольких секундах, я не вижу в этом реальной проблемы, если вы не имеете дело с ОГРОМНЫМ количеством посетителей, постоянно использующих эту услугу создания изображений.