当前位置:网站首页>对象存储-分布式文件系统-MinIO-1:概念
对象存储-分布式文件系统-MinIO-1:概念
2022-08-04 05:26:00 【focus_lyh】
一、简介
Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
Minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
官网:https://min.io/ 中文:http://minio.org.cn/
二、应用场景
互联网海量非结构化数据的存储需求
- 电商网站:海量商品图片
- 视频网站:海量视频文件
- 网盘:海量文件
- 社交网站:海量图片
三、MinIO的基础概念
对于普通用户:
Object:存储到 Minio 的基本对象,如文件、字节流,Anything…
Bucket:用来存储 Object 的逻辑空间,每个 Bucket 之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹。
对于想要了解 Minio 原理的用户:
Drive:部署 Minio 时设置的磁盘,Minio 中所有的对象数据都会存储在 Drive 里。
Set:一组 Drive 的集合,Minio 会自动根据 Drive 数量,将若干 Drive 划分为多个 Set(For example: {1…64} is divided into 4 sets each of size 16.)
四、存储机制
存储机制
Minio使用纠删码erasure code和校验和checksum。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。
校验和
保护数据免受硬件故障和无声数据损坏
纠删码
纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。
Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复。
RS code编码数据恢复原理
RS编码以word为编码和解码单位,大的数据块拆分到字长为w(取值一般为8或者16位)的word,然后对word进行编解码。 数据块的编码原理与word编码原理相同,后文中以word为例说明,变量Di, Ci将代表一个word。
把输入数据视为向量D=(D1,D2,…, Dn), 编码后数据视为向量(D1, D2,…, Dn, C1, C2,…, Cm),RS编码可视为如下(图1)所示矩阵运算。
图1最左边是编码矩阵(或称为生成矩阵、分布矩阵,Distribution Matrix),编码矩阵需要满足任意n*n子矩阵可逆。为方便数据存储,编码矩阵上部是单位阵(n行n列),下部是m行n列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。
RS最多能容忍m个数据块被删除。 数据恢复的过程如下:
(1)假设D1、D4、C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。(图2、3)
(2)由于B’ 是可逆的,记B’的逆矩阵为 (B’^-1),则B’ * (B’^-1) = I 单位矩阵。两边左乘B’ 逆矩阵。 (图4、5)
(3)得到如下原始数据D的计算公式 。
(4)对D重新编码,可得到丢失的编码。
五、架构设计
MinIO设计为云原生,可以作为轻量级容器运行,由外部编排服务(如Kubernetes)管理。整个服务器约为40MB静态二进制文件,即使在高负载下也可以高效利用CPU和内存资源。
MinIO在带有本地驱动器(JBOD / JBOF)的商品服务器上运行。集群中的所有服务器的功能均相同(完全对称的体系结构)。没有名称节点或元数据服务器。
MinIO将数据和元数据作为对象一起写入,从而无需使用元数据数据库。此外,MinIO以内联,严格一致的操作执行所有功能(擦除代码,位rotrot检查,加密)。结果是MinIO异常灵活。
每个MinIO群集都是分布式MinIO服务器的集合,每个节点一个进程。 MinIO作为单个进程在用户空间中运行,并使用轻量级的协同例程来实现高并发性。将驱动器分组到擦除集(默认情况下,每组16个驱动器),然后使用确定性哈希算法将对象放置在这些擦除集上。
MinIO专为大规模,多数据中心云存储服务而设计。每个租户都运行自己的MinIO群集,该群集与其他租户完全隔离,从而使他们能够保护他们免受升级,更新和安全事件的任何干扰。每个租户通过联合跨地理区域的集群来独立扩展。
边栏推荐
猜你喜欢
随机推荐
【问题解决】同一机器上Flask部署TensorRT报错记录
C1认证之web基础知识及习题——我的学习笔记
自己学习爬虫写的基础小函数
如何低成本修bug?测试左移给你答案
webrtc中的视频编码(一) 视频编码模块轮廓
力扣:62.不同路径
Set集合与Map集合
webrtc中的引用计框架
webrtc中视频采集实现分析(一) 采集及图像处理接口封装
OpenRefine开源数据清洗软件的GREL语言
C语言 -- 操作符详解
使用express-jwt第三方包报错TypeError: expressJWT is not a function
LCP 17. 速算机器人
Grain Mall - Basics (Project Introduction & Project Construction)
7.18 Day23----标记语言
7.16 Day22---MYSQL (Dao mode encapsulates JDBC)
8. Custom mapping resultMap
个人练习三剑客基础之模仿CSDN首页
Unity DOTS学习教程汇总
7.15 Day21---MySQL----Index