Четырёхминутная выгрузка отчёта отдаёт 504
Кнопка «Выгрузить отчёт» строит файл по 300 тысячам заказов прямо в контроллере. Формирование занимает около четырёх минут, nginx отдаёт пользователю 504, а php-fpm всё это время держит воркера.
Как решают такую задачу?
- Поднять proxy_read_timeout в nginx и max_execution_time в PHP до десяти минут, чтобы запрос успевал завершиться
- Поставить построение отчёта в очередь и сразу вернуть идентификатор задания, а готовый файл отдавать по готовности
- Разбить выгрузку на десять последовательных AJAX-запросов из браузера по 30 тысяч строк и склеить файл на клиенте
- Класть результат в Redis, чтобы повторная выгрузка строилась быстрее и укладывалась в таймаут веб-сервера
