一、引言
咱们经常听到掂量分布式存储系统好坏的两个指标:可用性和可靠性指标。
可用性指的是零碎服务的可用性。个别按全年可用工夫除以全年工夫来掂量可用性的好坏,平时咱们说的 SLA指标就是可用性指标,这里就不开展细说。
可靠性指标指的是数据的可靠性。咱们常说的数据可靠性11个9,在对象存储中就意味着存储一千亿个对象大略会有1个文件是不可读的。由此可见,数据可靠性指标给分布式存储系统带来的挑战显而易见。
本文就重点来剖析一下分布式系统的数据可靠性的量化模型。
二、背景
数据的重要性不用多说,基本上数据能够称得上是企业生命力的外围,是企业赖以生存的基本。因而数据的可靠性是根底的根底,任何数据的失落都会给企业造成无奈计算和补救的损失。
随着数据规模的日益增大,环境更加简单,咱们大体能够把威协数据可靠性的因素归为几大类:
- 硬件故障:次要是磁盘故障、还有网络故障、服务器故障、IDC故障;
- 软件隐患:内核BUG,软件设计上的BUG等;
- 运维故障:人为误操作。
其中,第1类的硬件故障中又以磁盘故障最为频繁,坏盘对于从事分布式存储运维的同学来说再失常不过了。
因而,咱们接下来从磁盘故障这个维度来尝试量化一下一个分布式系统的数据可靠性。
三、数据可靠性量化
为了进步数据的可靠性,数据正本技术和EC编码冗余技术是分布式系统可靠性最罕用的伎俩了。以多正本为例,正本数越多,数据的可靠性必定越高。
为了对分布式系统的数据可靠性作一个量化估算,进一步剖析失去影响存储数据可靠性的因素次要有:
- N:分布式系统磁盘的总数,能够很直观了解,磁盘的数量是和可靠性强相干,N的大小与数据的打散水平有很大关系。
- R:正本数,正本数越高数据的可靠性必定越高,但同时也会带来更大的存储老本。
- T:RecoveryTime呈现坏盘状况下数据恢复的工夫,这个也很好了解,复原工夫越短,数据的可靠性越高。
- AFR:Annualized Failure Rate磁盘的年度故障率,这个和磁盘自身的品质相干,品质越好,AFR越低,数据的可靠性越高。
- S:CopySet数量,一个盘上的数据的冗余在集群中的打散水平,打得越散,则有可能任意坏3块盘就刚好有数据的冗余数据都失落。所以,仅从打散水平这个维度看,打散水平越小越好。
因而,咱们能够用一个公式示意分布式系统的全年数据可靠性:
3.1 磁盘年故障率:AFR
AFR:Annualized Failure Rate又称为硬盘年度失败概率,个别用来反映一个设施在全年的应用出故障的概率,能够很直观的了解,AFR越低,零碎的可靠性越高,因为AFR与零碎的数据可靠性强相干;而这个指标通常又是由另一个磁盘质量指标MTBF(Mean Time Before Failure)推算出来,而MTBF各大硬盘厂商都是有出厂指标的,比如说希捷的硬盘出厂的MTBF指标为120W个小时。以下为AFR的计算公式:
然而理论应用当中往往MTBF会低于硬盘出厂指标。Google就依据他们的线上集群的硬盘状况进行了统计计算AFR如下:
(5年内硬盘AFR统计状况)
(图片来自http://oceanbase.org.cn)
3.2 正本数据复制组:CopySet
正本数据复制组CopySet:用艰深的话说就是,蕴含一个数据的所有正本的节点,也就是一个copyset损坏的状况下,数据会失落。
(单个数据随机复制分组示意图)
(图片来自https://www.dazhuanlan.com)
如图2所示,以9块盘为例,这9块盘的copyset就是:{1,5,6},{2,6,8},如果不做任何非凡解决,数据多了之后,数据的随机散布如下:
(海量数据随机散布示意图)
(图片来自https://www.dazhuanlan.com)
最大CopySet:如上图所示,12个数据的多正本随机打散到9块盘上,从上图中任决意挑3块盘都能够挑出蕴含某个数据的三个正本,就相当于从n个元素中取出k个元素的组合数量为:
最大的CopySet配置下一旦有三块磁盘坏了,丢数据的概率是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调到最小,当有一个盘坏了后,只有其它2块盘进行这块盘的复原操作,这样数据的复原工夫又变长了,复原工夫变长也会影响数据的可靠性;而且一旦命中了CopySet中的一个,则失落的数据量规模十分大。因而,分布式系统中的CopySet的量和复原速度RecoveryTime是一个平衡整个零碎数据可靠性和集群可用性的参数。
文献【1】Copysets: Reducing the Frequency of Data Loss in Cloud Storage提供了一种分布式系统的CopySet Replication的抉择策略,在分布式存储系统当中比方对象存储和文件存储当中,还有一种形式能够依据零碎的可靠性和可用性进行调整零碎CopySets的数量,就是在随机搁置状况下,应用小文件合并成大文件的存储策略,能够通过管制大文件的大小从而管制每个磁盘上大文件的数量,比方100G一个文件,8T盘上的最大文件存储数量也就是8T/100G = 80个文件,也就是说一个8T的盘的数据最多打散到了80块其它的盘上,对于集群盘远大于80的零碎显然也可能很好的管制一个数据盘的数据打散水平。
因而,在磁盘上的分片是随机打散的状况下,CopySets数量能够量化为以下公式:
其中,P为磁盘的容量,B为分片大小,N为零碎磁盘的数据,R为正本数。80%为使用率。
3.3 数据恢复工夫:Recovery Time
数据恢复工夫对数据可靠性影响很大,这个很好了解,因而缩短数据恢复工夫能够无效升高数据失落的危险。后面曾经介绍数据恢复工夫和磁盘上数据打散水平强相干,同时数据恢复工夫也与服务自身的可用性相干。
比方磁盘带宽为200MB/s,假如留给复原可用的带宽为20%就是40MB/s,磁盘容量为P,使用率为80%,B为BlockSize大小,则复原速度可按以下形式计算:
四、可靠性模型推导
4.1 磁盘故障与泊松散布
泊松散布:泊松散布其实是二项分布的极限状况,泊松散布公式如下:
(图片来自知乎)
其中,t为工夫周期(小时为单位),n为故障的盘的块数,N为整个集群的盘的数量,为单位工夫1小时内出故障的磁盘平均数。
从3.1节咱们曾经介绍过了磁盘一年之内出故障的概率为AFR,那么单位工夫1个小时的工夫周期磁盘出故障的概率为FIT(Failures in Time):
那么N块盘的集群在单位工夫1小时内出故障的盘的数量为FIT*N,换句话说,也就是单位工夫1小时内出故障的磁盘平均数。因而能够失去:
4.2 零碎全年可靠性计算推导
由4.1咱们失去磁盘故障是合乎泊松散布,N块盘的集群中在t小时内有n块盘故障的概率:
接下来咱们以3正本为例,来推导一下全年集群没有数据失落的概率的量化模型,3正本状况下,全年集群没有数据失落的概率不太好量化,咱们能够通过计算全年集群呈现数据失落的概率,而后全年集群没有数据失落的概率就以计算出来:
全年集群呈现数据失落的概率:只有在t(1年)的工夫内有第一块磁盘呈现故障之后,而后零碎进入数据恢复阶段,在数据恢复的工夫tr内又有第二块磁盘呈现故障,咱们先不思考数据恢复了多少,而后在tr内又有第三块磁盘呈现故障,然而这三个磁盘不肯定刚好命中了咱们在3.2介绍的copyset复制组如果命中了copyset,那么集群在全年就真的有呈现数据失落了。因为全年集群呈现数据失落的概率和P1,P2,P3,以及Copyset命中概率Pc相干。
1年工夫t内有任意一块磁盘呈现故障的概率为:
下面这块磁盘呈现问题后,须要马上复原,在复原工夫tr内有另外一块盘呈现故障概率:
在复原工夫tr内有第三块任意盘呈现故障的概率:
而这三块呈现故障的磁盘刚好命中集群的CopySets的概率为:
因而,不难失去全年集群呈现数据失落的概率P:
而后全年集群不呈现数据失落的概率1-P就能够计算失去了。
4.3 EC冗余全年可靠性计算推导
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.1 量化模型影响因素
以三正本为例,从以上量化的全集群出故障的概率计算公式能够失去影响的因素有:
- N:集群的盘的个数;
- FIT:就也是1小时磁盘的故障率,能够由AFR失去;
- t:这个是固定1年;
- tr:复原工夫,单位为小时,和复原速度W和磁盘存储量、分片大小相干;
- R:正本数;
- Z:磁盘的存储总空间;
- B:分片或者Block的大小,小文件合并成大文件的最大Size。
5.2 可靠性量化计算
接下来咱们把影响可靠性计算的几个因素依据生产集群的现状带入模型计算可靠性计算:
联合4.2的磁盘故障与可靠性的推导,通过表格中10个case的计算,能够看到:
Case 1,2,3通过扩大磁盘的数量从48块盘到804再到3600块盘,可靠性从11个9进步到靠近13个9,而后804块盘到3600块盘还是保护在13个9,按理说,集群的规模增大,增3块盘的概率会进步,然而因为复原速度也随着磁盘的减少而线性减少,因而,可靠性始终在晋升,而从804到3600块盘,可靠性没有减少,是因为这时候复原速度曾经不随磁盘减少而线性增大,因为在磁盘量很大后,决定复原速度因素就变为单盘分片个数。
Case 5,6比拟好了解,复原速度由100M/S变为10M/S,可靠性升高2个以上数量级;
Case 7,8也比拟好了解,AFR由0.43进步到1.2再进步到7,可靠性升高了3个数量级;
Case 9,10比拟绕,磁盘数在100的状况下,Block大小由80G一个进步到100G一个,可靠性升高了,这种状况下是因为复原速度进步,CopySet也进步,但速度影响更大导致。
Case 11,12也比拟绕,因为咱们限定了复原速度不能超过5分钟(模仿线上,因为零碎检测坏盘,主动踢盘等操作也须要工夫),这两个Case下的CopySet都超级大,所以复原的并发度都十分高,但受限于5分钟限定,所以两个Case的复原速度一样,所以PK CopySet的数量,Case12的CopySet比Case11的CopySet要小,所以更不容易失落,所以可靠性更高。
六、总结
- 首先AFR越低越好,AFR是间接决定整个集群磁盘故障引起的数据失落概率的最大因素;
- 其次是复原速度:在不影响服务可用性指标的前提下,最大限度的进步磁盘故障的复原带宽是进步集群数据可靠性的另一个重要因素;
- 如果在复原速度受限的前提下,比方零碎架构设计导致的相干发现坏盘到踢盘到进行数据恢复操作启动为5分钟,那么能够通过正当升高磁盘数据的扩散水平升高CopySet,如果零碎是按分片粒度或Block粒度,则相应的以进步Block粒度来升高数据扩散水平的形式来进步数据的可靠性。
参考资料
1. https://zhuanlan.zhihu.com
2.《Copysets: Reducing the Frequency of Data Loss in Cloud Storage》
3. https://www.dazhuanlan.com
4.http://oceanbase.org.cn
作者:vivo互联网通用存储研发团队-Gong Bing