Minio架构简介

简介

Minio是一个go编写基于Apache License v2.0开源协议的对象存储系统,是为海量数据存储、人工智能、大数据分析而设计,它完全兼容Amazon S3接口,十分符合存储大容量的非结构化数据从几十kb到最大5T不等。是一个小而美的开源分布式存储软件。

特点

简单、可靠:Minio采用简单可靠的集群方案,摒弃复杂的大规模的集群调度管理,减少风险与性能瓶颈,聚焦产品的核心功能,打造高可用的集群、灵活的扩展能力以及超过的性能。建立众多的中小规模、易管理的集群,支持跨数据中心将多个集群聚合成超大资源池,而非直接采用大规模、统一管理的分布式集群。

功能完善:Minio支持云原生,能与Kubernetes、Docker、Swarm编排系统良好对接,实现灵活部署。且部署简单,只有一个可执行文件,参数极少,一条命令即可启动一个Minio系统。Minio为了高性能采取无元数据数据库设计,避免元数据库成为整个系统的性能瓶颈,并将故障限制在单个集群之内,从而不会涉及其他集群。Minio同时完全兼容S3接口,因此也可以作为网关使用,对外提供S3访问。同时使用Minio Erasure code和checksum 来防止硬件故障。即使损失一半以上的硬盘,但是仍然可以从中恢复。分布式中也允许(N/2)-1个节点故障。

架构

去中心化架构

Minio采用去中心化的无共享架构,对象数据被打散存放在不同节点的多块硬盘,对外提供统一命名空间访问,并通过负载均衡或者DNS轮询在各个服务器之间实现负载均衡

architecture_diagram

统一的命名空间

Minio有两种集群部署方式,一种是常见的本地分布式集群部署,一种是联盟模式部署。本地分布式集群部署即在多个本地服务器节点部署Minio服务,并将其组成单套分布式存储集群,并提供统一命名空间和标注的S3访问接口。联盟部署则是将多个本地Minio集群在逻辑上组成了统一命名空间,实现近乎无线的扩展与海量的数据规模管理,这些集群都可以在本地或者分布在不同地域的数据中心。

Architecture-diagram_distributed_32

分布式锁管理

与分布式数据库类似,Minio也会存在面临数据一致性的问题:一个客户端在读取一个对象的同时,另一个客户端可能正在修改或者删除这个对象。为了避免出现不一致的情况。Minio专门设计并实现了dsync分布式锁管理器,来控制数据一致性。

  • 任何一个节点的锁请求都会广播给集群内的所有在线节点
  • 如果收到N/2+1个节点的同意,则获取所成功
  • 没有主节点,每个节点互相对等,节点间通过stale lock检测机制,判断节点的状态及持有锁情况
  • 由于设计简单,比较粗糙。有一定的缺陷性,最多支持32个节点。无法避免锁丢失的场景。不过基本满足可用需求。
EC2 Instance Type Nodes Locks/server/sec Total Locks/sec CPU Usage
c3.8xlarge(32 vCPU) 8 (min=2601, max=2898) 21996 10%
c3.8xlarge(32 vCPU) 8 (min=4756, max=5227) 39932 20%
c3.8xlarge(32 vCPU) 8 (min=7979, max=8517) 65984 40%
c3.8xlarge(32 vCPU) 8 (min=9267, max=9469) 74944 50%

数据结构

Minio对象存储系统把存储资源组织为租户-桶-对象的形式

租户-桶-对象

  • 对象:类似于hash表中的表xiang表项,名字是关键字,内容相当于值
  • :是若干个对象的逻辑抽象,是盛装对象的容器
  • 租户:用于隔离存储资源。在租户下可以建立桶、存储对象
  • 用户:在租户下面创建的用于访问不同桶的账号。可以使用minio提供的mc命令设置不同用户访问各个桶的权限

统一域名访问

Minio集群扩展加入了新的集群或者桶后,对象存储的客户端程序需要通过统一的域名/url来访问数据对象,这个过程涉及了etcd与CoreDns

img

存储机制

Minio使用纠删码erasure code和checksum来保护数据免受硬件故障和无声数据损坏。即使丢失一半数量(N/2)的硬盘,仍然可以恢复数据。

纠删码是一种恢复丢失和损坏数据的数学算法,目前纠删码技术在分布式存储系统中的应用分为三类,阵列纠删码(Array code:RAID5、RAID6等)、RS(Reed-solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶检验纠删码。ErasureCode是一种编码技术,它可以将份原始数据,增加M份数据,并能通过N+M份中的任意N分数据,还原原始数据。即如果有任意小于等于M份的数据丢失,仍然能通过剩下的数据还原。

Minio采用Reed-solomon code将对象拆分成N/2数据和N/2奇偶检验快,这就意味着如果是12块盘,一个对象将会被分成6个数据块、6个奇偶检验快,可以丢失任意6块盘(不管存放的数据快还是奇偶检验快),让然可以从剩下的盘中的数据恢复。

在一个N节点的分布式Minio中,只要有N/2个节点在线,你的数据就是安全的。不过至少需要N/2+1个节点才能进行写操作。

将一个文件上传至Minio后,对应磁盘上的信息如下:

img

其中xl.json为此对象的元数据文件。part.1为此对象的第一个数据分片。(分布式中每一个节点都会存在这两个文件分别是数据块和奇偶检验快)在读取数据时Minio会对编码快进行HighwayHash编码,然后进行校验,以确保每个编码的正确性。基于Erasure Code和Bit Rot Protection的HighwayHash这两个特性,所以Minio的数据可靠性很高。

lambda计算与持续备份

Minio支持lambda计算通知机制,即桶中的对象支持事件通知机制。当前支持的事件类型有:对象上传、对象下载、对象删除、对象复制等。当前支持事件接受系统有:redis、NATS、AMQP、Kafka、mysql、elasticsearch等。

对象通知机制增强了Minio的扩展性,可以让用户通过自行开发来实现某些Minio未实现的功能。比如基于元数据的检索、与用户业务相关的计算等。同时也可以通过这个机制进行快速有效的增量备份。

对象存储网关

Minio除了可以作为存储系统服务外,还可以作为网关,后端可以与NAS系统、HDFS系统等分布式文件系统或者S3、OSS这样的第三方存储系统。有了Minio网关,就可以为这些后端系统添加S3兼容的API,便于管理和移植,因为S3API已经是对象存储界事实的标注。

multi-cloud-gateway

用户通过统一的S3 API请求存储资源,通过S3 API Router将各个请求路由到对应的ObjectLayer,每个ObjectLayer对应实现了各个存储系统的对象操作的所有API。例如GCS(Google cloud storage)实现了ObjectLayer接口后,它对于后端存储的操作就是通过GCS的SDK实现。当终端通过S3 API获取存储桶列表,那么最终的实现会通过GCS的SDK访问GCS服务获取存储桶列表,然后包装成S3标准的结构返回给终端。

原文链接:https://www.cnblogs.com/east4ming/p/17221201.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Minio架构简介 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 阿里云杨敬宇:5G时代,边缘计算将发挥更大价值

    摘要:            “5G时代,边缘计算将发挥更大价值。”3月8日,阿里云边缘计算技术负责人杨敬宇向媒体表示,边缘计算作为5G时代的一项关键技术,未来将成为不可或缺的基础设施之一。 “5G时代,边缘计算将发挥更大价值。”3月8日,阿里云边缘计算技术负责人杨敬宇向媒体表示,边缘计算作为5G时代的一项关键技术,未来将成为不可或缺的基础设施之一。 5G时…

    云计算 2023年4月12日
    00
  • .Net Core中使用ExceptionFilter过滤器的方法

    下面是关于“.Net Core中使用ExceptionFilter过滤器的方法”的完整攻略,包含两个示例说明。 简介 在.NET Core应用程序中,我们可以使用ExceptionFilter过滤器来处理应用程序中的异常。ExceptionFilter过滤器可以捕获应用程序中的异常,并对异常进行处理。在本攻略中,我们将介绍如何在.NET Core应用程序中使…

    云计算 2023年5月16日
    00
  • 说明及区分云计算的IaaS和PaaS以及SaaS三种服务方式

    云计算是一种基于互联网的计算方式,它提供了三种服务方式:IaaS、PaaS和SaaS。以下是一些攻略和示例,供您参考: 1. IaaS IaaS(基础设施即服务)是云计算的一种服务方式,它提供了基础设施的租用,包括计算、存储、网络等。IaaS服务提供商通常会提供虚拟机、存储空间、负载均衡、防火墙等基础设施服务,用户可以根据自己的需求选择相应的服务。 2. P…

    云计算 2023年5月16日
    00
  • Scala函数式编程专题–函数思想介绍

    Scala函数式编程专题–函数思想介绍 什么是函数式编程? 函数式编程是一种编程模式,它的核心思想是将程序看做是一系列纯函数的组合。纯函数是指输入相同,结果一定相同,没有副作用,不会改变程序状态。 函数式编程可以提高程序的可读性、可维护性和可扩展性,因为每个函数都是相互独立的,可以单独测试和修改。 Scala中的函数式编程 Scala是一门兼具面向对象编程…

    云计算 2023年5月18日
    00
  • Apache中配置支持CORS(跨域资源共享)实例

    下面是关于“Apache中配置支持CORS(跨域资源共享)实例”的完整攻略,包含两个示例说明。 简介 CORS(跨域资源共享)是一种Web浏览器的安全机制,它允许Web应用程序从不同的域名访问其资源。在Apache中,我们可以通过配置来支持CORS,以便我们的Web应用程序可以跨域访问资源。在本攻略中,我们将介绍如何在Apache中配置支持CORS,包括设置…

    云计算 2023年5月16日
    00
  • 搜狗输入法怎么关闭云计算候选?搜狗输入法关闭云计算候选教程

    如果您想关闭搜狗输入法的云计算候选,可以按照以下步骤进行操作: 打开搜狗输入法设置界面 在您的电脑上打开搜狗输入法,然后点击输入法界面右下角的“设置”按钮,进入搜狗输入法的设置界面。 进入高级设置 在搜狗输入法的设置界面中,点击“高级设置”选项卡,进入高级设置界面。 关闭云计算候选 在高级设置界面中,找到“云输入”选项,然后将“启用云输入”选项关闭即可。 以…

    云计算 2023年5月16日
    00
  • Python语言的自我介绍一起来看看

    下面是关于“Python语言的自我介绍一起来看看”的完整攻略: 标题 首先,我们需要为本次攻略设定一个标题,用于表明本文主题。在Markdown中,标题以#号开头,#越多代表标题级别越高。 # Python语言的自我介绍一起来看看 简介 在这部分,我们会为读者提供一个简短的介绍,出现背景、目的和内容。 Python是一种广泛使用的高级编程语言,它具有可读性强…

    云计算 2023年5月17日
    00
  • ASP.NET Core MVC 中实现中英文切换的示例代码

    接下来我将为您详细讲解“ASP.NET Core MVC 中实现中英文切换的示例代码”的完整攻略。 实现中英文切换 在ASP.NET Core MVC中,实现中英文切换可以通过多种方式实现,比如使用资源文件、使用JavaScript等方式。下面,我们将介绍一种比较常用的方式:使用资源文件。 第一步:添加资源文件 在项目的根目录下新建一个 Resources …

    云计算 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部