MinIO背景介绍

  • MinIO创始者是Anand Babu Periasamy, Harshavardhana(戒日王)等人, Anand是GlusterFS的初始开发者、Gluster公司的创始人与CTO,Harshavardhana曾经是GlusterFS的开发人员,直到2011年红帽收购了Gluster公司。

  • MinIO在设计上汲取了GlusterFS的相关经验与教训,系统复杂度上作了大量简化。

MinIO简介

概述

  • MinIO对象存储系统是为海量数据存储、人工智能、大数据分析而设计,基于Apache License v2.0开源协议的对象存储系统,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。

  • MinIO主要采用Golang语言实现,整个系统都运行在操作系统的用户态空间,客户端与存储服务器之间采用http/https通信协议。

Glusterfs

Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过Infiniband RDMA 或Tcp/Ip 方式将许多廉价的x86 主机,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。

设计哲学

  • 极简理念——采用尽可以简单可靠的集群管理方案,摒弃复杂的大规模集群调度管理,减少风险因素与性能瓶颈,聚焦产品的核心功能,打造高可靠的集群、灵活的扩展能力以及超高的性能;

  • 积木式扩展——建立众多的中小规模、易管理的集群,支持跨数据中心将多个集群聚合成超大资源池,而非直接采用大规模、统一管理的分布式集群。

设计原则

产品特点

高级特性

官方资源

官方网站

技术架构

数据组织结构

NAS系统把整个存储资源组织为目录树的形式,与此不同,对象存储系统把存储资源组织为租户-桶-对象的形式。数据结构组织见下图:

  • 对象:类似于hash表中的表项:它的名字相当于关键字,它的内容相当于“值”。

  • 桶:是若干个对象的逻辑抽象,是盛装对象的容器。

  • 租户:用于隔离存储资源。在租户之下可以建立桶、存储对象。

  • 用户:在租户下面创建的用于访问不同桶的账号。可以使用MinIO提供的mc命令设置不用用户访问各个桶的权限。

数据分布与均衡

去中心化架构

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

统一命名空间

MinIO对象存储系统主要有两种部署方式,一种是常见的本地分布式集群部署,一种是联盟模式部署。

  • 本地分布式集群部署方式即在多个本地服务器节点部署MinIO软件,并将其组件成单套分布式存储集群,并提供统一命名空间和标准S3访问接口。

  • 联盟部署模式即将多个MinIO集群在逻辑上组成了统一命名空间,实现近乎无限的扩展与海量的数据规模管理,这些集群可以都在本地,或分布在不同地域的数据中心。

如下图所示,4个服务器节点组成一个MinIO集群,每个服务器节点中会选择相同数据的硬盘创建一个纠删组,某个桶的数据会根据MinIO的分布式算法,切片分散存储到对应的纠删组中(详见纠删码相关内容)。

分布式锁管理

与分布式数据库相类似,MinIO对象存储系统也面临数据一致性问题:一个客户端程序在读取一个对象的同时,另一个客户端程序可能正在修改或者删除这个对象。为了避免出现数据不一致情况,MinIO相关开发人员为MinIO对象存储专门设计并实现了dsync分布式锁管理器。

它采用如下分布式锁管理机制:

  • 任何一个节点的锁请求都会广播给集群内所有在线节点;

  • 如果n/2 + 1个节点回应“是”,则成功获得锁;

  • 客户端获得锁以后可保留任意时间,不需要时自己释放即可。释放操作也会广播给所有的节点,从而恢复锁的可用状态。写锁仅能被一个写入者获得。

设计目标

  • 要求设计简单,因为简单的设计,可以避免程序中很多非常棘手的条件分支的支持。

  • 不存在主节点,因为一旦在设计上引入主节点,那么如果主节点宕机,整个锁管理器机制即将失效,这对MinIO对象存储系统影响非常严重,是不可接受的。

  • 系统必须是弹性的,即使存在多个失效的节点,只要它们的个数小于n/2, 整个锁管理系统是可以正常工作的。

  • 完全可以替代Golang标准库中的sync.RWMutex互斥锁。这样可以简化MinIO对象存储系统的编程。

  • 当失效节点重启以后,其它节点重新连接。

不使用zookeeper/raft等技术的原因

zookeeper/raft功能丰富,而MinIO对象储存的使用用例其实很有限。在MinIO中使用zookeeper/raft,会使整个系统增加不必要的复杂性。

优势

  • 实际操作极其简单,有效代码不足一千行,易理解,易维护。

  • 超高的性能。

云网关模式

  • MinIO存储系统的后端可以是磁盘,也可以作为云网关,对接第三方的NAS系统、分布式文件系统或公有云存储资源,并为业务系统转换提供标准的对象访问接口。

  • 目前MinIO支持Google 云存储、HDFS、阿里巴巴OSS、亚马逊S3, 微软Azure Blob 存储等第三方存储资源。

与Kubernetes的整合部署

