后台文件上传和负载均衡

Background file upload and load balancing

提问人:Tom 提问时间:8/13/2023 最后编辑:hakreTom 更新时间:8/13/2023 访问量:37

问:

我有一个应用程序,可以在创建主要任务时在后台上传文件,类似于您撰写电子邮件时的 Gmail。

用户上传文件,后端解析它以查看是否有任何问题等。

在他们通过应用程序创建任务后,它会获取会话中的文件(位置在 )并将它们上传到 Amazon Simple Storage Service (AWS S3)。/tmp

碰巧的是,在具有负载平衡功能的服务器上,每个文件最终都可能位于不同的服务器上(不同,因为每个服务器都有自己的根)。/tmp

这导致我在查找文件时出现问题(因为它不存在)。/tmp

为了避免出现这个问题,我最终在负载均衡器上使用了粘性会话,缺点是均衡器现在未得到充分利用,这对我来说不是很有用。

在这种情况下,处理文件上传的最佳方法是什么?

php apache nginx 文件上传

评论

0赞 Jaquarh 8/13/2023
为什么不将其直接写入 S3 实例而不是本地服务器实例?如果验证失败,请在上传新文件时处理覆盖这些文件,或者在取消时将其删除。不完全确定为什么要在处理的中间阶段将它们存储在物理服务器上 - 您的问题是您正在创建有状态进程。
0赞 Tom 8/13/2023
@Jaquarh 我不会这样做,因为任务可以取消,所以我在 S3 上浪费了空间,而且我没有将上传到任务的文件关联的标识符。
0赞 hakre 8/13/2023
没有最好的方法来处理这个问题。虽然您选择了与负载均衡器的粘性会话来解决“不粘附”在同一台计算机上的原始问题,但缺点是负载均衡器无法解决已在使用的机器(因为粘性会话通过粘附使用单个数据点来解决它)。你总是要付出代价的。如何在分布式设置中进行 PHP 会话(如果有的话)?您正在处理的文件有多大?您是否考虑过在所有实例之间共享网络驱动器?上传是否已进行 GUID 编辑?/tmp
0赞 Jaquarh 8/13/2023
您不能在无状态结构中拥有有状态的数据链接,不确定您当前的取消过程是如何工作的/在没有办法识别文件位置的情况下清理本地磁盘......您始终可以将其更改为从 S3 磁盘中删除。

答: 暂无答案