开篇:
- gossip是传播协议,在很多地方都有用到,比如在Redis集群中用于节点间消息通知,上下线,角色修改等消息传播等。
- gossip顾名思义类似于病毒传播的场景,一传十,十传百。
流程:
- gossip集群中每个节点都有其他n个或全部节点的通讯方式。
- 开始时一个节点被感染,会从n个节点中选出规定节点数(比如10个)进行传播,传播后被感染一共11个节点再执行这个步骤,就会有新的110个节点被感染,以此类推,直到所有节点都被感染。
- 当然在传播过程中会出现重复传播,不过经过一定次数传播后所有节点必定会都被传染,周期是O(logN) 。
- 单个节点会多次传播,但不会重复传播,如果之前已经传染过邻居A,那下次就不会再传染了。
其他:
- 传播过程中,传播节点不会管消息是否被接收到。
- raft:gossip和raft有一些共性,都可以解决分布式一致性的问题,但raft有Leader、强一致,gossip是对等模式没有Leader、最终一致,可能这个对比不太贴切,raft一般会和paxos等强一致性算法作对比。
网友评论