#扒卦(#gossip)是一种去中心化的分布一致性协议,旨在保证数据在集群中的传播和状态具有一致性。
#扒卦协议 的工作原理类似于“流言蜚语”传播。扒卦协议利用一种随机的方式将信息传播到整个网络,并在一定时间内,使得系统内的所有节点数据一致。
#扒卦(#gossip)是一种去中心化的分布一致性协议,旨在保证数据在集群中的传播和状态具有一致性。
#扒卦协议 的工作原理类似于“流言蜚语”传播。扒卦协议利用一种随机的方式将信息传播到整个网络,并在一定时间内,使得系统内的所有节点数据一致。
扒卦协议(Gossip)执行过程:
种子节点周期性的散播消息【假定把周期限定为 1秒】。
被感染节点随机选择;选择N个邻接节点散播消息【假定tan-out(扇出)设置为6,即每次最多往6个节点散播】。
节点只接收消息不反馈结果。
每次散播消息都选择尚未发送过的节点作为接收端节点。
收到消息的节点不再往发送节点回播:A->B,那么B进行散播的时候,不再发给 A。
扒卦协议的信息传播和扩散通常需要由种子节点发起。整个传播过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。
扒卦协议是一个多主协议,在一个时区段内所有写操作可以由不同节点发起,并且同步给其他副本。
扒卦协议内组成的网络节点都是对等节点,以及“点对点”(P2P)的非结构化网络。
扒卦协议的通信方式
扒卦协议最终目的是将数据分发到网络中的每一个节点。根据不同的具体应用场景,网络中两个节点之问存在三种通信方式:推送模式(Push)、拉取模式(Pull)、推拉并举模式(Push/Pull)。
*推送:节点 A 将数据
*拉取: A 仅将数据
*推拉并举:与推送类似,但是多了一步拉取,A 推送后再将本地比 B新的数据推送给 B,B则更新本地。如果把两个节点数据同步一次定义为一个周期,则在一个周期内,推送需通信1次,拉取需2次,推拉并举则需 3次。虽然消息数增加了,但从效果上来讲是最好,理论上一个周期内可以使两个节点完全一致。直观上,推拉并举的收敛速度也是最快的。