

minio存储之纠删码(Erasure Code)
source link: https://blog.csdn.net/oqqYuan1234567890/article/details/107702117
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

纠删码的原理介绍可以参考:
https://www.jianshu.com/p/4abf65ad03af
一般上我们如果要保证数据高可用,主流的有两种策略:
副本(Replication)策略:
副本,实打实的复制,常见的是三副本,意味着现实世界有三份一样的数据。代价稍高,偏计算类的场景基本都会用该策略,比如虚拟机VM、数据库。如果一个副本挂了,马上切到另外一个,漂移时间非常短。n副本存储效率永远是 1 / n 1/n 1/n。
纠删码(Erasure Code)策略:
纠删码,会把数据进行切分,同时计算校验块。以常见的reedsolomon(RS)纠删码为例,在6数据块+3校验块的情景,可以允许3个块(任意数据块+校验块数量之和为3)损坏。在偏纯存储的场景会用到,例如对象存储。n数据块+m校验块的纠删码配置,存储效率是n/n+m, 但是在重构(Reconstruct)的时候,需要消耗cpu资源,而且有一定延时
golang reedsolomon
minio是一个对象存储服务,存储考虑的是低成本+高可用,其纠删码使用的是RS纠删码,对应的github仓库是
github.com/klauspost/reedsolomon
单核恢复能力超过1GB/s, 特定平台可以通过指令加速。
这个repo的文档比较完善,api的操作具体可以看文档。下面来做一个简单的验证
进入examples目录
$ go build simple-encoder.go && go build simple-decoder.go && rm *.go
$ ls
README.md simple-decoder simple-encoder
首先,以Readme.md为目标,执行encode操作,这一步是为了把文件分割成数据块+校验块
$ md5sum README.md
0076c987f6cc5e98919b0b9403b12b5f README.md
$ mkdir data && cd data
$ ../simple-encoder -out . ../README.md
Opening ../README.md
File split into 6 data+parity shards with 358 bytes/shard.
Writing to README.md.0
Writing to README.md.1
Writing to README.md.2
Writing to README.md.3
Writing to README.md.4
Writing to README.md.5
$ ls
README.md.0 README.md.1 README.md.2 README.md.3 README.md.4 README.md.5
simple-encoder 使用的是4数据块+2校验块的配置,一共会生成6个文件
这个时候我们删除2个数据块,看能否恢复
$ ../simple-decoder -out ./README.md.reconstruct README.md
Opening README.md.0
Error reading file open README.md.0: no such file or directory
Opening README.md.1
Error reading file open README.md.1: no such file or directory
Opening README.md.2
Opening README.md.3
Opening README.md.4
Opening README.md.5
Verification failed. Reconstructing data
Writing data to ./README.md.reconstruct
$ md5sum README.md.reconstruct
0076c987f6cc5e98919b0b9403b12b5f README.md.reconstrut
md5sum 的结果显示,重构后的文件与源文件一致。
Recommend
-
41
Hi! JT Olio here. We recently launched the white paper for our V3 network ! The document offers 90 pages of detail about what we’ve built...
-
53
MinIO存储桶通知指南 可以使用存储桶事件通知来监视存储桶中对象上发生的事件。 MinIO服务器支持的事件类型是 Supported Event Types s3:ObjectCreated:Put s3:ObjectCreated:CompleteMultipartUpload
-
13
什么是MinIO ?根据官方定义: MinIO 是在 Apache License v2.0 下发布的对象存储服务器。 它与 Amazon S3 云存储服务兼容。 它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM 映像。 对象的大小可以从几 KB 到最大 5TB...
-
15
minio简介Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。Minio兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。Minio服务端可以工作在Windows,Linux, OS X和FreeBSD上。...
-
6
基于柯西矩阵的Erasure Code技术详解 2018-04-16 02:28:00 http://blog.51cto.com/alanwu/1410132
-
8
纠删码(Erasure Codes)能够总体上分为XOR 码和RS 码两类,XOR 码基于有限域GF(2),编、解码只需要按位异或(bit-wise exclusive-OR)即可完成,速度较快;RS 码基于有限域GF(2w),编、解码需要有限域上(后面的文章将详细介绍)的运算,速度慢于XOR码。常见的...
-
8
Open edX跟S3有许多整合,包括日志的存储,成绩单的存储,静态文件的存储和加速等,当然需要开启才被采用.亚马逊的服务真是业界标杆式的存在,一旦用过,便曾经沧海。 可惜我们与S3无缘。 后来想做edxapp负载均衡的时候,又想到这个问题,edxapp是有状...
-
11
contos7使用s3fs挂载minio对象存储实践 精选 原创 主机可以访问到对象存储API、例如...
-
11
MinIO Erasure Coding with NetApp E-Series 03 Sep 2023 - 12 minute read The concept I touched upon this in previous blog post...
-
12
Minio简介 Minio 是一个开源的对象存储服务器。对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。它是对 Amazon S3 云...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK