【问题标题】:What is the right method for storing files in a microservice architecture?在微服务架构中存储文件的正确方法是什么?
【发布时间】:2019-03-30 12:54:45
【问题描述】:

我目前正在开发一个传统的单体应用程序,但我正在将其分解为由 kubernetes 管理的 Spring 微服务。该应用程序允许上传/下载大文件,这些文件通常存储在主机文件系统中。我想知道在微服务架构中持久保存这些文件的最可行方法是什么?

【问题讨论】:

  • 感谢大家的回复。他们真的很有帮助!

标签: spring docker kubernetes persistence microservices


【解决方案1】:

你有很多不同的选择,谷歌搜索你的问题,你会找到很多答案,适合任何预算和口味。基本上,您需要像 AWS S3 这样的高可用性存储。如果您想降低成本,您也可以设置自己的专用服务器来存储这些文件,但是您必须担心备份和可用性。如果您需要对这些文件进行低延迟访问,那么您也希望将它们放在 CDN 后面。

【讨论】:

    【解决方案2】:

    有很多地方可以存储您的数据。它还取决于您能够花费的预算(保留重复数据也意味着需要更多的存储空间,需要花钱),并且主要取决于您的业务需求。

    • 是否始终需要所有数据?
    • 是否存在与地理/区域相关的案例?
    • 读/写操作需要多快?
    • 需要缓存吗?
    • 有状态还是无状态?
    • 有操作要求吗?应该如何维护?
    • ...

    您的微服务不应该知道数据实际存储在哪里。在 kubernetes 中,您可以使用 Persistent-Volumes https://kubernetes.io/docs/concepts/storage/persistent-volumes/,它可以链接到您的 Cloud-Provider 的存储或其他东西。微服务应该只挂载该卷并能够将其视为本地文件。

    请注意,Cloud Provider Storages 已经包含扩展、并发等解决方案。所以我可能会在后台使用单个 Blob-Storage。

    但是不得不说,有一种趋势是将微服务理解为耦合在一起的数据和逻辑的包,并接受复制数据,这会带来更好的可扩展性。

    查看更多信息:

    【讨论】:

      【解决方案3】:

      我们大部分时间都在现场。我们最终使用 nfs。阻力最小的路径,但可能不是最高性能的路径,并且使其高度可用是困难的。如果您有机会我同意 Denis Pshenov 的观点,那么类似 S3 的系统(例如 minio)可能是更好的选择。

      【讨论】:

        【解决方案4】:

        也许你应该看看 rook 项目 (https://rook.io/)。它易于设置,并为您的 CNA 提供不同类型的存储和持久性技术。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-23
          • 2019-08-05
          • 2019-06-15
          • 2016-04-15
          • 2012-06-16
          • 2017-02-16
          • 2017-07-01
          • 2012-02-18
          相关资源
          最近更新 更多