极光笔记丨搭建UMS私有云文件服务器
因UMS5.1版本当中短信签名,邮件支持上传本地图片/支持上传附件的产品需求,以及后续可能存在的需要大量文件存储的场景,所以需做一个私有云自己的文件服务器,并且该服务器也要兼容客户文件服务器(注:客户文件服务器一般都是兼容S3协议的)
minIO 是一个基于 Apache License v2.0 开源协议使用 Go 语言开发的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以从几kb到最大5T不等。minIO 是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
minIO使用erasure code来防止硬件故障。即使损坏一半以上的硬盘,仍然可以从中恢复数据。
minIO为加密数据提供了机密性,完整性和真实性保证,而且性能开销微乎其微。使用 AES-256-GCM,ChaCha20-Poly1305 和 AES-CBC 支持服务器端和客户端加密。
minIO在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
minIO采用去中心化的无共享架构,对象数据被打散存放在不同节点的多块硬盘,对外提供统一命名空间访问,并通过Web负载均衡器或DNS轮询(DNS round-robin)在各服务器之间实现负载均衡。
硬盘(Drive):即存储数据的磁盘,在 minIO 启动时,以参数的方式传入。
组( Set ):即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。
桶(Bucket):文件对象存储的逻辑位置,对于客户端而言,就相当于一个存放文件的顶层文件夹。
minIO 使用纠删码(erasure code)和校验和(check sum)来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
什么是纠删码呢?它是一种恢复丢失和损坏数据的数学算法,minIO 采用Reed-Solomon Code实现纠删码,它将对象拆分成N/2 数据块和 N/2 奇偶校验块。这就意味着如果是 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,您可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),您仍可以从剩下的盘中的数据进行恢复。
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列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。
(1)假设D1、D4、C2丢失,从编码矩