MinIO 概述
MinIO 概述
MinIO 是一个高性能的分布式对象存储系统,基于 Apache License v2.0 开源协议,兼容亚马逊 S3 云存储服务接口,非常适合存储大容量的数据,包括但不限于:
- 文本数据:新闻报道、社交媒体文章、博客......
- 语音数据:音频形式存储的数据,语音mp3文件......
- 图像数据:各种图片......
- 视频数据:各种视频、电影......
- 非结构化数据:没有明确结构的数据,比如社交评论、日志文件......
什么是对象存储?
对象存储(Object Storage)是一种数据存储架构,它以对象为单位来处理、存储和检索数据,每个对象都包含了数据本身以及元数据,适合存放任意类型的文件。通常通过基于 HTTP 或 HTTPS 协议的 API(应用程序编程接口)进行数据读写。常见的有阿里云对象存储服务(OSS)、腾讯云对象存储(COS)等。
所以基于对象的形式, MinIO 存储的元数据主要包括对象的描述信息,如用户(account)、存储桶(bucket)以及存储桶索引(bucket index)等。
对于企业来说,可以使用各种公有云提供的 OSS 服务,将业务数据存储在云上,既能节省存储成本,也能使用云存储服务提供的 API 接口,方便使用和管理数据。但对于数据传输的安全性和及时性有较高要求的业务来说,使用公有云的 OSS 服务,就要付出较高的公网带宽传输成本,以及对数据安全的保障服务。在这种情况下,利用 MinIO 轻便、高性能、可拓展性的特点,企业可以快速搭建自己的内部对象存储服务。
当然,对于个人来说,MinIO 是 100% 开源的,这就意味着个人也可以基于 MinIO 搭建自己专属的对象存储服务器。
特点
- 文档全面:
MinIO 作为一款基于 Golang 语言开发的一款高性能的分布式式存储方案的开源项目,有十分完善的官方文档。
MinIO 文档
高性能:
MinIO 号称是目前速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以高达 183GB/s 和 171GB/s。对象存储可以作为主存储层,用来处理 Spark、Presto、TensorFlow、HAO.ai 等各种复杂工作负载以及成为 Hadoop HDFS 的替代品。云原生:
容器化、基于 K8S 的编排、多租户支持。
用作云原生应用程序的主要存储,和传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。可拓展:
不同 MinIO 集群可以组成联邦,并形成一个全局的命名空间,并且支持跨越多个数据中心。
并且除了 MinIO 自己的文件系统,还支持 DAS、 JBODs、NAS、Google 云存储和 Azure Blob 存储。Amazon S3 标准兼容:
亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。MinIO 在很早的时候就采用了 S3 兼容协议,并且 MinIO 是第一个支持 S3 Select 的产品。
使用 Amazon S3 v2 / v4 API,可以使用 MinIO SDK,MinIO Client,AWS SDK 和 AWS CLI 访问 MinIO 服务器。支持全面:
目前 MinIO 支持市面主流的开发语言并且可以通过 SDK 快速集成快速集成使用。
常用语言的 SDK
GO SDK:https://github.com/minio/minio-go
Java SDK:https://github.com/minio/minio-java
Python SDK:https://github.com/minio/minio-py
可视化管理界面:
MinIO 除了通过传统的命令行进行操作之外,还提供可视化的操作管理界面,在服务安装后,可以直接通过浏览器登录系统,完成文件夹、文件的管理,非常方便使用。数据存储高容错:
Minio 的存储机制使用纠删码(Erasure Code)和校验和(CheckSum)。
校验和:保护数据免受硬件故障和无声数据损坏。
纠删码:是一种恢复丢失和损坏数据的数学算法。通过数学算法将数据分割成多个数据块和校验块,并将这些块分散存储在不同的磁盘上。这种机制使得即使部分磁盘发生故障,也能通过剩余的数据块和校验块恢复原始数据,从而提高系统的可靠性和容错能力。
具体地,MinIO 使用 Reed-Solomon 码作为其纠删码算法,将一个对象拆分成 N/2 份数据和 N/2 份奇偶校验块。如果是 12 块盘,一个对象会被分成 6 个数据块、 6 个奇偶校验块,可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复。
这样的设计,保证了即使在最坏的情况,即丢失一半数量的硬盘的情况下仍能保证数据的安全性。