在大数据时代,企业正在生成比以往更多的信息。但仅仅存储数据是不够的——它必须高效、可靠且经济地存储。这就是纠删码(EC)发挥作用的地方。纠删码被像Ceph这样的分布式存储系统使用,提供了一种更智能的方式来保护数据,同时优化存储利用。本文将详细解释纠删码是什么,它如何工作,以及何时应该使用它而不是传统的复制方法。
复制 vs. 纠删码:有什么区别?
默认情况下,许多存储系统,包括Ceph,使用复制来保护数据。复制很直接:每一份数据都会在多个磁盘上复制(通常是3份)。这种方法快速可靠,特别适用于小文件或高性能环境——但它消耗大量存储空间。
另一方面,纠删码采用了更高效的方法。它不是复制整个数据集,而是将它们分成更小的片段——数据块和校验块(用于恢复)的组合。这些块分布在不同的磁盘上。如果少数磁盘出现故障,可以使用校验信息重建丢失的数据。
下表比较了复制和纠删码在存储效率、恢复方法和理想使用场景方面的差异:

纠删码在Ceph中的工作原理
Ceph中的纠删码可以通过定义数据如何分割和保护的配置文件来配置。每个EC配置文件由两个参数定义:
• k – 数据块的数量
• m – 编码(校验)块的数量
系统创建总共k + m个块,这些块分布在存储集群中。Ceph可以容忍最多m个故障而不丢失数据。
下表列出了常用的纠删码配置文件,并比较了它们在容错能力和存储开销方面的差异:

示例:3+2配置文件将数据分成3个块并添加2个校验块。即使丢失2个块,5个块中的任意3个也可以恢复原始数据。
选择正确的EC配置文件
选择取决于你的环境和目标:
• 较低的k,较高的m(例如,3+2):更多冗余,适合较小的集群或将弹性作为首要考虑的情况。
• 较高的k,较低的m(例如,10+4):更好的存储效率,非常适合优先考虑成本节省的大规模部署。
纠删码提供了几个优势,使其成为现代存储系统的强大选择,包括:
• 高效存储:比复制的开销更低——相同的磁盘空间可以存储更多数据。
• 高容错性:可以处理多个磁盘故障而不丢失数据。
• 可扩展性:适用于大型集群和云规模部署。
• 自定义冗余:调整k+m比率以满足你的持久性和预算需求。
纠删码何时有意义
纠删码并不适合每种情况。但当战略性地应用时,它在许多情况下都表现出色。以下是纠删码表现出色的场景,以及它特别适合每种场景的原因:

最适合复制的场景
纠删码在写入和重建过程中需要更多的CPU和I/O,因此可能不适合:
• 数据库或虚拟机(例如,Ceph RBD)
• 具有小文件的交互式文件系统(例如,CephFS)
• 低延迟、高吞吐量I/O工作负载
在这些情况下,尽管存储成本更高,复制提供了更好的性能。
纠删码是一种有效的策略,适用于那些旨在优化存储效率、持久性和可扩展性的组织。在Ceph中,它通过将数据分解成带有奇偶校验的块来减少存储开销,从而在不进行完全数据复制的情况下实现从故障中恢复。像6+3这样的配置可以容忍最多三次故障,使其非常适合冷存储和大规模对象数据。
虽然纠删码提供了显著的成本节约和弹性,但它也带来了性能上的权衡,特别是对于小型或频繁的写入操作,并且不太适合对延迟敏感的应用程序,如数据库。


