Убедить менеджеров по продуктам изменить дизайн долго выполняющегося синхронного процесса

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

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

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

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

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

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

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


person Jeune    schedule 06.01.2011    source источник


Ответы (2)


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

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

person Pushkar    schedule 06.01.2011
comment
+1. Можете ли вы указать мне, как кэшировать данные? Мы используем POI в этой функции, и даже в этом случае процесс занимает много времени. - person Jeune; 07.01.2011
comment
Не уверен, какая у вас архитектура, но кэширование может быть таким же простым, как использование ehcache с спящим режимом для использования OSCache(opensymphony.com/ oscache) для кэширования сложных объектов. Также задачи таймера можно использовать для периодического извлечения данных и их кэширования (в OSCache). Таким образом, ваша логика генерации Excel должна выполнять минимальный объем работы. - person Pushkar; 08.01.2011

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

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

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

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

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

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

person Rajendra    schedule 09.03.2011