zoukankan      html  css  js  c++  java
  • 分布式一致性协议Gossip

      Gossip是一种分布式一致性协议,在 Cassandra、Akka、Redis 都有用到,也是P2P网络的核心技术。Gossip是一种去中心化、容错而又最终一致性的算法。

    Gossip协议设计思路

      Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。就像流言蜚语一样,利用一种随机、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内的所有节点数据一致。

          

      Gossip演示图

     

       这里一共有 16 个节点,节点 1 为初始被感染节点,通过 Gossip 过程,最终所有节点都被感染。

    Gossip 的优点

      1. 扩展性

       网络可以允许节点的任意增加和减少,新增加的节点的状态最终会与其他节点一致。

      2. 容错

       网络中任何节点的宕机和重启都不会影响 Gossip 消息的传播,Gossip 协议具有天然的分布式系统容错特性。

      3. 去中心化

        Gossip 协议不要求任何中心节点,所有节点都可以是对等的,任何一个节点无需知道整个网络状况,只要网络是连通的,任意一个节点就可以把消息散播到全网。

      4. 一致性收敛

        Gossip 协议中的消息会以一传十、十传百一样的指数级速度在网络中快速传播,因此系统状态的不一致可以在很快的时间内收敛到一致。消息传播速度达到了 logN。

      5. 简单

        Gossip 协议的过程极其简单,实现起来几乎没有太多复杂性。

    Gossip的缺陷

      分布式网络中,没有一种完美的解决方案,Gossip 协议跟其他协议一样,也有一些不可避免的缺陷,主要是两个:

      1. 消息的延迟

        由于 Gossip 协议中,节点只会随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网的,因此使用 Gossip 协议会造成不可避免的消息延迟。不适合用在对实时性要求较高的场景下。

      2. 消息冗余

       Gossip 协议规定,节点会定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此就不可避免的存在消息重复发送给同一节点的情况,造成了消息的冗余,同时也增加了收到消息的节点的处理压力。而且,由于是定期发送,因此,即使收到了消息的节点还会反复收到重复消息,加重了消息的冗余。

    参考  

      https://zhuanlan.zhihu.com/p/41228196

  • 相关阅读:
    day4-生成器
    第三天-函数
    编码问题
    可变不可变类型总结
    由var与let引起的百度地图所有的覆盖点的信息都是最后一个的
    《企业应用架构模式》 三
    IndexDB
    ESA与SOA
    SOA
    Dubbo(一)
  • 原文地址:https://www.cnblogs.com/songgj/p/10762556.html
Copyright © 2011-2022 走看看