得盘率到底是什么?该怎么计算才公平合理?
随着,现在很多企业用户开始关注存储系统的存储效率。但提及存储效率,业界并没有一个统一的衡量指标。
有些厂商强调数据缩减率,有些厂商强调存储单位密度,而有些厂商强调数据保护后的容量利用率。
一般来说,存储效率和系统性能是反比的关系。也就是说,如果光强调存储效率,性能很差,只能在备份归档或者视频监控对性能要求不高的场景使用,因此单纯的比较各家的存储效率并没有太大意义。
01 得盘率的定义
那怎么才能够更有意义的比较存储效率呢?02 数据保护编码效率
分布式存储系统常用两种主要的数据保护和冗余技术:纠删码(Erasure Coding,EC)和副本(Replication)。
纠删码 (EC):纠删码是一种数据保护技术,通过将数据分成数据块和校验块来实现冗余。具体来说,数据被分成 k 个数据块,再生成 m 个校验块(通常称为 k+m 编码)。即使部分数据块丢失,系统仍然可以通过剩余的块重建丢失的数据。EC 的优势在于它可以提供高效的存储利用率,相对于副本技术在相同的冗余度下需要更少的额外存储空间。
副本 (Replication):副本技术是最简单和常见的数据冗余方法,通过将每份数据复制多份(通常是三份)存储在不同的节点上。即使某个节点的数据丢失,其他节点上的副本可以保证数据的可用性。副本的优势在于实现简单、恢复速度快,但其缺点是存储效率低,因为每份数据需要额外的两倍存储空间。
比较:
存储效率:纠删码比副本更高效,因为在相同的容错能力下,纠删码需要的额外存储空间更少。例如,3 副本需要 3 倍的存储空间,而纠删码(k=4, m=2) 只需要 1.5 倍的存储空间来提供相同的容错性;
恢复速度:副本技术在数据恢复时速度更快,因为只需从副本中读取数据。而纠删码需要通过剩余数据块和校验块进行计算重建,相对而言会慢;
实现复杂度:纠删码的实现和管理较为复杂,需要计算和处理校验块,而副本技术则相对简单。
一般来说,纠删码适用于需要高存储效率且可以接受较复杂管理的场景,而副本技术适合对性能和实现简易性要求较高的场景。但是,现代存储技术的发展,某些先进的分布式存储架构,已经可以实现 EC 和副本是一样的性能,特别是全闪的情况下更是如此。
如何判断?很简单,测试一下就可以看出,但如果你没有条件测试,就可以参考厂商宣传。如果厂商缺省主推 EC,鼓励你尽量用 EC,甚至在要求极致性能的情况下也是如此,应该说明其产品基本做到了 EC 和副本相当的性能。
数据保护的编码方案,可靠性和容量空间使用率是主要衡量指标。比如 2 副本,其使用率和可靠性都无法和 EC(4+2)相比。因此,性能无损 EC 的使用,不仅仅提供容量使用率,也可能提供系统的可靠性。
03 数据缩减效率
在分布式存储系统中,数据缩减技术如数据重删(Deduplication)和数据压缩(Compression)被广泛应用,以提高存储效率和节省存储空间。下面是这些技术的原理和作用。
数据重删(Deduplication)
原理:数据重删是一种通过消除重复数据来减少存储空间占用的技术。其工作方式是识别和删除存储系统中重复的数据块,只保留一个副本,并在需要时引用这个副本。
过程:
- 分块:将数据分成若干小块(如 4KB 或 8KB);
- 哈希计算:对每个数据块计算哈希值(如 SHA-256),生成唯一的标识符;
- 查重:在哈希表中查找该哈希值。如果哈希值已存在,则表示该数据块是重复的,只需记录一个引用;否则,将该数据块存储并记录其哈希值;
引用管理:管理引用计数,确保在删除不再需要的引用时不会影响其他数据。
优势:
- 大幅减少存储空间需求,尤其在数据重复率高的场景(如虚拟机镜像、备份数据等);
提高存储系统的效率和性能。
分布式重删是业界的难点,因为时延很难做到很低。只有少量的高性能分布式块存储推荐用户使用重删,而且一般不是缺省打开状态;也很少厂商宣传打开重删,性能无损。部分厂商宣传重删,也只能在全闪的情况下才能使用,而且可能还是后重删的技术,不是在线重删。
数据压缩(Compression)
原理:数据压缩通过编码方式减少数据表示所需的比特数,从而缩小数据体积。压缩技术通常分为无损压缩和有损压缩两种。
无损压缩:这种方法在压缩和解压缩过程中不会丢失任何信息,适用于需要数据完整性的应用场景(如文本文件、数据库记录等)。常见算法包括:
- Huffman 编码:通过使用频率较高的符号以较短的编码表示,频率较低的符号以较长的编码表示,来减少总体数据量;
Lempel-Ziv (LZ) 算法:通过检测数据流中的重复模式,用指向先前出现模式的引用代替重复部分。
有损压缩:这种方法在压缩过程中会丢失部分信息,适用于对数据精度要求不高但需要大幅压缩的应用场景(如图像、音频、视频等)。常见算法包括 JPEG(图像)和 MP3(音频)。
优势:
- 减少存储空间需求,提高存储密度;
减少传输数据量,提升网络传输效率。
我们今天讨论的是支撑关键业务,因此我们只讨论数据无损和性能无损压缩。分布式存储的数据压缩比重删要成熟很多,加上 CPU 内置压缩加速的支持(如 Intel 的 QAT),使得国内外的先进分布式存储的数据无损和性能无损压缩都成为缺省的推荐特性。
不同的数据类型,其压缩率也是不同的。一般来说,数据库的压缩率可以做到 50%。由于我们讨论的是高性能分布式块存储场景,一般来说这种场景就是支持数据库应用,因此,基本上可以按照 2:1 的压缩比来估算。
04 国内外主流分布式存储 得盘率相关特性对比
下面是我们根据互联网公开资料,收集到的国内外几个主流的高性能分布式块存储厂商的得盘率特性相关数据,做一个简单的对比。
上面的对比表中,有一个新的术语,叫折叠 EC,有些厂商也叫精简 EC,它是一种特殊的纠删码 (Erasure Coding) 技术,通过优化编码矩阵和数据块布局,减少了传统 EC 方案所需的存储节点数量。
传统的 EC 方案通常需要 4 个或更多节点来实现数据冗余和容错,而折叠 EC/精简 EC 可以在 3 个节点上实现类似的保护级别。折叠 EC/精简 EC 的核心思想是将多个数据块和校验块组合成一个逻辑块,然后将这些逻辑块分布到不同的存储节点上。这种方式减少了数据块的冗余度,从而降低了存储开销。同时,通过巧妙的编码设计,仍然可以保证数据可靠性和容错性。
综合上面的对比,我们可以看出,XSKY 在高性能场景下,得盘率有着比较明显的优势。首先,高性能 EC 和压缩可以火力全开,不分应用场景,也不需要混闪,用户基本可以无脑使用。而且,还支持折叠 EC,3 节点就可以支持 EC(4+2),得盘率得以进一步提升。虽然不支持分布式重删,但从其他厂商看,分布式重删也并不是高性能关键业务的推荐。
为什么 XSKY 可以做到全场景 EC+压缩,主要是因为 XSKY 在存储架构设计的时候就原生考虑了这个需求,而不是后加的特性。
最后,我们可以看到,如果有了性能无损的分布式 EC+压缩支持,得盘率超过 100%是完全有可能的。
比如采用 EC(4+2),则其空间利用率是 4/6=2/3=66.6%,加上 2 倍的数据压缩率,那么得盘率就是 133%,轻松可以突破 100%。
也就是说,用户购买 100TB 的裸容量,性能基本无损的情况下,可以直接保存 133TB 的数据,直接降低了 SSD 盘的采购成本,就算 SSD 价格飙升,也可以继续选择全闪,实现性能容量兼得。