Gossip协议的一个概率问题

今日看到redis的集群用到了Gossip 协议,于是网上搜索,大致看了这篇文章

https://zhuanlan.zhihu.com/p/41228196,其中关于概率这部分读起来总是不解,

如下所示

 

 

 

在文中的模型下,很显然最后都会被感染,因为只有两种类型,感染者和非感染者,而这里的被感染概率越来越小最后趋于0,似乎不符合结果,因为是百分之百会被感染,所以猜测这里描述的大概率是不被感染的概率。然后我们找来了原文验证,如下

 

 

 

 

文中所说为一个节点在Anti-Entropy模型中,使用pull方式保持易感染状态(即非感染状态)的概率。一个在第i轮中保持易感染状态(即非感染状态)节点在经过第i+1轮后保持易感染状态(即非感染状态),且这个节点在第i+1轮接触了一个易感染状态(即非感染状态)的节点。得到的概率是 p(i+1)=p(i) * p(i); 因为这个节点本身的易感染状态(即非感染状态)p(i),接触一个易感染状态(即非感染状态)的节点概率也是p(i),所以第i+1轮能保持易感染状态(即非感染状态)的概率就是p(i) * p(i).

 对于push这种方式,概率公式看起来明显复杂很多,我们也尝试来解释下,其中n(1-pi)表示的是感染者的个数,让每个感染者不接触目标节点的概率为(1-1/n),所以有多少个感染者,就有多少次方,于是我们得到了目标公式p(i+1)=p(i) * ((1-1/n))^n(1-pi)

至于后面的简化情况p(i+1)=p(i) /e, 是基于p(i)很小,n很大的情况下,

我们通过limit(1+1/n)^n =e,

可以得到((1-1/n))^n(1-pi) = (1-1/n)^n=1/(1+1/(n-1))^n=1/(1+1/(n-1))^(n-1)=1/e,

所以得到近似值p(i+1)=p(i) /e

posted on 2020-11-17 16:44  子虚乌有  阅读(142)  评论(0)    收藏  举报