有朋友可能会问,9个9的数据可靠性的理论值(即1e-9的数据损坏概率)是如何计算得来的?本文详细讲解一下。
直觉上,对于3副本存储池,数据丢失/损坏的概率,就是“同时发生3块磁盘损坏”的概率,我们口头上也经常这样表达。先来看这个“同时”指什么?它是绝对意义上的同时发生,还是在1秒之内发生叫“同时”,亦或是1分钟之内发生叫“同时”?这个“同时发生3块磁盘损坏”可以定义为“在第一个磁盘损坏后,还没有完成该盘的重构的这段时间内又相继损坏了两个盘”。对于 zStorage 的标准3副本存储池而言,假设磁盘都是4TB大小,磁盘损坏后重构的时间为60分钟,那么:
磁盘1损坏,马上将该磁盘离线,开始重构。
假设又过了10分钟,磁盘2损坏,该磁盘马上进入离线状态,开始对该盘的副本进行重构。
在从磁盘1损坏开始的60分钟(即60分钟的磁盘重构时间)内,磁盘3损坏,这个时间磁盘1的重构还没有完成,磁盘2也还在重构中,这个时候磁盘3再损坏,整个存储池就坏了。
磁盘故障/损坏的概率一般是按“泊松分布(Poisson Distribution)”来计算。“泊松分布”是指单位时间内独立事件发生次数的概率分布。下面就是泊松分布的公式:等号的左边,P表示概率,N表示某种函数关系,t表示时间,n表示数量;等号的右边,λ表示事件的频率。

泊松分布的详细介绍可以参考:https://zh.wikipedia.org/wiki/泊松分佈和https://www.ruanyifeng.com/blog/2015/06/poisson-distribution.html。本文只给出计算结果。
参考backblaze的2023年年中磁盘统计报告,我们选择了磁盘数使用时间较长的统计https://www.backblaze.com/blog/ssd-edition-2023-mid-year-drive-stats-review/
存储节点数:3个
每个存储节点16块磁盘,共48块磁盘
磁盘大小3.84TB
副本数:3
AFR即年化磁盘故障率:1.5%
#!/usr/bin/python# -*- coding: utf-8 -*-import decimalimport mathimport timedef KdiskFailRate(N, T, ARF, K):# λ:每小时的坏盘数量lambda1 = decimal.Decimal(str(N*AFR/24/365))return poisson(lambda1, T, K)#级数def factorial(n):S = decimal.Decimal("1")for i in range(1, n+1):N = decimal.Decimal(str(i))S = S*Nreturn S#泊松分布def poisson(lam, t, R):e=decimal.Decimal(str(math.e))return ((lam * t) ** R) * (e**(-lam*t)) factorial(R)N = 48RepNum = 3T = 1AFR = 0.015failRate=KdiskFailRate(N,T,AFR,RepNum)print "KdiskFailRate: " ,failRate
KdiskFailRate: 9.253333714840863022098285545e-14


n是磁盘总数(这里是12个磁盘) k是选择的数量(这里是3个磁盘) ! 表示阶乘
def C(n, m):return factorial(n) (factorial(m)*factorial(n-m))def factorial(n):S = decimal.Decimal("1")for i in range(1, n+1):N = decimal.Decimal(str(i))S = S*Nreturn S

