Убедить менеджеров по продуктам изменить дизайн длительного синхронного процесса - PullRequest
1 голос
/ 06 января 2011

В нашем веб-приложении есть функция, которая:

  1. Получает список продуктов
  2. Записывает их в файл Excel
  3. Возвращает файл Excelпользователю для скачивания

Этот процесс занимает чаще всего, в зависимости от количества продуктов> 2 минуты.Некоторые запросы занимают более 5 минут!В среднем пользователи скачивают 100-500 продуктов, а запрос занимает где-то около 1 - 5 минут.

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

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

Кто-нибудь знает такие книги / статьи / исследования?

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

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Вы пытались переосмыслить логику для генерации xls? Потому что, если это бизнес-требование, они могут неохотно изменить его.

Я использовал apache-poi для генерации xls и создания отчетов, а также для обеспечения удовлетворительной производительности (максимум несколько секунд, чтобы создать отчет). Для кэширования данных мы использовали кэширование на стороне сервера. и тогда мы просто вытащим xls.

1 голос
/ 09 марта 2011

Если список загружаемых Excels фиксирован, вы можете сгенерировать их в фоновом потоке и вернуть прямую ссылку для скачивания. Даже если он меняется один раз в час или 2, его стоит делать вместо генерации по требованию.

Другой подход может быть, когда пользователи выбирают список продуктов и просят, чтобы Excel предоставил опцию, если они хотели бы получить электронное письмо со ссылкой для скачивания или даже получить файл в виде вложения в электронное письмо. Если они принимают, отправьте каждый запрос в очередь и запустите пакетное задание, которое генерирует лист Excel и отправляет их в виде почтовых вложений. Таким образом, вы не ограничите веб-сервер.

Кроме того, мой главный вопрос заключается в том, почему это занимает больше минуты, а какая часть процесса занимает много времени. Стоит исследовать эту область (подключение к БД {объединение в пул, совместное размещение серверов}, огромная таблица {раздел}, генерация Excel)?

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

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

Расследование, вероятно, исправит текущие проблемы, или, по крайней мере, вы не будете переносить те же ошибки в будущем дизайне

...