Gossip协议

转自:https://www.jianshu.com/p/3aa9a109072c

Gossip协议

Gossip是分布式系统中被广泛使用的协议,其主要用于实现分布式节点或者进程之间的信息交换。Gossip协议同时满足应用层多播协议所要求的低负载,高可靠和可扩展性的要求。由于其简单而易于实现,当前很多系统(例如Amazon S3,Usenet NNTP等)选择基于Gossip协议以实现应用层多播的功能。

什么是Gossip协议

Gossip Protocol利用一种随机的方式将信息散播到整个网络中。正如Gossip本身的含义一样,Gossip协议的工作流程即类似于绯闻的传播,或者流行病的传播。具体而言Gossip Protocol可以分为Push-based和Pull-based两种。Push-based Gossip Protocol的具体工作流程如下:

  • 网络中的某个节点随机的选择其他b个节点作为传输对象。
  • 该节点向其选中的b个节点传输相应的信息
  • 接收到信息的节点重复完成相同的工作

Pull-based Gossip Protol的协议过程刚好相反:

  • 某个节点v随机的选择b个节点询问有没有最新的信息
  • 收到请求的节点回复节点v其最近未收到的信息

当然,为了提高Gossip协议的性能,还有基于Push-Pull的混合协议。同时需要注意的是Gossip协议并不对网络的质量做出任何要求,也不需要loss-free的网络协议。Gossip协议一般基于UDP实现,其自身即在应用层保证了协议的robustness。

Gossip协议的性能

Gossip协议的分析是基于流行病学(Epidemiology)研究的。因此在分析Gossip的性能之前,需要首先介绍一下流行病学中基本的模型。

Epidemiology

流行病传染最基本的模型仅作如下几个假设:

  • (n+1)个人均匀的分布在一起
  • 每一对人群之间的传染概率是β,显然0<β<1.
  • 任意时刻,某个人要么处于infected的状态要么处于uninfected的状态.
    一旦某个人从uninfected状态转变成为infected状态,其一直停留在infected状态。

有了以上假设,我们可以进一步分析流行病的传染情况。我们记t时刻处于infected状态的人数为yt,处于uninfected状态的人为xt,那么初始状态 y0=1, x0=n,并且在任何时候xt+yt=n+1.

考虑连续的时间,可知:

dx/dt=−βxy

解的:

x=n(n+1)/n+eβ(n+1)t
y=n+1/1+ne−β(n+1)t

明显,当t→∞时,x→0,y→(n+1),即经过足够的时间,所有的人都将被传染。

Gossip的性能

上述流行病传染模型为分析Gossip的性能提供了基础。在Gossip性能中,我们可以认为: β=b/n(因为对每个节点而言,被其他节点选中的概率就是b/n)。我们令t=clog(n),可以得到:

y≈(n+1)−1/ncb−2

这表明,仅需要O(log(n))个回合,gossip协议即可将信息传递到所有的节点。 根据分析可得,Gossip协议具有以下的特点:

  • 低延迟。仅仅需要O(log(n))个回合的传递时间。
  • 非常可靠。仅有1/ncb−2个节点不会收到信息。
  • 轻量级。每个节点传送了cblog(n)次信息。

于此同时,Gossip协议的容错性比较高,例如,50的丢包率等价于使用b/2带代替b进行分析;50的节点错误等价于使用n/2来代替n,同时使用b/2来代替b进行分析,其分析结果不用带来数量级上的变化。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值