当某个数据分片的3个副本全部丢失会导致数据丢失。
而有多少个数据分片就意味着有多少个组合。
共3个存储节点,每个存储节点4个盘,每个盘有4个数据分片的副本,所以副本总数为3存储节点*4个盘*4个数据分片副本=48个数据分片副本。 48个数据分片副本/3副本数=16个数据分片。
如之前计算,512个数据分片意味着有512种组合,会导致数据丢失和损坏。 48个磁盘中“同时”损坏3个磁盘的组合数是17296。 也就是说,3个磁盘即使“同时”损坏,也只有512/17296= 0.029602220166512的概率会丢失数据。 所以最终结论是:数据丢失的概率应该为 9.25e-14*0.0296=2.738e-15
def LoseRate(LossDataRateInT):return 1 - (1 - LossDataRateInT)**(365*24/T)
得到的结果是:2.431e-11
说明:网上有别的文章在计算时,会考虑“同时”坏4个盘、5个盘等情况的概率,然后进行累加。不过这个概率更小,最终结果的差别可以忽略,所以为了简单起见,忽略这些情况。
磁盘总数为5*24=120个
1小时内坏3个磁盘的概率:1.445655e-12
3个磁盘“同时”损坏导致数据丢失的组合有512个
120个磁盘损坏3个磁盘的组合数有280840
因此3个磁盘在1小时内损坏导致数据丢失的概率为(1.445655e-12)*512/280840=2.635577e-15
年度内损坏3个磁盘导致数据丢失的概率为:2.33413e-11
即年度内数据可靠性为:99.99999999766587% 结论仍然是10个9的可靠性!
磁盘总数为3*16=48个
1小时内坏3个磁盘的概率:9.253333715e-14
3个磁盘“同时”损坏导致数据丢失的组合有16个
48个磁盘损坏3个磁盘的组合数有17296
因此3个磁盘在1小时内损坏导致数据丢失的概率为(9.253333715e-14)*16/17296=8.5599757e-17
年度内损坏3个磁盘导致数据丢失的概率为:9.725554e-13
即年度内数据可靠性为:99.99999999990274% 结论是高达12个9的可靠性!
磁盘总数为5*24=120个
8小时内坏3个磁盘的概率:7.39111566452e-10
3个磁盘“同时”损坏导致数据丢失的组合有512个
120个磁盘损坏3个磁盘的组合数有280840
因此3个磁盘在8小时内损坏导致数据丢失的概率为(7.39111566452e-10)*512/280840=1.3474758653447657e-12
年度内损坏3个磁盘导致数据丢失的概率为:1.47548806506137e-9
即年度内数据可靠性为:99.99999985245119% 结论是8个9的可靠性,比“配置1”的可靠性低了2个数量级。
磁盘总数为5*24=120个
1小时内坏2个磁盘的概率:3.37496933e-7
2个磁盘“同时”损坏导致数据丢失的组合有512个
120个磁盘损坏2个磁盘的组合数有7140
因此2个磁盘在1小时内损坏导致数据丢失的概率为(3.37496933e-7)*512/7140=2.420146e-8
年度内损坏2个磁盘导致数据丢失的概率为:0.00021198232027497266
即年度内数据可靠性为:99.9788% 结论是接近于5个9的可靠性,这是网上提到2副本5个9可靠性的由来。
对于上述讨论的“配置1”,如果1个存储节点故障,存储池退化为2副本,zStorage 设计为默认情况下如果7天内存储节点还没有修复,则开始启动重构。7天内数据可靠性为2.55e-7,可靠性仍然很高。 对于上述讨论的“配置4”,如果1个存储节点故障,存储池退化为1副本,zStorage 设计为默认情况下如果24小时内存储节点还没有修复,则开始启动重构。1天内数据丢失的概率为0.003945,即30天内数据丢失的概率是11.2%,90天内数据丢失的概率是29.9%,还是存在较高的风险。也就是说,如果2副本存储池在一个节点故障的情况下,3个月还没有修复,则有29.9%的概率会出现再坏一个盘而导致数据丢失。所以要尽可能快速修复节点,或者是有更多的存储节点,保证有足够的剩余空间进行一个节点数据的重构。这样的情况下,即使节点故障长时间没有修复,安全性还是很高。
8个盘为一组做了一个RAID 10,每个盘大小为4TB,一共15组,共120个盘。 有1个热备盘,故障后能够自动进行重构 磁盘的故障率AFR仍然为1.5% 磁盘的重构速率为200M/s
磁盘总数为121个 6小时内坏2个磁盘的概率:7.717518123e-7 2个磁盘“同时”损坏导致数据丢失的组合有60个 121个磁盘损坏2个磁盘的组合数有7260 因此2个磁盘在6小时内损坏导致数据丢失的概率为(7.717518123e-7)*60/7260 = 6.3781142e-9 年度内损坏2个磁盘导致数据丢失的概率为:9.312e-6 即年度内数据可靠性为:99.999%
结论是5个9的可靠性,比2副本可靠性略高,但几乎处于同一水平。
磁盘总数为121个 12小时内坏2个磁盘的概率:0.00000308 2个磁盘“同时”损坏导致数据丢失的组合有420个 121个磁盘损坏2个磁盘的组合数有7260 因此2个磁盘在12小时内损坏导致数据丢失的概率为(0.00000308)*420/7260=1.78182e-07 年度内损坏2个磁盘导致数据丢失的概率为:0.00013 即年度内数据可靠性为:99.987% 这几乎与2副本的分布式存储相同。
分布式存储的数据可靠性跟磁盘故障率、磁盘损坏后的重构时间、副本数、分片数、磁盘数都有直接的关系。 总数量为N个磁盘的分布式存储在磁盘重构时间T内,R(R为副本数)个磁盘同时损失导致的数据丢失概率的主要公式为“R个磁盘在T时间内同时损坏的概率”*“R个磁盘同时故障命中同1个数据分片的所有副本的概率”。公式的前一部分根据泊松算法和磁盘年度故障率来计算,后一部分用“分片数/N个磁盘内故障R个磁盘的组合数”来计算。 3副本的数据可靠性非常高,年度内9个9以上的可靠性,基本上来说不会有丢失数据的可能性。 2副本的数据可靠性相比3副本来说有4个数量级的差距,即5个9的可靠性,所以一定要保留足够的剩余空间能够让磁盘损坏时顺利进行重构,即2副本的存储池不能将空间用得太满。 如果是2副本存储池,假设一个存储节点故障,如果没有足够的空间来进行数据重构,此时只剩余1个副本,数据可靠性风险就相当高。所以一定要及时修复故障的存储节点,或者是有较多的剩余空间可以进行重构,这样就有比较高的安全性。 3副本存储池,如果出现存储节点故障,数据副本数退化为2副本,数据的可靠性仍然很高,即使没有剩余空间进行重构,也非常安全,有足够长的时间可以进行节点修复。

数据驱动,成就未来,云和恩墨,不负所托!
云和恩墨创立于2011年,是业界领先的“智能的数据技术提供商”。公司以“数据驱动,成就未来”为使命,致力于将创新的数据技术产品和解决方案带给全球的企业和组织,帮助客户构建安全、高效、敏捷且经济的数据环境,持续增强客户在数据洞察和决策上的竞争优势,实现数据驱动的业务创新和升级发展。
自成立以来,云和恩墨专注于数据技术领域,根据不断变化的市场需求,创新研发了系列软件产品,涵盖数据库、数据库存储、数据库管理和数据智能等领域。这些产品已经在集团型、大中型、高成长型客户以及行业云场景中得到广泛应用,证明了我们的技术和商业竞争力,展现了公司在数据技术端到端解决方案方面的优势。





