当前位置: 首页 > 科技观察

分布式存储系统可靠性:系统量化评估

时间:2023-03-22 12:51:49 科技观察

1.简介我们经常听到两个衡量分布式存储系统好坏的指标:可用性和可靠性指标。可用性是指系统服务的可用性。通常,可用性是通过将一年中的可用时间除以一年中的时间来衡量的。我们通常所说的SLA指标就是可用性指标,这里就不赘述了。可靠性指标是指数据的可靠性。我们常说数据可靠性是11outof9。在对象存储中,是指存储1000亿个对象时,大约有1个文件是不可读的。由此可见,数据可靠性指标给分布式存储系统带来的挑战是不言而喻的。本文重点分析分布式系统中数据可靠性的量化模型。2、后台数据的重要性不用多说,基本上数据可以说是企业生命力的核心,是企业生存的基础。因此,数据的可靠性是立身之本,任何数据的丢失都将给企业造成无法估量、无法挽回的损失。随着数据规模的增大和环境的复杂化,我们大致可以将威胁数据可靠性的因素分为几类:硬件故障:主要是磁盘故障、网络故障、服务器故障、IDC故障;软件隐患:内核bug、软件设计bug等;运维失败:人为误操作。其中,在第一类硬件故障中,磁盘故障最为频繁,对于从事分布式存储运维的同学来说,坏盘很正常。因此,我们接下来尝试从磁盘故障的维度来量化分布式系统的数据可靠性。3.数据可靠性的量化为了提高数据的可靠性,数据复制技术和EC代码冗余技术是分布式系统可靠性最常用的方法。以多副本为例,副本越多,数据的可靠性就越高。为了对分布式系统的数据可靠性做出定量估计,进一步分析可知,影响存储数据可靠性的主要因素有:N:分布式系统的磁盘总数,可以直观理解,而磁盘数量与可靠性强相关,N的大小与数据的碎片化程度有很大关系。R:份数。副本数越高,数据的可靠性越高,但同时也会带来更大的存储成本。T:RecoveryTime是坏盘情况下的数据恢复时间。这也很好理解。恢复时间越短,数据的可靠性越高。AFR:AnnualizedFailureRate磁盘的年故障率,与磁盘本身的质量有关。质量越好,AFR越低,数据的可靠性越高。S:CopySets的数量,一个磁盘上的数据冗余在集群中的分散程度。越分散,恰好有数据的冗余数据越多,任意三块盘损坏都可能丢失。因此,仅从碎片化程度的维度来看,碎片化程度越小越好。因此,我们可以用一个公式来表示分布式系统每年的数据可靠性:3.1Annualdiskfailurerate:AFRAFR:AnnualizedFailureRate,也称为硬盘的年度故障概率,一般用来反映硬盘的故障率一个设备在全年的概率,可以直观的理解,AFR越低,系统的可靠性越高,因为AFR与系统的数据可靠性强相关;而这个指标通常是由另一个磁盘质量指标MTBF(MeanTimeBeforeFailure)计算得出的,各大硬盘厂商的MTBF都有出厂指标,比如希捷硬盘出厂的MTBF指标是120W小时。下面是AFR的计算公式:但是在实际使用中,MTBF往往会低于硬盘出厂指标。Google根据他们在线集群的硬盘计算AFR如下:(5年内硬盘AFR统计)(图片来自http://oceanbase.org.cn)3.2Copydatacopygroup:CopySetcopydatacopygroupCopySet:通俗地说,如果包含一个数据的所有副本的节点,即一个copyset损坏,数据就会丢失。(单个数据随机复制分组示意图)(图片来自https://www.dazhuanlan.com)如图2所示,以9个磁盘为例,这9个磁盘的copyset为:{1,5,6},{2,6,8},如果不做任何特殊处理,数据多了之后数据的随机分布如下:(海量数据随机分布示意图)(图片来自https://www.dazhuanlan.com)MaximumCopySet:如上图所示,12条数据的多个副本随机分散在9个磁盘上。由上图可知,任意选取3个磁盘的决定,都可以选取出包含某个数据的3个副本,相当于从n个元素中选取出k个元素的组合数为:在最大的CopySet配置下,一次3个磁盘是坏了,数据丢失的概率是100%。在另一种情况下,数据的分布是有规律的。例如,一个磁盘上的数据只会备份到另一个磁盘上,如下图所示。这种情况下数据覆盖的CopySet只有(1,5,7),(2,4,9),(3,6,8)也就是这种情况下的CopySet为3。我们不难理解,9个盘的最小CopySet是3个。即N/R。(磁盘粒度冗余分布示意图)因此,CopySet的个数S满足:既然CopySet数据可以最小化为N/R,那么CopySet的个数是否可??以最小化?答案当然是否定的,因为,一方面,如果将CopySet调到最小,当一个磁盘坏掉时,只有另外两个磁盘会执行这个磁盘的恢复操作,所以数据恢复时间会变成越长,越长的恢复时间也会影响数据的可靠性;而且一旦打到CopySetOne,丢失的数据量非常大。因此,分布式系统中CopySet的数量和恢复速度RecoveryTime是平衡整个系统数据可靠性和集群可用性的参数。文献[1]Copysets:ReducingtheFrequencyofDataLossinCloudStorage为分布式系统提供了一种copyset复制选择策略。在对象存储、文件存储等分布式存储系统中,还有一种方法可以使系统的可靠性和可用性根据CopySet的数量进行调整,即在随机放置的情况下,将小文件合并成的存储策略使用largefiles,可以通过控制大文件的大小来控制每个磁盘上大文件的个数,比如100G一个文件,8T的磁盘最大存储文件数为8T/100G=80个文件,也就是说,一个8T的磁盘的数据最多分散到80个其他磁盘上,这对于集群磁盘远大于80的系统来说是显而易见的,也可以很好地控制一个数据盘的数据碎片化程度。因此,当磁盘上的分片随机散布时,CopySet的数量可以量化为如下公式:其中P为磁盘容量,B为分片大小,N为系统盘数据,R是拷贝数。80%是使用率。3.3数据恢复时间:RecoveryTime数据恢复时间对数据的可靠性影响很大,这一点很好理解,所以缩短数据恢复时间可以有效降低数据丢失的风险。上文提到,数据恢复时间与磁盘上数据碎片化程度强相关,数据恢复时间也与服务本身的可用性相关。例如磁盘带宽为200MB/s,假设20%可用于恢复的带宽为40MB/s,磁盘容量为P,使用率为80%,B为BlockSize大小,则恢复速度可以计算如下:4、可靠性模型的推导4.1磁盘故障与泊松分布泊松分布:泊松分布实际上是二项分布的极限情况。泊松分布公式如下:(图片来自知乎)其中t为时间段(以小时为单位),n为故障磁盘块数,N为整个集群的磁盘数,为平均数单位时间内1小时内发生故障的磁盘数。从3.1节我们介绍过,一年内磁盘故障的概率是AFR,那么单位时间1小时的时间段内磁盘故障的概率就是FIT(FailuresinTime):那么N个集群disksintheunit1小时内发生故障的磁盘数为FIT*N,即单位时间内1小时内发生故障的平均磁盘数。故可得:4.2系统年可靠性计算的推导由4.1可得磁盘故障服从泊松分布,n个磁盘组成的集群在t小时内发生n个磁盘故障的概率为:接下来,我们以3个副本为例,推导年度集群无数据丢失概率的量化模型。在3副本的情况下,年度集群不丢失数据的概率不好量化。我们可以计算出每年集群中数据丢失的概率,然后计算出每年集群中没有数据丢失的概率:全年集群中数据丢失的概率:仅在t内第一个磁盘发生故障后(1年),则系统进入数据恢复阶段。第二个磁盘在时间tr内发生故障。我们不考虑已经恢复了多少数据,然后第三个磁盘在tr内发生故障。但是,这三个磁盘可能不会完全命中我们在3.2中引入的副本集。如果复制组命中副本集,那么集群将全年经历数据丢失。因为集群中全年数据丢失的概率与P1、P2、P3、copyset命中概率Pc有关。1年时间t内任意一块磁盘发生故障的概率为:上述磁盘出现问题后需要立即恢复,恢复时间tr内另一块磁盘发生故障的概率为:在恢复时间tr内,有athirdarbitrarydiskProbabilityofdiskfailure:这三个故障磁盘恰好命中集群的CopySets的概率为:因此不难得到集群全年数据丢失的概率P:那么概率集群中全年无数据丢失的概率为1-P可以计算出来。4.3EC冗余度年度可靠性计算的推导EC冗余度机制相对于三副本机制,使用额外的校验块实现部分块失效时数据不丢失,按(D,E)数据块EC编码,则在计算时EC冗余下的年度集群数据丢失概率,EC模式下的恢复速度tr与三副本肯定不同。另外,EC模式下的copysets不同,EC模式允许E数据块丢失,D数据块中丢失的任何E数据块都无法找回。因此不难得出EC模式的年度集群中数据丢失的概率为P,在下面的公式中,默认E为4,即丢失4个数据块:与三副本模式相比,EC模式下的copyset需要考虑D+E块中任意一个E块的丢失,则EC模式下的copyset个数为:5.可靠性模型估计5.1量化模型影响因素以三副本为例,影响因素可以从上面计算整个集群故障概率的量化公式得到:N:集群中的磁盘数量;FIT:也是1小时盘的故障率,可以通过AFR得到;t:固定期限为1年;tr:恢复时间,单位小时,与恢复速度W、磁盘存储容量、分片大小有关;R:份数;Z:磁盘总存储空间;B:分片或块的大小,小文件合并成大文件的最大大小。5.2可靠性的量化计算接下来我们根据生产集群的现状,将影响可靠性计算的几个因素引入模型计算可靠性计算中:结合4.2中磁盘故障和可靠性的推导,通过10个案例的计算表格,可以看出,在案例1、2、3中,通过将盘数从48个盘扩展到804个再到3600个盘,可靠性从11个9提高到接近13个9,并且那么804盘到3600盘依然保持13个九。按理说,随着集群规模的增大,增加3块盘的概率会增加。但是,由于恢复速度也随着磁盘的增加而线性增加,因此可靠性一直在提高,但是从804到3600盘,可靠性并没有增加,因为此时恢复速度并不是随着盘数的增加而线性增加的,因为当盘数很大时,决定恢复速度的因素变成单盘。片数。案例5和案例6更容易理解,恢复速度从100M/S变为10M/S,可靠性下降2个数量级以上;案例7和案例8也比较好理解,AFR从0.43增加到1.2再到7,可靠性降低了3个数量级;案例9和案例10比较复杂。当磁盘数为100时,块大小从80G增加到100G,可靠性降低。这样的话,恢复速度提高了,CopySet也增加了。但速度效应是更大的原因。案例11和案例12也比较复杂。因为我们限制恢复速度不超过5分钟(在线模拟,因为系统检测到坏盘,自动踢盘等操作也需要时间),所以这两个Case下的CopySets超大。所以恢复并发度很高,但是限制在5分钟内,所以两个Case的恢复速度是一样的,所以PKCopySet的数量,Case12的CopySet比Case11的Cop??ySet小,所以更不容易丢失,所以可靠性更高。6.总结首先,AFR越低越好。AFR是直接决定整个集群磁盘故障导致数据丢失概率的最大因素;二是恢复速度:在不影响服务可用性指标的前提下,最大化磁盘故障的恢复带宽是提高集群数据可靠性的另一个重要因素;如果恢复速度有限,比如由于系统架构的设计,从发现坏盘到开始数据恢复操作需要5分钟,那么可以通过合理的降低分散度磁盘数据并减少CopySet。如果系统是基于分片粒度或块粒度的,则相应地增加块粒度来降低数据的分散程度,从而提高数据的可靠性。