【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构相关推荐

  1. 【Java进阶营】Java技术专题「难点-核心-遗漏」Java线程状态流转及生命周期的技术指南(知识点串烧)

    前提介绍 本章主要介绍相关线程声明周期的转换机制以及声明周期的流转关系以及相关AQS的实现和相关的基本原理,配合这相关官方文档的中英文互译的介绍. 线程状态流转及生命周期 当线程被创建并启动以后,它既 ...

  2. 「性能优化系列」APP内存优化理论与实践

    当一个应用同时运行越来越多的任务以及复杂的业务,Android系统的内存管理机制已经无法满足内存的释放与回收,为了应用的稳定性与性能,去控制内存的创建和回收就成为了一个重要的命题. 本篇文章主要涉及内 ...

  3. 「春招系列」30张图理解HTTP在面试中所有会出现的题

    前言 又是一年金三银四,春招与跳槽热闹的开展着,而在面试过程中,HTTP 被提问的概率还是非常高的. 我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是 ...

  4. 「真香系列」新物种首发亮相 聚划算爆款孵化玩法升级

    从普通商品到优质好物,差的便是那一句"真香". 2022聚划算99划算节,聚划算首发「真香系列」,为消费者精选了一批价格香.品质香.服务香的「十三香」好物.不过,聚划算的" ...

  5. 分布式事务解决方案「手写代码」

    分布式事务解决方案「手写代码」 参考文章: (1)分布式事务解决方案「手写代码」 (2)https://www.cnblogs.com/springboot-wuqian/p/12012894.htm ...

  6. 做技术的「五比一」原则

    转载自: http://codebay.cn/post/4839.html?ref=myread 分享: 0 作者:张铁蕾 前些日子看到了一篇文章,很有意思.不光内容有意思,而且很巧,是我个人很喜欢的 ...

  7. 「想法题系列」逗比三角形-二分

    传送门:「想法题系列」逗比三角形-hzwer 题解 因为限制了盒子的宽,所以贪心让每个三角形尽量高(即让最短边紧贴盒子底面所在直线). 考虑把每个三角形竖着剖分成宽为 d d d的矩形. 将所有矩形降 ...

  8. 「地表最强」C++核心编程(五)类和对象--对象初始化和清理

    环境: 编译器:CLion2021.3:操作系统:macOS Ventura 13.0.1 文章目录 一.构造函数和析构函数 1.1 构造函数 1.2 析构函数 1.3 示例 二.构造函数的分类及调用 ...

  9. 「地表最强」C++核心编程(七)类和对象--友元

    环境: 编译器:CLion2021.3:操作系统:macOS Ventura 13.0.1 文章目录 一.全局函数做友元 二.类做友元 三.成员函数做友元 地表最强C++系列传送门: 「地表最强」C+ ...

最新文章

  1. 《高性能JavaScript》第六章 快速响应的用户界面
  2. 【RK3399Pro学习笔记】十七、Debian安装ORB-SLAM3和单目demo的运行
  3. HDFS学习 Java连接hadoop
  4. python中协程的理解_python协程的理解
  5. 这家简历大数据公司被“一锅端” 或因私自抓取用户简历:曾获李开复投资
  6. 虚拟机linux扩展磁盘容量,kvm虚拟机扩展磁盘容量
  7. Hopfield 神经网络及稳态性的证明
  8. 前往庄园失败 当前服务器不稳定,摩尔庄园手游登录不了是怎么回事 摩尔庄园手游登录失败怎么办...
  9. 学的计算机专业不会编程,学计算机专业的不会编程啊怎么办?
  10. 谷歌跟oracle_Google vs Oracle –判决临近,Oracle的知识产权案件步履蹒跚
  11. 文本分析主要包含哪些技术,文本分析技术的发展方向是什么?
  12. AR/VR/MR三者之间的区别和联系
  13. 小白的proxmox ve(pve)打造AIO(all in boom)折腾日记 (二)装机篇(爱国者m2装机不完全教程)
  14. 华硕java安装教程win10_华硕台式机如何重装win10系统,win10系统一键安装教程
  15. HTTP缓存的深入介绍:Cache-Control和Vary
  16. 电子计算机的基本结构基于存储程序,计算机有答案
  17. 一个天气App案例(一)
  18. 基于FPGA的边沿检测
  19. 广东省第三届强网杯Writeup
  20. 七年之痒,很多人迈不过去的槛

热门文章

  1. 山东标梵网站制作项目启动流程详解
  2. Body-parser
  3. xftp(windows系统与linux系统之间文件传输)
  4. epub电子书如何用Windows电脑打开?
  5. html table内边框线条,HTML_TABLE内外边框
  6. ps作图缩小有锯齿的解决方法
  7. java 自动识别邮箱服务器类型_Java实现通过smtp服务器验证邮箱的真实有效性
  8. 层次分析法原理分析及Python实现层析分析法
  9. 爱普生Epson PictureMate 240 打印机驱动
  10. 计算机网络技术有关的心得体会,计算机网络技术学习心得体会