【问题标题】:Storing files on the API or on the microservice filesystem在 API 或微服务文件系统上存储文件
【发布时间】:2019-09-22 21:35:02
【问题描述】:

我正在开发一个应用程序,该应用程序包含一个

  • 前端应用
  • API,我喜欢将其视为网关
  • 处理业务逻辑和数据库工作的微服务

在实现类似文件存储的功能时,为了上传小文件和大文件,我只是假设我会将这些文件存储在微服务的文件系统中,并将路径与元数据一起保存到微服务的数据库。

因为微服务没有实现任何 Http API 端点,所以我通过我的 API 网关上传文件。但是在意识到将这些文件从 API 传输到微服务以及提供相同的服务需要做多少工作之后,我只是将它们存储在 API 的文件系统中并将路径保存到微服务的数据库中。


这种方法可以吗?

我的 API gateway 从它自己的文件系统存储和提供文件是不是很奇怪? 如果是这样,我应该在上传时将文件从 API 传输到微服务,即使考虑到文件可能很大 - 还是微服务本身应该实现特定的 API?

我希望这个问题不会被解释为基于意见 - 我想知道哪种方法最适合考虑前端-api-微服务模式以及是否有任何架构标准可以解决这种情况,以及如果有任何方法,那就是 gotchas。

【问题讨论】:

  • 只是想知道为什么微服务没有端点?应该是微服务处理文件上传
  • 那么如果一个微服务同时处理数据库工作和文件上传就可以了吗?你能分享更多信息吗?也许还有链接/参考?

标签: api web file-upload upload microservices


【解决方案1】:

经过一段时间和一些经验,这个问题的正确答案应该是 API Gateway。微服务本身就足够复杂,存储任何文件,无论大小,宁愿浪费网络、带宽等,只会引入延迟问题,降低性能以及用户体验。

我将把它留在这里只是为了让人们能听到这一点,因为这两种方法都不会出错,而 API 网关的选择只是提供了更多实际的好处,因此更合适。如果这个问题是针对存储在数据库中的数据或文件,那么微服务及其数据库将是显而易见的选择。

如果您可以方便地将文件服务器添加到您的整个堆栈中,那么可以肯定,这将是正确的方法,但这也会带来更多的复杂性和上述其他内容。

【讨论】:

    【解决方案2】:

    基于上面的cmets

    API 网关

    网关的目的是重定向请求并处理诸如身份验证、日志记录等横切关注点。它不应该做更多的事情。网关必须具有高可用性,网关的任何问题都意味着您无法访问相关服务。

    文件上传

    文件上传应该由微服务自己处理。您的网关将仅用于传递和获取流。根据您系统的性质,如果您使用云存储,您可以使用“代客钥匙”之类的模式。 https://docs.microsoft.com/en-us/azure/architecture/patterns/valet-key

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 2013-05-08
      • 2014-02-11
      • 2017-05-28
      • 2022-11-24
      相关资源
      最近更新 更多