Gossip协议

作者: d866c6045d74 | 来源:发表于2017-10-20 11:32 被阅读737次

    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进行分析,其分析结果不用带来数量级上的变化。

    相关文章

      网友评论

        本文标题:Gossip协议

        本文链接:https://www.haomeiwen.com/subject/igomuxtx.html