在微服务架构中存储文件的正确方法是什么?

时间:2018-10-25 20:05:07

标签: spring docker kubernetes persistence microservices

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

4 个答案:

答案 0 :(得分:2)

您有多种选择,无论预算和口味如何,在Google搜索您的问题时,都会找到很多答案。基本上,您需要像AWS S3这样的高可用性存储。如果您想降低成本,则可以设置自己的专用服务器来存储这些文件,但是您将不得不担心备份和可用性。如果您需要对这些文件的低延迟访问,那么您也希望将它们放在CDN之后。

答案 1 :(得分:1)

我们大多数人都在prem。我们最终使用nfs。通往阻力最小的道路,但可能并非是性能最高的道路,并且使其具有很高的可用性是很困难的。如果您有机会与Denis Pshenov达成协议,那么像S3这样的系统(例如minio)可能是更好的选择。

答案 2 :(得分:1)

也许您应该看看rook项目(https://rook.io/)。它很容易设置,并为您的CNA提供了各种存储和持久性技术。

答案 3 :(得分:1)

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

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

微服务的一部分不应该知道数据的实际存储位置。在kubernetes中,您可以使用持久卷https://kubernetes.io/docs/concepts/storage/persistent-volumes/,它可以链接到您的Cloud-Provider或其他存储设备。微服务应该只是挂载该卷,并能够将其视为本地文件。

请注意,Cloud Provider存储已经包含用于扩展,并发等的解决方案。因此,我可能会在后台使用单个Blob存储。

但是必须说,有一种趋势是将微服务理解为数据和逻辑耦合在一起的包,并接受重复数据,从而带来更好的可伸缩性。

有关更多信息,请参见: