简介
Gossip协议又称传染病协议,因为gossip(流言)以类似于病毒的方式在计算机之间传播信息。
Gossip协议满足的条件
- 协议的核心包括周期性,成对性,内部进程交互
- 交互期间的信息量大小固定
- 节点交互后,至少一个agent获知另一个agent的状态
- 通信不可靠
- 交流的频率远远低于消息的传输延迟
- 对端选择的随机性,或者从全集,或者从部分集合
- 由于副本的存在,传输的信息具有隐式冗余
Gossip协议举例
假设我们在一个网络中寻找一个pattern的最优匹配,机器上运行着agent 程序,这些agents实现了gossip协议
- 用户首先要求local agent传播pattern
- 每一个agent定期并以一定的速率(0.1秒一次)随机选择一个其他的节点传播此pattern。例如节点A和B,如果A知道了pattern,那么B也会知道,随后A和B随机选择了C和D继续传播此消息。因此即使发生节点故障或者消息丢失,此消息依然会在全网范围内传播。
- 如果agent第一次收到此pattern,则开启本地查询,寻找本地的最优匹配
- agents也传播其最优匹配。因此,如果A和B进行交互后,A和B都会知道最优匹配。最优匹配也会通过全网范围进行传播。
- Log时间的复杂度,例如25000个节点,那么30轮就会结束,15轮进行pattern的传播,15轮询问最优匹配。
有偏Gossip协议
不是从全部节点中随机选择一个,考虑到网络延迟,从相邻的节点中随机选择,更高效。
为何是log时间
变量定义
初始111个人,全部nnn个人,一个人每次感染bbb个人,则感染率为p=b/(n−1)p = b/(n-1)p=b/(n−1)
令第iii轮有xix_ixi个人被感染,n−xin-x_in−xi未感染
则第i+1i+1i+1被感染的新的人数为xi∗p∗(n−xi)x_i * p * (n-x_i)xi∗p∗(n−xi)
即xi+1=xi+xi∗p∗(n−xi)x_{i+1} = x_i + x_i * p * (n-x_i)xi+1=xi+xi∗p∗(n−xi),且x1=1x_1 = 1x1=1
证明
这xix_ixi个人中每一个人能够感染的新人为: b∗(n−xi)/(n−1)b * (n-x_i)/(n-1)b∗(n−xi)/(n−1)
则一共xix_ixi个人贡献的感染人数为: xi∗b∗(n−xi)/(n−1)=xi∗p∗(n−xi)x_i * b * (n-x_i) / (n-1) = x_i * p * (n-x_i)xi∗b∗