我有一个设置,其中 nginx 将try_files
在 nedia 目录中提供静态图像文件。
如果找不到,将调用后端,从 s3 中提取文件,创建一些 DB 条目,然后将文件复制到媒体目录,以便 nginx 为该媒体文件的进一步调用提供服务。
生成文件可能需要 5 秒。
当有 X 个新请求针对此文件并且尚未生成时,后端将被调用 X 次而不是一次。我如何避免此问题并保留所有请求直到文件准备好?
答案1
创建某种锁定机制,通知其他实例/线程此文件当前正在处理并且应该等待。最简单的解决方案是在临时目录中写出一个具有所需名称的文件,然后让脚本检查它是否存在,如果存在则进入等待模式。