纠删码技术,更省钱的分布式系统的可靠性技术
前面章节我们介绍了副本技术,知道通过副本技术可以提高存储系统数据的可靠性。副本技术存在多个数据副本,因此需要消耗很多额外的存储空间。以3副本为例,需要额外消耗2倍的存储空间来保证数据的可靠性。也就是说,有2/3的存储空间是被无效占用的,有效存储空间大概是33.3%。
副本技术在性能和可靠性方面优势明显,但成本明显比较高。为了降低存储的成本,很多公司采用纠删码技术来保证数据的可靠性。现在很多分布式存储都支持纠删码方式,比如Ceph、Minio和Swift等。
纠删码技术(Erasure Code)
纠删码是一种通过校验数据来保证数据可靠性的技术,也就是该技术通过保存额外的一个或者多个校验块来提供数据冗余。与副本技术不同,这种数据冗余技术不能通过简单复制来恢复数据,而是像RAID一样需要经过计算来得到丢失的数据。基于纠删码技术,存储的有效数据率可以达到66%,甚至更高。
传统磁盘阵列的RAID技术可以认为是纠删码的一个特例,比如RAID5可以通过一个校验块来提供一份冗余,RAID6可以提供两份冗余。而在分布式存储中通常使用的是RS(Reed-Solomon)纠删码算法,这种算法可以提供更高的冗余数据量,比如微软的Azure存储提供4个冗余数据块,谷歌的GFS可以提供3个冗余数据块。
本节我们以RS纠删码为例介绍一下纠删码