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

Posted

技术标签:

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

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

【问题讨论】:

感谢大家的回复。他们真的很有帮助! 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

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

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

查看更多信息:

http://blog.christianposta.com/microservices/the-hardest-part-about-microservices-data/ https://github.com/katopz/best-practices/blob/master/best-practices-for-building-a-microservice-architecture.md#stateless-service-instances https://12factor.net/backing-services https://blog.twitter.com/engineering/en_us/topics/infrastructure/2017/the-infrastructure-behind-twitter-scale.html

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于在微服务架构中存储文件的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在微服务和API网关架构中对不同的配置文件进行身份验证和授权

Grpc微服务架构实现

如何在微服务和 API 网关架构中对不同的配置文件进行身份验证和授权

微服务架构中的社交 SSO 是啥样的?

API 网关在微服务架构中处理 Web 服务

不要在微服务架构中使用单一数据库