春节去韩国转了转,可惜没有看到千颂伊。韩国还是蛮发达的,街道也很干净。是否二战后跟美国走的地区都比较发达呢?好像是的,比如日本、韩国和台湾。但好像也不全是,比如菲律宾好像就差一些。 今天,我们的公众号在猴年正式开工。昨天把春节的存储新闻都看了一遍,好像没有发生特别事情。可能稍微值得一提的就是VMWare推出了第四代VSAN,即VSAN 6.2,里面增加了几个特性,令人印象比较深刻的只有3个。 1、支持在线重删和压缩。 重删和压缩是整个cluster粒度使能的,只支持全闪存配置。重删的粒度是定长的4K,而且只在一个disk group里进行。重删在cache层进行,写到容量层才开始压缩。也就是先重删后压缩。VSAN只有在压缩率大于2X的情况下才进行压缩,否则就不压缩,这样速度可以更快。也就是压缩可以自适应。 2、支持基于VM粒度的QoS。 这个功能还是比较有用,可以避免坏邻居的干扰,限制其IOPS。QoS策略可以通过SPBM进行配置。 3、支持纠删码,但其实只实现了RAID 5/6。 说是纠删码,其实和我们理解的纠删码不同,目前VSAN只是实现了RAID 5/6,限制还比较多,首先还是只支持flash,第二是只支持FFT=1或2这两种情况,如果需要更高级别的容错,如FTT>=3,还需要采用两副本的方式。不过,数据容错方式也是基于VM的,也就是说不同VM可以选择不同的方式,灵活性还是不错的。 为什么实现的是RAID 5/6,但VMware却宣传是纠删码?我想可能有以下几个原因吧: 1)、VSAN的主要竞争对手Nutanix宣传已经支持纠删码; 2)、RAID 5/6其实也是纠删码的最简单的形式,说是纠删码也无可非议; 3)、估计以后也会实现真正的N(数据) M(校验)的方式,。当M>2,就是我们常说的纠删码; 4)、RAID一般不跨节点,纠删码一般是跨节点的,用纠删码一词来强调VSAN支持节点容错,可靠性更高。 纠删码其实还是蛮复杂的,有网友建议我写篇文章介绍介绍,但西瓜哥数学不太好,只能按照我的理解来写几句。 纠删码其实已经有50多年的历史,比RAID技术要早得多。纠删码这种编码方式来自通讯领域,最近在存储领域得到大量采用。 我们知道RAID 5的算法是XOR,对吧,计算机算起来非常简单。但RAID 5是N 1的形式,只能支持恢复一份数据。后来,发展到N 2的方式,也就是RAID 6,支持恢复两份数据。RAID 6的第一份校验也是采用XOR算法,但第二份数据引进了一个复杂的GF(Galois Field)变换,GF西瓜哥一般解释为女朋友(Girl Friend)。可以理解每份数据有且只有一个唯一的女朋友,原始数据XOR产生第一个校验块P,它们对应的女朋友再XOR产生第二个校验块Q,由于有两份校验数据,因此支持恢复两份数据。由于数据的女朋友是GF变换算出来的,因此,需要比较复杂的计算。但由于RAID 5和RAID 6比较常用,现在在INTEL CPU的指令集里面有指令集支持了,因此速度还是比较快的,如中国常见的EMC和华为的阵列都直接采用CPU实现RAID 6,而没有采用ASIC。 N M,当M>2就算法就比较复杂了。不过,不管采用哪种方式,都叫纠删码。 开源的产品一般采用RS(Reed-Solomon)编码,但这种算法当N和M值比较大时计算消耗很大,在有些场合就不适合。比如华为在自研的SSD盘的纠错方面,就采用LDPC(Low-Density Parity-Check)编码,减低对SSD控制器的计算能力要求,也就减低SSD盘的功耗。 现在针对纠删码的编码方式有很多的研究和实践,一般来说,研究重点有三个方向: 1)、减少恢复时磁盘的I/O。比如采用一种叫Array Code的编码方式,可以大大减少需要从残存硬盘读取数据的数量。 2)、 减少恢复时对网络的影响。比如微软的Azure蓝云的Windows Azure Storage (WAS),其纠删码编码采用Local Reconstruction Codes (LRC),主要原理是把校验数据分成两部分,一部分是本地校验码,一部分是全局校验码。测试数据表明,大部分情况下,LRC编码对网络I/O和带宽的占用都要好于RS编码。这种情况对跨WAN网的公有云非常有价值。开源的Hadoop有一个类似LRC的实现,IBM贡献的Partial-MDS编码。
总之,纠删码是一个笼统的概念,只要支持N M形式的编码,都可以叫纠删码。RAID 5/6算是比较特殊的纠删码,RAID 5各家都是采用XOR实现,但RAID 6各家实现就差距很大了,比如NetApp的RAID DP就有别用于其他厂商RAID 6的实现方式。到M>2以后,各家实现差距更大了,编码方式也多种多样,HP的 LeftHand的网络RAID(比如RAID10 2),可能不同于EMC ISILON或者华为OceanStor 9000的实现,也不同于Azure的LRC,和SSD盘里有的LDPC差距就更大了。各家根据自己产品的应用场景,都会在计算方面或者网络方面做不同方向的优化,选择不同的算法。但不管采用什么算法,只要实现N M方式,我们都统称为纠删码。由于西瓜哥的数学是体育老师教的,对很多算法理解都不到位,只是初浅谈了谈对纠删码的理解,作为猴年的开工之作吧。 |
|