您的位置:首页 > 编程语言 > Go语言

Gossip 协议

2013-12-04 20:00 190 查看
Gossip
协议是电脑之间的通信协议,受启发与现实社会的流言蜚语。现代分布式系统通常用gossip协议来解决一些用其他方法难以解决的问题,可能是因为当前网络有一个不便的问题——过于庞大,或许是因为gossip协议有时候是最为行之有效的方法。

   “传染病协议”(epidemic protocol)有事也是gossip协议的同义词,因为gossip协议传播信息的方式,有时候很类似于生物体内的病毒传播。

   (以上来自维基百科)

名字起得有点大,这次写的其实只是gossip算法中的其中一种实现方法——传播协议(散布谣言协议)。他采用gossip来传播信息;他们主要以“洪泛”方式在网络中工作。具体内容就是:几个节点,在一个统一的调度者的调度下,周期性的进行节点间的信息传递,也就是常说的“散布谣言”。由于不同的方法所采用的散布手段是不同的,这里介绍的是其中的一种具体方法如下:

局部视图(view)传播方式: 节点向外发送(push)

   视图(view)选择策略: 发送节点view表的头部——即发送节点视图的第一个信息(head)


节点个数暂定为:4

一、调度者

首先介绍调度者得主要工作 ,调度者负责在每个周期内随机的顺序安排这4个节点进行信息的互相传播,具体算法如流程图1.




 流程图1
 
解析:在这里,我设定了b1,b2,b3,b4分别代表该网络中的四个节点bi[0..1],当任意bi=0时,表示该节点在本周期内没有被调动,当bi=1时则表示bi已执行过信息的发送。具体如何实现每个周期内bi的控制,不同的语言有不同的写法,在这里就不赘述了,不会很难。
二、节点
这里需要详细的说明,首先介绍每个节点所包含的具体信息。
我假设模型如下:每个节点包含一张view表格,表格的每一项为其他节点的两项基本信息,包括该节点的ID(地址)和hopcount(传播次数)。由于设定的网络模型内只包含4个节点,所以view表的长度我设定为2,即每个节点的view表内最多只能包括两个节点的基本信息。
由于每个节点在网络中的任务有两项:发送信息给其他节点、接受其他节点发送给自己的信息。所以我把发送和接受的流程图对照这进行描述,如流程图2。



 流程图2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: