一、gossip是什么
gossip协议又称epidemic协议,是基于流行病传播方式的节点或进程之间信息交换的协议,在分布式系统中被广泛使用,比如我们可以使用gossip协议来确保网络中所有节点的数据一样。
gossip协议利用一种随机的方式将信息传播到整个网络中,并在一定时间内是的系统内的所有节点的数据一致。gossip其实是一种去中心化思路的分布式协议,解决状态在集群中的传播和状态一致性的保证这两个问题。
二、gossip协议的优势
2.1、可扩展性(Scalable)
gossip是可扩展的,一般需要O(logN) 轮就可以将信息传播到所有的节点,其中N代表节点的个数
2.2、容错(fault-tolerance)
网络中任何节点重启 或宕机都不会影响gossip协议的运行
2.3、健壮性(Robust)
gossip协议是去中心化协议,所以在集群中的所有节点都是对等的,没有特殊的节点,这样任何节点出问题都不会阻止其他节点继续发消息,任何节点都可以随时加入或离开,不会影响整个系统
2.4、最终一致性(Convergent consistency)
gossip协议实现信息指数级的快速传播,因此在有新信息需要传播时,消息可以快速地发送到全局节点,在有限的时间内能够做到所有节点都拥有最新的数据。
三、gossip协议在工程中的使用
- DB replication
- 消息传播
- cluster membership
- failure检测
- overlay networks
- aggregations(比如计算平均值、最大值及总和)
四、gossip协议的通信方式
-
Push:发起信息交换的节点 A 随机选择联系节点 B,并向其发送自己的信息,节点 B 在收到信息后更新比自己新的数据,一般拥有新信息的节点才会作为发起节点。
-
Pull:发起信息交换的节点 A 随机选择联系节点 B,并从对方获取信息。一般无新信息的节点才会作为发起节点。
-
Push&Pull:发起信息交换的节点 A 向选择的节点 B 发送信息,同时从对方获取数据,用于更新自己的本地数据。