我最近开始为一家公司工作,该公司希望将其整体式SaaS应用程序分解为容器化微服务。不过,我很难掌握持久存储的基本部分。为什么会有这么多不同的竞争平台? Portworx,Rexray,StorageOS,Flocker,Inifint等。

我的问题


为什么有人不会简单地启动NFS服务器并使用分层文件夹结构在那里作为他们的存储后端?使用其中一种工具会获得什么收益?
在Docker中使用这种方法有多危险?在基于docker的环境中造成灾难性数据丢失的常见原因是什么?
您会推荐哪种持久性存储解决方案,为什么?我公司运营一个SaaS平台。数据有效载荷很小(5kb-100kb)。数据处理的资源消耗很小。总体交易量中等,但仍在增长。我们希望将整体应用程序作为单独的容器化微服务完全迁移到云中。包括我们的数据仓库。
有些无关紧要,但可以联系在一起。使用Kubernetes作为协调器而不是Rancher / Cattle有什么优势? Kubernetes是否为中小型平台设计过度?除了一键式安装之外,在Rancher中使用Kubernetes有什么优势?

谢谢您的见解。抱歉,天真。我欢迎所有文档和补充阅读材料。

编辑:对于上下文,我们使用Azure作为我们的基础云平台。

评论

对于4:Kubernetes可以很好地将Azure创建永久卷作为Azure磁盘。 NFS具有不良锁定机制的历史,万一编排器出现错误,您可能会轻易破坏文件。

在这种情况下,我曾与之合作的团队在Cassandra作为一组mucroservices的存储后端方面拥有良好的经验,但重点是读取而不是写入数据
什么样的数据?数据库数据?图片?文本文件?

可能相关:devops.stackexchange.com/questions/742/…

#1 楼

我可以回答第二点:

当应用程序在容器内运行但存储或任何其他实时会话都保存在共享RAM或数据库中时,Docker最适合基于微服务的体系结构。

基本上,您不应该在docker容器中存储任何内容。原因有很多:


考虑升级:团队中的某个人创建了应用程序的新映像,您需要运行带有最新映像的容器。当前的docker和流行的方法是关闭现有容器,并旋转一个具有与旧容器相同的运行时参数但具有新映像的新容器。这是容器应始终为无状态且不包含任何数据的最大原因之一。您可以将所有数据装载到某个位置,并将会话保存在db或诸如memchached之类的文件中。
docker的一大用例之一是构建集群。如果您开始将数据保存在容器中,那么在应用程序容器之间保持数据同步是一项开销。生产,没有人愿意成为他们如何搞乱生产的第一个讲故事的人:)