【博学谷学习记录】超强总结,用心分享 | 架构师 MinIO学习总结

news2024/9/21 18:32:37

文章目录

  • MinIO
  • 对象存储的概念
    • 计算机数据存储系统-架构模式
    • 对象存储的优势
    • 常见的对象存储系统/服务(Object Storage Service,OSS)
  • MinIO
    • 简介
    • 特点
    • 高级特性
    • 小结
  • MinIO部署
    • 基于 linux Binary 部署 MinIO Server
    • MinIO数据组织结构
    • MinIO Client
    • **基于 Docker 部署 MinIO Server**
    • 基于 Kubernetes 部署 MinIO Server
  • MinIO JAVA客户端使用
    • 业务系统中文件上传的基本流程
    • MinIO JAVA客户端使用要点
  • Minio的高级概念
    • 高级概念
    • 纠删码(erasure code /EC):纠删码是一种用以恢复 丢失和损坏数据的数学算法,也是一种编码技术
      • **基于单节点纠删码模式部署**
    • 位衰减
    • 高可用

MinIO

对象存储的概念

计算机数据存储系统-架构模式

  1. 文件存储:文件存储将数据存储和整理到文件夹中,类似于保存在办公室纸质文件系统中的物理文件,如果需要某个文件中的信息,则需要知道哪个房间、文件柜、抽屉、文件夹和文件名称。文件存储使用这种分层目录结构将数据及元数据以文件的形式进行存储。
  2. 块存储:块存储在文件存储的基础上提升了性能,它将文件拆分为多个单独的块并单独存储。块存储系统会为每个原始数据块分配一个唯一标识符,当您需要访问完整的文件时,系统将使用唯一标识符将数据块重组为完整的文件。块存储不需要单一的数据路径,因此您可以将其存储在最方便的位置,并且在需要时仍然能够快速检索。
  3. 对象存储:它将数据划分为对象并存储在结构扁平的数据环境中【存储池】,对象包含全部数据、唯一标识符和详细元数据,对象存储最适合非结构化数据的静态存储【一次写入多次读取】;对象存储不需要目录、文件夹和其他复杂的分层结构,但却不适合用来存储不断变化的动态数据,因为修改动作需要重写整个对象。

对象存储的优势

  1. 可伸缩性强:可以轻松横向扩容对象存储的容量【只需添加存储设备即可】
  2. 复杂性低:对象存储没有文件夹或目录,也就不具有层次结构系统的大多数复杂性
  3. 易于搜索:元数据是对象的一部分,使您无需借助单独的应用即可轻松搜索和导航
  4. 具有弹性:对象存储可以自动复制数据并存储在多个设备和多个地理位置。这有助于防范服务中断和数据丢失,并可为灾难恢复策略提供支持
  5. 成本效益高:对象存储在设计时考虑了成本因素,与基于文件和块的系统相比,能够以更低的价格存储大量数据

常见的对象存储系统/服务(Object Storage Service,OSS)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-paYkPZMA-1682252559144)(minIO记录.assets/image-20230420212035489.png)]

MinIO

简介

  1. Minio是一个轻量级的、开源的、高性能的对象存储服务,非常适合存储大容量非结构化的数据,比如:图片,视频,日志文件,备份数据,容器/虚拟机镜像等,单个对象大小支持从几KB到5T不等。
  2. 兼容亚马逊 S3 API【全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准】
  3. 基于Golang语言开发,主要作者Anand Babu Periasamy是GlusterFS 的初始开发者,minio在设计上汲取了GlusterFS 的相关经验与教训,系统复杂度上作了大量简化,足够轻量。

github项目

官方站点

中文站点

特点

  1. 简单:简单性是构建百万兆次级数据基础设施的基础,无论是在技术上还是在操作上。MinIO使用和部署非常简单,可以让您在最快的时间内实现下载到生产环境进行部署
  2. 高性能:MinIO 自称是世界上最快的对象存储,没有之一。在 32 个 NVMe 驱动器节点和 100Gb网络上发布的GET/PUT 结果超过 325 GiB/秒和 165 GiB/秒
  3. Kubernetes原生支持:通过原生 Kubernetes 运营商集成,MinIO 支持公共云、私有云和边缘云上所有主要的Kubernetes 发行版 minio可以让你快速构建自己的云存储服务

高级特性

  1. 远程备份/灾难恢复:提供了主动/被动跨区域的数据复制,可用于灾难恢复
  2. 加密:MinIO 对存储在磁盘上和通过网络传输的数据进行加密。 加密方案支持现代行业标准加密算法(例如AES-256-GCM、ChaCha20-Poly1305 和 AES-CBC),加密粒度为对象级加密,并兼容S3 加密语义
  3. 自动化数据管理接口:提供了命令行界面(CLI)和应用程序编程界面(API),以及直观的控制台图形用户界面(GUI)
  4. 对象不变:MinIO能保护数据不被删除(意外或故意),MinIO 支持对对象锁定、保留、治理和合规性, 对象锁定可以与 MinIO 版本控制结合使用,以确保数据不变性并消除数据篡改或破坏的风险
  5. 完善的身份和访问机制:有完善的对象存储身份管理和外部身份控制,以及对象存储访问管理机制
  6. 可扩展性:具备可伸缩性,支持横向扩展

小结

  1. 开源、轻量、高性能的对象存储服务,适合存储大量的非结构化数据
  2. 兼容S3 API,原生支持Kubernetes,
  3. 提供了灾备、数据加密、数据备份、安全控制、数据管理等特性
  4. 扩展性强,易于使用

MinIO部署

基于 linux Binary 部署 MinIO Server

参考文档:
https://github.com/minio/minio#gnulinux
http://www.minio.org.cn/docs/minio/linux/index.html
http://www.minio.org.cn/docs/minio/linux/reference/minio-server/minio-server.html

MinIO数据组织结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4F5ov29-1682252559145)(minIO记录.assets/image-20230420213200990.png)]

租户:用以隔离存储资源【一个minio实例代表了一个租户】
Bucket (桶):若干个对象的逻辑抽象,是盛装对象的容器
用户:在租户下面创建的用于访问不同桶的账号

MinIO Client

mc:minio 命令行工具,提供了UNIX命令(如ls、cat、cp、mv和diff)的现代替代方案,同时支持本地MinIO服务和Amazon s3兼容的云存储服务

参考:http://www.minio.org.cn/docs/minio/linux/reference/minio-mc.html#command-quick-reference

mc部署参考文档:http://www.minio.org.cn/docs/minio/linux/reference/minio-mc.html#quickstart

基于 Docker 部署 MinIO Server

参考文档:
http://www.minio.org.cn/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html

基于 Kubernetes 部署 MinIO Server

参考文档:
http://www.minio.org.cn/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html

MinIO JAVA客户端使用

一般:可以以 “应用” 来划分 桶 (主用户、订单)
在每个应用下,可以进行folder的划分(比如:图片、CSS、JS)

1.参考官方站点(中文翻译站点同步有延迟):https://min.io/docs/minio/linux/developers/minio-drivers.html
2.使用如下maven坐标导入

<dependency>
	<groupId>io.minio</groupId>
	<artifactId>minio</artifactId>
	<version>8.5.2</version>
</dependency>

3.基于官方Quickstart Guide:https://min.io/docs/minio/linux/developers/java/minio-java.html#minio-java-quickstart
4.Java Client API Reference:https://min.io/docs/minio/linux/developers/java/API.html

业务系统中文件上传的基本流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xnoCv5Ts-1682252559145)(minIO记录.assets/image-20230420213507483.png)]

MinIO JAVA客户端使用要点

1.业务系统中是前端先跟本地系统对接,由后端服务对接MinIO
2.对应API的使用参考官方站点:

JAVA API官方文档

Minio的高级概念

高级概念

Drive

可理解为minio的数据存储磁盘,minio server /disk1/data /disk2/data

Set

一组Drive的集合,有如下特点:

​ 一个集群划分为一个或多个Set

​ 一个 SET 中的 Drive 尽可能分布在不同的节点上

​ 一个 Set 包含的 Drive 数量是固定的,默认由系统根据集群规模自动计算得出

​ 一个对象存储在一个Set上

纠删码(erasure code /EC):纠删码是一种用以恢复 丢失和损坏数据的数学算法,也是一种编码技术

  1. 简单来说就是:纠删码可通过将 n 份原始数据,增加 m 份校验数据,并能通过 n+m 份中的任意 n 份数据,还原为原始数据。即如果有任意小于等于 m 份的数据失效,仍然能通过剩下的数据还原出来
  2. Minio 采用 Reed-Solomon code(里德-所罗门类纠删码) 将对象拆分成 N/2 数据和 N/2 奇偶校验块。 这就意味着如果是 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,你可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复

Erasure Sets:一组Drive,MinIO 将纠删码对象写入其中。MinIO 在erasure set 上随机且均匀地分布给定对象的数据和奇偶校验块
1.MinIO 根据Server Pool中节点和驱动器的总数自动计算Erasure Sets的数量和大小,minio支持最小为2,最大为16,一经确定无法修改

基于单节点纠删码模式部署

参考文档:
https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-multi-drive.html

位衰减

​ 位衰减(bit rot):又被称为数据腐化 Data Rot、无声数据损坏 Silent Data Corruption ,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接故障还危险。 所以 Minio 纠删码采用了HighwayHash 基于哈希的校验和来防范位衰减

高可用

​ 单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio , 只要有 N/2 节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文精读】Emergent Abilities of Large Language Models

1. Emergence 涌现&#xff08;emergence&#xff09;或称创发、突现、呈展、演生&#xff0c;是一种现象&#xff0c;为许多小实体相互作用后产生了大实体&#xff0c;而这个大实体展现了组成它的小实体所不具有的特性。 水分子聚集后组成了雪花是一个物理上的创发现象 扩大&…

C++ 类和对象(上)

类 面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在数据结构初阶中&#xff0c;用C语言方式实现的栈&#xff0c;…

springboot入门和yaml数据格式和读取yaml型数据和多环境配置和命令行启动参数设置

springboot入门 搞掉了手动的spring&#xff0c;mybatis&#xff0c;springmvc配置类&#xff0c;只需要创建一个控制类即可 控制类&#xff1a; package com.itjh.controller;import org.springframework.web.bind.annotation.*;RestController RequestMapping("/book…

KDYZ-YM压敏电阻测试仪

一、概述 晶闸管的伏安特性是晶闸管的基本特性&#xff0c;这项特性的好坏&#xff0c;直接影响到器件在整机上的正常使用。因此&#xff0c;检测晶闸管的伏安特性在晶闸管器件的生产、经销及使用过程中都是十分重要的。 该测试仪的测试方法符合国标JB/T7624-94《整流二极管测试…

AI:人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略

AI&#xff1a;人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略 导读&#xff1a;由于ChatGPT、GPT-4近期火爆整个互联网&#xff0c;掀起了人工智能相关的二次开发应用的热潮&#xff0c…

MySQL 的 Replace into 与 Insert into on duplicate key update 真正的不同之处

相同点&#xff1a; &#xff08;1&#xff09;没有key的时候&#xff0c;replace与insert .. on deplicate udpate相同。 &#xff08;2&#xff09;有key的时候&#xff0c;都保留主键值&#xff0c;并且auto_increment自动1。 不同点 有key的时候&#xff0c;replace是dele…

Python数据结构与算法-RAS算法(p96)

一、RSA加密算法简介 1、加密算法概念 传统密码: 加密算法是秘密的 现代密码系统:加密算法是公开的&#xff0c;密钥是秘密的&#xff1b;&#xff08;密钥可能是随机生成的&#xff0c;与他人不一致&#xff09; 对称加密—加密和解密用的同一个密钥 非对称加密—加密和解密用…

Kali下部署-Nessus漏扫工具

Nessus 是全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件。 特点&#xff1a; 1、提供完整的电脑漏洞扫描服务&#xff0c;并随时更新漏洞库。 2、可以在本机或者是远端上进行遥控&#xff0c;进行系统的漏洞扫…

深入理解AMQP协议

一.AMQP 是什么 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c; 高级消息队列协议&#xff09;是一个提供统一消息服务的 应用层标准高级 消息队列协议&#xff0c;是 应用层协议的一个 开放标准,为面向消息的中间件设计&#xff0c;是一个进程间传递 异步消息…

线性模型的介绍

一、背景 在一个理想的连续世界中&#xff0c;任何非线性的东西都可以被线性的东西来拟合&#xff0c;所以理论上线性模型可以模拟物理世界中的绝大多数现象。 线性模型&#xff08;Linear Model&#xff09;是机器学习中应用最广泛的模型&#xff0c;指通过样本特征的线性组…

生产力提速增效的4大敲门砖

引言&#xff1a; 本文章将分四大板块介绍提高程序员生产力的方案&#xff0c;最大化利用你的IDE &#xff0c;其中Live Template篇&#xff0c;插件篇非常值的一看&#xff0c; 用好才能提速增效 Productity Guide篇 Postfix Completion篇 Live Template篇 插件篇 Product…

NGFW的protal认证实验

实验topo 用到工具&#xff1a;ensp&#xff0c;kali&#xff0c;cloud云的网段是192.168.43.0&#xff1b;连接cloud的g0/0/0地址就是你登录web&#xff0c;protal的地址 实验说明&#xff1a;建议不在真机上面配置直接用&#xff0c;因为真机不稳定。这里用kali当真机&#x…

【网络应用开发】实验5—— JDBC数据库访问与DAO设计模式

目录 JDBC数据库访问与DAO设计模式预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. JDBC常用的类对象与接口有哪些&#xff1f;它们的功能如何&#xff1f; 2.使用数据源访问数据库的基本思想是什么&#xff1f;这样做有什么好处&#xff1f; 3.什么是DAO&am…

vscode使用虚拟环境

我的conda没有添加入path&#xff0c;每次打开总是报错 一、选择对应虚拟环境的解释器 1.点击vscode的右下角这里 2.点击后可能会在vscode上方出现下图样子&#xff0c;如果出现下图&#xff0c;则点击第二项Select at workspace level&#xff0c; 3.接着出现下图样式&#…

2022年营收破百亿,零跑汽车展现超强实力

此前&#xff0c;零跑已正式公布了2022年的财务数据。可以看到&#xff0c;零跑去年的营收破百亿&#xff0c;增速将近300%&#xff0c;这一成绩在汽车界是相当优越的。说到为何零跑能够实现如此快速的成长&#xff0c;那就不得不提其全域自研的核心优势。 如今&#xff0c;无论…

有始有终的编码原则

基本情况 在程序员的修炼之道之中&#xff0c;说到&#xff1a; 这个建议能简单地应用到大多数场合。简单说就是&#xff0c;分配资源的函 数或对象&#xff0c;对释放资源应负有责任。 这其实就是我们常说的谁分配的就谁负责释放&#xff0c;这也是内存释放的一个原则&#x…

微搭低代码实现投票功能

经常有一类需求&#xff0c;就是投票的功能&#xff0c;需要限制每一个选项每个人只可以投一票&#xff0c;投完之后需要统计票数。本篇教程我们讲解一下如何利用微搭低代码工具来实现投票功能。 1 设计数据源 我们需要设计一个数据源来记录用户的投票&#xff0c;如何限制用…

Docker网络模式详解

文章目录 一、docker网络概述1、docker网络实现的原理1.1 随机映射端口( 从32768开始)1.2 指定映射端口1.3 浏览器访问测试 二、 docker的网络模式1、默认网络2、使用docker run 创建Docker容器时&#xff0c;可以用--net或--network 选项指定容器的网络模式 三、docker网络模式…

代码审计实战3-android java

jks java keystore 作用&#xff1a;保证应用的唯一性 简介&#xff1a;可以理解为java的密钥库&#xff0c;是一个用来存放密钥和证书的仓库。 &#xff08;而keytool就是密钥和证书的管理工具&#xff0c;它把key&#xff08;密钥&#xff09;和certificate&#xff08;证…

一零五六、Jsp+mysql 实现学生选课系统(附源码及数据库)

目录 实现效果 项目代码 数据库 结语 实现效果 login.jsp index.jsp course_query.jsp course_selection.jsp course_withdraw.jsp selection_query.jsp 项目代码 checkSelectionStatus.jsp % page contentType"text/html;charsetUTF-8" language"java&q…