Computer science 分布式网络中系统失效概率的计算
我试图建立一个分布式文件系统中文件可用性的数学模型。我在MathOverflow上发布了这个问题,但这也可能被归类为CS问题,所以我在这里也尝试一下 系统是这样工作的:一个节点在r*b远程节点存储一个文件(使用擦除代码编码),其中r是复制因子,b是一个整数常量。擦除编码文件的特性是,如果至少有b个远程节点可用并返回文件的一部分,则可以恢复该文件 最简单的方法是假设所有远程节点彼此独立,并且具有相同的可用性p。根据这些假设,文件的可用性遵循二项分布,即 不幸的是,这两个假设可能会引入不可忽略的错误,如本文所示: 克服所有节点都具有相同可用性的假设的一种方法是计算可用/不可用节点的每个可能组合的概率,并计算所有这些结果的总和(这是他们在上述论文中提出的,只是比我刚才描述的更正式)。您可以将此方法视为深度为r*b的二叉树,每个离开都是可用/不可用节点的一个可能组合。文件的可用性与您在>=b个可用节点的情况下休假的可能性相同。这种方法更为正确,但计算成本为。此外,它没有处理节点独立性的假设 你们有没有什么好的近似方法,它比二项分布近似法误差小,但计算量比二项分布近似法好Computer science 分布式网络中系统失效概率的计算,computer-science,distributed,time-complexity,high-availability,binomial-cdf,Computer Science,Distributed,Time Complexity,High Availability,Binomial Cdf,我试图建立一个分布式文件系统中文件可用性的数学模型。我在MathOverflow上发布了这个问题,但这也可能被归类为CS问题,所以我在这里也尝试一下 系统是这样工作的:一个节点在r*b远程节点存储一个文件(使用擦除代码编码),其中r是复制因子,b是一个整数常量。擦除编码文件的特性是,如果至少有b个远程节点可用并返回文件的一部分,则可以恢复该文件 最简单的方法是假设所有远程节点彼此独立,并且具有相同的可用性p。根据这些假设,文件的可用性遵循二项分布,即 不幸的是,这两个假设可能会引入不可忽略的错误
您可以假设每个节点的可用性数据是一组元组,由
(测量日期、节点测量、正在测量的节点、成功/失败位)
组成。例如,使用这些数据,您可以计算节点之间可用性的相关性和可用性差异。对于大型r
和b
您可以使用一种称为蒙特卡罗积分的方法,例如,请参阅(和/或SICP的第3.1.2章)来计算总和。对于较小的r
和b
以及显著不同的节点故障概率p[i]
而言,精确方法更为优越。“小”和“大”的确切定义取决于几个因素,最好通过实验加以验证
特定示例代码:这是一个非常基本的示例代码(Python),用于演示这样一个过程是如何工作的:
def montecarlo(p, rb, N):
"""Corresponds to the binomial coefficient formula."""
import random
succ = 0
# Run N samples
for i in xrange(N):
# Generate a single test case
alivenum = 0
for j in xrange(rb):
if random.random()<p: alivenum += 1
# If the test case succeeds, increase succ
if alivenum >= b: succ += 1
# The final result is the number of successful cases/number of total cases
# (I.e., a probability between 0 and 1)
return float(succ)/N
2) 在相关p[i]
的情况下,您需要有关系统的其他信息。我在评论中提到的情况可能是这样一个网络:
A--B--C
| |
D E
|
F--G--H
|
J
在这种情况下,A
可能是“根节点”,节点D
的故障可能意味着自动故障,节点F
、G
、H
和J
的概率为100%;而节点F
的故障会自动导致G
、H
和J
等故障。至少这是我在评论中提到的情况(这是一个合理的解释,因为您在原始问题中谈到了概率的树结构)。在这种情况下,您需要修改p
引用树结构的代码,并且for j In…
遍历树,在测试失败时跳过当前节点的较低分支。当然,最终的测试仍然是alivenum>=b
3) 如果网络是不能用树结构表示的循环图,这种方法将失败。在这种情况下,您需要首先创建死节点或活节点的图节点,然后在图上运行路由算法以计算唯一的、可到达的节点数。这不会增加算法的时间复杂度,但显然会增加代码复杂度
4) 如果您知道m.t.b.f/r(故障/修复之间的平均时间),时间依赖性是一个非常重要的问题,但可能会进行修改,因为这可以通过指数和给出树结构或不相关线性p[i]
的概率p
。然后,您必须在不同的时间运行MC过程,并获得p
的相应结果
5) 如果你仅仅拥有日志文件(如你在最后一段中所暗示的),那么需要对方法进行实质性修改,这超出了我在这个委员会上所能做的。日志文件需要足够彻底,以便能够为网络图(以及
p
的图)以及p
的所有节点的单个值重建模型。否则,准确性将不可靠。这些日志文件还需要大大长于故障和修复的时间尺度,这一假设在现实网络中可能不现实。假设每个节点都有一个恒定的、已知的和独立的可用率,就会想到分而治之的方法
假设您有N个节点
将它们分成两组N/2
节点
对于每一侧,计算任意数量的节点([0,N/2]
)下降的概率
根据需要,将这些值相乘并求和,以确定全集合中任何数字([0,N]
)下降的概率
第2步可以递归地完成,在顶层,您可以根据需要求和,以找出超过某个数字的下降频率
我不知道这有多复杂,但如果我不得不猜测的话,我会说在O(n^2 log n)
其机理可以在终端盒上进行说明。假设我们有5个节点具有up时间。我们可以将其分为A
和BA--B--C
| |
D E
|
F--G--H
|
J
v[0] = a[0]*b[0]
v[1] = a[1]*b[0] + a[0]*b[1]
v[2] = a[2]*b[0] + a[1]*b[1] + a[0]*b[2]
v[3] = a[2]*b[1] + a[1]*b[2] + a[0]*b[3]
v[4] = a[2]*b[2] + a[1]*b[3]
v[5] = a[2]*b[3]