为什么不应该在 SAN/NAS 设备上运行 MinIO(还有一个例外)

2023-12-31 20:44

本文主要是介绍为什么不应该在 SAN/NAS 设备上运行 MinIO(还有一个例外),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们想分享一下我们在 SAN/NAS 设备上运行 MinIO 的想法。首先,您可以在 SAN/NAS 设备上运行 MinIO。虽然这是可能的,但这不是一个好主意,我们强烈建议客户不要采用这种方法。不要让友好的邻居 SAN/NAS 设备供应商在没有先阅读以下内容的情况下说服您。它解释了为什么这是一个坏主意以及其含义是什么。

MinIO 几乎可以在任何东西上运行。话虽如此,我们提出了一些建议,您可以在这里找到它们。如果您对任何其他框有任何疑问,请给我们留言,在 Slack 频道上提问或通过定价页面上的“咨询专家”聊天功能提问。

以下是您不应在 SAN/NAS 设备上运行 MinIO 的原因。

  1. 替代,而不是补充。对象存储是 SAN/NAS 的替代品,而不是补充。POSIX 无法在我们生活的云原生世界中扩展。正在衰落的是传统技术。由于 SAN/NAS 曾经占据的市场份额,他们非常希望将对象存储视为 API 层。事实并非如此。对象存储是云的主存储。云建立在对象存储之上,而不是 SAN/NAS。

  2. 重复的耐久性。MiniO 是一个功能齐全的对象存储,其纠删码实现针对全球规模进行了高度优化。每个对象都使用自己的基于高速公路哈希的 bitrot 哈希独立进行纠删编码。当您在 SAN/NAS 设备上运行 MinIO 时,您实际上是在重复这项工作 - 对性能的影响是可预测的。由于您正在执行两次操作,因此速度较慢,此外,SAN/NAS 设备未运行优化的纠删码,因此性能差异更加明显。

  3. 性能瓶颈。已在重复的持久性部分中引用 - 在 SAN/NAS 设备上运行 MinIO 时,性能会下降。作为一般规则,MinIO 将在几乎任何平台上最大化硬件 - 最大化使用 NVMe 的网络和带有 HDD 的驱动器(尽管较小的网络也将是 HDD 的瓶颈)。MinIO 已经并将继续投入大量资源来优化 AVX-512、NEON 和 VSX 扩展的 SIMD 优化。没有其他供应商进行过这项投资,这在基准测试中有所体现。

  4. 尽管 SAN/NAS 架构被设计为联网,但对于分布式架构来说太过繁琐。因此,高 IOPS 声明仅限于纵向扩展架构,随之而来的是挑战。一个系统中只有这么多的驱动器和 CPU。

  5. 此外,现代数据库和 AI/ML 应用程序是吞吐量密集型的,而不是 IOPS 密集型的,因为它们将数据提取到本地内存中,在那里它们可以高速执行突变和转换。吞吐量比 IOPS 更容易、更经济地扩展,因此发生了转变。

如下图所示,驱动器还有一层额外的存储网络。这会导致性能损失、复杂性增加和成本增加。

  1. 并发。SAN/NAS 设备无法允许大量应用程序通过网络大规模读取、修改文件并将其写回存储。相比之下,MinIO 将问题分解并在分布式架构中并行执行任务,以提供更高的吞吐量。

每个现代数据库和数据处理工作负载都是为分布式数据处理而设计的。Hadoop开启了大规模并行分布式数据处理的趋势。原因是纵向扩展存储架构很快就遇到了瓶颈。

与 SAN/NAS 设备相比,具有运行软件定义存储的 100GbE NIC 的直连存储相当便宜。在直连存储模型中,数十到数百个节点处理 PB 级数据的情况并不少见。

为了说明这一点,使用 32 个具有 100GbE NIC 和 16 个 NVMe SSD 的节点,您可以实现 3,200 Gbps 网络带宽和 1,536 GBps(16 个 SSD x 3GBps x 32 个节点驱动器带宽)。这在 SAN/NAS 方法中在经济上不可行,因此我们建议独立运行 MinIO。

  1. 专用存储。如果您要与 MinIO 以外的其他应用程序共享底层 SAN/NAS 基础架构,您可能希望使用 QoS 设置为 MinIO 保留吞吐量 - 尽管存在一些限制,即使这也不是一个好的解决方案。MinIO 受 I/O 限制,底层存储介质的任何波动都会体现在应用程序的性能中。

  2. 快照已过时且受限。由于 MinIO 的对象级版本控制和不可变性提供了持续的数据保护,因此它有效地使 SAN/NAS 快照过时。你所需要的只是一个没有花里胡哨的愚蠢的街区商店。

SAN/NAS 快照较差的原因是,它不支持多卷一致性快照,它不能保护快照窗口之间的任何数据丢失,并且不能扩展到大型 PB 卷。

将 MinIO 与这些劣质数据保护方案一起运行并不是在增加冗余,而是在降低平台的有效性,并通过不必要地占用过时的快照方法的驱动器空间来增加成本。

MinIO 涵盖了弹性组件,使用该功能并让快照消失。

在记下了不在 SAN/NAS 上运行 MinIO 的所有原因之后,还有一些值得讨论的其他细节可能会被证明是一般建议的例外。以下每个方案都着眼于在三种不同配置中运行的 MinIO:单服务器/单驱动器、单服务器/多驱动器和多服务器/多驱动器。

让我们从理想的场景开始 - 我们建议将其作为参考点:


在这里,MinIO 作为商用硬件上的直连存储运行,以大规模提供性能、经济性和简单性。

接下来,我们看一下在 SAN 上运行 MinIO:


许多 Web 和移动应用程序处理少量数据,通常从数百 GB 到几 TB 不等。作为一般规则,它们对性能的要求并不高。在这种情况下,如果您已经对 SAN 基础架构进行了投资,则可以在连接到 SAN LUN 的单个容器或 VM 上运行 MinIO。发生故障时,虚拟机和容器会自动移动到下一个可用的服务器,并且数据卷可以由 SAN 基础架构保护,前提是您已将其架构为此类架构。

但是,随着应用程序从单个 LUN 扩展到多个 LUN 或多个虚拟机/容器,挑战也随之而来。上述所有限制均适用于此处。每个 LUN 的扩展能力不能超过 16TB。以独立或分布式模式跨多个 LUN 提供 MinIO 可以工作,但效率不高。只要您意识到性能和复杂性方面的局限性,那么这是一种可行的方法,即使不是最佳方法。

最后,我们看一下在 NAS 上运行 MinIO:


与作为块存储的 SAN 和 DAS 不同,NAS 是一种网络文件系统。在功能上,它比 SAN 更接近对象存储。由于重叠,在充当底层存储介质时,它会严重削弱对象存储。位于 NAS 之上的对象存储根本无法克服传统的 POSIX 限制。因此,除了在单服务器/单驱动器(NAS 导出)方案中之外,您根本无法在 NAS 上运行 MinIO。

即使在这种情况下,您也应将其限制为简单的文件服务工作负载,而不是使用并发读取-修改-写入-覆盖类型的工作负载对对象存储造成负担。NAS 一致性和并发性保证较弱。一些供应商伪造文件锁定原语,这可能导致数据丢失。在将此设置投入生产之前,请确保针对各种 I/O 彻底测试您的设置。

结论

MinIO 是出了名的极简主义,非常注重简单性和自动化。与人们听到极简主义这个词时想到的相反,它意味着恰到好处的数量。添加一些东西,它变得杂乱或臃肿,拿走一些东西,它变得缺乏。

在 SAN/NAS 上运行 MinIO 相当于添加一些不需要的东西。是的,你可以做到,但你最终会在多个层面上受到损害,多个系统执行冗余操作。

数据驱动型公司的表现优于非数据驱动型公司,当数据访问速度缓慢且效率低下时,您根本无法成为数据驱动型公司。

这篇关于为什么不应该在 SAN/NAS 设备上运行 MinIO(还有一个例外)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/557093

相关文章

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时