分布式存储领域,数据安全性问题一直是最受关注的,数据冗余机制的选择有多副本和纠删码。多副本的高性能高可靠性使得成为目前分布式存储配置时的首选,但是高昂的成本和较低的有效磁盘使用空间使得在很多使用场景上分布式存储无法发挥其最大的效能。纠删码可以提供较高的有效磁盘使用空间同时也能降低分布式存储的成本,本文将为大家介绍纠删码知识以及如何使用纠删码。
纠删码(Erasure Code)本身是一种编码容错技术,最早是在通信行业解决部分数据在传输中损耗的问题,它的基本原理是把传输的信号分段,加入一定的校验再让各段间发生一定的联系,即使在传输过程中丢失掉部分信号,接收端仍然能通过算法把完整的信息计算出来。如果严格的区分,实际上按照误码控制的不同功能,可分为检错、纠错和纠删三种类型。 1.检错码仅具备识别错码功能 而无纠正错码功能; 2.纠错码不仅具备识别错码功能,同时具备纠正错码功能; 3.纠删码则不仅具备识别错码和纠正错码的功能,而且当错码超过纠正范围时,还可把无法纠错的信息删除。
从纠删码基本的形态看,它是k个数据块+m个校验块的结构,其中k和m值可以按照一定的规则设定,可以用公式:n=k+m来表示。变量k代表原始数据或符号的值。变量m代表故障后添加的提供保护的额外或冗余符号的值。变量n代表纠删码过程后创建的符号的总值。当小于m个存储块(数据块或校验块)损坏的情况下,整体数据块可以通过计算剩余存储块上的数据得到,整体数据不会丢失。
纠删码常见的有里德-所罗门码Reed-Solomen(简称RS)、级联低密度纠删码和数字喷泉码三类。目前在存储行业内的应用中,主要使用的是RS类纠删码,比如光盘存储中使用 RS 码进行容错,防止光盘上的划痕导致数据不可读;生活中经常使用的二维码就利用了RS码来提高识别的成功率。主要原因就是,RS类码是唯一可以满足任意磁盘数目N和校验数据M中丢失M块后能恢复的Maximum Distance Separable(简称MDS)编码,下面介绍EC工作原理:
将文件数据分割成N个大小相同的原始数据块,然后编码生成M个大小相同的校验数据块(注:原始数据块和校验数据块大小相同),最后将原始数据块和校验数据块分别存储在不同的位置,如不同的磁盘、不同的存储节点等。纠删码的容错能力正是来源于这些校验数据块,在1~M个数据块(注:原始数据或校验都行)损坏的情况下,整体数据仍然可以通过剩余的数据块计算得出,确保了数据的高可用性。
纠删码存储的存取过程包含编码、修改、解码三种基本操作:以4+2配置为例,文件数据写入时被分割为4个数据块和2个校验块。 当需要对数据块1修改时,数据块1更新为1^,同时校验块1和校验块2也需要重新编码更新为校验块1^和校验块2^。 当数据块1丢失时,可通过数据块2、数据块3、数据块4、校验块1、校验块2解码计算出数据块1;同理任一数据块或校验块丢失都可以通过剩余数据块以及校验块计算出,4+2配置中冗余度为2,即最多可以同时丢失2块数据块,当丢失的数据块个数大于2时,丢失数据块不可恢复。
对比多副本 多副本就是一份数据以副本的方式写到多个分布式系统中的存储节点中。多副本的数据保护方式,实现简单,而且可靠性高。除非所有副本所在的存储节点都故障,才会影响业务;除此之外,可以从未故障的其他副本读取数据以保证业务。但是多副本的空间利用率偏低,以三副本为例,存储空间利用率未33%,这也增加了企业级用户的存储成本。以4+2为例,空间利用率为4/(4+2)=67%。这个利用率相当于三副本的2倍。而可靠性上,与三副本一样可以满足支持2个节点同时故障。 01 可用容量 可用容量看,4+2纠删码的利用率是66%,但3副本只有33%,两者差了2倍,8+2纠删码的利用率更可以做到80%,由此可见纠删码的可用容量对比多副本要高很多。
02 可靠性 存储可靠性,多副本和纠删码的故障冗余程度往往差别不大,比如3副本和4+2纠删码都可以允许任意2个节点故障而数据不丢失。如果将纠删码中的校验块配置到3、4或者更高时,就可以允许仁义3个、4个或者更多节点故障而数据不丢失。但是发生磁盘或节点故障时,纠删码的重构需要多一次解码计算,而多副本通过哈希计算的方式重构,在速度上多副本重构更快且纠删码重构时会占用更多的CPU资源。
03 性能 对比性能,纠删码在读取数据需要同时访问更多的磁盘,由于算法本身带来的额外网络消耗,且需要将所有数据块读取出才能返回成功,多副本只需要读取一个副本数据即可返回成功;如此时任一节点发生网络延迟,纠删码的读性能影响远大于多副本。写入数据时,纠删码需要CPU介入计算编码出N+M后写入数据,如写入数据块与条带大小不对齐时需要额外做补齐,写惩罚高;多副本通过哈希计算出N个副本后写入数据,对比纠删码写入效率高。 04 使用场景 追求可用容量高性能要求一般的场景可推荐纠删码,如存储备份场景,后端分布式存储集群可采用大容量机械硬盘+EC冗余策略;如高性能云硬盘场景、轻量数据库场景等,后端分布式存储集群可采用全SSD+EC冗余策略。
追求高性能且对可用容量要求不高可推荐使用多副本,如重型数据库等低时延多写入场景,后端分布式存储集群可采用全SSD+多副本冗余策略或SSD做缓存机械磁盘做主存+多副本冗余策略。 |