在之前的《一文读懂分布式存储》文章中,我们介绍了什么是分布式存储。
但谈到存储,安全就是一个绕不开的话题。
没有数据安全的存储毫无意义。
所以数据保护技术对于分布式存储来说非常重要。
▉ 为什么需要数据保护?
数据显示,硬盘在存储实际使用过程中年故障率一般在2%上下,这意味着100块硬盘中,平均每年会有2块盘出现故障,硬盘的故障率是非常高的。
而且根据浴缸曲线,硬盘在刚上线时和36个月后故障风险更大,远高于理论故障率。
并且,分布式存储与传统的集中存储不同,分布式存储是通过增加存储节点来提升存储性能和容量的。越多的存储节点意味着风险越高,所以更需要数据保护策略来保护数据的安全。
目前,分布式存储的数据保护方式多采用多副本和纠删码技术。
▉什么是多副本和纠删码?
数据保护大家一定不陌生,例如我们之前经常会提到的RADI技术,就是传统集中存储硬盘数据保护经常用到的数据保护技术。
分布式存储不同于传统的集中存储,它采用无中心的组网方式,每个存储节点都可以同时提供计算和存储资源,实现更灵活的扩展性和更大的存储规模。传统的RAID在分布式存储数据保护过程中也遇到了瓶颈,所以就出现了多副本和纠删码等新的数据保护技术方式。
那么今天我们聊聊什么是多副本和纠删码技术?
多副本,顾名思义就是多个数据副本,简单来说就是一个数据拷贝多份完全一样的副本,分别存放在多个不同节点上。当某个副本丢失时,可以通过另一个副本复制恢复数据。
以三副本为例,如上图,我们要保存A这个数据,并不是只保存单独这个数据,而是需要先将A这个数据拷贝成3份,然后分别放到1、3、4上,这个存储是随机的,下一个B数据有可能就放在节点1、2、4上了。
接下来我们来看下纠删码,纠删码的英文全称是Erasure Code,有时我们也会简称为EC。纠删码顾名思义是一种纠正数据丢失的校验码,简单理解可以把它类比成一个我们上学时候学的方程组。
例如,如果知道4个数a、b、c、d,就可以通过2个不同的公式算出2个校验数据x和y,把6个数据一起保存起来,那么当a、b、c、d其中1个或2个数据丢失的话,就可以通过剩余的2个值和计算公式,反推出丢失的2个数据。
▉ 对存储节点有啥要求?
多副本和纠删码对分布式存储的节点数量和硬盘配置都有一定要求。例如多副本,N个副本至少需要N个节点才能部署,比如3副本至少需要3个存储节点。
而纠删码则是M+N纠删码至少需要(M+N)个节点,比如4+2纠删码至少需要6个节点。
当然这些只是最低要求,上限并没有限制,另外也不会有倍数比例的要求,比如3副本并不要求一定是6个、9个节点,5个、7个节点也可以。
另外,每个节点的硬盘数量和单盘容量建议相同,因为如果不同的话,就会出现水桶的短板效应,两个节点,一个节点配置8TB硬盘,一个节点配置4TB硬盘,8TB硬盘只能当4TB硬盘用,因为每个节点的数据保存容量是随机分布、几乎相同的。
▉ 多副本和纠删码哪个好?
那么我们在做分布式存储的时候是应该选择多副本的方式还是纠删码的方式呢?这个主要看你的业务需求,多副本和纠删码在不同的应用场景下有各自的优势。我们来分不同方面看下:
1.得盘率
得盘率直接关系到企业的支出成本。比如双份本的得盘率只有50%,冗余多虽然很高,但是这带来了巨大的额外存储空间消耗,无形中提升了企业的成本。三副本的得盘率是66.6%,这也是很多人选择三副本的原因,相对安全,读写也能保证。
纠删码技术不需要完整写入真实数据的副本,通过纠删码算法将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。磁盘利用率为m/(m+n),以纠删码(4+2)为例,得盘率也是66.6%,
整体来说,纠删码技术与副本方法相比具有磁盘利用率更高。
2.容错性
多副本方面,N副本技术可以允许N-1个节点同时故障数据不丢失。如果是硬盘故障,只要故障硬盘的范围不超过N-1个节点,数据也不会丢失。例如,2副本允许1个数据节点出现故障,三副本可以允许2个数据节点出现故障。
和多副本一样,纠删码对损失的数据分块内容有要求。比如m+n块的元素,当其中任意的n块元素出错(包括原始数据和冗余数据)时,均可以通过对应的重构算法恢复出原来的m块数据。如果大于n后,就恢复不了数据。如(4+2)纠删码只能丢失2个数据分片才能恢复。
3.重构性能
双副本下,一个节点或者数据块故障,数据恢复直接从另一个副本读取、写入,一次进行恢复副本,影响一个节点的读取性能。三副本的情况下,最多影响两个节点的读取性能。
纠删码设置 (4+2)情况下,一个节点或者数据块故障,数据恢复需要读取三个数据块和两个校验,通过运算后写入一次进行数据恢复,影响5个节点的读取性能。恢复效率较低。
4.写惩罚
双副本下,某个节点的一次数据写入,实际需要两个节点参与(写入两次),写惩罚为 2。三副本情况下,最多需要三个节点参与,写惩罚为3。
纠删码设置 (4+1)情况下,一次数据写入,实际需要至少三个节点参与,其中读取两次(读取数据,读取校验),写入两次(写入数据,写入校验),写惩罚为4。如果是纠删码设置 (4+2)情况下,写惩罚最小为6。
5.CPU开销
无论是双副本还是三副本,都是是基于数据完整复制,几乎没有计算的开销,对 CPU 开销较低。
纠删码由于读写都需要计算校验值,有较高的计算开销,需要额外的 CPU 资源开销。
好了,说了这么多,我将上面的信息总结成一张表格:
▉ 到底怎么用?
选择两种数据保护方式,就需要根据业务情况因地制宜。
多副本技术可以更好的保证数据的安全性,提升读写效率。一般适用于关键业务,对性能要求比较高,网络对数据出错容忍度极低的业务,如数据库等。
纠删码则可以提高存储系统利用率,降低成本。一般适用于其他非关键性业务,如视频、影像存储等海量存储场景,部分数据块的损坏不会影响信息的传递。
END