MinIO基础及面经

MinIO基础及面经

Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟化镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

一、基础概念

1.分布式文件系统应用场景
  • 互联网海量非结构化数据的存储需求
    • 电商网站:海量商品图片
    • 视频网站:海量视频文件
    • 网盘:海量文件
    • 社交网站:海量图片
2.基础名词解释
  • Object:存储到Minio的基本对象,如文件、字节流、Anything…
  • Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据量是互相隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹。
  • Drive:即存储数据的磁盘,在Minio启动时,以参数的方式传入。Minio中所有的对象数据都会存储在Drive里。
  • Set:即一组Drive的集合,分布式部署根据集群规模自动划分一个或多个Set,每个Set中的Drive分布在不同位置。一个对象存储在一个Set上.(for example:{1…64} is divided into 4 sets each of size 16)
    • 一个对象存储在一个Set上
    • 一个集群划分为多个Set
    • 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出
    • 一个Set中我的Drive尽可能分布在不同的节点上

本部分资料来自博客园,作者:郭祺迦,转载请注明原文链接:https://www.cnblogs.com/guojie-guojie/p/16133626.html

二、面经

1.优点
  • 部署简单:一个single二进制文件既是一切,还可支持各种平台;
  • minio支持海量存储,可按zone扩展(原zone不受影响),支持单个对象最大5TB;
  • 兼容Amazon S3接口,充分考虑开发人员的需求和体验
  • 低冗余且磁盘损坏高容忍,标准且最高的数据冗余系统为2(即存储一个1M的数据对象,实际占用磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。
  • 读写性能优异
2.和HDFS对比
  • MinIO和HDFS都是分布式对象存储系统,用于存储和管理大规模数据集。它们有以下几个方面的不同:

    1. 数据模型:HDFS是一个分布式文件系统,以文件为单位进行数据存储和管理;而MinIO是一个对象存储系统,以对象为单位进行数据存储和管理。

    2. 存储架构:HDFS的存储架构基于数据块(block)和命名空间(namespace)进行组织和管理,由一个NameNode和多个DataNode构成;而MinIO的存储架构基于对象和存储池(storage pool)进行组织和管理,由多个MinIO Server构成。

    3. 数据访问接口:HDFS的数据访问接口主要是HDFS API和Hadoop Shell命令,同时支持POSIX文件系统接口;而MinIO的数据访问接口主要是S3 API和MinIO Client命令行工具,同时也支持其他云存储服务的API。

    4. 安装和部署:HDFS通常作为Hadoop生态系统的一部分进行安装和部署,需要依赖Hadoop集群的其他组件;而MinIO可以独立安装和部署,也可以作为Kubernetes、Docker等容器平台的一部分进行部署。

    5. 社区和生态:HDFS拥有大量的社区支持和丰富的生态系统,已经成为了大数据处理和分析的标准存储层;而MinIO的社区和生态系统相对较小,但在云原生、容器化等领域有广泛的应用。

综上所述,MinIO和HDFS适用于不同的场景和应用需求,可以根据具体情况进行选择和使用。(作者:conch-in-cradle 链接:https://www.nowcoder.com/discuss/475286249251536896 来源:牛客网)

  • 其他区别:

    • HDFS是指Hadoop分布式文件系统(Hadoop Distributed File System),它是Apache Hadoop框架的一个关键组件,用于存储和管理大规模数据集。

    • HDFS被设计为一个分布式的、高容错性的文件系统,可以在普通硬件上运行。它将一个大文件划分成多个数据块,并将这些数据块存储在一个或多个节点上,以提高数据的可靠性和可用性。

    • HDFS的架构包括一个NameNode和多个DataNode。NameNode负责管理文件系统的命名空间、文件的元数据和块的位置信息,而DataNode则负责存储实际的数据块,并向NameNode汇报块的位置信息和健康状态。

    • 通过HDFS,用户可以很方便地将数据存储在分布式环境中,并进行读写操作。HDFS已经成为了许多大规模数据处理和分析系统的标准存储层,例如Hadoop MapReduce、Apache Spark等。

    • 在MinIO中,对象(Object)是数据的基本单位,每个对象包含了数据本身、元数据和唯一的标识符(Object Name)。对象可以看作是文件系统中的文件,但是与文件系统不同的是,对象存储不是基

    • 于层次结构的,而是直接存储在一个平面命名空间中。

    • 对象池(Storage Pool)是MinIO中存储资源的逻辑组织单位,类似于数据中心中的机柜。每个对象池可以由一个或多个MinIO Server组成,提供了物理存储资源和访问策略的隔离和管理。对象池可以被用来进行容量规划、数据管理、安全性控制等任务。

    • 在MinIO中,每个对象都会被存储在一个或多个对象池中,由对象池提供物理存储资源和数据访问服务。对象池之间相互独立,可以根据需要进行扩展或缩减,同时还可以对每个对象池进行配置和管理,以满足不同的需求和场景。

    • 基于对象和对象池的设计使得MinIO具有高可扩展性、高灵活性和高可靠性,同时还能够提供更好的数据管理和访问控制等功能。

    3.数据恢复

    MinIO在分布式存储中使用纠删码(Erasure Code)来实现数据的冗余存储和恢复。纠删码是一种在数据分布式存储中常用的编码技术,它可以将数据分成多个数据块并进行编码,生成多个校验块,从而实现数据的冗余存储和恢复。

    在MinIO中,纠删码技术可以应用于对象的多副本复制和故障恢复。与传统的多副本复制相比,纠删码技术可以将数据冗余度降低到一定程度,从而节省存储空间和带宽开销。当节点故障或数据损坏时,MinIO会自动使用纠删码技术进行数据恢复,将数据块和校验块恢复到其他节点上,以保证数据的可靠性和可用性。

    需要注意的是,纠删码技术也会带来一些额外的计算和存储开销,因此需要根据实际情况进行权衡和调整。同时,纠删码技术的性能也取决于编码参数、节点规模和数据访问模式等因素,需要进行合理的规划和优化。

    在MinIO中,数据块和校验块是纠删码编码和解码的基本单元,用于实现数据的冗余存储和恢复。以下是数据块和校验块的详细说明:

    1. 数据块:数据块是纠删码编码前的原始数据块,通常包含一个完整的对象或文件。在MinIO中,数据块可以被分割成多个子块,并经过纠删码编码处理生成多个数据块和校验块。
    2. 校验块:校验块是纠删码编码后生成的校验数据块,用于恢复数据块中丢失或损坏的数据。在MinIO中,校验块通常比数据块更小,并根据具体的纠删码编码方案生成。

    使用纠删码编码后,数据块和校验块可以分别存储在不同的节点上,实现数据的冗余存储和故障恢复。例如,当某个节点出现故障或数据损坏时,MinIO可以自动将校验块复制到其他节点上,从而恢复数据块中的丢失或损坏的数据。数据块和校验块的数量和分布方式取决于具体的纠删码编码方案和配置参数,需要根据实际情况进行权衡和调整。(作者:conch-in-cradle 链接:https://www.nowcoder.com/discuss/475286249251536896 来源:牛客网)

    4.详细的介绍一下 MinIO存储和检索文件的流程
    1. 存储文件:
      • 用户通过Minio客户端或使用Minio提供的API将文件上传到Minio集群。
      • 客户端将文件分割成多个数据块,并使用Erasure Coding技术对数据块进行编码和冗余备份。
      • 客户端将编码后的数据块分发到Minio集群中的多个节点上,以实现数据的分布式存储和容错性。
      • 每个节点将数据块存储在本地的硬盘上,并记录文件的元数据信息,如文件名、大小、创建时间等。
    2. 检索文件:
      • 用户通过Minio客户端或使用Minio提供的API发送文件检索请求。
      • 客户端根据文件的元数据信息确定文件所在的节点,并向该节点发送请求。
      • 节点根据请求找到相应的数据块,并将数据块返回给客户端。
      • 客户端将接收到的数据块组合成完整的文件,并提供给用户使用。
    5.Minio的架构是怎样的?它有哪些组成部分?

    Minio的架构是一个去中心化的架构,它由多个Minio Server组成。

    每个Minio Server都是一个独立的节点,可以在不同的物理机器或虚拟机上运行。这些节点通过网络连接在一起,形成一个分布式存储系统。

    Minio的架构采用无共享的设计,对象数据被打散存储在不同节点的多块硬盘上。

    这种设计使得Minio具有高可用性、容错性和可扩展性,即使某个节点发生故障,其他节点仍然可以提供服务。

    Minio还采用了统一的命名空间,每个存储桶(bucket)对应一个目录,每个对象(object)对应存储桶目录下的一个子目录。这样可以方便地管理和访问存储的数据。

    img

6.Minio的架构如何实现高可用性和容错性?
  • 分布式架构:

​ Minio采用分布式架构,将数据存储在多个节点上,以实现高可用性和容错性。一个Minio集群由多个Minio节点组成,每个节点都是一个独立的服务进程。节点之间是对等的,它们共享相同的命名空间和对象数据。

  • Erasure Coding 纠错码技术:

​ Minio集群使用Erasure Coding技术来保证数据的可靠性和可用性。Erasure Coding是一种纠删码技术,它将数据分成多个部分,并使用冗余编码来存储每个部分的多个副本。当某个节点发生故障时,其他节点可以使用这些编码副本恢复丢失的数据。

  • 数据分片和复制:

​ Minio将对象数据分片存储在不同的节点上,以实现负载均衡和容错性。每个对象被分成多个部分,并分别存储在集群中的不同节点上。这样即使某个节点发生故障,其他节点仍然可以提供服务,并且可以通过复制和恢复机制来保证数据的完整性和可靠性。

  • 自动故障检测和修复:

​ Minio具有自动故障检测和修复的能力。当节点发生故障或数据损坏时,Minio能够自动检测并修复数据,保证数据的一致性和可靠性。

  • 动态扩展和负载均衡:

​ Minio集群可以根据需要进行水平扩展,可以动态添加或删除节点。当添加节点时,Minio会自动将现有对象数据分布到新的节点上,以保持负载均衡。当删除节点时,Minio会自动将该节点上的对象数据转移到其他节点上,以保证数据的完整性和可靠性。

7.介绍一下Minio的Erasure Code纠删码:

纠删码(Erasure Code)简称EC,是一种数据保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。

从数据函数角度来说,纠删码提供的保护可以用下面这个简单的公式来表示:n = k + m。变量“k”代表原始数据或符号的值。变量“m”代表故障后添加的提供保护的额外或冗余符号的值。变量“n”代表纠删码过程后创建的符号的总值。

存储在不同的位置,比如磁盘、存储节点或者其它地理位置。

从数据函数角度来说,纠删码提供的保护可以用下面这个简单的公式来表示:n = k + m。变量“k”代表原始数据或符号的值。变量“m”代表故障后添加的提供保护的额外或冗余符号的值。变量“n”代表纠删码过程后创建的符号的总值。

举个例子,假设n=16,代表有16块磁盘,另外,有10份原始文件一模一样,称为k,16 = 10 +m,这个m就是可以恢复的校验块个数,所以m是6,任意6个不可用,原始文件都可以恢复,极端情况,10个原始文件坏掉6个,靠4个原始的加上6个校验块,可以把坏掉的6个原始文件恢复,这个用到数学行列式矩阵知识,不做展开。(参考原文链接)

  • 31
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值