简介
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时间
变量定义
初始 1 1 1个人,全部 n n n个人,一个人每次感染 b b b个人,则感染率为 p = b / ( n − 1 ) p = b/(n-1) p=b/(n−1)
令第 i i i轮有 x i x_i xi个人被感染, n − x i n-x_i n−xi未感染
则第 i + 1 i+1 i+1被感染的新的人数为 x i ∗ p ∗ ( n − x i ) x_i * p * (n-x_i) xi∗p∗(n−xi)
即 x i + 1 = x i + x i ∗ p ∗ ( n − x i ) x_{i+1} = x_i + x_i * p * (n-x_i) xi+1=xi+xi∗p∗(n−xi),且 x 1 = 1 x_1 = 1 x1=1
证明
这 x i x_i xi个人中每一个人能够感染的新人为: b ∗ ( n − x i ) / ( n − 1 ) b * (n-x_i)/(n-1) b∗(n−xi)/(n−1)
则一共 x i x_i xi个人贡献的感染人数为: x i ∗ b ∗ ( n − x i ) / ( n − 1 ) = x i ∗ p ∗ ( n − x i ) x_i * b * (n-x_i) / (n-1) = x_i * p * (n-x_i) xi