【问题标题】:Microservice architecture for uploading and downloading multiple files at once一次上传和下载多个文件的微服务架构
【发布时间】:2023-04-03 20:28:01
【问题描述】:

我正在尝试使用 Spring Boot 创建一个新的微服务,用于一次上传和下载多个文件。
根据某些条件,这些文件(PDF、XML、ZIP、TIFF、..)可以存储在 S3 之类的存储或其他类型的存储中。此微服务必须实现逻辑以了解这些文件的位置,将它们临时下载到本地文件夹中,然后将它们返回给客户端应用程序。
目标是向客户端应用程序隐藏恢复逻辑和文件所在的存储类型。

我的每个业务实体都有多个关联的文件,因此对于上传 API,我正在考虑使用多部分请求将同一实体的文件一起发送。
我想对下载 API 做同样的事情:给定实体的 ID,API 必须返回与其关联的所有文件。

我不知道实现这一目标的最佳方法是什么。
我已经看到有一个多部分响应,但我不知道它是否可靠。
另一个想法是将文件下载到临时共享文件夹中,并将它们所在的路径列表发送回客户端应用程序。
另一种方法是始终下载本地(非共享)文件夹中的文件,并将用于获取文件的 URL 列表发送回客户端应用程序。

你怎么看?还有其他选择吗?

感谢您的帮助!

【问题讨论】:

  • 我可能会压缩相关文件并将它们作为一个存档发回。
  • 我也考虑过这个解决方案,但我认为它会大大降低 API 的性能。

标签: java spring-boot amazon-s3 microservices


【解决方案1】:

如果您想隐藏您使用 S3 作为存储支持的事实,我猜您正在尝试 a) 确保您可以灵活地在以后更改存储后端,和/或 b) 将您自己的身份验证放在上传/下载之前,以确保用户有权读取/写入内容。

在任何一种情况下,这对于高性能 API 网关来说都是一项不错的工作,可以确保您最大限度地提高吞吐量。您可以为 Traefik 之类的东西编写配置,而不是编写自定义服务,该配置将 a) 验证请求,b) 直接将请求代理到 S3,c) 重写主机和路径以掩盖 S3 作为存储后端的使用.如果您选择使用 Traefik,请查看 Routers 部分和 ReplacePathRegex 中间件。

【讨论】:

  • 感谢您的回答,但我的用例有点不同。我的文件并不都在 S3 存储中。它们可能位于 S3 或另一个 NFS 卷中,因此此 API 还必须包含查找请求文件所在位置并从正确源检索它们的逻辑。
猜你喜欢
  • 1970-01-01
  • 2020-02-01
  • 2020-05-14
  • 2017-10-11
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多