Назад | Перейти на главную страницу

nginx и избегая сценария громового стада

У меня есть установка, в которой nginx будет try_files в директории nedia и обслуживать файл статического изображения.

Если он не найдет его, вызовет бэкэнд, извлечет файл из s3, создаст несколько записей БД, а затем скопирует файл в каталог мультимедиа, чтобы дальнейшие вызовы этого файла мультимедиа обслуживались nginx.

Создание файла может занять 5 секунд.

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

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